@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,631 +0,0 @@
1
- /**
2
- * MCP Server Factory — creates an McpServer instance with all protocol tools
3
- * registered from the existing tool registry. Each tool invocation resolves
4
- * auth from the HTTP request, builds a ResolvedToolContext, and delegates
5
- * to the raw tool handler.
6
- */
7
- import { z } from 'zod';
8
- import { McpServer, fromJsonSchema } from '@modelcontextprotocol/server';
9
- import { McpResolvedIdentitySchema } from '../shared/schemas/mcp-auth.schema.js';
10
- import { CANONICAL_GUIDANCE_SUMMARY } from '../shared/agent/canonical-guidance.js';
11
- import { resolveChatContext } from '../shared/agent/tool.helpers.js';
12
- import { deriveAllowedNetworkIds, scopeFromNetworkId } from '../shared/agent/tool.scope.js';
13
- import { createToolRegistry } from '../shared/agent/tool.registry.js';
14
- import { bindOwnerApprovalProvenance } from '../opportunities/opportunity.owner-provenance.js';
15
- import { ToolRuntimeError, invokeToolRuntime, toolRuntimeErrorToResult } from '../shared/agent/tool.runtime.js';
16
- import { protocolLogger } from '../shared/observability/protocol.logger.js';
17
- import { buildMcpAuthorizationDenialEvent, McpCapabilityPolicy, ONBOARDING_ALLOWED, resolveMcpActivityCaller, resolveMcpCapabilitySubject } from './mcp.authorization-policy.js';
18
- const logger = protocolLogger('McpServer');
19
- const mcpToolMetadataCache = new Map();
20
- /**
21
- * Builds a cache key from registry-shaping dependency booleans.
22
- * When a feature flag changes the tool set, the cache key changes so
23
- * the cached metadata set is automatically invalidated.
24
- */
25
- export function getMcpToolMetadataCacheKey(deps) {
26
- // Contact tools are omitted from the MCP surface entirely (IND-596), so no
27
- // contacts-related input can change the MCP tool set.
28
- return [
29
- `chat:${deps.chatSession ? '1' : '0'}`,
30
- `agent:${deps.agentDatabase ? '1' : '0'}`,
31
- `negotiation:${deps.agentDispatcher ? '1' : '0'}`,
32
- `questioner:${deps.questionerEnqueue ? '1' : '0'}`,
33
- ].join('|');
34
- }
35
- /**
36
- * Clears the metadata cache. Used in tests to ensure fresh state between cases.
37
- */
38
- export function clearMcpToolMetadataCacheForTests() {
39
- mcpToolMetadataCache.clear();
40
- }
41
- /**
42
- * Returns cached (or builds and caches) static MCP tool registration metadata.
43
- * The first call per cache key runs the full registry creation + schema
44
- * conversion; subsequent calls return the cached metadata array for the same
45
- * registry-shaping dependency profile.
46
- *
47
- * Does NOT store tool handlers — those remain request-scoped because they
48
- * capture per-request userDb/systemDb.
49
- */
50
- export function getCachedMcpToolMetadata(deps) {
51
- const cacheKey = getMcpToolMetadataCacheKey(deps);
52
- const cached = mcpToolMetadataCache.get(cacheKey);
53
- if (cached)
54
- return cached;
55
- const registry = createToolRegistry(deps, { surface: 'mcp' });
56
- const metadata = Array.from(registry.values()).map((toolDef) => {
57
- const jsonSchema = zodToJsonSchema(toolDef.schema);
58
- return {
59
- name: toolDef.name,
60
- description: toolDef.description,
61
- schema: toolDef.schema,
62
- jsonSchema,
63
- inputSchema: fromJsonSchema(jsonSchema),
64
- };
65
- });
66
- mcpToolMetadataCache.set(cacheKey, metadata);
67
- logger.verbose('MCP tool metadata cached', { toolCount: metadata.length, cacheKey });
68
- return metadata;
69
- }
70
- function isExpectedMcpAuthError(message) {
71
- return message.includes('Authentication required') ||
72
- message.includes('Invalid API key') ||
73
- message.includes('Invalid or expired access token') ||
74
- message.includes('JWT payload missing user ID');
75
- }
76
- /**
77
- * Runtime/auth failures are converted into structured MCP `isError` tool
78
- * results for the caller. Reporting them as application exceptions produces
79
- * Sentry noise for expected client failures and policy-enforced timeouts.
80
- */
81
- export function shouldReportMcpToolError(err) {
82
- if (err instanceof ToolRuntimeError)
83
- return false;
84
- const message = err instanceof Error ? err.message : String(err);
85
- return !isExpectedMcpAuthError(message);
86
- }
87
- // ═══════════════════════════════════════════════════════════════════════════════
88
- // ZOD 3 → JSON SCHEMA CONVERSION
89
- // ═══════════════════════════════════════════════════════════════════════════════
90
- /**
91
- * Minimal Zod-to-JSON-Schema conversion for MCP tool registration.
92
- * Converts Zod 3.x schemas to plain JSON Schema objects that can be
93
- * wrapped with `fromJsonSchema()` for MCP SDK compatibility.
94
- */
95
- function zodToJsonSchema(schema) {
96
- if (schema instanceof z.ZodObject) {
97
- const shape = schema.shape;
98
- const properties = {};
99
- const required = [];
100
- for (const [key, value] of Object.entries(shape)) {
101
- const zodValue = value;
102
- properties[key] = zodToJsonSchema(zodValue);
103
- if (!(zodValue instanceof z.ZodOptional) && !(zodValue instanceof z.ZodDefault)) {
104
- required.push(key);
105
- }
106
- }
107
- return { type: 'object', properties, ...(required.length ? { required } : {}) };
108
- }
109
- if (schema instanceof z.ZodString) {
110
- const result = { type: 'string' };
111
- // Detect .url(), .email(), .uuid() etc. via Zod's internal checks array
112
- const checks = schema._def?.checks;
113
- if (checks) {
114
- for (const check of checks) {
115
- if (check.kind === 'url')
116
- result.format = 'uri';
117
- else if (check.kind === 'email')
118
- result.format = 'email';
119
- else if (check.kind === 'uuid')
120
- result.format = 'uuid';
121
- else if (check.kind === 'datetime')
122
- result.format = 'date-time';
123
- }
124
- }
125
- return result;
126
- }
127
- if (schema instanceof z.ZodNumber) {
128
- const checks = schema._def?.checks;
129
- const result = { type: 'number' };
130
- if (checks) {
131
- for (const check of checks) {
132
- if (check.kind === 'int')
133
- result.type = 'integer';
134
- else if (check.kind === 'min')
135
- result.minimum = check.value;
136
- else if (check.kind === 'max')
137
- result.maximum = check.value;
138
- }
139
- }
140
- return result;
141
- }
142
- if (schema instanceof z.ZodBoolean)
143
- return { type: 'boolean' };
144
- if (schema instanceof z.ZodArray) {
145
- return { type: 'array', items: zodToJsonSchema(schema.element) };
146
- }
147
- if (schema instanceof z.ZodOptional) {
148
- return zodToJsonSchema(schema.unwrap());
149
- }
150
- if (schema instanceof z.ZodDefault) {
151
- return zodToJsonSchema(schema.removeDefault());
152
- }
153
- if (schema instanceof z.ZodEnum) {
154
- return { type: 'string', enum: schema.options };
155
- }
156
- if (schema instanceof z.ZodNullable) {
157
- const inner = zodToJsonSchema(schema.unwrap());
158
- return { ...inner, nullable: true };
159
- }
160
- if (schema instanceof z.ZodRecord) {
161
- return { type: 'object', additionalProperties: true };
162
- }
163
- return { type: 'object' };
164
- }
165
- // ═══════════════════════════════════════════════════════════════════════════════
166
- // RESULT POST-PROCESSING
167
- // ═══════════════════════════════════════════════════════════════════════════════
168
- /**
169
- * Strips internal `_`-prefixed keys from `data` and promotes `isError`
170
- * from the inner `success: false` signal to the MCP envelope level.
171
- * Fail-open: if JSON parsing throws, returns the original text with isError: false.
172
- */
173
- export function sanitizeMcpResult(text) {
174
- try {
175
- const parsed = JSON.parse(text);
176
- if (parsed &&
177
- typeof parsed === 'object' &&
178
- parsed.data &&
179
- typeof parsed.data === 'object' &&
180
- !Array.isArray(parsed.data)) {
181
- for (const key of Object.keys(parsed.data)) {
182
- if (key.startsWith('_') || key === 'debugSteps') {
183
- delete parsed.data[key];
184
- }
185
- }
186
- }
187
- const isError = parsed?.success === false;
188
- return { text: JSON.stringify(parsed), isError };
189
- }
190
- catch {
191
- return { text, isError: false };
192
- }
193
- }
194
- /**
195
- * Promotes a network-scoped agent's bound network into the resolved tool
196
- * context as the implicit chat scope. Every tool derives its focused network
197
- * from the `scopeType`/`scopeId` envelope; without this step scoped API-key
198
- * calls would still resolve an unscoped/global view.
199
- *
200
- * No-op when there is no scope, or when an explicit scope is already set
201
- * (a user-driven network-scoped chat must keep precedence over the agent
202
- * binding — which would be a strict subset anyway, since the API key cannot
203
- * reach beyond its bound network).
204
- */
205
- export const applyNetworkScopeToContext = (context, networkScopeId) => {
206
- if (!networkScopeId)
207
- return;
208
- if (context.scopeType && context.scopeId)
209
- return;
210
- const scope = scopeFromNetworkId(networkScopeId);
211
- context.scopeType = scope.scopeType;
212
- context.scopeId = scope.scopeId;
213
- const bound = context.userNetworks.find((m) => m.networkId === networkScopeId);
214
- if (!bound)
215
- return;
216
- context.indexName = bound.networkTitle;
217
- context.scopedIndex = {
218
- id: bound.networkId,
219
- title: bound.networkTitle,
220
- prompt: bound.indexPrompt ?? null,
221
- };
222
- const isOwner = bound.permissions?.includes('owner') ?? false;
223
- context.scopedMembershipRole = isOwner ? 'owner' : 'member';
224
- context.isOwner = isOwner;
225
- };
226
- export { ONBOARDING_ALLOWED } from './mcp.authorization-policy.js';
227
- /**
228
- * Builds the onboarding gate message for REST Tool API callers. Condensed
229
- * from the chat onboarding flow into a 6-step tool-error guide. MCP does
230
- * not use this gate.
231
- */
232
- export function buildMcpOnboardingMessage(ctx) {
233
- const nameStep = ctx.hasName
234
- ? `1. Greet the user and confirm their name ("You're ${ctx.userName}, right?").`
235
- : `1. Ask the user for their name and a short self-description.`;
236
- const communityStep = ctx.networkId
237
- ? `4. (Skipped — user is already in "${ctx.indexName ?? 'their community'}".)`
238
- : `4. Call read_networks() and let the user pick communities to join via create_network_membership(networkId=...).`;
239
- const allowedList = Array.from(ONBOARDING_ALLOWED).join(', ');
240
- return (`This user has not completed onboarding. You must guide them through setup before they can use other tools. ` +
241
- `Only the following tools are available until onboarding is complete: ` +
242
- `${allowedList}.\n\n` +
243
- `Onboarding flow:\n` +
244
- `${nameStep}\n` +
245
- `2. Call preview_user_context(...). If it returns profileRunId, poll get_enrichment_run(profileRunId=...) until status is succeeded, then use its result as the draft.\n` +
246
- `3. Present the profile draft and ask "Does that look right?" On approval/correction, call confirm_user_context(...).\n` +
247
- `${communityStep}\n` +
248
- `5. Ask what the user is looking for and call create_intent(description="...", autoApprove=true) so the first signal is persisted.\n` +
249
- `6. Call complete_onboarding() to finish setup. Discovery is optional after onboarding, never mandatory.`);
250
- }
251
- /**
252
- * Creates an MCP server with all protocol tools registered.
253
- * Tools resolve auth per-request via the HTTP request available in ServerContext.
254
- *
255
- * @param deps - Shared tool dependencies (graphs, database, embedder, etc.)
256
- * @param authResolver - Resolves authenticated identity from the HTTP request
257
- * @param scopedDepsFactory - Factory for creating per-request scoped databases
258
- * @returns A configured McpServer ready to be connected to a transport
259
- */
260
- function createMcpTraceEmitter(toolName, ctx) {
261
- const token = ctx.mcpReq._meta?.progressToken;
262
- if (typeof token !== 'string' && typeof token !== 'number')
263
- return undefined;
264
- let progress = 0;
265
- return (event) => {
266
- progress += 1;
267
- const message = (() => {
268
- if (event.type === 'graph_start')
269
- return `${toolName}: ${event.name} started`;
270
- if (event.type === 'graph_end')
271
- return `${toolName}: ${event.name} finished${event.durationMs != null ? ` in ${event.durationMs}ms` : ''}`;
272
- if (event.type === 'agent_start')
273
- return `${toolName}: ${event.name} agent started`;
274
- if (event.type === 'agent_end')
275
- return `${toolName}: ${event.name} agent finished${event.durationMs != null ? ` in ${event.durationMs}ms` : ''}`;
276
- return `${toolName}: progress`;
277
- })();
278
- const notification = {
279
- method: 'notifications/progress',
280
- params: { progressToken: token, progress, message },
281
- };
282
- void ctx.mcpReq.notify(notification).catch((err) => {
283
- logger.debug('Failed to send MCP progress notification', {
284
- toolName,
285
- error: err instanceof Error ? err.message : String(err),
286
- });
287
- });
288
- };
289
- }
290
- export const MCP_INSTRUCTIONS = `
291
- ${CANONICAL_GUIDANCE_SUMMARY}
292
-
293
- # Voice & Output Rules
294
- Calm, analytical, concise. Say "signal" not "intent", "community" not "index". Never use "search" — use "discover" or "find". Banned: leverage, optimize, unlock, scale, disrupt, AI-powered, act fast.
295
-
296
- NEVER dump raw JSON or expose IDs (except actionable ones like conversationId). Synthesize in natural language; surface top 1–3 points unless asked for full list. Fabricate nothing.
297
-
298
- # Authentication & Opportunity Lifecycle
299
- API key in \`x-api-key\` header. Opportunities: draft → pending → accepted/rejected. Agent acceptance ≠ owner approval. Only call update_opportunity with accepted after explicit user confirmation.
300
-
301
- # Tool Guidance
302
- Read each tool's description for usage rules (when, prerequisites, follow-ups). Tools contain workflow patterns.
303
-
304
- `.trim();
305
- /**
306
- * Extracts a Bearer token from an HTTP Authorization header.
307
- */
308
- export function extractBearerToken(req) {
309
- const authHeader = req.headers.get('Authorization');
310
- if (!authHeader)
311
- return undefined;
312
- const [scheme, token] = authHeader.trim().split(/\s+/, 2);
313
- if (scheme?.toLowerCase() === 'bearer' && token)
314
- return token;
315
- return undefined;
316
- }
317
- export function createMcpServer(deps, authResolver, scopedDepsFactory, policyOptions = {}, authorizationObserver) {
318
- const server = new McpServer({ name: 'index-network', version: '1.0.0' }, { instructions: MCP_INSTRUCTIONS });
319
- const toolMetadata = getCachedMcpToolMetadata(deps);
320
- const capabilityPolicy = new McpCapabilityPolicy(policyOptions);
321
- // Fail-closed authorization observability: emit a safe, secret-free denial
322
- // event at the host boundary. Never let an observer failure change the
323
- // decision or surface a credential — the denial stands regardless.
324
- const observeDenial = (input) => {
325
- if (!authorizationObserver)
326
- return;
327
- try {
328
- authorizationObserver.onCapabilityDenied(buildMcpAuthorizationDenialEvent(input));
329
- }
330
- catch (err) {
331
- logger.debug('MCP authorization observer threw — ignoring', {
332
- toolName: input.toolName,
333
- error: err instanceof Error ? err.message : String(err),
334
- });
335
- }
336
- };
337
- // Both snapshots are scoped to this MCP server/connection. Permission
338
- // changes therefore apply only after the caller reconnects or refreshes
339
- // its session. They are never shared with the static tool metadata cache,
340
- // so a different server/principal cannot inherit decisions.
341
- let authenticatedRequest;
342
- let resolvedRequest;
343
- const extractAuthInput = (httpReq) => ({
344
- bearerToken: extractBearerToken(httpReq),
345
- apiKey: httpReq.headers.get('x-api-key') ?? undefined,
346
- telegramHandle: httpReq.headers.get('x-index-telegram-handle') ?? undefined,
347
- telegramUsername: httpReq.headers.get('x-index-telegram-username') ?? undefined,
348
- });
349
- const getAuthenticatedRequest = (httpReq) => {
350
- if (authenticatedRequest)
351
- return authenticatedRequest;
352
- authenticatedRequest = (async () => {
353
- const identity = McpResolvedIdentitySchema.parse(await authResolver.resolveIdentity(extractAuthInput(httpReq)));
354
- const agentRecord = identity.agentId
355
- ? await deps.agentDatabase?.getAgentWithRelations(identity.agentId) ?? null
356
- : null;
357
- const agent = agentRecord
358
- ? {
359
- id: agentRecord.id,
360
- ownerId: agentRecord.ownerId,
361
- type: agentRecord.type,
362
- status: agentRecord.status,
363
- permissions: agentRecord.permissions.map((permission) => ({
364
- agentId: permission.agentId,
365
- userId: permission.userId,
366
- scope: permission.scope,
367
- scopeId: permission.scopeId,
368
- actions: [...permission.actions],
369
- })),
370
- }
371
- : null;
372
- return {
373
- identity,
374
- agent,
375
- // This snapshot is sufficient to reject forged/hidden calls before
376
- // resolving chat context.
377
- preliminarySubject: resolveMcpCapabilitySubject({
378
- identity,
379
- agent,
380
- }),
381
- };
382
- })();
383
- return authenticatedRequest;
384
- };
385
- const getResolvedRequest = (httpReq) => {
386
- if (resolvedRequest)
387
- return resolvedRequest;
388
- resolvedRequest = (async () => {
389
- const authenticated = await getAuthenticatedRequest(httpReq);
390
- const context = await resolveChatContext({
391
- database: deps.database,
392
- userId: authenticated.identity.userId,
393
- });
394
- context.isMcp = true;
395
- if (authenticated.identity.agentId) {
396
- context.agentId = authenticated.identity.agentId;
397
- }
398
- // Trusted provenance seam (IND-593): only the server-resolved session
399
- // identity — never a caller-supplied field — marks a direct MCP owner
400
- // interaction for the opportunity owner-approval boundary. The
401
- // capability-local extension deliberately keeps this field out of the
402
- // shared helper's negotiations/question cycle.
403
- bindOwnerApprovalProvenance(context, {
404
- surface: 'mcp',
405
- sessionAuthenticated: authenticated.identity.isSessionAuth === true,
406
- });
407
- applyNetworkScopeToContext(context, authenticated.identity.networkScopeId);
408
- const subject = resolveMcpCapabilitySubject({
409
- identity: authenticated.identity,
410
- agent: authenticated.agent,
411
- });
412
- // Bind the typed resolved caller context so tools with
413
- // permission-projected output (read_activity_summary) can apply the
414
- // centralized projection without re-deriving principal state.
415
- context.mcpCaller = resolveMcpActivityCaller(subject);
416
- return {
417
- ...authenticated,
418
- context,
419
- subject,
420
- };
421
- })();
422
- return resolvedRequest;
423
- };
424
- const capabilityDeniedResult = (_decision) => {
425
- const message = 'This capability is not available to the authenticated principal. Reconnect or refresh the session after an administrator changes permissions.';
426
- return {
427
- content: [{
428
- type: 'text',
429
- text: JSON.stringify({
430
- error: 'Capability not authorized',
431
- code: 'MCP_CAPABILITY_DENIED',
432
- message,
433
- }),
434
- }],
435
- isError: true,
436
- };
437
- };
438
- for (const toolDef of toolMetadata) {
439
- const toolName = toolDef.name;
440
- server.registerTool(toolName, {
441
- description: toolDef.description,
442
- inputSchema: toolDef.inputSchema,
443
- }, async (args, ctx) => {
444
- let reportDeps = deps;
445
- let reportUserId;
446
- let reportContext;
447
- try {
448
- // Extract the original HTTP request from the MCP server context
449
- const httpReq = ctx.http?.req;
450
- if (!httpReq) {
451
- return {
452
- content: [{ type: 'text', text: JSON.stringify({ error: 'No HTTP request available in MCP context' }) }],
453
- isError: true,
454
- };
455
- }
456
- // Resolve the request-local auth/agent snapshot, then repeat the exact
457
- // tools/list policy decision before chat context, scoped DB, registry,
458
- // or handler work. This is the forged-call fail-closed boundary.
459
- const authenticated = await getAuthenticatedRequest(httpReq);
460
- const preliminaryDecision = capabilityPolicy.authorize(authenticated.preliminarySubject, toolName);
461
- if (!preliminaryDecision.allowed) {
462
- observeDenial({
463
- phase: 'tools/call',
464
- toolName,
465
- subject: authenticated.preliminarySubject,
466
- decision: preliminaryDecision,
467
- });
468
- return capabilityDeniedResult(preliminaryDecision);
469
- }
470
- const resolved = await getResolvedRequest(httpReq);
471
- const decision = capabilityPolicy.authorize(resolved.subject, toolName);
472
- if (!decision.allowed) {
473
- observeDenial({
474
- phase: 'tools/call',
475
- toolName,
476
- subject: resolved.subject,
477
- decision,
478
- });
479
- return capabilityDeniedResult(decision);
480
- }
481
- const { identity, context } = resolved;
482
- const { userId, agentId } = identity;
483
- reportUserId = userId;
484
- // Per-principal MCP throttle. Runs BEFORE any DB work so a throttled
485
- // call short-circuits cheaply. The /mcp transport bypasses the
486
- // controller-level RateLimit guard, so this is the only volume cap on
487
- // tool calls — it stops an over-eager agent from cascading itself into
488
- // provider rate limits.
489
- if (deps.mcpRateLimiter) {
490
- // Throttling is best-effort: never let a limiter failure (or a host
491
- // implementation that throws instead of failing open) break tool
492
- // dispatch. Treat any error as "allowed".
493
- let decision = null;
494
- try {
495
- decision = await deps.mcpRateLimiter({
496
- userId,
497
- ...(agentId ? { agentId } : {}),
498
- toolName,
499
- });
500
- }
501
- catch (rlErr) {
502
- logger.warn('MCP rate limiter threw — failing open', {
503
- toolName,
504
- error: rlErr instanceof Error ? rlErr.message : String(rlErr),
505
- });
506
- }
507
- if (decision && !decision.allowed) {
508
- const retryAfterSec = decision.retryAfterSec ?? 60;
509
- return {
510
- content: [{
511
- type: 'text',
512
- text: JSON.stringify({
513
- error: 'Rate limit exceeded',
514
- message: `Too many ${toolName} calls in a short period. Wait ${retryAfterSec}s before retrying.`,
515
- retryAfterSec,
516
- }),
517
- }],
518
- isError: true,
519
- };
520
- }
521
- }
522
- reportContext = context;
523
- // Build per-request scoped databases via injected factory.
524
- // Network-scoped agents are clamped to their bound network plus the user's
525
- // personal network — they cannot reach other networks even when the user is
526
- // a member of them. The personal-index reachability is preserved so the
527
- // agent can still manage its owner's profile and contacts.
528
- const allowedNetworkIds = deriveAllowedNetworkIds({
529
- memberships: context.userNetworks,
530
- ...(context.scopeType && context.scopeId
531
- ? { scopeType: context.scopeType, scopeId: context.scopeId }
532
- : {}),
533
- });
534
- const scopedDbs = scopedDepsFactory.create(userId, allowedNetworkIds);
535
- // Override deps with per-request scoped databases
536
- const requestDeps = { ...deps, ...scopedDbs };
537
- reportDeps = requestDeps;
538
- // Re-create registry with per-request deps for scoped database access.
539
- // Do not use cached registration metadata handlers here: tool handlers
540
- // close over userDb/systemDb when the registry is created. The MCP
541
- // surface profile keeps the tools/call lookup identical to tools/list.
542
- const requestRegistry = createToolRegistry(requestDeps, { surface: 'mcp' });
543
- const requestTool = requestRegistry.get(toolName);
544
- if (!requestTool) {
545
- return {
546
- content: [{ type: 'text', text: JSON.stringify({ error: `Tool "${toolName}" not found` }) }],
547
- isError: true,
548
- };
549
- }
550
- // Validate input against the original Zod schema
551
- const parseResult = toolDef.schema.safeParse(args);
552
- if (!parseResult.success) {
553
- const issues = parseResult.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
554
- return {
555
- content: [{ type: 'text', text: JSON.stringify({ success: false, error: `Invalid input: ${issues}` }) }],
556
- isError: true,
557
- };
558
- }
559
- const validatedArgs = parseResult.data;
560
- // Execute the tool handler through the shared runtime so MCP calls have
561
- // consistent timeout, cancellation, progress, and requestContext plumbing.
562
- const result = await invokeToolRuntime({
563
- toolName,
564
- tool: requestTool,
565
- context,
566
- query: validatedArgs,
567
- signal: ctx.mcpReq.signal,
568
- traceEmitter: createMcpTraceEmitter(toolName, ctx),
569
- });
570
- const { text: sanitizedText, isError: toolIsError } = sanitizeMcpResult(result);
571
- return {
572
- content: [{ type: 'text', text: sanitizedText }],
573
- ...(toolIsError ? { isError: true } : {}),
574
- };
575
- }
576
- catch (err) {
577
- const message = err instanceof Error ? err.message : String(err);
578
- logger.error('MCP tool failed', { toolName, error: message });
579
- if (shouldReportMcpToolError(err)) {
580
- reportDeps.reportToolError?.(err, {
581
- subsystem: 'mcp',
582
- operation: 'mcp.tool',
583
- toolName,
584
- userId: reportUserId,
585
- tags: {
586
- transport: 'mcp',
587
- toolName,
588
- },
589
- context: {
590
- agentId: reportContext?.agentId,
591
- scopeType: reportContext?.scopeType,
592
- scopeId: reportContext?.scopeId,
593
- },
594
- });
595
- }
596
- const runtimeResult = toolRuntimeErrorToResult(err);
597
- return {
598
- content: [{ type: 'text', text: runtimeResult ?? JSON.stringify({ error: message }) }],
599
- isError: true,
600
- };
601
- }
602
- });
603
- }
604
- // McpServer's default tools/list handler exposes every registered tool.
605
- // Replace it with a principal-aware inventory built from the same static
606
- // metadata and the same policy used above for tools/call.
607
- server.server.setRequestHandler('tools/list', async (_request, ctx) => {
608
- const httpReq = ctx.http?.req;
609
- if (!httpReq) {
610
- throw new Error('No HTTP request available in MCP context');
611
- }
612
- const resolved = await getResolvedRequest(httpReq);
613
- const visibleNames = new Set(capabilityPolicy.visibleToolNames(resolved.subject, toolMetadata.map((tool) => tool.name)));
614
- return {
615
- tools: toolMetadata
616
- .filter((tool) => visibleNames.has(tool.name))
617
- .map((tool) => ({
618
- name: tool.name,
619
- description: tool.description,
620
- // `jsonSchema` is the zod-derived JSON Schema for the tool's object
621
- // input, so it always has `type: 'object'`. The SDK describes the same
622
- // value with two different types — `JsonSchemaType` (json-schema-typed,
623
- // used by `fromJsonSchema`) and the wire-level `Tool['inputSchema']` —
624
- // which are structurally incompatible, so bridge them at this boundary.
625
- inputSchema: tool.jsonSchema,
626
- })),
627
- };
628
- });
629
- logger.verbose('MCP server created', { toolCount: toolMetadata.length });
630
- return server;
631
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * Negotiation Insights Generator
3
- *
4
- * Produces an aggregated, second-person narrative summarizing a user's
5
- * negotiation history — topics they're sought for, role patterns,
6
- * opportunity trends, and interesting signals from recent activity.
7
- */
8
- /** Compressed digest of a user's negotiation history for the LLM. */
9
- export interface NegotiationDigest {
10
- totalCount: number;
11
- opportunityCount: number;
12
- noOpportunityCount: number;
13
- inProgressCount: number;
14
- roleDistribution: Record<string, number>;
15
- counterparties: string[];
16
- reasoningExcerpts: string[];
17
- }
18
- /**
19
- * Generates an aggregated insight summary from a user's negotiation history.
20
- * @remarks Lightweight single-call agent; no DB access, no side effects.
21
- */
22
- export declare class NegotiationInsightsGenerator {
23
- private model;
24
- constructor();
25
- /**
26
- * Produces a narrative summary from a negotiation digest.
27
- * @param digest - Pre-computed statistics and excerpts from the user's negotiations
28
- * @returns A 2-4 sentence insight paragraph, or null on failure
29
- */
30
- invoke(digest: NegotiationDigest): Promise<string | null>;
31
- }