@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,145 +0,0 @@
1
- import { z } from "zod";
2
- import { createStructuredModel } from "../shared/agent/model.config.js";
3
- import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
4
- import { protocolLogger } from "../shared/observability/protocol.logger.js";
5
- // Memory vocabulary lives in the domain layer; re-export for backward compat.
6
- export { NEGOTIATOR_MEMORY_KINDS } from "./negotiation.memory.js";
7
- import { NEGOTIATOR_MEMORY_KINDS } from "./negotiation.memory.js";
8
- const reflectLog = protocolLogger("NegotiationReflector");
9
- /** Hard ceiling on entries distilled per reflection pass (per side). */
10
- export const MAX_DISTILLED_MEMORIES = 3;
11
- /**
12
- * One distilled memory entry as produced by the reflection LLM. The caller
13
- * owns persistence: it resolves `aboutCounterparty` to a `subjectUserId`,
14
- * computes the embedding, and attaches provenance `sourceRefs`.
15
- */
16
- export const DistilledMemorySchema = z.object({
17
- kind: z.enum(NEGOTIATOR_MEMORY_KINDS),
18
- /** Self-contained operational statement, useful without the transcript. */
19
- content: z.string().min(1),
20
- /** Evidence strength, 0..1. Explicit client statements score high. */
21
- confidence: z.number().min(0).max(1),
22
- /**
23
- * True when the entry is about the counterparty (kind should be
24
- * `counterparty_dossier`); false for client-side rules and playbooks.
25
- */
26
- aboutCounterparty: z.boolean(),
27
- /** Turn indexes (0-based, into the provided transcript) evidencing this entry. */
28
- turnIndexes: z.array(z.number().int().min(0)).default([]),
29
- });
30
- export const ReflectionResultSchema = z.object({
31
- memories: z.array(DistilledMemorySchema).max(MAX_DISTILLED_MEMORIES),
32
- });
33
- const NEGOTIATION_SYSTEM_PROMPT = `You are the private post-negotiation reflection process for {clientName}'s negotiator agent. The negotiation is over; your job is to distill AT MOST ${MAX_DISTILLED_MEMORIES} durable operational memory entries that will make {clientName}'s negotiator better in FUTURE negotiations. These memories are private to {clientName}'s agent — the counterparty never sees them.
34
-
35
- Memory kinds:
36
- - "playbook": a tactic or pattern that worked or failed (e.g. "Opening with the specific shared-interest angle got engagement; generic intros stalled").
37
- - "disclosure_rule": what {clientName} is or is not willing to share/commit (only when the transcript actually evidences it).
38
- - "counterparty_dossier": a durable fact about the counterparty useful in future dealings with THEM specifically (set aboutCounterparty=true).
39
- - "threshold": a concrete boundary observed (e.g. minimum scope, timing constraints, deal-breakers).
40
-
41
- Rules:
42
- - Record ONLY what future negotiations need. No summaries, no play-by-play, no identity facts about {clientName} (their profile already covers those).
43
- - Every entry MUST cite the transcript turn indexes that evidence it in turnIndexes.
44
- - Each content string must be self-contained and actionable without the transcript.
45
- - Set confidence by evidence strength: explicit statements ≈ 0.8-0.9, inferred patterns ≈ 0.4-0.6.
46
- - aboutCounterparty=true ONLY for counterparty_dossier entries.
47
- - Return an empty memories array when nothing durable was learned — most short or failed negotiations teach nothing. Do not force entries.`;
48
- const CHAT_SYSTEM_PROMPT = `You are the private reflection process for {clientName}'s negotiator agent, reviewing a direct chat between {clientName} (the client) and their negotiator. Distill AT MOST ${MAX_DISTILLED_MEMORIES} durable operational memory entries capturing the client's STATED preferences, corrections, and instructions.
49
-
50
- Memory kinds:
51
- - "playbook": how the client wants negotiations approached (style, priorities).
52
- - "disclosure_rule": what the client said they will or won't share/commit.
53
- - "threshold": concrete boundaries the client stated (rates, scope, timing, deal-breakers).
54
-
55
- Rules:
56
- - Only distill what the CLIENT stated or clearly confirmed — never invent preferences from the negotiator's own suggestions.
57
- - Do NOT produce counterparty_dossier entries; this is a client-side conversation. Always set aboutCounterparty=false.
58
- - Each content string must be self-contained and actionable.
59
- - turnIndexes cite 0-based indexes into the provided message list.
60
- - Set confidence by how explicit the client was (direct instruction ≈ 0.9, implied preference ≈ 0.5).
61
- - Return an empty memories array when the chat contains no durable guidance — casual Q&A usually doesn't.`;
62
- const DEFAULT_REFLECT_TIMEOUT_MS = 20000;
63
- /**
64
- * The memory distiller (P5.2). One structured LLM call per reflection pass,
65
- * producing ≤ {@link MAX_DISTILLED_MEMORIES} private memory entries for one
66
- * client's negotiator. Throws on LLM/validation failure — callers (the reflect
67
- * queue worker) own the swallow-and-log policy, since reflection must never
68
- * affect a negotiation outcome.
69
- */
70
- export class NegotiationReflector {
71
- constructor(config) {
72
- this.timeoutMs = config?.timeoutMs && Number.isFinite(config.timeoutMs) && config.timeoutMs > 0
73
- ? config.timeoutMs
74
- : DEFAULT_REFLECT_TIMEOUT_MS;
75
- }
76
- /**
77
- * Distill memories from a finished negotiation, from one side's perspective.
78
- * @throws When the LLM call times out or returns schema-invalid output.
79
- */
80
- async reflectNegotiation(input) {
81
- const clientName = input.clientUser.name ?? "the client";
82
- const counterpartyName = input.counterpartyUser.name ?? "the counterparty";
83
- const systemPrompt = NEGOTIATION_SYSTEM_PROMPT.replace(/{clientName}/g, clientName);
84
- const transcriptText = input.transcript.length > 0
85
- ? input.transcript.map((t) => {
86
- const who = t.speaker === "client" ? `${clientName}'s negotiator` : `${counterpartyName}'s negotiator`;
87
- const parts = [`[${t.index}] ${who} → ${t.action}`];
88
- if (t.message)
89
- parts.push(`message: ${t.message}`);
90
- if (t.reasoning)
91
- parts.push(`reasoning: ${t.reasoning}`);
92
- return parts.join("\n ");
93
- }).join("\n")
94
- : "(no turns)";
95
- const userMessage = `CLIENT: ${clientName}${input.clientUser.bio ? ` — ${input.clientUser.bio}` : ""}
96
- SEAT: ${input.seat === "initiator" ? "initiator (client's negotiator reached out)" : "counterparty (client's negotiator was reached)"}
97
- COUNTERPARTY: ${counterpartyName}${input.counterpartyUser.bio ? ` — ${input.counterpartyUser.bio}` : ""}
98
- ${input.indexContext ? `NETWORK CONTEXT: ${input.indexContext}\n` : ""}
99
- OUTCOME: ${input.outcome.hasOpportunity ? "accepted" : "not accepted"} after ${input.outcome.turnCount} turn(s) — ${input.outcome.reasoning}
100
-
101
- TRANSCRIPT:
102
- ${transcriptText}
103
-
104
- Distill the durable memories (or return an empty array).`;
105
- return this.distill(systemPrompt, userMessage);
106
- }
107
- /**
108
- * Distill stated preferences/corrections from a client ↔ negotiator chat.
109
- * @throws When the LLM call times out or returns schema-invalid output.
110
- */
111
- async reflectChat(input) {
112
- const clientName = input.clientUser.name ?? "the client";
113
- const systemPrompt = CHAT_SYSTEM_PROMPT.replace(/{clientName}/g, clientName);
114
- const chatText = input.messages
115
- .map((m, i) => `[${i}] ${m.role === "user" ? clientName : "negotiator"}: ${m.content}`)
116
- .join("\n");
117
- const userMessage = `CHAT between ${clientName} and their negotiator (oldest first):
118
- ${chatText}
119
-
120
- Distill the client's durable guidance (or return an empty array).`;
121
- return this.distill(systemPrompt, userMessage);
122
- }
123
- async distill(systemPrompt, userMessage) {
124
- const model = createStructuredModel("negotiationReflector", ReflectionResultSchema, { name: "negotiation_reflector" });
125
- const result = await this.callModel(model, [
126
- { role: "system", content: systemPrompt },
127
- { role: "user", content: userMessage },
128
- ]);
129
- const parsed = ReflectionResultSchema.safeParse(result);
130
- if (!parsed.success) {
131
- reflectLog.warn("Reflection output failed schema validation", {
132
- issues: parsed.error.issues.map((i) => i.message).slice(0, 3),
133
- });
134
- throw new Error(`Reflection failed validation: ${parsed.error.issues[0]?.message ?? "unknown"}`);
135
- }
136
- return parsed.data.memories.slice(0, MAX_DISTILLED_MEMORIES);
137
- }
138
- /**
139
- * Raw structured-model round trip. Split out as a seam so tests can drive
140
- * the schema-validation path without a live provider.
141
- */
142
- async callModel(model, chatMessages) {
143
- return invokeWithAbortSignal(model, chatMessages, AbortSignal.timeout(this.timeoutMs));
144
- }
145
- }
@@ -1,41 +0,0 @@
1
- /**
2
- * The boundary between a negotiation and the conversation it runs in.
3
- *
4
- * Two agents share one DM permanently — `getOrCreateDM` keys on the agent pair
5
- * alone — so that conversation accumulates every negotiation the pair has ever
6
- * had. A negotiation is a bounded episode about ONE match inside it.
7
- *
8
- * Every question about a negotiation's own state (whose turn it is, whether it
9
- * has opened, how many turns it has run) must be answered from the
10
- * negotiation's messages. Conversation-wide reads remain valid for CONTEXT —
11
- * what the pair discussed before — but must never decide state, or a fresh
12
- * match inherits the turn parity of an unrelated concluded one.
13
- *
14
- * Every surface that resolves the floor shares this rule. If the graph and the
15
- * respond/polling surfaces disagreed about a negotiation's scope, an external
16
- * agent would be told it is not its turn forever.
17
- */
18
- /** Minimal task-metadata shape needed to identify a negotiation. */
19
- export interface NegotiationScopeMetadata {
20
- opportunityId?: unknown;
21
- }
22
- /**
23
- * The opportunity a negotiation belongs to, or null when the task carries no
24
- * opportunity. Keyed on opportunity rather than task because an `ask_user`
25
- * pause resumes into a successor task: both tasks' turns are one negotiation.
26
- */
27
- export declare function negotiationScopeKey(metadata: NegotiationScopeMetadata | null | undefined): string | null;
28
- /**
29
- * Reads the messages that constitute one negotiation.
30
- *
31
- * A task with no opportunity has no identity separate from its conversation
32
- * (direct and legacy invocations), so the conversation is its scope — there is
33
- * no other match it could be confused with.
34
- */
35
- export declare function readNegotiationMessages<M>(readers: {
36
- byNegotiation: (opportunityId: string) => Promise<M[]>;
37
- byConversation: (conversationId: string) => Promise<M[]>;
38
- }, scope: {
39
- conversationId: string;
40
- metadata: NegotiationScopeMetadata | null | undefined;
41
- }): Promise<M[]>;
@@ -1,39 +0,0 @@
1
- /**
2
- * The boundary between a negotiation and the conversation it runs in.
3
- *
4
- * Two agents share one DM permanently — `getOrCreateDM` keys on the agent pair
5
- * alone — so that conversation accumulates every negotiation the pair has ever
6
- * had. A negotiation is a bounded episode about ONE match inside it.
7
- *
8
- * Every question about a negotiation's own state (whose turn it is, whether it
9
- * has opened, how many turns it has run) must be answered from the
10
- * negotiation's messages. Conversation-wide reads remain valid for CONTEXT —
11
- * what the pair discussed before — but must never decide state, or a fresh
12
- * match inherits the turn parity of an unrelated concluded one.
13
- *
14
- * Every surface that resolves the floor shares this rule. If the graph and the
15
- * respond/polling surfaces disagreed about a negotiation's scope, an external
16
- * agent would be told it is not its turn forever.
17
- */
18
- /**
19
- * The opportunity a negotiation belongs to, or null when the task carries no
20
- * opportunity. Keyed on opportunity rather than task because an `ask_user`
21
- * pause resumes into a successor task: both tasks' turns are one negotiation.
22
- */
23
- export function negotiationScopeKey(metadata) {
24
- const id = metadata?.opportunityId;
25
- return typeof id === 'string' && id.length > 0 ? id : null;
26
- }
27
- /**
28
- * Reads the messages that constitute one negotiation.
29
- *
30
- * A task with no opportunity has no identity separate from its conversation
31
- * (direct and legacy invocations), so the conversation is its scope — there is
32
- * no other match it could be confused with.
33
- */
34
- export async function readNegotiationMessages(readers, scope) {
35
- const opportunityId = negotiationScopeKey(scope.metadata);
36
- return opportunityId
37
- ? readers.byNegotiation(opportunityId)
38
- : readers.byConversation(scope.conversationId);
39
- }
@@ -1,88 +0,0 @@
1
- import { z } from "zod";
2
- /**
3
- * negotiations/domain — screen-gate pure contracts (P2.1).
4
- *
5
- * Extracted from negotiation.screen.ts so that NegotiationGraphState and the
6
- * application-layer NegotiationScreener can share types without a domain →
7
- * application cycle.
8
- *
9
- * IND-550: canonical location for screen contract types.
10
- * Legacy path (negotiations/negotiation.screen.ts shim) re-exports from here
11
- * via the application layer.
12
- */
13
- export declare const NEGOTIATION_SCREEN_MODES: readonly ["off", "shadow", "enforce"];
14
- export type NegotiationScreenMode = (typeof NEGOTIATION_SCREEN_MODES)[number];
15
- /**
16
- * Resolve the screen mode from `NEGOTIATION_SCREEN_MODE`.
17
- *
18
- * Defaults to `off` when unset or unrecognized — the screen gate is an
19
- * explicit opt-in flip (same operational pattern as
20
- * `NEGOTIATION_PROTOCOL_VERSION` / `NEGOTIATOR_CHAT_ENABLED`): code ships
21
- * inert, the environment turns it on.
22
- */
23
- export declare function configuredScreenMode(): NegotiationScreenMode;
24
- /**
25
- * Structured screen decision — the outreach gate's verdict on whether this
26
- * match is worth the client's name before any turn is exchanged.
27
- */
28
- export declare const ScreenDecisionSchema: z.ZodObject<{
29
- decision: z.ZodEnum<["reach_out", "pass"]>;
30
- reasoning: z.ZodString;
31
- /** Suggested opening angle for the outreach turn (only when reaching out). */
32
- outreachAngle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
33
- evidence: z.ZodObject<{
34
- /** How well the counterparty's contexts/premises fit the client's need. */
35
- counterpartyPremiseFit: z.ZodString;
36
- /** How the client's intents align with what the counterparty seeks. */
37
- intentAlignment: z.ZodString;
38
- /** Prior-negotiation memory signals (P5.3). Filled only when negotiator memory was injected into the screen prompt. */
39
- memoryHints: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
- }, "strip", z.ZodTypeAny, {
41
- counterpartyPremiseFit: string;
42
- intentAlignment: string;
43
- memoryHints?: string | null | undefined;
44
- }, {
45
- counterpartyPremiseFit: string;
46
- intentAlignment: string;
47
- memoryHints?: string | null | undefined;
48
- }>;
49
- }, "strip", z.ZodTypeAny, {
50
- reasoning: string;
51
- evidence: {
52
- counterpartyPremiseFit: string;
53
- intentAlignment: string;
54
- memoryHints?: string | null | undefined;
55
- };
56
- decision: "reach_out" | "pass";
57
- outreachAngle?: string | null | undefined;
58
- }, {
59
- reasoning: string;
60
- evidence: {
61
- counterpartyPremiseFit: string;
62
- intentAlignment: string;
63
- memoryHints?: string | null | undefined;
64
- };
65
- decision: "reach_out" | "pass";
66
- outreachAngle?: string | null | undefined;
67
- }>;
68
- export type ScreenDecision = z.infer<typeof ScreenDecisionSchema>;
69
- /**
70
- * The record persisted to `tasks.metadata.screenDecision` and returned into
71
- * graph state. Extends the LLM decision with operational context so pass-rate
72
- * queries can group by mode and exclude failed-open rows.
73
- */
74
- export interface ScreenDecisionRecord extends ScreenDecision {
75
- mode: NegotiationScreenMode;
76
- /** True when the screen LLM call failed and the gate defaulted open. */
77
- failedOpen?: boolean;
78
- /** Error message when `failedOpen` is set. */
79
- error?: string;
80
- screenedAt: string;
81
- durationMs: number;
82
- }
83
- /**
84
- * Whether an enforce-mode outreach screen blocks a negotiation before any
85
- * turn is exchanged. Shadow-mode pass decisions are recorded but never block.
86
- * Failed-open rows are treated as reach_out regardless of `decision`.
87
- */
88
- export declare function blocksNegotiationBeforeFirstTurn(decisionRecord: ScreenDecisionRecord | null | undefined, turnCount: number): boolean;
@@ -1,58 +0,0 @@
1
- import { z } from "zod";
2
- /**
3
- * negotiations/domain — screen-gate pure contracts (P2.1).
4
- *
5
- * Extracted from negotiation.screen.ts so that NegotiationGraphState and the
6
- * application-layer NegotiationScreener can share types without a domain →
7
- * application cycle.
8
- *
9
- * IND-550: canonical location for screen contract types.
10
- * Legacy path (negotiations/negotiation.screen.ts shim) re-exports from here
11
- * via the application layer.
12
- */
13
- export const NEGOTIATION_SCREEN_MODES = ["off", "shadow", "enforce"];
14
- /**
15
- * Resolve the screen mode from `NEGOTIATION_SCREEN_MODE`.
16
- *
17
- * Defaults to `off` when unset or unrecognized — the screen gate is an
18
- * explicit opt-in flip (same operational pattern as
19
- * `NEGOTIATION_PROTOCOL_VERSION` / `NEGOTIATOR_CHAT_ENABLED`): code ships
20
- * inert, the environment turns it on.
21
- */
22
- export function configuredScreenMode() {
23
- const raw = process.env.NEGOTIATION_SCREEN_MODE;
24
- if (raw === "shadow" || raw === "enforce" || raw === "off")
25
- return raw;
26
- return "off";
27
- }
28
- /**
29
- * Structured screen decision — the outreach gate's verdict on whether this
30
- * match is worth the client's name before any turn is exchanged.
31
- */
32
- export const ScreenDecisionSchema = z.object({
33
- decision: z.enum(["reach_out", "pass"]),
34
- reasoning: z.string(),
35
- /** Suggested opening angle for the outreach turn (only when reaching out). */
36
- outreachAngle: z.string().nullable().optional(),
37
- evidence: z.object({
38
- /** How well the counterparty's contexts/premises fit the client's need. */
39
- counterpartyPremiseFit: z.string(),
40
- /** How the client's intents align with what the counterparty seeks. */
41
- intentAlignment: z.string(),
42
- /** Prior-negotiation memory signals (P5.3). Filled only when negotiator memory was injected into the screen prompt. */
43
- memoryHints: z.string().nullable().optional(),
44
- }),
45
- });
46
- /**
47
- * Whether an enforce-mode outreach screen blocks a negotiation before any
48
- * turn is exchanged. Shadow-mode pass decisions are recorded but never block.
49
- * Failed-open rows are treated as reach_out regardless of `decision`.
50
- */
51
- export function blocksNegotiationBeforeFirstTurn(decisionRecord, turnCount) {
52
- if (!decisionRecord)
53
- return false;
54
- return (decisionRecord.mode === "enforce" &&
55
- !decisionRecord.failedOpen &&
56
- decisionRecord.decision === "pass" &&
57
- turnCount === 0);
58
- }
@@ -1,78 +0,0 @@
1
- import { createStructuredModel } from "../shared/agent/model.config.js";
2
- import type { UserNegotiationContext, SeedAssessment } from "../shared/schemas/negotiation-state.schema.js";
3
- import { type NegotiatorMemoryEntry } from "./negotiation.memory.js";
4
- import type { NegotiationTurn } from "./negotiation.state.js";
5
- import { type AttributedPriorDialogue } from "./negotiation.attribution.js";
6
- export { NEGOTIATION_SCREEN_MODES, configuredScreenMode, ScreenDecisionSchema, blocksNegotiationBeforeFirstTurn, } from "./negotiation.screen.contracts.js";
7
- export type { NegotiationScreenMode, ScreenDecision, ScreenDecisionRecord, } from "./negotiation.screen.contracts.js";
8
- import type { ScreenDecision } from "./negotiation.screen.contracts.js";
9
- export interface NegotiationScreenerInput {
10
- /** The client — the user whose negotiator is deciding whether to reach out. */
11
- clientUser: UserNegotiationContext;
12
- /** The counterparty the client's negotiator would be reaching out to. */
13
- counterpartyUser: UserNegotiationContext;
14
- /** The counterparty's `user_contexts` paragraph (empty string when absent). */
15
- counterpartyContext?: string;
16
- /** The explicit search query that triggered discovery (if any). */
17
- discoveryQuery?: string;
18
- seedAssessment: Omit<SeedAssessment, "actors">;
19
- indexContext: {
20
- networkId: string;
21
- prompt?: string;
22
- };
23
- /**
24
- * Retrieved negotiator memories for the client (P5.3 read path). Rendered
25
- * as a private prompt section with a memoryHints instruction. Absent/empty
26
- * → the prompt is byte-identical to before.
27
- */
28
- memory?: NegotiatorMemoryEntry[];
29
- /**
30
- * Whether this screen is for a continuation — a match against a counterparty
31
- * this client already has prior dialogue with (IND-563). When set with
32
- * `priorDialogue`, the gate evaluates the NEW signal on its own merits with
33
- * that dialogue as context. Absent → the prompt is byte-identical to before.
34
- */
35
- isContinuation?: boolean;
36
- /**
37
- * Prior negotiation turns with this counterparty (continuations only).
38
- * Rendered as read-only context so the gate can tell a materially-new signal
39
- * from a rehash of an already-settled one. Never treated as this task's own
40
- * outreach.
41
- */
42
- priorDialogue?: NegotiationTurn[];
43
- /**
44
- * Attributed form of the prior dialogue (IND-569). When present it supersedes
45
- * the flat `priorDialogue` list: earlier concluded opportunities and legacy
46
- * unattributed turns render as labeled, separated blocks so the gate can see
47
- * which prior turns belonged to OTHER opportunities. Absent → the flat
48
- * `priorDialogue` rendering is used (byte-identical to before).
49
- */
50
- priorDialogueAttributed?: AttributedPriorDialogue;
51
- }
52
- export interface NegotiationScreenerConfig {
53
- /** Hard ceiling on the screen LLM round-trip, in ms (default 15000). */
54
- timeoutMs?: number;
55
- }
56
- /**
57
- * The outreach gate (P2.1). One structured LLM call deciding
58
- * `reach_out | pass` for a fresh negotiation, from the reaching client's
59
- * perspective. Throws on LLM/validation failure — the screen graph node owns
60
- * the fail-open policy (a failed screen never blocks the negotiation).
61
- */
62
- export declare class NegotiationScreener {
63
- private readonly timeoutMs;
64
- constructor(config?: NegotiationScreenerConfig);
65
- /**
66
- * Produce a screen decision for a fresh match.
67
- * @throws When the LLM call times out or returns schema-invalid output.
68
- */
69
- invoke(input: NegotiationScreenerInput): Promise<ScreenDecision>;
70
- /**
71
- * Raw structured-model round trip. Split out as a seam so tests can drive
72
- * the schema-validation and fail-open paths without a live provider.
73
- */
74
- protected callModel(model: ReturnType<typeof createStructuredModel>, chatMessages: Array<{
75
- role: string;
76
- content: string;
77
- }>): Promise<unknown>;
78
- }
@@ -1,112 +0,0 @@
1
- import { createStructuredModel } from "../shared/agent/model.config.js";
2
- import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
3
- import { protocolLogger } from "../shared/observability/protocol.logger.js";
4
- import { renderNegotiatorMemorySection } from "./negotiation.memory.js";
5
- import { attributedDialogueIsEmpty, renderAttributedPriorDialogue } from "./negotiation.attribution.js";
6
- // Re-export domain screen contracts for backward-compat consumers of this module path.
7
- export { NEGOTIATION_SCREEN_MODES, configuredScreenMode, ScreenDecisionSchema, blocksNegotiationBeforeFirstTurn, } from "./negotiation.screen.contracts.js";
8
- import { ScreenDecisionSchema } from "./negotiation.screen.contracts.js";
9
- const screenLog = protocolLogger("NegotiationScreener");
10
- const SYSTEM_PROMPT = `You are the outreach gate for {clientName}'s negotiator agent on a discovery network. Before any negotiation turn is exchanged, you decide whether this match is worth reaching out to on {clientName}'s behalf — their name and attention are spent with every outreach.
11
-
12
- Network context: {networkContext}
13
-
14
- Decide:
15
- - "reach_out" when the counterparty plausibly serves {clientName}'s stated needs and a concrete, honest opening case can be made. When reaching out, set outreachAngle to the strongest specific angle for the opening message.
16
- - "pass" when the match is generic, one-sided, or rests on vague overlap that would waste both parties' attention.
17
-
18
- Rules:
19
- {queryRule}
20
- - Judge concrete intent alignment, not topical adjacency.
21
- - Fill evidence.counterpartyPremiseFit with what (if anything) in the counterparty's context actually fits, and evidence.intentAlignment with how the intents line up. Be specific; cite the strongest signal either way.
22
- - Do NOT reference internal system details like scores, pre-screens, or evaluator outputs in reasoning that could be shown to users.{negotiatorMemory}`;
23
- const QUERY_RULE = `- {clientName} explicitly searched for "{discoveryQuery}". This query is the PRIMARY criterion: if the counterparty does not satisfy it, pass — background intents cannot rescue a query mismatch.`;
24
- const NO_QUERY_RULE = `- No explicit search query: judge against {clientName}'s active intents.`;
25
- const DEFAULT_SCREEN_TIMEOUT_MS = 15000;
26
- /**
27
- * The outreach gate (P2.1). One structured LLM call deciding
28
- * `reach_out | pass` for a fresh negotiation, from the reaching client's
29
- * perspective. Throws on LLM/validation failure — the screen graph node owns
30
- * the fail-open policy (a failed screen never blocks the negotiation).
31
- */
32
- export class NegotiationScreener {
33
- constructor(config) {
34
- this.timeoutMs = config?.timeoutMs && Number.isFinite(config.timeoutMs) && config.timeoutMs > 0
35
- ? config.timeoutMs
36
- : DEFAULT_SCREEN_TIMEOUT_MS;
37
- }
38
- /**
39
- * Produce a screen decision for a fresh match.
40
- * @throws When the LLM call times out or returns schema-invalid output.
41
- */
42
- async invoke(input) {
43
- const model = createStructuredModel("negotiationScreener", ScreenDecisionSchema, { name: "negotiation_screener" });
44
- const clientName = input.clientUser.profile.name ?? "your client";
45
- const counterpartyName = input.counterpartyUser.profile.name ?? "the counterparty";
46
- const networkContext = input.indexContext.prompt || "General discovery";
47
- const queryRule = (input.discoveryQuery ? QUERY_RULE : NO_QUERY_RULE)
48
- .replace(/{clientName}/g, clientName)
49
- .replace(/{discoveryQuery}/g, input.discoveryQuery ?? "");
50
- const systemPrompt = SYSTEM_PROMPT
51
- .replace(/{clientName}/g, clientName)
52
- .replace("{networkContext}", networkContext)
53
- .replace("{queryRule}", queryRule)
54
- .replace("{negotiatorMemory}", renderNegotiatorMemorySection(input.memory ?? [], { memoryHintsInstruction: true }));
55
- const formatIntents = (intents) => intents.length > 0 ? intents.map((i) => `- ${i.title}: ${i.description}`).join("\n") : "- (none)";
56
- const formatScreenTurn = (t, i) => {
57
- const msgPart = t.message ? ` — ${t.message}` : "";
58
- return `Turn ${i + 1}: ${t.action} — ${t.assessment.reasoning}${msgPart}`;
59
- };
60
- // IND-569: prefer the attributed rendering (labeled per-opportunity blocks)
61
- // when the graph supplies it; otherwise fall back to the flat prior-turn list.
62
- //
63
- // Deliberately NOT gated on `isContinuation`, which means "this negotiation
64
- // has already spoken". The gate this section exists for is the opposite
65
- // case — a FRESH signal against a counterparty the client has prior dialogue
66
- // with (IND-563), which is precisely when duplicate outreach must be caught.
67
- const hasAttributed = input.priorDialogueAttributed != null
68
- && !attributedDialogueIsEmpty(input.priorDialogueAttributed);
69
- const flatPriorDialogue = input.priorDialogue && input.priorDialogue.length > 0
70
- ? input.priorDialogue
71
- : [];
72
- const priorDialogueBody = hasAttributed
73
- ? renderAttributedPriorDialogue(input.priorDialogueAttributed, formatScreenTurn)
74
- : (flatPriorDialogue.length > 0 ? flatPriorDialogue.map(formatScreenTurn).join("\n") : "");
75
- const priorDialogueContext = priorDialogueBody
76
- ? `\n\n--- Prior dialogue with ${counterpartyName} (already spoken) ---\n${priorDialogueBody}\n\nThis is a NEW signal against a counterparty ${clientName} has prior dialogue with. Some turns above may belong to OTHER, already-concluded opportunities (each block is labeled); they are background only. Judge the new signal on its own merits: if it is materially the same as what was already discussed, pass unless something concrete changed; if materially different, judge it fresh. Do NOT reach out again on generic overlap just because they spoke before.`
77
- : "";
78
- const userMessage = `YOUR CLIENT (${clientName}):
79
- Bio: ${input.clientUser.profile.bio ?? "N/A"}
80
- ${input.discoveryQuery ? `Search query: "${input.discoveryQuery}"\nBackground intents (secondary to the query):` : "Active intents:"}
81
- ${formatIntents(input.clientUser.intents)}
82
-
83
- COUNTERPARTY (${counterpartyName}):
84
- Bio: ${input.counterpartyUser.profile.bio ?? "N/A"}
85
- ${input.counterpartyContext ? `Context: ${input.counterpartyContext}\n` : ""}Active intents:
86
- ${formatIntents(input.counterpartyUser.intents)}
87
-
88
- Why this match was suggested: ${input.seedAssessment.reasoning}${priorDialogueContext}
89
-
90
- Decide whether reaching out serves ${clientName}.`;
91
- const chatMessages = [
92
- { role: "system", content: systemPrompt },
93
- { role: "user", content: userMessage },
94
- ];
95
- const result = await this.callModel(model, chatMessages);
96
- const parsed = ScreenDecisionSchema.safeParse(result);
97
- if (!parsed.success) {
98
- screenLog.warn("Screen output failed schema validation", {
99
- issues: parsed.error.issues.map((i) => i.message).slice(0, 3),
100
- });
101
- throw new Error(`Screen decision failed validation: ${parsed.error.issues[0]?.message ?? "unknown"}`);
102
- }
103
- return parsed.data;
104
- }
105
- /**
106
- * Raw structured-model round trip. Split out as a seam so tests can drive
107
- * the schema-validation and fail-open paths without a live provider.
108
- */
109
- async callModel(model, chatMessages) {
110
- return invokeWithAbortSignal(model, chatMessages, AbortSignal.timeout(this.timeoutMs));
111
- }
112
- }
@@ -1,83 +0,0 @@
1
- /**
2
- * Post-stall gap authoring (conversational-questions plan).
3
- *
4
- * When a negotiation ends unconcluded — no opportunity, no explicit reject:
5
- * turn cap, timeout, or stall — the finalize node asks the negotiator for the
6
- * ONE question whose answer would let a retry conclude, and parks the
7
- * negotiation carrying that gap as an `ask_user` message in its own record.
8
- * This module owns that single extra model call.
9
- *
10
- * Grounding is exactly what mid-flight authoring (P3.2 / IND-401 A2H) uses:
11
- * this negotiation's transcript, plus the client's own negotiator DM for the
12
- * signal when the caller retrieved one. Same non-naming and non-echo rules;
13
- * the caller re-checks the output with `isSafeAuthoredNegotiationQuestion`
14
- * (identifiers in hand) before persisting anything.
15
- *
16
- * Fail-open contract: any model failure, timeout, or invalid output resolves
17
- * to null — the negotiation then stalls exactly as it did before this feature,
18
- * never half-parks.
19
- */
20
- import { createStructuredModel } from "../shared/agent/model.config.js";
21
- import { type StructuredQuestion } from "../shared/schemas/structured-question.schema.js";
22
- import { type NegotiationConsultationReason } from "../shared/schemas/negotiation-state.schema.js";
23
- import { type NegotiatorClientDmMessage } from "./negotiation.client-dm.js";
24
- import type { NegotiationTurn } from "./negotiation.state.js";
25
- /**
26
- * Fixed transcript reasoning for a post-stall park turn. Deliberately not
27
- * model-authored: assessment reasoning enters the shared A2A record, and the
28
- * park's "why" already lives in the guarded question itself — a second,
29
- * unguarded free-text channel would reopen the leak surface the question gate
30
- * closes.
31
- */
32
- export declare const NEGOTIATION_PARK_REASONING = "Negotiation parked pending the client's answer.";
33
- /** Why the negotiation failed to conclude, as finalize classified it. */
34
- export type NegotiationStallReason = "turn_cap" | "timeout" | "stalled";
35
- /** The authored gap: what a retry needs from the client, and why the pause is warranted. */
36
- export interface NegotiationStallGap {
37
- reason: NegotiationConsultationReason;
38
- question: StructuredQuestion;
39
- }
40
- export interface StallGapAuthorInput {
41
- /** Display name of the client the question is addressed to. */
42
- userName: string;
43
- /** The client's signal this negotiation was about. */
44
- signal: {
45
- title: string;
46
- description: string;
47
- };
48
- /** Why the match was suggested (evaluator output; context, never copy). */
49
- seedReasoning: string;
50
- /** This negotiation's full transcript, oldest first. */
51
- history: NegotiationTurn[];
52
- stallReason: NegotiationStallReason;
53
- /** Recent excerpt of the client's negotiator DM for this signal, most recent last. */
54
- clientDm?: NegotiatorClientDmMessage[];
55
- }
56
- export interface NegotiationStallGapAuthorConfig {
57
- /** Hard ceiling on the model round-trip, in ms. Same resolution as the negotiator turn timeout. */
58
- timeoutMs?: number;
59
- }
60
- /**
61
- * Authors the post-stall gap. One instance lives in the graph's dependency bag
62
- * beside `systemAgent`; the finalize node calls it at most once per stalled
63
- * session.
64
- */
65
- export declare class NegotiationStallGapAuthor {
66
- private readonly timeoutMs;
67
- constructor(config?: NegotiationStallGapAuthorConfig);
68
- /**
69
- * @returns The authored gap, or null when there is none to ask — the model
70
- * said so, produced invalid output after a retry, or failed. The
71
- * caller treats every null identically: terminal stall, no park.
72
- */
73
- author(input: StallGapAuthorInput): Promise<NegotiationStallGap | null>;
74
- /**
75
- * Raw structured-model round trip. Split out as a seam so tests can drive
76
- * the validate→retry→null loop without a live provider — same pattern as
77
- * `IndexNegotiator.callModel`.
78
- */
79
- protected callModel(model: ReturnType<typeof createStructuredModel>, chatMessages: Array<{
80
- role: string;
81
- content: string;
82
- }>): Promise<unknown>;
83
- }