@indexnetwork/protocol 22.0.0-rc.499.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 -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,489 +0,0 @@
1
- /**
2
- * `list_opportunities` — the persisted opportunity feed for chat and MCP.
3
- *
4
- * Split out of `opportunity.tools.ts`: the listing is by far the largest of the
5
- * three opportunity tools, and it is the only one that renders cards.
6
- */
7
- import { z } from "zod";
8
- import { success, error, UUID_REGEX } from "../shared/agent/tool.helpers.js";
9
- import { focusedIntentId, focusedNetworkId, focusedNetworkLabel } from "../shared/agent/tool.scope.js";
10
- import { getPrimaryActionLabel, SECONDARY_ACTION_LABEL } from "./opportunity.labels.js";
11
- import { OpportunityPresenter, gatherPresenterContext, stripUuids } from "./opportunity.presentation.js";
12
- import { buildOpportunityPresentation } from "./opportunity.presentation.js";
13
- import { loadNegotiationContext } from "./negotiation-context.loader.js";
14
- import { selectOpportunityFeed } from "./opportunity.feed-selection.js";
15
- import { CHAT_DISPLAY_LIMIT, attachOpportunityAppLink, attachProfileLink, buildNegotiationUrl } from "./opportunity.tools.cards.js";
16
- import { logger, stripLeadingNarratorName } from "./opportunity.tools.cards.js";
17
- /** Builds the `list_opportunities` tool against the host's capabilities. */
18
- export function createListOpportunitiesTool(defineTool, deps) {
19
- const { database, userDb, systemDb, graphs, cache } = deps;
20
- const createOpportunityPresenter = deps.opportunityPresentation?.createPresenter ??
21
- (() => new OpportunityPresenter());
22
- const gatherOpportunityPresenterContext = deps.opportunityPresentation?.gatherPresenterContext ??
23
- gatherPresenterContext;
24
- const listOpportunities = defineTool({
25
- name: "list_opportunities",
26
- description: "Lists the authenticated user's actionable opportunities (discovered connections). Returns opportunity cards ready for display.\n\n" +
27
- "**What are opportunities?** Matches between users whose intents complement each other within shared networkes. " +
28
- "Each opportunity has a status: draft (not yet sent), pending (sent, awaiting response), accepted, rejected, or expired.\n\n" +
29
- "**What this returns:** Only draft and pending opportunities — the ones the user can still act on. " +
30
- "Accepted, rejected, and expired ones are not surfaced through this tool.\n\n" +
31
- "**When to use:** When the user wants to see their current matches or review what's waiting for their response.\n\n" +
32
- "**Returns:** Up to 3 opportunity code blocks (interactive cards) with counterpart name, match reasoning, confidence score, " +
33
- "and current status. Use update_opportunity to act on them (send, accept, reject).",
34
- querySchema: z.object({
35
- networkId: z
36
- .string()
37
- .optional()
38
- .describe("Network UUID to filter opportunities to a specific community. Get from read_networks. Defaults to the scoped network in network-scoped chats. Omit to see opportunities across all networks."),
39
- scopeType: z
40
- .enum(['intent'])
41
- .optional()
42
- .describe("Optional selected scope type. Use 'intent' to narrow listed opportunities to a selected intent."),
43
- scopeId: z
44
- .string()
45
- .optional()
46
- .describe("Selected intent UUID when scopeType is 'intent'. Ignored only when absent."),
47
- includeDigestMarkers: z
48
- .boolean()
49
- .optional()
50
- .describe("Internal scheduled-digest mode only. When true, includes hidden delivery markers so the digest send pass can confirm only edited-in opportunities."),
51
- }),
52
- handler: async ({ context, query }) => {
53
- const scopedNetworkId = focusedNetworkId(context) ?? context.networkId?.trim();
54
- const scopedIndexLabel = focusedNetworkLabel(context);
55
- // Strict scope enforcement: when chat is network-scoped, only allow that index
56
- if (scopedNetworkId &&
57
- query.networkId?.trim() &&
58
- query.networkId.trim() !== scopedNetworkId) {
59
- return error(`This chat is scoped to ${scopedIndexLabel}. You can only list opportunities from this community.`);
60
- }
61
- const effectiveIndexId = (scopedNetworkId || query.networkId?.trim()) ?? undefined;
62
- if (effectiveIndexId && !UUID_REGEX.test(effectiveIndexId)) {
63
- return error("Invalid network ID format.");
64
- }
65
- const contextIntentId = focusedIntentId(context);
66
- const rawScopeId = query.scopeId?.trim() || undefined;
67
- if (query.scopeType === 'intent' && !rawScopeId) {
68
- return error("scopeId required when scopeType is intent.");
69
- }
70
- if (!query.scopeType && rawScopeId) {
71
- return error("scopeType=intent required when scopeId is provided.");
72
- }
73
- if (rawScopeId && !UUID_REGEX.test(rawScopeId)) {
74
- return error("Invalid scope ID format.");
75
- }
76
- if (contextIntentId && rawScopeId && contextIntentId !== rawScopeId) {
77
- return error("This chat is scoped to a different intent.");
78
- }
79
- const effectiveIntentScope = contextIntentId
80
- ? { scopeType: 'intent', scopeId: contextIntentId }
81
- : query.scopeType === 'intent' && rawScopeId
82
- ? { scopeType: 'intent', scopeId: rawScopeId }
83
- : {};
84
- const selection = await selectOpportunityFeed({
85
- reader: database,
86
- deliveryLedger: deps.deliveryLedger,
87
- viewerId: context.userId,
88
- networkId: effectiveIndexId,
89
- intentScope: effectiveIntentScope,
90
- isMcp: context.isMcp === true,
91
- includeDigestMarkers: query.includeDigestMarkers,
92
- displayLimit: CHAT_DISPLAY_LIMIT,
93
- warn: (message, data) => logger.warn(message, data),
94
- });
95
- const { opportunities, dedupedCount, skippedIds, redeliveryIds, fetchedCount, isDigestMode } = selection;
96
- const buildListDebugSteps = () => {
97
- const steps = [];
98
- if (skippedIds.length > 0) {
99
- steps.push({
100
- step: "opportunity_display_skips",
101
- detail: `${skippedIds.length} opportunity card(s) couldn't be displayed`,
102
- data: {
103
- skippedCount: skippedIds.length,
104
- totalOpportunities: fetchedCount,
105
- skippedOpportunityIds: skippedIds,
106
- },
107
- });
108
- }
109
- return steps;
110
- };
111
- if (!opportunities || opportunities.length === 0) {
112
- if (skippedIds.length > 0) {
113
- const listDebugSteps = buildListDebugSteps();
114
- return success({
115
- found: false,
116
- count: 0,
117
- summary: "Some opportunities couldn't be displayed",
118
- message: "I found opportunities, but couldn't render them. Please try again.",
119
- ...(listDebugSteps.length ? { debugSteps: listDebugSteps } : {}),
120
- });
121
- }
122
- // Digest mode: distinguish "everything was already shown" from "nothing
123
- // exists" so the brief omits the people section instead of prompting
124
- // the user to run discovery.
125
- if (isDigestMode && dedupedCount > 0) {
126
- return success({
127
- found: false,
128
- count: 0,
129
- summary: "No new opportunities to show",
130
- message: "No new opportunities today — everything actionable has already been shown recently. Omit the people section from the digest.",
131
- });
132
- }
133
- return success({
134
- found: false,
135
- count: 0,
136
- summary: "No opportunities yet",
137
- message: "You have no opportunities yet. Create or refine an approved signal with create_intent or update_intent; matches are created in the background. Use list_opportunities later to review persisted results.",
138
- });
139
- }
140
- // Batch-fetch profiles and users for all counterpart and introducer userIds to avoid N+1
141
- const counterpartUserIds = new Set();
142
- const introducerUserIds = new Set();
143
- for (const opp of opportunities) {
144
- const counterpartActor = opp.actors.find((a) => a.userId !== context.userId && a.role !== "introducer");
145
- if (counterpartActor?.userId)
146
- counterpartUserIds.add(counterpartActor.userId);
147
- const introducerActor = opp.actors.find((a) => a.role === "introducer" && a.userId !== context.userId);
148
- if (introducerActor?.userId)
149
- introducerUserIds.add(introducerActor.userId);
150
- }
151
- const allUserIds = [
152
- ...new Set([...counterpartUserIds, ...introducerUserIds]),
153
- ];
154
- const [profileResults, userResults] = await Promise.all([
155
- Promise.all(allUserIds.map((id) => database.getProfile(id))),
156
- Promise.all(allUserIds.map((id) => database.getUser(id))),
157
- ]);
158
- const profileMap = new Map();
159
- const userMap = new Map();
160
- allUserIds.forEach((userId, i) => {
161
- const profile = profileResults[i] ?? null;
162
- const user = userResults[i] ?? null;
163
- if (profile)
164
- profileMap.set(userId, profile);
165
- if (user)
166
- userMap.set(userId, user);
167
- });
168
- const cardDataList = [];
169
- const seenOpportunityIds = new Set();
170
- if (isDigestMode) {
171
- // ── Digest mode: use LLM presenter for rich, second-person card text ──
172
- const presenter = createOpportunityPresenter();
173
- const presenterDb = database;
174
- const PRESENTER_CONCURRENCY = 6;
175
- for (let i = 0; i < opportunities.length; i += PRESENTER_CONCURRENCY) {
176
- const chunk = opportunities.slice(i, i + PRESENTER_CONCURRENCY);
177
- const chunkCards = await Promise.all(chunk.map(async (opp) => {
178
- if (seenOpportunityIds.has(opp.id))
179
- return null;
180
- seenOpportunityIds.add(opp.id);
181
- try {
182
- const counterpartActor = opp.actors.find((a) => a.userId !== context.userId && a.role !== "introducer");
183
- const counterpartUserId = counterpartActor?.userId;
184
- if (!counterpartUserId)
185
- return null;
186
- const viewerIsIntroducerHere = opp.actors.some((a) => a.role === "introducer" && a.userId === context.userId);
187
- const secondPartyActorForHeadline = viewerIsIntroducerHere
188
- ? opp.actors.find((a) => a.userId !== context.userId &&
189
- a.userId !== counterpartUserId &&
190
- a.role !== "introducer")
191
- : undefined;
192
- const introducerActor = opp.actors.find((a) => a.role === "introducer" && a.userId !== context.userId);
193
- const createdByName = opp.detection.createdByName;
194
- const counterpartUser = userMap.get(counterpartUserId) ?? null;
195
- const counterpartName = profileMap.get(counterpartUserId)?.identity?.name ??
196
- counterpartUser?.name ??
197
- "Someone";
198
- const introducerName = createdByName ??
199
- (introducerActor
200
- ? (profileMap.get(introducerActor.userId)?.identity?.name ?? null)
201
- : null);
202
- const introducerUser = introducerActor
203
- ? userMap.get(introducerActor.userId) ?? null
204
- : null;
205
- const secondPartyUser = secondPartyActorForHeadline
206
- ? userMap.get(secondPartyActorForHeadline.userId) ?? null
207
- : null;
208
- const secondPartyNameForHeadline = secondPartyActorForHeadline
209
- ? (profileMap.get(secondPartyActorForHeadline.userId)?.identity?.name ??
210
- secondPartyUser?.name ??
211
- undefined)
212
- : undefined;
213
- const viewerActor = opp.actors.find((a) => a.userId === context.userId);
214
- const viewerRole = viewerActor?.role ?? "party";
215
- try {
216
- // Load the negotiation context alongside presenter context so
217
- // the digest copy can explain *why* the opportunity surfaced
218
- // (EDG-50) — the presenter grounds `digestSummary` in concrete
219
- // negotiation turns when this is present. The same context
220
- // yields the conversationId for the negotiation-trace link
221
- // (EDG-51).
222
- const [ctx, negotiationContext] = await Promise.all([
223
- gatherOpportunityPresenterContext(presenterDb, opp, context.userId, counterpartUserId),
224
- loadNegotiationContext(deps.negotiationDatabase, opp.id, opp.status),
225
- ]);
226
- const presentation = await presenter.presentCard({
227
- ...ctx,
228
- opportunityStatus: opp.status,
229
- ...(negotiationContext ? { negotiationContext } : {}),
230
- });
231
- const negotiationUrl = buildNegotiationUrl(negotiationContext?.conversationId, deps.frontendUrl);
232
- // Build narrator chip from presenter output
233
- let narratorChip;
234
- const introducerIsCounterpart = introducerActor && counterpartActor && introducerActor.userId === counterpartActor.userId;
235
- if (introducerActor && introducerActor.userId !== context.userId && !introducerIsCounterpart) {
236
- const narratorName = introducerName?.trim() || "Someone";
237
- narratorChip = {
238
- name: narratorName,
239
- text: stripLeadingNarratorName(presentation.narratorRemark, narratorName),
240
- avatar: introducerUser?.avatar ?? null,
241
- userId: introducerActor.userId,
242
- };
243
- }
244
- else if (introducerActor?.userId === context.userId) {
245
- narratorChip = { name: "You", text: presentation.narratorRemark, userId: context.userId };
246
- }
247
- else {
248
- narratorChip = { name: "Index", text: presentation.narratorRemark };
249
- }
250
- const card = {
251
- opportunityId: opp.id,
252
- userId: counterpartUserId,
253
- name: counterpartName,
254
- avatar: counterpartUser?.avatar ?? null,
255
- mainText: stripUuids(presentation.personalizedSummary),
256
- digestSummary: stripUuids(presentation.digestSummary),
257
- // Deep-link to the negotiation trace that produced this card
258
- // (EDG-51). Only present when a negotiation conversation exists.
259
- ...(negotiationUrl ? { negotiationUrl } : {}),
260
- cta: presentation.suggestedAction,
261
- headline: viewerIsIntroducerHere && secondPartyNameForHeadline
262
- ? `${counterpartName} → ${secondPartyNameForHeadline}`
263
- : presentation.headline,
264
- primaryActionLabel: getPrimaryActionLabel(viewerRole),
265
- secondaryActionLabel: SECONDARY_ACTION_LABEL,
266
- mutualIntentsLabel: presentation.mutualIntentsLabel,
267
- narratorChip,
268
- viewerRole,
269
- score: typeof opp.interpretation?.confidence === "number"
270
- ? opp.interpretation.confidence
271
- : undefined,
272
- status: opp.status,
273
- ...(redeliveryIds.has(opp.id) ? { redelivery: true } : {}),
274
- ...(viewerIsIntroducerHere && secondPartyNameForHeadline
275
- ? {
276
- secondParty: {
277
- name: secondPartyNameForHeadline,
278
- ...(secondPartyUser?.avatar != null ? { avatar: secondPartyUser.avatar } : {}),
279
- ...(secondPartyActorForHeadline?.userId ? { userId: secondPartyActorForHeadline.userId } : {}),
280
- },
281
- }
282
- : {}),
283
- };
284
- // Attach the agent-facing profile and opportunity links for
285
- // MCP callers
286
- if (context.isMcp) {
287
- attachProfileLink(card, {
288
- counterpartUserId,
289
- frontendUrl: deps.frontendUrl,
290
- });
291
- attachOpportunityAppLink(card, {
292
- frontendUrl: deps.frontendUrl,
293
- });
294
- }
295
- return card;
296
- }
297
- catch (presenterErr) {
298
- logger.warn("LLM presenter failed for list_opportunities digest card, skipping raw fallback", {
299
- opportunityId: opp.id,
300
- err: presenterErr,
301
- });
302
- // Scheduled digests should only surface OpportunityPresenter-rendered
303
- // copy. The minimal fallback reuses evaluator reasoning, which can
304
- // contain raw narrator phrasing (for example "The discoverer...")
305
- // and is not suitable for AgentVillage morning briefs.
306
- skippedIds.push(opp.id);
307
- return null;
308
- }
309
- }
310
- catch (err) {
311
- logger.warn("Skipping opportunity that failed to build card", {
312
- opportunityId: opp.id,
313
- err,
314
- });
315
- skippedIds.push(opp.id);
316
- return null;
317
- }
318
- }));
319
- for (const card of chunkCards) {
320
- if (card)
321
- cardDataList.push(card);
322
- }
323
- }
324
- }
325
- else {
326
- // ── Chat/list mode: use OpportunityPresenter for user-facing card copy ──
327
- const presenter = createOpportunityPresenter();
328
- const presenterDb = database;
329
- const PRESENTER_CONCURRENCY = 6;
330
- for (let i = 0; i < opportunities.length; i += PRESENTER_CONCURRENCY) {
331
- const chunk = opportunities.slice(i, i + PRESENTER_CONCURRENCY);
332
- const chunkCards = await Promise.all(chunk.map(async (opp) => {
333
- if (seenOpportunityIds.has(opp.id))
334
- return null;
335
- seenOpportunityIds.add(opp.id);
336
- try {
337
- const counterpartActor = opp.actors.find((a) => a.userId !== context.userId && a.role !== "introducer");
338
- const counterpartUserId = counterpartActor?.userId;
339
- if (!counterpartUserId)
340
- return null;
341
- const viewerIsIntroducerHere = opp.actors.some((a) => a.role === "introducer" && a.userId === context.userId);
342
- const secondPartyActorForHeadline = viewerIsIntroducerHere
343
- ? opp.actors.find((a) => a.userId !== context.userId &&
344
- a.userId !== counterpartUserId &&
345
- a.role !== "introducer")
346
- : undefined;
347
- const introducerActor = opp.actors.find((a) => a.role === "introducer" && a.userId !== context.userId);
348
- const createdByName = opp.detection.createdByName;
349
- const counterpartProfile = profileMap.get(counterpartUserId) ?? null;
350
- const counterpartUser = userMap.get(counterpartUserId) ?? null;
351
- const introducerProfile = introducerActor && !createdByName
352
- ? profileMap.get(introducerActor.userId) ?? null
353
- : null;
354
- const counterpartName = counterpartProfile?.identity?.name ??
355
- counterpartUser?.name ??
356
- "Someone";
357
- const introducerName = createdByName ??
358
- (introducerActor ? introducerProfile?.identity?.name ?? null : null);
359
- const introducerUser = introducerActor
360
- ? userMap.get(introducerActor.userId) ?? null
361
- : null;
362
- const secondPartyUser = secondPartyActorForHeadline
363
- ? userMap.get(secondPartyActorForHeadline.userId) ?? null
364
- : null;
365
- const secondPartyNameForHeadline = secondPartyActorForHeadline
366
- ? (profileMap.get(secondPartyActorForHeadline.userId)?.identity?.name ??
367
- secondPartyUser?.name ??
368
- undefined)
369
- : undefined;
370
- const viewerActor = opp.actors.find((a) => a.userId === context.userId);
371
- const viewerRole = viewerActor?.role ?? "party";
372
- const [ctx, negotiationContext] = await Promise.all([
373
- gatherOpportunityPresenterContext(presenterDb, opp, context.userId, counterpartUserId),
374
- loadNegotiationContext(deps.negotiationDatabase, opp.id, opp.status),
375
- ]);
376
- const presentation = await presenter.presentCard({
377
- ...ctx,
378
- opportunityStatus: opp.status,
379
- ...(negotiationContext ? { negotiationContext } : {}),
380
- });
381
- let narratorChip;
382
- const introducerIsCounterpart = introducerActor && counterpartActor && introducerActor.userId === counterpartActor.userId;
383
- if (introducerActor && introducerActor.userId !== context.userId && !introducerIsCounterpart) {
384
- const narratorName = introducerName?.trim() || "Someone";
385
- narratorChip = {
386
- name: narratorName,
387
- text: stripLeadingNarratorName(presentation.narratorRemark, narratorName),
388
- avatar: introducerUser?.avatar ?? null,
389
- userId: introducerActor.userId,
390
- };
391
- }
392
- else if (introducerActor?.userId === context.userId) {
393
- narratorChip = { name: "You", text: presentation.narratorRemark, userId: context.userId };
394
- }
395
- else {
396
- narratorChip = { name: "Index", text: presentation.narratorRemark };
397
- }
398
- const cardData = {
399
- opportunityId: opp.id,
400
- userId: counterpartUserId,
401
- name: counterpartName,
402
- avatar: counterpartUser?.avatar ?? null,
403
- mainText: stripUuids(presentation.personalizedSummary),
404
- cta: presentation.suggestedAction,
405
- headline: viewerIsIntroducerHere && secondPartyNameForHeadline
406
- ? `${counterpartName} → ${secondPartyNameForHeadline}`
407
- : presentation.headline,
408
- primaryActionLabel: getPrimaryActionLabel(viewerRole),
409
- secondaryActionLabel: SECONDARY_ACTION_LABEL,
410
- mutualIntentsLabel: presentation.mutualIntentsLabel,
411
- narratorChip,
412
- viewerRole,
413
- score: typeof opp.interpretation?.confidence === "number"
414
- ? opp.interpretation.confidence
415
- : undefined,
416
- status: opp.status,
417
- ...(viewerIsIntroducerHere && secondPartyNameForHeadline
418
- ? {
419
- secondParty: {
420
- name: secondPartyNameForHeadline,
421
- ...(secondPartyUser?.avatar != null ? { avatar: secondPartyUser.avatar } : {}),
422
- ...(secondPartyActorForHeadline?.userId ? { userId: secondPartyActorForHeadline.userId } : {}),
423
- },
424
- }
425
- : {}),
426
- };
427
- // For MCP callers, attach the agent-facing profile link and the
428
- // opportunity deep link so the agent never has to fabricate
429
- // either. Accepting still happens in the Index app behind an
430
- // authenticated call — the deep link only opens the card.
431
- if (context.isMcp) {
432
- attachProfileLink(cardData, {
433
- counterpartUserId,
434
- frontendUrl: deps.frontendUrl,
435
- });
436
- attachOpportunityAppLink(cardData, {
437
- frontendUrl: deps.frontendUrl,
438
- });
439
- }
440
- return cardData;
441
- }
442
- catch (err) {
443
- logger.warn("Skipping opportunity that failed to build presenter card", {
444
- opportunityId: opp.id,
445
- err,
446
- });
447
- skippedIds.push(opp.id);
448
- return null;
449
- }
450
- }));
451
- for (const card of chunkCards) {
452
- if (card)
453
- cardDataList.push(card);
454
- }
455
- }
456
- }
457
- const listDebugSteps = buildListDebugSteps();
458
- if (cardDataList.length === 0) {
459
- if (skippedIds.length > 0) {
460
- return success({
461
- found: false,
462
- count: 0,
463
- summary: "Some opportunities couldn't be displayed",
464
- message: "I found opportunities, but couldn't render them. Please try again.",
465
- ...(listDebugSteps.length ? { debugSteps: listDebugSteps } : {}),
466
- });
467
- }
468
- return success({
469
- found: false,
470
- count: 0,
471
- summary: "No opportunities yet",
472
- message: "You have no opportunities yet. Create or refine an approved signal with create_intent or update_intent; matches are created in the background. Use list_opportunities later to review persisted results.",
473
- });
474
- }
475
- return success({
476
- found: true,
477
- count: cardDataList.length,
478
- summary: `You have ${cardDataList.length} opportunity(ies)`,
479
- message: buildOpportunityPresentation(cardDataList, {
480
- isMcp: context.isMcp ?? false,
481
- leadIn: `You have ${cardDataList.length} opportunity(ies).`,
482
- includeDigestMarkers: context.isMcp === true && query.includeDigestMarkers === true,
483
- }),
484
- ...(listDebugSteps.length ? { debugSteps: listDebugSteps } : {}),
485
- });
486
- },
487
- });
488
- return listOpportunities;
489
- }
@@ -1,16 +0,0 @@
1
- import type { ToolRegistryCompositionDeps } from "../shared/agent/tool.helpers.js";
2
- import type { OpportunityOwnerApprovalAuthority } from "./opportunity.owner-approval.js";
3
- /**
4
- * IND-593 host authority consumed only by the opportunity mutation boundary.
5
- *
6
- * This stays capability-local rather than extending the shared registry shape:
7
- * the shared helper participates in the negotiations/question architecture
8
- * cycle, while owner approval belongs to the opportunity composition seam.
9
- */
10
- export interface OpportunityOwnerApprovalDeps {
11
- opportunityOwnerApproval?: OpportunityOwnerApprovalAuthority;
12
- }
13
- /** Host capabilities consumed by opportunity discovery, delivery, and presentation tools. */
14
- export type OpportunityToolDeps = Pick<ToolRegistryCompositionDeps, "database" | "userDb" | "systemDb" | "cache" | "chatSummary" | "opportunityPresentation" | "questionerEnqueue" | "negotiationSummary" | "negotiationDatabase" | "deliveryLedger" | "frontendUrl" | "stampNewbornOpportunities" | "reportToolError" | "opportunityOperations"> & OpportunityOwnerApprovalDeps & {
15
- graphs: Pick<ToolRegistryCompositionDeps["graphs"], "index" | "networkMembership" | "opportunity">;
16
- };