@indexnetwork/protocol 22.0.0-rc.499.1 → 64.0.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 (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 -134
  12. package/dist/index.js +41 -105
  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,608 +0,0 @@
1
- /**
2
- * Discovery pipeline, stages 4–5: evaluation and ranking.
3
- *
4
- * Evaluation builds an entity bundle from the discoverer plus the top candidates,
5
- * asks the evaluator to score them, and maps the verdicts back onto graph state.
6
- */
7
- import { OpportunityEvaluator } from "./opportunity.evaluator.js";
8
- import { getModelName } from '../shared/agent/model.config.js';
9
- import { timed } from '../shared/observability/performance.js';
10
- import { requestContext } from '../shared/observability/request-context.js';
11
- import { getAbortSignalConfig } from '../shared/agent/model-signal.js';
12
- import { mergeOpportunityEvidence } from './opportunity.evidence.js';
13
- import { DISCOVERY_EVALUATOR_MIN_SCORE_DEFAULT } from './discovery.env.js';
14
- import { buildEvaluatorEvidenceKey, buildNetworkContexts, evaluationLog, getRejectionCooldownMs, networkMembershipPairKey, rankingLog, REJECTION_COOLDOWN_SIMILARITY_PENALTY, safeOpportunityGraphError } from "./opportunity.graph.shared.js";
15
- /** Batch size for one evaluator call. Larger batches time out. */
16
- const EVAL_BATCH_SIZE = 25;
17
- /**
18
- * Node 3: Evaluation (Entity bundle)
19
- * Builds entity bundle from source + candidates, invokes entity-bundle evaluator, maps to EvaluatedOpportunity with networkId from entities.
20
- */
21
- export async function evaluationNode(state, deps) {
22
- return timed("OpportunityGraph.evaluation", async () => {
23
- const startTime = Date.now();
24
- evaluationLog.verbose('Starting evaluation', {
25
- candidatesCount: state.candidates.length,
26
- });
27
- if (state.candidates.length === 0) {
28
- evaluationLog.verbose('No candidates to evaluate');
29
- return { evaluatedOpportunities: [], agentTimings: [] };
30
- }
31
- const sortedCandidates = [...state.candidates].sort((a, b) => b.similarity - a.similarity);
32
- const dedupedCandidates = dedupeCandidatesByUser(sortedCandidates, state);
33
- const discoveryUserId = state.onBehalfOfUserId ?? state.userId;
34
- let eligibleCandidates;
35
- try {
36
- eligibleCandidates = await filterToActiveMemberships(dedupedCandidates, discoveryUserId, deps);
37
- }
38
- catch (error) {
39
- evaluationLog.error('Active network membership recheck failed; skipping evaluation', { error });
40
- return {
41
- candidates: [],
42
- evaluatedOpportunities: [],
43
- remainingCandidates: [],
44
- error: 'Failed to validate candidate network memberships.',
45
- agentTimings: [],
46
- };
47
- }
48
- if (eligibleCandidates.length < dedupedCandidates.length) {
49
- evaluationLog.info('Removed candidates without active network pairs before evaluation', {
50
- before: dedupedCandidates.length,
51
- after: eligibleCandidates.length,
52
- removed: dedupedCandidates.length - eligibleCandidates.length,
53
- });
54
- }
55
- if (eligibleCandidates.length === 0) {
56
- return { candidates: [], evaluatedOpportunities: [], remainingCandidates: [], agentTimings: [] };
57
- }
58
- if (dedupedCandidates.length < sortedCandidates.length) {
59
- evaluationLog.info("Deduped candidates by userId", {
60
- before: sortedCandidates.length,
61
- after: dedupedCandidates.length,
62
- removed: sortedCandidates.length - dedupedCandidates.length,
63
- });
64
- }
65
- const eligibleCandidatesAfterCooldown = await applyRejectionCooldown(eligibleCandidates, discoveryUserId, deps);
66
- const batchToEvaluate = eligibleCandidatesAfterCooldown.slice(0, EVAL_BATCH_SIZE);
67
- const remaining = eligibleCandidatesAfterCooldown.slice(EVAL_BATCH_SIZE);
68
- // Early termination: if search was query-driven and no query-sourced candidates remain,
69
- // clear remaining to prevent pointless pagination through non-query leftovers
70
- const isQueryDriven = !!state.searchQuery?.trim();
71
- const queryRemaining = remaining.filter((c) => c.discoverySource === 'query' || c.discoverySource == null);
72
- const effectiveRemaining = isQueryDriven && queryRemaining.length === 0 ? [] : remaining;
73
- if (isQueryDriven && remaining.length > 0 && queryRemaining.length === 0) {
74
- evaluationLog.info("Early termination: no query-sourced candidates remain", {
75
- droppedCandidates: remaining.length,
76
- });
77
- }
78
- if (effectiveRemaining.length > 0) {
79
- evaluationLog.verbose('Batched candidates for evaluation', {
80
- evaluating: batchToEvaluate.length,
81
- remaining: effectiveRemaining.length,
82
- total: sortedCandidates.length,
83
- });
84
- }
85
- const agentTimingsAccum = [];
86
- try {
87
- const sourceProfile = await deps.database.getProfile(discoveryUserId);
88
- const sourceEntity = {
89
- userId: discoveryUserId,
90
- profile: {
91
- name: sourceProfile?.identity?.name,
92
- bio: sourceProfile?.identity?.bio,
93
- location: sourceProfile?.identity?.location,
94
- context: sourceProfile?.context,
95
- },
96
- intents: state.indexedIntents.slice(0, 5).map((i) => ({
97
- intentId: i.intentId,
98
- payload: i.payload,
99
- summary: i.summary,
100
- })),
101
- networkId: '', // Placeholder — overwritten per-pairing below
102
- evidenceKey: `${discoveryUserId}::source`,
103
- ragScore: undefined,
104
- matchedVia: undefined,
105
- };
106
- const candidateEntities = await buildCandidateEntities(batchToEvaluate, deps);
107
- const userIdToIndexId = new Map();
108
- const evidenceByEntityKey = new Map();
109
- const entityKeysByUserId = new Map();
110
- for (const e of candidateEntities) {
111
- if (!userIdToIndexId.has(e.userId))
112
- userIdToIndexId.set(e.userId, e.networkId);
113
- if (e.evidenceKey) {
114
- evidenceByEntityKey.set(e.evidenceKey, mergeOpportunityEvidence(evidenceByEntityKey.get(e.evidenceKey), e.evidence));
115
- entityKeysByUserId.set(e.userId, [...(entityKeysByUserId.get(e.userId) ?? []), e.evidenceKey]);
116
- }
117
- }
118
- function evidenceForActor(actor) {
119
- if (actor.evidenceKey)
120
- return evidenceByEntityKey.get(actor.evidenceKey);
121
- const keys = entityKeysByUserId.get(actor.userId) ?? [];
122
- const intentKey = actor.intentId ? keys.find((key) => key.endsWith(`:${actor.intentId}`)) : undefined;
123
- if (intentKey)
124
- return evidenceByEntityKey.get(intentKey);
125
- // Avoid leaking unrelated resource evidence when the evaluator collapsed multiple
126
- // candidates for the same user into a profile-only actor.
127
- if (keys.length === 1)
128
- return evidenceByEntityKey.get(keys[0]);
129
- return undefined;
130
- }
131
- const minScore = state.targetUserId
132
- ? DISCOVERY_EVALUATOR_MIN_SCORE_DEFAULT
133
- : deps.evaluatorMinScore;
134
- const evaluatorSignalConfig = getAbortSignalConfig();
135
- const evaluator = typeof deps.evaluatorAgent.invokeEntityBundle === 'function'
136
- ? deps.evaluatorAgent
137
- : new OpportunityEvaluator();
138
- const runParallel = process.env.RUN_OPPORTUNITY_EVAL_IN_PARALLEL === 'true';
139
- const networkContexts = await buildNetworkContexts([sourceEntity, ...candidateEntities], deps.database);
140
- // Declare trace entries early so both parallel and serial paths can push error entries
141
- const traceEntries = [];
142
- const pairwiseOpportunities = runParallel
143
- ? await evaluateInParallel({
144
- evaluator, sourceEntity, candidateEntities, state, discoveryUserId,
145
- networkContexts, minScore, evaluatorSignalConfig, agentTimingsAccum, traceEntries,
146
- })
147
- : splitBundledVerdicts(await evaluateBundled({
148
- evaluator, sourceEntity, candidateEntities, state, discoveryUserId,
149
- networkContexts, minScore, evaluatorSignalConfig, agentTimingsAccum,
150
- }), state, candidateEntities);
151
- const evaluatedOpportunities = pairwiseOpportunities.map((op) => ({
152
- reasoning: op.reasoning,
153
- score: op.score,
154
- evidence: mergeOpportunityEvidence(...op.actors.map(evidenceForActor)),
155
- actors: op.actors.map((a) => {
156
- const isSource = a.userId === discoveryUserId;
157
- if (isSource) {
158
- // Source actor inherits the counterpart's networkId (shared match context)
159
- const counterpart = op.actors.find((other) => other.userId !== a.userId);
160
- const counterpartIndexId = counterpart
161
- ? userIdToIndexId.get(counterpart.userId) ?? candidateEntities.find((e) => e.userId === counterpart.userId)?.networkId
162
- : undefined;
163
- return {
164
- userId: a.userId,
165
- role: a.role,
166
- intentId: a.intentId,
167
- networkId: counterpartIndexId ?? userIdToIndexId.get(a.userId) ?? '',
168
- };
169
- }
170
- return {
171
- userId: a.userId,
172
- role: a.role,
173
- intentId: a.intentId,
174
- networkId: userIdToIndexId.get(a.userId) ?? candidateEntities.find((e) => e.userId === a.userId)?.networkId,
175
- };
176
- }),
177
- }));
178
- const passed = evaluatedOpportunities.filter((o) => o.score >= minScore);
179
- evaluationLog.verbose('Evaluation complete', {
180
- evaluatedCount: evaluatedOpportunities.length,
181
- passed: passed.length,
182
- });
183
- // Threshold filter trace: how many candidates in this batch were above/below similarity threshold
184
- const aboveThreshold = batchToEvaluate.filter((candidate) => candidate.similarity >= deps.retrievalMinSimilarity).length;
185
- const belowThreshold = batchToEvaluate.length - aboveThreshold;
186
- traceEntries.push({
187
- node: "threshold_filter",
188
- detail: `${aboveThreshold} above ${deps.retrievalMinSimilarity}, ${belowThreshold} below (batch of ${batchToEvaluate.length})`,
189
- data: {
190
- aboveThreshold,
191
- belowThreshold,
192
- minScore: deps.retrievalMinSimilarity,
193
- retrievalMinSimilarity: deps.retrievalMinSimilarity,
194
- evaluatorMinScore: minScore,
195
- batchSize: batchToEvaluate.length,
196
- },
197
- });
198
- // Create a map of evaluated candidates by userId for quick lookup.
199
- // Use discoveryUserId (which accounts for onBehalfOfUserId in introducer flow)
200
- // rather than state.userId (which is the introducer, not present in pairwise actors).
201
- const evaluatedByUserId = new Map();
202
- for (const opp of evaluatedOpportunities) {
203
- const candidateActor = opp.actors.find(a => a.userId !== discoveryUserId);
204
- if (candidateActor) {
205
- evaluatedByUserId.set(candidateActor.userId, { score: opp.score, reasoning: opp.reasoning });
206
- }
207
- }
208
- traceEntries.push({
209
- node: "evaluation",
210
- detail: `Evaluated ${candidateEntities.length} candidate(s) → ${passed.length} passed (min score ${minScore})`,
211
- data: {
212
- inputCandidates: batchToEvaluate.length,
213
- returnedFromEvaluator: evaluatedOpportunities.length,
214
- passedCount: passed.length,
215
- minScore,
216
- remaining: effectiveRemaining.length,
217
- batchNumber: 1,
218
- durationMs: Date.now() - startTime,
219
- model: getModelName("opportunityEvaluator"),
220
- },
221
- });
222
- // Individual candidate entries - show ALL candidates that went to evaluator
223
- for (const entity of candidateEntities) {
224
- const candidateName = entity.profile?.name || entity.userId.slice(0, 8);
225
- const evaluated = evaluatedByUserId.get(entity.userId);
226
- const score = evaluated?.score;
227
- const didPass = score !== undefined && score >= minScore;
228
- const status = score !== undefined
229
- ? (didPass ? '✓ passed' : `✗ score ${score}`)
230
- : '✗ not scored';
231
- traceEntries.push({
232
- node: "candidate",
233
- detail: `${candidateName}: ${status}`,
234
- data: {
235
- userId: entity.userId,
236
- name: candidateName,
237
- bio: entity.profile?.bio,
238
- score: score,
239
- passed: didPass,
240
- reasoning: evaluated?.reasoning || 'No evaluation returned for this candidate',
241
- matchedVia: entity.matchedVia,
242
- ragScore: entity.ragScore,
243
- model: getModelName("opportunityEvaluator"),
244
- intents: entity.intents?.map((i) => ({
245
- intentId: i.intentId,
246
- summary: (i.summary || i.payload || '').slice(0, 100),
247
- })),
248
- profile: entity.profile ? {
249
- name: entity.profile.name,
250
- location: entity.profile.location,
251
- } : undefined,
252
- },
253
- });
254
- }
255
- return {
256
- candidates: eligibleCandidates,
257
- // Only pass opportunities that passed the threshold to downstream nodes
258
- evaluatedOpportunities: evaluatedOpportunities.filter((o) => o.score >= minScore),
259
- remainingCandidates: effectiveRemaining,
260
- trace: traceEntries,
261
- agentTimings: agentTimingsAccum,
262
- };
263
- }
264
- catch (error) {
265
- const errMsg = safeOpportunityGraphError(error);
266
- evaluationLog.error('Failed', { error: errMsg });
267
- return {
268
- evaluatedOpportunities: [],
269
- error: 'Failed to evaluate candidates.',
270
- trace: [{
271
- node: "evaluation_fatal",
272
- detail: `Evaluation failed: ${errMsg}`,
273
- data: {
274
- error: errMsg,
275
- candidateCount: state.candidates?.length ?? 0,
276
- durationMs: Date.now() - startTime,
277
- },
278
- }],
279
- agentTimings: agentTimingsAccum,
280
- };
281
- }
282
- });
283
- }
284
- /** Dedup by userId — when same similarity, prefer index with highest relevancyScore. */
285
- function dedupeCandidatesByUser(sortedCandidates, state) {
286
- const bestByUser = new Map();
287
- for (const c of sortedCandidates) {
288
- const existing = bestByUser.get(c.candidateUserId);
289
- if (!existing) {
290
- bestByUser.set(c.candidateUserId, c);
291
- }
292
- else if (c.similarity > existing.similarity) {
293
- bestByUser.set(c.candidateUserId, c);
294
- }
295
- else if (c.similarity === existing.similarity) {
296
- // Tie-break: prefer index with higher relevancy score
297
- const cScore = state.indexRelevancyScores[c.networkId] ?? 0;
298
- const existingScore = state.indexRelevancyScores[existing.networkId] ?? 0;
299
- if (cScore > existingScore) {
300
- bestByUser.set(c.candidateUserId, c);
301
- }
302
- }
303
- }
304
- const deduped = Array.from(bestByUser.values());
305
- // Re-sort by similarity descending (Map iteration order doesn't guarantee sort)
306
- deduped.sort((a, b) => b.similarity - a.similarity);
307
- return deduped;
308
- }
309
- /** Both sides of every pairing must still hold an active membership in the shared network. */
310
- async function filterToActiveMemberships(dedupedCandidates, discoveryUserId, deps) {
311
- const requestedPairs = dedupedCandidates.flatMap((candidate) => [
312
- { userId: discoveryUserId, networkId: candidate.networkId },
313
- { userId: candidate.candidateUserId, networkId: candidate.networkId },
314
- ]);
315
- const activePairs = await deps.database.getActiveNetworkMembershipPairs(requestedPairs);
316
- const activePairKeys = new Set(activePairs.map((pair) => networkMembershipPairKey(pair.userId, pair.networkId)));
317
- return dedupedCandidates.filter((candidate) => activePairKeys.has(networkMembershipPairKey(discoveryUserId, candidate.networkId))
318
- && activePairKeys.has(networkMembershipPairKey(candidate.candidateUserId, candidate.networkId)));
319
- }
320
- /**
321
- * IND-567: Rejection cool-down penalty.
322
- *
323
- * Candidates with a recently rejected or stalled opportunity receive a
324
- * similarity penalty so they are ranked lower (and often pushed out of
325
- * the evaluation batch). This prevents cross-query re-surfacing of
326
- * false-positive matches that were already caught downstream.
327
- * The persist-node dedup is still the hard gate; this is a soft guard
328
- * that reduces evaluator cost and LLM false-positive rate.
329
- */
330
- async function applyRejectionCooldown(eligibleCandidates, discoveryUserId, deps) {
331
- const rejectionCooldownIds = new Set();
332
- if (eligibleCandidates.length > 0
333
- && typeof deps.database.getRecentlyRejectedOpportunityCounterparties === 'function') {
334
- try {
335
- const cooldownMs = getRejectionCooldownMs();
336
- const ids = await deps.database.getRecentlyRejectedOpportunityCounterparties(discoveryUserId, eligibleCandidates.map((c) => c.candidateUserId), cooldownMs);
337
- for (const id of ids)
338
- rejectionCooldownIds.add(id);
339
- if (rejectionCooldownIds.size > 0) {
340
- evaluationLog.info('IND-567 rejection cool-down: applying similarity penalty', {
341
- affectedCount: rejectionCooldownIds.size,
342
- cooldownDays: Math.round(cooldownMs / (24 * 60 * 60 * 1000)),
343
- penalty: REJECTION_COOLDOWN_SIMILARITY_PENALTY,
344
- });
345
- }
346
- }
347
- catch (err) {
348
- evaluationLog.warn('IND-567 rejection cool-down: lookup failed, skipping penalty', {
349
- error: safeOpportunityGraphError(err),
350
- });
351
- }
352
- }
353
- // Apply penalty and re-sort so penalised candidates fall to the back.
354
- return rejectionCooldownIds.size > 0
355
- ? eligibleCandidates
356
- .map((c) => rejectionCooldownIds.has(c.candidateUserId)
357
- ? { ...c, similarity: c.similarity * REJECTION_COOLDOWN_SIMILARITY_PENALTY }
358
- : c)
359
- .sort((a, b) => b.similarity - a.similarity)
360
- : eligibleCandidates;
361
- }
362
- /** Hydrate each candidate into the profile/intent shape the evaluator reads. */
363
- async function buildCandidateEntities(batchToEvaluate, deps) {
364
- return Promise.all(batchToEvaluate.map(async (c) => {
365
- const profile = await deps.database.getProfile(c.candidateUserId);
366
- let intentPayload = c.candidatePayload;
367
- let intentSummary = c.candidateSummary;
368
- let evidence = c.evidence;
369
- if (c.candidateIntentId != null && (!intentPayload || intentPayload === '')) {
370
- const intent = await deps.database.getIntent(c.candidateIntentId);
371
- if (intent) {
372
- intentPayload = intent.payload;
373
- intentSummary = intent.summary ?? undefined;
374
- }
375
- }
376
- if (c.candidatePremiseId != null && (!intentPayload || intentPayload === '')) {
377
- const premise = await deps.database.getPremise(c.candidatePremiseId);
378
- if (premise) {
379
- intentPayload = premise.assertion.text;
380
- intentSummary = premise.assertion.summary;
381
- evidence = (c.evidence ?? []).map((item) => item.candidatePremiseId === c.candidatePremiseId
382
- ? { ...item, payload: premise.assertion.text, summary: premise.assertion.summary, assertionText: premise.assertion.text }
383
- : item);
384
- }
385
- }
386
- return {
387
- userId: c.candidateUserId,
388
- profile: {
389
- name: profile?.identity?.name,
390
- bio: profile?.identity?.bio,
391
- location: profile?.identity?.location,
392
- context: profile?.context,
393
- },
394
- intents: c.candidateIntentId != null
395
- ? [{ intentId: c.candidateIntentId, payload: intentPayload ?? '', summary: intentSummary }]
396
- : undefined,
397
- networkId: c.networkId,
398
- evidenceKey: buildEvaluatorEvidenceKey(c),
399
- ragScore: c.similarity * 100,
400
- matchedVia: c.lens,
401
- evidence,
402
- };
403
- }));
404
- }
405
- /** Build the evaluator input for a given entity set. */
406
- function buildEvaluatorInput(args, entities) {
407
- return {
408
- discovererId: args.discoveryUserId,
409
- entities,
410
- existingOpportunities: args.state.options.existingOpportunities,
411
- ...(args.state.searchQuery?.trim() ? { discoveryQuery: args.state.searchQuery.trim() } : {}),
412
- networkContexts: args.networkContexts,
413
- };
414
- }
415
- /** Experimental: one LLM call per candidate, all fired in parallel. */
416
- async function evaluateInParallel(args) {
417
- const { evaluator, sourceEntity, candidateEntities, minScore, evaluatorSignalConfig, agentTimingsAccum, traceEntries } = args;
418
- evaluationLog.verbose('Running parallel evaluation', { candidates: candidateEntities.length });
419
- const parallelErrors = [];
420
- const parallelResults = await Promise.all(candidateEntities.map((candidateEntity) => {
421
- const input = buildEvaluatorInput(args, [sourceEntity, candidateEntity]);
422
- const _evalStart = Date.now();
423
- const _traceEmitter = requestContext.getStore()?.traceEmitter;
424
- _traceEmitter?.({ type: "agent_start", name: "opportunity-evaluator" });
425
- const _candidateName = candidateEntity.profile?.name ?? "Unknown";
426
- return evaluator.invokeEntityBundle(input, { minScore, returnAll: true, ...evaluatorSignalConfig })
427
- .then((res) => {
428
- const _evalDuration = Date.now() - _evalStart;
429
- agentTimingsAccum.push({ name: 'opportunity.evaluator', durationMs: _evalDuration });
430
- const _topScore = res.length > 0 ? Math.max(...res.map(r => r.score)) : -1;
431
- const _summary = _topScore < 0 ? `${_candidateName}: no match` : `${_candidateName}: ${_topScore}`;
432
- _traceEmitter?.({ type: "agent_end", name: "opportunity-evaluator", durationMs: _evalDuration, summary: _summary });
433
- return res;
434
- })
435
- .catch((err) => {
436
- const _evalDuration = Date.now() - _evalStart;
437
- const _errMsg = safeOpportunityGraphError(err);
438
- agentTimingsAccum.push({ name: 'opportunity.evaluator', durationMs: _evalDuration });
439
- _traceEmitter?.({ type: "agent_end", name: "opportunity-evaluator", durationMs: _evalDuration, summary: `${_candidateName}: error — ${_errMsg}` });
440
- evaluationLog.warn('Parallel eval failed for candidate', {
441
- candidateUserId: candidateEntity.userId,
442
- error: _errMsg,
443
- });
444
- parallelErrors.push({
445
- candidateUserId: candidateEntity.userId,
446
- candidateName: _candidateName,
447
- error: _errMsg,
448
- durationMs: _evalDuration,
449
- });
450
- return [];
451
- });
452
- }));
453
- // Record trace entries for candidates that failed during parallel evaluation
454
- if (parallelErrors.length > 0) {
455
- traceEntries.push({
456
- node: "evaluation_errors",
457
- detail: `${parallelErrors.length}/${candidateEntities.length} candidate evaluation(s) failed`,
458
- data: {
459
- failedCount: parallelErrors.length,
460
- totalCandidates: candidateEntities.length,
461
- errors: parallelErrors.map(e => ({
462
- candidateUserId: e.candidateUserId,
463
- candidateName: e.candidateName,
464
- error: e.error,
465
- durationMs: e.durationMs,
466
- })),
467
- },
468
- });
469
- }
470
- // Each call is already pairwise (source + 1 candidate) — flatten directly
471
- return parallelResults.flat();
472
- }
473
- /** Default: single bundled LLM call with all candidates. */
474
- async function evaluateBundled(args) {
475
- const { evaluator, sourceEntity, candidateEntities, minScore, evaluatorSignalConfig, agentTimingsAccum } = args;
476
- const input = buildEvaluatorInput(args, [sourceEntity, ...candidateEntities]);
477
- // Get ALL scored results for tracing (returnAll: true), filter for persistence later
478
- const _evalStart = Date.now();
479
- const _traceEmitterSerial = requestContext.getStore()?.traceEmitter;
480
- _traceEmitterSerial?.({ type: "agent_start", name: "opportunity-evaluator" });
481
- try {
482
- const opportunitiesWithActors = await evaluator.invokeEntityBundle(input, { minScore, returnAll: true, ...evaluatorSignalConfig });
483
- const _evalDuration = Date.now() - _evalStart;
484
- agentTimingsAccum.push({ name: 'opportunity.evaluator', durationMs: _evalDuration });
485
- _traceEmitterSerial?.({ type: "agent_end", name: "opportunity-evaluator", durationMs: _evalDuration, summary: `Evaluated ${candidateEntities.length} candidate(s)` });
486
- return opportunitiesWithActors;
487
- }
488
- catch (serialErr) {
489
- const _evalDuration = Date.now() - _evalStart;
490
- const _errMsg = safeOpportunityGraphError(serialErr);
491
- agentTimingsAccum.push({ name: 'opportunity.evaluator', durationMs: _evalDuration });
492
- _traceEmitterSerial?.({ type: "agent_end", name: "opportunity-evaluator", durationMs: _evalDuration, summary: `error — ${_errMsg}` });
493
- throw serialErr; // Re-throw for the outer catch to handle
494
- }
495
- }
496
- /**
497
- * Split multi-actor evaluator results into pairwise (viewer + candidate).
498
- * Each persisted discovery opportunity should have exactly 2 actors.
499
- * When splitting, build per-candidate reasoning from entity data because
500
- * the shared reasoning typically describes only one candidate.
501
- */
502
- function splitBundledVerdicts(opportunitiesWithActors, state, candidateEntities) {
503
- const pairwiseOpportunities = [];
504
- for (const op of opportunitiesWithActors) {
505
- const pairwiseSourceId = state.onBehalfOfUserId ?? state.userId;
506
- const nonViewerActors = op.actors.filter(a => a.userId !== pairwiseSourceId);
507
- if (nonViewerActors.length <= 1) {
508
- pairwiseOpportunities.push(op);
509
- continue;
510
- }
511
- evaluationLog.warn('Splitting multi-actor opportunity; LLM returned bundled actors instead of one-per-candidate', {
512
- actorCount: nonViewerActors.length,
513
- userIds: nonViewerActors.map(a => a.userId),
514
- });
515
- const viewerActor = op.actors.find(a => a.userId === pairwiseSourceId);
516
- for (const candidate of nonViewerActors) {
517
- const entity = candidateEntities.find(e => e.userId === candidate.userId);
518
- const candidateName = entity?.profile?.name ?? '';
519
- const reasoningLower = op.reasoning.toLowerCase();
520
- const mentionsCandidate = candidateName !== '' &&
521
- reasoningLower.includes(candidateName.toLowerCase());
522
- const mentionsOtherCandidate = nonViewerActors
523
- .filter((actor) => actor.userId !== candidate.userId)
524
- .map((actor) => candidateEntities.find((e) => e.userId === actor.userId)?.profile?.name?.toLowerCase())
525
- .some((name) => name != null && reasoningLower.includes(name));
526
- let reasoning;
527
- if (mentionsCandidate && !mentionsOtherCandidate) {
528
- reasoning = op.reasoning;
529
- }
530
- else if (entity?.profile) {
531
- const p = entity.profile;
532
- const parts = [p.name, p.bio].filter(Boolean);
533
- if (p.skills?.length)
534
- parts.push(`Skills: ${p.skills.join(', ')}`);
535
- if (p.interests?.length)
536
- parts.push(`Interests: ${p.interests.join(', ')}`);
537
- reasoning = parts.join('. ') || op.reasoning;
538
- }
539
- else {
540
- reasoning = op.reasoning;
541
- }
542
- pairwiseOpportunities.push({
543
- reasoning,
544
- score: op.score,
545
- actors: [
546
- viewerActor ?? { userId: pairwiseSourceId, role: 'patient', intentId: null },
547
- candidate,
548
- ],
549
- });
550
- }
551
- }
552
- return pairwiseOpportunities;
553
- }
554
- /**
555
- * Node 4: Ranking
556
- * Sorts evaluated opportunities by score, applies limit, dedupes by actor-set hash.
557
- */
558
- export async function rankingNode(state) {
559
- return timed("OpportunityGraph.ranking", async () => {
560
- rankingLog.verbose('Starting ranking', {
561
- evaluatedCount: state.evaluatedOpportunities.length,
562
- });
563
- try {
564
- const sorted = [...state.evaluatedOpportunities].sort((a, b) => b.score - a.score);
565
- const limit = state.options.limit ?? 20;
566
- const ranked = sorted.slice(0, limit);
567
- const actorSetKey = (opp) => opp.actors
568
- .map((a) => `${a.userId}:${a.networkId}`)
569
- .sort()
570
- .join('|');
571
- const seen = new Set();
572
- const deduplicated = ranked.filter((opp) => {
573
- const key = actorSetKey(opp);
574
- if (seen.has(key))
575
- return false;
576
- seen.add(key);
577
- return true;
578
- });
579
- rankingLog.verbose('Ranking complete', {
580
- sorted: sorted.length,
581
- afterLimit: ranked.length,
582
- afterDedup: deduplicated.length,
583
- });
584
- return { evaluatedOpportunities: deduplicated };
585
- }
586
- catch (error) {
587
- const errMsg = error instanceof Error ? error.message : String(error);
588
- rankingLog.error('Failed', { error });
589
- return {
590
- evaluatedOpportunities: [],
591
- error: 'Failed to rank opportunities.',
592
- trace: [{
593
- node: "ranking_fatal",
594
- detail: `Ranking failed: ${errMsg}`,
595
- data: { error: errMsg },
596
- }],
597
- };
598
- }
599
- });
600
- }
601
- /** Trace summary for {@link rankingNode}. */
602
- export function rankingTraceSummary(result) {
603
- const r = result;
604
- if (r?.error)
605
- return `error: ${r.error}`;
606
- const opps = r?.evaluatedOpportunities;
607
- return opps ? `Ranked ${opps.length} opportunity(ies)` : undefined;
608
- }