@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,2 @@
1
+ export declare const SCHEMA_SQL = "\n-- Documents table: one row per markdown file\nCREATE TABLE IF NOT EXISTS documents (\n doc_id TEXT PRIMARY KEY,\n doc_type TEXT NOT NULL,\n schema_ref TEXT NOT NULL,\n file_path TEXT NOT NULL UNIQUE,\n file_hash TEXT NOT NULL,\n version INTEGER NOT NULL DEFAULT 1,\n deleted INTEGER NOT NULL DEFAULT 0,\n indexed_at TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT ''\n);\nCREATE INDEX IF NOT EXISTS idx_documents_type ON documents(doc_type);\nCREATE INDEX IF NOT EXISTS idx_documents_path ON documents(file_path);\nCREATE INDEX IF NOT EXISTS idx_documents_deleted ON documents(deleted);\n\n-- Extracted objects table: inline annotations and indexed fields\nCREATE TABLE IF NOT EXISTS objects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n primitive TEXT NOT NULL,\n subtype TEXT NOT NULL,\n value TEXT NOT NULL,\n normalized_value TEXT,\n label TEXT NOT NULL,\n role TEXT,\n doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n source_line INTEGER NOT NULL,\n block_id TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_objects_primitive ON objects(primitive);\nCREATE INDEX IF NOT EXISTS idx_objects_subtype ON objects(subtype);\nCREATE INDEX IF NOT EXISTS idx_objects_value ON objects(value);\nCREATE INDEX IF NOT EXISTS idx_objects_doc_id ON objects(doc_id);\nCREATE INDEX IF NOT EXISTS idx_objects_normalized ON objects(normalized_value);\n\n-- Relationships table: edges between documents\nCREATE TABLE IF NOT EXISTS relationships (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n source_doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n target_doc_id TEXT NOT NULL,\n field TEXT NOT NULL,\n relation_type TEXT NOT NULL CHECK(relation_type IN ('ref', 'mention'))\n);\nCREATE INDEX IF NOT EXISTS idx_rel_source ON relationships(source_doc_id);\nCREATE INDEX IF NOT EXISTS idx_rel_target ON relationships(target_doc_id);\nCREATE INDEX IF NOT EXISTS idx_rel_type ON relationships(relation_type);\n\n-- Blocks table: heading-delimited sections\nCREATE TABLE IF NOT EXISTS blocks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n block_id TEXT,\n heading TEXT NOT NULL,\n level INTEGER NOT NULL,\n start_line INTEGER NOT NULL,\n end_line INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_blocks_doc_id ON blocks(doc_id);\nCREATE INDEX IF NOT EXISTS idx_blocks_block_id ON blocks(block_id);\n\n-- Field index: denormalized frontmatter fields for fast filtering\nCREATE TABLE IF NOT EXISTS field_index (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n field_name TEXT NOT NULL,\n field_value TEXT,\n numeric_value REAL,\n field_type TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_field_doc ON field_index(doc_id);\nCREATE INDEX IF NOT EXISTS idx_field_name_value ON field_index(field_name, field_value);\nCREATE INDEX IF NOT EXISTS idx_field_name_numeric ON field_index(field_name, numeric_value);\n\n-- Engine meta key/value store (0.7.4, fup-2026-093). Holds per-type schema\n-- index fingerprints so indexAll can detect \"indexed-field set changed since\n-- last run\" and force-rebuild affected types regardless of file-hash skip.\n-- Keys are namespaced (e.g. schema_index_fp:<doc_type>).\nCREATE TABLE IF NOT EXISTS engine_meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n";
2
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/backend/sqlite/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,ohHAkFtB,CAAC"}
@@ -0,0 +1,88 @@
1
+ // ============================================================================
2
+ // SQLite Schema
3
+ // CREATE TABLE statements and migrations for the MAAD backend.
4
+ // ============================================================================
5
+ export const SCHEMA_SQL = `
6
+ -- Documents table: one row per markdown file
7
+ CREATE TABLE IF NOT EXISTS documents (
8
+ doc_id TEXT PRIMARY KEY,
9
+ doc_type TEXT NOT NULL,
10
+ schema_ref TEXT NOT NULL,
11
+ file_path TEXT NOT NULL UNIQUE,
12
+ file_hash TEXT NOT NULL,
13
+ version INTEGER NOT NULL DEFAULT 1,
14
+ deleted INTEGER NOT NULL DEFAULT 0,
15
+ indexed_at TEXT NOT NULL,
16
+ updated_at TEXT NOT NULL DEFAULT ''
17
+ );
18
+ CREATE INDEX IF NOT EXISTS idx_documents_type ON documents(doc_type);
19
+ CREATE INDEX IF NOT EXISTS idx_documents_path ON documents(file_path);
20
+ CREATE INDEX IF NOT EXISTS idx_documents_deleted ON documents(deleted);
21
+
22
+ -- Extracted objects table: inline annotations and indexed fields
23
+ CREATE TABLE IF NOT EXISTS objects (
24
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
25
+ primitive TEXT NOT NULL,
26
+ subtype TEXT NOT NULL,
27
+ value TEXT NOT NULL,
28
+ normalized_value TEXT,
29
+ label TEXT NOT NULL,
30
+ role TEXT,
31
+ doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
32
+ source_line INTEGER NOT NULL,
33
+ block_id TEXT
34
+ );
35
+ CREATE INDEX IF NOT EXISTS idx_objects_primitive ON objects(primitive);
36
+ CREATE INDEX IF NOT EXISTS idx_objects_subtype ON objects(subtype);
37
+ CREATE INDEX IF NOT EXISTS idx_objects_value ON objects(value);
38
+ CREATE INDEX IF NOT EXISTS idx_objects_doc_id ON objects(doc_id);
39
+ CREATE INDEX IF NOT EXISTS idx_objects_normalized ON objects(normalized_value);
40
+
41
+ -- Relationships table: edges between documents
42
+ CREATE TABLE IF NOT EXISTS relationships (
43
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
44
+ source_doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
45
+ target_doc_id TEXT NOT NULL,
46
+ field TEXT NOT NULL,
47
+ relation_type TEXT NOT NULL CHECK(relation_type IN ('ref', 'mention'))
48
+ );
49
+ CREATE INDEX IF NOT EXISTS idx_rel_source ON relationships(source_doc_id);
50
+ CREATE INDEX IF NOT EXISTS idx_rel_target ON relationships(target_doc_id);
51
+ CREATE INDEX IF NOT EXISTS idx_rel_type ON relationships(relation_type);
52
+
53
+ -- Blocks table: heading-delimited sections
54
+ CREATE TABLE IF NOT EXISTS blocks (
55
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
56
+ doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
57
+ block_id TEXT,
58
+ heading TEXT NOT NULL,
59
+ level INTEGER NOT NULL,
60
+ start_line INTEGER NOT NULL,
61
+ end_line INTEGER NOT NULL
62
+ );
63
+ CREATE INDEX IF NOT EXISTS idx_blocks_doc_id ON blocks(doc_id);
64
+ CREATE INDEX IF NOT EXISTS idx_blocks_block_id ON blocks(block_id);
65
+
66
+ -- Field index: denormalized frontmatter fields for fast filtering
67
+ CREATE TABLE IF NOT EXISTS field_index (
68
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
69
+ doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
70
+ field_name TEXT NOT NULL,
71
+ field_value TEXT,
72
+ numeric_value REAL,
73
+ field_type TEXT NOT NULL
74
+ );
75
+ CREATE INDEX IF NOT EXISTS idx_field_doc ON field_index(doc_id);
76
+ CREATE INDEX IF NOT EXISTS idx_field_name_value ON field_index(field_name, field_value);
77
+ CREATE INDEX IF NOT EXISTS idx_field_name_numeric ON field_index(field_name, numeric_value);
78
+
79
+ -- Engine meta key/value store (0.7.4, fup-2026-093). Holds per-type schema
80
+ -- index fingerprints so indexAll can detect "indexed-field set changed since
81
+ -- last run" and force-rebuild affected types regardless of file-hash skip.
82
+ -- Keys are namespaced (e.g. schema_index_fp:<doc_type>).
83
+ CREATE TABLE IF NOT EXISTS engine_meta (
84
+ key TEXT PRIMARY KEY,
85
+ value TEXT NOT NULL
86
+ );
87
+ `;
88
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/backend/sqlite/schema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gBAAgB;AAChB,+DAA+D;AAC/D,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateClaudeMd(): string;
2
+ //# sourceMappingURL=claude-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../src/claude-md.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,IAAI,MAAM,CA2FzC"}
@@ -0,0 +1,97 @@
1
+ // ============================================================================
2
+ // CLAUDE.md Generator — Agent instructions for MCP-first MAAD workflow
3
+ // Generated on init. Tells the LLM how to work with this project.
4
+ // ============================================================================
5
+ export function generateClaudeMd() {
6
+ return `# MAAD Project — Agent Instructions
7
+
8
+ ## How to work with this project
9
+
10
+ This is a MAAD project. You have MCP tools for all data operations.
11
+
12
+ **Use MAAD MCP tools for everything.** Do not use bash, shell commands, or direct file reads for data access. If a tool fails, report the error — do not fall back to shell.
13
+
14
+ ## Boot sequence
15
+
16
+ 1. Run \`maad_summary\` to see what's in this project
17
+ 2. If summary shows **zero types and zero documents** → this is an empty project. Read \`_skills/architect-core.md\` and enter Architect mode to design and deploy the database.
18
+ 3. If summary shows existing types and documents → this is a live project. Proceed with normal operations below.
19
+ 4. Use \`maad_schema <type>\` to understand record structure before writing
20
+ 5. Use \`maad_health\` if something seems wrong
21
+
22
+ ## Empty project → Architect mode
23
+
24
+ When this project has no types defined:
25
+ 1. Read \`_skills/architect-core.md\` for the full Architect role specification
26
+ 2. Read \`_skills/schema-guide.md\` for field type reference
27
+ 3. Read \`_skills/import-guide.md\` if importing existing data
28
+ 4. Follow the Architect workflow: discover requirements → design schema → present plan → build
29
+
30
+ The Architect role handles: schema design, registry creation, data import, troubleshooting, and handoff to normal operations.
31
+
32
+ ## Live project → User mode
33
+
34
+ ### Reading data
35
+
36
+ - \`maad_summary\` — project snapshot (start here)
37
+ - \`maad_get\` — read a record (hot/warm/cold/full)
38
+ - \`maad_query\` — find records by type, filters, and field projection
39
+ - \`maad_search\` — find extracted objects across all records
40
+ - \`maad_related\` — traverse relationships between records
41
+ - \`maad_aggregate\` — count/sum/avg/min/max grouped by a field. Supports multi-hop ref chains (\`a->b->c\`) for cross-doctype aggregates. **Use instead of iterating records to compute totals.**
42
+ - \`maad_join\` — query + follow refs + project fields from both sides in one call. **Use instead of \`query\` → \`get\` → \`get\` chains.**
43
+
44
+ ### Writing data
45
+
46
+ - **Always** call \`maad_schema <type>\` before creating or updating records
47
+ - \`maad_create\` — new record (engine validates against schema)
48
+ - \`maad_update\` — modify fields or body (use expectedVersion for safe writes)
49
+ - \`maad_bulk_create\` — create multiple records in one call (much faster for imports)
50
+ - \`maad_bulk_update\` — update multiple records in one call
51
+ - **Execute individual writes sequentially** — do not parallelize single create/update calls
52
+
53
+ ### Importing raw data
54
+
55
+ When onboarding new data into this project:
56
+
57
+ 1. Read the raw files to understand the data
58
+ 2. Read \`_skills/architect-core.md\` for schema design guidance
59
+ 3. Design the registry and schemas
60
+ 4. Call \`maad_reload\` to pick up the new registry and schemas
61
+ 5. Create records using \`maad_create\` (master) or \`maad_update --append\` (transaction)
62
+ 6. Call \`maad_reindex\` after bulk creation
63
+ 7. Call \`maad_summary\` to confirm
64
+
65
+ ### Frontmatter format
66
+
67
+ Every markdown record must have a YAML frontmatter header:
68
+
69
+ \`\`\`yaml
70
+ ---
71
+ doc_id: <unique-id>
72
+ doc_type: <registered-type>
73
+ schema: <type.version>
74
+ field1: value1
75
+ field2: value2
76
+ ---
77
+ \`\`\`
78
+
79
+ ### Server management
80
+
81
+ - \`maad_reload\` — reload registry and schemas after config changes (no restart needed)
82
+ - \`maad_health\` — check engine status
83
+ - \`maad_reindex\` — rebuild index after bulk file changes
84
+
85
+ ## Rules
86
+
87
+ 1. MCP tools only — no bash for data operations
88
+ 2. Schema first — call \`maad_schema\` before writes
89
+ 3. Reload after config changes — call \`maad_reload\` after editing registry or schemas
90
+ 4. Sequential writes — never parallelize create/update/delete operations
91
+ 5. Report errors — if a tool returns \`ok: false\`, report what happened
92
+ 6. Empty project = Architect mode — read the skill files and design the database
93
+ 7. Use \`maad_aggregate\` for group-by totals — don't page through records to compute counts, sums, or averages. Ref chains like \`client->industry\` enable cross-doctype groupings in one call.
94
+ 8. Use \`maad_join\` to follow refs and collect fields in one call — don't chain query/get loops.
95
+ `;
96
+ }
97
+ //# sourceMappingURL=claude-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../src/claude-md.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uEAAuE;AACvE,kEAAkE;AAClE,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFR,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CliContext } from '../helpers.js';
2
+ export declare function cmdHistory(ctx: CliContext): Promise<void>;
3
+ export declare function cmdAudit(ctx: CliContext): Promise<void>;
4
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/D;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D"}
@@ -0,0 +1,39 @@
1
+ // ============================================================================
2
+ // Audit commands — history, audit
3
+ // ============================================================================
4
+ import { docId } from '../../types.js';
5
+ import { initEngine } from '../helpers.js';
6
+ export async function cmdHistory(ctx) {
7
+ const id = ctx.args[1];
8
+ if (!id) {
9
+ console.error('Usage: maad history <doc_id>');
10
+ process.exit(1);
11
+ }
12
+ const engine = await initEngine(ctx);
13
+ const result = await engine.history(docId(id));
14
+ if (!result.ok) {
15
+ console.error('History failed:');
16
+ for (const e of result.errors)
17
+ console.error(` ${e.code}: ${e.message}`);
18
+ engine.close();
19
+ process.exit(1);
20
+ }
21
+ console.log(JSON.stringify(result.value, null, 2));
22
+ engine.close();
23
+ }
24
+ export async function cmdAudit(ctx) {
25
+ const sinceIdx = ctx.args.indexOf('--since');
26
+ const since = sinceIdx >= 0 ? ctx.args[sinceIdx + 1] : undefined;
27
+ const engine = await initEngine(ctx);
28
+ const result = await engine.audit(since ? { since } : {});
29
+ if (!result.ok) {
30
+ console.error('Audit failed:');
31
+ for (const e of result.errors)
32
+ console.error(` ${e.code}: ${e.message}`);
33
+ engine.close();
34
+ process.exit(1);
35
+ }
36
+ console.log(JSON.stringify(result.value, null, 2));
37
+ engine.close();
38
+ }
39
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAe;IAC9C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAe;IAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface AuthCliOptions {
2
+ instancePath: string | undefined;
3
+ args: string[];
4
+ }
5
+ /** Shared dispatcher — called from the top-level CLI router. */
6
+ export declare function cmdAuth(opts: AuthCliOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAuBA,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,gEAAgE;AAChE,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjE"}
@@ -0,0 +1,242 @@
1
+ // ============================================================================
2
+ // CLI auth subcommands — 0.7.0 Scoped Auth & Identity (P3)
3
+ //
4
+ // maad auth issue-token --role=... --projects=... [--name] [--agent]
5
+ // [--user] [--expires]
6
+ // maad auth revoke-token --id=tok-...
7
+ // maad auth rotate-token --id=tok-...
8
+ // maad auth list-tokens [--include-revoked]
9
+ // maad auth show-token --id=tok-...
10
+ //
11
+ // All commands operate on `<instance-root>/_auth/tokens.yaml`. Requires
12
+ // --instance (or MAAD_INSTANCE env) — synthetic single-project mode has no
13
+ // token registry. Plaintext is printed ONCE to stdout at issue/rotate time
14
+ // and never again recoverable from the registry.
15
+ // ============================================================================
16
+ import path from 'node:path';
17
+ import { loadInstance } from '../../instance/config.js';
18
+ import { TokenStore } from '../../auth/token-store.js';
19
+ import { tokenId } from '../../auth/types.js';
20
+ /** Shared dispatcher — called from the top-level CLI router. */
21
+ export async function cmdAuth(opts) {
22
+ const sub = opts.args[1];
23
+ if (!sub) {
24
+ printAuthHelp();
25
+ return;
26
+ }
27
+ const store = await openStore(opts.instancePath);
28
+ switch (sub) {
29
+ case 'issue-token':
30
+ await cmdIssue(store, opts.args.slice(2));
31
+ break;
32
+ case 'revoke-token':
33
+ await cmdRevoke(store, opts.args.slice(2));
34
+ break;
35
+ case 'rotate-token':
36
+ await cmdRotate(store, opts.args.slice(2));
37
+ break;
38
+ case 'list-tokens':
39
+ cmdList(store, opts.args.slice(2));
40
+ break;
41
+ case 'show-token':
42
+ cmdShow(store, opts.args.slice(2));
43
+ break;
44
+ case 'help':
45
+ case '--help':
46
+ case '-h':
47
+ printAuthHelp();
48
+ break;
49
+ default:
50
+ console.error(`Unknown auth subcommand: ${sub}`);
51
+ printAuthHelp();
52
+ process.exit(1);
53
+ }
54
+ }
55
+ // --- Individual handlers ---------------------------------------------------
56
+ async function cmdIssue(store, args) {
57
+ const flags = parseFlags(args);
58
+ const role = flags['role'];
59
+ const projectsRaw = flags['projects'];
60
+ if (!role || !projectsRaw) {
61
+ console.error('Usage: maad auth issue-token --role=<reader|writer|admin> --projects=<csv-or-*> [--name=<label>] [--agent=<id>] [--user=<id>] [--expires=<iso>]');
62
+ process.exit(1);
63
+ }
64
+ if (role !== 'reader' && role !== 'writer' && role !== 'admin') {
65
+ console.error(`--role must be reader|writer|admin (got "${role}")`);
66
+ process.exit(1);
67
+ }
68
+ const projects = parseProjects(projectsRaw);
69
+ const spec = { role: role, projects };
70
+ if (flags['name'])
71
+ spec.name = flags['name'];
72
+ if (flags['agent'])
73
+ spec.agentId = flags['agent'];
74
+ if (flags['user'])
75
+ spec.userId = flags['user'];
76
+ if (flags['expires'])
77
+ spec.expiresAt = flags['expires'];
78
+ const result = await store.issue(spec);
79
+ if (!result.ok) {
80
+ console.error('issue-token failed:');
81
+ for (const e of result.errors)
82
+ console.error(` ${e.code}: ${e.message}`);
83
+ process.exit(1);
84
+ }
85
+ // Plaintext on stdout ONCE; record metadata as structured stderr note so
86
+ // scripts can `maad auth issue-token ... | tee -a client.token`.
87
+ console.log(result.value.plaintext);
88
+ console.error('\n⚠️ Store this token now — it will not be shown again.');
89
+ console.error('Record:');
90
+ console.error(JSON.stringify(result.value.record, null, 2));
91
+ }
92
+ async function cmdRevoke(store, args) {
93
+ const flags = parseFlags(args);
94
+ const id = flags['id'];
95
+ if (!id) {
96
+ console.error('Usage: maad auth revoke-token --id=<tok-xxx>');
97
+ process.exit(1);
98
+ }
99
+ const result = await store.revoke(tokenId(id));
100
+ if (!result.ok) {
101
+ console.error('revoke-token failed:');
102
+ for (const e of result.errors)
103
+ console.error(` ${e.code}: ${e.message}`);
104
+ process.exit(1);
105
+ }
106
+ console.log(JSON.stringify(result.value, null, 2));
107
+ }
108
+ async function cmdRotate(store, args) {
109
+ const flags = parseFlags(args);
110
+ const id = flags['id'];
111
+ if (!id) {
112
+ console.error('Usage: maad auth rotate-token --id=<tok-xxx>');
113
+ process.exit(1);
114
+ }
115
+ const result = await store.rotate(tokenId(id));
116
+ if (!result.ok) {
117
+ console.error('rotate-token failed:');
118
+ for (const e of result.errors)
119
+ console.error(` ${e.code}: ${e.message}`);
120
+ process.exit(1);
121
+ }
122
+ console.log(result.value.plaintext);
123
+ console.error('\n⚠️ Store this new token — old token is revoked and will not be shown again.');
124
+ console.error('New record:');
125
+ console.error(JSON.stringify(result.value.record, null, 2));
126
+ }
127
+ function cmdList(store, args) {
128
+ const flags = parseFlags(args);
129
+ const includeRevoked = flags['include-revoked'] !== undefined;
130
+ const list = store.list().filter(r => includeRevoked || r.revokedAt === undefined);
131
+ // Strip the hash from listing output — consumers never need to see it.
132
+ const sanitized = list.map(r => { const { hash, ...rest } = r; void hash; return rest; });
133
+ console.log(JSON.stringify(sanitized, null, 2));
134
+ }
135
+ function cmdShow(store, args) {
136
+ const flags = parseFlags(args);
137
+ const id = flags['id'];
138
+ if (!id) {
139
+ console.error('Usage: maad auth show-token --id=<tok-xxx>');
140
+ process.exit(1);
141
+ }
142
+ const record = store.lookupById(tokenId(id));
143
+ if (!record) {
144
+ console.error(`show-token: TOKEN_NOT_FOUND: No token with id ${id}`);
145
+ process.exit(1);
146
+ }
147
+ const { hash, ...rest } = record;
148
+ void hash;
149
+ console.log(JSON.stringify(rest, null, 2));
150
+ }
151
+ // --- Helpers ---------------------------------------------------------------
152
+ async function openStore(instancePath) {
153
+ if (!instancePath) {
154
+ console.error('auth commands require --instance <path> (or MAAD_INSTANCE env)');
155
+ console.error('Legacy --project single-project mode has no token registry.');
156
+ process.exit(1);
157
+ }
158
+ // Validate the instance file exists + is parseable; we don't need the instance
159
+ // itself but want a clean error if the operator pointed at a wrong path.
160
+ const instance = await loadInstance(instancePath);
161
+ if (!instance.ok) {
162
+ console.error('Failed to load instance:');
163
+ for (const e of instance.errors)
164
+ console.error(` ${e.code}: ${e.message}`);
165
+ process.exit(1);
166
+ }
167
+ const instanceRoot = path.dirname(path.resolve(instancePath));
168
+ const loaded = await TokenStore.load(instanceRoot);
169
+ if (!loaded.ok) {
170
+ console.error('Failed to load token registry:');
171
+ for (const e of loaded.errors)
172
+ console.error(` ${e.code}: ${e.message}`);
173
+ process.exit(1);
174
+ }
175
+ return loaded.value;
176
+ }
177
+ function parseFlags(args) {
178
+ const out = {};
179
+ for (let i = 0; i < args.length; i++) {
180
+ const a = args[i];
181
+ if (a.startsWith('--')) {
182
+ const eq = a.indexOf('=');
183
+ if (eq > 0) {
184
+ const key = a.slice(2, eq);
185
+ const val = a.slice(eq + 1);
186
+ out[key] = val;
187
+ }
188
+ else {
189
+ const key = a.slice(2);
190
+ const next = args[i + 1];
191
+ if (next !== undefined && !next.startsWith('--')) {
192
+ out[key] = next;
193
+ i++;
194
+ }
195
+ else {
196
+ out[key] = '';
197
+ }
198
+ }
199
+ }
200
+ }
201
+ return out;
202
+ }
203
+ function parseProjects(raw) {
204
+ return raw.split(',').map(s => s.trim()).filter(Boolean).map(entry => {
205
+ // Support per-project role syntax: `proj-a:reader`
206
+ const colon = entry.indexOf(':');
207
+ if (colon > 0) {
208
+ const name = entry.slice(0, colon);
209
+ const role = entry.slice(colon + 1);
210
+ if (role !== 'reader' && role !== 'writer' && role !== 'admin') {
211
+ console.error(`Invalid per-project role "${role}" in --projects; expected reader|writer|admin`);
212
+ process.exit(1);
213
+ }
214
+ return { name, role: role };
215
+ }
216
+ return { name: entry };
217
+ });
218
+ }
219
+ function printAuthHelp() {
220
+ console.error(`maad auth — token registry operations
221
+
222
+ Subcommands:
223
+ issue-token --role=... --projects=... [--name] [--agent] [--user] [--expires]
224
+ revoke-token --id=tok-...
225
+ rotate-token --id=tok-...
226
+ list-tokens [--include-revoked]
227
+ show-token --id=tok-...
228
+
229
+ All commands require --instance <path> (or MAAD_INSTANCE env) pointing at the
230
+ instance config. Registry lives at <instance-root>/_auth/tokens.yaml.
231
+
232
+ Examples:
233
+ maad --instance /etc/maad/instance.yaml auth issue-token \\
234
+ --role=admin --name='brain-app-gateway' --projects='*' --agent=agt-brain-app
235
+
236
+ maad --instance /etc/maad/instance.yaml auth issue-token \\
237
+ --role=writer --projects='proj-a,proj-b:reader' --agent=agt-scoped
238
+
239
+ maad --instance /etc/maad/instance.yaml auth rotate-token --id=tok-abc123
240
+ `);
241
+ }
242
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CliContext } from '../helpers.js';
2
+ export declare function cmdScan(ctx: CliContext): Promise<void>;
3
+ export declare function cmdSummary(ctx: CliContext): Promise<void>;
4
+ export declare function cmdDescribe(ctx: CliContext): Promise<void>;
5
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5D;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE"}
@@ -0,0 +1,48 @@
1
+ // ============================================================================
2
+ // Discover commands — scan, summary, describe
3
+ // ============================================================================
4
+ import path from 'node:path';
5
+ import { scanFile, scanDirectory } from '../../scanner.js';
6
+ import { initEngine } from '../helpers.js';
7
+ export async function cmdScan(ctx) {
8
+ const target = ctx.args[1];
9
+ if (!target) {
10
+ console.error('Usage: maad scan <file.md|directory>');
11
+ process.exit(1);
12
+ }
13
+ const absTarget = path.resolve(target);
14
+ const { statSync } = await import('node:fs');
15
+ let stat;
16
+ try {
17
+ stat = statSync(absTarget);
18
+ }
19
+ catch {
20
+ console.error(`Not found: ${absTarget}`);
21
+ process.exit(1);
22
+ }
23
+ if (stat.isFile()) {
24
+ const result = await scanFile(absTarget);
25
+ console.log(JSON.stringify(result, null, 2));
26
+ }
27
+ else if (stat.isDirectory()) {
28
+ const result = await scanDirectory(absTarget);
29
+ console.log(JSON.stringify(result, null, 2));
30
+ }
31
+ else {
32
+ console.error('Target must be a file or directory');
33
+ process.exit(1);
34
+ }
35
+ }
36
+ export async function cmdSummary(ctx) {
37
+ const engine = await initEngine(ctx);
38
+ const result = engine.summary();
39
+ console.log(JSON.stringify(result, null, 2));
40
+ engine.close();
41
+ }
42
+ export async function cmdDescribe(ctx) {
43
+ const engine = await initEngine(ctx);
44
+ const desc = engine.describe();
45
+ console.log(JSON.stringify(desc, null, 2));
46
+ engine.close();
47
+ }
48
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAE/E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAe;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAe;IAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAe;IAC/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CliContext } from '../helpers.js';
2
+ export declare function cmdInit(ctx: CliContext): Promise<void>;
3
+ export declare function cmdValidate(ctx: CliContext): Promise<void>;
4
+ export declare function cmdReindex(ctx: CliContext): Promise<void>;
5
+ export declare function cmdParse(ctx: CliContext): Promise<void>;
6
+ //# sourceMappingURL=maintain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/maintain.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD5D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD/D;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC7D"}