@indexnetwork/protocol 22.0.0-rc.498.1 → 64.0.0-rc.604.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/CHANGELOG.md +1841 -0
  2. package/IMPLEMENTATION.md +140 -181
  3. package/README.md +16 -20
  4. package/STABILITY.md +16 -11
  5. package/dist/{intents/intent.module.d.ts → capabilities/intents.d.ts} +182 -192
  6. package/dist/capabilities/intents.js +88 -0
  7. package/dist/capabilities/negotiations.d.ts +17 -0
  8. package/dist/capabilities/negotiations.js +16 -0
  9. package/dist/{networks/network.module.d.ts → capabilities/networks.d.ts} +33 -169
  10. package/dist/{networks/network.module.js → capabilities/networks.js} +6 -17
  11. package/dist/index.d.ts +57 -132
  12. package/dist/index.js +41 -100
  13. package/dist/internal/agents/agent.repository.port.d.ts +59 -0
  14. package/dist/internal/agents/agent.repository.port.js +7 -0
  15. package/dist/internal/agents/agent.types.d.ts +35 -0
  16. package/dist/{agents → internal/agents}/agent.types.js +1 -6
  17. package/dist/{intents → internal/intents}/graph/intent.graph.d.ts +142 -151
  18. package/dist/{intents → internal/intents}/graph/intent.graph.execute.d.ts +5 -1
  19. package/dist/{intents → internal/intents}/graph/intent.graph.execute.js +165 -46
  20. package/dist/internal/intents/graph/intent.graph.infer.d.ts +78 -0
  21. package/dist/internal/intents/graph/intent.graph.infer.js +122 -0
  22. package/dist/internal/intents/graph/intent.graph.js +108 -0
  23. package/dist/{intents → internal/intents}/graph/intent.graph.reconcile.d.ts +18 -9
  24. package/dist/internal/intents/graph/intent.graph.reconcile.js +173 -0
  25. package/dist/internal/intents/graph/intent.graph.shared.d.ts +55 -0
  26. package/dist/{intents → internal/intents}/graph/intent.graph.shared.js +25 -70
  27. package/dist/{intents → internal/intents}/graph/intent.graph.state.d.ts +96 -32
  28. package/dist/{intents → internal/intents}/graph/intent.graph.state.js +42 -31
  29. package/dist/internal/intents/intent.admission.d.ts +16 -0
  30. package/dist/internal/intents/intent.admission.js +30 -0
  31. package/dist/{intents → internal/intents}/intent.inferrer.d.ts +1 -40
  32. package/dist/{intents → internal/intents}/intent.inferrer.js +13 -49
  33. package/dist/internal/intents/intent.preparer.d.ts +52 -0
  34. package/dist/internal/intents/intent.preparer.js +87 -0
  35. package/dist/{intents → internal/intents}/intent.verifier.d.ts +3 -36
  36. package/dist/{intents → internal/intents}/intent.verifier.js +0 -17
  37. package/dist/{networks → internal/networks}/indexer.graph.d.ts +15 -200
  38. package/dist/{networks → internal/networks}/indexer.graph.js +19 -128
  39. package/dist/{networks → internal/networks}/indexer.state.d.ts +8 -63
  40. package/dist/internal/networks/indexer.state.js +70 -0
  41. package/dist/{networks → internal/networks}/membership.graph.d.ts +6 -6
  42. package/dist/{networks → internal/networks}/membership.graph.js +3 -3
  43. package/dist/{networks → internal/networks}/membership.state.d.ts +2 -2
  44. package/dist/{networks → internal/networks}/membership.state.js +2 -2
  45. package/dist/{networks → internal/networks}/network.graph.d.ts +9 -22
  46. package/dist/{networks → internal/networks}/network.graph.js +13 -27
  47. package/dist/{networks → internal/networks}/network.recommender.d.ts +2 -2
  48. package/dist/{networks → internal/networks}/network.recommender.js +2 -2
  49. package/dist/{networks → internal/networks}/network.state.d.ts +4 -7
  50. package/dist/{networks → internal/networks}/network.state.js +4 -4
  51. package/dist/internal/opportunities/negotiation-context.loader.d.ts +26 -0
  52. package/dist/internal/opportunities/negotiation-context.loader.js +36 -0
  53. package/dist/{opportunities → internal/opportunities}/opportunity.actor.d.ts +1 -1
  54. package/dist/{opportunities → internal/opportunities}/opportunity.actor.js +7 -1
  55. package/dist/internal/opportunities/opportunity.counterparties.d.ts +17 -0
  56. package/dist/internal/opportunities/opportunity.counterparties.js +19 -0
  57. package/dist/internal/opportunities/opportunity.events.d.ts +38 -0
  58. package/dist/internal/opportunities/opportunity.events.js +94 -0
  59. package/dist/{opportunities → internal/opportunities}/opportunity.feed-selection.d.ts +3 -9
  60. package/dist/internal/opportunities/opportunity.feed-selection.js +40 -0
  61. package/dist/internal/opportunities/opportunity.graph.modes.d.ts +39 -0
  62. package/dist/internal/opportunities/opportunity.graph.modes.js +138 -0
  63. package/dist/{opportunities → internal/opportunities}/opportunity.labels.d.ts +2 -3
  64. package/dist/internal/opportunities/opportunity.labels.js +9 -0
  65. package/dist/{opportunities → internal/opportunities}/opportunity.presentation.d.ts +17 -86
  66. package/dist/{opportunities → internal/opportunities}/opportunity.presentation.js +54 -447
  67. package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.d.ts +2 -2
  68. package/dist/internal/opportunities/opportunity.utils.d.ts +105 -0
  69. package/dist/internal/opportunities/opportunity.utils.js +165 -0
  70. package/dist/{opportunities → internal/opportunities}/radar/radar.graph.d.ts +17 -17
  71. package/dist/{opportunities → internal/opportunities}/radar/radar.graph.js +41 -161
  72. package/dist/{opportunities → internal/opportunities}/radar/radar.state.d.ts +4 -11
  73. package/dist/{shared → internal/shared}/agent/model-signal.d.ts +1 -1
  74. package/dist/{shared → internal/shared}/agent/model-signal.js +1 -1
  75. package/dist/{shared → internal/shared}/agent/model.config.d.ts +28 -86
  76. package/dist/{shared → internal/shared}/agent/model.config.js +58 -69
  77. package/dist/internal/shared/agent/model.resolver.d.ts +33 -0
  78. package/dist/{shared → internal/shared}/agent/model.resolver.js +18 -33
  79. package/dist/internal/shared/agent/scope.d.ts +20 -0
  80. package/dist/internal/shared/agent/scope.js +24 -0
  81. package/dist/internal/shared/assignment/network-assignment.policy.d.ts +23 -0
  82. package/dist/internal/shared/assignment/network-assignment.policy.js +28 -0
  83. package/dist/{shared → internal/shared}/observability/log.d.ts +3 -6
  84. package/dist/{shared → internal/shared}/observability/log.js +9 -18
  85. package/dist/{shared → internal/shared}/observability/protocol.logger.d.ts +1 -1
  86. package/dist/{shared → internal/shared}/observability/protocol.logger.js +1 -1
  87. package/dist/internal/shared/observability/request-context.d.ts +29 -0
  88. package/dist/internal/shared/observability/request-context.js +17 -0
  89. package/dist/{shared → internal/shared}/utils/social-label.d.ts +2 -2
  90. package/dist/{shared → internal/shared}/utils/social-label.js +1 -1
  91. package/dist/platform/database/capabilities.d.ts +59 -0
  92. package/dist/{shared/interfaces/database.entities.d.ts → platform/database/entities.d.ts} +81 -121
  93. package/dist/{shared/interfaces/database.identity-queries.d.ts → platform/database/identity-queries.d.ts} +55 -20
  94. package/dist/platform/database/member-queries.d.ts +55 -0
  95. package/dist/platform/database/member-queries.js +4 -0
  96. package/dist/platform/database/negotiation.d.ts +38 -0
  97. package/dist/{shared/interfaces/database.network-queries.d.ts → platform/database/network-queries.d.ts} +66 -67
  98. package/dist/platform/database/network-queries.js +4 -0
  99. package/dist/{shared/interfaces/database.opportunity-queries.d.ts → platform/database/opportunity-queries.d.ts} +25 -109
  100. package/dist/{shared/interfaces/database.port.d.ts → platform/database/port.d.ts} +52 -117
  101. package/dist/{shared/interfaces/database.port.js → platform/database/port.js} +3 -5
  102. package/dist/platform/database.d.ts +23 -0
  103. package/dist/{shared/interfaces/database.interface.js → platform/database.js} +1 -1
  104. package/dist/{shared/interfaces/cache.interface.d.ts → platform/discovery/cache.d.ts} +2 -4
  105. package/dist/{shared/interfaces/cache.interface.js → platform/discovery/cache.js} +1 -1
  106. package/dist/platform/discovery/embedder.d.ts +31 -0
  107. package/dist/platform/runtime/errors.d.ts +6 -0
  108. package/dist/platform/runtime/errors.js +9 -0
  109. package/dist/platform/runtime/follow-up.d.ts +36 -0
  110. package/dist/platform/runtime/follow-up.js +4 -0
  111. package/dist/platform/runtime/observability.d.ts +34 -0
  112. package/dist/protocol/core.d.ts +11 -0
  113. package/dist/protocol/discovery.rules.d.ts +21 -0
  114. package/dist/protocol/discovery.rules.js +29 -0
  115. package/dist/protocol/negotiation.constants.d.ts +3 -0
  116. package/dist/protocol/negotiation.constants.js +3 -0
  117. package/dist/protocol/negotiation.rules.d.ts +73 -0
  118. package/dist/protocol/negotiation.rules.js +68 -0
  119. package/dist/protocol/protocol.prompt.d.ts +13 -0
  120. package/dist/protocol/protocol.prompt.js +190 -0
  121. package/dist/{shared → protocol}/schemas/discovery-question.schema.d.ts +13 -13
  122. package/dist/{shared → protocol}/schemas/discovery-question.schema.js +2 -2
  123. package/dist/{shared → protocol}/schemas/identity.schema.d.ts +4 -4
  124. package/dist/{shared → protocol}/schemas/identity.schema.js +4 -4
  125. package/dist/{shared → protocol}/schemas/network-assignment.schema.d.ts +11 -20
  126. package/dist/{shared → protocol}/schemas/network-assignment.schema.js +2 -9
  127. package/dist/protocol/schemas/underspecification.schema.d.ts +9 -0
  128. package/dist/protocol/schemas/underspecification.schema.js +12 -0
  129. package/package.json +7 -15
  130. package/dist/agents/agent.dispatcher.port.d.ts +0 -25
  131. package/dist/agents/agent.module.d.ts +0 -19
  132. package/dist/agents/agent.module.js +0 -11
  133. package/dist/agents/agent.repository.port.d.ts +0 -118
  134. package/dist/agents/agent.repository.port.js +0 -10
  135. package/dist/agents/agent.tools.d.ts +0 -16
  136. package/dist/agents/agent.tools.js +0 -351
  137. package/dist/agents/agent.tools.port.d.ts +0 -22
  138. package/dist/agents/agent.tools.port.js +0 -18
  139. package/dist/agents/agent.types.d.ts +0 -76
  140. package/dist/chat/chat-streaming.types.d.ts +0 -618
  141. package/dist/chat/chat-streaming.types.js +0 -297
  142. package/dist/chat/chat.agent.d.ts +0 -292
  143. package/dist/chat/chat.agent.js +0 -1010
  144. package/dist/chat/chat.graph.d.ts +0 -424
  145. package/dist/chat/chat.graph.js +0 -257
  146. package/dist/chat/chat.interrupt.classifier.d.ts +0 -25
  147. package/dist/chat/chat.interrupt.classifier.js +0 -64
  148. package/dist/chat/chat.persona.d.ts +0 -39
  149. package/dist/chat/chat.prompt.d.ts +0 -4
  150. package/dist/chat/chat.prompt.js +0 -12
  151. package/dist/chat/chat.prompt.modules.d.ts +0 -30
  152. package/dist/chat/chat.prompt.modules.js +0 -40
  153. package/dist/chat/chat.question-dedup.d.ts +0 -14
  154. package/dist/chat/chat.question-dedup.js +0 -17
  155. package/dist/chat/chat.state.d.ts +0 -135
  156. package/dist/chat/chat.state.js +0 -120
  157. package/dist/chat/chat.streamer.d.ts +0 -64
  158. package/dist/chat/chat.streamer.js +0 -217
  159. package/dist/chat/chat.suggester.d.ts +0 -23
  160. package/dist/chat/chat.suggester.js +0 -95
  161. package/dist/chat/chat.summarizer.d.ts +0 -20
  162. package/dist/chat/chat.summarizer.js +0 -97
  163. package/dist/chat/chat.title.generator.d.ts +0 -19
  164. package/dist/chat/chat.title.generator.js +0 -66
  165. package/dist/chat/chat.tools.d.ts +0 -5
  166. package/dist/chat/chat.tools.js +0 -62
  167. package/dist/chat/chat.utils.d.ts +0 -41
  168. package/dist/chat/chat.utils.js +0 -88
  169. package/dist/chat/negotiator.persona.d.ts +0 -74
  170. package/dist/chat/negotiator.persona.js +0 -154
  171. package/dist/chat/negotiator.prompt.d.ts +0 -45
  172. package/dist/chat/negotiator.prompt.js +0 -160
  173. package/dist/chat/negotiator.tools.d.ts +0 -42
  174. package/dist/chat/negotiator.tools.js +0 -134
  175. package/dist/chat/onboarding.persona.d.ts +0 -28
  176. package/dist/chat/onboarding.persona.js +0 -86
  177. package/dist/chat/onboarding.prompt.d.ts +0 -6
  178. package/dist/chat/onboarding.prompt.js +0 -63
  179. package/dist/chat/signal.persona.d.ts +0 -47
  180. package/dist/chat/signal.persona.js +0 -319
  181. package/dist/chat/signal.prompt.d.ts +0 -39
  182. package/dist/chat/signal.prompt.js +0 -136
  183. package/dist/contacts/contact.module.d.ts +0 -8
  184. package/dist/contacts/contact.module.js +0 -6
  185. package/dist/contacts/contact.repository.port.d.ts +0 -21
  186. package/dist/contacts/contact.repository.port.js +0 -12
  187. package/dist/contacts/contact.tools.d.ts +0 -17
  188. package/dist/contacts/contact.tools.js +0 -108
  189. package/dist/contacts/contact.tools.port.d.ts +0 -20
  190. package/dist/contacts/contact.tools.port.js +0 -16
  191. package/dist/contacts/contact.types.d.ts +0 -24
  192. package/dist/contacts/contact.types.js +0 -8
  193. package/dist/contexts/context.generator.d.ts +0 -95
  194. package/dist/contexts/context.generator.js +0 -127
  195. package/dist/contexts/context.module.d.ts +0 -13
  196. package/dist/contexts/context.module.js +0 -12
  197. package/dist/contexts/context.tools.port.d.ts +0 -9
  198. package/dist/discovery/hyde.documents.d.ts +0 -9
  199. package/dist/discovery/hyde.documents.js +0 -49
  200. package/dist/discovery/hyde.env.d.ts +0 -8
  201. package/dist/discovery/hyde.env.js +0 -9
  202. package/dist/discovery/hyde.frame.d.ts +0 -150
  203. package/dist/discovery/hyde.frame.js +0 -107
  204. package/dist/discovery/hyde.generator.d.ts +0 -38
  205. package/dist/discovery/hyde.generator.js +0 -103
  206. package/dist/discovery/hyde.graph.d.ts +0 -209
  207. package/dist/discovery/hyde.graph.js +0 -482
  208. package/dist/discovery/hyde.state.d.ts +0 -70
  209. package/dist/discovery/hyde.state.js +0 -85
  210. package/dist/discovery/hyde.strategies.d.ts +0 -17
  211. package/dist/discovery/hyde.strategies.js +0 -34
  212. package/dist/discovery/hyde.validator.d.ts +0 -78
  213. package/dist/discovery/hyde.validator.js +0 -48
  214. package/dist/discovery/index.d.ts +0 -26
  215. package/dist/discovery/index.js +0 -19
  216. package/dist/discovery/lens.inferrer.d.ts +0 -214
  217. package/dist/discovery/lens.inferrer.js +0 -152
  218. package/dist/enrichment/enrichment.generator.d.ts +0 -68
  219. package/dist/enrichment/enrichment.generator.js +0 -95
  220. package/dist/enrichment/enrichment.graph.d.ts +0 -544
  221. package/dist/enrichment/enrichment.graph.js +0 -695
  222. package/dist/enrichment/enrichment.state.d.ts +0 -141
  223. package/dist/enrichment/enrichment.state.js +0 -115
  224. package/dist/enrichment/enrichment.tools.context-read.d.ts +0 -10
  225. package/dist/enrichment/enrichment.tools.context-read.js +0 -353
  226. package/dist/enrichment/enrichment.tools.context-write.d.ts +0 -9
  227. package/dist/enrichment/enrichment.tools.context-write.js +0 -417
  228. package/dist/enrichment/enrichment.tools.d.ts +0 -13
  229. package/dist/enrichment/enrichment.tools.helpers.d.ts +0 -139
  230. package/dist/enrichment/enrichment.tools.helpers.js +0 -234
  231. package/dist/enrichment/enrichment.tools.js +0 -153
  232. package/dist/intents/graph/intent.graph.infer.d.ts +0 -44
  233. package/dist/intents/graph/intent.graph.infer.js +0 -97
  234. package/dist/intents/graph/intent.graph.js +0 -134
  235. package/dist/intents/graph/intent.graph.reconcile.js +0 -274
  236. package/dist/intents/graph/intent.graph.shared.d.ts +0 -68
  237. package/dist/intents/intake/intake.orchestrator.d.ts +0 -203
  238. package/dist/intents/intake/intake.orchestrator.js +0 -255
  239. package/dist/intents/intake/intake.pack.generator.d.ts +0 -57
  240. package/dist/intents/intake/intake.pack.generator.js +0 -90
  241. package/dist/intents/intent.clarifier.d.ts +0 -51
  242. package/dist/intents/intent.clarifier.js +0 -201
  243. package/dist/intents/intent.indexer.d.ts +0 -82
  244. package/dist/intents/intent.indexer.js +0 -170
  245. package/dist/intents/intent.module.js +0 -103
  246. package/dist/intents/intent.proposal.d.ts +0 -37
  247. package/dist/intents/intent.proposal.js +0 -14
  248. package/dist/intents/intent.reconciler.d.ts +0 -105
  249. package/dist/intents/intent.reconciler.js +0 -186
  250. package/dist/intents/intent.tools.d.ts +0 -27
  251. package/dist/intents/intent.tools.js +0 -808
  252. package/dist/maintenance/maintenance.graph.d.ts +0 -239
  253. package/dist/maintenance/maintenance.graph.js +0 -199
  254. package/dist/maintenance/maintenance.state.d.ts +0 -35
  255. package/dist/maintenance/maintenance.state.js +0 -55
  256. package/dist/mcp/elicitation.builder.d.ts +0 -53
  257. package/dist/mcp/elicitation.builder.js +0 -74
  258. package/dist/mcp/elicitation.dispatcher.d.ts +0 -36
  259. package/dist/mcp/elicitation.dispatcher.js +0 -86
  260. package/dist/mcp/mcp.authorization-policy.d.ts +0 -252
  261. package/dist/mcp/mcp.authorization-policy.js +0 -535
  262. package/dist/mcp/mcp.server.d.ts +0 -90
  263. package/dist/mcp/mcp.server.js +0 -631
  264. package/dist/negotiations/insight.generator.d.ts +0 -31
  265. package/dist/negotiations/insight.generator.js +0 -105
  266. package/dist/negotiations/negotiation.agent.d.ts +0 -130
  267. package/dist/negotiations/negotiation.agent.js +0 -396
  268. package/dist/negotiations/negotiation.answer-consumption.d.ts +0 -223
  269. package/dist/negotiations/negotiation.answer-consumption.js +0 -275
  270. package/dist/negotiations/negotiation.attribution.d.ts +0 -91
  271. package/dist/negotiations/negotiation.attribution.js +0 -109
  272. package/dist/negotiations/negotiation.candidates.d.ts +0 -83
  273. package/dist/negotiations/negotiation.candidates.js +0 -162
  274. package/dist/negotiations/negotiation.client-dm.d.ts +0 -50
  275. package/dist/negotiations/negotiation.client-dm.js +0 -66
  276. package/dist/negotiations/negotiation.consultation-policy.d.ts +0 -95
  277. package/dist/negotiations/negotiation.consultation-policy.js +0 -159
  278. package/dist/negotiations/negotiation.deadlock.contracts.d.ts +0 -10
  279. package/dist/negotiations/negotiation.deadlock.d.ts +0 -87
  280. package/dist/negotiations/negotiation.deadlock.js +0 -150
  281. package/dist/negotiations/negotiation.detail-reader.d.ts +0 -94
  282. package/dist/negotiations/negotiation.detail-reader.js +0 -91
  283. package/dist/negotiations/negotiation.expected-speaker.d.ts +0 -33
  284. package/dist/negotiations/negotiation.expected-speaker.js +0 -59
  285. package/dist/negotiations/negotiation.graph.d.ts +0 -694
  286. package/dist/negotiations/negotiation.graph.finalize.d.ts +0 -5
  287. package/dist/negotiations/negotiation.graph.finalize.js +0 -403
  288. package/dist/negotiations/negotiation.graph.init.d.ts +0 -54
  289. package/dist/negotiations/negotiation.graph.init.js +0 -256
  290. package/dist/negotiations/negotiation.graph.js +0 -94
  291. package/dist/negotiations/negotiation.graph.screen.d.ts +0 -23
  292. package/dist/negotiations/negotiation.graph.screen.js +0 -108
  293. package/dist/negotiations/negotiation.graph.shared.d.ts +0 -111
  294. package/dist/negotiations/negotiation.graph.shared.js +0 -168
  295. package/dist/negotiations/negotiation.graph.turn.d.ts +0 -134
  296. package/dist/negotiations/negotiation.graph.turn.js +0 -662
  297. package/dist/negotiations/negotiation.hermes-contract.d.ts +0 -31
  298. package/dist/negotiations/negotiation.hermes-contract.js +0 -72
  299. package/dist/negotiations/negotiation.intent-snapshot-provenance.d.ts +0 -21
  300. package/dist/negotiations/negotiation.intent-snapshot-provenance.js +0 -28
  301. package/dist/negotiations/negotiation.lifecycle-narration.d.ts +0 -18
  302. package/dist/negotiations/negotiation.lifecycle-narration.js +0 -87
  303. package/dist/negotiations/negotiation.memory.d.ts +0 -65
  304. package/dist/negotiations/negotiation.memory.js +0 -83
  305. package/dist/negotiations/negotiation.module.d.ts +0 -36
  306. package/dist/negotiations/negotiation.module.js +0 -23
  307. package/dist/negotiations/negotiation.protocol.d.ts +0 -1018
  308. package/dist/negotiations/negotiation.protocol.js +0 -224
  309. package/dist/negotiations/negotiation.question-safety.d.ts +0 -52
  310. package/dist/negotiations/negotiation.question-safety.js +0 -119
  311. package/dist/negotiations/negotiation.reflect.d.ts +0 -194
  312. package/dist/negotiations/negotiation.reflect.js +0 -145
  313. package/dist/negotiations/negotiation.scope.d.ts +0 -41
  314. package/dist/negotiations/negotiation.scope.js +0 -39
  315. package/dist/negotiations/negotiation.screen.contracts.d.ts +0 -88
  316. package/dist/negotiations/negotiation.screen.contracts.js +0 -58
  317. package/dist/negotiations/negotiation.screen.d.ts +0 -78
  318. package/dist/negotiations/negotiation.screen.js +0 -112
  319. package/dist/negotiations/negotiation.stall-gap.d.ts +0 -83
  320. package/dist/negotiations/negotiation.stall-gap.js +0 -152
  321. package/dist/negotiations/negotiation.stance.contracts.d.ts +0 -123
  322. package/dist/negotiations/negotiation.stance.contracts.js +0 -317
  323. package/dist/negotiations/negotiation.state.d.ts +0 -597
  324. package/dist/negotiations/negotiation.state.js +0 -286
  325. package/dist/negotiations/negotiation.summarizer.d.ts +0 -25
  326. package/dist/negotiations/negotiation.summarizer.js +0 -101
  327. package/dist/negotiations/negotiation.task-lock-policy.d.ts +0 -10
  328. package/dist/negotiations/negotiation.task-lock-policy.js +0 -22
  329. package/dist/negotiations/negotiation.tools.d.ts +0 -18
  330. package/dist/negotiations/negotiation.tools.js +0 -842
  331. package/dist/negotiations/negotiation.tools.port.d.ts +0 -17
  332. package/dist/negotiations/negotiation.turn-cap.d.ts +0 -9
  333. package/dist/negotiations/negotiation.turn-cap.js +0 -12
  334. package/dist/networks/indexer.state.js +0 -112
  335. package/dist/networks/network.tools.d.ts +0 -36
  336. package/dist/networks/network.tools.js +0 -594
  337. package/dist/opportunities/delivery-card.cache.d.ts +0 -25
  338. package/dist/opportunities/delivery-card.cache.js +0 -43
  339. package/dist/opportunities/discovery.env.d.ts +0 -20
  340. package/dist/opportunities/discovery.env.js +0 -109
  341. package/dist/opportunities/discriminator/discriminator.adjustments.d.ts +0 -90
  342. package/dist/opportunities/discriminator/discriminator.adjustments.js +0 -141
  343. package/dist/opportunities/discriminator/discriminator.assigner.d.ts +0 -78
  344. package/dist/opportunities/discriminator/discriminator.assigner.js +0 -153
  345. package/dist/opportunities/discriminator/discriminator.env.d.ts +0 -103
  346. package/dist/opportunities/discriminator/discriminator.env.js +0 -103
  347. package/dist/opportunities/discriminator/discriminator.miner.d.ts +0 -114
  348. package/dist/opportunities/discriminator/discriminator.miner.js +0 -228
  349. package/dist/opportunities/discriminator/discriminator.push.d.ts +0 -13
  350. package/dist/opportunities/discriminator/discriminator.push.js +0 -19
  351. package/dist/opportunities/discriminator/discriminator.question.d.ts +0 -58
  352. package/dist/opportunities/discriminator/discriminator.question.js +0 -155
  353. package/dist/opportunities/discriminator/discriminator.scorer.d.ts +0 -32
  354. package/dist/opportunities/discriminator/discriminator.scorer.js +0 -105
  355. package/dist/opportunities/discriminator/discriminator.shadow.d.ts +0 -32
  356. package/dist/opportunities/discriminator/discriminator.shadow.js +0 -90
  357. package/dist/opportunities/discriminator/discriminator.types.d.ts +0 -93
  358. package/dist/opportunities/discriminator/discriminator.types.js +0 -18
  359. package/dist/opportunities/negotiation-context.loader.d.ts +0 -59
  360. package/dist/opportunities/negotiation-context.loader.js +0 -90
  361. package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.d.ts +0 -43
  362. package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.js +0 -44
  363. package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.d.ts +0 -24
  364. package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.js +0 -188
  365. package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.d.ts +0 -26
  366. package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.js +0 -112
  367. package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.d.ts +0 -19
  368. package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.js +0 -61
  369. package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.d.ts +0 -191
  370. package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.js +0 -18
  371. package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.d.ts +0 -34
  372. package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.js +0 -91
  373. package/dist/opportunities/negotiation-summary.builder.d.ts +0 -37
  374. package/dist/opportunities/negotiation-summary.builder.js +0 -66
  375. package/dist/opportunities/opportunity.discovery-negotiation-summary.d.ts +0 -14
  376. package/dist/opportunities/opportunity.discovery-negotiation-summary.js +0 -46
  377. package/dist/opportunities/opportunity.enricher.d.ts +0 -71
  378. package/dist/opportunities/opportunity.enricher.js +0 -280
  379. package/dist/opportunities/opportunity.evaluator.d.ts +0 -289
  380. package/dist/opportunities/opportunity.evaluator.js +0 -516
  381. package/dist/opportunities/opportunity.evidence.d.ts +0 -22
  382. package/dist/opportunities/opportunity.evidence.js +0 -87
  383. package/dist/opportunities/opportunity.existing-negotiation.d.ts +0 -79
  384. package/dist/opportunities/opportunity.existing-negotiation.js +0 -118
  385. package/dist/opportunities/opportunity.feed-selection.js +0 -96
  386. package/dist/opportunities/opportunity.graph.d.ts +0 -1611
  387. package/dist/opportunities/opportunity.graph.discovery-strategies.d.ts +0 -109
  388. package/dist/opportunities/opportunity.graph.discovery-strategies.js +0 -451
  389. package/dist/opportunities/opportunity.graph.discovery.d.ts +0 -69
  390. package/dist/opportunities/opportunity.graph.discovery.js +0 -397
  391. package/dist/opportunities/opportunity.graph.evaluation.d.ts +0 -82
  392. package/dist/opportunities/opportunity.graph.evaluation.js +0 -608
  393. package/dist/opportunities/opportunity.graph.js +0 -193
  394. package/dist/opportunities/opportunity.graph.modes.d.ts +0 -538
  395. package/dist/opportunities/opportunity.graph.modes.js +0 -538
  396. package/dist/opportunities/opportunity.graph.negotiate.d.ts +0 -109
  397. package/dist/opportunities/opportunity.graph.negotiate.js +0 -392
  398. package/dist/opportunities/opportunity.graph.persist-node.d.ts +0 -93
  399. package/dist/opportunities/opportunity.graph.persist-node.js +0 -765
  400. package/dist/opportunities/opportunity.graph.prep.d.ts +0 -150
  401. package/dist/opportunities/opportunity.graph.prep.js +0 -381
  402. package/dist/opportunities/opportunity.graph.shared.d.ts +0 -173
  403. package/dist/opportunities/opportunity.graph.shared.js +0 -199
  404. package/dist/opportunities/opportunity.introducer-feature.d.ts +0 -2
  405. package/dist/opportunities/opportunity.introducer-feature.js +0 -4
  406. package/dist/opportunities/opportunity.introducer.d.ts +0 -77
  407. package/dist/opportunities/opportunity.introducer.js +0 -99
  408. package/dist/opportunities/opportunity.labels.js +0 -10
  409. package/dist/opportunities/opportunity.lifecycle.d.ts +0 -63
  410. package/dist/opportunities/opportunity.lifecycle.js +0 -181
  411. package/dist/opportunities/opportunity.module.d.ts +0 -54
  412. package/dist/opportunities/opportunity.module.js +0 -39
  413. package/dist/opportunities/opportunity.newborn-stamping.d.ts +0 -41
  414. package/dist/opportunities/opportunity.newborn-stamping.js +0 -81
  415. package/dist/opportunities/opportunity.owner-approval.d.ts +0 -118
  416. package/dist/opportunities/opportunity.owner-approval.js +0 -34
  417. package/dist/opportunities/opportunity.owner-provenance.d.ts +0 -6
  418. package/dist/opportunities/opportunity.owner-provenance.js +0 -28
  419. package/dist/opportunities/opportunity.persist.d.ts +0 -58
  420. package/dist/opportunities/opportunity.persist.js +0 -145
  421. package/dist/opportunities/opportunity.persistence-admission.d.ts +0 -39
  422. package/dist/opportunities/opportunity.persistence-admission.js +0 -59
  423. package/dist/opportunities/opportunity.state.d.ts +0 -451
  424. package/dist/opportunities/opportunity.state.js +0 -256
  425. package/dist/opportunities/opportunity.tools.cards.d.ts +0 -138
  426. package/dist/opportunities/opportunity.tools.cards.js +0 -212
  427. package/dist/opportunities/opportunity.tools.d.ts +0 -12
  428. package/dist/opportunities/opportunity.tools.js +0 -236
  429. package/dist/opportunities/opportunity.tools.list.d.ts +0 -10
  430. package/dist/opportunities/opportunity.tools.list.js +0 -489
  431. package/dist/opportunities/opportunity.tools.port.d.ts +0 -16
  432. package/dist/opportunities/opportunity.utils.d.ts +0 -217
  433. package/dist/opportunities/opportunity.utils.js +0 -395
  434. package/dist/opportunities/outcome/outcome.env.d.ts +0 -60
  435. package/dist/opportunities/outcome/outcome.env.js +0 -63
  436. package/dist/opportunities/outcome/outcome.hypotheses.d.ts +0 -29
  437. package/dist/opportunities/outcome/outcome.hypotheses.js +0 -117
  438. package/dist/opportunities/outcome/outcome.shadow.d.ts +0 -56
  439. package/dist/opportunities/outcome/outcome.shadow.js +0 -87
  440. package/dist/opportunities/outcome/outcome.types.d.ts +0 -110
  441. package/dist/opportunities/outcome/outcome.types.js +0 -26
  442. package/dist/opportunities/radar/radar.health.d.ts +0 -31
  443. package/dist/opportunities/radar/radar.health.js +0 -75
  444. package/dist/premises/premise.analyzer.d.ts +0 -35
  445. package/dist/premises/premise.analyzer.js +0 -115
  446. package/dist/premises/premise.decomposer.d.ts +0 -69
  447. package/dist/premises/premise.decomposer.js +0 -213
  448. package/dist/premises/premise.graph.d.ts +0 -345
  449. package/dist/premises/premise.graph.js +0 -278
  450. package/dist/premises/premise.indexer.d.ts +0 -35
  451. package/dist/premises/premise.indexer.js +0 -86
  452. package/dist/premises/premise.state.d.ts +0 -67
  453. package/dist/premises/premise.state.js +0 -94
  454. package/dist/premises/premise.tools.d.ts +0 -3
  455. package/dist/premises/premise.tools.js +0 -248
  456. package/dist/questions/question.env.d.ts +0 -27
  457. package/dist/questions/question.env.js +0 -27
  458. package/dist/questions/question.input.d.ts +0 -107
  459. package/dist/questions/question.module.d.ts +0 -30
  460. package/dist/questions/question.module.js +0 -28
  461. package/dist/questions/question.schema.d.ts +0 -1529
  462. package/dist/questions/question.schema.js +0 -420
  463. package/dist/shared/agent/activity-projection.d.ts +0 -271
  464. package/dist/shared/agent/activity-projection.js +0 -254
  465. package/dist/shared/agent/canonical-guidance.d.ts +0 -30
  466. package/dist/shared/agent/canonical-guidance.js +0 -246
  467. package/dist/shared/agent/model.resolver.d.ts +0 -48
  468. package/dist/shared/agent/tool.factory.d.ts +0 -17
  469. package/dist/shared/agent/tool.factory.js +0 -221
  470. package/dist/shared/agent/tool.helpers.d.ts +0 -482
  471. package/dist/shared/agent/tool.helpers.js +0 -232
  472. package/dist/shared/agent/tool.registry.d.ts +0 -25
  473. package/dist/shared/agent/tool.registry.js +0 -76
  474. package/dist/shared/agent/tool.runtime.d.ts +0 -28
  475. package/dist/shared/agent/tool.runtime.js +0 -194
  476. package/dist/shared/agent/tool.scope.d.ts +0 -44
  477. package/dist/shared/agent/tool.scope.js +0 -50
  478. package/dist/shared/agent/utility.tools.d.ts +0 -15
  479. package/dist/shared/agent/utility.tools.js +0 -322
  480. package/dist/shared/assignment/network-assignment.policy.d.ts +0 -61
  481. package/dist/shared/assignment/network-assignment.policy.js +0 -105
  482. package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +0 -100
  483. package/dist/shared/interfaces/agent-dispatcher.interface.js +0 -12
  484. package/dist/shared/interfaces/auth.interface.d.ts +0 -37
  485. package/dist/shared/interfaces/auth.interface.js +0 -1
  486. package/dist/shared/interfaces/chat-message-writer.interface.d.ts +0 -18
  487. package/dist/shared/interfaces/chat-message-writer.interface.js +0 -1
  488. package/dist/shared/interfaces/chat-session.interface.d.ts +0 -23
  489. package/dist/shared/interfaces/chat-session.interface.js +0 -18
  490. package/dist/shared/interfaces/chat-summary.interface.d.ts +0 -16
  491. package/dist/shared/interfaces/chat-summary.interface.js +0 -1
  492. package/dist/shared/interfaces/database.capabilities.d.ts +0 -100
  493. package/dist/shared/interfaces/database.interface.d.ts +0 -16
  494. package/dist/shared/interfaces/database.member-queries.d.ts +0 -219
  495. package/dist/shared/interfaces/database.member-queries.js +0 -4
  496. package/dist/shared/interfaces/database.negotiation.d.ts +0 -329
  497. package/dist/shared/interfaces/database.negotiation.js +0 -26
  498. package/dist/shared/interfaces/database.network-queries.js +0 -4
  499. package/dist/shared/interfaces/database.opportunity-queries.js +0 -4
  500. package/dist/shared/interfaces/delivery-ledger.interface.d.ts +0 -40
  501. package/dist/shared/interfaces/delivery-ledger.interface.js +0 -5
  502. package/dist/shared/interfaces/embedder.interface.d.ts +0 -92
  503. package/dist/shared/interfaces/embedder.interface.js +0 -4
  504. package/dist/shared/interfaces/enrichment-run.interface.d.ts +0 -62
  505. package/dist/shared/interfaces/enrichment-run.interface.js +0 -1
  506. package/dist/shared/interfaces/enrichment.interface.js +0 -1
  507. package/dist/shared/interfaces/negotiation-events.interface.d.ts +0 -77
  508. package/dist/shared/interfaces/negotiation-events.interface.js +0 -6
  509. package/dist/shared/interfaces/negotiation-summary.interface.d.ts +0 -25
  510. package/dist/shared/interfaces/negotiation-summary.interface.js +0 -1
  511. package/dist/shared/interfaces/negotiator-memory.interface.d.ts +0 -58
  512. package/dist/shared/interfaces/negotiator-memory.interface.js +0 -11
  513. package/dist/shared/interfaces/queue.interface.d.ts +0 -23
  514. package/dist/shared/interfaces/queue.interface.js +0 -4
  515. package/dist/shared/interfaces/scraper.interface.js +0 -1
  516. package/dist/shared/interfaces/tool-request-context.interface.d.ts +0 -11
  517. package/dist/shared/interfaces/tool-request-context.interface.js +0 -1
  518. package/dist/shared/observability/request-context.d.ts +0 -27
  519. package/dist/shared/observability/request-context.js +0 -6
  520. package/dist/shared/schemas/mcp-auth.schema.d.ts +0 -87
  521. package/dist/shared/schemas/mcp-auth.schema.js +0 -56
  522. package/dist/shared/schemas/negotiation-digest.schema.d.ts +0 -58
  523. package/dist/shared/schemas/negotiation-digest.schema.js +0 -38
  524. package/dist/shared/schemas/negotiation-state.schema.d.ts +0 -343
  525. package/dist/shared/schemas/negotiation-state.schema.js +0 -81
  526. package/dist/shared/schemas/question-block.fixture.d.ts +0 -12
  527. package/dist/shared/schemas/question-block.fixture.js +0 -39
  528. package/dist/shared/schemas/question-block.schema.d.ts +0 -111
  529. package/dist/shared/schemas/question-block.schema.js +0 -124
  530. package/dist/shared/schemas/structured-question.schema.d.ts +0 -66
  531. package/dist/shared/schemas/structured-question.schema.js +0 -31
  532. package/dist/shared/schemas/underspecification.schema.d.ts +0 -13
  533. package/dist/shared/schemas/underspecification.schema.js +0 -16
  534. /package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.js +0 -0
  535. /package/dist/{opportunities → internal/opportunities}/radar/radar.state.js +0 -0
  536. /package/dist/{shared → internal/shared}/network/metadata.renderer.d.ts +0 -0
  537. /package/dist/{shared → internal/shared}/network/metadata.renderer.js +0 -0
  538. /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.d.ts +0 -0
  539. /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.js +0 -0
  540. /package/dist/{shared → internal/shared}/observability/performance.d.ts +0 -0
  541. /package/dist/{shared → internal/shared}/observability/performance.js +0 -0
  542. /package/dist/{shared → internal/shared}/observability/trace.d.ts +0 -0
  543. /package/dist/{shared → internal/shared}/observability/trace.js +0 -0
  544. /package/dist/{shared → internal/shared}/utils/claim-safety.d.ts +0 -0
  545. /package/dist/{shared → internal/shared}/utils/claim-safety.js +0 -0
  546. /package/dist/{shared → internal/shared}/utils/telegram-handle.d.ts +0 -0
  547. /package/dist/{shared → internal/shared}/utils/telegram-handle.js +0 -0
  548. /package/dist/{shared/interfaces/database.capabilities.js → platform/database/capabilities.js} +0 -0
  549. /package/dist/{shared/interfaces/database.entities.js → platform/database/entities.js} +0 -0
  550. /package/dist/{shared/interfaces/database.identity-queries.js → platform/database/identity-queries.js} +0 -0
  551. /package/dist/{agents/agent.dispatcher.port.js → platform/database/negotiation.js} +0 -0
  552. /package/dist/{chat/chat.persona.js → platform/database/opportunity-queries.js} +0 -0
  553. /package/dist/{contexts/context.tools.port.js → platform/discovery/embedder.js} +0 -0
  554. /package/dist/{shared/interfaces/scraper.interface.d.ts → platform/discovery/scraper.d.ts} +0 -0
  555. /package/dist/{negotiations/negotiation.deadlock.contracts.js → platform/discovery/scraper.js} +0 -0
  556. /package/dist/{shared/interfaces/enrichment.interface.d.ts → platform/enrichment/ports.d.ts} +0 -0
  557. /package/dist/{negotiations/negotiation.tools.port.js → platform/enrichment/ports.js} +0 -0
  558. /package/dist/{opportunities/opportunity.tools.port.js → platform/runtime/observability.js} +0 -0
  559. /package/dist/{questions/question.input.js → protocol/core.js} +0 -0
  560. /package/dist/{shared → protocol}/schemas/chat-context.schema.d.ts +0 -0
  561. /package/dist/{shared → protocol}/schemas/chat-context.schema.js +0 -0
@@ -1,594 +0,0 @@
1
- import { z } from "zod";
2
- import { requestContext } from "../shared/observability/request-context.js";
3
- import { log } from "../shared/observability/log.js";
4
- import { renderNetworkContext } from "../shared/network/metadata.renderer.js";
5
- import { success, error, UUID_REGEX } from "../shared/agent/tool.helpers.js";
6
- import { focusedNetworkId } from "../shared/agent/tool.scope.js";
7
- import { NetworkRecommender } from "./network.recommender.js";
8
- /**
9
- * Resolves the community this caller is hard-bound to, if any.
10
- *
11
- * A user-driven network-scoped chat carries `context.networkId`; a network-scoped
12
- * agent (personal/external API key bound to one community over MCP) instead
13
- * carries the focused scope envelope (`scopeType='network'`, `scopeId`) applied
14
- * at the MCP boundary, with `networkId` left unset. Both must clamp community
15
- * and roster reads/writes to the exact bound community BEFORE any graph/adapter
16
- * work — not only via the scoped-deps data clamp — so a foreign community is
17
- * denied with a stable message and never read or mutated (IND-591).
18
- */
19
- function boundCommunityId(context) {
20
- return focusedNetworkId(context) ?? context.networkId;
21
- }
22
- // Lazy singleton — only instantiated on first onboarding ranking call so that
23
- // importing this module does not require OPENROUTER_API_KEY at load time.
24
- let recommender;
25
- const logger = log.protocol.from("ChatTools:Network");
26
- /**
27
- * Creates all community (network) lifecycle and membership tools.
28
- *
29
- * ## Exposed tools
30
- *
31
- * Foreground (participant-directed):
32
- * - `read_networks` — list joined networks, owned networks, and public networks.
33
- * - `read_network_memberships` — query membership: list members, check membership, or
34
- * list the user's memberships.
35
- * - `create_network` — create a new network; caller becomes owner.
36
- * - `update_network` — update settings (title, prompt, imageUrl, joinPolicy); owner-only.
37
- * - `delete_network` — soft-delete (owner-only; network must have no other members).
38
- * - `create_network_membership` — add a member (self-join or owner-invite).
39
- * - `delete_network_membership` — remove a member (owner-only).
40
- *
41
- * Automatic assignment of intents to networks is handled by IntentNetworkGraphFactory
42
- * (ambient) — these foreground tools only manage network and membership lifecycle.
43
- *
44
- * ## Scope enforcement
45
- *
46
- * In network-scoped chats, all tools validate that the requested networkId matches
47
- * the scoped network. Cross-scope mutations are rejected with a clear error.
48
- *
49
- * ## Onboarding ranking
50
- *
51
- * `read_networks` includes an onboarding-only `orderedNetworkIds` list when
52
- * `context.isOnboarding` is true and public networks are available. Ranking is
53
- * performed by `NetworkRecommender` (ambient LLM agent) or a `deps.networkRanker`
54
- * override, with graceful degradation if ranking fails.
55
- */
56
- export function createNetworkTools(defineTool, deps) {
57
- const { graphs, userDb, systemDb } = deps;
58
- const enrichWithContext = (networks) => networks.map((n) => ({
59
- ...n,
60
- renderedContext: renderNetworkContext({
61
- title: n.title ?? '',
62
- prompt: n.prompt,
63
- }),
64
- }));
65
- const readIndexes = defineTool({
66
- name: "read_networks",
67
- description: "Lists the authenticated user's networks (communities), including ones they own and public communities they can join.\n\n" +
68
- "**When to use:** To find network IDs for scoping other operations (read_intents, list_opportunities, read_network_memberships), " +
69
- "or to show the user which communities they belong to.\n\n" +
70
- "**Returns:** Up to three lists — `memberOf` (networks the user joined), `owns` (networks the user created), and `publicNetworks` " +
71
- "(publicly joinable communities the user is not yet a member of). Entries in `memberOf` include `isPersonal` set to `true` for the user's " +
72
- "personal network.\n\n" +
73
- "**Note:** In network-scoped chats, only the scoped network is returned. During onboarding, `orderedNetworkIds` " +
74
- "may be returned alongside `publicNetworks` \u2014 a ranked array of network IDs ordered by relevance to the user's profile (omitted when ranking is unavailable or fails).",
75
- querySchema: z.object({
76
- userId: z.string().optional().describe("Must be the current user's ID or omitted. Cannot list another user's networks."),
77
- }),
78
- handler: async ({ context, query }) => {
79
- if (query.userId && query.userId.trim() !== context.userId) {
80
- return error("You can only list your own networks. Omit userId to see the current user's networks.");
81
- }
82
- const boundNetworkId = boundCommunityId(context);
83
- const _readGraphStart = Date.now();
84
- const _readTraceEmitter = requestContext.getStore()?.traceEmitter;
85
- _readTraceEmitter?.({ type: "graph_start", name: "index" });
86
- const result = await graphs.index.invoke({
87
- userId: context.userId,
88
- networkId: boundNetworkId || undefined,
89
- operationMode: 'read',
90
- showAll: false, // Never allow bypass — strict scope enforcement
91
- });
92
- const _readGraphMs = Date.now() - _readGraphStart;
93
- _readTraceEmitter?.({ type: "graph_end", name: "index", durationMs: _readGraphMs });
94
- if (result.error) {
95
- return error(result.error);
96
- }
97
- if (result.readResult) {
98
- const rr = result.readResult;
99
- const enriched = {
100
- ...rr,
101
- ...(Array.isArray(rr.memberOf) ? { memberOf: enrichWithContext(rr.memberOf) } : {}),
102
- ...(Array.isArray(rr.owns) ? { owns: enrichWithContext(rr.owns) } : {}),
103
- ...(Array.isArray(rr.publicNetworks) ? { publicNetworks: enrichWithContext(rr.publicNetworks) } : {}),
104
- };
105
- // When scoped, add clear metadata so model knows results are limited
106
- if (boundNetworkId) {
107
- return success({
108
- ...enriched,
109
- scopeRestriction: {
110
- isScoped: true,
111
- scopedToNetwork: context.indexName ?? boundNetworkId,
112
- message: `Results are limited to "${context.indexName ?? 'this network'}" because this chat is scoped to that community. The user may belong to other communities not shown here.`,
113
- },
114
- _graphTimings: [{ name: 'index', durationMs: _readGraphMs, agents: result.agentTimings ?? [] }],
115
- });
116
- }
117
- // Onboarding-only: rank public networks by relevance to the user's global
118
- // user_context paragraph. Guard: only when isOnboarding, not scoped, there
119
- // are public networks to rank, and a user_context is available.
120
- let orderedNetworkIds;
121
- const userContext = deps.getUserContextText ? await deps.getUserContextText(context.userId) : "";
122
- if (context.isOnboarding &&
123
- userContext &&
124
- Array.isArray(enriched.publicNetworks) &&
125
- enriched.publicNetworks.length > 0) {
126
- // Cap at 50 to bound LLM context window usage.
127
- const publicNetworksForRanking = enriched.publicNetworks
128
- .slice(0, 50)
129
- .map((n) => ({
130
- networkId: n.networkId,
131
- renderedContext: n.renderedContext ?? `## ${n.title}`,
132
- }));
133
- const rankFn = deps.networkRanker ?? (async (input) => {
134
- try {
135
- recommender ?? (recommender = new NetworkRecommender());
136
- return await recommender.invoke(input);
137
- }
138
- catch (err) {
139
- logger.warn("read_networks: NetworkRecommender unavailable, skipping ranking", { error: err });
140
- return null;
141
- }
142
- });
143
- const rankingResult = await rankFn({
144
- userContext,
145
- networks: publicNetworksForRanking,
146
- }).catch((err) => {
147
- logger.warn("read_networks: networkRanker threw, skipping ranking", { error: err });
148
- deps.reportToolError?.(err, { operation: "network-ranking", toolName: "read_networks", userId: context.userId });
149
- return null;
150
- });
151
- if (rankingResult) {
152
- // Normalize LLM output against the ranked slice (top 50): keep only IDs
153
- // from the input set, de-dupe preserving order, then append any omitted IDs.
154
- const inputIds = publicNetworksForRanking.map((n) => n.networkId);
155
- const inputIdSet = new Set(inputIds);
156
- const seen = new Set();
157
- const normalized = [];
158
- for (const id of rankingResult.rankedNetworkIds) {
159
- if (inputIdSet.has(id) && !seen.has(id)) {
160
- normalized.push(id);
161
- seen.add(id);
162
- }
163
- }
164
- for (const id of inputIds) {
165
- if (!seen.has(id))
166
- normalized.push(id);
167
- }
168
- orderedNetworkIds = normalized;
169
- }
170
- }
171
- return success({
172
- ...enriched,
173
- ...(orderedNetworkIds !== undefined ? { orderedNetworkIds } : {}),
174
- _graphTimings: [{ name: 'index', durationMs: _readGraphMs, agents: result.agentTimings ?? [] }],
175
- });
176
- }
177
- return error("Failed to fetch network information.");
178
- },
179
- });
180
- const readIndexMemberships = defineTool({
181
- name: "read_network_memberships",
182
- description: "Reads network membership information — who is in which community. Essential for understanding the social graph before " +
183
- "creating introductions or exploring intents.\n\n" +
184
- "**Usage modes:**\n" +
185
- "- With `networkId` only: lists ALL members of that network — returns userId, name, avatar, permissions (owner/member), intentCount, and joinedAt. " +
186
- "Use this to see who's in a community before browsing their intents or creating introductions.\n" +
187
- "- With `userId` only (or omit for self): lists all networks that user belongs to — returns networkId, networkTitle, permissions, joinedAt.\n" +
188
- "- With both `networkId` and `userId`: checks whether that specific user is a member of that specific network (returns isMember boolean).\n\n" +
189
- "**When to use:** Before creating introductions (need to verify shared network membership), to explore community members, " +
190
- "or to check if a user belongs to a specific network.\n\n" +
191
- "**Returns:** Member list with user details, or membership list with network details, or a membership check result.\n\n" +
192
- "**Personal network semantics.** The personal network (`isPersonal: true` on the membership) is the user's " +
193
- "contact list — members of that network are the user's contacts. For another user, this tool only reveals the " +
194
- "networks you already share with them.\n\n" +
195
- "**Shared-context pattern.** To find overlap with another user: (1) omit `userId` to read your own " +
196
- "memberships, (2) call this tool with the other person's actual `userId` to get the shared networks, " +
197
- "(3) call read_intents for each shared network to see what each is looking for there, (4) call " +
198
- "read_user_contexts for the other party. That sequence gives you enough to decide whether to propose a " +
199
- "direct connection or an introduction.",
200
- querySchema: z.object({
201
- networkId: z.string().optional().describe("Network UUID — lists all members of this network. Get from read_networks. In network-scoped chats, only the scoped network can be queried."),
202
- userId: z.string().optional().describe("User ID — lists that user's network memberships. Omit to get the current user's memberships. When combined with networkId, checks if this user is in that specific network."),
203
- }),
204
- handler: async ({ context, query }) => {
205
- const networkId = query.networkId?.trim() || undefined;
206
- const userId = query.userId?.trim() || undefined;
207
- const boundNetworkId = boundCommunityId(context);
208
- if (networkId && !UUID_REGEX.test(networkId)) {
209
- return error("Invalid network ID format. Use the exact UUID from read_networks.");
210
- }
211
- // Mode 1: list members of a network
212
- if (networkId && !userId) {
213
- // Enforce strict scope: when chat is network-scoped, only allow querying that network
214
- if (boundNetworkId && networkId !== boundNetworkId) {
215
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only query members of this network.`);
216
- }
217
- const _readMembersStart = Date.now();
218
- const _readMembersTraceEmitter = requestContext.getStore()?.traceEmitter;
219
- _readMembersTraceEmitter?.({ type: "graph_start", name: "network_membership" });
220
- const result = await graphs.networkMembership.invoke({
221
- userId: context.userId,
222
- networkId,
223
- operationMode: 'read',
224
- });
225
- const _readMembersMs = Date.now() - _readMembersStart;
226
- _readMembersTraceEmitter?.({ type: "graph_end", name: "network_membership", durationMs: _readMembersMs });
227
- if (result.error) {
228
- return error(result.error);
229
- }
230
- if (result.readResult) {
231
- return success({ ...result.readResult, _graphTimings: [{ name: 'network_membership', durationMs: _readMembersMs, agents: result.agentTimings ?? [] }] });
232
- }
233
- return error("Failed to fetch network members.");
234
- }
235
- // Mode 2: list a user's memberships (networks they belong to)
236
- const targetUserId = userId || context.userId;
237
- let memberships;
238
- if (targetUserId !== context.userId) {
239
- // Cross-user access: validate shared membership scope
240
- const callerMemberships = await userDb.getNetworkMemberships();
241
- if (networkId) {
242
- if (boundNetworkId && networkId !== boundNetworkId) {
243
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only query membership in this community.`);
244
- }
245
- const callerInNetwork = callerMemberships.some((m) => m.networkId === networkId);
246
- if (!callerInNetwork) {
247
- return error("Unauthorized: you can only view another user's membership in a network you belong to. Provide your own userId or omit userId for your memberships.");
248
- }
249
- const isMember = await systemDb.isNetworkMember(networkId, targetUserId);
250
- if (isMember) {
251
- return success({ isMember: true, userId: targetUserId, networkId });
252
- }
253
- return success({ isMember: false, userId: targetUserId, networkId, message: "User is not a member of this network." });
254
- }
255
- else {
256
- // Strict scope enforcement: when chat is network-scoped, only check the scoped network
257
- if (boundNetworkId) {
258
- const isMember = await systemDb.isNetworkMember(boundNetworkId, targetUserId);
259
- if (isMember) {
260
- return success({
261
- isMember: true,
262
- userId: targetUserId,
263
- networkId: boundNetworkId,
264
- scopeRestriction: {
265
- isScoped: true,
266
- scopedToNetwork: context.indexName ?? boundNetworkId,
267
- message: `This chat is scoped to "${context.indexName ?? 'this network'}". Only membership in this community is shown.`,
268
- },
269
- });
270
- }
271
- return success({
272
- isMember: false,
273
- userId: targetUserId,
274
- networkId: boundNetworkId,
275
- message: "User is not a member of this community.",
276
- scopeRestriction: {
277
- isScoped: true,
278
- scopedToNetwork: context.indexName ?? boundNetworkId,
279
- message: `This chat is scoped to "${context.indexName ?? 'this network'}". Only membership in this community was checked.`,
280
- },
281
- });
282
- }
283
- // Unscoped chat: show overlap with shared networks (effective-scope intersection)
284
- const sharedNetworks = [];
285
- for (const m of callerMemberships) {
286
- if (await systemDb.isNetworkMember(m.networkId, targetUserId)) {
287
- sharedNetworks.push(m);
288
- }
289
- }
290
- if (sharedNetworks.length === 0) {
291
- return error("Unauthorized: you can only view another user's memberships if you share at least one network, or request your own memberships.");
292
- }
293
- return success({
294
- userId: targetUserId,
295
- count: sharedNetworks.length,
296
- memberships: sharedNetworks.map((m) => ({
297
- networkId: m.networkId,
298
- networkTitle: m.networkTitle,
299
- })),
300
- note: "Only showing shared networks.",
301
- });
302
- }
303
- }
304
- else {
305
- // Own memberships — use userDb
306
- memberships = await userDb.getNetworkMemberships();
307
- // Strict scope: when chat is network-scoped, only return the scoped network membership
308
- if (boundNetworkId && !networkId) {
309
- memberships = memberships.filter((m) => m.networkId === boundNetworkId);
310
- }
311
- }
312
- // If both networkId and userId: filter to that specific membership
313
- if (networkId) {
314
- if (boundNetworkId && networkId !== boundNetworkId) {
315
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only query membership in this community.`);
316
- }
317
- const callerMemberships = await userDb.getNetworkMemberships();
318
- const callerInNetwork = targetUserId === context.userId ||
319
- callerMemberships.some((m) => m.networkId === networkId);
320
- if (!callerInNetwork) {
321
- return error("Unauthorized: you can only view membership in a network you belong to.");
322
- }
323
- const match = memberships.find((m) => m.networkId === networkId);
324
- if (!match) {
325
- return success({ isMember: false, userId: targetUserId, networkId, message: "User is not a member of this network." });
326
- }
327
- return success({
328
- isMember: true,
329
- userId: targetUserId,
330
- networkId,
331
- networkTitle: match.networkTitle,
332
- permissions: match.permissions,
333
- joinedAt: match.joinedAt,
334
- });
335
- }
336
- // Own memberships in scoped chat
337
- if (boundNetworkId && targetUserId === context.userId) {
338
- return success({
339
- userId: targetUserId,
340
- count: memberships.length,
341
- memberships: memberships.map((m) => ({
342
- networkId: m.networkId,
343
- networkTitle: m.networkTitle,
344
- permissions: m.permissions,
345
- joinedAt: m.joinedAt,
346
- })),
347
- scopeRestriction: {
348
- isScoped: true,
349
- scopedToNetwork: context.indexName ?? boundNetworkId,
350
- message: `Results are limited to "${context.indexName ?? 'this network'}" because this chat is scoped to that community. The user may belong to other communities not shown here.`,
351
- },
352
- });
353
- }
354
- return success({
355
- userId: targetUserId,
356
- count: memberships.length,
357
- memberships: memberships.map((m) => ({
358
- networkId: m.networkId,
359
- networkTitle: m.networkTitle,
360
- permissions: m.permissions,
361
- joinedAt: m.joinedAt,
362
- })),
363
- });
364
- },
365
- });
366
- const updateNetworkSettingsSchema = z.object({
367
- title: z.string().optional(),
368
- prompt: z.string().nullable().optional(),
369
- imageUrl: z.string().url().nullable().optional(),
370
- joinPolicy: z.enum(['anyone', 'invite_only']).optional(),
371
- }).strict();
372
- const updateNetwork = defineTool({
373
- name: "update_network",
374
- description: "Updates settings of an existing network (community). Only the network owner can perform updates.\n\n" +
375
- "**Updatable fields:** title (display name), prompt (purpose description used for intent auto-assignment), " +
376
- "imageUrl (community avatar), joinPolicy ('anyone' for open or 'invite_only').\n\n" +
377
- "**When to use:** When a network owner wants to change their community's settings — e.g. update the purpose description, " +
378
- "change from invite-only to open, or update the community image.\n\n" +
379
- "**Important:** Changing the prompt affects how future intents are evaluated for auto-assignment to this network. " +
380
- "Existing intent-network links are not re-evaluated automatically.\n\n" +
381
- "**Returns:** Confirmation with the list of settings that were updated.",
382
- querySchema: z.object({
383
- networkId: z.string().optional().describe("Network UUID to update. Get from read_networks. Defaults to the scoped network in network-scoped chats."),
384
- settings: updateNetworkSettingsSchema.describe("Object with fields to update. All fields are optional — only include the ones to change. title: display name. prompt: purpose description (used for intent auto-assignment). imageUrl: community image URL (null to remove). joinPolicy: 'anyone' or 'invite_only'."),
385
- }),
386
- handler: async ({ context, query }) => {
387
- const boundNetworkId = boundCommunityId(context);
388
- const effectiveNetworkId = (query.networkId?.trim() || boundNetworkId) ?? null;
389
- if (!effectiveNetworkId || !UUID_REGEX.test(effectiveNetworkId)) {
390
- return error("Valid networkId required.");
391
- }
392
- if (boundNetworkId && effectiveNetworkId !== boundNetworkId) {
393
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only update this community's settings.`);
394
- }
395
- const _updateStart = Date.now();
396
- const _updateTraceEmitter = requestContext.getStore()?.traceEmitter;
397
- _updateTraceEmitter?.({ type: "graph_start", name: "index" });
398
- const result = await graphs.index.invoke({
399
- userId: context.userId,
400
- networkId: effectiveNetworkId,
401
- operationMode: 'update',
402
- updateInput: query.settings,
403
- });
404
- const _updateMs = Date.now() - _updateStart;
405
- _updateTraceEmitter?.({ type: "graph_end", name: "index", durationMs: _updateMs });
406
- if (result.mutationResult && !result.mutationResult.success) {
407
- return error(result.mutationResult.error || "Failed to update network.");
408
- }
409
- return success({ message: "Network updated.", settings: Object.keys(query.settings), _graphTimings: [{ name: 'index', durationMs: _updateMs, agents: result.agentTimings ?? [] }] });
410
- },
411
- });
412
- const createNetwork = defineTool({
413
- name: "create_network",
414
- description: "Creates a new network (community/group). The authenticated user becomes the owner with full control over settings and membership.\n\n" +
415
- "**What is a network?** A shared space where members post intents (what they're looking for) and the system discovers opportunities " +
416
- "(complementary matches) between members. The network's prompt guides what kinds of intents belong.\n\n" +
417
- "**When to use:** When the user wants to create a new community — e.g. a professional network, interest group, or project team.\n\n" +
418
- "**Returns:** The new network's networkId (UUID) and title. Use the networkId to add members (create_network_membership), " +
419
- "link intents (create_intent_index). Approved signals are matched in the background; use list_opportunities only to review persisted opportunities.",
420
- querySchema: z.object({
421
- title: z.string().describe("Display name of the network (e.g. 'AI Founders Berlin', 'Design Co-op'). Required."),
422
- prompt: z.string().optional().describe("Description of what this community is about. Used by the system to evaluate which intents belong in this network. Highly recommended for better auto-assignment."),
423
- imageUrl: z.string().url().optional().describe("URL for the community's avatar/image. Optional."),
424
- joinPolicy: z.enum(['anyone', 'invite_only']).optional().describe("'anyone' = open (any user can self-join), 'invite_only' = only the owner can add members. Defaults to 'invite_only'."),
425
- }),
426
- handler: async ({ context, query }) => {
427
- if (!query.title?.trim()) {
428
- return error("Title is required.");
429
- }
430
- const _createStart = Date.now();
431
- const _createTraceEmitter = requestContext.getStore()?.traceEmitter;
432
- _createTraceEmitter?.({ type: "graph_start", name: "index" });
433
- const result = await graphs.index.invoke({
434
- userId: context.userId,
435
- operationMode: 'create',
436
- createInput: {
437
- title: query.title.trim(),
438
- prompt: query.prompt?.trim() || undefined,
439
- imageUrl: query.imageUrl || undefined,
440
- joinPolicy: query.joinPolicy,
441
- },
442
- });
443
- const _createMs = Date.now() - _createStart;
444
- _createTraceEmitter?.({ type: "graph_end", name: "index", durationMs: _createMs });
445
- if (result.mutationResult) {
446
- if (result.mutationResult.success) {
447
- return success({
448
- created: true,
449
- networkId: result.mutationResult.networkId,
450
- title: result.mutationResult.title,
451
- message: result.mutationResult.message,
452
- _graphTimings: [{ name: 'index', durationMs: _createMs, agents: result.agentTimings ?? [] }],
453
- });
454
- }
455
- return error(result.mutationResult.error || "Failed to create network.");
456
- }
457
- return error("Failed to create network.");
458
- },
459
- });
460
- const deleteNetwork = defineTool({
461
- name: "delete_network",
462
- description: "Permanently deletes a network (community). Only the owner can delete, and the network must have no other members " +
463
- "(remove all members first with delete_network_membership). Personal networks cannot be deleted.\n\n" +
464
- "**When to use:** When the owner wants to disband a community. This is irreversible — all intent–network links to this network are removed.\n\n" +
465
- "**Prerequisites:** Must be the owner. Must be the sole remaining member (remove others first).\n\n" +
466
- "**Returns:** Confirmation that the network was deleted.",
467
- querySchema: z.object({
468
- networkId: z.string().optional().describe("Network UUID to delete. Get from read_networks. Defaults to the scoped network in network-scoped chats. Cannot be a personal network."),
469
- }),
470
- handler: async ({ context, query }) => {
471
- const boundNetworkId = boundCommunityId(context);
472
- const networkId = query.networkId?.trim() || boundNetworkId;
473
- if (!networkId || !UUID_REGEX.test(networkId)) {
474
- return error("Valid networkId required.");
475
- }
476
- if (boundNetworkId && networkId !== boundNetworkId) {
477
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only delete this community.`);
478
- }
479
- const _deleteStart = Date.now();
480
- const _deleteTraceEmitter = requestContext.getStore()?.traceEmitter;
481
- _deleteTraceEmitter?.({ type: "graph_start", name: "index" });
482
- const result = await graphs.index.invoke({
483
- userId: context.userId,
484
- networkId,
485
- operationMode: 'delete',
486
- });
487
- const _deleteMs = Date.now() - _deleteStart;
488
- _deleteTraceEmitter?.({ type: "graph_end", name: "index", durationMs: _deleteMs });
489
- if (result.mutationResult && !result.mutationResult.success) {
490
- return error(result.mutationResult.error || "Failed to delete network.");
491
- }
492
- return success({ message: "Network deleted.", _graphTimings: [{ name: 'index', durationMs: _deleteMs, agents: result.agentTimings ?? [] }] });
493
- },
494
- });
495
- const createNetworkMembership = defineTool({
496
- name: "create_network_membership",
497
- description: "Adds a user as a member of a network (community). Membership enables the user to post intents in the network and be discovered " +
498
- "by other members through opportunity matching.\n\n" +
499
- "**Usage modes:**\n" +
500
- "- Omit userId: self-join (only works for networks with joinPolicy 'anyone').\n" +
501
- "- With userId: add another user (only the network owner can do this for 'invite_only' networks).\n\n" +
502
- "**When to use:** When the user wants to join an open community, or when a network owner wants to invite someone.\n\n" +
503
- "**Returns:** Confirmation that the member was added (or a note that they were already a member). " +
504
- "After joining, the user's existing intents with autoAssign=true may be evaluated against the new network.",
505
- querySchema: z.object({
506
- userId: z.string().optional().describe("User ID to add as a member. Omit to join the network yourself. Get user IDs from read_user_contexts(query=name) or read_network_memberships."),
507
- networkId: z.string().optional().describe("Network UUID to add the member to. Get from read_networks. Defaults to the scoped network in network-scoped chats."),
508
- }),
509
- handler: async ({ context, query }) => {
510
- const boundNetworkId = boundCommunityId(context);
511
- const networkId = query.networkId?.trim() || boundNetworkId;
512
- const targetUserId = query.userId?.trim() || context.userId;
513
- if (!networkId || !UUID_REGEX.test(networkId)) {
514
- return error("Invalid network ID format. Use the exact UUID from read_networks.");
515
- }
516
- if (boundNetworkId && networkId !== boundNetworkId) {
517
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only add members to this community.`);
518
- }
519
- const _createMemberStart = Date.now();
520
- const _createMemberTraceEmitter = requestContext.getStore()?.traceEmitter;
521
- _createMemberTraceEmitter?.({ type: "graph_start", name: "network_membership" });
522
- const result = await graphs.networkMembership.invoke({
523
- userId: context.userId,
524
- networkId,
525
- targetUserId,
526
- operationMode: 'create',
527
- });
528
- const _createMemberMs = Date.now() - _createMemberStart;
529
- _createMemberTraceEmitter?.({ type: "graph_end", name: "network_membership", durationMs: _createMemberMs });
530
- if (result.mutationResult) {
531
- if (result.mutationResult.success) {
532
- const alreadyMember = result.mutationResult.message?.includes("already");
533
- return success({
534
- created: !alreadyMember,
535
- message: result.mutationResult.message,
536
- _graphTimings: [{ name: 'network_membership', durationMs: _createMemberMs, agents: result.agentTimings ?? [] }],
537
- });
538
- }
539
- return error(result.mutationResult.error || "Failed to add member.");
540
- }
541
- return error("Failed to add member.");
542
- },
543
- });
544
- const deleteNetworkMembership = defineTool({
545
- name: "delete_network_membership",
546
- description: "Removes a user from a network (community). After removal, the user's intents are unlinked from this network " +
547
- "and their approved signals are no longer eligible for background matching within it.\n\n" +
548
- "**Permissions:** Only the network owner can remove members. The owner themselves cannot be removed (delete the network instead).\n\n" +
549
- "**When to use:** When a network owner wants to remove a member from the community. " +
550
- "Use read_network_memberships(networkId) first to get the userId of the member to remove.\n\n" +
551
- "**Returns:** Confirmation that the member was removed.",
552
- querySchema: z.object({
553
- userId: z.string().describe("User ID of the member to remove. Get from read_network_memberships(networkId). Cannot be the network owner."),
554
- networkId: z.string().optional().describe("Network UUID to remove the member from. Get from read_networks. Defaults to the scoped network in network-scoped chats."),
555
- }),
556
- handler: async ({ context, query }) => {
557
- const boundNetworkId = boundCommunityId(context);
558
- const networkId = query.networkId?.trim() || boundNetworkId;
559
- const targetUserId = query.userId?.trim();
560
- if (!networkId || !UUID_REGEX.test(networkId)) {
561
- return error("Valid networkId required. Use the exact UUID from read_networks.");
562
- }
563
- if (!targetUserId) {
564
- return error("userId is required.");
565
- }
566
- if (boundNetworkId && networkId !== boundNetworkId) {
567
- return error(`This chat is scoped to ${context.indexName ?? 'this network'}. You can only manage members of this community.`);
568
- }
569
- const _deleteMemberStart = Date.now();
570
- const _deleteMemberTraceEmitter = requestContext.getStore()?.traceEmitter;
571
- _deleteMemberTraceEmitter?.({ type: "graph_start", name: "network_membership" });
572
- const result = await graphs.networkMembership.invoke({
573
- userId: context.userId,
574
- networkId,
575
- targetUserId,
576
- operationMode: 'delete',
577
- });
578
- const _deleteMemberMs = Date.now() - _deleteMemberStart;
579
- _deleteMemberTraceEmitter?.({ type: "graph_end", name: "network_membership", durationMs: _deleteMemberMs });
580
- if (result.mutationResult) {
581
- if (result.mutationResult.success) {
582
- return success({
583
- removed: true,
584
- message: result.mutationResult.message,
585
- _graphTimings: [{ name: 'network_membership', durationMs: _deleteMemberMs, agents: result.agentTimings ?? [] }],
586
- });
587
- }
588
- return error(result.mutationResult.error || "Failed to remove member.");
589
- }
590
- return error("Failed to remove member.");
591
- },
592
- });
593
- return [readIndexes, readIndexMemberships, updateNetwork, createNetwork, deleteNetwork, createNetworkMembership, deleteNetworkMembership];
594
- }
@@ -1,25 +0,0 @@
1
- import type { Cache } from '../shared/interfaces/cache.interface.js';
2
- import type { OpportunityPresenter, PresenterDatabase } from "./opportunity.presentation.js";
3
- export interface CachedDeliveryCard {
4
- opportunityId: string;
5
- headline: string;
6
- personalizedSummary: string;
7
- suggestedAction: string;
8
- narratorRemark: string;
9
- /** Empty string means presenter did not generate one (LLM error / fallback path). */
10
- greeting: string;
11
- }
12
- export interface OpportunityWithContext {
13
- id: string;
14
- status: string;
15
- actors: Array<{
16
- userId: string;
17
- role: string;
18
- }>;
19
- interpretation?: unknown;
20
- detection?: unknown;
21
- }
22
- export declare const DELIVERY_CARD_CACHE_TTL: number;
23
- export declare function getOrCreateDeliveryCardBatch(cache: Cache, presenter: OpportunityPresenter, presenterDb: PresenterDatabase, opportunities: OpportunityWithContext[], viewerId: string, options?: {
24
- ttl?: number;
25
- }): Promise<Map<string, CachedDeliveryCard>>;