@gzoo/cortex 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/CLAUDE.md +180 -0
  3. package/CONTRIBUTING.md +52 -0
  4. package/LICENSE +21 -0
  5. package/README.md +259 -0
  6. package/dist/cortex-mcp.mjs +3153 -0
  7. package/dist/cortex.mjs +8213 -0
  8. package/icon.png +0 -0
  9. package/logo.png +0 -0
  10. package/package.json +86 -0
  11. package/packages/cli/dist/commands/config.d.ts +4 -0
  12. package/packages/cli/dist/commands/config.d.ts.map +1 -0
  13. package/packages/cli/dist/commands/config.js +419 -0
  14. package/packages/cli/dist/commands/config.js.map +1 -0
  15. package/packages/cli/dist/commands/contradictions.d.ts +3 -0
  16. package/packages/cli/dist/commands/contradictions.d.ts.map +1 -0
  17. package/packages/cli/dist/commands/contradictions.js +74 -0
  18. package/packages/cli/dist/commands/contradictions.js.map +1 -0
  19. package/packages/cli/dist/commands/costs.d.ts +3 -0
  20. package/packages/cli/dist/commands/costs.d.ts.map +1 -0
  21. package/packages/cli/dist/commands/costs.js +168 -0
  22. package/packages/cli/dist/commands/costs.js.map +1 -0
  23. package/packages/cli/dist/commands/db.d.ts +3 -0
  24. package/packages/cli/dist/commands/db.d.ts.map +1 -0
  25. package/packages/cli/dist/commands/db.js +139 -0
  26. package/packages/cli/dist/commands/db.js.map +1 -0
  27. package/packages/cli/dist/commands/find.d.ts +3 -0
  28. package/packages/cli/dist/commands/find.d.ts.map +1 -0
  29. package/packages/cli/dist/commands/find.js +139 -0
  30. package/packages/cli/dist/commands/find.js.map +1 -0
  31. package/packages/cli/dist/commands/ingest.d.ts +3 -0
  32. package/packages/cli/dist/commands/ingest.d.ts.map +1 -0
  33. package/packages/cli/dist/commands/ingest.js +179 -0
  34. package/packages/cli/dist/commands/ingest.js.map +1 -0
  35. package/packages/cli/dist/commands/init.d.ts +3 -0
  36. package/packages/cli/dist/commands/init.d.ts.map +1 -0
  37. package/packages/cli/dist/commands/init.js +285 -0
  38. package/packages/cli/dist/commands/init.js.map +1 -0
  39. package/packages/cli/dist/commands/mcp.d.ts +3 -0
  40. package/packages/cli/dist/commands/mcp.d.ts.map +1 -0
  41. package/packages/cli/dist/commands/mcp.js +65 -0
  42. package/packages/cli/dist/commands/mcp.js.map +1 -0
  43. package/packages/cli/dist/commands/models.d.ts +3 -0
  44. package/packages/cli/dist/commands/models.d.ts.map +1 -0
  45. package/packages/cli/dist/commands/models.js +245 -0
  46. package/packages/cli/dist/commands/models.js.map +1 -0
  47. package/packages/cli/dist/commands/privacy.d.ts +3 -0
  48. package/packages/cli/dist/commands/privacy.d.ts.map +1 -0
  49. package/packages/cli/dist/commands/privacy.js +140 -0
  50. package/packages/cli/dist/commands/privacy.js.map +1 -0
  51. package/packages/cli/dist/commands/projects.d.ts +3 -0
  52. package/packages/cli/dist/commands/projects.d.ts.map +1 -0
  53. package/packages/cli/dist/commands/projects.js +142 -0
  54. package/packages/cli/dist/commands/projects.js.map +1 -0
  55. package/packages/cli/dist/commands/query.d.ts +3 -0
  56. package/packages/cli/dist/commands/query.d.ts.map +1 -0
  57. package/packages/cli/dist/commands/query.js +153 -0
  58. package/packages/cli/dist/commands/query.js.map +1 -0
  59. package/packages/cli/dist/commands/report.d.ts +3 -0
  60. package/packages/cli/dist/commands/report.d.ts.map +1 -0
  61. package/packages/cli/dist/commands/report.js +144 -0
  62. package/packages/cli/dist/commands/report.js.map +1 -0
  63. package/packages/cli/dist/commands/resolve.d.ts +3 -0
  64. package/packages/cli/dist/commands/resolve.d.ts.map +1 -0
  65. package/packages/cli/dist/commands/resolve.js +119 -0
  66. package/packages/cli/dist/commands/resolve.js.map +1 -0
  67. package/packages/cli/dist/commands/serve.d.ts +3 -0
  68. package/packages/cli/dist/commands/serve.d.ts.map +1 -0
  69. package/packages/cli/dist/commands/serve.js +108 -0
  70. package/packages/cli/dist/commands/serve.js.map +1 -0
  71. package/packages/cli/dist/commands/status.d.ts +3 -0
  72. package/packages/cli/dist/commands/status.d.ts.map +1 -0
  73. package/packages/cli/dist/commands/status.js +230 -0
  74. package/packages/cli/dist/commands/status.js.map +1 -0
  75. package/packages/cli/dist/commands/stop.d.ts +5 -0
  76. package/packages/cli/dist/commands/stop.d.ts.map +1 -0
  77. package/packages/cli/dist/commands/stop.js +80 -0
  78. package/packages/cli/dist/commands/stop.js.map +1 -0
  79. package/packages/cli/dist/commands/watch.d.ts +3 -0
  80. package/packages/cli/dist/commands/watch.d.ts.map +1 -0
  81. package/packages/cli/dist/commands/watch.js +235 -0
  82. package/packages/cli/dist/commands/watch.js.map +1 -0
  83. package/packages/cli/dist/index.d.ts +9 -0
  84. package/packages/cli/dist/index.d.ts.map +1 -0
  85. package/packages/cli/dist/index.js +68 -0
  86. package/packages/cli/dist/index.js.map +1 -0
  87. package/packages/cli/package.json +37 -0
  88. package/packages/cli/tsconfig.json +16 -0
  89. package/packages/core/dist/config/loader.d.ts +11 -0
  90. package/packages/core/dist/config/loader.d.ts.map +1 -0
  91. package/packages/core/dist/config/loader.js +133 -0
  92. package/packages/core/dist/config/loader.js.map +1 -0
  93. package/packages/core/dist/config/project-registry.d.ts +71 -0
  94. package/packages/core/dist/config/project-registry.d.ts.map +1 -0
  95. package/packages/core/dist/config/project-registry.js +89 -0
  96. package/packages/core/dist/config/project-registry.js.map +1 -0
  97. package/packages/core/dist/config/schema.d.ts +909 -0
  98. package/packages/core/dist/config/schema.d.ts.map +1 -0
  99. package/packages/core/dist/config/schema.js +125 -0
  100. package/packages/core/dist/config/schema.js.map +1 -0
  101. package/packages/core/dist/errors/cortex-error.d.ts +58 -0
  102. package/packages/core/dist/errors/cortex-error.d.ts.map +1 -0
  103. package/packages/core/dist/errors/cortex-error.js +68 -0
  104. package/packages/core/dist/errors/cortex-error.js.map +1 -0
  105. package/packages/core/dist/events/event-bus.d.ts +10 -0
  106. package/packages/core/dist/events/event-bus.d.ts.map +1 -0
  107. package/packages/core/dist/events/event-bus.js +42 -0
  108. package/packages/core/dist/events/event-bus.js.map +1 -0
  109. package/packages/core/dist/index.d.ts +8 -0
  110. package/packages/core/dist/index.d.ts.map +1 -0
  111. package/packages/core/dist/index.js +22 -0
  112. package/packages/core/dist/index.js.map +1 -0
  113. package/packages/core/dist/logger.d.ts +16 -0
  114. package/packages/core/dist/logger.d.ts.map +1 -0
  115. package/packages/core/dist/logger.js +57 -0
  116. package/packages/core/dist/logger.js.map +1 -0
  117. package/packages/core/dist/types/config.d.ts +107 -0
  118. package/packages/core/dist/types/config.d.ts.map +1 -0
  119. package/packages/core/dist/types/config.js +2 -0
  120. package/packages/core/dist/types/config.js.map +1 -0
  121. package/packages/core/dist/types/entity.d.ts +35 -0
  122. package/packages/core/dist/types/entity.d.ts.map +1 -0
  123. package/packages/core/dist/types/entity.js +2 -0
  124. package/packages/core/dist/types/entity.js.map +1 -0
  125. package/packages/core/dist/types/events.d.ts +76 -0
  126. package/packages/core/dist/types/events.d.ts.map +1 -0
  127. package/packages/core/dist/types/events.js +2 -0
  128. package/packages/core/dist/types/events.js.map +1 -0
  129. package/packages/core/dist/types/file.d.ts +15 -0
  130. package/packages/core/dist/types/file.d.ts.map +1 -0
  131. package/packages/core/dist/types/file.js +2 -0
  132. package/packages/core/dist/types/file.js.map +1 -0
  133. package/packages/core/dist/types/graph.d.ts +93 -0
  134. package/packages/core/dist/types/graph.d.ts.map +1 -0
  135. package/packages/core/dist/types/graph.js +2 -0
  136. package/packages/core/dist/types/graph.js.map +1 -0
  137. package/packages/core/dist/types/index.d.ts +10 -0
  138. package/packages/core/dist/types/index.d.ts.map +1 -0
  139. package/packages/core/dist/types/index.js +2 -0
  140. package/packages/core/dist/types/index.js.map +1 -0
  141. package/packages/core/dist/types/llm.d.ts +95 -0
  142. package/packages/core/dist/types/llm.d.ts.map +1 -0
  143. package/packages/core/dist/types/llm.js +10 -0
  144. package/packages/core/dist/types/llm.js.map +1 -0
  145. package/packages/core/dist/types/project.d.ts +11 -0
  146. package/packages/core/dist/types/project.d.ts.map +1 -0
  147. package/packages/core/dist/types/project.js +2 -0
  148. package/packages/core/dist/types/project.js.map +1 -0
  149. package/packages/core/dist/types/relationship.d.ts +26 -0
  150. package/packages/core/dist/types/relationship.d.ts.map +1 -0
  151. package/packages/core/dist/types/relationship.js +2 -0
  152. package/packages/core/dist/types/relationship.js.map +1 -0
  153. package/packages/core/package.json +22 -0
  154. package/packages/core/tsconfig.json +9 -0
  155. package/packages/graph/dist/index.d.ts +4 -0
  156. package/packages/graph/dist/index.d.ts.map +1 -0
  157. package/packages/graph/dist/index.js +4 -0
  158. package/packages/graph/dist/index.js.map +1 -0
  159. package/packages/graph/dist/migrations/001-initial.d.ts +4 -0
  160. package/packages/graph/dist/migrations/001-initial.d.ts.map +1 -0
  161. package/packages/graph/dist/migrations/001-initial.js +134 -0
  162. package/packages/graph/dist/migrations/001-initial.js.map +1 -0
  163. package/packages/graph/dist/query-engine.d.ts +35 -0
  164. package/packages/graph/dist/query-engine.d.ts.map +1 -0
  165. package/packages/graph/dist/query-engine.js +185 -0
  166. package/packages/graph/dist/query-engine.js.map +1 -0
  167. package/packages/graph/dist/sqlite-store.d.ts +125 -0
  168. package/packages/graph/dist/sqlite-store.d.ts.map +1 -0
  169. package/packages/graph/dist/sqlite-store.js +632 -0
  170. package/packages/graph/dist/sqlite-store.js.map +1 -0
  171. package/packages/graph/dist/vector-store.d.ts +27 -0
  172. package/packages/graph/dist/vector-store.d.ts.map +1 -0
  173. package/packages/graph/dist/vector-store.js +85 -0
  174. package/packages/graph/dist/vector-store.js.map +1 -0
  175. package/packages/graph/package.json +27 -0
  176. package/packages/graph/tsconfig.json +12 -0
  177. package/packages/ingest/dist/chunker.d.ts +21 -0
  178. package/packages/ingest/dist/chunker.d.ts.map +1 -0
  179. package/packages/ingest/dist/chunker.js +118 -0
  180. package/packages/ingest/dist/chunker.js.map +1 -0
  181. package/packages/ingest/dist/index.d.ts +11 -0
  182. package/packages/ingest/dist/index.d.ts.map +1 -0
  183. package/packages/ingest/dist/index.js +14 -0
  184. package/packages/ingest/dist/index.js.map +1 -0
  185. package/packages/ingest/dist/parsers/conversation.d.ts +10 -0
  186. package/packages/ingest/dist/parsers/conversation.d.ts.map +1 -0
  187. package/packages/ingest/dist/parsers/conversation.js +150 -0
  188. package/packages/ingest/dist/parsers/conversation.js.map +1 -0
  189. package/packages/ingest/dist/parsers/index.d.ts +11 -0
  190. package/packages/ingest/dist/parsers/index.d.ts.map +1 -0
  191. package/packages/ingest/dist/parsers/index.js +42 -0
  192. package/packages/ingest/dist/parsers/index.js.map +1 -0
  193. package/packages/ingest/dist/parsers/json-parser.d.ts +6 -0
  194. package/packages/ingest/dist/parsers/json-parser.d.ts.map +1 -0
  195. package/packages/ingest/dist/parsers/json-parser.js +114 -0
  196. package/packages/ingest/dist/parsers/json-parser.js.map +1 -0
  197. package/packages/ingest/dist/parsers/markdown.d.ts +6 -0
  198. package/packages/ingest/dist/parsers/markdown.d.ts.map +1 -0
  199. package/packages/ingest/dist/parsers/markdown.js +116 -0
  200. package/packages/ingest/dist/parsers/markdown.js.map +1 -0
  201. package/packages/ingest/dist/parsers/types.d.ts +18 -0
  202. package/packages/ingest/dist/parsers/types.d.ts.map +1 -0
  203. package/packages/ingest/dist/parsers/types.js +2 -0
  204. package/packages/ingest/dist/parsers/types.js.map +1 -0
  205. package/packages/ingest/dist/parsers/typescript.d.ts +11 -0
  206. package/packages/ingest/dist/parsers/typescript.d.ts.map +1 -0
  207. package/packages/ingest/dist/parsers/typescript.js +197 -0
  208. package/packages/ingest/dist/parsers/typescript.js.map +1 -0
  209. package/packages/ingest/dist/parsers/yaml-parser.d.ts +6 -0
  210. package/packages/ingest/dist/parsers/yaml-parser.d.ts.map +1 -0
  211. package/packages/ingest/dist/parsers/yaml-parser.js +52 -0
  212. package/packages/ingest/dist/parsers/yaml-parser.js.map +1 -0
  213. package/packages/ingest/dist/pipeline.d.ts +30 -0
  214. package/packages/ingest/dist/pipeline.d.ts.map +1 -0
  215. package/packages/ingest/dist/pipeline.js +311 -0
  216. package/packages/ingest/dist/pipeline.js.map +1 -0
  217. package/packages/ingest/dist/post-ingest.d.ts +25 -0
  218. package/packages/ingest/dist/post-ingest.d.ts.map +1 -0
  219. package/packages/ingest/dist/post-ingest.js +171 -0
  220. package/packages/ingest/dist/post-ingest.js.map +1 -0
  221. package/packages/ingest/dist/watcher.d.ts +26 -0
  222. package/packages/ingest/dist/watcher.d.ts.map +1 -0
  223. package/packages/ingest/dist/watcher.js +142 -0
  224. package/packages/ingest/dist/watcher.js.map +1 -0
  225. package/packages/ingest/package.json +30 -0
  226. package/packages/ingest/tsconfig.json +14 -0
  227. package/packages/llm/dist/cache.d.ts +26 -0
  228. package/packages/llm/dist/cache.d.ts.map +1 -0
  229. package/packages/llm/dist/cache.js +60 -0
  230. package/packages/llm/dist/cache.js.map +1 -0
  231. package/packages/llm/dist/index.d.ts +15 -0
  232. package/packages/llm/dist/index.d.ts.map +1 -0
  233. package/packages/llm/dist/index.js +19 -0
  234. package/packages/llm/dist/index.js.map +1 -0
  235. package/packages/llm/dist/output-parser.d.ts +4 -0
  236. package/packages/llm/dist/output-parser.d.ts.map +1 -0
  237. package/packages/llm/dist/output-parser.js +207 -0
  238. package/packages/llm/dist/output-parser.js.map +1 -0
  239. package/packages/llm/dist/prompts/context-ranking.d.ts +33 -0
  240. package/packages/llm/dist/prompts/context-ranking.d.ts.map +1 -0
  241. package/packages/llm/dist/prompts/context-ranking.js +30 -0
  242. package/packages/llm/dist/prompts/context-ranking.js.map +1 -0
  243. package/packages/llm/dist/prompts/contradiction-detection.d.ts +46 -0
  244. package/packages/llm/dist/prompts/contradiction-detection.d.ts.map +1 -0
  245. package/packages/llm/dist/prompts/contradiction-detection.js +45 -0
  246. package/packages/llm/dist/prompts/contradiction-detection.js.map +1 -0
  247. package/packages/llm/dist/prompts/conversational-query.d.ts +29 -0
  248. package/packages/llm/dist/prompts/conversational-query.d.ts.map +1 -0
  249. package/packages/llm/dist/prompts/conversational-query.js +34 -0
  250. package/packages/llm/dist/prompts/conversational-query.js.map +1 -0
  251. package/packages/llm/dist/prompts/entity-extraction.d.ts +67 -0
  252. package/packages/llm/dist/prompts/entity-extraction.d.ts.map +1 -0
  253. package/packages/llm/dist/prompts/entity-extraction.js +76 -0
  254. package/packages/llm/dist/prompts/entity-extraction.js.map +1 -0
  255. package/packages/llm/dist/prompts/follow-up-generation.d.ts +25 -0
  256. package/packages/llm/dist/prompts/follow-up-generation.d.ts.map +1 -0
  257. package/packages/llm/dist/prompts/follow-up-generation.js +25 -0
  258. package/packages/llm/dist/prompts/follow-up-generation.js.map +1 -0
  259. package/packages/llm/dist/prompts/merge-detection.d.ts +41 -0
  260. package/packages/llm/dist/prompts/merge-detection.d.ts.map +1 -0
  261. package/packages/llm/dist/prompts/merge-detection.js +31 -0
  262. package/packages/llm/dist/prompts/merge-detection.js.map +1 -0
  263. package/packages/llm/dist/prompts/relationship-inference.d.ts +60 -0
  264. package/packages/llm/dist/prompts/relationship-inference.d.ts.map +1 -0
  265. package/packages/llm/dist/prompts/relationship-inference.js +66 -0
  266. package/packages/llm/dist/prompts/relationship-inference.js.map +1 -0
  267. package/packages/llm/dist/providers/anthropic.d.ts +39 -0
  268. package/packages/llm/dist/providers/anthropic.d.ts.map +1 -0
  269. package/packages/llm/dist/providers/anthropic.js +157 -0
  270. package/packages/llm/dist/providers/anthropic.js.map +1 -0
  271. package/packages/llm/dist/providers/ollama.d.ts +52 -0
  272. package/packages/llm/dist/providers/ollama.d.ts.map +1 -0
  273. package/packages/llm/dist/providers/ollama.js +297 -0
  274. package/packages/llm/dist/providers/ollama.js.map +1 -0
  275. package/packages/llm/dist/providers/openai-compatible.d.ts +40 -0
  276. package/packages/llm/dist/providers/openai-compatible.d.ts.map +1 -0
  277. package/packages/llm/dist/providers/openai-compatible.js +164 -0
  278. package/packages/llm/dist/providers/openai-compatible.js.map +1 -0
  279. package/packages/llm/dist/router.d.ts +87 -0
  280. package/packages/llm/dist/router.d.ts.map +1 -0
  281. package/packages/llm/dist/router.js +399 -0
  282. package/packages/llm/dist/router.js.map +1 -0
  283. package/packages/llm/dist/token-tracker.d.ts +24 -0
  284. package/packages/llm/dist/token-tracker.d.ts.map +1 -0
  285. package/packages/llm/dist/token-tracker.js +114 -0
  286. package/packages/llm/dist/token-tracker.js.map +1 -0
  287. package/packages/llm/package.json +25 -0
  288. package/packages/llm/tsconfig.json +12 -0
  289. package/packages/mcp/dist/index.d.ts +10 -0
  290. package/packages/mcp/dist/index.d.ts.map +1 -0
  291. package/packages/mcp/dist/index.js +33 -0
  292. package/packages/mcp/dist/index.js.map +1 -0
  293. package/packages/mcp/dist/server.d.ts +5 -0
  294. package/packages/mcp/dist/server.d.ts.map +1 -0
  295. package/packages/mcp/dist/server.js +87 -0
  296. package/packages/mcp/dist/server.js.map +1 -0
  297. package/packages/mcp/dist/store-factory.d.ts +8 -0
  298. package/packages/mcp/dist/store-factory.d.ts.map +1 -0
  299. package/packages/mcp/dist/store-factory.js +24 -0
  300. package/packages/mcp/dist/store-factory.js.map +1 -0
  301. package/packages/mcp/dist/tools/contradictions.d.ts +14 -0
  302. package/packages/mcp/dist/tools/contradictions.d.ts.map +1 -0
  303. package/packages/mcp/dist/tools/contradictions.js +33 -0
  304. package/packages/mcp/dist/tools/contradictions.js.map +1 -0
  305. package/packages/mcp/dist/tools/find.d.ts +37 -0
  306. package/packages/mcp/dist/tools/find.d.ts.map +1 -0
  307. package/packages/mcp/dist/tools/find.js +52 -0
  308. package/packages/mcp/dist/tools/find.js.map +1 -0
  309. package/packages/mcp/dist/tools/projects.d.ts +16 -0
  310. package/packages/mcp/dist/tools/projects.d.ts.map +1 -0
  311. package/packages/mcp/dist/tools/projects.js +17 -0
  312. package/packages/mcp/dist/tools/projects.js.map +1 -0
  313. package/packages/mcp/dist/tools/query.d.ts +20 -0
  314. package/packages/mcp/dist/tools/query.d.ts.map +1 -0
  315. package/packages/mcp/dist/tools/query.js +65 -0
  316. package/packages/mcp/dist/tools/query.js.map +1 -0
  317. package/packages/mcp/dist/tools/status.d.ts +15 -0
  318. package/packages/mcp/dist/tools/status.d.ts.map +1 -0
  319. package/packages/mcp/dist/tools/status.js +17 -0
  320. package/packages/mcp/dist/tools/status.js.map +1 -0
  321. package/packages/mcp/package.json +27 -0
  322. package/packages/mcp/tsconfig.json +14 -0
  323. package/packages/server/dist/index.d.ts +17 -0
  324. package/packages/server/dist/index.d.ts.map +1 -0
  325. package/packages/server/dist/index.js +170 -0
  326. package/packages/server/dist/index.js.map +1 -0
  327. package/packages/server/dist/middleware/auth.d.ts +9 -0
  328. package/packages/server/dist/middleware/auth.d.ts.map +1 -0
  329. package/packages/server/dist/middleware/auth.js +94 -0
  330. package/packages/server/dist/middleware/auth.js.map +1 -0
  331. package/packages/server/dist/routes/contradictions.d.ts +4 -0
  332. package/packages/server/dist/routes/contradictions.d.ts.map +1 -0
  333. package/packages/server/dist/routes/contradictions.js +63 -0
  334. package/packages/server/dist/routes/contradictions.js.map +1 -0
  335. package/packages/server/dist/routes/entities.d.ts +4 -0
  336. package/packages/server/dist/routes/entities.d.ts.map +1 -0
  337. package/packages/server/dist/routes/entities.js +61 -0
  338. package/packages/server/dist/routes/entities.js.map +1 -0
  339. package/packages/server/dist/routes/projects.d.ts +4 -0
  340. package/packages/server/dist/routes/projects.d.ts.map +1 -0
  341. package/packages/server/dist/routes/projects.js +35 -0
  342. package/packages/server/dist/routes/projects.js.map +1 -0
  343. package/packages/server/dist/routes/query.d.ts +4 -0
  344. package/packages/server/dist/routes/query.d.ts.map +1 -0
  345. package/packages/server/dist/routes/query.js +93 -0
  346. package/packages/server/dist/routes/query.js.map +1 -0
  347. package/packages/server/dist/routes/relationships.d.ts +4 -0
  348. package/packages/server/dist/routes/relationships.d.ts.map +1 -0
  349. package/packages/server/dist/routes/relationships.js +52 -0
  350. package/packages/server/dist/routes/relationships.js.map +1 -0
  351. package/packages/server/dist/routes/status.d.ts +4 -0
  352. package/packages/server/dist/routes/status.d.ts.map +1 -0
  353. package/packages/server/dist/routes/status.js +85 -0
  354. package/packages/server/dist/routes/status.js.map +1 -0
  355. package/packages/server/dist/ws/event-relay.d.ts +10 -0
  356. package/packages/server/dist/ws/event-relay.d.ts.map +1 -0
  357. package/packages/server/dist/ws/event-relay.js +83 -0
  358. package/packages/server/dist/ws/event-relay.js.map +1 -0
  359. package/packages/server/package.json +32 -0
  360. package/packages/server/tsconfig.json +15 -0
  361. package/packages/web/dist/assets/index-Bxjfq4I0.css +1 -0
  362. package/packages/web/dist/assets/index-MqwNS5FD.js +248 -0
  363. package/packages/web/dist/assets/index-MqwNS5FD.js.map +1 -0
  364. package/packages/web/dist/cortex-icon.svg +9 -0
  365. package/packages/web/dist/icon.png +0 -0
  366. package/packages/web/dist/index.html +14 -0
  367. package/packages/web/dist/logo.png +0 -0
  368. package/packages/web/index.html +13 -0
  369. package/packages/web/package.json +34 -0
  370. package/packages/web/public/cortex-icon.svg +9 -0
  371. package/packages/web/public/icon.png +0 -0
  372. package/packages/web/public/logo.png +0 -0
  373. package/packages/web/tsconfig.json +22 -0
  374. package/packages/web/vite.config.ts +20 -0
  375. package/tsconfig.base.json +18 -0
  376. package/tsconfig.json +12 -0
  377. package/vitest.config.ts +14 -0
@@ -0,0 +1,27 @@
1
+ export interface VectorSearchResult {
2
+ entityId: string;
3
+ distance: number;
4
+ text: string;
5
+ }
6
+ export interface VectorStoreOptions {
7
+ dbPath?: string;
8
+ dimensions?: number;
9
+ }
10
+ export declare class VectorStore {
11
+ private db;
12
+ private table;
13
+ private dbPath;
14
+ private dimensions;
15
+ constructor(options?: VectorStoreOptions);
16
+ initialize(): Promise<void>;
17
+ private ensureTable;
18
+ addVectors(records: Array<{
19
+ entityId: string;
20
+ vector: Float32Array;
21
+ text: string;
22
+ }>): Promise<void>;
23
+ search(queryVector: Float32Array, limit?: number): Promise<VectorSearchResult[]>;
24
+ deleteByEntityId(entityId: string): Promise<void>;
25
+ count(): Promise<number>;
26
+ }
27
+ //# sourceMappingURL=vector-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../src/vector-store.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAA2B;IACrC,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,GAAE,kBAAuB;IAKtC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAYnB,WAAW;IAmBnB,UAAU,CACd,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,IAAI,CAAC;IAeV,MAAM,CACV,WAAW,EAAE,YAAY,EACzB,KAAK,SAAK,GACT,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAe1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAI/B"}
@@ -0,0 +1,85 @@
1
+ import { connect } from '@lancedb/lancedb';
2
+ import { mkdirSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { createLogger } from '@cortex/core';
5
+ const logger = createLogger('graph:vector-store');
6
+ function resolveHomePath(p) {
7
+ return p.startsWith('~') ? p.replace('~', homedir()) : p;
8
+ }
9
+ const TABLE_NAME = 'entity_embeddings';
10
+ export class VectorStore {
11
+ db = null;
12
+ table = null;
13
+ dbPath;
14
+ dimensions;
15
+ constructor(options = {}) {
16
+ this.dbPath = resolveHomePath(options.dbPath ?? '~/.cortex/vector.lance');
17
+ this.dimensions = options.dimensions ?? 384;
18
+ }
19
+ async initialize() {
20
+ mkdirSync(this.dbPath, { recursive: true });
21
+ this.db = await connect(this.dbPath);
22
+ try {
23
+ this.table = await this.db.openTable(TABLE_NAME);
24
+ }
25
+ catch {
26
+ // Table doesn't exist yet — will be created on first add
27
+ logger.debug('Vector table does not exist yet, will create on first add');
28
+ }
29
+ }
30
+ async ensureTable() {
31
+ if (this.table)
32
+ return this.table;
33
+ if (!this.db)
34
+ throw new Error('VectorStore not initialized');
35
+ // Create table with an initial record to establish schema
36
+ this.table = await this.db.createTable(TABLE_NAME, [
37
+ {
38
+ id: '_init',
39
+ entityId: '_init',
40
+ vector: new Array(this.dimensions).fill(0),
41
+ text: '',
42
+ },
43
+ ]);
44
+ // Remove the placeholder row
45
+ await this.table.delete('id = "_init"');
46
+ return this.table;
47
+ }
48
+ async addVectors(records) {
49
+ if (records.length === 0)
50
+ return;
51
+ const table = await this.ensureTable();
52
+ const rows = records.map((r) => ({
53
+ id: r.entityId,
54
+ entityId: r.entityId,
55
+ vector: Array.from(r.vector),
56
+ text: r.text,
57
+ }));
58
+ await table.add(rows);
59
+ logger.debug(`Added ${rows.length} vectors`);
60
+ }
61
+ async search(queryVector, limit = 20) {
62
+ if (!this.table)
63
+ return [];
64
+ const results = await this.table
65
+ .search(Array.from(queryVector))
66
+ .limit(limit)
67
+ .toArray();
68
+ return results.map((r) => ({
69
+ entityId: r.entityId,
70
+ distance: r._distance,
71
+ text: r.text,
72
+ }));
73
+ }
74
+ async deleteByEntityId(entityId) {
75
+ if (!this.table)
76
+ return;
77
+ await this.table.delete(`entityId = "${entityId}"`);
78
+ }
79
+ async count() {
80
+ if (!this.table)
81
+ return 0;
82
+ return await this.table.countRows();
83
+ }
84
+ }
85
+ //# sourceMappingURL=vector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../src/vector-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@cortex/graph",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc --build",
16
+ "dev": "tsc --build --watch",
17
+ "test": "echo \"No tests yet\""
18
+ },
19
+ "dependencies": {
20
+ "@cortex/core": "*",
21
+ "@lancedb/lancedb": "^0.26.2",
22
+ "better-sqlite3": "^12.6.2"
23
+ },
24
+ "devDependencies": {
25
+ "@types/better-sqlite3": "^7.6.13"
26
+ }
27
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src",
6
+ "composite": true
7
+ },
8
+ "include": ["src/**/*.ts"],
9
+ "references": [
10
+ { "path": "../core" }
11
+ ]
12
+ }
@@ -0,0 +1,21 @@
1
+ import type { ParsedSection } from './parsers/types.js';
2
+ export interface Chunk {
3
+ content: string;
4
+ startLine: number;
5
+ endLine: number;
6
+ sectionTitles: string[];
7
+ tokenEstimate: number;
8
+ index: number;
9
+ }
10
+ export interface ChunkerOptions {
11
+ maxTokens?: number;
12
+ overlapTokens?: number;
13
+ }
14
+ /**
15
+ * Splits parsed sections into overlapping chunks.
16
+ * - Target: 2,000 tokens per chunk
17
+ * - Overlap: 200 tokens between chunks
18
+ * - Splits on section boundaries when possible
19
+ */
20
+ export declare function chunkSections(sections: ParsedSection[], options?: ChunkerOptions): Chunk[];
21
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE,cAAmB,GAC3B,KAAK,EAAE,CA8ET"}
@@ -0,0 +1,118 @@
1
+ const AVG_CHARS_PER_TOKEN = 4;
2
+ function estimateTokens(text) {
3
+ return Math.ceil(text.length / AVG_CHARS_PER_TOKEN);
4
+ }
5
+ /**
6
+ * Splits parsed sections into overlapping chunks.
7
+ * - Target: 2,000 tokens per chunk
8
+ * - Overlap: 200 tokens between chunks
9
+ * - Splits on section boundaries when possible
10
+ */
11
+ export function chunkSections(sections, options = {}) {
12
+ const maxTokens = options.maxTokens ?? 2000;
13
+ const overlapTokens = options.overlapTokens ?? 200;
14
+ const maxChars = maxTokens * AVG_CHARS_PER_TOKEN;
15
+ const overlapChars = overlapTokens * AVG_CHARS_PER_TOKEN;
16
+ if (sections.length === 0)
17
+ return [];
18
+ const chunks = [];
19
+ let currentContent = '';
20
+ let currentStartLine = sections[0].startLine;
21
+ let currentEndLine = sections[0].startLine;
22
+ let currentTitles = [];
23
+ let overlapBuffer = '';
24
+ for (const section of sections) {
25
+ const sectionText = section.title
26
+ ? `## ${section.title}\n${section.content}`
27
+ : section.content;
28
+ const sectionTokens = estimateTokens(sectionText);
29
+ // If single section exceeds max, split it into sub-chunks
30
+ if (sectionTokens > maxTokens) {
31
+ // Flush current chunk first
32
+ if (currentContent.length > 0) {
33
+ chunks.push(buildChunk(currentContent, currentStartLine, currentEndLine, currentTitles, chunks.length));
34
+ overlapBuffer = currentContent.slice(-overlapChars);
35
+ currentContent = '';
36
+ currentTitles = [];
37
+ }
38
+ const subChunks = splitLargeText(sectionText, maxChars, overlapChars, section, chunks.length);
39
+ chunks.push(...subChunks);
40
+ overlapBuffer = subChunks.length > 0
41
+ ? subChunks[subChunks.length - 1].content.slice(-overlapChars)
42
+ : '';
43
+ currentStartLine = section.endLine + 1;
44
+ currentEndLine = section.endLine;
45
+ continue;
46
+ }
47
+ // Check if adding this section would exceed the limit
48
+ const combined = currentContent + (currentContent ? '\n\n' : '') + sectionText;
49
+ if (estimateTokens(combined) > maxTokens && currentContent.length > 0) {
50
+ // Flush current chunk
51
+ chunks.push(buildChunk(currentContent, currentStartLine, currentEndLine, currentTitles, chunks.length));
52
+ overlapBuffer = currentContent.slice(-overlapChars);
53
+ // Start new chunk with overlap
54
+ currentContent = overlapBuffer + '\n\n' + sectionText;
55
+ currentStartLine = section.startLine;
56
+ currentEndLine = section.endLine;
57
+ currentTitles = section.title ? [section.title] : [];
58
+ }
59
+ else {
60
+ // Accumulate
61
+ if (currentContent.length === 0 && overlapBuffer.length > 0) {
62
+ currentContent = overlapBuffer + '\n\n' + sectionText;
63
+ }
64
+ else {
65
+ currentContent = combined;
66
+ }
67
+ if (currentContent === sectionText || currentContent === combined) {
68
+ if (chunks.length === 0)
69
+ currentStartLine = section.startLine;
70
+ }
71
+ currentEndLine = section.endLine;
72
+ if (section.title && !currentTitles.includes(section.title)) {
73
+ currentTitles.push(section.title);
74
+ }
75
+ }
76
+ }
77
+ // Flush remaining content
78
+ if (currentContent.trim().length > 0) {
79
+ chunks.push(buildChunk(currentContent, currentStartLine, currentEndLine, currentTitles, chunks.length));
80
+ }
81
+ return chunks;
82
+ }
83
+ function buildChunk(content, startLine, endLine, titles, index) {
84
+ return {
85
+ content: content.trim(),
86
+ startLine,
87
+ endLine,
88
+ sectionTitles: [...titles],
89
+ tokenEstimate: estimateTokens(content),
90
+ index,
91
+ };
92
+ }
93
+ function splitLargeText(text, maxChars, overlapChars, section, startIndex) {
94
+ const chunks = [];
95
+ const lines = text.split('\n');
96
+ let currentChunk = '';
97
+ let chunkStartLine = section.startLine;
98
+ for (let i = 0; i < lines.length; i++) {
99
+ const line = lines[i];
100
+ const next = currentChunk + (currentChunk ? '\n' : '') + line;
101
+ if (next.length > maxChars && currentChunk.length > 0) {
102
+ const lineOffset = section.startLine + i;
103
+ chunks.push(buildChunk(currentChunk, chunkStartLine, lineOffset - 1, section.title ? [section.title] : [], startIndex + chunks.length));
104
+ // Start next chunk with overlap
105
+ const overlap = currentChunk.slice(-overlapChars);
106
+ currentChunk = overlap + '\n' + line;
107
+ chunkStartLine = lineOffset;
108
+ }
109
+ else {
110
+ currentChunk = next;
111
+ }
112
+ }
113
+ if (currentChunk.trim().length > 0) {
114
+ chunks.push(buildChunk(currentChunk, chunkStartLine, section.endLine, section.title ? [section.title] : [], startIndex + chunks.length));
115
+ }
116
+ return chunks;
117
+ }
118
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { getParser, getSupportedExtensions } from './parsers/index.js';
2
+ export type { Parser, ParseResult, ParsedSection } from './parsers/index.js';
3
+ export { MarkdownParser } from './parsers/markdown.js';
4
+ export { TypeScriptParser } from './parsers/typescript.js';
5
+ export { JsonParser } from './parsers/json-parser.js';
6
+ export { YamlParser } from './parsers/yaml-parser.js';
7
+ export { ConversationParser, isConversationJson, isConversationMarkdown } from './parsers/conversation.js';
8
+ export { chunkSections, type Chunk, type ChunkerOptions } from './chunker.js';
9
+ export { FileWatcher, type WatcherOptions, type FileChangeHandler } from './watcher.js';
10
+ export { IngestionPipeline, type PipelineOptions, type PipelineResult } from './pipeline.js';
11
+ //# 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,SAAS,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAG3G,OAAO,EAAE,aAAa,EAAE,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9E,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ // Parsers
2
+ export { getParser, getSupportedExtensions } from './parsers/index.js';
3
+ export { MarkdownParser } from './parsers/markdown.js';
4
+ export { TypeScriptParser } from './parsers/typescript.js';
5
+ export { JsonParser } from './parsers/json-parser.js';
6
+ export { YamlParser } from './parsers/yaml-parser.js';
7
+ export { ConversationParser, isConversationJson, isConversationMarkdown } from './parsers/conversation.js';
8
+ // Chunker
9
+ export { chunkSections } from './chunker.js';
10
+ // Watcher
11
+ export { FileWatcher } from './watcher.js';
12
+ // Pipeline
13
+ export { IngestionPipeline } from './pipeline.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAE3G,UAAU;AACV,OAAO,EAAE,aAAa,EAAmC,MAAM,cAAc,CAAC;AAE9E,UAAU;AACV,OAAO,EAAE,WAAW,EAA+C,MAAM,cAAc,CAAC;AAExF,WAAW;AACX,OAAO,EAAE,iBAAiB,EAA6C,MAAM,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Parser, ParseResult } from './types.js';
2
+ /** Sniff whether content looks like a Claude/ChatGPT JSON export */
3
+ export declare function isConversationJson(content: string): boolean;
4
+ /** Sniff whether content is a markdown conversation export */
5
+ export declare function isConversationMarkdown(content: string): boolean;
6
+ export declare class ConversationParser implements Parser {
7
+ readonly supportedExtensions: string[];
8
+ parse(content: string, filePath: string): Promise<ParseResult>;
9
+ }
10
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/parsers/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAMrE,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkB3D;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAY/D;AAqGD,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,mBAAmB,WAAkB;IAExC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAcrE"}
@@ -0,0 +1,150 @@
1
+ // Conversation role patterns for markdown export detection
2
+ const HUMAN_PATTERN = /^(Human|User|Me)$/i;
3
+ const ASSISTANT_PATTERN = /^(Assistant|Claude|ChatGPT|GPT)$/i;
4
+ /** Sniff whether content looks like a Claude/ChatGPT JSON export */
5
+ export function isConversationJson(content) {
6
+ try {
7
+ const obj = JSON.parse(content);
8
+ // ChatGPT export: top-level array or { conversations: [...] }
9
+ if (Array.isArray(obj) && obj.length > 0) {
10
+ const first = obj[0];
11
+ return ((Array.isArray(first?.mapping) || typeof first?.mapping === 'object') ||
12
+ Array.isArray(first?.messages));
13
+ }
14
+ if (Array.isArray(obj?.conversations))
15
+ return true;
16
+ // Claude export: top-level object with messages array containing role fields
17
+ if (Array.isArray(obj?.messages) && obj.messages[0]?.role !== undefined)
18
+ return true;
19
+ return false;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /** Sniff whether content is a markdown conversation export */
26
+ export function isConversationMarkdown(content) {
27
+ const lines = content.split('\n');
28
+ const headings = [];
29
+ for (const line of lines) {
30
+ const m = line.match(/^#{1,3}\s+(.+)$/);
31
+ if (m) {
32
+ headings.push(m[1].trim());
33
+ if (headings.length >= 2)
34
+ break;
35
+ }
36
+ }
37
+ if (headings.length < 2)
38
+ return false;
39
+ return HUMAN_PATTERN.test(headings[0]) && ASSISTANT_PATTERN.test(headings[1]);
40
+ }
41
+ /** Parse a Claude/ChatGPT JSON export into sections */
42
+ function parseConversationJson(content) {
43
+ const obj = JSON.parse(content);
44
+ const sections = [];
45
+ let messages = [];
46
+ if (Array.isArray(obj)) {
47
+ // Could be ChatGPT export array of conversations — flatten messages from first conversation
48
+ const first = obj[0];
49
+ if (first?.mapping && typeof first.mapping === 'object') {
50
+ // ChatGPT format: { mapping: { [id]: { message: { author: { role }, content: { parts } } } } }
51
+ for (const node of Object.values(first.mapping)) {
52
+ const msg = node?.message;
53
+ if (!msg?.author?.role || !msg.content?.parts)
54
+ continue;
55
+ const text = msg.content.parts.join('\n').trim();
56
+ if (text)
57
+ messages.push({ role: msg.author.role, content: text });
58
+ }
59
+ }
60
+ else if (Array.isArray(first?.messages)) {
61
+ messages = first.messages;
62
+ }
63
+ }
64
+ else if (Array.isArray(obj?.conversations)) {
65
+ messages = (obj.conversations[0]?.messages ?? []);
66
+ }
67
+ else if (Array.isArray(obj?.messages)) {
68
+ messages = obj.messages;
69
+ }
70
+ let lineNum = 1;
71
+ for (const msg of messages) {
72
+ const role = (msg.role ?? msg.author?.role ?? 'unknown').toLowerCase();
73
+ if (role === 'system')
74
+ continue;
75
+ const text = typeof msg.content === 'string'
76
+ ? msg.content
77
+ : (msg.text ?? JSON.stringify(msg.content));
78
+ if (!text || text.trim().length < 50)
79
+ continue;
80
+ const endLine = lineNum + text.split('\n').length;
81
+ sections.push({
82
+ type: 'paragraph',
83
+ title: role === 'user' ? 'Human' : 'Assistant',
84
+ content: text.trim(),
85
+ startLine: lineNum,
86
+ endLine,
87
+ metadata: { role, speaker: role === 'user' ? 'human' : 'assistant' },
88
+ });
89
+ lineNum = endLine + 1;
90
+ }
91
+ return sections;
92
+ }
93
+ /** Parse a markdown conversation export into sections */
94
+ function parseConversationMarkdown(content) {
95
+ const sections = [];
96
+ const lines = content.split('\n');
97
+ let currentRole = null;
98
+ let blockStart = 0;
99
+ const blockLines = [];
100
+ const flush = (endLine) => {
101
+ if (!currentRole || blockLines.length === 0)
102
+ return;
103
+ const text = blockLines.join('\n').trim();
104
+ if (text.length >= 50) {
105
+ sections.push({
106
+ type: 'paragraph',
107
+ title: currentRole,
108
+ content: text,
109
+ startLine: blockStart,
110
+ endLine,
111
+ metadata: {
112
+ role: HUMAN_PATTERN.test(currentRole) ? 'user' : 'assistant',
113
+ speaker: HUMAN_PATTERN.test(currentRole) ? 'human' : 'assistant',
114
+ },
115
+ });
116
+ }
117
+ blockLines.length = 0;
118
+ };
119
+ for (let i = 0; i < lines.length; i++) {
120
+ const line = lines[i];
121
+ const headingMatch = line.match(/^#{1,3}\s+(.+)$/);
122
+ if (headingMatch) {
123
+ flush(i);
124
+ currentRole = headingMatch[1].trim();
125
+ blockStart = i + 2;
126
+ }
127
+ else if (currentRole) {
128
+ blockLines.push(line);
129
+ }
130
+ }
131
+ flush(lines.length);
132
+ return sections;
133
+ }
134
+ export class ConversationParser {
135
+ supportedExtensions = ['json', 'md'];
136
+ async parse(content, filePath) {
137
+ const isJson = filePath.endsWith('.json') || filePath.endsWith('.JSON');
138
+ const sections = isJson
139
+ ? parseConversationJson(content)
140
+ : parseConversationMarkdown(content);
141
+ return {
142
+ sections,
143
+ metadata: {
144
+ format: isJson ? 'conversation-json' : 'conversation-markdown',
145
+ messageCount: sections.length,
146
+ },
147
+ };
148
+ }
149
+ }
150
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/parsers/conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Parser } from './types.js';
2
+ export type { Parser, ParseResult, ParsedSection } from './types.js';
3
+ /**
4
+ * Return the appropriate parser for the given file extension.
5
+ * When filePath + content are provided, sniff conversation formats first
6
+ * so that Claude/ChatGPT JSON exports and markdown conversations route to
7
+ * the ConversationParser rather than the generic JSON/Markdown parsers.
8
+ */
9
+ export declare function getParser(extension: string, filePath?: string, content?: string): Parser | undefined;
10
+ export declare function getSupportedExtensions(): string[];
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoBrE;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUpG;AAED,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
@@ -0,0 +1,42 @@
1
+ import { MarkdownParser } from './markdown.js';
2
+ import { TypeScriptParser } from './typescript.js';
3
+ import { JsonParser } from './json-parser.js';
4
+ import { YamlParser } from './yaml-parser.js';
5
+ import { ConversationParser, isConversationJson, isConversationMarkdown } from './conversation.js';
6
+ const markdownParser = new MarkdownParser();
7
+ const typescriptParser = new TypeScriptParser();
8
+ const jsonParser = new JsonParser();
9
+ const yamlParser = new YamlParser();
10
+ const conversationParser = new ConversationParser();
11
+ const PARSER_REGISTRY = new Map([
12
+ ['md', markdownParser],
13
+ ['mdx', markdownParser],
14
+ ['ts', typescriptParser],
15
+ ['tsx', typescriptParser],
16
+ ['js', typescriptParser],
17
+ ['jsx', typescriptParser],
18
+ ['json', jsonParser],
19
+ ['yaml', yamlParser],
20
+ ['yml', yamlParser],
21
+ ]);
22
+ /**
23
+ * Return the appropriate parser for the given file extension.
24
+ * When filePath + content are provided, sniff conversation formats first
25
+ * so that Claude/ChatGPT JSON exports and markdown conversations route to
26
+ * the ConversationParser rather than the generic JSON/Markdown parsers.
27
+ */
28
+ export function getParser(extension, filePath, content) {
29
+ const ext = extension.toLowerCase();
30
+ // Sniff for conversation formats when content is available
31
+ if (content !== undefined && filePath !== undefined) {
32
+ if ((ext === 'json') && isConversationJson(content))
33
+ return conversationParser;
34
+ if ((ext === 'md' || ext === 'mdx') && isConversationMarkdown(content))
35
+ return conversationParser;
36
+ }
37
+ return PARSER_REGISTRY.get(ext);
38
+ }
39
+ export function getSupportedExtensions() {
40
+ return [...PARSER_REGISTRY.keys()];
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAInG,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;AAC5C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAChD,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACpC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACpC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEpD,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,CAAC,IAAI,EAAE,cAAc,CAAC;IACtB,CAAC,KAAK,EAAE,cAAc,CAAC;IACvB,CAAC,IAAI,EAAE,gBAAgB,CAAC;IACxB,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACzB,CAAC,IAAI,EAAE,gBAAgB,CAAC;IACxB,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACzB,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,KAAK,EAAE,UAAU,CAAC;CACpB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB,EAAE,QAAiB,EAAE,OAAgB;IAC9E,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAEpC,2DAA2D;IAC3D,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC;YAAE,OAAO,kBAAkB,CAAC;QAC/E,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC;YAAE,OAAO,kBAAkB,CAAC;IACpG,CAAC;IAED,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Parser, ParseResult } from './types.js';
2
+ export declare class JsonParser implements Parser {
3
+ readonly supportedExtensions: string[];
4
+ parse(content: string, filePath: string): Promise<ParseResult>;
5
+ }
6
+ //# sourceMappingURL=json-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/json-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAmErE,qBAAa,UAAW,YAAW,MAAM;IACvC,QAAQ,CAAC,mBAAmB,WAAY;IAElC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA8DrE"}