@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,24 +1,26 @@
1
1
  /**
2
2
  * Intent graph, stage 4 and the read fast path.
3
3
  */
4
- import { normalizeIntentDescription } from "../intent.proposal.js";
4
+ import { buildManualAssignmentMetadata } from "../../shared/assignment/network-assignment.policy.js";
5
5
  import { timed } from "../../shared/observability/performance.js";
6
- import { enforceIntentActionBoundary, generateIntentEmbedding, logger, toSpeechActType } from "./intent.graph.shared.js";
6
+ import { enforceIntentActionBoundary, generateIntentEmbedding, normalizeIntentDescription, isExplicitUpdateRequest, logger, toSpeechActType } from "./intent.graph.shared.js";
7
7
  /**
8
8
  * Node 4: Executor
9
9
  * Executes reconciler actions against the database.
10
10
  */
11
11
  export async function executorNode(state, deps) {
12
12
  return timed("IntentGraph.executor", async () => {
13
- const actions = enforceIntentActionBoundary(state.operationMode, state.targetIntentIds, state.actions ?? []);
13
+ const actions = enforceIntentActionBoundary(isExplicitUpdateRequest(state), state.targetIntentIds, state.actions ?? []);
14
14
  if (actions.length === 0) {
15
15
  return { executionResults: [] };
16
16
  }
17
17
  logger.verbose('Executing actions', { count: actions.length });
18
18
  const results = [];
19
+ let transitionResult;
19
20
  const scopeEnvelope = state.scopeType && state.scopeId
20
21
  ? { scopeType: state.scopeType, scopeId: state.scopeId }
21
22
  : {};
23
+ const networkScopeId = state.scopeType === 'network' ? state.scopeId : undefined;
22
24
  const verifiedIntentByPayload = new Map();
23
25
  for (const verifiedIntent of state.verifiedIntents) {
24
26
  verifiedIntentByPayload.set(verifiedIntent.description, verifiedIntent);
@@ -29,37 +31,43 @@ export async function executorNode(state, deps) {
29
31
  try {
30
32
  if (actionType === 'create') {
31
33
  const createAction = action;
32
- const sanitizedPayload = normalizeIntentDescription(createAction.payload);
33
- const matchedVerifiedIntent = verifiedIntentByPayload.get(createAction.payload) ||
34
- verifiedIntentByPayload.get(sanitizedPayload);
35
- // Generate embedding for the intent payload
36
- const flatEmbedding = await generateIntentEmbedding(deps, sanitizedPayload);
34
+ const payload = createAction.payload;
35
+ const metadata = createAction.metadata;
36
+ const flatEmbedding = await generateIntentEmbedding(deps, payload);
37
37
  const created = await deps.database.createIntent({
38
38
  userId: state.userId,
39
- payload: sanitizedPayload,
40
- confidence: createAction.score ? createAction.score / 100 : 1.0,
39
+ payload,
40
+ confidence: 1.0,
41
41
  inferenceType: 'explicit',
42
42
  sourceType: 'discovery_form',
43
43
  embedding: flatEmbedding,
44
- semanticEntropy: createAction.semanticEntropy ??
45
- matchedVerifiedIntent?.verification?.semantic_entropy ??
46
- null,
47
- referentialAnchor: createAction.referentialAnchor ??
48
- matchedVerifiedIntent?.verification?.referential_anchor ??
49
- null,
50
- felicityAuthority: matchedVerifiedIntent?.verification?.felicity_scores.authority ?? null,
51
- felicitySincerity: matchedVerifiedIntent?.verification?.felicity_scores.sincerity ?? null,
52
- felicityClarity: matchedVerifiedIntent?.verification?.felicity_scores.clarity ?? null,
53
- intentMode: createAction.intentMode ?? null,
54
- speechActType: toSpeechActType(matchedVerifiedIntent?.verification?.classification),
44
+ semanticEntropy: metadata?.semanticEntropy ?? null,
45
+ referentialAnchor: metadata?.referentialAnchor ?? null,
46
+ felicityAuthority: metadata?.felicityAuthority ?? null,
47
+ felicitySincerity: metadata?.felicitySincerity ?? null,
48
+ felicityClarity: metadata?.felicityClarity ?? null,
49
+ intentMode: metadata?.intentMode ?? null,
50
+ speechActType: metadata?.speechActType ?? null,
51
+ });
52
+ const linkedNetworkIds = await linkIntentToNetworks(deps, state, created.id);
53
+ results.push({
54
+ actionType: 'create',
55
+ success: true,
56
+ intentId: created.id,
57
+ payload,
58
+ linkedNetworkIds,
55
59
  });
56
- results.push({ actionType: 'create', success: true, intentId: created.id, payload: sanitizedPayload });
57
- logger.verbose('Created intent', { intentId: created.id });
58
- deps.intentQueue?.addGenerateHydeJob({
60
+ logger.verbose('Created intent', { intentId: created.id, linkedNetworkIds });
61
+ if (!metadata && deps.intentFollowUp) {
62
+ void Promise.resolve().then(() => deps.intentFollowUp.scoreIntent({
63
+ intentId: created.id, userId: state.userId, payload,
64
+ })).catch((error) => logger.error('Intent rescoring failed; saved intent retained', { intentId: created.id, error }));
65
+ }
66
+ deps.intentFollowUp?.onIntentSaved({
59
67
  intentId: created.id,
60
68
  userId: state.userId,
61
69
  ...scopeEnvelope,
62
- }).catch((err) => logger.error('Failed to enqueue intent HyDE job', { intentId: created.id, error: err }));
70
+ }).catch((err) => logger.error('Failed to run intent follow-up', { intentId: created.id, error: err }));
63
71
  }
64
72
  else if (actionType === 'update') {
65
73
  const updateAction = action;
@@ -94,11 +102,11 @@ export async function executorNode(state, deps) {
94
102
  });
95
103
  logger.verbose('Updated intent', { intentId: updateAction.id });
96
104
  if (updated) {
97
- deps.intentQueue?.addGenerateHydeJob({
105
+ deps.intentFollowUp?.onIntentSaved({
98
106
  intentId: updateAction.id,
99
107
  userId: state.userId,
100
108
  ...scopeEnvelope,
101
- }).catch((err) => logger.error('Failed to enqueue intent HyDE job', { intentId: updateAction.id, error: err }));
109
+ }).catch((err) => logger.error('Failed to run intent follow-up', { intentId: updateAction.id, error: err }));
102
110
  }
103
111
  }
104
112
  else if (actionType === 'expire') {
@@ -112,9 +120,89 @@ export async function executorNode(state, deps) {
112
120
  });
113
121
  logger.verbose('Archived intent', { intentId: expireAction.id });
114
122
  if (result.success) {
115
- deps.intentQueue?.addDeleteHydeJob({ intentId: expireAction.id }).catch((err) => logger.error('Failed to enqueue intent HyDE delete job', { intentId: expireAction.id, error: err }));
123
+ try {
124
+ await deps.database.deleteIntentNetworkAssociations(expireAction.id);
125
+ }
126
+ catch (err) {
127
+ logger.error('Failed to delete intent-network associations', { intentId: expireAction.id, error: err });
128
+ }
129
+ try {
130
+ const expiredCount = await deps.database.expireOpportunitiesByIntentActor(expireAction.id);
131
+ if (expiredCount > 0) {
132
+ logger.verbose('Expired opportunities referencing intent', { intentId: expireAction.id, expiredCount });
133
+ }
134
+ }
135
+ catch (err) {
136
+ logger.error('Failed to expire opportunities', { intentId: expireAction.id, error: err });
137
+ }
138
+ deps.intentFollowUp?.onIntentArchived({ intentId: expireAction.id }).catch((err) => logger.error('Failed to run intent archive follow-up', { intentId: expireAction.id, error: err }));
116
139
  }
117
140
  }
141
+ else if (actionType === 'transition') {
142
+ const transitionAction = action;
143
+ const dbResult = await deps.database.transitionIntentLifecycle({
144
+ intentId: transitionAction.id,
145
+ userId: state.userId,
146
+ status: transitionAction.status,
147
+ networkScopeId,
148
+ });
149
+ let outcome;
150
+ if (dbResult.kind !== 'success' || dbResult.status === 'PAUSED') {
151
+ outcome = dbResult;
152
+ }
153
+ else {
154
+ try {
155
+ await deps.intentFollowUp?.onIntentResumed({
156
+ intentId: dbResult.id,
157
+ userId: state.userId,
158
+ lifecycleVersionMs: dbResult.lifecycleVersionMs,
159
+ });
160
+ outcome = dbResult;
161
+ }
162
+ catch (err) {
163
+ logger.warn('Failed to enqueue resumed intent discovery', {
164
+ intentId: dbResult.id,
165
+ lifecycleVersionMs: dbResult.lifecycleVersionMs,
166
+ changed: dbResult.changed,
167
+ error: err,
168
+ });
169
+ if (!dbResult.changed) {
170
+ outcome = { kind: 'enqueue_failed', id: dbResult.id, status: dbResult.status, lifecycleVersionMs: dbResult.lifecycleVersionMs };
171
+ }
172
+ else {
173
+ let authoritative = null;
174
+ try {
175
+ authoritative = await deps.database.compensateFailedResume({
176
+ intentId: transitionAction.id,
177
+ userId: state.userId,
178
+ lifecycleVersionMs: dbResult.lifecycleVersionMs,
179
+ networkScopeId,
180
+ });
181
+ }
182
+ catch (compensationError) {
183
+ logger.error('Failed to compensate resumed intent after enqueue failure', {
184
+ intentId: transitionAction.id,
185
+ lifecycleVersionMs: dbResult.lifecycleVersionMs,
186
+ compensationError,
187
+ });
188
+ }
189
+ outcome = {
190
+ kind: 'enqueue_failed',
191
+ id: dbResult.id,
192
+ status: (authoritative?.status ?? dbResult.status),
193
+ lifecycleVersionMs: authoritative?.lifecycleVersionMs ?? dbResult.lifecycleVersionMs,
194
+ };
195
+ }
196
+ }
197
+ }
198
+ transitionResult = outcome;
199
+ results.push({
200
+ actionType: 'transition',
201
+ success: outcome.kind === 'success',
202
+ intentId: 'id' in outcome ? outcome.id : transitionAction.id,
203
+ error: outcome.kind !== 'success' ? outcome.kind : undefined,
204
+ });
205
+ }
118
206
  }
119
207
  catch (error) {
120
208
  logger.error('Failed to execute action', { actionType: action.type, error });
@@ -126,9 +214,40 @@ export async function executorNode(state, deps) {
126
214
  });
127
215
  }
128
216
  }
129
- return { executionResults: results };
217
+ return { executionResults: results, transitionResult };
130
218
  });
131
219
  }
220
+ /**
221
+ * Link a freshly created intent to exactly the networks the caller named.
222
+ *
223
+ * Nothing is scored or inferred: each id must still be an accepted membership,
224
+ * which {@link IntentGraphDatabase.assignIntentToNetworkIfMember} checks while
225
+ * holding the membership row. A network the caller no longer belongs to is
226
+ * skipped and logged rather than failing the create.
227
+ *
228
+ * @returns The subset of ids that ended up linked.
229
+ */
230
+ async function linkIntentToNetworks(deps, state, intentId) {
231
+ const requested = state.networkIds ?? [];
232
+ if (requested.length === 0)
233
+ return [];
234
+ const metadata = buildManualAssignmentMetadata({
235
+ resourceType: 'intent',
236
+ source: 'intent-create',
237
+ createdAt: new Date().toISOString(),
238
+ });
239
+ const linked = [];
240
+ for (const networkId of requested) {
241
+ const outcome = await deps.database.assignIntentToNetworkIfMember(state.userId, intentId, networkId, metadata.finalScore, metadata.metadata);
242
+ if (outcome.kind === 'assigned' || outcome.kind === 'already_assigned') {
243
+ linked.push(networkId);
244
+ }
245
+ else {
246
+ logger.warn('Intent network link rejected', { intentId, networkId, outcome: outcome.kind });
247
+ }
248
+ }
249
+ return linked;
250
+ }
132
251
  /**
133
252
  * Node: Query
134
253
  * Fast-path read node — fetches intents from DB based on scope.
@@ -145,14 +264,14 @@ export async function queryNode(state, deps) {
145
264
  });
146
265
  try {
147
266
  // Scope-aware default: caller's intents across all reachable networks.
148
- // Triggered when the tool layer passed indexScope and did not pick a
267
+ // Triggered when the host passed networkScope and did not pick a
149
268
  // specific networkId or queryUserId — i.e. "my intents" in a chat
150
- // where the agent's reach is more than one index.
269
+ // where the agent's reach is more than one network.
151
270
  if (!state.queryUserId &&
152
271
  !state.networkId &&
153
- state.indexScope &&
154
- state.indexScope.length > 0) {
155
- const intents = await deps.database.getActiveIntentsAcrossIndexes(state.userId, state.indexScope);
272
+ state.networkScope &&
273
+ state.networkScope.length > 0) {
274
+ const intents = await deps.database.getActiveIntentsAcrossNetworks(state.userId, state.networkScope);
156
275
  if (intents.length === 0) {
157
276
  return {
158
277
  readResult: {
@@ -175,37 +294,37 @@ export async function queryNode(state, deps) {
175
294
  };
176
295
  }
177
296
  // When allUserIntents is true, ignore network scope and return all
178
- const effectiveIndexId = state.allUserIntents ? undefined : state.networkId;
179
- if (effectiveIndexId) {
297
+ const effectiveNetworkId = state.allUserIntents ? undefined : state.networkId;
298
+ if (effectiveNetworkId) {
180
299
  // Verify membership
181
- const isMember = await deps.database.isNetworkMember(effectiveIndexId, state.userId);
300
+ const isMember = await deps.database.isNetworkMember(effectiveNetworkId, state.userId);
182
301
  if (!isMember) {
183
302
  return {
184
303
  readResult: {
185
304
  count: 0,
186
305
  intents: [],
187
- message: "Index not found or you are not a member.",
306
+ message: "Network not found or you are not a member.",
188
307
  },
189
308
  };
190
309
  }
191
310
  // Network-scoped read
192
311
  if (!state.queryUserId) {
193
- // All intents in the index (any member can see)
194
- const intents = await deps.database.getNetworkIntentsForMember(effectiveIndexId, state.userId, { limit: 50, offset: 0 });
312
+ // All intents in the network (any member can see)
313
+ const intents = await deps.database.getNetworkIntentsForMember(effectiveNetworkId, state.userId, { limit: 50, offset: 0 });
195
314
  if (intents.length === 0) {
196
315
  return {
197
316
  readResult: {
198
317
  count: 0,
199
318
  intents: [],
200
319
  message: "No intents in this network yet.",
201
- networkId: effectiveIndexId,
320
+ networkId: effectiveNetworkId,
202
321
  },
203
322
  };
204
323
  }
205
324
  return {
206
325
  readResult: {
207
326
  count: intents.length,
208
- networkId: effectiveIndexId,
327
+ networkId: effectiveNetworkId,
209
328
  intents: intents.map((i) => ({
210
329
  id: i.id,
211
330
  description: i.payload,
@@ -217,9 +336,9 @@ export async function queryNode(state, deps) {
217
336
  },
218
337
  };
219
338
  }
220
- // Specific user's intents in the index
339
+ // Specific user's intents in the network
221
340
  const effectiveUserId = state.queryUserId;
222
- const intents = await deps.database.getIntentsInIndexForMember(effectiveUserId, effectiveIndexId);
341
+ const intents = await deps.database.getIntentsInNetworkForMember(effectiveUserId, effectiveNetworkId);
223
342
  if (intents.length === 0) {
224
343
  return {
225
344
  readResult: {
@@ -228,7 +347,7 @@ export async function queryNode(state, deps) {
228
347
  message: effectiveUserId === state.userId
229
348
  ? "You don't have any intents in this network yet."
230
349
  : "No intents for that user in this network.",
231
- networkId: effectiveIndexId,
350
+ networkId: effectiveNetworkId,
232
351
  },
233
352
  };
234
353
  }
@@ -237,7 +356,7 @@ export async function queryNode(state, deps) {
237
356
  return {
238
357
  readResult: {
239
358
  count: intents.length,
240
- networkId: effectiveIndexId,
359
+ networkId: effectiveNetworkId,
241
360
  intents: intents.map((i) => ({
242
361
  id: i.id,
243
362
  description: i.payload,
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Intent graph preparation and explicit update inference.
3
+ */
4
+ import type { DebugMetaAgent } from "../../../protocol/core.js";
5
+ import { type IntentGraphDeps, type IntentState } from "./intent.graph.shared.js";
6
+ /**
7
+ * Validate that the input shape selects exactly one route. Returns an error
8
+ * message when it doesn't; undefined when the shape is valid.
9
+ *
10
+ * Never infer destruction from a missing field: `targetIntentIds` alone
11
+ * (no content, no archive, no status) is an input error, not a silent no-op.
12
+ */
13
+ export declare function validateInputShape(state: IntentState): string | undefined;
14
+ /**
15
+ * Node 0: Prep
16
+ * Validates the input route and loads active IDs for existing-intent operations.
17
+ * Creation does not inspect or reconcile existing intents.
18
+ */
19
+ export declare function prepNode(state: IntentState, deps: IntentGraphDeps): Promise<{
20
+ trace: {
21
+ node: string;
22
+ detail: string;
23
+ }[];
24
+ error?: string | undefined;
25
+ activeIntentIds: string[];
26
+ }>;
27
+ /**
28
+ * Node 1: Inference
29
+ * Extracts intents from raw content. Only reached on the content path
30
+ * (see {@link afterPrepRoute}), so `inputContent` is always defined here.
31
+ * Passes conversation context for anaphoric resolution.
32
+ */
33
+ export declare function inferenceNode(state: IntentState, deps: IntentGraphDeps): Promise<{
34
+ inferredIntents: {
35
+ reasoning: string;
36
+ type: "goal" | "tombstone";
37
+ confidence: "low" | "medium" | "high";
38
+ description: string;
39
+ }[];
40
+ agentTimings: DebugMetaAgent[];
41
+ trace: {
42
+ node: string;
43
+ detail: string;
44
+ }[];
45
+ }>;
46
+ /** Prepare an unprepared create, or reuse host authorization for the final edited text. */
47
+ export declare function preparationNode(state: IntentState, deps: IntentGraphDeps): Promise<{
48
+ preparationResult: {
49
+ status: "needs_revision";
50
+ payload: string;
51
+ feedback: string;
52
+ recovery: import("../intent.preparer.js").RecoveryField[];
53
+ };
54
+ actions: never[];
55
+ validationFailures: {
56
+ category: "vague_or_invalid";
57
+ message: string;
58
+ }[];
59
+ preparation?: undefined;
60
+ trace?: undefined;
61
+ } | {
62
+ preparation: import("../intent.preparer.js").PreparedIntent;
63
+ preparationResult: {
64
+ status: "ready";
65
+ payload: string;
66
+ metadata: import("../intent.admission.js").IntentSemanticMetadata;
67
+ } | undefined;
68
+ actions: {
69
+ type: "create";
70
+ payload: string;
71
+ metadata: import("../intent.admission.js").IntentSemanticMetadata | null;
72
+ }[];
73
+ trace: {
74
+ node: string;
75
+ detail: string;
76
+ }[];
77
+ validationFailures?: undefined;
78
+ }>;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Intent graph preparation and explicit update inference.
3
+ */
4
+ import { timed } from "../../shared/observability/performance.js";
5
+ import { requestContext } from "../../shared/observability/request-context.js";
6
+ import { logger } from "./intent.graph.shared.js";
7
+ /**
8
+ * Validate that the input shape selects exactly one route. Returns an error
9
+ * message when it doesn't; undefined when the shape is valid.
10
+ *
11
+ * Never infer destruction from a missing field: `targetIntentIds` alone
12
+ * (no content, no archive, no status) is an input error, not a silent no-op.
13
+ */
14
+ export function validateInputShape(state) {
15
+ const hasContent = state.inputContent !== undefined;
16
+ const hasTargets = !!state.targetIntentIds?.length;
17
+ const hasArchive = state.archive === true;
18
+ const hasStatus = state.status !== undefined;
19
+ const routeCount = [hasContent, hasArchive, hasStatus].filter(Boolean).length;
20
+ if (routeCount > 1) {
21
+ return 'Intent graph input selected more than one route: content, archive, and status are mutually exclusive.';
22
+ }
23
+ if (hasTargets && !hasContent && !hasArchive && !hasStatus) {
24
+ return 'targetIntentIds requires inputContent (update), archive, or status.';
25
+ }
26
+ if (hasArchive && !hasTargets) {
27
+ return 'archive requires targetIntentIds.';
28
+ }
29
+ if (hasStatus && !hasTargets) {
30
+ return 'status requires targetIntentIds.';
31
+ }
32
+ return undefined;
33
+ }
34
+ /**
35
+ * Node 0: Prep
36
+ * Validates the input route and loads active IDs for existing-intent operations.
37
+ * Creation does not inspect or reconcile existing intents.
38
+ */
39
+ export async function prepNode(state, deps) {
40
+ return timed("IntentGraph.prep", async () => {
41
+ logger.verbose("Starting preparation phase", {
42
+ hasContent: !!state.inputContent,
43
+ targetIntentIds: state.targetIntentIds,
44
+ archive: state.archive,
45
+ status: state.status,
46
+ networkId: state.networkId,
47
+ });
48
+ const validationError = validateInputShape(state);
49
+ // Creation never loads existing intents: explicit creation cannot merge them.
50
+ const activeIntents = state.inputContent !== undefined && !state.targetIntentIds?.length
51
+ ? []
52
+ : await deps.database.getActiveIntents(state.userId);
53
+ logger.verbose("Fetched active intents", {
54
+ count: activeIntents.length,
55
+ });
56
+ return {
57
+ activeIntentIds: activeIntents.map((intent) => intent.id),
58
+ ...(validationError ? { error: validationError } : {}),
59
+ trace: [{
60
+ node: "prep",
61
+ detail: `Fetched ${activeIntents.length} active intent(s)`,
62
+ }],
63
+ };
64
+ });
65
+ }
66
+ /**
67
+ * Node 1: Inference
68
+ * Extracts intents from raw content. Only reached on the content path
69
+ * (see {@link afterPrepRoute}), so `inputContent` is always defined here.
70
+ * Passes conversation context for anaphoric resolution.
71
+ */
72
+ export async function inferenceNode(state, deps) {
73
+ return timed("IntentGraph.inference", async () => {
74
+ logger.verbose("Starting inference", {
75
+ contentPreview: state.inputContent?.substring(0, 50),
76
+ hasConversationContext: !!state.conversationContext,
77
+ conversationMessagesCount: state.conversationContext?.length || 0
78
+ });
79
+ const agentTimingsAccum = [];
80
+ const _traceEmitterInferrer = requestContext.getStore()?.traceEmitter;
81
+ const inferrerStart = Date.now();
82
+ _traceEmitterInferrer?.({ type: "agent_start", name: "intent-inferrer" });
83
+ const result = await deps.inferrer.invoke(state.inputContent ?? null, state.userProfile, {
84
+ conversationContext: state.conversationContext
85
+ });
86
+ agentTimingsAccum.push({ name: 'intent.inferrer', durationMs: Date.now() - inferrerStart });
87
+ _traceEmitterInferrer?.({ type: "agent_end", name: "intent-inferrer", durationMs: Date.now() - inferrerStart, summary: result.intents.length > 0 ? `Extracted ${result.intents.length} intent(s)` : "intent-inferrer completed" });
88
+ logger.verbose("Inference complete", {
89
+ inferredCount: result.intents.length,
90
+ });
91
+ const descriptions = result.intents.map(i => i.description).slice(0, 3);
92
+ const truncated = result.intents.length > 3 ? `... +${result.intents.length - 3} more` : "";
93
+ return {
94
+ inferredIntents: result.intents,
95
+ agentTimings: agentTimingsAccum,
96
+ trace: [{
97
+ node: "inference",
98
+ detail: result.intents.length === 0
99
+ ? "No intents extracted"
100
+ : `Extracted ${result.intents.length}: ${descriptions.map(d => `"${d.slice(0, 50)}${d.length > 50 ? '...' : ''}"`).join(", ")}${truncated}`,
101
+ }],
102
+ };
103
+ });
104
+ }
105
+ /** Prepare an unprepared create, or reuse host authorization for the final edited text. */
106
+ export async function preparationNode(state, deps) {
107
+ const result = state.preparation ? undefined : await deps.preparer.invoke({ payload: state.inputContent }, state.userProfile);
108
+ if (result?.status === "needs_revision") {
109
+ return {
110
+ preparationResult: result,
111
+ actions: [],
112
+ validationFailures: [{ category: "vague_or_invalid", message: result.feedback }],
113
+ };
114
+ }
115
+ const preparation = state.preparation ?? { metadata: result.metadata };
116
+ return {
117
+ preparation,
118
+ preparationResult: result,
119
+ actions: [{ type: "create", payload: state.inputContent, metadata: preparation.metadata }],
120
+ trace: [{ node: "preparation", detail: state.preparation ? "Reused approved preparation" : "Description passed admission" }],
121
+ };
122
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Intent graph: prepare/create, or explicitly read, update, archive, and transition.
3
+ *
4
+ * Every node is a top-level function in a sibling module, taking the graph
5
+ * state and an explicit {@link IntentGraphDeps}. This file composes the
6
+ * dependency bag and wires the edges — nothing else.
7
+ */
8
+ import { StateGraph, START, END } from "@langchain/langgraph";
9
+ import { ExplicitIntentInferrer } from "../intent.inferrer.js";
10
+ import { SemanticVerifier } from "../intent.verifier.js";
11
+ import { IntentPreparer } from "../intent.preparer.js";
12
+ import { IntentGraphState } from "./intent.graph.state.js";
13
+ import { logger } from "./intent.graph.shared.js";
14
+ import { inferenceNode, preparationNode, prepNode } from "./intent.graph.infer.js";
15
+ import { reconciliationNode, verificationNode } from "./intent.graph.reconcile.js";
16
+ import { executorNode, queryNode } from "./intent.graph.execute.js";
17
+ export { buildExplicitUpdateActions, enforceIntentActionBoundary, isExplicitUpdateRequest } from "./intent.graph.shared.js";
18
+ export class IntentGraphFactory {
19
+ constructor(database, embedder, intentFollowUp, agents) {
20
+ this.deps = {
21
+ database,
22
+ embedder,
23
+ intentFollowUp,
24
+ inferrer: agents?.inferrer ?? new ExplicitIntentInferrer(),
25
+ verifier: agents?.verifier ?? new SemanticVerifier(),
26
+ preparer: new IntentPreparer(agents?.verifier),
27
+ };
28
+ }
29
+ createGraph() {
30
+ const deps = this.deps;
31
+ return new StateGraph(IntentGraphState)
32
+ .addNode("prep", (state) => prepNode(state, deps))
33
+ .addNode("prepareCreation", (state) => preparationNode(state, deps))
34
+ .addNode("query", (state) => queryNode(state, deps))
35
+ .addNode("inference", (state) => inferenceNode(state, deps))
36
+ .addNode("verification", (state) => verificationNode(state, deps))
37
+ .addNode("reconciler", (state) => reconciliationNode(state))
38
+ .addNode("executor", (state) => executorNode(state, deps))
39
+ // The graph routes on the shape of its input (see intent.graph.state.ts):
40
+ // - READ: no content/target → prep → query → END (no LLM calls)
41
+ // - CREATE: inputContent only → prep → preparation → executor → END
42
+ // - UPDATE: inputContent + targetIntentIds → prep → inference → verification → reconciler → executor
43
+ // - ARCHIVE: targetIntentIds + archive → prep → reconciler → executor → END (no LLM)
44
+ // - TRANSITION: targetIntentIds + status → prep → reconciler → executor → END (no LLM)
45
+ .addEdge(START, "prep")
46
+ // Create prepares once; update infers; read/archive/status need no models.
47
+ .addConditionalEdges("prep", afterPrepRoute, {
48
+ query: "query",
49
+ inference: "inference",
50
+ prepareCreation: "prepareCreation",
51
+ reconciler: "reconciler",
52
+ __end__: END,
53
+ })
54
+ // Query (read mode) always ends
55
+ .addEdge("query", END)
56
+ .addEdge("prepareCreation", "executor")
57
+ // After inference: decide if we need verification (skip if no intents)
58
+ .addConditionalEdges("inference", shouldRunVerification, {
59
+ verification: "verification",
60
+ reconciler: "reconciler",
61
+ })
62
+ // Verification always continues to reconciliation
63
+ .addEdge("verification", "reconciler")
64
+ // Reconciliation always goes to executor
65
+ .addEdge("reconciler", "executor")
66
+ // Executor is always the end
67
+ .addEdge("executor", END)
68
+ .compile();
69
+ }
70
+ }
71
+ /**
72
+ * After prep: an invalid input shape or a failed precondition ends the
73
+ * graph; a fully-empty input is a read; archive/status skip straight to
74
+ * the reconciler (no LLM); otherwise the content path infers.
75
+ */
76
+ export function afterPrepRoute(state) {
77
+ if (state.error) {
78
+ logger.warn('Prep failed with error, short-circuiting to END', { error: state.error });
79
+ return '__end__';
80
+ }
81
+ const hasContent = state.inputContent !== undefined;
82
+ const hasArchive = state.archive === true;
83
+ const hasStatus = state.status !== undefined;
84
+ if (!hasContent && !hasArchive && !hasStatus) {
85
+ logger.verbose('No content/target - routing to query (read fast path)');
86
+ return 'query';
87
+ }
88
+ if (hasArchive || hasStatus) {
89
+ logger.verbose('Deterministic route (archive/status) - skipping inference');
90
+ return 'reconciler';
91
+ }
92
+ if (!state.targetIntentIds?.length)
93
+ return 'prepareCreation';
94
+ logger.verbose('Explicit update - running inference');
95
+ return 'inference';
96
+ }
97
+ /**
98
+ * Determines if verification should run. Skipped when inference produced
99
+ * no candidates: the (empty) reconciler pass still runs so the graph
100
+ * reports "nothing to do" consistently.
101
+ */
102
+ export function shouldRunVerification(state) {
103
+ if (state.inferredIntents.length === 0) {
104
+ logger.verbose('No intents to verify - skipping verification, routing to reconciliation');
105
+ return 'reconciler';
106
+ }
107
+ return 'verification';
108
+ }