contentbase 0.4.0 → 0.4.2

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 (323) 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 +123 -0
  175. package/dist/document.d.ts.map +1 -0
  176. package/dist/document.js +434 -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 +3 -3
  323. package/src/document.ts +26 -8
@@ -0,0 +1,149 @@
1
+ import { z } from 'zod';
2
+ import picomatch from 'picomatch';
3
+ import yaml from 'js-yaml';
4
+ import { commands } from '../registry.js';
5
+ import { loadCollection } from '../load-collection.js';
6
+ import { stringifyAst } from '../../utils/stringify-ast.js';
7
+ const argsSchema = z.object({
8
+ sections: z.string().optional(),
9
+ s: z.string().optional(),
10
+ title: z.string().optional(),
11
+ t: z.string().optional(),
12
+ frontmatter: z.boolean().default(false),
13
+ noNormalizeHeadings: z.boolean().default(false),
14
+ contentFolder: z.string().optional(),
15
+ });
16
+ async function handler(options, context) {
17
+ const collection = await loadCollection({
18
+ contentFolder: options.contentFolder,
19
+ });
20
+ const target = context.container.argv._[1];
21
+ if (!target) {
22
+ console.error('Usage: cnotes extract <target> --sections "Section1,Section2"');
23
+ process.exit(1);
24
+ }
25
+ const sectionsArg = options.sections || options.s;
26
+ if (!sectionsArg) {
27
+ console.error('--sections is required');
28
+ process.exit(1);
29
+ }
30
+ const sectionNames = sectionsArg
31
+ .split(',')
32
+ .map((s) => s.trim())
33
+ .filter(Boolean);
34
+ const includeFrontmatter = options.frontmatter;
35
+ const noNormalize = options.noNormalizeHeadings;
36
+ const title = options.title || options.t;
37
+ const isMatch = picomatch(target);
38
+ const matchingIds = collection.available.filter((id) => isMatch(id));
39
+ if (matchingIds.length === 0) {
40
+ console.error(`No documents matched: ${target}`);
41
+ process.exit(1);
42
+ }
43
+ const allNodes = [];
44
+ if (title) {
45
+ allNodes.push({
46
+ type: 'heading',
47
+ depth: 1,
48
+ children: [{ type: 'text', value: title }],
49
+ });
50
+ }
51
+ for (const id of matchingIds) {
52
+ const doc = collection.document(id);
53
+ if (includeFrontmatter && Object.keys(doc.meta).length > 0) {
54
+ allNodes.push({
55
+ type: 'yaml',
56
+ value: yaml.dump(doc.meta).trim(),
57
+ });
58
+ }
59
+ const docNodes = [];
60
+ const titleNode = doc.nodes.firstHeading;
61
+ if (titleNode) {
62
+ docNodes.push(titleNode);
63
+ }
64
+ const leading = doc.nodes.leadingElementsAfterTitle;
65
+ if (leading.length > 0) {
66
+ docNodes.push(...leading);
67
+ }
68
+ for (const name of sectionNames) {
69
+ try {
70
+ const sectionNodes = doc.extractSection(name);
71
+ if (sectionNodes.length > 0) {
72
+ docNodes.push(...sectionNodes);
73
+ }
74
+ }
75
+ catch {
76
+ // Section not found — skip
77
+ }
78
+ }
79
+ if (!noNormalize && docNodes.length > 0) {
80
+ const headings = docNodes.filter((n) => n.type === 'heading');
81
+ if (headings.length > 0) {
82
+ const minDepth = Math.min(...headings.map((h) => h.depth));
83
+ const targetDepth = title ? 2 : 1;
84
+ const shift = targetDepth - minDepth;
85
+ if (shift !== 0) {
86
+ for (const h of headings) {
87
+ h.depth = Math.max(1, Math.min(6, h.depth + shift));
88
+ }
89
+ }
90
+ }
91
+ }
92
+ allNodes.push(...docNodes);
93
+ }
94
+ const combinedAst = { type: 'root', children: allNodes };
95
+ console.log(stringifyAst(combinedAst).trim());
96
+ }
97
+ commands.register('extract', {
98
+ description: 'Extract specific sections from documents',
99
+ usage: '<glob>',
100
+ help: `# cnotes extract
101
+
102
+ Extract specific sections from one or more documents. Supports glob patterns for matching multiple documents and outputs clean markdown with normalized headings.
103
+
104
+ ## Usage
105
+
106
+ \`\`\`
107
+ cnotes extract <target> --sections "Section1,Section2" [options]
108
+ \`\`\`
109
+
110
+ ## Arguments
111
+
112
+ | Argument | Description |
113
+ |----------|-------------|
114
+ | \`target\` | Path ID or glob pattern (e.g. \`epics/*\`, \`tasks/auth-*\`) |
115
+
116
+ ## Options
117
+
118
+ | Option | Alias | Description |
119
+ |--------|-------|-------------|
120
+ | \`--sections\` | \`-s\` | **Required.** Comma-separated section headings to extract |
121
+ | \`--title\` | \`-t\` | Add a top-level H1 title to the output |
122
+ | \`--frontmatter\` | | Include YAML frontmatter in the output |
123
+ | \`--noNormalizeHeadings\` | | Skip heading depth normalization |
124
+ | \`--contentFolder\` | | Path to content folder |
125
+
126
+ ## Heading Normalization
127
+
128
+ By default, extracted headings are re-leveled so the output starts at H1 (or H2 when \`--title\` is used). Use \`--noNormalizeHeadings\` to preserve original depths.
129
+
130
+ ## Examples
131
+
132
+ \`\`\`bash
133
+ # Extract Overview from a single document
134
+ cnotes extract epics/auth-system --sections "Overview"
135
+
136
+ # Extract multiple sections
137
+ cnotes extract tasks/login-bug -s "Overview,Requirements,Acceptance Criteria"
138
+
139
+ # Extract from all epics with a title wrapper
140
+ cnotes extract "epics/*" -s "Overview" -t "Epic Summaries"
141
+
142
+ # Include frontmatter in output
143
+ cnotes extract epics/auth-system -s "Overview" --frontmatter
144
+ \`\`\`
145
+ `,
146
+ argsSchema,
147
+ handler,
148
+ });
149
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/cli/commands/extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { commands } from '../registry.js';
2
+ async function handler(_options, context) {
3
+ const ui = context.container.feature('ui');
4
+ const lines = [
5
+ '# cnotes',
6
+ '',
7
+ 'An ORM for structured Markdown/MDX files.',
8
+ '',
9
+ '## Usage',
10
+ '',
11
+ '```',
12
+ 'cnotes <command> [options]',
13
+ '```',
14
+ '',
15
+ '## Commands',
16
+ '',
17
+ '| Command | Description |',
18
+ '|---------|-------------|',
19
+ ];
20
+ for (const name of commands.available) {
21
+ const def = commands.get(name);
22
+ const label = def.usage ? `${name} ${def.usage}` : name;
23
+ lines.push(`| \`${label}\` | ${def.description} |`);
24
+ }
25
+ lines.push('', '## Global Options', '', '| Option | Description |', '|--------|-------------|', '| `--help`, `-h` | Show help for a command |', '| `--contentFolder` | Path to content folder (most commands) |', '', '## Getting Help', '', '```bash', '# Show this overview', 'cnotes help', '', '# Show detailed help for a command', 'cnotes help serve', 'cnotes serve --help', '```');
26
+ console.log(ui.markdown(lines.join('\n')));
27
+ }
28
+ commands.register('help', {
29
+ description: 'Show available commands',
30
+ help: `# cnotes help
31
+
32
+ Show available commands and usage information.
33
+
34
+ ## Usage
35
+
36
+ \`\`\`
37
+ cnotes help [command]
38
+ \`\`\`
39
+
40
+ ## Arguments
41
+
42
+ | Argument | Description |
43
+ |----------|-------------|
44
+ | \`command\` | Show detailed help for a specific command |
45
+
46
+ ## Examples
47
+
48
+ \`\`\`bash
49
+ # Show all commands
50
+ cnotes help
51
+
52
+ # Show help for the serve command
53
+ cnotes help serve
54
+ \`\`\`
55
+ `,
56
+ handler,
57
+ });
58
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,KAAK,UAAU,OAAO,CAAC,QAAa,EAAE,OAA2B;IAC/D,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1C,MAAM,KAAK,GAAa;QACtB,UAAU;QACV,EAAE;QACF,2CAA2C;QAC3C,EAAE;QACF,UAAU;QACV,EAAE;QACF,KAAK;QACL,4BAA4B;QAC5B,KAAK;QACL,EAAE;QACF,aAAa;QACb,EAAE;QACF,2BAA2B;QAC3B,2BAA2B;KAC5B,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACvD,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAG,CAAC,WAAW,IAAI,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,mBAAmB,EACnB,EAAE,EACF,0BAA0B,EAC1B,0BAA0B,EAC1B,8CAA8C,EAC9C,gEAAgE,EAChE,EAAE,EACF,iBAAiB,EACjB,EAAE,EACF,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,EAAE,EACF,oCAAoC,EACpC,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,CACN,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;IACxB,WAAW,EAAE,yBAAyB;IACtC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;CAyBP;IACC,OAAO;CACR,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import './init.js';
2
+ import './create.js';
3
+ import './inspect.js';
4
+ import './validate.js';
5
+ import './export.js';
6
+ import './action.js';
7
+ import './summary.js';
8
+ import './teach.js';
9
+ import './extract.js';
10
+ import './mcp.js';
11
+ import './serve.js';
12
+ import './console.js';
13
+ import './help.js';
14
+ import './text-search.js';
15
+ import './search.js';
16
+ import './embed.js';
17
+ import './update.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,CAAA;AAClB,OAAO,aAAa,CAAA;AACpB,OAAO,cAAc,CAAA;AACrB,OAAO,eAAe,CAAA;AACtB,OAAO,aAAa,CAAA;AACpB,OAAO,aAAa,CAAA;AACpB,OAAO,cAAc,CAAA;AACrB,OAAO,YAAY,CAAA;AACnB,OAAO,cAAc,CAAA;AACrB,OAAO,UAAU,CAAA;AACjB,OAAO,YAAY,CAAA;AACnB,OAAO,cAAc,CAAA;AACrB,OAAO,WAAW,CAAA;AAClB,OAAO,kBAAkB,CAAA;AACzB,OAAO,aAAa,CAAA;AACpB,OAAO,YAAY,CAAA;AACnB,OAAO,aAAa,CAAA"}
@@ -0,0 +1,19 @@
1
+ // Side-effect imports register each command
2
+ import './init.js';
3
+ import './create.js';
4
+ import './inspect.js';
5
+ import './validate.js';
6
+ import './export.js';
7
+ import './action.js';
8
+ import './summary.js';
9
+ import './teach.js';
10
+ import './extract.js';
11
+ import './mcp.js';
12
+ import './serve.js';
13
+ import './console.js';
14
+ import './help.js';
15
+ import './text-search.js';
16
+ import './search.js';
17
+ import './embed.js';
18
+ import './update.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,WAAW,CAAA;AAClB,OAAO,aAAa,CAAA;AACpB,OAAO,cAAc,CAAA;AACrB,OAAO,eAAe,CAAA;AACtB,OAAO,aAAa,CAAA;AACpB,OAAO,aAAa,CAAA;AACpB,OAAO,cAAc,CAAA;AACrB,OAAO,YAAY,CAAA;AACnB,OAAO,cAAc,CAAA;AACrB,OAAO,UAAU,CAAA;AACjB,OAAO,YAAY,CAAA;AACnB,OAAO,cAAc,CAAA;AACrB,OAAO,WAAW,CAAA;AAClB,OAAO,kBAAkB,CAAA;AACzB,OAAO,aAAa,CAAA;AACpB,OAAO,YAAY,CAAA;AACnB,OAAO,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { commands } from '../registry.js';
4
+ async function handler(_options, context) {
5
+ const name = context.container.argv._[1] || 'my-content';
6
+ const dir = path.resolve(process.cwd(), name);
7
+ await fs.mkdir(dir, { recursive: true });
8
+ await fs.mkdir(path.join(dir, 'posts'), { recursive: true });
9
+ await fs.writeFile(path.join(dir, 'models.ts'), `import { defineModel, z } from "contentbase";
10
+
11
+ export const Post = defineModel("Post", {
12
+ prefix: "posts",
13
+ meta: z.object({
14
+ status: z.enum(["draft", "published"]).default("draft"),
15
+ author: z.string().optional(),
16
+ }),
17
+ });
18
+ `, 'utf8');
19
+ await fs.writeFile(path.join(dir, 'posts', 'hello-world.md'), `---
20
+ status: draft
21
+ author: me
22
+ ---
23
+
24
+ # Hello World
25
+
26
+ Welcome to your contentbase project!
27
+ `, 'utf8');
28
+ await fs.writeFile(path.join(dir, 'index.ts'), `import { Collection } from "contentbase";
29
+ import { Post } from "./models";
30
+
31
+ export const collection = new Collection({
32
+ rootPath: import.meta.dir,
33
+ });
34
+
35
+ collection.register(Post);
36
+ `, 'utf8');
37
+ console.log(`Created contentbase project at ${dir}`);
38
+ console.log(` ${name}/models.ts`);
39
+ console.log(` ${name}/index.ts`);
40
+ console.log(` ${name}/posts/hello-world.md`);
41
+ }
42
+ commands.register('init', {
43
+ description: 'Initialize a new contentbase project',
44
+ usage: '[name]',
45
+ help: `# cnotes init
46
+
47
+ Scaffold a new contentbase project with a sample model and document.
48
+
49
+ ## Usage
50
+
51
+ \`\`\`
52
+ cnotes init [name]
53
+ \`\`\`
54
+
55
+ ## Arguments
56
+
57
+ | Argument | Description | Default |
58
+ |----------|-------------|---------|
59
+ | \`name\` | Directory name for the project | \`my-content\` |
60
+
61
+ ## What It Creates
62
+
63
+ - \`<name>/models.ts\` — Model definitions with a sample Post model
64
+ - \`<name>/index.ts\` — Collection entry point
65
+ - \`<name>/posts/hello-world.md\` — Sample document
66
+
67
+ ## Examples
68
+
69
+ \`\`\`bash
70
+ # Create with default name
71
+ cnotes init
72
+
73
+ # Create with custom name
74
+ cnotes init docs
75
+
76
+ # Create in a subdirectory
77
+ cnotes init content/blog
78
+ \`\`\`
79
+ `,
80
+ handler,
81
+ });
82
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,KAAK,UAAU,OAAO,CAAC,QAAa,EAAE,OAA2B;IAC/D,MAAM,IAAI,GAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAY,IAAI,YAAY,CAAA;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAA;IAE7C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5D,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAC3B;;;;;;;;;CASH,EACG,MAAM,CACP,CAAA;IAED,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,EACzC;;;;;;;;CAQH,EACG,MAAM,CACP,CAAA;IAED,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAC1B;;;;;;;;CAQH,EACG,MAAM,CACP,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,CAAA;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAA;AAC/C,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;IACxB,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCP;IACC,OAAO;CACR,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/inspect.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ import { commands } from '../registry.js';
3
+ import { loadCollection } from '../load-collection.js';
4
+ const argsSchema = z.object({
5
+ contentFolder: z.string().optional(),
6
+ });
7
+ async function handler(options) {
8
+ const collection = await loadCollection({
9
+ contentFolder: options.contentFolder,
10
+ });
11
+ console.log(collection.generateModelSummary());
12
+ }
13
+ commands.register('inspect', {
14
+ description: 'Display collection info and registered models',
15
+ help: `# cnotes inspect
16
+
17
+ Display a summary of the collection: registered models, their fields, sections, relationships, and document counts.
18
+
19
+ ## Usage
20
+
21
+ \`\`\`
22
+ cnotes inspect [options]
23
+ \`\`\`
24
+
25
+ ## Options
26
+
27
+ | Option | Description |
28
+ |--------|-------------|
29
+ | \`--contentFolder\` | Path to content folder |
30
+
31
+ ## Output
32
+
33
+ Shows for each model:
34
+ - Prefix and document count
35
+ - Meta field definitions (name, type, required, default)
36
+ - Section headings
37
+ - Relationships (belongsTo, hasMany)
38
+ - Computed properties and named scopes
39
+
40
+ ## Examples
41
+
42
+ \`\`\`bash
43
+ # Inspect current directory's collection
44
+ cnotes inspect
45
+
46
+ # Inspect a specific content folder
47
+ cnotes inspect --contentFolder test/fixtures/sdlc
48
+ \`\`\`
49
+ `,
50
+ argsSchema,
51
+ handler,
52
+ });
53
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/cli/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAEF,KAAK,UAAU,OAAO,CAAC,OAAmC;IACxD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE;IAC3B,WAAW,EAAE,+CAA+C;IAC5D,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCP;IACC,UAAU;IACV,OAAO;CACR,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ import { z } from 'zod';
2
+ import { commands } from '../registry.js';
3
+ import { startMcpServer } from '../../mcp/server.js';
4
+ const argsSchema = z.object({
5
+ transport: z.enum(['stdio', 'http']).default('stdio'),
6
+ port: z.number().default(3003),
7
+ contentFolder: z.string().optional(),
8
+ modulePath: z.string().optional(),
9
+ mcpCompat: z.enum(['standard', 'codex']).optional(),
10
+ stdioCompat: z.enum(['standard', 'codex', 'auto']).optional(),
11
+ watch: z.boolean().default(true),
12
+ });
13
+ async function handler(options, context) {
14
+ const container = context.container;
15
+ // Resolve content folder: positional arg > --contentFolder > ./docs
16
+ const positionalFolder = container.argv._[1];
17
+ const contentFolder = positionalFolder || options.contentFolder || undefined;
18
+ const modulePath = options.modulePath || undefined;
19
+ await startMcpServer(container, {
20
+ transport: options.transport,
21
+ port: options.port,
22
+ contentFolder,
23
+ modulePath,
24
+ mcpCompat: options.mcpCompat,
25
+ stdioCompat: options.stdioCompat,
26
+ watch: options.watch,
27
+ });
28
+ }
29
+ commands.register('mcp', {
30
+ description: 'Start an MCP server for AI agents to query and manage structured markdown content',
31
+ help: `# cnotes mcp
32
+
33
+ Start an MCP (Model Context Protocol) server that exposes collection tools, resources, and prompts for AI agents. Supports both stdio and HTTP transports.
34
+
35
+ ## Usage
36
+
37
+ \`\`\`
38
+ cnotes mcp [contentFolder] [options]
39
+ \`\`\`
40
+
41
+ ## Arguments
42
+
43
+ | Argument | Description |
44
+ |----------|-------------|
45
+ | \`contentFolder\` | Path to content folder (positional or via \`--contentFolder\`) |
46
+
47
+ ## Options
48
+
49
+ | Option | Default | Description |
50
+ |--------|---------|-------------|
51
+ | \`--transport\` | \`stdio\` | Transport mode: \`stdio\` or \`http\` |
52
+ | \`--port\` | \`3003\` | Port for HTTP transport |
53
+ | \`--mcpCompat\` | \`standard\` | HTTP compatibility profile: \`standard\` or \`codex\` (or set \`MCP_HTTP_COMPAT\`) |
54
+ | \`--stdioCompat\` | \`standard\` | Stdio framing profile: \`standard\`, \`codex\`, or \`auto\` (or set \`MCP_STDIO_COMPAT\`) |
55
+ | \`--modulePath\` | | Path to collection entry module |
56
+ | \`--contentFolder\` | | Path to content folder |
57
+ | \`--disable-watch\` | \`false\` | Disable file watching for automatic collection refresh |
58
+
59
+ ## Exposed Capabilities
60
+
61
+ **Tools:** read_me, inspect, get_model_info, list_documents, query, search_content, text_search, keyword_search, semantic_search, hybrid_search, validate, create_document, update_document, update_section, delete_document, run_action
62
+
63
+ **Resources:** schema, table of contents, models summary, primer, per-document resources
64
+
65
+ **Prompts:** create-<model>, review-document, teach, query-guide
66
+
67
+ ## Examples
68
+
69
+ \`\`\`bash
70
+ # Start with stdio (for Claude Desktop, Cursor, etc.)
71
+ cnotes mcp
72
+
73
+ # Start with HTTP transport
74
+ cnotes mcp --transport http --port 3003
75
+
76
+ # Start with Codex HTTP compatibility mode
77
+ cnotes mcp --transport http --port 3003 --mcpCompat codex
78
+
79
+ # Start with Codex stdio framing mode
80
+ cnotes mcp --stdioCompat codex
81
+
82
+ # Serve a specific content folder
83
+ cnotes mcp ./docs
84
+
85
+ # Use in claude_desktop_config.json
86
+ # { "command": "cnotes", "args": ["mcp", "./docs"] }
87
+ \`\`\`
88
+ `,
89
+ argsSchema,
90
+ handler,
91
+ });
92
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnD,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7D,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACjC,CAAC,CAAA;AAEF,KAAK,UAAU,OAAO,CAAC,OAAmC,EAAE,OAA2B;IACrF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAEnC,oEAAoE;IACpE,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAA;IAClE,MAAM,aAAa,GAAG,gBAAgB,IAAI,OAAO,CAAC,aAAa,IAAI,SAAS,CAAA;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,SAAS,CAAA;IAElD,MAAM,cAAc,CAAC,SAAS,EAAE;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,aAAa;QACb,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAA;AACJ,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB,WAAW,EAAE,mFAAmF;IAChG,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDP;IACC,UAAU;IACV,OAAO;CACR,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":""}