@indexnetwork/protocol 0.1.0

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 (365) hide show
  1. package/dist/agents/chat.agent.d.ts +218 -0
  2. package/dist/agents/chat.agent.d.ts.map +1 -0
  3. package/dist/agents/chat.agent.js +884 -0
  4. package/dist/agents/chat.agent.js.map +1 -0
  5. package/dist/agents/chat.prompt.d.ts +18 -0
  6. package/dist/agents/chat.prompt.d.ts.map +1 -0
  7. package/dist/agents/chat.prompt.js +372 -0
  8. package/dist/agents/chat.prompt.js.map +1 -0
  9. package/dist/agents/chat.prompt.modules.d.ts +61 -0
  10. package/dist/agents/chat.prompt.modules.d.ts.map +1 -0
  11. package/dist/agents/chat.prompt.modules.js +366 -0
  12. package/dist/agents/chat.prompt.modules.js.map +1 -0
  13. package/dist/agents/chat.title.generator.d.ts +20 -0
  14. package/dist/agents/chat.title.generator.d.ts.map +1 -0
  15. package/dist/agents/chat.title.generator.js +66 -0
  16. package/dist/agents/chat.title.generator.js.map +1 -0
  17. package/dist/agents/home.categorizer.d.ts +28 -0
  18. package/dist/agents/home.categorizer.d.ts.map +1 -0
  19. package/dist/agents/home.categorizer.js +170 -0
  20. package/dist/agents/home.categorizer.js.map +1 -0
  21. package/dist/agents/hyde.generator.d.ts +27 -0
  22. package/dist/agents/hyde.generator.d.ts.map +1 -0
  23. package/dist/agents/hyde.generator.js +75 -0
  24. package/dist/agents/hyde.generator.js.map +1 -0
  25. package/dist/agents/hyde.strategies.d.ts +17 -0
  26. package/dist/agents/hyde.strategies.d.ts.map +1 -0
  27. package/dist/agents/hyde.strategies.js +29 -0
  28. package/dist/agents/hyde.strategies.js.map +1 -0
  29. package/dist/agents/intent.clarifier.d.ts +29 -0
  30. package/dist/agents/intent.clarifier.d.ts.map +1 -0
  31. package/dist/agents/intent.clarifier.js +186 -0
  32. package/dist/agents/intent.clarifier.js.map +1 -0
  33. package/dist/agents/intent.indexer.d.ts +77 -0
  34. package/dist/agents/intent.indexer.d.ts.map +1 -0
  35. package/dist/agents/intent.indexer.js +164 -0
  36. package/dist/agents/intent.indexer.js.map +1 -0
  37. package/dist/agents/intent.inferrer.d.ts +95 -0
  38. package/dist/agents/intent.inferrer.d.ts.map +1 -0
  39. package/dist/agents/intent.inferrer.js +238 -0
  40. package/dist/agents/intent.inferrer.js.map +1 -0
  41. package/dist/agents/intent.reconciler.d.ts +106 -0
  42. package/dist/agents/intent.reconciler.d.ts.map +1 -0
  43. package/dist/agents/intent.reconciler.js +184 -0
  44. package/dist/agents/intent.reconciler.js.map +1 -0
  45. package/dist/agents/intent.verifier.d.ts +97 -0
  46. package/dist/agents/intent.verifier.d.ts.map +1 -0
  47. package/dist/agents/intent.verifier.js +234 -0
  48. package/dist/agents/intent.verifier.js.map +1 -0
  49. package/dist/agents/invite.generator.d.ts +47 -0
  50. package/dist/agents/invite.generator.d.ts.map +1 -0
  51. package/dist/agents/invite.generator.js +56 -0
  52. package/dist/agents/invite.generator.js.map +1 -0
  53. package/dist/agents/lens.inferrer.d.ts +37 -0
  54. package/dist/agents/lens.inferrer.d.ts.map +1 -0
  55. package/dist/agents/lens.inferrer.js +98 -0
  56. package/dist/agents/lens.inferrer.js.map +1 -0
  57. package/dist/agents/model.config.d.ts +120 -0
  58. package/dist/agents/model.config.d.ts.map +1 -0
  59. package/dist/agents/model.config.js +76 -0
  60. package/dist/agents/model.config.js.map +1 -0
  61. package/dist/agents/negotiation.insights.generator.d.ts +32 -0
  62. package/dist/agents/negotiation.insights.generator.d.ts.map +1 -0
  63. package/dist/agents/negotiation.insights.generator.js +105 -0
  64. package/dist/agents/negotiation.insights.generator.js.map +1 -0
  65. package/dist/agents/negotiation.proposer.d.ts +26 -0
  66. package/dist/agents/negotiation.proposer.d.ts.map +1 -0
  67. package/dist/agents/negotiation.proposer.js +67 -0
  68. package/dist/agents/negotiation.proposer.js.map +1 -0
  69. package/dist/agents/negotiation.responder.d.ts +26 -0
  70. package/dist/agents/negotiation.responder.d.ts.map +1 -0
  71. package/dist/agents/negotiation.responder.js +71 -0
  72. package/dist/agents/negotiation.responder.js.map +1 -0
  73. package/dist/agents/opportunity.evaluator.d.ts +253 -0
  74. package/dist/agents/opportunity.evaluator.d.ts.map +1 -0
  75. package/dist/agents/opportunity.evaluator.js +413 -0
  76. package/dist/agents/opportunity.evaluator.js.map +1 -0
  77. package/dist/agents/opportunity.presenter.d.ts +115 -0
  78. package/dist/agents/opportunity.presenter.d.ts.map +1 -0
  79. package/dist/agents/opportunity.presenter.js +524 -0
  80. package/dist/agents/opportunity.presenter.js.map +1 -0
  81. package/dist/agents/profile.generator.d.ts +67 -0
  82. package/dist/agents/profile.generator.d.ts.map +1 -0
  83. package/dist/agents/profile.generator.js +97 -0
  84. package/dist/agents/profile.generator.js.map +1 -0
  85. package/dist/agents/profile.hyde.generator.d.ts +43 -0
  86. package/dist/agents/profile.hyde.generator.d.ts.map +1 -0
  87. package/dist/agents/profile.hyde.generator.js +113 -0
  88. package/dist/agents/profile.hyde.generator.js.map +1 -0
  89. package/dist/agents/suggestion.generator.d.ts +24 -0
  90. package/dist/agents/suggestion.generator.d.ts.map +1 -0
  91. package/dist/agents/suggestion.generator.js +96 -0
  92. package/dist/agents/suggestion.generator.js.map +1 -0
  93. package/dist/graphs/chat.graph.d.ts +312 -0
  94. package/dist/graphs/chat.graph.d.ts.map +1 -0
  95. package/dist/graphs/chat.graph.js +267 -0
  96. package/dist/graphs/chat.graph.js.map +1 -0
  97. package/dist/graphs/home.graph.d.ts +180 -0
  98. package/dist/graphs/home.graph.d.ts.map +1 -0
  99. package/dist/graphs/home.graph.js +598 -0
  100. package/dist/graphs/home.graph.js.map +1 -0
  101. package/dist/graphs/hyde.graph.d.ts +110 -0
  102. package/dist/graphs/hyde.graph.d.ts.map +1 -0
  103. package/dist/graphs/hyde.graph.js +235 -0
  104. package/dist/graphs/hyde.graph.js.map +1 -0
  105. package/dist/graphs/index.graph.d.ts +620 -0
  106. package/dist/graphs/index.graph.d.ts.map +1 -0
  107. package/dist/graphs/index.graph.js +226 -0
  108. package/dist/graphs/index.graph.js.map +1 -0
  109. package/dist/graphs/index_membership.graph.d.ts +250 -0
  110. package/dist/graphs/index_membership.graph.d.ts.map +1 -0
  111. package/dist/graphs/index_membership.graph.js +204 -0
  112. package/dist/graphs/index_membership.graph.js.map +1 -0
  113. package/dist/graphs/intent.graph.d.ts +490 -0
  114. package/dist/graphs/intent.graph.d.ts.map +1 -0
  115. package/dist/graphs/intent.graph.js +787 -0
  116. package/dist/graphs/intent.graph.js.map +1 -0
  117. package/dist/graphs/intent_index.graph.d.ts +396 -0
  118. package/dist/graphs/intent_index.graph.d.ts.map +1 -0
  119. package/dist/graphs/intent_index.graph.js +331 -0
  120. package/dist/graphs/intent_index.graph.js.map +1 -0
  121. package/dist/graphs/maintenance.graph.d.ts +177 -0
  122. package/dist/graphs/maintenance.graph.d.ts.map +1 -0
  123. package/dist/graphs/maintenance.graph.js +173 -0
  124. package/dist/graphs/maintenance.graph.js.map +1 -0
  125. package/dist/graphs/negotiation.graph.d.ts +819 -0
  126. package/dist/graphs/negotiation.graph.d.ts.map +1 -0
  127. package/dist/graphs/negotiation.graph.js +255 -0
  128. package/dist/graphs/negotiation.graph.js.map +1 -0
  129. package/dist/graphs/opportunity.graph.d.ts +1082 -0
  130. package/dist/graphs/opportunity.graph.d.ts.map +1 -0
  131. package/dist/graphs/opportunity.graph.js +2534 -0
  132. package/dist/graphs/opportunity.graph.js.map +1 -0
  133. package/dist/graphs/profile.graph.d.ts +617 -0
  134. package/dist/graphs/profile.graph.d.ts.map +1 -0
  135. package/dist/graphs/profile.graph.js +839 -0
  136. package/dist/graphs/profile.graph.js.map +1 -0
  137. package/dist/graphs/tests/chat.graph.mocks.d.ts +104 -0
  138. package/dist/graphs/tests/chat.graph.mocks.d.ts.map +1 -0
  139. package/dist/graphs/tests/chat.graph.mocks.js +225 -0
  140. package/dist/graphs/tests/chat.graph.mocks.js.map +1 -0
  141. package/dist/index.d.ts +62 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +44 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/interfaces/auth.interface.d.ts +15 -0
  146. package/dist/interfaces/auth.interface.d.ts.map +1 -0
  147. package/dist/interfaces/auth.interface.js +2 -0
  148. package/dist/interfaces/auth.interface.js.map +1 -0
  149. package/dist/interfaces/cache.interface.d.ts +43 -0
  150. package/dist/interfaces/cache.interface.d.ts.map +1 -0
  151. package/dist/interfaces/cache.interface.js +6 -0
  152. package/dist/interfaces/cache.interface.js.map +1 -0
  153. package/dist/interfaces/chat-session.interface.d.ts +11 -0
  154. package/dist/interfaces/chat-session.interface.d.ts.map +1 -0
  155. package/dist/interfaces/chat-session.interface.js +2 -0
  156. package/dist/interfaces/chat-session.interface.js.map +1 -0
  157. package/dist/interfaces/contact.interface.d.ts +48 -0
  158. package/dist/interfaces/contact.interface.d.ts.map +1 -0
  159. package/dist/interfaces/contact.interface.js +2 -0
  160. package/dist/interfaces/contact.interface.js.map +1 -0
  161. package/dist/interfaces/database.interface.d.ts +1495 -0
  162. package/dist/interfaces/database.interface.d.ts.map +1 -0
  163. package/dist/interfaces/database.interface.js +2 -0
  164. package/dist/interfaces/database.interface.js.map +1 -0
  165. package/dist/interfaces/embedder.interface.d.ts +85 -0
  166. package/dist/interfaces/embedder.interface.d.ts.map +1 -0
  167. package/dist/interfaces/embedder.interface.js +5 -0
  168. package/dist/interfaces/embedder.interface.js.map +1 -0
  169. package/dist/interfaces/enrichment.interface.d.ts +40 -0
  170. package/dist/interfaces/enrichment.interface.d.ts.map +1 -0
  171. package/dist/interfaces/enrichment.interface.js +2 -0
  172. package/dist/interfaces/enrichment.interface.js.map +1 -0
  173. package/dist/interfaces/integration.interface.d.ts +91 -0
  174. package/dist/interfaces/integration.interface.d.ts.map +1 -0
  175. package/dist/interfaces/integration.interface.js +2 -0
  176. package/dist/interfaces/integration.interface.js.map +1 -0
  177. package/dist/interfaces/queue.interface.d.ts +17 -0
  178. package/dist/interfaces/queue.interface.d.ts.map +1 -0
  179. package/dist/interfaces/queue.interface.js +5 -0
  180. package/dist/interfaces/queue.interface.js.map +1 -0
  181. package/dist/interfaces/scraper.interface.d.ts +31 -0
  182. package/dist/interfaces/scraper.interface.d.ts.map +1 -0
  183. package/dist/interfaces/scraper.interface.js +2 -0
  184. package/dist/interfaces/scraper.interface.js.map +1 -0
  185. package/dist/interfaces/storage.interface.d.ts +46 -0
  186. package/dist/interfaces/storage.interface.d.ts.map +1 -0
  187. package/dist/interfaces/storage.interface.js +6 -0
  188. package/dist/interfaces/storage.interface.js.map +1 -0
  189. package/dist/mcp/mcp.server.d.ts +29 -0
  190. package/dist/mcp/mcp.server.d.ts.map +1 -0
  191. package/dist/mcp/mcp.server.js +171 -0
  192. package/dist/mcp/mcp.server.js.map +1 -0
  193. package/dist/states/chat.state.d.ts +126 -0
  194. package/dist/states/chat.state.d.ts.map +1 -0
  195. package/dist/states/chat.state.js +112 -0
  196. package/dist/states/chat.state.js.map +1 -0
  197. package/dist/states/home.state.d.ts +100 -0
  198. package/dist/states/home.state.d.ts.map +1 -0
  199. package/dist/states/home.state.js +74 -0
  200. package/dist/states/home.state.js.map +1 -0
  201. package/dist/states/hyde.state.d.ts +54 -0
  202. package/dist/states/hyde.state.d.ts.map +1 -0
  203. package/dist/states/hyde.state.js +66 -0
  204. package/dist/states/hyde.state.js.map +1 -0
  205. package/dist/states/index.state.d.ts +179 -0
  206. package/dist/states/index.state.d.ts.map +1 -0
  207. package/dist/states/index.state.js +56 -0
  208. package/dist/states/index.state.js.map +1 -0
  209. package/dist/states/index_membership.state.d.ts +77 -0
  210. package/dist/states/index_membership.state.d.ts.map +1 -0
  211. package/dist/states/index_membership.state.js +43 -0
  212. package/dist/states/index_membership.state.js.map +1 -0
  213. package/dist/states/intent.state.d.ts +203 -0
  214. package/dist/states/intent.state.d.ts.map +1 -0
  215. package/dist/states/intent.state.js +153 -0
  216. package/dist/states/intent.state.js.map +1 -0
  217. package/dist/states/intent_index.state.d.ts +148 -0
  218. package/dist/states/intent_index.state.d.ts.map +1 -0
  219. package/dist/states/intent_index.state.js +100 -0
  220. package/dist/states/intent_index.state.js.map +1 -0
  221. package/dist/states/maintenance.state.d.ts +36 -0
  222. package/dist/states/maintenance.state.d.ts.map +1 -0
  223. package/dist/states/maintenance.state.js +56 -0
  224. package/dist/states/maintenance.state.js.map +1 -0
  225. package/dist/states/negotiation.state.d.ts +230 -0
  226. package/dist/states/negotiation.state.d.ts.map +1 -0
  227. package/dist/states/negotiation.state.js +82 -0
  228. package/dist/states/negotiation.state.js.map +1 -0
  229. package/dist/states/opportunity.state.d.ts +300 -0
  230. package/dist/states/opportunity.state.d.ts.map +1 -0
  231. package/dist/states/opportunity.state.js +207 -0
  232. package/dist/states/opportunity.state.js.map +1 -0
  233. package/dist/states/profile.state.d.ts +172 -0
  234. package/dist/states/profile.state.d.ts.map +1 -0
  235. package/dist/states/profile.state.js +133 -0
  236. package/dist/states/profile.state.js.map +1 -0
  237. package/dist/streamers/chat.streamer.d.ts +55 -0
  238. package/dist/streamers/chat.streamer.d.ts.map +1 -0
  239. package/dist/streamers/chat.streamer.js +186 -0
  240. package/dist/streamers/chat.streamer.js.map +1 -0
  241. package/dist/streamers/index.d.ts +3 -0
  242. package/dist/streamers/index.d.ts.map +1 -0
  243. package/dist/streamers/index.js +3 -0
  244. package/dist/streamers/index.js.map +1 -0
  245. package/dist/streamers/response.streamer.d.ts +36 -0
  246. package/dist/streamers/response.streamer.d.ts.map +1 -0
  247. package/dist/streamers/response.streamer.js +46 -0
  248. package/dist/streamers/response.streamer.js.map +1 -0
  249. package/dist/support/chat.utils.d.ts +42 -0
  250. package/dist/support/chat.utils.d.ts.map +1 -0
  251. package/dist/support/chat.utils.js +89 -0
  252. package/dist/support/chat.utils.js.map +1 -0
  253. package/dist/support/debug-meta.sanitizer.d.ts +18 -0
  254. package/dist/support/debug-meta.sanitizer.d.ts.map +1 -0
  255. package/dist/support/debug-meta.sanitizer.js +82 -0
  256. package/dist/support/debug-meta.sanitizer.js.map +1 -0
  257. package/dist/support/feed.health.d.ts +32 -0
  258. package/dist/support/feed.health.d.ts.map +1 -0
  259. package/dist/support/feed.health.js +76 -0
  260. package/dist/support/feed.health.js.map +1 -0
  261. package/dist/support/introducer.discovery.d.ts +78 -0
  262. package/dist/support/introducer.discovery.d.ts.map +1 -0
  263. package/dist/support/introducer.discovery.js +101 -0
  264. package/dist/support/introducer.discovery.js.map +1 -0
  265. package/dist/support/log.d.ts +65 -0
  266. package/dist/support/log.d.ts.map +1 -0
  267. package/dist/support/log.js +76 -0
  268. package/dist/support/log.js.map +1 -0
  269. package/dist/support/lucide.icon-catalog.d.ts +22 -0
  270. package/dist/support/lucide.icon-catalog.d.ts.map +1 -0
  271. package/dist/support/lucide.icon-catalog.js +101 -0
  272. package/dist/support/lucide.icon-catalog.js.map +1 -0
  273. package/dist/support/opportunity.card-text.d.ts +39 -0
  274. package/dist/support/opportunity.card-text.d.ts.map +1 -0
  275. package/dist/support/opportunity.card-text.js +333 -0
  276. package/dist/support/opportunity.card-text.js.map +1 -0
  277. package/dist/support/opportunity.constants.d.ts +9 -0
  278. package/dist/support/opportunity.constants.d.ts.map +1 -0
  279. package/dist/support/opportunity.constants.js +11 -0
  280. package/dist/support/opportunity.constants.js.map +1 -0
  281. package/dist/support/opportunity.discover.d.ts +144 -0
  282. package/dist/support/opportunity.discover.d.ts.map +1 -0
  283. package/dist/support/opportunity.discover.js +610 -0
  284. package/dist/support/opportunity.discover.js.map +1 -0
  285. package/dist/support/opportunity.enricher.d.ts +44 -0
  286. package/dist/support/opportunity.enricher.d.ts.map +1 -0
  287. package/dist/support/opportunity.enricher.js +245 -0
  288. package/dist/support/opportunity.enricher.js.map +1 -0
  289. package/dist/support/opportunity.persist.d.ts +39 -0
  290. package/dist/support/opportunity.persist.d.ts.map +1 -0
  291. package/dist/support/opportunity.persist.js +63 -0
  292. package/dist/support/opportunity.persist.js.map +1 -0
  293. package/dist/support/opportunity.presentation.d.ts +21 -0
  294. package/dist/support/opportunity.presentation.d.ts.map +1 -0
  295. package/dist/support/opportunity.presentation.js +75 -0
  296. package/dist/support/opportunity.presentation.js.map +1 -0
  297. package/dist/support/opportunity.sanitize.d.ts +18 -0
  298. package/dist/support/opportunity.sanitize.d.ts.map +1 -0
  299. package/dist/support/opportunity.sanitize.js +89 -0
  300. package/dist/support/opportunity.sanitize.js.map +1 -0
  301. package/dist/support/opportunity.utils.d.ts +99 -0
  302. package/dist/support/opportunity.utils.d.ts.map +1 -0
  303. package/dist/support/opportunity.utils.js +184 -0
  304. package/dist/support/opportunity.utils.js.map +1 -0
  305. package/dist/support/performance.d.ts +19 -0
  306. package/dist/support/performance.d.ts.map +1 -0
  307. package/dist/support/performance.js +43 -0
  308. package/dist/support/performance.js.map +1 -0
  309. package/dist/support/profile.enrichment-display-name.d.ts +16 -0
  310. package/dist/support/profile.enrichment-display-name.d.ts.map +1 -0
  311. package/dist/support/profile.enrichment-display-name.js +22 -0
  312. package/dist/support/profile.enrichment-display-name.js.map +1 -0
  313. package/dist/support/protocol.logger.d.ts +22 -0
  314. package/dist/support/protocol.logger.d.ts.map +1 -0
  315. package/dist/support/protocol.logger.js +44 -0
  316. package/dist/support/protocol.logger.js.map +1 -0
  317. package/dist/support/request-context.d.ts +19 -0
  318. package/dist/support/request-context.d.ts.map +1 -0
  319. package/dist/support/request-context.js +7 -0
  320. package/dist/support/request-context.js.map +1 -0
  321. package/dist/tools/contact.tools.d.ts +7 -0
  322. package/dist/tools/contact.tools.d.ts.map +1 -0
  323. package/dist/tools/contact.tools.js +115 -0
  324. package/dist/tools/contact.tools.js.map +1 -0
  325. package/dist/tools/index.d.ts +17 -0
  326. package/dist/tools/index.d.ts.map +1 -0
  327. package/dist/tools/index.js +140 -0
  328. package/dist/tools/index.js.map +1 -0
  329. package/dist/tools/index.tools.d.ts +3 -0
  330. package/dist/tools/index.tools.d.ts.map +1 -0
  331. package/dist/tools/index.tools.js +423 -0
  332. package/dist/tools/index.tools.js.map +1 -0
  333. package/dist/tools/integration.tools.d.ts +13 -0
  334. package/dist/tools/integration.tools.d.ts.map +1 -0
  335. package/dist/tools/integration.tools.js +77 -0
  336. package/dist/tools/integration.tools.js.map +1 -0
  337. package/dist/tools/intent.tools.d.ts +3 -0
  338. package/dist/tools/intent.tools.d.ts.map +1 -0
  339. package/dist/tools/intent.tools.js +458 -0
  340. package/dist/tools/intent.tools.js.map +1 -0
  341. package/dist/tools/opportunity.tools.d.ts +44 -0
  342. package/dist/tools/opportunity.tools.d.ts.map +1 -0
  343. package/dist/tools/opportunity.tools.js +814 -0
  344. package/dist/tools/opportunity.tools.js.map +1 -0
  345. package/dist/tools/profile.tools.d.ts +3 -0
  346. package/dist/tools/profile.tools.d.ts.map +1 -0
  347. package/dist/tools/profile.tools.js +513 -0
  348. package/dist/tools/profile.tools.js.map +1 -0
  349. package/dist/tools/tool.helpers.d.ts +225 -0
  350. package/dist/tools/tool.helpers.d.ts.map +1 -0
  351. package/dist/tools/tool.helpers.js +172 -0
  352. package/dist/tools/tool.helpers.js.map +1 -0
  353. package/dist/tools/tool.registry.d.ts +12 -0
  354. package/dist/tools/tool.registry.d.ts.map +1 -0
  355. package/dist/tools/tool.registry.js +62 -0
  356. package/dist/tools/tool.registry.js.map +1 -0
  357. package/dist/tools/utility.tools.d.ts +3 -0
  358. package/dist/tools/utility.tools.d.ts.map +1 -0
  359. package/dist/tools/utility.tools.js +107 -0
  360. package/dist/tools/utility.tools.js.map +1 -0
  361. package/dist/types/chat-streaming.types.d.ts +472 -0
  362. package/dist/types/chat-streaming.types.d.ts.map +1 -0
  363. package/dist/types/chat-streaming.types.js +260 -0
  364. package/dist/types/chat-streaming.types.js.map +1 -0
  365. package/package.json +32 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * MCP Server Factory — creates an McpServer instance with all protocol tools
3
+ * registered from the existing tool registry. Each tool invocation resolves
4
+ * auth from the HTTP request, builds a ResolvedToolContext, and delegates
5
+ * to the raw tool handler.
6
+ */
7
+ import { z } from 'zod';
8
+ import { McpServer, fromJsonSchema } from '@modelcontextprotocol/server';
9
+ import { resolveChatContext } from '../tools/tool.helpers.js';
10
+ import { createToolRegistry } from '../tools/tool.registry.js';
11
+ import { protocolLogger } from '../support/protocol.logger.js';
12
+ const logger = protocolLogger('McpServer');
13
+ // ═══════════════════════════════════════════════════════════════════════════════
14
+ // ZOD 3 → JSON SCHEMA CONVERSION
15
+ // ═══════════════════════════════════════════════════════════════════════════════
16
+ /**
17
+ * Minimal Zod-to-JSON-Schema conversion for MCP tool registration.
18
+ * Converts Zod 3.x schemas to plain JSON Schema objects that can be
19
+ * wrapped with `fromJsonSchema()` for MCP SDK compatibility.
20
+ */
21
+ function zodToJsonSchema(schema) {
22
+ if (schema instanceof z.ZodObject) {
23
+ const shape = schema.shape;
24
+ const properties = {};
25
+ const required = [];
26
+ for (const [key, value] of Object.entries(shape)) {
27
+ const zodValue = value;
28
+ properties[key] = zodToJsonSchema(zodValue);
29
+ if (!(zodValue instanceof z.ZodOptional) && !(zodValue instanceof z.ZodDefault)) {
30
+ required.push(key);
31
+ }
32
+ }
33
+ return { type: 'object', properties, ...(required.length ? { required } : {}) };
34
+ }
35
+ if (schema instanceof z.ZodString) {
36
+ const result = { type: 'string' };
37
+ // Detect .url(), .email(), .uuid() etc. via Zod's internal checks array
38
+ const checks = schema._def?.checks;
39
+ if (checks) {
40
+ for (const check of checks) {
41
+ if (check.kind === 'url')
42
+ result.format = 'uri';
43
+ else if (check.kind === 'email')
44
+ result.format = 'email';
45
+ else if (check.kind === 'uuid')
46
+ result.format = 'uuid';
47
+ else if (check.kind === 'datetime')
48
+ result.format = 'date-time';
49
+ }
50
+ }
51
+ return result;
52
+ }
53
+ if (schema instanceof z.ZodNumber) {
54
+ const checks = schema._def?.checks;
55
+ const result = { type: 'number' };
56
+ if (checks) {
57
+ for (const check of checks) {
58
+ if (check.kind === 'int')
59
+ result.type = 'integer';
60
+ else if (check.kind === 'min')
61
+ result.minimum = check.value;
62
+ else if (check.kind === 'max')
63
+ result.maximum = check.value;
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ if (schema instanceof z.ZodBoolean)
69
+ return { type: 'boolean' };
70
+ if (schema instanceof z.ZodArray) {
71
+ return { type: 'array', items: zodToJsonSchema(schema.element) };
72
+ }
73
+ if (schema instanceof z.ZodOptional) {
74
+ return zodToJsonSchema(schema.unwrap());
75
+ }
76
+ if (schema instanceof z.ZodDefault) {
77
+ return zodToJsonSchema(schema.removeDefault());
78
+ }
79
+ if (schema instanceof z.ZodEnum) {
80
+ return { type: 'string', enum: schema.options };
81
+ }
82
+ if (schema instanceof z.ZodNullable) {
83
+ const inner = zodToJsonSchema(schema.unwrap());
84
+ return { ...inner, nullable: true };
85
+ }
86
+ if (schema instanceof z.ZodRecord) {
87
+ return { type: 'object', additionalProperties: true };
88
+ }
89
+ return { type: 'object' };
90
+ }
91
+ /**
92
+ * Creates an MCP server with all protocol tools registered.
93
+ * Tools resolve auth per-request via the HTTP request available in ServerContext.
94
+ *
95
+ * @param deps - Shared tool dependencies (graphs, database, embedder, etc.)
96
+ * @param authResolver - Resolves authenticated user ID from the HTTP request
97
+ * @param scopedDepsFactory - Factory for creating per-request scoped databases
98
+ * @returns A configured McpServer ready to be connected to a transport
99
+ */
100
+ export function createMcpServer(deps, authResolver, scopedDepsFactory) {
101
+ const server = new McpServer({
102
+ name: 'index-network',
103
+ version: '1.0.0',
104
+ });
105
+ const registry = createToolRegistry(deps);
106
+ for (const [toolName, toolDef] of registry) {
107
+ // Convert Zod 3 schema to JSON Schema, then wrap with fromJsonSchema
108
+ // for MCP SDK's StandardSchemaWithJSON compatibility
109
+ const jsonSchema = zodToJsonSchema(toolDef.schema);
110
+ const mcpSchema = fromJsonSchema(jsonSchema);
111
+ server.registerTool(toolName, {
112
+ description: toolDef.description,
113
+ inputSchema: mcpSchema,
114
+ }, async (args, ctx) => {
115
+ try {
116
+ // Extract the original HTTP request from the MCP server context
117
+ const httpReq = ctx.http?.req;
118
+ if (!httpReq) {
119
+ return {
120
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No HTTP request available in MCP context' }) }],
121
+ isError: true,
122
+ };
123
+ }
124
+ // Resolve authenticated user
125
+ const userId = await authResolver.resolveUserId(httpReq);
126
+ // Resolve chat context for the user
127
+ const context = await resolveChatContext({ database: deps.database, userId });
128
+ // Build per-request scoped databases via injected factory
129
+ const indexScope = context.userIndexes.map((m) => m.indexId);
130
+ const scopedDbs = scopedDepsFactory.create(userId, indexScope);
131
+ // Override deps with per-request scoped databases
132
+ const requestDeps = { ...deps, ...scopedDbs };
133
+ // Re-create registry with per-request deps for scoped database access
134
+ const requestRegistry = createToolRegistry(requestDeps);
135
+ const requestTool = requestRegistry.get(toolName);
136
+ if (!requestTool) {
137
+ return {
138
+ content: [{ type: 'text', text: JSON.stringify({ error: `Tool "${toolName}" not found` }) }],
139
+ isError: true,
140
+ };
141
+ }
142
+ // Validate input against the original Zod schema
143
+ const parseResult = toolDef.schema.safeParse(args);
144
+ if (!parseResult.success) {
145
+ const issues = parseResult.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
146
+ return {
147
+ content: [{ type: 'text', text: JSON.stringify({ success: false, error: `Invalid input: ${issues}` }) }],
148
+ isError: true,
149
+ };
150
+ }
151
+ const validatedArgs = parseResult.data;
152
+ // Execute the tool handler
153
+ const result = await requestTool.handler({ context, query: validatedArgs });
154
+ return {
155
+ content: [{ type: 'text', text: result }],
156
+ };
157
+ }
158
+ catch (err) {
159
+ const message = err instanceof Error ? err.message : String(err);
160
+ logger.error(`MCP tool "${toolName}" failed`, { error: message });
161
+ return {
162
+ content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
163
+ isError: true,
164
+ };
165
+ }
166
+ });
167
+ }
168
+ logger.verbose(`MCP server created with ${registry.size} tools`);
169
+ return server;
170
+ }
171
+ //# sourceMappingURL=mcp.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.server.js","sourceRoot":"","sources":["../../src/mcp/mcp.server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAE3C,kFAAkF;AAClF,iCAAiC;AACjC,kFAAkF;AAElF;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAiB;IACxC,IAAI,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,KAAkB,CAAC;YACpC,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3D,wEAAwE;QACxE,MAAM,MAAM,GAAI,MAAsE,CAAC,IAAI,EAAE,MAAM,CAAC;QACpG,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;oBAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;qBAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;qBACpD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;qBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;YAClE,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAI,MAAsF,CAAC,IAAI,EAAE,MAAM,CAAC;QACpH,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3D,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;oBAAE,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;qBAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;oBAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;qBACvD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;oBAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/D,IAAI,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,CAAE,MAAgC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,eAAe,CAAE,MAAmC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,eAAe,CAAE,MAAkC,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAG,MAA2C,CAAC,OAAO,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,eAAe,CAAE,MAAmC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAgBD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAc,EACd,YAA6B,EAC7B,iBAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE1C,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC3C,qEAAqE;QACrE,qDAAqD;QACrD,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAmB,CAAC;QACrE,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAE7C,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;YACE,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,SAAS;SACvB,EACD,KAAK,EAAE,IAAa,EAAE,GAAkB,EAAE,EAAE;YAC1C,IAAI,CAAC;gBACH,gEAAgE;gBAChE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,EAAE,CAAC;wBACjH,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,6BAA6B;gBAC7B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAEzD,oCAAoC;gBACpC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE9E,0DAA0D;gBAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC7D,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAE/D,kDAAkD;gBAClD,MAAM,WAAW,GAAa,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;gBAExD,sEAAsE;gBACtE,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBACxD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAElD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,QAAQ,aAAa,EAAE,CAAC,EAAE,CAAC;wBACrG,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,iDAAiD;gBACjD,MAAM,WAAW,GAAI,OAAO,CAAC,MAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnG,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;wBACjH,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;gBAEvC,2BAA2B;gBAC3B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;gBAE5E,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iBACnD,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAClE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC9E,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,2BAA2B,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,126 @@
1
+ import type { BaseMessage } from "@langchain/core/messages";
2
+ import type { DebugMetaToolCall } from "../types/chat-streaming.types.js";
3
+ /** Routing decision from router node (target, operationType, extractedContext). */
4
+ export interface RoutingDecision {
5
+ target: string;
6
+ operationType: string | null;
7
+ extractedContext?: string | null;
8
+ }
9
+ /** Intent subgraph result (actions, inferredIntents, etc.). */
10
+ export interface IntentSubgraphResult {
11
+ actions?: Array<{
12
+ type: string;
13
+ payload?: string;
14
+ }>;
15
+ inferredIntents?: unknown[];
16
+ indexingResults?: unknown[];
17
+ mode?: string;
18
+ intents?: unknown[];
19
+ count?: number;
20
+ error?: string;
21
+ /** When the intent graph exits early (e.g. index-scoped without intents); surface to user. */
22
+ requiredMessage?: string;
23
+ }
24
+ /** Index subgraph result (memberships, ownedIndexes, specificIndexData). */
25
+ export interface IndexSubgraphResult {
26
+ mode?: string;
27
+ memberships?: unknown[];
28
+ ownedIndexes?: unknown[];
29
+ specificIndexData?: unknown;
30
+ count?: number;
31
+ error?: string;
32
+ }
33
+ /** Aggregated results from subgraphs (intent, index, profile, opportunity, scrape). */
34
+ export interface SubgraphResults {
35
+ intent?: IntentSubgraphResult;
36
+ index?: IndexSubgraphResult;
37
+ profile?: unknown;
38
+ opportunity?: unknown;
39
+ scrape?: unknown;
40
+ }
41
+ /**
42
+ * The Chat Graph State using LangGraph Annotations.
43
+ *
44
+ * This is a simplified state for the agent loop architecture.
45
+ * The agent handles all routing decisions internally via tool calling.
46
+ *
47
+ * Design Principles:
48
+ * - Messages accumulate through the conversation (includes tool calls/results)
49
+ * - Iteration count tracks loop progress for soft/hard limits
50
+ * - Final response is extracted at the end
51
+ */
52
+ export declare const ChatGraphState: import("@langchain/langgraph").AnnotationRoot<{
53
+ /**
54
+ * The User ID - required for all operations.
55
+ */
56
+ userId: {
57
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
58
+ (): import("@langchain/langgraph").LastValue<string>;
59
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
60
+ };
61
+ /**
62
+ * Optional index (community) ID when chat is scoped to a specific index.
63
+ * When set, the agent and tools use this as the current index (e.g. read_intents,
64
+ * create_intent with indexId, scope index assignment to this index only).
65
+ */
66
+ indexId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
67
+ /**
68
+ * Chat session ID when streaming with context. Used by tools to create draft
69
+ * opportunities tied to this conversation (context.conversationId).
70
+ */
71
+ sessionId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
72
+ /**
73
+ * Conversation history using LangGraph's built-in message reducer.
74
+ * Includes: HumanMessage, AIMessage, ToolMessage, SystemMessage
75
+ * Automatically handles message appending, ID management, and ordering.
76
+ */
77
+ messages: import("@langchain/langgraph").BaseChannel<BaseMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>, import("@langchain/core/messages").MessageType>[], BaseMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>, import("@langchain/core/messages").MessageType>[] | import("@langchain/langgraph").OverwriteValue<BaseMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>, import("@langchain/core/messages").MessageType>[]>, unknown>;
78
+ /**
79
+ * Current iteration count in the agent loop.
80
+ * Used for soft limit (nudge) and hard limit (force exit).
81
+ */
82
+ iterationCount: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
83
+ /**
84
+ * Flag indicating whether the agent loop should continue.
85
+ * Set to false when agent produces final response or hits hard limit.
86
+ */
87
+ shouldContinue: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
88
+ /**
89
+ * The final generated response text.
90
+ * Set when the agent decides to stop and respond.
91
+ */
92
+ responseText: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
93
+ /**
94
+ * Error message if the agent loop fails.
95
+ */
96
+ error: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
97
+ /**
98
+ * Per-turn debug meta (graph, iterations, tool calls) for copy-debug.
99
+ * Not persisted; only used so the streamer receives it in the updates chunk.
100
+ */
101
+ debugMeta: import("@langchain/langgraph").BaseChannel<{
102
+ graph: string;
103
+ iterations: number;
104
+ tools: DebugMetaToolCall[];
105
+ } | undefined, {
106
+ graph: string;
107
+ iterations: number;
108
+ tools: DebugMetaToolCall[];
109
+ } | import("@langchain/langgraph").OverwriteValue<{
110
+ graph: string;
111
+ iterations: number;
112
+ tools: DebugMetaToolCall[];
113
+ } | undefined> | undefined, unknown>;
114
+ /** Router output: target, operationType, extractedContext. */
115
+ routingDecision: import("@langchain/langgraph").BaseChannel<RoutingDecision | undefined, RoutingDecision | import("@langchain/langgraph").OverwriteValue<RoutingDecision | undefined> | undefined, unknown>;
116
+ /** Results from intent/profile/opportunity/scrape subgraphs. */
117
+ subgraphResults: import("@langchain/langgraph").BaseChannel<SubgraphResults | undefined, SubgraphResults | import("@langchain/langgraph").OverwriteValue<SubgraphResults | undefined> | undefined, unknown>;
118
+ /** User profile context (e.g. for intent nodes). */
119
+ userProfile: import("@langchain/langgraph").BaseChannel<unknown, unknown, unknown>;
120
+ }>;
121
+ /**
122
+ * The full state type for the Chat Graph.
123
+ * Use this for typing node functions and graph invocations.
124
+ */
125
+ export type ChatGraphStateType = typeof ChatGraphState.State;
126
+ //# sourceMappingURL=chat.state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.state.d.ts","sourceRoot":"","sources":["../../src/states/chat.state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAM1E,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc;IAKzB;;OAEG;;;;;;IAGH;;;;OAIG;;IAMH;;;OAGG;;IAMH;;;;OAIG;;IAUH;;;OAGG;;IAMH;;;OAGG;;IAUH;;;OAGG;;IAMH;;OAEG;;IAMH;;;OAGG;;eAC4B,MAAM;oBAAc,MAAM;eAAS,iBAAiB,EAAE;;eAAtD,MAAM;oBAAc,MAAM;eAAS,iBAAiB,EAAE;;eAAtD,MAAM;oBAAc,MAAM;eAAS,iBAAiB,EAAE;;IAMrF,8DAA8D;;IAK9D,gEAAgE;;IAKhE,oDAAoD;;EAMpD,CAAC;AAMH;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC,KAAK,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { Annotation, messagesStateReducer } from "@langchain/langgraph";
2
+ // ══════════════════════════════════════════════════════════════════════════════
3
+ // CHAT GRAPH STATE (Agent Loop Architecture)
4
+ // ══════════════════════════════════════════════════════════════════════════════
5
+ /**
6
+ * The Chat Graph State using LangGraph Annotations.
7
+ *
8
+ * This is a simplified state for the agent loop architecture.
9
+ * The agent handles all routing decisions internally via tool calling.
10
+ *
11
+ * Design Principles:
12
+ * - Messages accumulate through the conversation (includes tool calls/results)
13
+ * - Iteration count tracks loop progress for soft/hard limits
14
+ * - Final response is extracted at the end
15
+ */
16
+ export const ChatGraphState = Annotation.Root({
17
+ // ═══════════════════════════════════════════════════════════════════════════
18
+ // CORE INPUTS
19
+ // ═══════════════════════════════════════════════════════════════════════════
20
+ /**
21
+ * The User ID - required for all operations.
22
+ */
23
+ userId: (Annotation),
24
+ /**
25
+ * Optional index (community) ID when chat is scoped to a specific index.
26
+ * When set, the agent and tools use this as the current index (e.g. read_intents,
27
+ * create_intent with indexId, scope index assignment to this index only).
28
+ */
29
+ indexId: Annotation({
30
+ reducer: (curr, next) => next ?? curr,
31
+ default: () => undefined,
32
+ }),
33
+ /**
34
+ * Chat session ID when streaming with context. Used by tools to create draft
35
+ * opportunities tied to this conversation (context.conversationId).
36
+ */
37
+ sessionId: Annotation({
38
+ reducer: (curr, next) => next ?? curr,
39
+ default: () => undefined,
40
+ }),
41
+ /**
42
+ * Conversation history using LangGraph's built-in message reducer.
43
+ * Includes: HumanMessage, AIMessage, ToolMessage, SystemMessage
44
+ * Automatically handles message appending, ID management, and ordering.
45
+ */
46
+ messages: Annotation({
47
+ reducer: messagesStateReducer,
48
+ default: () => [],
49
+ }),
50
+ // ═══════════════════════════════════════════════════════════════════════════
51
+ // LOOP CONTROL
52
+ // ═══════════════════════════════════════════════════════════════════════════
53
+ /**
54
+ * Current iteration count in the agent loop.
55
+ * Used for soft limit (nudge) and hard limit (force exit).
56
+ */
57
+ iterationCount: Annotation({
58
+ reducer: (curr, next) => next,
59
+ default: () => 0,
60
+ }),
61
+ /**
62
+ * Flag indicating whether the agent loop should continue.
63
+ * Set to false when agent produces final response or hits hard limit.
64
+ */
65
+ shouldContinue: Annotation({
66
+ reducer: (curr, next) => next,
67
+ default: () => true,
68
+ }),
69
+ // ═══════════════════════════════════════════════════════════════════════════
70
+ // OUTPUTS
71
+ // ═══════════════════════════════════════════════════════════════════════════
72
+ /**
73
+ * The final generated response text.
74
+ * Set when the agent decides to stop and respond.
75
+ */
76
+ responseText: Annotation({
77
+ reducer: (curr, next) => next,
78
+ default: () => undefined,
79
+ }),
80
+ /**
81
+ * Error message if the agent loop fails.
82
+ */
83
+ error: Annotation({
84
+ reducer: (curr, next) => next,
85
+ default: () => undefined,
86
+ }),
87
+ /**
88
+ * Per-turn debug meta (graph, iterations, tool calls) for copy-debug.
89
+ * Not persisted; only used so the streamer receives it in the updates chunk.
90
+ */
91
+ debugMeta: Annotation({
92
+ reducer: (curr, next) => next,
93
+ default: () => undefined,
94
+ }),
95
+ // Legacy subgraph state (used by index/intent/response nodes when present)
96
+ /** Router output: target, operationType, extractedContext. */
97
+ routingDecision: Annotation({
98
+ reducer: (curr, next) => next,
99
+ default: () => undefined,
100
+ }),
101
+ /** Results from intent/profile/opportunity/scrape subgraphs. */
102
+ subgraphResults: Annotation({
103
+ reducer: (curr, next) => next,
104
+ default: () => undefined,
105
+ }),
106
+ /** User profile context (e.g. for intent nodes). */
107
+ userProfile: Annotation({
108
+ reducer: (curr, next) => next,
109
+ default: () => undefined,
110
+ }),
111
+ });
112
+ //# sourceMappingURL=chat.state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.state.js","sourceRoot":"","sources":["../../src/states/chat.state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAgDxE,iFAAiF;AACjF,6CAA6C;AAC7C,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAC5C,8EAA8E;IAC9E,cAAc;IACd,8EAA8E;IAE9E;;OAEG;IACH,MAAM,EAAE,CAAA,UAAkB,CAAA;IAE1B;;;;OAIG;IACH,OAAO,EAAE,UAAU,CAAqB;QACtC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;;OAGG;IACH,SAAS,EAAE,UAAU,CAAqB;QACxC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;;;OAIG;IACH,QAAQ,EAAE,UAAU,CAAgB;QAClC,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;KAClB,CAAC;IAEF,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E;;;OAGG;IACH,cAAc,EAAE,UAAU,CAAS;QACjC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;KACjB,CAAC;IAEF;;;OAGG;IACH,cAAc,EAAE,UAAU,CAAU;QAClC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB,CAAC;IAEF,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E;;;OAGG;IACH,YAAY,EAAE,UAAU,CAAqB;QAC3C,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;OAEG;IACH,KAAK,EAAE,UAAU,CAAqB;QACpC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;;OAGG;IACH,SAAS,EAAE,UAAU,CAAgF;QACnG,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,2EAA2E;IAC3E,8DAA8D;IAC9D,eAAe,EAAE,UAAU,CAA8B;QACvD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IACF,gEAAgE;IAChE,eAAe,EAAE,UAAU,CAA8B;QACvD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IACF,oDAAoD;IACpD,WAAW,EAAE,UAAU,CAAU;QAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;CAEH,CAAC,CAAC"}
@@ -0,0 +1,100 @@
1
+ import type { Opportunity } from '../interfaces/database.interface.js';
2
+ import type { DebugMetaAgent } from '../types/chat-streaming.types.js';
3
+ /**
4
+ * Home view card item: one opportunity with full presenter-driven display contract.
5
+ */
6
+ export interface HomeCardItem {
7
+ opportunityId: string;
8
+ userId: string;
9
+ name: string;
10
+ avatar: string | null;
11
+ mainText: string;
12
+ cta: string;
13
+ headline?: string;
14
+ /** Presenter-generated; primary button (accept) and secondary button (dismiss). */
15
+ primaryActionLabel: string;
16
+ secondaryActionLabel: string;
17
+ /** Presenter-generated subtitle under the other party name (e.g. "1 mutual intent"). */
18
+ mutualIntentsLabel: string;
19
+ /** Narrator chip for human-introduced opportunities; avatar set when narrator is a user */
20
+ narratorChip?: {
21
+ name: string;
22
+ text: string;
23
+ avatar?: string | null;
24
+ userId?: string;
25
+ };
26
+ /** Viewer's role in this opportunity (e.g. 'introducer', 'party', 'agent', 'patient', 'peer'). */
27
+ viewerRole?: string;
28
+ /** Whether the counterpart is a ghost (not yet onboarded) user. */
29
+ isGhost?: boolean;
30
+ /** Second party in introducer arrow layout. Present when viewerRole is 'introducer'. */
31
+ secondParty?: {
32
+ name: string;
33
+ avatar?: string | null;
34
+ userId?: string;
35
+ };
36
+ /** For section assignment from LLM */
37
+ _cardIndex: number;
38
+ }
39
+ /**
40
+ * Dynamic section from LLM categorization.
41
+ */
42
+ export interface HomeSectionProposal {
43
+ id: string;
44
+ title: string;
45
+ subtitle?: string;
46
+ iconName: string;
47
+ itemIndices: number[];
48
+ }
49
+ /** Card item as returned in API (no internal _cardIndex). */
50
+ export type HomeSectionItem = Omit<HomeCardItem, '_cardIndex'>;
51
+ /**
52
+ * Final section for API response.
53
+ */
54
+ export interface HomeSection {
55
+ id: string;
56
+ title: string;
57
+ subtitle?: string;
58
+ iconName: string;
59
+ items: HomeSectionItem[];
60
+ }
61
+ /**
62
+ * Home Graph State (Annotation-based).
63
+ * Flow: loadOpportunities → generateCardText → categorizeDynamically → normalizeAndSort → finalizeResponse.
64
+ */
65
+ export declare const HomeGraphState: import("@langchain/langgraph").AnnotationRoot<{
66
+ userId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
67
+ indexId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
68
+ limit: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
69
+ /** When true, bypass presenter and categorizer Redis caches. */
70
+ noCache: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
71
+ /** Raw opportunities visible to the viewer (after visibility filter). */
72
+ opportunities: import("@langchain/langgraph").BaseChannel<Opportunity[], Opportunity[] | import("@langchain/langgraph").OverwriteValue<Opportunity[]>, unknown>;
73
+ /** Cards with presenter output and narrator chip. */
74
+ cards: import("@langchain/langgraph").BaseChannel<HomeCardItem[], HomeCardItem[] | import("@langchain/langgraph").OverwriteValue<HomeCardItem[]>, unknown>;
75
+ /** LLM output: dynamic sections with icon and item indices. */
76
+ sectionProposals: import("@langchain/langgraph").BaseChannel<HomeSectionProposal[], HomeSectionProposal[] | import("@langchain/langgraph").OverwriteValue<HomeSectionProposal[]>, unknown>;
77
+ /** Final sections for response. */
78
+ sections: import("@langchain/langgraph").BaseChannel<HomeSection[], HomeSection[] | import("@langchain/langgraph").OverwriteValue<HomeSection[]>, unknown>;
79
+ /** Presenter results retrieved from cache (opportunityId → HomeCardItem). */
80
+ cachedCards: import("@langchain/langgraph").BaseChannel<Map<string, HomeCardItem>, Map<string, HomeCardItem> | import("@langchain/langgraph").OverwriteValue<Map<string, HomeCardItem>>, unknown>;
81
+ /** Opportunities that had no cache hit and need presenter generation. */
82
+ uncachedOpportunities: import("@langchain/langgraph").BaseChannel<Opportunity[], Opportunity[] | import("@langchain/langgraph").OverwriteValue<Opportunity[]>, unknown>;
83
+ /** Whether categorizer results were found in cache. */
84
+ categoryCacheHit: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
85
+ error: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
86
+ /** Meta for response (e.g. totalOpportunities, totalSections). */
87
+ meta: import("@langchain/langgraph").BaseChannel<{
88
+ totalOpportunities: number;
89
+ totalSections: number;
90
+ }, {
91
+ totalOpportunities: number;
92
+ totalSections: number;
93
+ } | import("@langchain/langgraph").OverwriteValue<{
94
+ totalOpportunities: number;
95
+ totalSections: number;
96
+ }>, unknown>;
97
+ /** Timing records for each agent invocation within this graph run. */
98
+ agentTimings: import("@langchain/langgraph").BaseChannel<DebugMetaAgent[], DebugMetaAgent[] | import("@langchain/langgraph").OverwriteValue<DebugMetaAgent[]>, unknown>;
99
+ }>;
100
+ //# sourceMappingURL=home.state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.state.d.ts","sourceRoot":"","sources":["../../src/states/home.state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wFAAwF;IACxF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvF,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wFAAwF;IACxF,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;IAczB,gEAAgE;;IAMhE,yEAAyE;;IAMzE,qDAAqD;;IAMrD,+DAA+D;;IAM/D,mCAAmC;;IAMnC,6EAA6E;;IAM7E,yEAAyE;;IAMzE,uDAAuD;;;IAWvD,kEAAkE;;4BAC3B,MAAM;uBAAiB,MAAM;;4BAA7B,MAAM;uBAAiB,MAAM;;4BAA7B,MAAM;uBAAiB,MAAM;;IAKpE,sEAAsE;;EAKtE,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { Annotation } from '@langchain/langgraph';
2
+ /**
3
+ * Home Graph State (Annotation-based).
4
+ * Flow: loadOpportunities → generateCardText → categorizeDynamically → normalizeAndSort → finalizeResponse.
5
+ */
6
+ export const HomeGraphState = Annotation.Root({
7
+ userId: Annotation({
8
+ reducer: (curr, next) => next ?? curr,
9
+ default: () => '',
10
+ }),
11
+ indexId: Annotation({
12
+ reducer: (curr, next) => next ?? curr,
13
+ default: () => undefined,
14
+ }),
15
+ limit: Annotation({
16
+ reducer: (curr, next) => next ?? curr,
17
+ default: () => 50,
18
+ }),
19
+ /** When true, bypass presenter and categorizer Redis caches. */
20
+ noCache: Annotation({
21
+ reducer: (curr, next) => next ?? curr,
22
+ default: () => false,
23
+ }),
24
+ /** Raw opportunities visible to the viewer (after visibility filter). */
25
+ opportunities: Annotation({
26
+ reducer: (curr, next) => next ?? curr,
27
+ default: () => [],
28
+ }),
29
+ /** Cards with presenter output and narrator chip. */
30
+ cards: Annotation({
31
+ reducer: (curr, next) => next ?? curr,
32
+ default: () => [],
33
+ }),
34
+ /** LLM output: dynamic sections with icon and item indices. */
35
+ sectionProposals: Annotation({
36
+ reducer: (curr, next) => next ?? curr,
37
+ default: () => [],
38
+ }),
39
+ /** Final sections for response. */
40
+ sections: Annotation({
41
+ reducer: (curr, next) => next ?? curr,
42
+ default: () => [],
43
+ }),
44
+ /** Presenter results retrieved from cache (opportunityId → HomeCardItem). */
45
+ cachedCards: Annotation({
46
+ reducer: (curr, next) => next ?? curr,
47
+ default: () => new Map(),
48
+ }),
49
+ /** Opportunities that had no cache hit and need presenter generation. */
50
+ uncachedOpportunities: Annotation({
51
+ reducer: (curr, next) => next ?? curr,
52
+ default: () => [],
53
+ }),
54
+ /** Whether categorizer results were found in cache. */
55
+ categoryCacheHit: Annotation({
56
+ reducer: (curr, next) => next ?? curr,
57
+ default: () => false,
58
+ }),
59
+ error: Annotation({
60
+ reducer: (curr, next) => next ?? curr,
61
+ default: () => undefined,
62
+ }),
63
+ /** Meta for response (e.g. totalOpportunities, totalSections). */
64
+ meta: Annotation({
65
+ reducer: (curr, next) => next ?? curr,
66
+ default: () => ({ totalOpportunities: 0, totalSections: 0 }),
67
+ }),
68
+ /** Timing records for each agent invocation within this graph run. */
69
+ agentTimings: Annotation({
70
+ reducer: (acc, val) => [...acc, ...val],
71
+ default: () => [],
72
+ }),
73
+ });
74
+ //# sourceMappingURL=home.state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.state.js","sourceRoot":"","sources":["../../src/states/home.state.ts"],"names":[],"mappings":"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"}