@maadb/core 0.0.1 → 0.7.10-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +371 -3
  3. package/dist/architect.d.ts +2 -0
  4. package/dist/architect.d.ts.map +1 -0
  5. package/dist/architect.js +273 -0
  6. package/dist/architect.js.map +1 -0
  7. package/dist/auth/resolve.d.ts +36 -0
  8. package/dist/auth/resolve.d.ts.map +1 -0
  9. package/dist/auth/resolve.js +77 -0
  10. package/dist/auth/resolve.js.map +1 -0
  11. package/dist/auth/token-store.d.ts +82 -0
  12. package/dist/auth/token-store.d.ts.map +1 -0
  13. package/dist/auth/token-store.js +464 -0
  14. package/dist/auth/token-store.js.map +1 -0
  15. package/dist/auth/types.d.ts +75 -0
  16. package/dist/auth/types.d.ts.map +1 -0
  17. package/dist/auth/types.js +15 -0
  18. package/dist/auth/types.js.map +1 -0
  19. package/dist/backend/adapter.d.ts +57 -0
  20. package/dist/backend/adapter.d.ts.map +1 -0
  21. package/dist/backend/adapter.js +6 -0
  22. package/dist/backend/adapter.js.map +1 -0
  23. package/dist/backend/index.d.ts +3 -0
  24. package/dist/backend/index.d.ts.map +1 -0
  25. package/dist/backend/index.js +2 -0
  26. package/dist/backend/index.js.map +1 -0
  27. package/dist/backend/sqlite/index.d.ts +63 -0
  28. package/dist/backend/sqlite/index.d.ts.map +1 -0
  29. package/dist/backend/sqlite/index.js +521 -0
  30. package/dist/backend/sqlite/index.js.map +1 -0
  31. package/dist/backend/sqlite/schema.d.ts +2 -0
  32. package/dist/backend/sqlite/schema.d.ts.map +1 -0
  33. package/dist/backend/sqlite/schema.js +88 -0
  34. package/dist/backend/sqlite/schema.js.map +1 -0
  35. package/dist/claude-md.d.ts +2 -0
  36. package/dist/claude-md.d.ts.map +1 -0
  37. package/dist/claude-md.js +97 -0
  38. package/dist/claude-md.js.map +1 -0
  39. package/dist/cli/commands/audit.d.ts +4 -0
  40. package/dist/cli/commands/audit.d.ts.map +1 -0
  41. package/dist/cli/commands/audit.js +39 -0
  42. package/dist/cli/commands/audit.js.map +1 -0
  43. package/dist/cli/commands/auth.d.ts +8 -0
  44. package/dist/cli/commands/auth.d.ts.map +1 -0
  45. package/dist/cli/commands/auth.js +242 -0
  46. package/dist/cli/commands/auth.js.map +1 -0
  47. package/dist/cli/commands/discover.d.ts +5 -0
  48. package/dist/cli/commands/discover.d.ts.map +1 -0
  49. package/dist/cli/commands/discover.js +48 -0
  50. package/dist/cli/commands/discover.js.map +1 -0
  51. package/dist/cli/commands/maintain.d.ts +6 -0
  52. package/dist/cli/commands/maintain.d.ts.map +1 -0
  53. package/dist/cli/commands/maintain.js +168 -0
  54. package/dist/cli/commands/maintain.js.map +1 -0
  55. package/dist/cli/commands/read.d.ts +7 -0
  56. package/dist/cli/commands/read.d.ts.map +1 -0
  57. package/dist/cli/commands/read.js +139 -0
  58. package/dist/cli/commands/read.js.map +1 -0
  59. package/dist/cli/commands/write.d.ts +4 -0
  60. package/dist/cli/commands/write.d.ts.map +1 -0
  61. package/dist/cli/commands/write.js +99 -0
  62. package/dist/cli/commands/write.js.map +1 -0
  63. package/dist/cli/helpers.d.ts +8 -0
  64. package/dist/cli/helpers.d.ts.map +1 -0
  65. package/dist/cli/helpers.js +17 -0
  66. package/dist/cli/helpers.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +296 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/cli.d.ts +3 -0
  72. package/dist/cli.d.ts.map +1 -0
  73. package/dist/cli.js +7 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/engine/audit.d.ts +15 -0
  76. package/dist/engine/audit.d.ts.map +1 -0
  77. package/dist/engine/audit.js +42 -0
  78. package/dist/engine/audit.js.map +1 -0
  79. package/dist/engine/backup.d.ts +9 -0
  80. package/dist/engine/backup.d.ts.map +1 -0
  81. package/dist/engine/backup.js +100 -0
  82. package/dist/engine/backup.js.map +1 -0
  83. package/dist/engine/composites.d.ts +6 -0
  84. package/dist/engine/composites.d.ts.map +1 -0
  85. package/dist/engine/composites.js +102 -0
  86. package/dist/engine/composites.js.map +1 -0
  87. package/dist/engine/context.d.ts +47 -0
  88. package/dist/engine/context.d.ts.map +1 -0
  89. package/dist/engine/context.js +55 -0
  90. package/dist/engine/context.js.map +1 -0
  91. package/dist/engine/docid-safe.d.ts +8 -0
  92. package/dist/engine/docid-safe.d.ts.map +1 -0
  93. package/dist/engine/docid-safe.js +0 -0
  94. package/dist/engine/docid-safe.js.map +1 -0
  95. package/dist/engine/helpers.d.ts +8 -0
  96. package/dist/engine/helpers.d.ts.map +1 -0
  97. package/dist/engine/helpers.js +102 -0
  98. package/dist/engine/helpers.js.map +1 -0
  99. package/dist/engine/index.d.ts +215 -0
  100. package/dist/engine/index.d.ts.map +1 -0
  101. package/dist/engine/index.js +494 -0
  102. package/dist/engine/index.js.map +1 -0
  103. package/dist/engine/indexing.d.ts +14 -0
  104. package/dist/engine/indexing.d.ts.map +1 -0
  105. package/dist/engine/indexing.js +225 -0
  106. package/dist/engine/indexing.js.map +1 -0
  107. package/dist/engine/journal.d.ts +32 -0
  108. package/dist/engine/journal.d.ts.map +1 -0
  109. package/dist/engine/journal.js +111 -0
  110. package/dist/engine/journal.js.map +1 -0
  111. package/dist/engine/logger.d.ts +19 -0
  112. package/dist/engine/logger.d.ts.map +1 -0
  113. package/dist/engine/logger.js +40 -0
  114. package/dist/engine/logger.js.map +1 -0
  115. package/dist/engine/maintenance.d.ts +15 -0
  116. package/dist/engine/maintenance.d.ts.map +1 -0
  117. package/dist/engine/maintenance.js +87 -0
  118. package/dist/engine/maintenance.js.map +1 -0
  119. package/dist/engine/mutex.d.ts +24 -0
  120. package/dist/engine/mutex.d.ts.map +1 -0
  121. package/dist/engine/mutex.js +50 -0
  122. package/dist/engine/mutex.js.map +1 -0
  123. package/dist/engine/pathguard.d.ts +16 -0
  124. package/dist/engine/pathguard.d.ts.map +1 -0
  125. package/dist/engine/pathguard.js +41 -0
  126. package/dist/engine/pathguard.js.map +1 -0
  127. package/dist/engine/reads.d.ts +25 -0
  128. package/dist/engine/reads.d.ts.map +1 -0
  129. package/dist/engine/reads.js +904 -0
  130. package/dist/engine/reads.js.map +1 -0
  131. package/dist/engine/types.d.ts +396 -0
  132. package/dist/engine/types.d.ts.map +1 -0
  133. package/dist/engine/types.js +5 -0
  134. package/dist/engine/types.js.map +1 -0
  135. package/dist/engine/writes.d.ts +10 -0
  136. package/dist/engine/writes.d.ts.map +1 -0
  137. package/dist/engine/writes.js +606 -0
  138. package/dist/engine/writes.js.map +1 -0
  139. package/dist/engine.d.ts +3 -0
  140. package/dist/engine.d.ts.map +1 -0
  141. package/dist/engine.js +6 -0
  142. package/dist/engine.js.map +1 -0
  143. package/dist/errors.d.ts +20 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +17 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/extractor/fields.d.ts +3 -0
  148. package/dist/extractor/fields.d.ts.map +1 -0
  149. package/dist/extractor/fields.js +58 -0
  150. package/dist/extractor/fields.js.map +1 -0
  151. package/dist/extractor/index.d.ts +7 -0
  152. package/dist/extractor/index.d.ts.map +1 -0
  153. package/dist/extractor/index.js +22 -0
  154. package/dist/extractor/index.js.map +1 -0
  155. package/dist/extractor/normalizers.d.ts +22 -0
  156. package/dist/extractor/normalizers.d.ts.map +1 -0
  157. package/dist/extractor/normalizers.js +250 -0
  158. package/dist/extractor/normalizers.js.map +1 -0
  159. package/dist/extractor/objects.d.ts +3 -0
  160. package/dist/extractor/objects.d.ts.map +1 -0
  161. package/dist/extractor/objects.js +33 -0
  162. package/dist/extractor/objects.js.map +1 -0
  163. package/dist/extractor/relationships.d.ts +3 -0
  164. package/dist/extractor/relationships.d.ts.map +1 -0
  165. package/dist/extractor/relationships.js +58 -0
  166. package/dist/extractor/relationships.js.map +1 -0
  167. package/dist/git/commit.d.ts +63 -0
  168. package/dist/git/commit.d.ts.map +1 -0
  169. package/dist/git/commit.js +161 -0
  170. package/dist/git/commit.js.map +1 -0
  171. package/dist/git/diff.d.ts +4 -0
  172. package/dist/git/diff.d.ts.map +1 -0
  173. package/dist/git/diff.js +56 -0
  174. package/dist/git/diff.js.map +1 -0
  175. package/dist/git/index.d.ts +63 -0
  176. package/dist/git/index.d.ts.map +1 -0
  177. package/dist/git/index.js +151 -0
  178. package/dist/git/index.js.map +1 -0
  179. package/dist/git/log.d.ts +13 -0
  180. package/dist/git/log.d.ts.map +1 -0
  181. package/dist/git/log.js +116 -0
  182. package/dist/git/log.js.map +1 -0
  183. package/dist/git/snapshot.d.ts +4 -0
  184. package/dist/git/snapshot.d.ts.map +1 -0
  185. package/dist/git/snapshot.js +65 -0
  186. package/dist/git/snapshot.js.map +1 -0
  187. package/dist/instance/config.d.ts +19 -0
  188. package/dist/instance/config.d.ts.map +1 -0
  189. package/dist/instance/config.js +107 -0
  190. package/dist/instance/config.js.map +1 -0
  191. package/dist/instance/pool.d.ts +138 -0
  192. package/dist/instance/pool.d.ts.map +1 -0
  193. package/dist/instance/pool.js +335 -0
  194. package/dist/instance/pool.js.map +1 -0
  195. package/dist/instance/session.d.ts +140 -0
  196. package/dist/instance/session.d.ts.map +1 -0
  197. package/dist/instance/session.js +267 -0
  198. package/dist/instance/session.js.map +1 -0
  199. package/dist/logging.d.ts +108 -0
  200. package/dist/logging.d.ts.map +1 -0
  201. package/dist/logging.js +120 -0
  202. package/dist/logging.js.map +1 -0
  203. package/dist/maad-md.d.ts +11 -0
  204. package/dist/maad-md.d.ts.map +1 -0
  205. package/dist/maad-md.js +252 -0
  206. package/dist/maad-md.js.map +1 -0
  207. package/dist/mcp/bulk-cap.d.ts +10 -0
  208. package/dist/mcp/bulk-cap.d.ts.map +1 -0
  209. package/dist/mcp/bulk-cap.js +37 -0
  210. package/dist/mcp/bulk-cap.js.map +1 -0
  211. package/dist/mcp/config.d.ts +18 -0
  212. package/dist/mcp/config.d.ts.map +1 -0
  213. package/dist/mcp/config.js +20 -0
  214. package/dist/mcp/config.js.map +1 -0
  215. package/dist/mcp/ctx.d.ts +17 -0
  216. package/dist/mcp/ctx.d.ts.map +1 -0
  217. package/dist/mcp/ctx.js +7 -0
  218. package/dist/mcp/ctx.js.map +1 -0
  219. package/dist/mcp/guardrails.d.ts +42 -0
  220. package/dist/mcp/guardrails.d.ts.map +1 -0
  221. package/dist/mcp/guardrails.js +58 -0
  222. package/dist/mcp/guardrails.js.map +1 -0
  223. package/dist/mcp/idempotency.d.ts +69 -0
  224. package/dist/mcp/idempotency.d.ts.map +1 -0
  225. package/dist/mcp/idempotency.js +168 -0
  226. package/dist/mcp/idempotency.js.map +1 -0
  227. package/dist/mcp/instance-reload.d.ts +23 -0
  228. package/dist/mcp/instance-reload.d.ts.map +1 -0
  229. package/dist/mcp/instance-reload.js +126 -0
  230. package/dist/mcp/instance-reload.js.map +1 -0
  231. package/dist/mcp/kinds.d.ts +22 -0
  232. package/dist/mcp/kinds.d.ts.map +1 -0
  233. package/dist/mcp/kinds.js +112 -0
  234. package/dist/mcp/kinds.js.map +1 -0
  235. package/dist/mcp/lifecycle.d.ts +8 -0
  236. package/dist/mcp/lifecycle.d.ts.map +1 -0
  237. package/dist/mcp/lifecycle.js +65 -0
  238. package/dist/mcp/lifecycle.js.map +1 -0
  239. package/dist/mcp/memory-pressure.d.ts +37 -0
  240. package/dist/mcp/memory-pressure.d.ts.map +1 -0
  241. package/dist/mcp/memory-pressure.js +179 -0
  242. package/dist/mcp/memory-pressure.js.map +1 -0
  243. package/dist/mcp/notifications.d.ts +87 -0
  244. package/dist/mcp/notifications.d.ts.map +1 -0
  245. package/dist/mcp/notifications.js +154 -0
  246. package/dist/mcp/notifications.js.map +1 -0
  247. package/dist/mcp/query-depth.d.ts +28 -0
  248. package/dist/mcp/query-depth.d.ts.map +1 -0
  249. package/dist/mcp/query-depth.js +43 -0
  250. package/dist/mcp/query-depth.js.map +1 -0
  251. package/dist/mcp/rate-limit.d.ts +60 -0
  252. package/dist/mcp/rate-limit.d.ts.map +1 -0
  253. package/dist/mcp/rate-limit.js +203 -0
  254. package/dist/mcp/rate-limit.js.map +1 -0
  255. package/dist/mcp/reload-signal.d.ts +13 -0
  256. package/dist/mcp/reload-signal.d.ts.map +1 -0
  257. package/dist/mcp/reload-signal.js +68 -0
  258. package/dist/mcp/reload-signal.js.map +1 -0
  259. package/dist/mcp/response.d.ts +109 -0
  260. package/dist/mcp/response.d.ts.map +1 -0
  261. package/dist/mcp/response.js +132 -0
  262. package/dist/mcp/response.js.map +1 -0
  263. package/dist/mcp/roles.d.ts +7 -0
  264. package/dist/mcp/roles.d.ts.map +1 -0
  265. package/dist/mcp/roles.js +57 -0
  266. package/dist/mcp/roles.js.map +1 -0
  267. package/dist/mcp/server.d.ts +33 -0
  268. package/dist/mcp/server.d.ts.map +1 -0
  269. package/dist/mcp/server.js +252 -0
  270. package/dist/mcp/server.js.map +1 -0
  271. package/dist/mcp/shutdown.d.ts +32 -0
  272. package/dist/mcp/shutdown.d.ts.map +1 -0
  273. package/dist/mcp/shutdown.js +130 -0
  274. package/dist/mcp/shutdown.js.map +1 -0
  275. package/dist/mcp/tools/audit.d.ts +4 -0
  276. package/dist/mcp/tools/audit.d.ts.map +1 -0
  277. package/dist/mcp/tools/audit.js +45 -0
  278. package/dist/mcp/tools/audit.js.map +1 -0
  279. package/dist/mcp/tools/auth.d.ts +4 -0
  280. package/dist/mcp/tools/auth.d.ts.map +1 -0
  281. package/dist/mcp/tools/auth.js +181 -0
  282. package/dist/mcp/tools/auth.js.map +1 -0
  283. package/dist/mcp/tools/backup.d.ts +4 -0
  284. package/dist/mcp/tools/backup.d.ts.map +1 -0
  285. package/dist/mcp/tools/backup.js +52 -0
  286. package/dist/mcp/tools/backup.js.map +1 -0
  287. package/dist/mcp/tools/discover.d.ts +4 -0
  288. package/dist/mcp/tools/discover.d.ts.map +1 -0
  289. package/dist/mcp/tools/discover.js +83 -0
  290. package/dist/mcp/tools/discover.js.map +1 -0
  291. package/dist/mcp/tools/instance.d.ts +15 -0
  292. package/dist/mcp/tools/instance.d.ts.map +1 -0
  293. package/dist/mcp/tools/instance.js +207 -0
  294. package/dist/mcp/tools/instance.js.map +1 -0
  295. package/dist/mcp/tools/maintain.d.ts +4 -0
  296. package/dist/mcp/tools/maintain.d.ts.map +1 -0
  297. package/dist/mcp/tools/maintain.js +123 -0
  298. package/dist/mcp/tools/maintain.js.map +1 -0
  299. package/dist/mcp/tools/read.d.ts +4 -0
  300. package/dist/mcp/tools/read.d.ts.map +1 -0
  301. package/dist/mcp/tools/read.js +304 -0
  302. package/dist/mcp/tools/read.js.map +1 -0
  303. package/dist/mcp/tools/write.d.ts +4 -0
  304. package/dist/mcp/tools/write.d.ts.map +1 -0
  305. package/dist/mcp/tools/write.js +342 -0
  306. package/dist/mcp/tools/write.js.map +1 -0
  307. package/dist/mcp/transport/auth.d.ts +41 -0
  308. package/dist/mcp/transport/auth.d.ts.map +1 -0
  309. package/dist/mcp/transport/auth.js +115 -0
  310. package/dist/mcp/transport/auth.js.map +1 -0
  311. package/dist/mcp/transport/http.d.ts +62 -0
  312. package/dist/mcp/transport/http.d.ts.map +1 -0
  313. package/dist/mcp/transport/http.js +357 -0
  314. package/dist/mcp/transport/http.js.map +1 -0
  315. package/dist/mcp/transport/pin.d.ts +15 -0
  316. package/dist/mcp/transport/pin.d.ts.map +1 -0
  317. package/dist/mcp/transport/pin.js +71 -0
  318. package/dist/mcp/transport/pin.js.map +1 -0
  319. package/dist/mcp/transport/telemetry.d.ts +79 -0
  320. package/dist/mcp/transport/telemetry.d.ts.map +1 -0
  321. package/dist/mcp/transport/telemetry.js +97 -0
  322. package/dist/mcp/transport/telemetry.js.map +1 -0
  323. package/dist/mcp/with-session.d.ts +26 -0
  324. package/dist/mcp/with-session.d.ts.map +1 -0
  325. package/dist/mcp/with-session.js +275 -0
  326. package/dist/mcp/with-session.js.map +1 -0
  327. package/dist/parser/annotations.d.ts +3 -0
  328. package/dist/parser/annotations.d.ts.map +1 -0
  329. package/dist/parser/annotations.js +41 -0
  330. package/dist/parser/annotations.js.map +1 -0
  331. package/dist/parser/blocks.d.ts +3 -0
  332. package/dist/parser/blocks.d.ts.map +1 -0
  333. package/dist/parser/blocks.js +101 -0
  334. package/dist/parser/blocks.js.map +1 -0
  335. package/dist/parser/frontmatter.d.ts +9 -0
  336. package/dist/parser/frontmatter.d.ts.map +1 -0
  337. package/dist/parser/frontmatter.js +33 -0
  338. package/dist/parser/frontmatter.js.map +1 -0
  339. package/dist/parser/index.d.ts +11 -0
  340. package/dist/parser/index.d.ts.map +1 -0
  341. package/dist/parser/index.js +54 -0
  342. package/dist/parser/index.js.map +1 -0
  343. package/dist/parser/matter.d.ts +3 -0
  344. package/dist/parser/matter.d.ts.map +1 -0
  345. package/dist/parser/matter.js +32 -0
  346. package/dist/parser/matter.js.map +1 -0
  347. package/dist/parser/tags.d.ts +3 -0
  348. package/dist/parser/tags.d.ts.map +1 -0
  349. package/dist/parser/tags.js +32 -0
  350. package/dist/parser/tags.js.map +1 -0
  351. package/dist/parser/verbatim.d.ts +4 -0
  352. package/dist/parser/verbatim.d.ts.map +1 -0
  353. package/dist/parser/verbatim.js +121 -0
  354. package/dist/parser/verbatim.js.map +1 -0
  355. package/dist/parser/yaml-profile.d.ts +4 -0
  356. package/dist/parser/yaml-profile.d.ts.map +1 -0
  357. package/dist/parser/yaml-profile.js +73 -0
  358. package/dist/parser/yaml-profile.js.map +1 -0
  359. package/dist/registry/index.d.ts +2 -0
  360. package/dist/registry/index.d.ts.map +1 -0
  361. package/dist/registry/index.js +2 -0
  362. package/dist/registry/index.js.map +1 -0
  363. package/dist/registry/loader.d.ts +4 -0
  364. package/dist/registry/loader.d.ts.map +1 -0
  365. package/dist/registry/loader.js +147 -0
  366. package/dist/registry/loader.js.map +1 -0
  367. package/dist/registry/types.d.ts +2 -0
  368. package/dist/registry/types.d.ts.map +1 -0
  369. package/dist/registry/types.js +5 -0
  370. package/dist/registry/types.js.map +1 -0
  371. package/dist/scanner.d.ts +57 -0
  372. package/dist/scanner.d.ts.map +1 -0
  373. package/dist/scanner.js +223 -0
  374. package/dist/scanner.js.map +1 -0
  375. package/dist/schema/index.d.ts +3 -0
  376. package/dist/schema/index.d.ts.map +1 -0
  377. package/dist/schema/index.js +3 -0
  378. package/dist/schema/index.js.map +1 -0
  379. package/dist/schema/loader.d.ts +4 -0
  380. package/dist/schema/loader.d.ts.map +1 -0
  381. package/dist/schema/loader.js +303 -0
  382. package/dist/schema/loader.js.map +1 -0
  383. package/dist/schema/precision.d.ts +6 -0
  384. package/dist/schema/precision.d.ts.map +1 -0
  385. package/dist/schema/precision.js +59 -0
  386. package/dist/schema/precision.js.map +1 -0
  387. package/dist/schema/validator.d.ts +21 -0
  388. package/dist/schema/validator.d.ts.map +1 -0
  389. package/dist/schema/validator.js +200 -0
  390. package/dist/schema/validator.js.map +1 -0
  391. package/dist/schema-md.d.ts +8 -0
  392. package/dist/schema-md.d.ts.map +1 -0
  393. package/dist/schema-md.js +98 -0
  394. package/dist/schema-md.js.map +1 -0
  395. package/dist/skill-files.d.ts +3 -0
  396. package/dist/skill-files.d.ts.map +1 -0
  397. package/dist/skill-files.js +362 -0
  398. package/dist/skill-files.js.map +1 -0
  399. package/dist/skills-scaffold.d.ts +10 -0
  400. package/dist/skills-scaffold.d.ts.map +1 -0
  401. package/dist/skills-scaffold.js +52 -0
  402. package/dist/skills-scaffold.js.map +1 -0
  403. package/dist/types.d.ts +309 -0
  404. package/dist/types.d.ts.map +1 -0
  405. package/dist/types.js +111 -0
  406. package/dist/types.js.map +1 -0
  407. package/dist/writer/index.d.ts +7 -0
  408. package/dist/writer/index.d.ts.map +1 -0
  409. package/dist/writer/index.js +32 -0
  410. package/dist/writer/index.js.map +1 -0
  411. package/dist/writer/serializer.d.ts +4 -0
  412. package/dist/writer/serializer.d.ts.map +1 -0
  413. package/dist/writer/serializer.js +103 -0
  414. package/dist/writer/serializer.js.map +1 -0
  415. package/dist/writer/template.d.ts +3 -0
  416. package/dist/writer/template.d.ts.map +1 -0
  417. package/dist/writer/template.js +27 -0
  418. package/dist/writer/template.js.map +1 -0
  419. package/package.json +59 -7
@@ -0,0 +1,464 @@
1
+ // ============================================================================
2
+ // TokenStore — 0.7.0 Scoped Auth registry primitive (dec-maadb-069 +
3
+ // dec-maadb-071)
4
+ //
5
+ // Loads and mutates `<instance-root>/_auth/tokens.yaml`. In-memory indexes
6
+ // by hash (lookup key) and by id (CLI / admin tools). Writes are atomic via
7
+ // tmp-file + rename.
8
+ //
9
+ // Scope of this module:
10
+ // - load, lookupByHash, lookupById, list, stats
11
+ // - issue (generates plaintext + hash, persists)
12
+ // - revoke (sets revokedAt, persists)
13
+ // - rotate (revokes old + issues new with preserved capabilities)
14
+ //
15
+ // NOT in scope here (later phases):
16
+ // - HTTP middleware resolveToken() — uses this store but lives in mcp/transport/auth.ts (P2)
17
+ // - Three-cap role composition — with-session.ts (P2)
18
+ // - CLI + admin MCP tools that call issue/revoke/rotate — P3
19
+ // ============================================================================
20
+ import { existsSync } from 'node:fs';
21
+ import { readFile, writeFile, rename, mkdir } from 'node:fs/promises';
22
+ import path from 'node:path';
23
+ import { createHash, randomBytes } from 'node:crypto';
24
+ import yaml from 'js-yaml';
25
+ import { ok, singleErr } from '../errors.js';
26
+ import { tokenId as toTokenId, tokenHash as toTokenHash, } from './types.js';
27
+ const TOKEN_PLAINTEXT_PREFIX = 'maad_pat_';
28
+ const TOKEN_PLAINTEXT_RANDOM_BYTES = 16; // 128 bits → 32 hex chars
29
+ const TOKEN_ID_RANDOM_BYTES = 6; // 48 bits → 12 hex chars
30
+ export const TOKENS_FILE_RELATIVE = path.join('_auth', 'tokens.yaml');
31
+ /**
32
+ * Generate a new plaintext bearer in the locked format: maad_pat_<32hex>.
33
+ * Shell-safe (hex only), 128 bits random, prefix visible in logs / scanners.
34
+ */
35
+ export function generatePlaintext() {
36
+ const random = randomBytes(TOKEN_PLAINTEXT_RANDOM_BYTES).toString('hex');
37
+ return `${TOKEN_PLAINTEXT_PREFIX}${random}`;
38
+ }
39
+ /** Plaintext → SHA-256 hex. The sole lookup key that persists. */
40
+ export function hashPlaintext(plaintext) {
41
+ return toTokenHash(createHash('sha256').update(plaintext, 'utf8').digest('hex'));
42
+ }
43
+ /** Format check — cheap defensive filter before hashing arbitrary bearers. */
44
+ export function looksLikeToken(bearer) {
45
+ if (!bearer.startsWith(TOKEN_PLAINTEXT_PREFIX))
46
+ return false;
47
+ const random = bearer.slice(TOKEN_PLAINTEXT_PREFIX.length);
48
+ return /^[0-9a-f]{32}$/.test(random);
49
+ }
50
+ function generateId() {
51
+ return toTokenId(`tok-${randomBytes(TOKEN_ID_RANDOM_BYTES).toString('hex')}`);
52
+ }
53
+ export class TokenStore {
54
+ filePath;
55
+ registryName;
56
+ byHash = new Map();
57
+ byId = new Map();
58
+ records = [];
59
+ constructor(filePath, registryName) {
60
+ this.filePath = filePath;
61
+ this.registryName = registryName;
62
+ }
63
+ /**
64
+ * Load tokens.yaml from `<instanceRoot>/_auth/tokens.yaml`. Returns an empty
65
+ * store if the file is absent — caller decides whether HTTP mode can boot
66
+ * against that state (the HTTP boot-mode matrix in the 0.7.0 spec).
67
+ *
68
+ * Parse errors are NOT silent: TOKENS_FILE_INVALID is returned with the
69
+ * file path + js-yaml message so operators can fix the file without
70
+ * guessing.
71
+ */
72
+ static async load(instanceRoot) {
73
+ const filePath = path.join(instanceRoot, TOKENS_FILE_RELATIVE);
74
+ const store = new TokenStore(filePath, undefined);
75
+ if (!existsSync(filePath))
76
+ return ok(store);
77
+ let raw;
78
+ try {
79
+ raw = await readFile(filePath, 'utf8');
80
+ }
81
+ catch (e) {
82
+ return singleErr('TOKENS_FILE_INVALID', `Failed to read tokens file ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
83
+ }
84
+ let data;
85
+ try {
86
+ data = yaml.load(raw);
87
+ }
88
+ catch (e) {
89
+ return singleErr('TOKENS_FILE_INVALID', `tokens.yaml parse error at ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
90
+ }
91
+ const shape = validateShape(data, filePath);
92
+ if (!shape.ok)
93
+ return shape;
94
+ store.registryName = shape.value.name;
95
+ for (const raw of shape.value.tokens) {
96
+ const record = normalizeRecord(raw);
97
+ store.records.push(record);
98
+ store.byHash.set(record.hash, record);
99
+ store.byId.set(record.id, record);
100
+ }
101
+ return ok(store);
102
+ }
103
+ /** Absolute path to the backing file. */
104
+ path() { return this.filePath; }
105
+ /**
106
+ * 0.7.0 — Re-read tokens.yaml from disk and swap the in-memory indexes
107
+ * in-place. Captures of the TokenStore reference stay valid (so the HTTP
108
+ * transport doesn't need a getter). Parse errors leave the existing
109
+ * in-memory state untouched. Called by the SIGHUP handler alongside
110
+ * instance reload.
111
+ */
112
+ async reload() {
113
+ if (!existsSync(this.filePath)) {
114
+ // File was removed — empty the store. Same boot semantics as an
115
+ // absent file (HTTP transport keeps running; next lookup misses).
116
+ this.records = [];
117
+ this.byHash.clear();
118
+ this.byId.clear();
119
+ this.registryName = undefined;
120
+ return ok({ total: 0, active: 0 });
121
+ }
122
+ let raw;
123
+ try {
124
+ raw = await readFile(this.filePath, 'utf8');
125
+ }
126
+ catch (e) {
127
+ return singleErr('TOKENS_FILE_INVALID', `Failed to re-read tokens file ${this.filePath}: ${e instanceof Error ? e.message : String(e)}`);
128
+ }
129
+ let data;
130
+ try {
131
+ data = yaml.load(raw);
132
+ }
133
+ catch (e) {
134
+ return singleErr('TOKENS_FILE_INVALID', `tokens.yaml parse error at ${this.filePath}: ${e instanceof Error ? e.message : String(e)}`);
135
+ }
136
+ const shape = validateShape(data, this.filePath);
137
+ if (!shape.ok)
138
+ return shape;
139
+ // Swap in-place only after validation succeeds — preserves existing state
140
+ // on parse failure.
141
+ this.records = [];
142
+ this.byHash.clear();
143
+ this.byId.clear();
144
+ this.registryName = shape.value.name;
145
+ for (const raw of shape.value.tokens) {
146
+ const record = normalizeRecord(raw);
147
+ this.records.push(record);
148
+ this.byHash.set(record.hash, record);
149
+ this.byId.set(record.id, record);
150
+ }
151
+ return ok({ total: this.records.length, active: this.activeCount() });
152
+ }
153
+ /** Optional human label recorded at the top of tokens.yaml. */
154
+ name() { return this.registryName; }
155
+ /** Total records including revoked. */
156
+ size() { return this.records.length; }
157
+ /** Records with no revokedAt and no expiresAt-in-the-past. */
158
+ activeCount(now = new Date()) {
159
+ let n = 0;
160
+ for (const r of this.records)
161
+ if (isActive(r, now))
162
+ n++;
163
+ return n;
164
+ }
165
+ /** O(1) lookup by hash. Returns undefined for unknown bearers. */
166
+ lookupByHash(hash) {
167
+ return this.byHash.get(hash);
168
+ }
169
+ /** Secondary lookup by readable id (CLI / admin paths). */
170
+ lookupById(id) {
171
+ return this.byId.get(id);
172
+ }
173
+ /** Snapshot of all records. Caller receives a shallow copy. */
174
+ list() { return [...this.records]; }
175
+ /**
176
+ * Issue a new token. Generates plaintext + hash, appends the record,
177
+ * persists the file atomically. Returns both the record and the plaintext —
178
+ * plaintext is never recoverable after this call.
179
+ */
180
+ async issue(spec) {
181
+ const plaintext = generatePlaintext();
182
+ const hash = hashPlaintext(plaintext);
183
+ // Defensive: SHA-256 collisions are astronomically unlikely but we still
184
+ // refuse to persist a duplicate hash rather than silently overwrite.
185
+ if (this.byHash.has(hash)) {
186
+ return singleErr('TOKEN_MALFORMED', 'hash collision on newly generated plaintext; retry');
187
+ }
188
+ const record = {
189
+ id: generateId(),
190
+ hash,
191
+ role: spec.role,
192
+ projects: spec.projects,
193
+ createdAt: new Date().toISOString(),
194
+ };
195
+ if (spec.name !== undefined)
196
+ record.name = spec.name;
197
+ if (spec.agentId !== undefined)
198
+ record.agentId = spec.agentId;
199
+ if (spec.userId !== undefined)
200
+ record.userId = spec.userId;
201
+ if (spec.expiresAt !== undefined)
202
+ record.expiresAt = spec.expiresAt;
203
+ this.records.push(record);
204
+ this.byHash.set(record.hash, record);
205
+ this.byId.set(record.id, record);
206
+ const persisted = await this.persist();
207
+ if (!persisted.ok) {
208
+ // Roll back in-memory state so the store stays consistent with disk.
209
+ this.records.pop();
210
+ this.byHash.delete(record.hash);
211
+ this.byId.delete(record.id);
212
+ return persisted;
213
+ }
214
+ return ok({ record, plaintext });
215
+ }
216
+ /**
217
+ * Mark a token as revoked. Sets revokedAt; the record stays in the registry
218
+ * so audit queries can resolve historic token IDs. Idempotent — revoking
219
+ * an already-revoked record is a no-op and returns the existing record.
220
+ */
221
+ async revoke(id) {
222
+ const record = this.byId.get(id);
223
+ if (!record)
224
+ return singleErr('TOKEN_NOT_FOUND', `No token with id ${id}`);
225
+ if (record.revokedAt !== undefined)
226
+ return ok(record);
227
+ record.revokedAt = new Date().toISOString();
228
+ const persisted = await this.persist();
229
+ if (!persisted.ok) {
230
+ delete record.revokedAt;
231
+ return persisted;
232
+ }
233
+ return ok(record);
234
+ }
235
+ /**
236
+ * Rotate a token: issue a new token with the SAME capabilities (role,
237
+ * projects, agentId, userId, expiresAt, name) and revoke the old one.
238
+ * Immediate cutover — no grace window (deferred per dec-maadb-069 lock #10).
239
+ * Returns the new record + plaintext; old record retains its id with
240
+ * revokedAt set.
241
+ */
242
+ async rotate(id) {
243
+ const existing = this.byId.get(id);
244
+ if (!existing)
245
+ return singleErr('TOKEN_NOT_FOUND', `No token with id ${id}`);
246
+ if (existing.revokedAt !== undefined) {
247
+ return singleErr('TOKEN_REVOKED', `Token ${id} is already revoked; rotate requires an active token`);
248
+ }
249
+ // Build IssueSpec from the existing record's capabilities. Cloning
250
+ // projects array defensively so mutations on the new record never leak.
251
+ const spec = {
252
+ role: existing.role,
253
+ projects: existing.projects.map(p => ({ ...p })),
254
+ };
255
+ if (existing.name !== undefined)
256
+ spec.name = existing.name;
257
+ if (existing.agentId !== undefined)
258
+ spec.agentId = existing.agentId;
259
+ if (existing.userId !== undefined)
260
+ spec.userId = existing.userId;
261
+ if (existing.expiresAt !== undefined)
262
+ spec.expiresAt = existing.expiresAt;
263
+ const issued = await this.issue(spec);
264
+ if (!issued.ok)
265
+ return issued;
266
+ // Mark the old record revoked after the new one persists so a crash mid-rotate
267
+ // leaves at most an extra active token, not a gap with neither.
268
+ existing.revokedAt = new Date().toISOString();
269
+ const persisted = await this.persist();
270
+ if (!persisted.ok) {
271
+ delete existing.revokedAt;
272
+ return persisted;
273
+ }
274
+ return issued;
275
+ }
276
+ /**
277
+ * Atomic write via `<path>.tmp` + rename. Creates `_auth/` if missing.
278
+ * Errors don't leak partial state because writeFile+rename is atomic on
279
+ * both POSIX and Windows.
280
+ */
281
+ async persist() {
282
+ // Serialized shape uses snake_case keys for on-disk yaml; the in-memory
283
+ // TokenRecord shape is camelCase. Keep them distinct here rather than
284
+ // reshaping the public type.
285
+ const shape = {
286
+ ...(this.registryName !== undefined ? { name: this.registryName } : {}),
287
+ tokens: this.records.map(serializeRecord),
288
+ };
289
+ const yamlText = yaml.dump(shape, { noRefs: true, lineWidth: 120 });
290
+ const dir = path.dirname(this.filePath);
291
+ try {
292
+ await mkdir(dir, { recursive: true });
293
+ }
294
+ catch (e) {
295
+ return singleErr('TOKENS_FILE_INVALID', `Failed to create ${dir}: ${e instanceof Error ? e.message : String(e)}`);
296
+ }
297
+ const tmp = `${this.filePath}.tmp`;
298
+ try {
299
+ await writeFile(tmp, yamlText, { encoding: 'utf8', mode: 0o600 });
300
+ await rename(tmp, this.filePath);
301
+ }
302
+ catch (e) {
303
+ return singleErr('TOKENS_FILE_INVALID', `Failed to persist tokens.yaml at ${this.filePath}: ${e instanceof Error ? e.message : String(e)}`);
304
+ }
305
+ return ok(undefined);
306
+ }
307
+ }
308
+ // --- Internal helpers ------------------------------------------------------
309
+ function validateShape(data, filePath) {
310
+ if (data === null || data === undefined) {
311
+ // Empty file = empty registry.
312
+ return ok({ tokens: [] });
313
+ }
314
+ if (typeof data !== 'object' || Array.isArray(data)) {
315
+ return singleErr('TOKENS_FILE_INVALID', `tokens.yaml at ${filePath} must be a mapping, got ${Array.isArray(data) ? 'sequence' : typeof data}`);
316
+ }
317
+ const obj = data;
318
+ const name = obj['name'];
319
+ if (name !== undefined && typeof name !== 'string') {
320
+ return singleErr('TOKENS_FILE_INVALID', `tokens.yaml \`name\` must be a string if present`);
321
+ }
322
+ const rawTokens = obj['tokens'];
323
+ if (rawTokens === undefined) {
324
+ return ok({ tokens: [], ...(typeof name === 'string' ? { name } : {}) });
325
+ }
326
+ if (!Array.isArray(rawTokens)) {
327
+ return singleErr('TOKENS_FILE_INVALID', `tokens.yaml \`tokens\` must be an array`);
328
+ }
329
+ const tokens = [];
330
+ for (let i = 0; i < rawTokens.length; i++) {
331
+ const entry = rawTokens[i];
332
+ if (typeof entry !== 'object' || entry === null) {
333
+ return singleErr('TOKENS_FILE_INVALID', `tokens[${i}] must be a mapping`);
334
+ }
335
+ const parsed = parseRecord(entry, i);
336
+ if (!parsed.ok)
337
+ return parsed;
338
+ tokens.push(parsed.value);
339
+ }
340
+ const result = { tokens };
341
+ if (typeof name === 'string')
342
+ result.name = name;
343
+ return ok(result);
344
+ }
345
+ function parseRecord(raw, index) {
346
+ const loc = (f) => `tokens[${index}].${f}`;
347
+ const getString = (f, required) => {
348
+ const v = raw[f];
349
+ if (v === undefined) {
350
+ if (required)
351
+ return singleErr('TOKENS_FILE_INVALID', `${loc(f)} is required`);
352
+ return ok(undefined);
353
+ }
354
+ if (typeof v !== 'string')
355
+ return singleErr('TOKENS_FILE_INVALID', `${loc(f)} must be a string`);
356
+ return ok(v);
357
+ };
358
+ const id = getString('id', true);
359
+ if (!id.ok)
360
+ return id;
361
+ const hash = getString('hash', true);
362
+ if (!hash.ok)
363
+ return hash;
364
+ const roleRaw = getString('role', true);
365
+ if (!roleRaw.ok)
366
+ return roleRaw;
367
+ const createdAt = getString('created_at', true);
368
+ if (!createdAt.ok)
369
+ return createdAt;
370
+ const name = getString('name', false);
371
+ if (!name.ok)
372
+ return name;
373
+ const agentId = getString('agent_id', false);
374
+ if (!agentId.ok)
375
+ return agentId;
376
+ const userId = getString('user_id', false);
377
+ if (!userId.ok)
378
+ return userId;
379
+ const expiresAt = getString('expires_at', false);
380
+ if (!expiresAt.ok)
381
+ return expiresAt;
382
+ const revokedAt = getString('revoked_at', false);
383
+ if (!revokedAt.ok)
384
+ return revokedAt;
385
+ if (!['reader', 'writer', 'admin'].includes(roleRaw.value)) {
386
+ return singleErr('TOKENS_FILE_INVALID', `${loc('role')} must be one of reader|writer|admin, got ${roleRaw.value}`);
387
+ }
388
+ const rawProjects = raw['projects'];
389
+ if (!Array.isArray(rawProjects)) {
390
+ return singleErr('TOKENS_FILE_INVALID', `${loc('projects')} must be an array`);
391
+ }
392
+ const projects = [];
393
+ for (let j = 0; j < rawProjects.length; j++) {
394
+ const entry = rawProjects[j];
395
+ if (typeof entry !== 'object' || entry === null) {
396
+ return singleErr('TOKENS_FILE_INVALID', `${loc(`projects[${j}]`)} must be a mapping`);
397
+ }
398
+ const e = entry;
399
+ const pname = e['name'];
400
+ if (typeof pname !== 'string') {
401
+ return singleErr('TOKENS_FILE_INVALID', `${loc(`projects[${j}].name`)} must be a string`);
402
+ }
403
+ const cap = { name: pname };
404
+ const pRole = e['role'];
405
+ if (pRole !== undefined) {
406
+ if (typeof pRole !== 'string' || !['reader', 'writer', 'admin'].includes(pRole)) {
407
+ return singleErr('TOKENS_FILE_INVALID', `${loc(`projects[${j}].role`)} must be reader|writer|admin if present`);
408
+ }
409
+ cap.role = pRole;
410
+ }
411
+ projects.push(cap);
412
+ }
413
+ const record = {
414
+ id: toTokenId(id.value),
415
+ hash: toTokenHash(hash.value),
416
+ role: roleRaw.value,
417
+ projects,
418
+ createdAt: createdAt.value,
419
+ };
420
+ if (name.value !== undefined)
421
+ record.name = name.value;
422
+ if (agentId.value !== undefined)
423
+ record.agentId = agentId.value;
424
+ if (userId.value !== undefined)
425
+ record.userId = userId.value;
426
+ if (expiresAt.value !== undefined)
427
+ record.expiresAt = expiresAt.value;
428
+ if (revokedAt.value !== undefined)
429
+ record.revokedAt = revokedAt.value;
430
+ return ok(record);
431
+ }
432
+ function normalizeRecord(r) {
433
+ // Defensive copy of projects so mutations on returned records don't
434
+ // bleed into the in-memory index.
435
+ return { ...r, projects: r.projects.map(p => ({ ...p })) };
436
+ }
437
+ function serializeRecord(r) {
438
+ const out = {
439
+ id: r.id,
440
+ hash: r.hash,
441
+ role: r.role,
442
+ projects: r.projects.map(p => p.role !== undefined ? { name: p.name, role: p.role } : { name: p.name }),
443
+ created_at: r.createdAt,
444
+ };
445
+ if (r.name !== undefined)
446
+ out['name'] = r.name;
447
+ if (r.agentId !== undefined)
448
+ out['agent_id'] = r.agentId;
449
+ if (r.userId !== undefined)
450
+ out['user_id'] = r.userId;
451
+ if (r.expiresAt !== undefined)
452
+ out['expires_at'] = r.expiresAt;
453
+ if (r.revokedAt !== undefined)
454
+ out['revoked_at'] = r.revokedAt;
455
+ return out;
456
+ }
457
+ function isActive(r, now) {
458
+ if (r.revokedAt !== undefined)
459
+ return false;
460
+ if (r.expiresAt !== undefined && new Date(r.expiresAt).getTime() < now.getTime())
461
+ return false;
462
+ return true;
463
+ }
464
+ //# sourceMappingURL=token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { Role } from '../mcp/roles.js';
2
+ /**
3
+ * Readable token identifier for CLI + audit trails. Generated at issue time.
4
+ * Format: `tok-<12hex>`. Distinct from the hash (lookup key) and plaintext
5
+ * (bearer presented by clients).
6
+ */
7
+ export type TokenId = string & {
8
+ readonly __brand: 'TokenId';
9
+ };
10
+ /** SHA-256 hex digest of the plaintext bearer. Lookup key; persisted. */
11
+ export type TokenHash = string & {
12
+ readonly __brand: 'TokenHash';
13
+ };
14
+ export declare function tokenId(s: string): TokenId;
15
+ export declare function tokenHash(s: string): TokenHash;
16
+ /**
17
+ * Per-token project access entry. Wildcard `*` matches every project in the
18
+ * instance at the token's global role. A named entry may optionally downgrade
19
+ * the role for that specific project via an explicit `role` field — the
20
+ * per-project cap can only REDUCE, never exceed the global role (enforced at
21
+ * resolve time, not load time).
22
+ */
23
+ export interface ProjectCap {
24
+ name: string;
25
+ role?: Role;
26
+ }
27
+ /**
28
+ * Full token record as persisted in tokens.yaml. Plaintext is NOT stored
29
+ * anywhere — only the SHA-256 hash of plaintext. revokedAt is the only
30
+ * field that can transition on an existing record; everything else is
31
+ * immutable (per dec-maadb-069 lock #8).
32
+ */
33
+ export interface TokenRecord {
34
+ id: TokenId;
35
+ name?: string;
36
+ hash: TokenHash;
37
+ role: Role;
38
+ projects: ProjectCap[];
39
+ agentId?: string;
40
+ userId?: string;
41
+ expiresAt?: string;
42
+ createdAt: string;
43
+ revokedAt?: string;
44
+ }
45
+ /**
46
+ * Payload accepted by TokenStore.issue. Everything a caller supplies at
47
+ * token creation. `id` and `hash` are generated by the store; `createdAt`
48
+ * is stamped at issue time.
49
+ */
50
+ export interface IssueSpec {
51
+ name?: string;
52
+ role: Role;
53
+ projects: ProjectCap[];
54
+ agentId?: string;
55
+ userId?: string;
56
+ expiresAt?: string;
57
+ }
58
+ /**
59
+ * Result of a successful issue or rotate. Plaintext is returned ONCE — the
60
+ * caller is responsible for delivering it to the end user and it's never
61
+ * recoverable from the registry afterward.
62
+ */
63
+ export interface IssuedToken {
64
+ record: TokenRecord;
65
+ plaintext: string;
66
+ }
67
+ /**
68
+ * Shape of tokens.yaml on disk. Top-level `name` is an optional human label
69
+ * for the registry file itself (distinct from per-token `name`).
70
+ */
71
+ export interface TokensFileShape {
72
+ name?: string;
73
+ tokens: TokenRecord[];
74
+ }
75
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAE/D,yEAAyE;AACzE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAyB;AACpE,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAA2B;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB"}
@@ -0,0 +1,15 @@
1
+ // ============================================================================
2
+ // Auth types — 0.7.0 Scoped Auth & Identity (dec-maadb-069 + dec-maadb-071)
3
+ //
4
+ // Token registry lives at <instance-root>/_auth/tokens.yaml. Plaintext tokens
5
+ // use format `maad_pat_<32hex>` — 128-bit random + shell-safe + prefix
6
+ // recognizable in logs and leaked-credential scanners. Plaintext is returned
7
+ // ONCE at issue/rotate; SHA-256 hash is what persists.
8
+ //
9
+ // Records are IMMUTABLE except `revokedAt`. Three operations: issue, rotate,
10
+ // revoke. Any capability change (role / identity / projects) requires revoke
11
+ // + reissue. Rationale in dec-maadb-069 lock #8.
12
+ // ============================================================================
13
+ export function tokenId(s) { return s; }
14
+ export function tokenHash(s) { return s; }
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,uEAAuE;AACvE,6EAA6E;AAC7E,uDAAuD;AACvD,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,iDAAiD;AACjD,+EAA+E;AAc/E,MAAM,UAAU,OAAO,CAAC,CAAS,IAAa,OAAO,CAAY,CAAC,CAAC,CAAC;AACpE,MAAM,UAAU,SAAS,CAAC,CAAS,IAAe,OAAO,CAAc,CAAC,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { DocId, DocType, FilePath, DocumentRecord, DocumentQuery, ObjectQuery, DocumentMatch, ObjectMatch, ExtractedObject, Relationship, ParsedBlock, BackendStats } from '../types.js';
2
+ export interface MaadBackend {
3
+ init(): void;
4
+ close(): void;
5
+ putDocument(doc: DocumentRecord): void;
6
+ putObjects(docId: DocId, objects: ExtractedObject[]): void;
7
+ putRelationships(docId: DocId, relations: Relationship[]): void;
8
+ putBlocks(docId: DocId, blocks: ParsedBlock[]): void;
9
+ putFieldIndex(docId: DocId, fields: Array<{
10
+ name: string;
11
+ value: string;
12
+ numericValue: number | null;
13
+ type: string;
14
+ }>): void;
15
+ getDocument(docId: DocId): DocumentRecord | null;
16
+ getDocumentsByIds(docIds: DocId[]): Map<DocId, DocumentRecord>;
17
+ getDocumentByPath(path: FilePath): DocumentRecord | null;
18
+ findDocuments(query: DocumentQuery): DocumentMatch[];
19
+ countDocuments(query: DocumentQuery): number;
20
+ findObjects(query: ObjectQuery): ObjectMatch[];
21
+ countObjects(query: ObjectQuery): number;
22
+ getRelationships(docId: DocId, direction: 'outgoing' | 'incoming' | 'both'): Relationship[];
23
+ getBlocks(docId: DocId): ParsedBlock[];
24
+ getFieldValues(docIds: DocId[], fieldNames: string[]): Map<string, Record<string, string>>;
25
+ aggregate(query: import('../engine/types.js').AggregateQuery): import('../engine/types.js').AggregateResult;
26
+ listChangesSince(opts: {
27
+ cursor: import('../engine/types.js').ChangesSinceParsedCursor | null;
28
+ limit: number;
29
+ docTypes?: string[] | undefined;
30
+ }): Array<{
31
+ docId: string;
32
+ docType: string;
33
+ updatedAt: string;
34
+ version: number;
35
+ }>;
36
+ getSubtypeInventory(limit: number): Array<{
37
+ primitive: string;
38
+ subtype: string;
39
+ count: number;
40
+ topValues: string[];
41
+ }>;
42
+ getSampleDocIds(docType: DocType, limit: number): DocId[];
43
+ removeDocument(docId: DocId): void;
44
+ getFileHash(path: FilePath): string | null;
45
+ getAllFileHashes(): Map<FilePath, string>;
46
+ getStats(): BackendStats;
47
+ countBrokenRefs(): number;
48
+ getMeta(key: string): string | null;
49
+ setMeta(key: string, value: string): void;
50
+ materializeDocument(doc: DocumentRecord, objects: ExtractedObject[], relationships: Relationship[], blocks: ParsedBlock[], fieldIndex: Array<{
51
+ name: string;
52
+ value: string;
53
+ numericValue: number | null;
54
+ type: string;
55
+ }>): void;
56
+ }
57
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/backend/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ // ============================================================================
2
+ // Backend Adapter Interface
3
+ // Any backend implementation must satisfy this contract.
4
+ // ============================================================================
5
+ export {};
6
+ //# sourceMappingURL=adapter.js.map