contentbase 0.4.0 → 0.4.1

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 (322) hide show
  1. package/dist/adapters/node-fs.d.ts +17 -0
  2. package/dist/adapters/node-fs.d.ts.map +1 -0
  3. package/dist/adapters/node-fs.js +71 -0
  4. package/dist/adapters/node-fs.js.map +1 -0
  5. package/dist/ast-query.d.ts +44 -0
  6. package/dist/ast-query.d.ts.map +1 -0
  7. package/dist/ast-query.js +95 -0
  8. package/dist/ast-query.js.map +1 -0
  9. package/dist/base-model.d.ts +8 -0
  10. package/dist/base-model.d.ts.map +1 -0
  11. package/dist/base-model.js +12 -0
  12. package/dist/base-model.js.map +1 -0
  13. package/dist/cli/commands/action.d.ts +2 -0
  14. package/dist/cli/commands/action.d.ts.map +1 -0
  15. package/dist/cli/commands/action.js +73 -0
  16. package/dist/cli/commands/action.js.map +1 -0
  17. package/dist/cli/commands/api/endpoints/actions.d.ts +13 -0
  18. package/dist/cli/commands/api/endpoints/actions.d.ts.map +1 -0
  19. package/dist/cli/commands/api/endpoints/actions.js +28 -0
  20. package/dist/cli/commands/api/endpoints/actions.js.map +1 -0
  21. package/dist/cli/commands/api/endpoints/doc.d.ts +5 -0
  22. package/dist/cli/commands/api/endpoints/doc.d.ts.map +1 -0
  23. package/dist/cli/commands/api/endpoints/doc.js +186 -0
  24. package/dist/cli/commands/api/endpoints/doc.js.map +1 -0
  25. package/dist/cli/commands/api/endpoints/docs-index.d.ts +8 -0
  26. package/dist/cli/commands/api/endpoints/docs-index.d.ts.map +1 -0
  27. package/dist/cli/commands/api/endpoints/docs-index.js +23 -0
  28. package/dist/cli/commands/api/endpoints/docs-index.js.map +1 -0
  29. package/dist/cli/commands/api/endpoints/document.d.ts +47 -0
  30. package/dist/cli/commands/api/endpoints/document.d.ts.map +1 -0
  31. package/dist/cli/commands/api/endpoints/document.js +146 -0
  32. package/dist/cli/commands/api/endpoints/document.js.map +1 -0
  33. package/dist/cli/commands/api/endpoints/documents.d.ts +35 -0
  34. package/dist/cli/commands/api/endpoints/documents.d.ts.map +1 -0
  35. package/dist/cli/commands/api/endpoints/documents.js +56 -0
  36. package/dist/cli/commands/api/endpoints/documents.js.map +1 -0
  37. package/dist/cli/commands/api/endpoints/index.d.ts +22 -0
  38. package/dist/cli/commands/api/endpoints/index.d.ts.map +1 -0
  39. package/dist/cli/commands/api/endpoints/index.js +38 -0
  40. package/dist/cli/commands/api/endpoints/index.js.map +1 -0
  41. package/dist/cli/commands/api/endpoints/inspect.d.ts +10 -0
  42. package/dist/cli/commands/api/endpoints/inspect.d.ts.map +1 -0
  43. package/dist/cli/commands/api/endpoints/inspect.js +15 -0
  44. package/dist/cli/commands/api/endpoints/inspect.js.map +1 -0
  45. package/dist/cli/commands/api/endpoints/models.d.ts +5 -0
  46. package/dist/cli/commands/api/endpoints/models.d.ts.map +1 -0
  47. package/dist/cli/commands/api/endpoints/models.js +9 -0
  48. package/dist/cli/commands/api/endpoints/models.js.map +1 -0
  49. package/dist/cli/commands/api/endpoints/query.d.ts +40 -0
  50. package/dist/cli/commands/api/endpoints/query.d.ts.map +1 -0
  51. package/dist/cli/commands/api/endpoints/query.js +106 -0
  52. package/dist/cli/commands/api/endpoints/query.js.map +1 -0
  53. package/dist/cli/commands/api/endpoints/root.d.ts +5 -0
  54. package/dist/cli/commands/api/endpoints/root.d.ts.map +1 -0
  55. package/dist/cli/commands/api/endpoints/root.js +7 -0
  56. package/dist/cli/commands/api/endpoints/root.js.map +1 -0
  57. package/dist/cli/commands/api/endpoints/search-reindex.d.ts +10 -0
  58. package/dist/cli/commands/api/endpoints/search-reindex.d.ts.map +1 -0
  59. package/dist/cli/commands/api/endpoints/search-reindex.js +38 -0
  60. package/dist/cli/commands/api/endpoints/search-reindex.js.map +1 -0
  61. package/dist/cli/commands/api/endpoints/search-status.d.ts +7 -0
  62. package/dist/cli/commands/api/endpoints/search-status.d.ts.map +1 -0
  63. package/dist/cli/commands/api/endpoints/search-status.js +33 -0
  64. package/dist/cli/commands/api/endpoints/search-status.js.map +1 -0
  65. package/dist/cli/commands/api/endpoints/search.d.ts +24 -0
  66. package/dist/cli/commands/api/endpoints/search.d.ts.map +1 -0
  67. package/dist/cli/commands/api/endpoints/search.js +61 -0
  68. package/dist/cli/commands/api/endpoints/search.js.map +1 -0
  69. package/dist/cli/commands/api/endpoints/semantic-search.d.ts +28 -0
  70. package/dist/cli/commands/api/endpoints/semantic-search.d.ts.map +1 -0
  71. package/dist/cli/commands/api/endpoints/semantic-search.js +76 -0
  72. package/dist/cli/commands/api/endpoints/semantic-search.js.map +1 -0
  73. package/dist/cli/commands/api/endpoints/text-search.d.ts +17 -0
  74. package/dist/cli/commands/api/endpoints/text-search.d.ts.map +1 -0
  75. package/dist/cli/commands/api/endpoints/text-search.js +55 -0
  76. package/dist/cli/commands/api/endpoints/text-search.js.map +1 -0
  77. package/dist/cli/commands/api/endpoints/validate.d.ts +12 -0
  78. package/dist/cli/commands/api/endpoints/validate.d.ts.map +1 -0
  79. package/dist/cli/commands/api/endpoints/validate.js +27 -0
  80. package/dist/cli/commands/api/endpoints/validate.js.map +1 -0
  81. package/dist/cli/commands/api/helpers.d.ts +8 -0
  82. package/dist/cli/commands/api/helpers.d.ts.map +1 -0
  83. package/dist/cli/commands/api/helpers.js +89 -0
  84. package/dist/cli/commands/api/helpers.js.map +1 -0
  85. package/dist/cli/commands/console.d.ts +2 -0
  86. package/dist/cli/commands/console.d.ts.map +1 -0
  87. package/dist/cli/commands/console.js +117 -0
  88. package/dist/cli/commands/console.js.map +1 -0
  89. package/dist/cli/commands/create.d.ts +2 -0
  90. package/dist/cli/commands/create.d.ts.map +1 -0
  91. package/dist/cli/commands/create.js +185 -0
  92. package/dist/cli/commands/create.js.map +1 -0
  93. package/dist/cli/commands/embed.d.ts +2 -0
  94. package/dist/cli/commands/embed.d.ts.map +1 -0
  95. package/dist/cli/commands/embed.js +231 -0
  96. package/dist/cli/commands/embed.js.map +1 -0
  97. package/dist/cli/commands/export.d.ts +2 -0
  98. package/dist/cli/commands/export.d.ts.map +1 -0
  99. package/dist/cli/commands/export.js +55 -0
  100. package/dist/cli/commands/export.js.map +1 -0
  101. package/dist/cli/commands/extract.d.ts +2 -0
  102. package/dist/cli/commands/extract.d.ts.map +1 -0
  103. package/dist/cli/commands/extract.js +149 -0
  104. package/dist/cli/commands/extract.js.map +1 -0
  105. package/dist/cli/commands/help.d.ts +2 -0
  106. package/dist/cli/commands/help.d.ts.map +1 -0
  107. package/dist/cli/commands/help.js +58 -0
  108. package/dist/cli/commands/help.js.map +1 -0
  109. package/dist/cli/commands/index.d.ts +18 -0
  110. package/dist/cli/commands/index.d.ts.map +1 -0
  111. package/dist/cli/commands/index.js +19 -0
  112. package/dist/cli/commands/index.js.map +1 -0
  113. package/dist/cli/commands/init.d.ts +2 -0
  114. package/dist/cli/commands/init.d.ts.map +1 -0
  115. package/dist/cli/commands/init.js +82 -0
  116. package/dist/cli/commands/init.js.map +1 -0
  117. package/dist/cli/commands/inspect.d.ts +2 -0
  118. package/dist/cli/commands/inspect.d.ts.map +1 -0
  119. package/dist/cli/commands/inspect.js +53 -0
  120. package/dist/cli/commands/inspect.js.map +1 -0
  121. package/dist/cli/commands/mcp.d.ts +2 -0
  122. package/dist/cli/commands/mcp.d.ts.map +1 -0
  123. package/dist/cli/commands/mcp.js +92 -0
  124. package/dist/cli/commands/mcp.js.map +1 -0
  125. package/dist/cli/commands/search.d.ts +2 -0
  126. package/dist/cli/commands/search.d.ts.map +1 -0
  127. package/dist/cli/commands/search.js +212 -0
  128. package/dist/cli/commands/search.js.map +1 -0
  129. package/dist/cli/commands/serve.d.ts +2 -0
  130. package/dist/cli/commands/serve.d.ts.map +1 -0
  131. package/dist/cli/commands/serve.js +298 -0
  132. package/dist/cli/commands/serve.js.map +1 -0
  133. package/dist/cli/commands/summary.d.ts +2 -0
  134. package/dist/cli/commands/summary.d.ts.map +1 -0
  135. package/dist/cli/commands/summary.js +58 -0
  136. package/dist/cli/commands/summary.js.map +1 -0
  137. package/dist/cli/commands/teach.d.ts +2 -0
  138. package/dist/cli/commands/teach.d.ts.map +1 -0
  139. package/dist/cli/commands/teach.js +80 -0
  140. package/dist/cli/commands/teach.js.map +1 -0
  141. package/dist/cli/commands/text-search.d.ts +2 -0
  142. package/dist/cli/commands/text-search.d.ts.map +1 -0
  143. package/dist/cli/commands/text-search.js +125 -0
  144. package/dist/cli/commands/text-search.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +2 -0
  146. package/dist/cli/commands/update.d.ts.map +1 -0
  147. package/dist/cli/commands/update.js +167 -0
  148. package/dist/cli/commands/update.js.map +1 -0
  149. package/dist/cli/commands/validate.d.ts +2 -0
  150. package/dist/cli/commands/validate.d.ts.map +1 -0
  151. package/dist/cli/commands/validate.js +129 -0
  152. package/dist/cli/commands/validate.js.map +1 -0
  153. package/dist/cli/index.d.ts +3 -0
  154. package/dist/cli/index.d.ts.map +1 -0
  155. package/dist/cli/index.js +84 -0
  156. package/dist/cli/index.js.map +1 -0
  157. package/dist/cli/load-collection.d.ts +7 -0
  158. package/dist/cli/load-collection.d.ts.map +1 -0
  159. package/dist/cli/load-collection.js +201 -0
  160. package/dist/cli/load-collection.js.map +1 -0
  161. package/dist/cli/registry.d.ts +17 -0
  162. package/dist/cli/registry.d.ts.map +1 -0
  163. package/dist/cli/registry.js +16 -0
  164. package/dist/cli/registry.js.map +1 -0
  165. package/dist/cnotes +0 -0
  166. package/dist/collection.d.ts +145 -0
  167. package/dist/collection.d.ts.map +1 -0
  168. package/dist/collection.js +684 -0
  169. package/dist/collection.js.map +1 -0
  170. package/dist/define-model.d.ts +45 -0
  171. package/dist/define-model.d.ts.map +1 -0
  172. package/dist/define-model.js +106 -0
  173. package/dist/define-model.js.map +1 -0
  174. package/dist/document.d.ts +119 -0
  175. package/dist/document.d.ts.map +1 -0
  176. package/dist/document.js +418 -0
  177. package/dist/document.js.map +1 -0
  178. package/dist/extract-sections.d.ts +46 -0
  179. package/dist/extract-sections.d.ts.map +1 -0
  180. package/dist/extract-sections.js +153 -0
  181. package/dist/extract-sections.js.map +1 -0
  182. package/dist/index.d.ts +28 -0
  183. package/dist/index.d.ts.map +1 -0
  184. package/dist/index.js +31 -0
  185. package/dist/index.js.map +1 -0
  186. package/dist/mcp/helpers.d.ts +14 -0
  187. package/dist/mcp/helpers.d.ts.map +1 -0
  188. package/dist/mcp/helpers.js +7 -0
  189. package/dist/mcp/helpers.js.map +1 -0
  190. package/dist/mcp/model-info.d.ts +2 -0
  191. package/dist/mcp/model-info.d.ts.map +1 -0
  192. package/dist/mcp/model-info.js +94 -0
  193. package/dist/mcp/model-info.js.map +1 -0
  194. package/dist/mcp/prompts.d.ts +2 -0
  195. package/dist/mcp/prompts.d.ts.map +1 -0
  196. package/dist/mcp/prompts.js +180 -0
  197. package/dist/mcp/prompts.js.map +1 -0
  198. package/dist/mcp/readme.d.ts +2 -0
  199. package/dist/mcp/readme.d.ts.map +1 -0
  200. package/dist/mcp/readme.js +71 -0
  201. package/dist/mcp/readme.js.map +1 -0
  202. package/dist/mcp/resources.d.ts +2 -0
  203. package/dist/mcp/resources.d.ts.map +1 -0
  204. package/dist/mcp/resources.js +85 -0
  205. package/dist/mcp/resources.js.map +1 -0
  206. package/dist/mcp/server.d.ts +18 -0
  207. package/dist/mcp/server.d.ts.map +1 -0
  208. package/dist/mcp/server.js +83 -0
  209. package/dist/mcp/server.js.map +1 -0
  210. package/dist/mcp/tools/mutation.d.ts +2 -0
  211. package/dist/mcp/tools/mutation.d.ts.map +1 -0
  212. package/dist/mcp/tools/mutation.js +155 -0
  213. package/dist/mcp/tools/mutation.js.map +1 -0
  214. package/dist/mcp/tools/query.d.ts +2 -0
  215. package/dist/mcp/tools/query.d.ts.map +1 -0
  216. package/dist/mcp/tools/query.js +130 -0
  217. package/dist/mcp/tools/query.js.map +1 -0
  218. package/dist/mcp/tools/search.d.ts +2 -0
  219. package/dist/mcp/tools/search.d.ts.map +1 -0
  220. package/dist/mcp/tools/search.js +168 -0
  221. package/dist/mcp/tools/search.js.map +1 -0
  222. package/dist/model-instance.d.ts +11 -0
  223. package/dist/model-instance.d.ts.map +1 -0
  224. package/dist/model-instance.js +208 -0
  225. package/dist/model-instance.js.map +1 -0
  226. package/dist/node-shortcuts.d.ts +25 -0
  227. package/dist/node-shortcuts.d.ts.map +1 -0
  228. package/dist/node-shortcuts.js +67 -0
  229. package/dist/node-shortcuts.js.map +1 -0
  230. package/dist/parse.d.ts +45 -0
  231. package/dist/parse.d.ts.map +1 -0
  232. package/dist/parse.js +98 -0
  233. package/dist/parse.js.map +1 -0
  234. package/dist/query/collection-query.d.ts +39 -0
  235. package/dist/query/collection-query.d.ts.map +1 -0
  236. package/dist/query/collection-query.js +184 -0
  237. package/dist/query/collection-query.js.map +1 -0
  238. package/dist/query/index.d.ts +8 -0
  239. package/dist/query/index.d.ts.map +1 -0
  240. package/dist/query/index.js +5 -0
  241. package/dist/query/index.js.map +1 -0
  242. package/dist/query/operators.d.ts +3 -0
  243. package/dist/query/operators.d.ts.map +1 -0
  244. package/dist/query/operators.js +18 -0
  245. package/dist/query/operators.js.map +1 -0
  246. package/dist/query/query-builder.d.ts +34 -0
  247. package/dist/query/query-builder.d.ts.map +1 -0
  248. package/dist/query/query-builder.js +84 -0
  249. package/dist/query/query-builder.js.map +1 -0
  250. package/dist/query/query-dsl.d.ts +36 -0
  251. package/dist/query/query-dsl.d.ts.map +1 -0
  252. package/dist/query/query-dsl.js +195 -0
  253. package/dist/query/query-dsl.js.map +1 -0
  254. package/dist/relationships/belongs-to.d.ts +9 -0
  255. package/dist/relationships/belongs-to.d.ts.map +1 -0
  256. package/dist/relationships/belongs-to.js +34 -0
  257. package/dist/relationships/belongs-to.js.map +1 -0
  258. package/dist/relationships/has-many.d.ts +23 -0
  259. package/dist/relationships/has-many.d.ts.map +1 -0
  260. package/dist/relationships/has-many.js +136 -0
  261. package/dist/relationships/has-many.js.map +1 -0
  262. package/dist/relationships/index.d.ts +26 -0
  263. package/dist/relationships/index.d.ts.map +1 -0
  264. package/dist/relationships/index.js +32 -0
  265. package/dist/relationships/index.js.map +1 -0
  266. package/dist/relationships/types.d.ts +2 -0
  267. package/dist/relationships/types.d.ts.map +1 -0
  268. package/dist/relationships/types.js +2 -0
  269. package/dist/relationships/types.js.map +1 -0
  270. package/dist/search/document-inputs.d.ts +30 -0
  271. package/dist/search/document-inputs.d.ts.map +1 -0
  272. package/dist/search/document-inputs.js +52 -0
  273. package/dist/search/document-inputs.js.map +1 -0
  274. package/dist/search/luca-semantic-search.d.ts +27 -0
  275. package/dist/search/luca-semantic-search.d.ts.map +1 -0
  276. package/dist/search/luca-semantic-search.js +56 -0
  277. package/dist/search/luca-semantic-search.js.map +1 -0
  278. package/dist/section.d.ts +21 -0
  279. package/dist/section.d.ts.map +1 -0
  280. package/dist/section.js +21 -0
  281. package/dist/section.js.map +1 -0
  282. package/dist/types.d.ts +185 -0
  283. package/dist/types.d.ts.map +1 -0
  284. package/dist/types.js +2 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/index.d.ts +9 -0
  287. package/dist/utils/index.d.ts.map +1 -0
  288. package/dist/utils/index.js +8 -0
  289. package/dist/utils/index.js.map +1 -0
  290. package/dist/utils/inflect.d.ts +6 -0
  291. package/dist/utils/inflect.d.ts.map +1 -0
  292. package/dist/utils/inflect.js +75 -0
  293. package/dist/utils/inflect.js.map +1 -0
  294. package/dist/utils/match-pattern.d.ts +25 -0
  295. package/dist/utils/match-pattern.d.ts.map +1 -0
  296. package/dist/utils/match-pattern.js +52 -0
  297. package/dist/utils/match-pattern.js.map +1 -0
  298. package/dist/utils/normalize-headings.d.ts +8 -0
  299. package/dist/utils/normalize-headings.d.ts.map +1 -0
  300. package/dist/utils/normalize-headings.js +19 -0
  301. package/dist/utils/normalize-headings.js.map +1 -0
  302. package/dist/utils/parse-table.d.ts +7 -0
  303. package/dist/utils/parse-table.d.ts.map +1 -0
  304. package/dist/utils/parse-table.js +17 -0
  305. package/dist/utils/parse-table.js.map +1 -0
  306. package/dist/utils/read-directory.d.ts +5 -0
  307. package/dist/utils/read-directory.d.ts.map +1 -0
  308. package/dist/utils/read-directory.js +29 -0
  309. package/dist/utils/read-directory.js.map +1 -0
  310. package/dist/utils/stringify-ast.d.ts +6 -0
  311. package/dist/utils/stringify-ast.d.ts.map +1 -0
  312. package/dist/utils/stringify-ast.js +8 -0
  313. package/dist/utils/stringify-ast.js.map +1 -0
  314. package/dist/utils/strip-markdown.d.ts +11 -0
  315. package/dist/utils/strip-markdown.d.ts.map +1 -0
  316. package/dist/utils/strip-markdown.js +48 -0
  317. package/dist/utils/strip-markdown.js.map +1 -0
  318. package/dist/validator.d.ts +10 -0
  319. package/dist/validator.d.ts.map +1 -0
  320. package/dist/validator.js +55 -0
  321. package/dist/validator.js.map +1 -0
  322. package/package.json +1 -1
@@ -0,0 +1,28 @@
1
+ export { Collection, introspectMetaSchema } from "./collection";
2
+ export type { FieldInfo } from "./collection";
3
+ export { Document } from "./document";
4
+ export { AstQuery } from "./ast-query";
5
+ export { NodeShortcuts } from "./node-shortcuts";
6
+ export { parse } from "./parse";
7
+ export type { ParsedDocument } from "./parse";
8
+ export { extractSections } from "./extract-sections";
9
+ export type { ExtractionEntry, ExtractSectionsOptions, SectionSource, } from "./extract-sections";
10
+ export { defineModel, generateDescription } from "./define-model";
11
+ export { Base } from "./base-model";
12
+ export { section } from "./section";
13
+ export { hasMany, belongsTo } from "./relationships/index";
14
+ export { CollectionQuery } from "./query/collection-query";
15
+ export { QueryBuilder } from "./query/query-builder";
16
+ export { queryDSLSchema, parseWhereClause, parseSortClause, executeQueryDSL, } from "./query/query-dsl";
17
+ export type { QueryDSL } from "./query/query-dsl";
18
+ export { createModelInstance } from "./model-instance";
19
+ export { validateDocument } from "./validator";
20
+ export { matchPattern, matchPatterns } from "./utils/match-pattern";
21
+ export { stripMarkdown } from "./utils/strip-markdown";
22
+ export type { StripMarkdownOptions } from "./utils/strip-markdown";
23
+ import { toString } from "mdast-util-to-string";
24
+ export { NodeStorageAdapter } from "./adapters/node-fs";
25
+ export type { ModelDefinition, InferModelInstance, SectionDefinition, HasManyDefinition, BelongsToDefinition, RelationshipDefinition, CollectionItem, CollectionOptions, HasManyAccessor, BelongsToAccessor, ValidationResult, SerializeOptions, SaveOptions, DocumentRef, StorageAdapter, FileStat, FileEntry, } from "./types";
26
+ export { z } from "zod";
27
+ export { toString };
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,QAAQ,EACR,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ // Core classes
2
+ export { Collection, introspectMetaSchema } from "./collection";
3
+ export { Document } from "./document";
4
+ export { AstQuery } from "./ast-query";
5
+ export { NodeShortcuts } from "./node-shortcuts";
6
+ export { parse } from "./parse";
7
+ export { extractSections } from "./extract-sections";
8
+ // defineModel and helpers
9
+ export { defineModel, generateDescription } from "./define-model";
10
+ export { Base } from "./base-model";
11
+ export { section } from "./section";
12
+ export { hasMany, belongsTo } from "./relationships/index";
13
+ // Query
14
+ export { CollectionQuery } from "./query/collection-query";
15
+ export { QueryBuilder } from "./query/query-builder";
16
+ export { queryDSLSchema, parseWhereClause, parseSortClause, executeQueryDSL, } from "./query/query-dsl";
17
+ // Model instance factory (advanced use)
18
+ export { createModelInstance } from "./model-instance";
19
+ // Validation
20
+ export { validateDocument } from "./validator";
21
+ // Pattern matching
22
+ export { matchPattern, matchPatterns } from "./utils/match-pattern";
23
+ // Markdown utilities
24
+ export { stripMarkdown } from "./utils/strip-markdown";
25
+ import { toString } from "mdast-util-to-string";
26
+ // Storage adapters
27
+ export { NodeStorageAdapter } from "./adapters/node-fs";
28
+ // Re-export zod for convenience
29
+ export { z } from "zod";
30
+ export { toString };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE3D,QAAQ;AACR,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAG3B,wCAAwC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEpE,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAuBxD,gCAAgC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare function errorResult(message: string): {
2
+ content: {
3
+ type: "text";
4
+ text: string;
5
+ }[];
6
+ isError: boolean;
7
+ };
8
+ export declare function textResult(text: string): {
9
+ content: {
10
+ type: "text";
11
+ text: string;
12
+ }[];
13
+ };
14
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM;;;;;;EAE1C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM;;;;;EAEtC"}
@@ -0,0 +1,7 @@
1
+ export function errorResult(message) {
2
+ return { content: [{ type: 'text', text: message }], isError: true };
3
+ }
4
+ export function textResult(text) {
5
+ return { content: [{ type: 'text', text }] };
6
+ }
7
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;AACvD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateModelInfo(collection: any, def: any): string;
2
+ //# sourceMappingURL=model-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-info.d.ts","sourceRoot":"","sources":["../../src/mcp/model-info.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAmG1D"}
@@ -0,0 +1,94 @@
1
+ import { introspectMetaSchema } from '../index.js';
2
+ export function generateModelInfo(collection, def) {
3
+ const lines = [];
4
+ const name = def.name;
5
+ const prefix = def.prefix;
6
+ const description = def.description || '';
7
+ const prefixDocs = collection.available.filter((id) => id.startsWith(prefix + '/'));
8
+ lines.push(`# Model: ${name}`, '');
9
+ lines.push(`- **Prefix:** \`${prefix}/\``);
10
+ lines.push(`- **Documents:** ${prefixDocs.length}`);
11
+ if (description)
12
+ lines.push(`- **Description:** ${description}`);
13
+ lines.push('');
14
+ // Fields
15
+ const fields = introspectMetaSchema(def.meta);
16
+ if (fields.length > 0) {
17
+ lines.push('## Frontmatter Fields', '');
18
+ lines.push('| Field | Type | Required | Default | Description |');
19
+ lines.push('|-------|------|----------|---------|-------------|');
20
+ for (const f of fields) {
21
+ const req = f.required ? 'yes' : 'no';
22
+ const def_val = f.defaultValue !== undefined ? `\`${JSON.stringify(f.defaultValue)}\`` : '';
23
+ const desc = f.description || '';
24
+ lines.push(`| ${f.name} | ${f.type} | ${req} | ${def_val} | ${desc} |`);
25
+ }
26
+ lines.push('');
27
+ }
28
+ // Sections
29
+ const sections = Object.entries(def.sections || {});
30
+ if (sections.length > 0) {
31
+ lines.push('## Sections', '');
32
+ for (const [key, sec] of sections) {
33
+ lines.push(`- **${sec.heading}** (key: \`${key}\`)${sec.schema ? ' — has schema validation' : ''}`);
34
+ if (sec.alternatives?.length) {
35
+ lines.push(` Alternatives: ${sec.alternatives.join(', ')}`);
36
+ }
37
+ }
38
+ lines.push('');
39
+ }
40
+ // Relationships
41
+ const relationships = Object.entries(def.relationships || {});
42
+ if (relationships.length > 0) {
43
+ lines.push('## Relationships', '');
44
+ for (const [key, rel] of relationships) {
45
+ lines.push(`- \`${key}\` → ${rel.type} **${rel.model}**`);
46
+ }
47
+ lines.push('');
48
+ }
49
+ // Computed & Scopes
50
+ const computedKeys = Object.keys(def.computed || {});
51
+ if (computedKeys.length > 0) {
52
+ lines.push('## Computed Properties', '');
53
+ lines.push(computedKeys.map(k => `- \`${k}\``).join('\n'));
54
+ lines.push('');
55
+ }
56
+ const scopeKeys = Object.keys(def.scopes || {});
57
+ if (scopeKeys.length > 0) {
58
+ lines.push('## Named Scopes', '');
59
+ lines.push(scopeKeys.map(k => `- \`${k}\``).join('\n'));
60
+ lines.push('');
61
+ }
62
+ // Existing documents
63
+ if (prefixDocs.length > 0) {
64
+ lines.push('## Existing Documents', '');
65
+ for (const id of prefixDocs) {
66
+ lines.push(`- \`${id}\``);
67
+ }
68
+ lines.push('');
69
+ }
70
+ // Example scaffold
71
+ const defaultMeta = {};
72
+ for (const f of fields) {
73
+ if (f.defaultValue !== undefined) {
74
+ defaultMeta[f.name] = f.defaultValue;
75
+ }
76
+ else if (f.required) {
77
+ defaultMeta[f.name] = `<${f.type}>`;
78
+ }
79
+ }
80
+ const sectionHeadings = sections.map(([, sec]) => `## ${sec.heading}\n\n`);
81
+ lines.push('## Example Document', '');
82
+ lines.push('```markdown');
83
+ lines.push('---');
84
+ for (const [k, v] of Object.entries(defaultMeta)) {
85
+ lines.push(`${k}: ${typeof v === 'string' ? v : JSON.stringify(v)}`);
86
+ }
87
+ lines.push('---');
88
+ lines.push(`# Your Title Here`);
89
+ lines.push('');
90
+ lines.push(sectionHeadings.join(''));
91
+ lines.push('```');
92
+ return lines.join('\n');
93
+ }
94
+ //# sourceMappingURL=model-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-info.js","sourceRoot":"","sources":["../../src/mcp/model-info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerPrompts(mcpServer: any, collection: any): void;
2
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,QAiM9D"}
@@ -0,0 +1,180 @@
1
+ import { z } from 'zod';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs/promises';
4
+ import { introspectMetaSchema, validateDocument } from '../index.js';
5
+ export function registerPrompts(mcpServer, collection) {
6
+ const modelDefs = collection.modelDefinitions;
7
+ // Per-model creation prompts
8
+ for (const def of modelDefs) {
9
+ const modelName = def.name;
10
+ const promptName = `create-${modelName.toLowerCase()}`;
11
+ mcpServer.prompt(promptName, {
12
+ description: `Guide creation of a new ${modelName} document with proper schema and sections`,
13
+ args: {
14
+ title: z.string().describe('Title for the new document'),
15
+ },
16
+ handler: (args) => {
17
+ const fields = introspectMetaSchema(def.meta);
18
+ const sections = Object.entries(def.sections || {}).map(([key, sec]) => ({
19
+ key,
20
+ heading: sec.heading,
21
+ hasSchema: !!sec.schema,
22
+ }));
23
+ const fieldDocs = fields.map((f) => `- **${f.name}** (${f.type}${f.required ? ', required' : ''})${f.description ? `: ${f.description}` : ''}${f.defaultValue !== undefined ? ` [default: ${JSON.stringify(f.defaultValue)}]` : ''}`).join('\n');
24
+ const sectionDocs = sections.map((s) => `- **${s.heading}** (key: \`${s.key}\`)${s.hasSchema ? ' — has schema validation' : ''}`).join('\n');
25
+ const content = [
26
+ `# Create a new ${modelName}`,
27
+ '',
28
+ `Title: ${args.title || '(not specified)'}`,
29
+ '',
30
+ '## Frontmatter Fields',
31
+ '',
32
+ fieldDocs || '(no schema fields defined)',
33
+ '',
34
+ '## Sections',
35
+ '',
36
+ sectionDocs || '(no sections defined)',
37
+ '',
38
+ '## Instructions',
39
+ '',
40
+ `Use the \`create_document\` tool with model="${modelName}" and fill in the meta fields.`,
41
+ 'Then use `update_section` to populate each section with content.',
42
+ ].join('\n');
43
+ return [{ role: 'user', content }];
44
+ },
45
+ });
46
+ }
47
+ mcpServer.prompt('review-document', {
48
+ description: 'Fetch a document, run validation, and present it for review',
49
+ args: {
50
+ pathId: z.string().describe('Document path ID to review'),
51
+ },
52
+ handler: (args) => {
53
+ const pathId = args.pathId;
54
+ if (!pathId) {
55
+ return [{ role: 'user', content: 'Error: pathId argument is required.' }];
56
+ }
57
+ const doc = collection.document(pathId);
58
+ if (!doc) {
59
+ return [{ role: 'user', content: `Document not found: ${pathId}` }];
60
+ }
61
+ const def = collection.findModelDefinition(pathId);
62
+ let validationText = '';
63
+ if (def) {
64
+ const result = validateDocument(doc, def);
65
+ validationText = result.valid
66
+ ? '\n**Validation: PASSED**\n'
67
+ : `\n**Validation: FAILED**\n\nErrors:\n${result.errors.map((e) => `- ${e.path.join('.')}: ${e.message}`).join('\n')}\n`;
68
+ }
69
+ else {
70
+ validationText = '\n*No model definition found — validation skipped.*\n';
71
+ }
72
+ const content = [
73
+ `# Review: ${doc.title}`,
74
+ '',
75
+ `**Path:** ${pathId}`,
76
+ `**Model:** ${def ? def.name : 'untyped'}`,
77
+ validationText,
78
+ '## Outline',
79
+ '',
80
+ doc.toOutline(),
81
+ '',
82
+ '## Frontmatter',
83
+ '',
84
+ '```json',
85
+ JSON.stringify(doc.meta, null, 2),
86
+ '```',
87
+ '',
88
+ '## Content',
89
+ '',
90
+ doc.content,
91
+ ].join('\n');
92
+ return [{ role: 'user', content }];
93
+ },
94
+ });
95
+ mcpServer.prompt('teach', {
96
+ description: 'Full contentbase documentation — models, table of contents, CLI reference, and API primer. For a quick-start behavioral guide, use the `read_me` tool instead.',
97
+ handler: async () => {
98
+ const modelsSummary = collection.generateModelSummary();
99
+ const toc = collection.tableOfContents({ title: 'Table of Contents' });
100
+ const packageRoot = path.resolve(import.meta.dir, '../..');
101
+ let primer = '';
102
+ let cli = '';
103
+ try {
104
+ primer = await fs.readFile(path.join(packageRoot, 'PRIMER.md'), 'utf8');
105
+ }
106
+ catch { }
107
+ try {
108
+ cli = await fs.readFile(path.join(packageRoot, 'CLI.md'), 'utf8');
109
+ }
110
+ catch { }
111
+ const content = [
112
+ '> **Quick start:** Call the `read_me` tool for a concise behavioral guide. This prompt provides the full reference.',
113
+ '',
114
+ modelsSummary.trimEnd(),
115
+ '', '---', '',
116
+ toc.trimEnd(),
117
+ '', '---', '',
118
+ cli.trimEnd(),
119
+ '', '---', '',
120
+ primer.trimEnd(),
121
+ ].join('\n');
122
+ return [{ role: 'user', content }];
123
+ },
124
+ });
125
+ mcpServer.prompt('query-guide', {
126
+ description: 'Show available models, fields, and query operators to help build queries',
127
+ args: {
128
+ intent: z.string().optional().describe('What you want to find (helps tailor the guide)'),
129
+ },
130
+ handler: () => {
131
+ const modelsInfo = modelDefs.map((def) => {
132
+ const fields = introspectMetaSchema(def.meta);
133
+ const fieldList = fields.map((f) => ` - ${f.name} (${f.type})`).join('\n');
134
+ return `### ${def.name} (prefix: ${def.prefix})\n${fieldList || ' (no schema fields)'}`;
135
+ }).join('\n\n');
136
+ const content = [
137
+ '# Query Guide',
138
+ '',
139
+ '## Available Models',
140
+ '',
141
+ modelsInfo || '(no models registered)',
142
+ '',
143
+ '## Query Operators',
144
+ '',
145
+ '| Operator | Description | Example value |',
146
+ '|----------|-------------|---------------|',
147
+ '| eq | Exact equality (default) | `"published"` |',
148
+ '| in | Value is in array | `["draft", "published"]` |',
149
+ '| notIn | Value is not in array | `["archived"]` |',
150
+ '| gt / lt / gte / lte | Numeric/date comparison | `5` |',
151
+ '| contains | String contains substring | `"auth"` |',
152
+ '| startsWith / endsWith | String prefix/suffix | `"user-"` |',
153
+ '| regex | Regex pattern match | `"^v\\\\d+"` |',
154
+ '| exists / notExists | Field presence check | (no value needed) |',
155
+ '',
156
+ '## Example (MongoDB-style DSL)',
157
+ '',
158
+ '```json',
159
+ '{',
160
+ ' "model": "Epic",',
161
+ ' "where": {',
162
+ ' "meta.status": "active",',
163
+ ' "meta.priority": { "$in": ["high", "critical"] }',
164
+ ' },',
165
+ ' "sort": { "meta.priority": "desc" },',
166
+ ' "limit": 10',
167
+ '}',
168
+ '```',
169
+ '',
170
+ 'Where value shortcuts:',
171
+ '- Literal value → implicit $eq: `"meta.status": "active"`',
172
+ '- Array → implicit $in: `"meta.tags": ["a", "b"]`',
173
+ '- Operator object: `"meta.priority": { "$gt": 5 }`',
174
+ '- Multiple operators: `"meta.priority": { "$gte": 3, "$lte": 8 }`',
175
+ ].join('\n');
176
+ return [{ role: 'user', content }];
177
+ },
178
+ });
179
+ }
180
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function generateReadMe(collection: any, modelDefs: any[]): string;
2
+ //# sourceMappingURL=readme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../src/mcp/readme.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAsJ/D"}
@@ -0,0 +1,71 @@
1
+ import { introspectMetaSchema } from '../index.js';
2
+ export function generateReadMe(collection, modelDefs) {
3
+ const lines = [];
4
+ // Section 1: The Rules
5
+ const rootPath = collection.rootPath;
6
+ lines.push('# Contentbase Collection Guide', '', `> **This collection is located at \`${rootPath}\`.**`, '', '## Rules — READ CAREFULLY', '', `**Every markdown file under \`${rootPath}\` is a structured document governed by a model schema.** These are NOT freeform files. They have required frontmatter fields, expected section headings, and validation rules. Treat them accordingly.`, '', '1. **DO NOT write or edit markdown files directly** — not with Write, Edit, cat, echo, sed, or any other means. Use `create_document` to scaffold new documents. Use `update_section` to edit section content. Use `update_document` to change frontmatter. These tools ensure the document structure stays valid.', '2. **ALWAYS call `validate` after ANY mutation** — after creating, updating frontmatter, or editing sections. No exceptions. If validation fails, fix the document before moving on.', '3. **Use MCP tools to read content** — not cat, Read, or raw file access. Use `query` to fetch documents by criteria, `search_content` for full-text search, and `list_documents` for discovery.', '4. **A document\'s folder prefix = its model = its contract.** The prefix determines which schema governs the file — what frontmatter fields are required, what sections are expected, and what values are valid. Do not guess. Call `get_model_info` if you are unsure.', '5. **Every document MUST have a title** — either an H1 heading (`# Title`) or a `title` field in frontmatter. Validation will fail without one, unless the model sets `titleOptional: true`.', '');
7
+ // Section 2: Models in This Collection
8
+ lines.push('## Models in This Collection', '');
9
+ for (const def of modelDefs) {
10
+ const name = def.name;
11
+ const prefix = def.prefix;
12
+ const description = def.description || '';
13
+ const prefixDocs = collection.available.filter((id) => id.startsWith(prefix + '/'));
14
+ const docCount = prefixDocs.length;
15
+ lines.push(`### ${name}`, '');
16
+ lines.push(`- **Prefix:** \`${prefix}/\``);
17
+ lines.push(`- **Documents:** ${docCount}`);
18
+ if (description)
19
+ lines.push(`- **Description:** ${description}`);
20
+ lines.push('');
21
+ // Fields
22
+ const fields = introspectMetaSchema(def.meta);
23
+ if (fields.length > 0) {
24
+ lines.push('**Frontmatter Fields:**', '');
25
+ lines.push('| Field | Type | Required | Default | Description |');
26
+ lines.push('|-------|------|----------|---------|-------------|');
27
+ for (const f of fields) {
28
+ const req = f.required ? 'yes' : 'no';
29
+ const def_val = f.defaultValue !== undefined ? `\`${JSON.stringify(f.defaultValue)}\`` : '';
30
+ const desc = f.description || '';
31
+ lines.push(`| ${f.name} | ${f.type} | ${req} | ${def_val} | ${desc} |`);
32
+ }
33
+ lines.push('');
34
+ }
35
+ // Sections
36
+ const sections = Object.entries(def.sections || {});
37
+ if (sections.length > 0) {
38
+ lines.push('**Sections:**', '');
39
+ for (const [key, sec] of sections) {
40
+ lines.push(`- **${sec.heading}** (key: \`${key}\`)${sec.schema ? ' — validated' : ''}`);
41
+ }
42
+ lines.push('');
43
+ }
44
+ // Relationships
45
+ const relationships = Object.entries(def.relationships || {});
46
+ if (relationships.length > 0) {
47
+ lines.push('**Relationships:**', '');
48
+ for (const [key, rel] of relationships) {
49
+ lines.push(`- \`${key}\` → ${rel.type} **${rel.model}**`);
50
+ }
51
+ lines.push('');
52
+ }
53
+ // Computed & Scopes
54
+ const computedKeys = Object.keys(def.computed || {});
55
+ const scopeKeys = Object.keys(def.scopes || {});
56
+ if (computedKeys.length > 0)
57
+ lines.push(`**Computed:** ${computedKeys.join(', ')}`, '');
58
+ if (scopeKeys.length > 0)
59
+ lines.push(`**Scopes:** ${scopeKeys.join(', ')}`, '');
60
+ }
61
+ // Section 3: Capability Map
62
+ lines.push('## Capability Map', '', '| Intent | Tool |', '|--------|------|', '| Orientation & guidance | `read_me` |', '| See what models exist | `inspect` |', '| Deep-dive one model | `get_model_info` |', '| List documents | `list_documents` |', '| Find by criteria | `query` |', '| Full-text search | `search_content` |', '| File-level grep | `text_search` |', '| Keyword search (BM25) | `keyword_search` |', '| Semantic search (embeddings) | `semantic_search` |', '| Hybrid search (keyword + semantic) | `hybrid_search` |', '| Create new document | `create_document` |', '| Edit a section | `update_section` |', '| Update frontmatter | `update_document` |', '| Validate a document | `validate` |', '| Delete a document | `delete_document` |', '| Run a collection action | `run_action` |', '');
63
+ // Section 4: Workflow
64
+ lines.push('## Recommended Workflow', '', '1. **Orientation** — Call `read_me` (this tool) at the start of every session.', '2. **Discovery** — Use `list_documents` or `query` to find what exists.', '3. **Reading** — Use `query` with `select` to fetch specific fields, or read a document resource.', '4. **Creating** — Use `create_document` with the correct prefix. It scaffolds frontmatter and sections.', '5. **Editing** — Use `update_section` for targeted section edits, `update_document` for frontmatter.', '6. **Validation** — Always call `validate` after creating or editing.', '');
65
+ // Section 5: Query Quick Reference
66
+ lines.push('## Query Quick Reference', '', 'The `query` tool uses MongoDB-style DSL:', '', '- Literal value → `$eq`: `"meta.status": "active"`', '- Array → `$in`: `"meta.tags": ["a", "b"]`', '- Operator object: `"meta.priority": { "$gt": 5 }`', '- Operators: `$eq`, `$neq`, `$in`, `$notIn`, `$gt`, `$lt`, `$gte`, `$lte`, `$contains`, `$startsWith`, `$endsWith`, `$regex`, `$exists`', '- Supports `sort`, `limit`, `offset`, `select`, `scopes`, `method` (fetchAll/first/last/count)', '');
67
+ // Section 6: Document Anatomy
68
+ lines.push('## Document Anatomy', '', '```markdown', '---', 'field: value # YAML frontmatter (model schema)', '---', '# Document Title # H1 = title', '', '## Section Name # H2 = sections (defined by model)', '', 'Content here...', '```');
69
+ return lines.join('\n');
70
+ }
71
+ //# sourceMappingURL=readme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.js","sourceRoot":"","sources":["../../src/mcp/readme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,UAAU,cAAc,CAAC,UAAe,EAAE,SAAgB;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,uBAAuB;IACvB,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAkB,CAAA;IAE9C,KAAK,CAAC,IAAI,CACR,gCAAgC,EAChC,EAAE,EACF,uCAAuC,QAAQ,OAAO,EACtD,EAAE,EACF,2BAA2B,EAC3B,EAAE,EACF,iCAAiC,QAAQ,yMAAyM,EAClP,EAAE,EACF,oTAAoT,EACpT,sLAAsL,EACtL,kMAAkM,EAClM,0QAA0Q,EAC1Q,8LAA8L,EAC9L,EAAE,CACH,CAAA;IAED,uCAAuC;IACvC,KAAK,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAA;IAE9C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAc,CAAA;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAgB,CAAA;QACnC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;QACzC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAA;QAC3F,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAA;QAElC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,KAAK,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;QAC1C,IAAI,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEd,SAAS;QACT,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;YACzC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;YACjE,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;YACjE,KAAK,MAAM,CAAC,IAAI,MAAe,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;gBACrC,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC3F,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAA;gBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,OAAO,MAAM,IAAI,IAAI,CAAC,CAAA;YACzE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;YAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,QAA2B,EAAE,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACzF,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;QAED,gBAAgB;QAChB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAA;QAC7D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;YACpC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,aAAgC,EAAE,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;YAC3D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QAC/C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACvF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CACR,mBAAmB,EACnB,EAAE,EACF,mBAAmB,EACnB,mBAAmB,EACnB,wCAAwC,EACxC,uCAAuC,EACvC,4CAA4C,EAC5C,uCAAuC,EACvC,gCAAgC,EAChC,yCAAyC,EACzC,qCAAqC,EACrC,8CAA8C,EAC9C,sDAAsD,EACtD,0DAA0D,EAC1D,6CAA6C,EAC7C,uCAAuC,EACvC,4CAA4C,EAC5C,sCAAsC,EACtC,2CAA2C,EAC3C,4CAA4C,EAC5C,EAAE,CACH,CAAA;IAED,sBAAsB;IACtB,KAAK,CAAC,IAAI,CACR,yBAAyB,EACzB,EAAE,EACF,gFAAgF,EAChF,yEAAyE,EACzE,mGAAmG,EACnG,yGAAyG,EACzG,sGAAsG,EACtG,uEAAuE,EACvE,EAAE,CACH,CAAA;IAED,mCAAmC;IACnC,KAAK,CAAC,IAAI,CACR,0BAA0B,EAC1B,EAAE,EACF,0CAA0C,EAC1C,EAAE,EACF,oDAAoD,EACpD,4CAA4C,EAC5C,oDAAoD,EACpD,yIAAyI,EACzI,gGAAgG,EAChG,EAAE,CACH,CAAA;IAED,8BAA8B;IAC9B,KAAK,CAAC,IAAI,CACR,qBAAqB,EACrB,EAAE,EACF,aAAa,EACb,KAAK,EACL,qDAAqD,EACrD,KAAK,EACL,gCAAgC,EAChC,EAAE,EACF,sDAAsD,EACtD,EAAE,EACF,iBAAiB,EACjB,KAAK,CACN,CAAA;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerResources(mcpServer: any, collection: any): void;
2
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,QAoFhE"}
@@ -0,0 +1,85 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import { buildSchemaJSON } from '../cli/commands/api/helpers.js';
4
+ export function registerResources(mcpServer, collection) {
5
+ mcpServer.resource('contentbase://schema', {
6
+ name: 'Collection Schema',
7
+ description: 'JSON schema of all registered models — fields, sections, relationships, computed properties',
8
+ mimeType: 'application/json',
9
+ handler: () => JSON.stringify(buildSchemaJSON(collection), null, 2),
10
+ });
11
+ mcpServer.resource('contentbase://toc', {
12
+ name: 'Table of Contents',
13
+ description: 'Markdown table of contents for all documents in the collection',
14
+ mimeType: 'text/markdown',
15
+ handler: () => collection.tableOfContents({ title: 'Table of Contents' }),
16
+ });
17
+ mcpServer.resource('contentbase://models-summary', {
18
+ name: 'Models Summary',
19
+ description: 'Generated README.md describing all model definitions with attributes, sections, and relationships',
20
+ mimeType: 'text/markdown',
21
+ handler: () => collection.generateModelSummary(),
22
+ });
23
+ mcpServer.resource('contentbase://primer', {
24
+ name: 'Contentbase Primer',
25
+ description: 'Combined teach output — models summary, table of contents, CLI reference, and API primer',
26
+ mimeType: 'text/markdown',
27
+ handler: async () => {
28
+ const modelsSummary = collection.generateModelSummary();
29
+ const toc = collection.tableOfContents({ title: 'Table of Contents' });
30
+ const packageRoot = path.resolve(import.meta.dir, '../..');
31
+ let primer = '';
32
+ let cli = '';
33
+ try {
34
+ primer = await fs.readFile(path.join(packageRoot, 'PRIMER.md'), 'utf8');
35
+ }
36
+ catch { }
37
+ try {
38
+ cli = await fs.readFile(path.join(packageRoot, 'CLI.md'), 'utf8');
39
+ }
40
+ catch { }
41
+ return [
42
+ modelsSummary.trimEnd(),
43
+ '',
44
+ '---',
45
+ '',
46
+ toc.trimEnd(),
47
+ '',
48
+ '---',
49
+ '',
50
+ cli.trimEnd(),
51
+ '',
52
+ '---',
53
+ '',
54
+ primer.trimEnd(),
55
+ '',
56
+ ].join('\n');
57
+ },
58
+ });
59
+ // Per-document resources
60
+ for (const pathId of collection.available) {
61
+ const uri = `contentbase://documents/${pathId}`;
62
+ const doc = collection.document(pathId);
63
+ mcpServer.resource(uri, {
64
+ name: doc.title || pathId,
65
+ description: `Document: ${pathId}`,
66
+ mimeType: 'application/json',
67
+ handler: () => {
68
+ const d = collection.document(pathId);
69
+ const modelDef = collection.findModelDefinition(pathId);
70
+ return JSON.stringify({
71
+ id: d.id,
72
+ title: d.title,
73
+ meta: d.meta,
74
+ content: d.content,
75
+ outline: d.toOutline(),
76
+ model: modelDef?.name || null,
77
+ createdAt: d.createdAt,
78
+ updatedAt: d.updatedAt,
79
+ size: d.size,
80
+ }, null, 2);
81
+ },
82
+ });
83
+ }
84
+ }
85
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface McpServerOptions {
2
+ transport: 'stdio' | 'http';
3
+ port: number;
4
+ contentFolder?: string;
5
+ modulePath?: string;
6
+ mcpCompat?: 'standard' | 'codex';
7
+ stdioCompat?: 'standard' | 'codex' | 'auto';
8
+ watch?: boolean;
9
+ }
10
+ export declare function createMcpServer(container: any, options: McpServerOptions): Promise<{
11
+ mcpServer: any;
12
+ collection: import("../collection.js").Collection;
13
+ }>;
14
+ export declare function startMcpServer(container: any, options: McpServerOptions): Promise<{
15
+ mcpServer: any;
16
+ collection: import("../collection.js").Collection;
17
+ }>;
18
+ //# sourceMappingURL=server.d.ts.map