@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,252 @@
1
+ // ============================================================================
2
+ // MAAD.md Generator
3
+ // Generates the LLM instruction file for a MAAD project.
4
+ // Content is STABLE — no volatile counts, no project-state details.
5
+ // Regenerated on every reindex so interface changes propagate.
6
+ // ============================================================================
7
+ export function generateMaadMd(ctx) {
8
+ const cmd = buildCmdPrefix(ctx.enginePath, ctx.projectRoot);
9
+ const sections = [];
10
+ sections.push(generateHeader(cmd));
11
+ sections.push(generateQuickStart(cmd, ctx));
12
+ sections.push(generateFullCommandRef(cmd));
13
+ sections.push(generatePrimitives());
14
+ sections.push(generateRules());
15
+ sections.push(generateCompositionPatterns(cmd));
16
+ sections.push(generateFeedback());
17
+ return sections.join('\n\n---\n\n') + '\n';
18
+ }
19
+ function buildCmdPrefix(enginePath, projectRoot) {
20
+ return `node ${enginePath} --project ${projectRoot}`;
21
+ }
22
+ // ---- Sections -------------------------------------------------------------
23
+ function generateHeader(cmd) {
24
+ return `# MAAD.md — LLM Interface
25
+
26
+ > Auto-generated by the MAAD engine. Do not edit.
27
+ >
28
+ > **This is a test/evaluation project.** If you find issues or have improvement ideas,
29
+ > create a feedback file: \`feedback-YYYY-MM-DD-<model>.md\` (e.g. \`feedback-2026-04-07-gpt-5.md\`).
30
+
31
+ ## What is this?
32
+
33
+ A **MAAD project** — a markdown-native database. Markdown files are the records. A queryable index gives you structured access without reading full files.
34
+
35
+ **This file** = stable operating instructions. Read once per session.
36
+ **\`maad_summary\` tool** = live project snapshot. Run once per session to see what's here.
37
+ **SCHEMA.md** = deep structural reference. Read only when \`maad_schema\` isn't enough.
38
+
39
+ ## How to access data
40
+
41
+ Use **MAAD MCP tools** for all data operations. Do not use shell commands or direct file reads for data access. If \`maad_summary\` reports an empty project, read \`_skills/architect-core.md\` and enter Architect mode to design and deploy the schema.
42
+
43
+ If using CLI for debugging:
44
+ \`\`\`
45
+ ${cmd} <command> [args]
46
+ \`\`\``;
47
+ }
48
+ function generateQuickStart(cmd, _ctx) {
49
+ return `## Boot Sequence
50
+
51
+ **1. You just read this file.** You now know the commands.
52
+
53
+ **2. Run \`summary\` to see what's in this project:**
54
+ \`\`\`
55
+ ${cmd} summary
56
+ \`\`\`
57
+ Returns: types + counts, sample doc_ids, extracted object inventory.
58
+
59
+ That's it. You're oriented. Now use the commands below as needed.
60
+
61
+ ### Reading data
62
+ - \`get <doc_id> hot\` — frontmatter only (cheapest)
63
+ - \`get <doc_id> full\` — resolved record: refs, objects, related docs
64
+ - \`get <doc_id> warm <block_id>\` — frontmatter + one section
65
+ - \`get <doc_id> cold\` — full file (expensive, use sparingly)
66
+
67
+ ### Before writing
68
+ - \`schema <type>\` — field definitions, required fields, enum values
69
+
70
+ ### Reference (not needed for boot)
71
+ - **SCHEMA.md** has full field-level detail for every type. Read it when \`schema <type>\` isn't enough.
72
+ - **\`audit\`** shows recent git activity if you need project history.`;
73
+ }
74
+ function generateFullCommandRef(cmd) {
75
+ return `## All Commands
76
+
77
+ > Commands shown below in CLI form for explicit syntax. **MCP tool names prefix \`maad_\`** (e.g. \`get\` → \`maad_get\`, \`bulk_create\` → \`maad_bulk_create\`). Agent workflows use the MCP variants; CLI is for operator debugging.
78
+
79
+ ### Discover
80
+ | Command | What it does |
81
+ |---------|-------------|
82
+ | \`scan <file.md>\` | Structural analysis of a raw file (no registry needed) |
83
+ | \`scan <dir/>\` | Corpus-level patterns: recurring fields, headings, document families |
84
+ | \`summary\` | **Start here.** Types, counts, sample IDs, object inventory |
85
+
86
+ ### Read
87
+ | \`describe\` | Project overview: types, doc counts, primitives |
88
+ | \`get <doc_id> hot\` | Frontmatter only (cheapest read) |
89
+ | \`get <doc_id> warm <block>\` | Frontmatter + one section |
90
+ | \`get <doc_id> cold\` | Full document (expensive — use sparingly) |
91
+ | \`get <doc_id> full\` | Resolved record: refs resolved, objects, related, latest note |
92
+ | \`query <type>\` | All documents of a type |
93
+ | \`query <type> --filter field=value\` | Filtered (ops: eq, neq, gt, gte, lt, lte, in, contains) |
94
+ | \`query <type> --fields name,status\` | Return frontmatter fields in results (projection) |
95
+ | \`search <primitive>\` | Cross-document object search |
96
+ | \`search <primitive> --subtype <s>\` | Filter by subtype (e.g. person, attorney) |
97
+ | \`search <primitive> --query <text>\` | Substring match on values (alias: --contains) |
98
+ | \`related <doc_id> both\` | All connected documents (outgoing + incoming) |
99
+ | \`related <doc_id> outgoing\` | Documents this one references |
100
+ | \`related <doc_id> incoming\` | Documents that reference this one |
101
+ | \`schema <type>\` | Field definitions, ID prefix, format hints (use before writes) |
102
+ | \`aggregate\` | Group by a field with count/sum/avg/min/max. **Use instead of iterating records to compute totals.** Supports multi-hop ref chains (\`a->b->c\`) for cross-doctype aggregates. Filters accept \`between\` shortcut and array-of-ops (AND). |
103
+ | \`join\` | Query + follow refs + project fields from both sides in one call. **Use instead of \`query\` → \`get\` → \`get\` chains.** |
104
+ | \`verify mode=field\` | Fact-check a field value: grounded true/false + actual value + source |
105
+ | \`verify mode=count\` | Fact-check a document count: grounded true/false + actual count |
106
+ | \`changes_since <cursor>\` | Delta feed — records modified since cursor. Opaque base64url cursor, stable order on (updated_at ASC, doc_id ASC). Empty cursor = from the beginning. |
107
+
108
+ ### Write
109
+ | Command | What it does |
110
+ |---------|-------------|
111
+ | \`create <type> --field k=v [--field k=v ...] [--body "text"] [--id custom-id]\` | Create a new record |
112
+ | \`update <doc_id> --field k=v [--field k=v ...]\` | Update frontmatter fields |
113
+ | \`update <doc_id> --append "text"\` | Append to document body |
114
+ | \`update <doc_id> --body "text"\` | Replace document body |
115
+ | \`bulk_create\` | Create multiple records in one call (MCP only) |
116
+ | \`bulk_update\` | Update multiple records in one call (MCP only) |
117
+ | \`delete <doc_id>\` | Remove a record (soft by default, \`--hard\` for hard delete) |
118
+
119
+ ### Maintain
120
+ | Command | What it does |
121
+ |---------|-------------|
122
+ | \`validate\` | Validate all documents against schemas |
123
+ | \`validate <doc_id>\` | Validate one document |
124
+ | \`reindex --force\` | Rebuild the full index from markdown |
125
+ | \`reload\` | Reload registry + schemas without restart (after editing \`_registry/\` or \`_schema/\`) |
126
+ | \`health\` | Engine status — write queue depth, last write op, disk headroom, git clean flag, transport + session telemetry |
127
+ | \`parse <file.md>\` | Parse one file, show structure |
128
+
129
+ ### Audit (requires git)
130
+ | Command | What it does |
131
+ |---------|-------------|
132
+ | \`history <doc_id>\` | Change history for a document |
133
+ | \`audit\` | Project-wide activity |
134
+ | \`audit --since <date>\` | Activity since a date |
135
+
136
+ ### Field syntax for create/update
137
+ - String: \`--field name=Acme Corp\`
138
+ - Enum: \`--field status=open\`
139
+ - Ref: \`--field client=cli-acme\`
140
+ - Array: \`--field tags=[enterprise,priority]\`
141
+ - Date: \`--field opened_at=2026-04-07\``;
142
+ }
143
+ function generatePrimitives() {
144
+ return `## Extraction Primitives
145
+
146
+ Inline annotations in markdown body use \`[[type:value|label]]\` syntax. The engine extracts and indexes them.
147
+
148
+ | Primitive | Captures | Search example |
149
+ |-----------|----------|---------------|
150
+ | \`entity\` | person, org, team, product | \`search entity --subtype person\` |
151
+ | \`date\` | date, datetime | \`search date --contains 2026\` |
152
+ | \`duration\` | time span (3 hours, 2 weeks) | \`search duration\` |
153
+ | \`amount\` | currency (100.00 USD, $500) | \`search amount\` |
154
+ | \`measure\` | value + unit (500mg, 6 feet) | \`search measure\` |
155
+ | \`quantity\` | bare count (42, 1800) | \`search quantity\` |
156
+ | \`percentage\` | ratio (15%, 0.85) | \`search percentage\` |
157
+ | \`location\` | place, address | \`search location\` |
158
+ | \`identifier\` | case number, invoice, code | \`search identifier\` |
159
+ | \`contact\` | email, phone, URL | \`search contact\` |
160
+ | \`media\` | image, video, audio, document | \`search media\` |`;
161
+ }
162
+ function generateRules() {
163
+ return `## Rules
164
+
165
+ 1. **Run \`summary\` first** in every new session — one call to orient
166
+ 2. **Use \`hot\` reads by default** — escalate to \`full\`, \`warm\`, then \`cold\` only when needed
167
+ 3. **Use \`schema <type>\` before writes** — know what fields are required
168
+ 4. **Use MAAD MCP tools for writes** — never edit markdown files directly; CLI forms above are for operator debugging only
169
+ 5. **Use \`search\` for cross-document queries** — don't open files to find people/dates/amounts
170
+ 6. **Use \`related\` for graph traversal** — don't manually search for connected docs
171
+ 7. **Cite \`doc_id\` and \`block_id\`** in answers for traceability
172
+ 8. **\`reindex --force\`** recovers from any stale state
173
+ 9. **Inspect \`_meta.warnings[]\` on write responses** — the engine surfaces soft-validation signals (precision drift, deprecation hints) alongside successful writes. Agents self-correct on warnings, not just on errors
174
+ 10. **Use \`aggregate\` for group-by totals** — don't iterate records to compute counts, sums, averages, mins, or maxes. One \`aggregate\` call with \`metric\` + \`groupBy\` returns the answer; use the \`a->b->c\` ref-chain form for cross-doctype groupings.
175
+ 11. **Use \`join\` to follow refs in one call** — don't chain \`query\` → \`get\` → \`get\` to collect related fields. \`join\` projects fields from both sides of a ref in one pass.
176
+
177
+ ## Grounding Rules (CRITICAL)
178
+
179
+ **Never state a number, date, amount, count, or ID from memory.** Always query first.
180
+
181
+ - Before reporting a field value → call \`get\` or \`verify\` with the doc_id and field
182
+ - Before reporting a count → call \`verify\` in count mode or \`query\` with the type and filters
183
+ - Before reporting a relationship → call \`related\` or \`join\`
184
+ - If you cannot ground a claim from the database → say "unable to verify from records"
185
+
186
+ Use \`maad_verify\` to fact-check before answering:
187
+ - \`verify mode=field docId=cas-001 field=claim_amount expected="1500000.00 USD"\`
188
+ - \`verify mode=count docType=case expectedCount=12 filters={status: "open"}\`
189
+
190
+ **The pattern:** query or verify → confirm grounded → then answer. Never the reverse.`;
191
+ }
192
+ function generateCompositionPatterns(cmd) {
193
+ return `## Composition Patterns
194
+
195
+ These are common multi-step operations built from primitives. The engine does not provide these as single commands — you compose them.
196
+
197
+ ### Deep inspect (full engine internals for a document)
198
+ \`\`\`
199
+ ${cmd} get <doc_id> hot # frontmatter + metadata
200
+ ${cmd} validate <doc_id> # schema validation state
201
+ ${cmd} related <doc_id> both # all relationships
202
+ ${cmd} search entity --doc <doc_id> # all extracted objects
203
+ \`\`\`
204
+
205
+ ### Onboard raw files (bootstrap a new project)
206
+ \`\`\`
207
+ ${cmd} scan <directory> # corpus-level patterns
208
+ # Read the output, then:
209
+ # 1. Create _registry/object_types.yaml with detected families
210
+ # 2. Create _schema/*.yaml with detected field patterns
211
+ # 3. Add frontmatter to each file
212
+ ${cmd} reindex --force # build the index
213
+ ${cmd} summary # confirm orientation
214
+ \`\`\``;
215
+ }
216
+ function generateFeedback() {
217
+ return `## Feedback
218
+
219
+ This is a test/evaluation project. If you encounter issues, friction, or have improvement suggestions:
220
+
221
+ 1. Create a file in the project root: \`feedback-YYYY-MM-DD-<model>.md\`
222
+ - Example: \`feedback-2026-04-07-gpt-5.md\`
223
+ - Example: \`feedback-2026-04-08-claude-opus.md\`
224
+ 2. Structure your feedback with:
225
+ - **Observations** — what happened, what you expected
226
+ - **Suggestions** — how to improve it
227
+ - **Context** — what you were trying to do when the issue occurred
228
+ 3. Do not modify existing feedback files from other models`;
229
+ }
230
+ export function generateStubMaadMd(enginePath, projectRoot) {
231
+ const cmd = buildCmdPrefix(enginePath, projectRoot);
232
+ return `# MAAD.md — LLM Interface
233
+
234
+ > Auto-generated by the MAAD engine.
235
+ > Run \`reindex\` after adding types and schemas to update this file.
236
+ >
237
+ > **This is a test/evaluation project.** If you find issues, create a feedback file:
238
+ > \`feedback-YYYY-MM-DD-<model>.md\`
239
+
240
+ This is a **MAAD project** — a markdown-native database.
241
+
242
+ ## Getting Started
243
+
244
+ 1. Define types in \`_registry/object_types.yaml\`
245
+ 2. Create schemas in \`_schema/\`
246
+ 3. Add markdown records
247
+ 4. Run: \`${cmd} reindex --force\`
248
+
249
+ This file will be regenerated with full type/command reference after the first reindex.
250
+ `;
251
+ }
252
+ //# sourceMappingURL=maad-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maad-md.js","sourceRoot":"","sources":["../src/maad-md.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oBAAoB;AACpB,yDAAyD;AACzD,oEAAoE;AACpE,+DAA+D;AAC/D,+EAA+E;AAY/E,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAElC,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,WAAmB;IAC7D,OAAO,QAAQ,UAAU,cAAc,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,8EAA8E;AAE9E,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;EAqBP,GAAG;OACE,CAAC;AACR,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,IAAmB;IAC1D,OAAO;;;;;;EAMP,GAAG;;;;;;;;;;;;;;;;;uEAiBkE,CAAC;AACxE,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAkEgC,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;;;;;;;;;iEAgBwD,CAAC;AAClE,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;sFA2B6E,CAAC;AACvF,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW;IAC9C,OAAO;;;;;;EAMP,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;;;;;EAKH,GAAG;;;;;EAKH,GAAG;EACH,GAAG;OACE,CAAC;AACR,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;2DAWkD,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,WAAmB;IACxE,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACpD,OAAO;;;;;;;;;;;;;;;YAeG,GAAG;;;CAGd,CAAC;AACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function getBulkMaxItems(env?: NodeJS.ProcessEnv): number;
2
+ export interface BulkCapRejection {
3
+ tool: string;
4
+ received: number;
5
+ limit: number;
6
+ suggestedChunkSize: number;
7
+ message: string;
8
+ }
9
+ export declare function checkBulkSize(toolName: string, count: number, env?: NodeJS.ProcessEnv): BulkCapRejection | null;
10
+ //# sourceMappingURL=bulk-cap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-cap.d.ts","sourceRoot":"","sources":["../../src/mcp/bulk-cap.ts"],"names":[],"mappings":"AAeA,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAO5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,gBAAgB,GAAG,IAAI,CAUzB"}
@@ -0,0 +1,37 @@
1
+ // ============================================================================
2
+ // Bulk-tool item-count cap (0.7.3, fup-2026-190 §1).
3
+ //
4
+ // Defense-in-depth flood control for maad_bulk_create / maad_bulk_update.
5
+ // Independent of per-session write rate limits — those throttle frequency,
6
+ // this caps per-request blast radius. Also bounds memory cost of bulk results
7
+ // (per-record validation reports, audit events, notification fanouts).
8
+ //
9
+ // Default cap: 50. Configurable via MAAD_BULK_MAX_ITEMS, clamped to [1, 1000]
10
+ // to keep the floor meaningful even under operator misconfiguration.
11
+ // ============================================================================
12
+ const DEFAULT_BULK_MAX = 50;
13
+ const HARD_BULK_MAX = 1000;
14
+ export function getBulkMaxItems(env = process.env) {
15
+ const raw = env.MAAD_BULK_MAX_ITEMS;
16
+ if (!raw)
17
+ return DEFAULT_BULK_MAX;
18
+ const n = Number.parseInt(raw, 10);
19
+ if (!Number.isFinite(n) || n < 1)
20
+ return DEFAULT_BULK_MAX;
21
+ if (n > HARD_BULK_MAX)
22
+ return HARD_BULK_MAX;
23
+ return n;
24
+ }
25
+ export function checkBulkSize(toolName, count, env = process.env) {
26
+ const max = getBulkMaxItems(env);
27
+ if (count <= max)
28
+ return null;
29
+ return {
30
+ tool: toolName,
31
+ received: count,
32
+ limit: max,
33
+ suggestedChunkSize: max,
34
+ message: `${toolName} accepts at most ${max} items per call (received ${count}). Split into chunks of <= ${max}.`,
35
+ };
36
+ }
37
+ //# sourceMappingURL=bulk-cap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-cap.js","sourceRoot":"","sources":["../../src/mcp/bulk-cap.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qDAAqD;AACrD,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,uEAAuE;AACvE,EAAE;AACF,8EAA8E;AAC9E,qEAAqE;AACrE,+EAA+E;AAE/E,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,MAAM,GAAG,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,gBAAgB,CAAC;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC1D,IAAI,CAAC,GAAG,aAAa;QAAE,OAAO,aAAa,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC;AAUD,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,KAAa,EACb,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,GAAG;QACV,kBAAkB,EAAE,GAAG;QACvB,OAAO,EAAE,GAAG,QAAQ,oBAAoB,GAAG,6BAA6B,KAAK,8BAA8B,GAAG,GAAG;KAClH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type Role } from './roles.js';
2
+ export type ProvenanceMode = 'off' | 'on' | 'detail';
3
+ export interface McpConfig {
4
+ projectRoot: string;
5
+ role: Role;
6
+ dryRun: boolean;
7
+ toolAllowlist: string[];
8
+ provenance: ProvenanceMode;
9
+ }
10
+ export declare function parseProvenance(raw: string | undefined): ProvenanceMode;
11
+ export declare function buildConfig(opts: {
12
+ projectRoot: string;
13
+ role?: string | undefined;
14
+ dryRun?: boolean | undefined;
15
+ toolAllowlist?: string[] | undefined;
16
+ provenance?: string | undefined;
17
+ }): McpConfig;
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAGvE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,GAAG,SAAS,CAQZ"}
@@ -0,0 +1,20 @@
1
+ // ============================================================================
2
+ // MCP Config — runtime configuration for the server
3
+ // Single source of truth for project root, role, flags.
4
+ // ============================================================================
5
+ import { parseRole } from './roles.js';
6
+ export function parseProvenance(raw) {
7
+ if (raw === 'on' || raw === 'detail')
8
+ return raw;
9
+ return 'off';
10
+ }
11
+ export function buildConfig(opts) {
12
+ return {
13
+ projectRoot: opts.projectRoot,
14
+ role: parseRole(opts.role),
15
+ dryRun: opts.dryRun ?? false,
16
+ toolAllowlist: opts.toolAllowlist ?? [],
17
+ provenance: parseProvenance(opts.provenance),
18
+ };
19
+ }
20
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oDAAoD;AACpD,wDAAwD;AACxD,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAYlD,MAAM,UAAU,eAAe,CAAC,GAAuB;IACrD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAM3B;IACC,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;QAC5B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;QACvC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { EnginePool } from '../instance/pool.js';
2
+ import type { SessionRegistry } from '../instance/session.js';
3
+ import type { InstanceConfig } from '../instance/config.js';
4
+ import type { TokenStore } from '../auth/token-store.js';
5
+ export interface InstanceCtx {
6
+ instance: InstanceConfig;
7
+ pool: EnginePool;
8
+ sessions: SessionRegistry;
9
+ /**
10
+ * 0.7.0 — Token registry. Populated in HTTP mode from
11
+ * `<instance-root>/_auth/tokens.yaml`. Null in stdio / synthetic mode
12
+ * (no bearer channel). Callers that only apply when a token is present
13
+ * (auth middleware, identity propagation) check for null.
14
+ */
15
+ tokens: TokenStore | null;
16
+ }
17
+ //# sourceMappingURL=ctx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx.d.ts","sourceRoot":"","sources":["../../src/mcp/ctx.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B"}
@@ -0,0 +1,7 @@
1
+ // ============================================================================
2
+ // InstanceCtx — the runtime context threaded through every tool handler.
3
+ // Holds pool + sessions so `withEngine` can resolve the correct engine
4
+ // per call.
5
+ // ============================================================================
6
+ export {};
7
+ //# sourceMappingURL=ctx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../src/mcp/ctx.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AACzE,uEAAuE;AACvE,YAAY;AACZ,+EAA+E"}
@@ -0,0 +1,42 @@
1
+ import type { MaadError } from '../errors.js';
2
+ export interface GuardrailConfig {
3
+ dryRun?: boolean | undefined;
4
+ toolAllowlist?: string[] | undefined;
5
+ }
6
+ export declare function setGuardrailConfig(c: GuardrailConfig): void;
7
+ export declare function isDryRun(): boolean;
8
+ export declare function isToolAllowed(toolName: string): boolean;
9
+ /**
10
+ * Audit-log marker for whether a destructive call ran as dry-run or confirmed.
11
+ * Stamped on the audit payload via auditToolCall's `extras` argument so
12
+ * post-hoc audit can distinguish exploration from action.
13
+ */
14
+ export type ConfirmMode = 'dry_run' | 'confirmed';
15
+ /**
16
+ * Confirm-contract guard for destructive tools (0.7.10).
17
+ *
18
+ * Returns null when args.confirm === true (caller has authorized mutation),
19
+ * otherwise returns a CONFIRM_REQUIRED MaadError. Boolean strictness — no
20
+ * truthy coercion; only literal true authorizes mutation. Callers decide
21
+ * whether to surface the error or return a dry-run response carrying the
22
+ * affected set. Spec default is the dry-run path.
23
+ */
24
+ export declare function requireConfirm(args: {
25
+ confirm?: unknown;
26
+ }): MaadError | null;
27
+ /**
28
+ * Log every tool call for audit trail. Optional `extras` lets destructive
29
+ * tools stamp confirm_mode (and future fields) on the audit payload without
30
+ * needing a separate writer.
31
+ */
32
+ export declare function auditToolCall(toolName: string, args: Record<string, unknown>, extras?: Record<string, unknown>): void;
33
+ /**
34
+ * Dry-run response: returns what would happen without executing.
35
+ */
36
+ export declare function dryRunResponse(toolName: string, args: Record<string, unknown>): {
37
+ content: Array<{
38
+ type: 'text';
39
+ text: string;
40
+ }>;
41
+ };
42
+ //# sourceMappingURL=guardrails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/mcp/guardrails.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACtC;AAID,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAE3D;AAED,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAElD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,IAAI,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAYlI"}
@@ -0,0 +1,58 @@
1
+ // ============================================================================
2
+ // AI Guardrails — tool allowlists, dry-run, audit logging
3
+ // ============================================================================
4
+ import { logger } from '../engine/logger.js';
5
+ let config = {};
6
+ export function setGuardrailConfig(c) {
7
+ config = c;
8
+ }
9
+ export function isDryRun() {
10
+ return config.dryRun ?? false;
11
+ }
12
+ export function isToolAllowed(toolName) {
13
+ if (!config.toolAllowlist || config.toolAllowlist.length === 0)
14
+ return true;
15
+ return config.toolAllowlist.includes(toolName);
16
+ }
17
+ /**
18
+ * Confirm-contract guard for destructive tools (0.7.10).
19
+ *
20
+ * Returns null when args.confirm === true (caller has authorized mutation),
21
+ * otherwise returns a CONFIRM_REQUIRED MaadError. Boolean strictness — no
22
+ * truthy coercion; only literal true authorizes mutation. Callers decide
23
+ * whether to surface the error or return a dry-run response carrying the
24
+ * affected set. Spec default is the dry-run path.
25
+ */
26
+ export function requireConfirm(args) {
27
+ if (args.confirm === true)
28
+ return null;
29
+ return {
30
+ code: 'CONFIRM_REQUIRED',
31
+ message: 'Mutation requires explicit confirm: true. Without it, the tool returns the would-affect result set without side effects.',
32
+ };
33
+ }
34
+ /**
35
+ * Log every tool call for audit trail. Optional `extras` lets destructive
36
+ * tools stamp confirm_mode (and future fields) on the audit payload without
37
+ * needing a separate writer.
38
+ */
39
+ export function auditToolCall(toolName, args, extras) {
40
+ logger.info('mcp', 'tool_call', `${toolName}`, extras ? { args, ...extras } : { args });
41
+ }
42
+ /**
43
+ * Dry-run response: returns what would happen without executing.
44
+ */
45
+ export function dryRunResponse(toolName, args) {
46
+ return {
47
+ content: [{
48
+ type: 'text',
49
+ text: JSON.stringify({
50
+ ok: true,
51
+ dryRun: true,
52
+ tool: toolName,
53
+ wouldExecute: args,
54
+ }),
55
+ }],
56
+ };
57
+ }
58
+ //# sourceMappingURL=guardrails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../src/mcp/guardrails.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0DAA0D;AAC1D,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQ7C,IAAI,MAAM,GAAoB,EAAE,CAAC;AAEjC,MAAM,UAAU,kBAAkB,CAAC,CAAkB;IACnD,MAAM,GAAG,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AASD;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAA2B;IACxD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,0HAA0H;KACpI,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,IAA6B,EAC7B,MAAgC;IAEhC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAA6B;IAC5E,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,IAAI;oBACZ,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC;aACH,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ export interface IdempotencyEntry {
2
+ response: unknown;
3
+ originalRequestId: string;
4
+ originalCompletedAt: string;
5
+ insertedAtMs: number;
6
+ }
7
+ export interface IdempotencyCacheOptions {
8
+ ttlMs?: number;
9
+ maxEntries?: number;
10
+ now?: () => number;
11
+ }
12
+ export declare class IdempotencyCache {
13
+ private ttlMs;
14
+ private maxEntries;
15
+ private now;
16
+ private entries;
17
+ constructor(opts?: IdempotencyCacheOptions);
18
+ /** Compose the cache key. Always use this — never pass raw strings. */
19
+ static composeKey(projectName: string, toolName: string, clientKey: string): string;
20
+ /**
21
+ * Return a cached entry if present and not expired, else null. Reinserts on
22
+ * hit so recent hits survive eviction.
23
+ */
24
+ get(key: string): IdempotencyEntry | null;
25
+ /**
26
+ * Store a response. Evicts the least-recently-used entry if the cap is full.
27
+ * Only call this for successful responses — failures must not short-circuit
28
+ * retries.
29
+ */
30
+ put(key: string, entry: Omit<IdempotencyEntry, 'insertedAtMs'>): void;
31
+ size(): number;
32
+ clear(): void;
33
+ }
34
+ /** Replace the singleton cache — called once from server startup with env-derived config. */
35
+ export declare function initIdempotencyCache(opts: IdempotencyCacheOptions): void;
36
+ /** Access the current singleton. Never returns null. */
37
+ export declare function getIdempotencyCache(): IdempotencyCache;
38
+ export declare function readIdempotencyEnv(): IdempotencyCacheOptions;
39
+ export type McpToolResponse = {
40
+ content: Array<{
41
+ type: 'text';
42
+ text: string;
43
+ }>;
44
+ };
45
+ /**
46
+ * Returns true if the response body (parsed from content[0].text) has
47
+ * `ok: true`. Silent false on parse failure — never cache anything we can't
48
+ * confirm succeeded.
49
+ */
50
+ export declare function isSuccessfulResponse(response: McpToolResponse): boolean;
51
+ /**
52
+ * Build a replay response: identical body to the cached original, plus a fresh
53
+ * `_meta` envelope identifying this as a replay. Clients that ignore `_meta`
54
+ * see a normal successful response.
55
+ */
56
+ export declare function buildReplayResponse(cached: IdempotencyEntry, currentRequestId: string): McpToolResponse;
57
+ /**
58
+ * Wrapper for mutating tool handlers. If `clientKey` is provided, checks the
59
+ * cache for a prior completed call matching `(projectName, toolName, clientKey)`.
60
+ * On hit: returns the cached response with fresh replay metadata.
61
+ * On miss: runs `fn()`, caches if successful, returns the result.
62
+ *
63
+ * `currentRequestId` is the request ID for this specific call (used both for
64
+ * _meta on replays and as `originalRequestId` when caching a fresh response).
65
+ * H6 will supply a real request ID from the MCP wrapper; for now callers can
66
+ * pass `crypto.randomUUID()` to satisfy the signature.
67
+ */
68
+ export declare function withIdempotency(projectName: string, toolName: string, clientKey: string | undefined, currentRequestId: string, fn: () => Promise<McpToolResponse>): Promise<McpToolResponse>;
69
+ //# sourceMappingURL=idempotency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/mcp/idempotency.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAKD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,GAAG,CAAe;IAG1B,OAAO,CAAC,OAAO,CAAuC;gBAE1C,IAAI,GAAE,uBAA4B;IAM9C,uEAAuE;IACvE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAInF;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAezC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAAG,IAAI;IAcrE,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,IAAI;CAGd;AAMD,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAExE;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAID,wBAAgB,kBAAkB,IAAI,uBAAuB,CAO5D;AAID,MAAM,MAAM,eAAe,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAEjF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CASvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,MAAM,GACvB,eAAe,CAkBjB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,gBAAgB,EAAE,MAAM,EACxB,EAAE,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,GACjC,OAAO,CAAC,eAAe,CAAC,CAkB1B"}