@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.
- package/CHANGELOG.md +1841 -0
- package/IMPLEMENTATION.md +140 -181
- package/README.md +16 -20
- package/STABILITY.md +16 -11
- package/dist/{intents/intent.module.d.ts → capabilities/intents.d.ts} +182 -192
- package/dist/capabilities/intents.js +88 -0
- package/dist/capabilities/negotiations.d.ts +17 -0
- package/dist/capabilities/negotiations.js +16 -0
- package/dist/{networks/network.module.d.ts → capabilities/networks.d.ts} +33 -169
- package/dist/{networks/network.module.js → capabilities/networks.js} +6 -17
- package/dist/index.d.ts +57 -134
- package/dist/index.js +41 -105
- package/dist/internal/agents/agent.repository.port.d.ts +59 -0
- package/dist/internal/agents/agent.repository.port.js +7 -0
- package/dist/internal/agents/agent.types.d.ts +35 -0
- package/dist/{agents → internal/agents}/agent.types.js +1 -6
- package/dist/{intents → internal/intents}/graph/intent.graph.d.ts +142 -151
- package/dist/{intents → internal/intents}/graph/intent.graph.execute.d.ts +5 -1
- package/dist/{intents → internal/intents}/graph/intent.graph.execute.js +165 -46
- package/dist/internal/intents/graph/intent.graph.infer.d.ts +78 -0
- package/dist/internal/intents/graph/intent.graph.infer.js +122 -0
- package/dist/internal/intents/graph/intent.graph.js +108 -0
- package/dist/{intents → internal/intents}/graph/intent.graph.reconcile.d.ts +18 -9
- package/dist/internal/intents/graph/intent.graph.reconcile.js +173 -0
- package/dist/internal/intents/graph/intent.graph.shared.d.ts +55 -0
- package/dist/{intents → internal/intents}/graph/intent.graph.shared.js +25 -70
- package/dist/{intents → internal/intents}/graph/intent.graph.state.d.ts +96 -32
- package/dist/{intents → internal/intents}/graph/intent.graph.state.js +42 -31
- package/dist/internal/intents/intent.admission.d.ts +16 -0
- package/dist/internal/intents/intent.admission.js +30 -0
- package/dist/{intents → internal/intents}/intent.inferrer.d.ts +1 -40
- package/dist/{intents → internal/intents}/intent.inferrer.js +13 -49
- package/dist/internal/intents/intent.preparer.d.ts +52 -0
- package/dist/internal/intents/intent.preparer.js +87 -0
- package/dist/{intents → internal/intents}/intent.verifier.d.ts +3 -36
- package/dist/{intents → internal/intents}/intent.verifier.js +0 -17
- package/dist/{networks → internal/networks}/indexer.graph.d.ts +15 -200
- package/dist/{networks → internal/networks}/indexer.graph.js +19 -128
- package/dist/{networks → internal/networks}/indexer.state.d.ts +8 -63
- package/dist/internal/networks/indexer.state.js +70 -0
- package/dist/{networks → internal/networks}/membership.graph.d.ts +6 -6
- package/dist/{networks → internal/networks}/membership.graph.js +3 -3
- package/dist/{networks → internal/networks}/membership.state.d.ts +2 -2
- package/dist/{networks → internal/networks}/membership.state.js +2 -2
- package/dist/{networks → internal/networks}/network.graph.d.ts +9 -22
- package/dist/{networks → internal/networks}/network.graph.js +13 -27
- package/dist/{networks → internal/networks}/network.recommender.d.ts +2 -2
- package/dist/{networks → internal/networks}/network.recommender.js +2 -2
- package/dist/{networks → internal/networks}/network.state.d.ts +4 -7
- package/dist/{networks → internal/networks}/network.state.js +4 -4
- package/dist/internal/opportunities/negotiation-context.loader.d.ts +26 -0
- package/dist/internal/opportunities/negotiation-context.loader.js +36 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.actor.d.ts +1 -1
- package/dist/{opportunities → internal/opportunities}/opportunity.actor.js +7 -1
- package/dist/internal/opportunities/opportunity.counterparties.d.ts +17 -0
- package/dist/internal/opportunities/opportunity.counterparties.js +19 -0
- package/dist/internal/opportunities/opportunity.events.d.ts +38 -0
- package/dist/internal/opportunities/opportunity.events.js +94 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.feed-selection.d.ts +3 -9
- package/dist/internal/opportunities/opportunity.feed-selection.js +40 -0
- package/dist/internal/opportunities/opportunity.graph.modes.d.ts +39 -0
- package/dist/internal/opportunities/opportunity.graph.modes.js +138 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.labels.d.ts +2 -3
- package/dist/internal/opportunities/opportunity.labels.js +9 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.presentation.d.ts +17 -86
- package/dist/{opportunities → internal/opportunities}/opportunity.presentation.js +54 -447
- package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.d.ts +2 -2
- package/dist/internal/opportunities/opportunity.utils.d.ts +105 -0
- package/dist/internal/opportunities/opportunity.utils.js +165 -0
- package/dist/{opportunities → internal/opportunities}/radar/radar.graph.d.ts +17 -17
- package/dist/{opportunities → internal/opportunities}/radar/radar.graph.js +41 -161
- package/dist/{opportunities → internal/opportunities}/radar/radar.state.d.ts +4 -11
- package/dist/{shared → internal/shared}/agent/model-signal.d.ts +1 -1
- package/dist/{shared → internal/shared}/agent/model-signal.js +1 -1
- package/dist/{shared → internal/shared}/agent/model.config.d.ts +28 -86
- package/dist/{shared → internal/shared}/agent/model.config.js +58 -69
- package/dist/internal/shared/agent/model.resolver.d.ts +33 -0
- package/dist/{shared → internal/shared}/agent/model.resolver.js +18 -33
- package/dist/internal/shared/agent/scope.d.ts +20 -0
- package/dist/internal/shared/agent/scope.js +24 -0
- package/dist/internal/shared/assignment/network-assignment.policy.d.ts +23 -0
- package/dist/internal/shared/assignment/network-assignment.policy.js +28 -0
- package/dist/{shared → internal/shared}/observability/log.d.ts +3 -6
- package/dist/{shared → internal/shared}/observability/log.js +9 -18
- package/dist/{shared → internal/shared}/observability/protocol.logger.d.ts +1 -1
- package/dist/{shared → internal/shared}/observability/protocol.logger.js +1 -1
- package/dist/internal/shared/observability/request-context.d.ts +29 -0
- package/dist/internal/shared/observability/request-context.js +17 -0
- package/dist/{shared → internal/shared}/utils/social-label.d.ts +2 -2
- package/dist/{shared → internal/shared}/utils/social-label.js +1 -1
- package/dist/platform/database/capabilities.d.ts +59 -0
- package/dist/{shared/interfaces/database.entities.d.ts → platform/database/entities.d.ts} +81 -121
- package/dist/{shared/interfaces/database.identity-queries.d.ts → platform/database/identity-queries.d.ts} +55 -20
- package/dist/platform/database/member-queries.d.ts +55 -0
- package/dist/platform/database/member-queries.js +4 -0
- package/dist/platform/database/negotiation.d.ts +38 -0
- package/dist/{shared/interfaces/database.network-queries.d.ts → platform/database/network-queries.d.ts} +66 -67
- package/dist/platform/database/network-queries.js +4 -0
- package/dist/{shared/interfaces/database.opportunity-queries.d.ts → platform/database/opportunity-queries.d.ts} +25 -109
- package/dist/{shared/interfaces/database.port.d.ts → platform/database/port.d.ts} +52 -117
- package/dist/{shared/interfaces/database.port.js → platform/database/port.js} +3 -5
- package/dist/platform/database.d.ts +23 -0
- package/dist/{shared/interfaces/database.interface.js → platform/database.js} +1 -1
- package/dist/{shared/interfaces/cache.interface.d.ts → platform/discovery/cache.d.ts} +2 -4
- package/dist/{shared/interfaces/cache.interface.js → platform/discovery/cache.js} +1 -1
- package/dist/platform/discovery/embedder.d.ts +31 -0
- package/dist/platform/runtime/errors.d.ts +6 -0
- package/dist/platform/runtime/errors.js +9 -0
- package/dist/platform/runtime/follow-up.d.ts +36 -0
- package/dist/platform/runtime/follow-up.js +4 -0
- package/dist/platform/runtime/observability.d.ts +34 -0
- package/dist/protocol/core.d.ts +11 -0
- package/dist/protocol/discovery.rules.d.ts +21 -0
- package/dist/protocol/discovery.rules.js +29 -0
- package/dist/protocol/negotiation.constants.d.ts +3 -0
- package/dist/protocol/negotiation.constants.js +3 -0
- package/dist/protocol/negotiation.rules.d.ts +73 -0
- package/dist/protocol/negotiation.rules.js +68 -0
- package/dist/protocol/protocol.prompt.d.ts +13 -0
- package/dist/protocol/protocol.prompt.js +190 -0
- package/dist/{shared → protocol}/schemas/discovery-question.schema.d.ts +13 -13
- package/dist/{shared → protocol}/schemas/discovery-question.schema.js +2 -2
- package/dist/{shared → protocol}/schemas/identity.schema.d.ts +4 -4
- package/dist/{shared → protocol}/schemas/identity.schema.js +4 -4
- package/dist/{shared → protocol}/schemas/network-assignment.schema.d.ts +11 -20
- package/dist/{shared → protocol}/schemas/network-assignment.schema.js +2 -9
- package/dist/protocol/schemas/underspecification.schema.d.ts +9 -0
- package/dist/protocol/schemas/underspecification.schema.js +12 -0
- package/package.json +7 -15
- package/dist/agents/agent.dispatcher.port.d.ts +0 -25
- package/dist/agents/agent.module.d.ts +0 -19
- package/dist/agents/agent.module.js +0 -11
- package/dist/agents/agent.repository.port.d.ts +0 -118
- package/dist/agents/agent.repository.port.js +0 -10
- package/dist/agents/agent.tools.d.ts +0 -16
- package/dist/agents/agent.tools.js +0 -351
- package/dist/agents/agent.tools.port.d.ts +0 -22
- package/dist/agents/agent.tools.port.js +0 -18
- package/dist/agents/agent.types.d.ts +0 -76
- package/dist/chat/chat-streaming.types.d.ts +0 -618
- package/dist/chat/chat-streaming.types.js +0 -297
- package/dist/chat/chat.agent.d.ts +0 -292
- package/dist/chat/chat.agent.js +0 -1010
- package/dist/chat/chat.graph.d.ts +0 -424
- package/dist/chat/chat.graph.js +0 -257
- package/dist/chat/chat.interrupt.classifier.d.ts +0 -25
- package/dist/chat/chat.interrupt.classifier.js +0 -64
- package/dist/chat/chat.persona.d.ts +0 -39
- package/dist/chat/chat.prompt.d.ts +0 -4
- package/dist/chat/chat.prompt.js +0 -12
- package/dist/chat/chat.prompt.modules.d.ts +0 -30
- package/dist/chat/chat.prompt.modules.js +0 -40
- package/dist/chat/chat.question-dedup.d.ts +0 -14
- package/dist/chat/chat.question-dedup.js +0 -17
- package/dist/chat/chat.state.d.ts +0 -135
- package/dist/chat/chat.state.js +0 -120
- package/dist/chat/chat.streamer.d.ts +0 -64
- package/dist/chat/chat.streamer.js +0 -217
- package/dist/chat/chat.suggester.d.ts +0 -23
- package/dist/chat/chat.suggester.js +0 -95
- package/dist/chat/chat.summarizer.d.ts +0 -20
- package/dist/chat/chat.summarizer.js +0 -97
- package/dist/chat/chat.title.generator.d.ts +0 -19
- package/dist/chat/chat.title.generator.js +0 -66
- package/dist/chat/chat.tools.d.ts +0 -5
- package/dist/chat/chat.tools.js +0 -62
- package/dist/chat/chat.utils.d.ts +0 -41
- package/dist/chat/chat.utils.js +0 -88
- package/dist/chat/negotiator.persona.d.ts +0 -74
- package/dist/chat/negotiator.persona.js +0 -154
- package/dist/chat/negotiator.prompt.d.ts +0 -45
- package/dist/chat/negotiator.prompt.js +0 -160
- package/dist/chat/negotiator.tools.d.ts +0 -42
- package/dist/chat/negotiator.tools.js +0 -134
- package/dist/chat/onboarding.persona.d.ts +0 -28
- package/dist/chat/onboarding.persona.js +0 -86
- package/dist/chat/onboarding.prompt.d.ts +0 -6
- package/dist/chat/onboarding.prompt.js +0 -63
- package/dist/chat/signal.persona.d.ts +0 -47
- package/dist/chat/signal.persona.js +0 -319
- package/dist/chat/signal.prompt.d.ts +0 -39
- package/dist/chat/signal.prompt.js +0 -136
- package/dist/contacts/contact.module.d.ts +0 -8
- package/dist/contacts/contact.module.js +0 -6
- package/dist/contacts/contact.repository.port.d.ts +0 -21
- package/dist/contacts/contact.repository.port.js +0 -12
- package/dist/contacts/contact.tools.d.ts +0 -17
- package/dist/contacts/contact.tools.js +0 -108
- package/dist/contacts/contact.tools.port.d.ts +0 -20
- package/dist/contacts/contact.tools.port.js +0 -16
- package/dist/contacts/contact.types.d.ts +0 -24
- package/dist/contacts/contact.types.js +0 -8
- package/dist/contexts/context.generator.d.ts +0 -95
- package/dist/contexts/context.generator.js +0 -127
- package/dist/contexts/context.module.d.ts +0 -13
- package/dist/contexts/context.module.js +0 -12
- package/dist/contexts/context.tools.port.d.ts +0 -9
- package/dist/discovery/hyde.documents.d.ts +0 -9
- package/dist/discovery/hyde.documents.js +0 -49
- package/dist/discovery/hyde.env.d.ts +0 -8
- package/dist/discovery/hyde.env.js +0 -9
- package/dist/discovery/hyde.frame.d.ts +0 -150
- package/dist/discovery/hyde.frame.js +0 -107
- package/dist/discovery/hyde.generator.d.ts +0 -38
- package/dist/discovery/hyde.generator.js +0 -103
- package/dist/discovery/hyde.graph.d.ts +0 -209
- package/dist/discovery/hyde.graph.js +0 -482
- package/dist/discovery/hyde.state.d.ts +0 -70
- package/dist/discovery/hyde.state.js +0 -85
- package/dist/discovery/hyde.strategies.d.ts +0 -17
- package/dist/discovery/hyde.strategies.js +0 -34
- package/dist/discovery/hyde.validator.d.ts +0 -78
- package/dist/discovery/hyde.validator.js +0 -48
- package/dist/discovery/index.d.ts +0 -26
- package/dist/discovery/index.js +0 -19
- package/dist/discovery/lens.inferrer.d.ts +0 -214
- package/dist/discovery/lens.inferrer.js +0 -152
- package/dist/enrichment/enrichment.generator.d.ts +0 -68
- package/dist/enrichment/enrichment.generator.js +0 -95
- package/dist/enrichment/enrichment.graph.d.ts +0 -544
- package/dist/enrichment/enrichment.graph.js +0 -695
- package/dist/enrichment/enrichment.state.d.ts +0 -141
- package/dist/enrichment/enrichment.state.js +0 -115
- package/dist/enrichment/enrichment.tools.context-read.d.ts +0 -10
- package/dist/enrichment/enrichment.tools.context-read.js +0 -353
- package/dist/enrichment/enrichment.tools.context-write.d.ts +0 -9
- package/dist/enrichment/enrichment.tools.context-write.js +0 -417
- package/dist/enrichment/enrichment.tools.d.ts +0 -13
- package/dist/enrichment/enrichment.tools.helpers.d.ts +0 -139
- package/dist/enrichment/enrichment.tools.helpers.js +0 -234
- package/dist/enrichment/enrichment.tools.js +0 -153
- package/dist/intents/graph/intent.graph.infer.d.ts +0 -44
- package/dist/intents/graph/intent.graph.infer.js +0 -97
- package/dist/intents/graph/intent.graph.js +0 -134
- package/dist/intents/graph/intent.graph.reconcile.js +0 -274
- package/dist/intents/graph/intent.graph.shared.d.ts +0 -68
- package/dist/intents/intake/intake.orchestrator.d.ts +0 -203
- package/dist/intents/intake/intake.orchestrator.js +0 -255
- package/dist/intents/intake/intake.pack.generator.d.ts +0 -57
- package/dist/intents/intake/intake.pack.generator.js +0 -90
- package/dist/intents/intent.clarifier.d.ts +0 -51
- package/dist/intents/intent.clarifier.js +0 -201
- package/dist/intents/intent.indexer.d.ts +0 -82
- package/dist/intents/intent.indexer.js +0 -170
- package/dist/intents/intent.module.js +0 -103
- package/dist/intents/intent.proposal.d.ts +0 -37
- package/dist/intents/intent.proposal.js +0 -14
- package/dist/intents/intent.reconciler.d.ts +0 -105
- package/dist/intents/intent.reconciler.js +0 -186
- package/dist/intents/intent.tools.d.ts +0 -27
- package/dist/intents/intent.tools.js +0 -808
- package/dist/maintenance/maintenance.graph.d.ts +0 -239
- package/dist/maintenance/maintenance.graph.js +0 -199
- package/dist/maintenance/maintenance.state.d.ts +0 -35
- package/dist/maintenance/maintenance.state.js +0 -55
- package/dist/mcp/elicitation.builder.d.ts +0 -53
- package/dist/mcp/elicitation.builder.js +0 -74
- package/dist/mcp/elicitation.dispatcher.d.ts +0 -36
- package/dist/mcp/elicitation.dispatcher.js +0 -86
- package/dist/mcp/mcp.authorization-policy.d.ts +0 -252
- package/dist/mcp/mcp.authorization-policy.js +0 -535
- package/dist/mcp/mcp.server.d.ts +0 -90
- package/dist/mcp/mcp.server.js +0 -631
- package/dist/negotiations/insight.generator.d.ts +0 -31
- package/dist/negotiations/insight.generator.js +0 -105
- package/dist/negotiations/negotiation.agent.d.ts +0 -130
- package/dist/negotiations/negotiation.agent.js +0 -396
- package/dist/negotiations/negotiation.answer-consumption.d.ts +0 -223
- package/dist/negotiations/negotiation.answer-consumption.js +0 -275
- package/dist/negotiations/negotiation.attribution.d.ts +0 -91
- package/dist/negotiations/negotiation.attribution.js +0 -109
- package/dist/negotiations/negotiation.candidates.d.ts +0 -83
- package/dist/negotiations/negotiation.candidates.js +0 -162
- package/dist/negotiations/negotiation.client-dm.d.ts +0 -50
- package/dist/negotiations/negotiation.client-dm.js +0 -66
- package/dist/negotiations/negotiation.consultation-policy.d.ts +0 -95
- package/dist/negotiations/negotiation.consultation-policy.js +0 -159
- package/dist/negotiations/negotiation.deadlock.contracts.d.ts +0 -10
- package/dist/negotiations/negotiation.deadlock.d.ts +0 -87
- package/dist/negotiations/negotiation.deadlock.js +0 -150
- package/dist/negotiations/negotiation.detail-reader.d.ts +0 -94
- package/dist/negotiations/negotiation.detail-reader.js +0 -91
- package/dist/negotiations/negotiation.expected-speaker.d.ts +0 -33
- package/dist/negotiations/negotiation.expected-speaker.js +0 -59
- package/dist/negotiations/negotiation.graph.d.ts +0 -694
- package/dist/negotiations/negotiation.graph.finalize.d.ts +0 -5
- package/dist/negotiations/negotiation.graph.finalize.js +0 -403
- package/dist/negotiations/negotiation.graph.init.d.ts +0 -54
- package/dist/negotiations/negotiation.graph.init.js +0 -256
- package/dist/negotiations/negotiation.graph.js +0 -94
- package/dist/negotiations/negotiation.graph.screen.d.ts +0 -23
- package/dist/negotiations/negotiation.graph.screen.js +0 -108
- package/dist/negotiations/negotiation.graph.shared.d.ts +0 -111
- package/dist/negotiations/negotiation.graph.shared.js +0 -168
- package/dist/negotiations/negotiation.graph.turn.d.ts +0 -134
- package/dist/negotiations/negotiation.graph.turn.js +0 -662
- package/dist/negotiations/negotiation.hermes-contract.d.ts +0 -31
- package/dist/negotiations/negotiation.hermes-contract.js +0 -72
- package/dist/negotiations/negotiation.intent-snapshot-provenance.d.ts +0 -21
- package/dist/negotiations/negotiation.intent-snapshot-provenance.js +0 -28
- package/dist/negotiations/negotiation.lifecycle-narration.d.ts +0 -18
- package/dist/negotiations/negotiation.lifecycle-narration.js +0 -87
- package/dist/negotiations/negotiation.memory.d.ts +0 -65
- package/dist/negotiations/negotiation.memory.js +0 -83
- package/dist/negotiations/negotiation.module.d.ts +0 -36
- package/dist/negotiations/negotiation.module.js +0 -23
- package/dist/negotiations/negotiation.protocol.d.ts +0 -1018
- package/dist/negotiations/negotiation.protocol.js +0 -224
- package/dist/negotiations/negotiation.question-safety.d.ts +0 -52
- package/dist/negotiations/negotiation.question-safety.js +0 -119
- package/dist/negotiations/negotiation.reflect.d.ts +0 -194
- package/dist/negotiations/negotiation.reflect.js +0 -145
- package/dist/negotiations/negotiation.scope.d.ts +0 -41
- package/dist/negotiations/negotiation.scope.js +0 -39
- package/dist/negotiations/negotiation.screen.contracts.d.ts +0 -88
- package/dist/negotiations/negotiation.screen.contracts.js +0 -58
- package/dist/negotiations/negotiation.screen.d.ts +0 -78
- package/dist/negotiations/negotiation.screen.js +0 -112
- package/dist/negotiations/negotiation.stall-gap.d.ts +0 -83
- package/dist/negotiations/negotiation.stall-gap.js +0 -152
- package/dist/negotiations/negotiation.stance.contracts.d.ts +0 -123
- package/dist/negotiations/negotiation.stance.contracts.js +0 -317
- package/dist/negotiations/negotiation.state.d.ts +0 -597
- package/dist/negotiations/negotiation.state.js +0 -286
- package/dist/negotiations/negotiation.summarizer.d.ts +0 -25
- package/dist/negotiations/negotiation.summarizer.js +0 -101
- package/dist/negotiations/negotiation.task-lock-policy.d.ts +0 -10
- package/dist/negotiations/negotiation.task-lock-policy.js +0 -22
- package/dist/negotiations/negotiation.tools.d.ts +0 -18
- package/dist/negotiations/negotiation.tools.js +0 -842
- package/dist/negotiations/negotiation.tools.port.d.ts +0 -17
- package/dist/negotiations/negotiation.turn-cap.d.ts +0 -9
- package/dist/negotiations/negotiation.turn-cap.js +0 -12
- package/dist/networks/indexer.state.js +0 -112
- package/dist/networks/network.tools.d.ts +0 -36
- package/dist/networks/network.tools.js +0 -594
- package/dist/opportunities/delivery-card.cache.d.ts +0 -25
- package/dist/opportunities/delivery-card.cache.js +0 -43
- package/dist/opportunities/discovery.env.d.ts +0 -20
- package/dist/opportunities/discovery.env.js +0 -109
- package/dist/opportunities/discriminator/discriminator.adjustments.d.ts +0 -90
- package/dist/opportunities/discriminator/discriminator.adjustments.js +0 -141
- package/dist/opportunities/discriminator/discriminator.assigner.d.ts +0 -78
- package/dist/opportunities/discriminator/discriminator.assigner.js +0 -153
- package/dist/opportunities/discriminator/discriminator.env.d.ts +0 -103
- package/dist/opportunities/discriminator/discriminator.env.js +0 -103
- package/dist/opportunities/discriminator/discriminator.miner.d.ts +0 -114
- package/dist/opportunities/discriminator/discriminator.miner.js +0 -228
- package/dist/opportunities/discriminator/discriminator.push.d.ts +0 -13
- package/dist/opportunities/discriminator/discriminator.push.js +0 -19
- package/dist/opportunities/discriminator/discriminator.question.d.ts +0 -58
- package/dist/opportunities/discriminator/discriminator.question.js +0 -155
- package/dist/opportunities/discriminator/discriminator.scorer.d.ts +0 -32
- package/dist/opportunities/discriminator/discriminator.scorer.js +0 -105
- package/dist/opportunities/discriminator/discriminator.shadow.d.ts +0 -32
- package/dist/opportunities/discriminator/discriminator.shadow.js +0 -90
- package/dist/opportunities/discriminator/discriminator.types.d.ts +0 -93
- package/dist/opportunities/discriminator/discriminator.types.js +0 -18
- package/dist/opportunities/negotiation-context.loader.d.ts +0 -59
- package/dist/opportunities/negotiation-context.loader.js +0 -90
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.d.ts +0 -43
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.js +0 -44
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.d.ts +0 -24
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.js +0 -188
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.d.ts +0 -26
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.js +0 -112
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.d.ts +0 -19
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.js +0 -61
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.d.ts +0 -191
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.js +0 -18
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.d.ts +0 -34
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.js +0 -91
- package/dist/opportunities/negotiation-summary.builder.d.ts +0 -37
- package/dist/opportunities/negotiation-summary.builder.js +0 -66
- package/dist/opportunities/opportunity.discovery-negotiation-summary.d.ts +0 -14
- package/dist/opportunities/opportunity.discovery-negotiation-summary.js +0 -46
- package/dist/opportunities/opportunity.enricher.d.ts +0 -71
- package/dist/opportunities/opportunity.enricher.js +0 -280
- package/dist/opportunities/opportunity.evaluator.d.ts +0 -289
- package/dist/opportunities/opportunity.evaluator.js +0 -516
- package/dist/opportunities/opportunity.evidence.d.ts +0 -22
- package/dist/opportunities/opportunity.evidence.js +0 -87
- package/dist/opportunities/opportunity.existing-negotiation.d.ts +0 -79
- package/dist/opportunities/opportunity.existing-negotiation.js +0 -118
- package/dist/opportunities/opportunity.feed-selection.js +0 -96
- package/dist/opportunities/opportunity.graph.d.ts +0 -1611
- package/dist/opportunities/opportunity.graph.discovery-strategies.d.ts +0 -109
- package/dist/opportunities/opportunity.graph.discovery-strategies.js +0 -451
- package/dist/opportunities/opportunity.graph.discovery.d.ts +0 -69
- package/dist/opportunities/opportunity.graph.discovery.js +0 -397
- package/dist/opportunities/opportunity.graph.evaluation.d.ts +0 -82
- package/dist/opportunities/opportunity.graph.evaluation.js +0 -608
- package/dist/opportunities/opportunity.graph.js +0 -193
- package/dist/opportunities/opportunity.graph.modes.d.ts +0 -538
- package/dist/opportunities/opportunity.graph.modes.js +0 -538
- package/dist/opportunities/opportunity.graph.negotiate.d.ts +0 -109
- package/dist/opportunities/opportunity.graph.negotiate.js +0 -392
- package/dist/opportunities/opportunity.graph.persist-node.d.ts +0 -93
- package/dist/opportunities/opportunity.graph.persist-node.js +0 -765
- package/dist/opportunities/opportunity.graph.prep.d.ts +0 -150
- package/dist/opportunities/opportunity.graph.prep.js +0 -381
- package/dist/opportunities/opportunity.graph.shared.d.ts +0 -173
- package/dist/opportunities/opportunity.graph.shared.js +0 -199
- package/dist/opportunities/opportunity.introducer-feature.d.ts +0 -2
- package/dist/opportunities/opportunity.introducer-feature.js +0 -4
- package/dist/opportunities/opportunity.introducer.d.ts +0 -77
- package/dist/opportunities/opportunity.introducer.js +0 -99
- package/dist/opportunities/opportunity.labels.js +0 -10
- package/dist/opportunities/opportunity.lifecycle.d.ts +0 -63
- package/dist/opportunities/opportunity.lifecycle.js +0 -181
- package/dist/opportunities/opportunity.module.d.ts +0 -54
- package/dist/opportunities/opportunity.module.js +0 -39
- package/dist/opportunities/opportunity.newborn-stamping.d.ts +0 -41
- package/dist/opportunities/opportunity.newborn-stamping.js +0 -81
- package/dist/opportunities/opportunity.owner-approval.d.ts +0 -118
- package/dist/opportunities/opportunity.owner-approval.js +0 -34
- package/dist/opportunities/opportunity.owner-provenance.d.ts +0 -6
- package/dist/opportunities/opportunity.owner-provenance.js +0 -28
- package/dist/opportunities/opportunity.persist.d.ts +0 -58
- package/dist/opportunities/opportunity.persist.js +0 -145
- package/dist/opportunities/opportunity.persistence-admission.d.ts +0 -39
- package/dist/opportunities/opportunity.persistence-admission.js +0 -59
- package/dist/opportunities/opportunity.state.d.ts +0 -451
- package/dist/opportunities/opportunity.state.js +0 -256
- package/dist/opportunities/opportunity.tools.cards.d.ts +0 -138
- package/dist/opportunities/opportunity.tools.cards.js +0 -212
- package/dist/opportunities/opportunity.tools.d.ts +0 -12
- package/dist/opportunities/opportunity.tools.js +0 -236
- package/dist/opportunities/opportunity.tools.list.d.ts +0 -10
- package/dist/opportunities/opportunity.tools.list.js +0 -489
- package/dist/opportunities/opportunity.tools.port.d.ts +0 -16
- package/dist/opportunities/opportunity.utils.d.ts +0 -217
- package/dist/opportunities/opportunity.utils.js +0 -395
- package/dist/opportunities/outcome/outcome.env.d.ts +0 -60
- package/dist/opportunities/outcome/outcome.env.js +0 -63
- package/dist/opportunities/outcome/outcome.hypotheses.d.ts +0 -29
- package/dist/opportunities/outcome/outcome.hypotheses.js +0 -117
- package/dist/opportunities/outcome/outcome.shadow.d.ts +0 -56
- package/dist/opportunities/outcome/outcome.shadow.js +0 -87
- package/dist/opportunities/outcome/outcome.types.d.ts +0 -110
- package/dist/opportunities/outcome/outcome.types.js +0 -26
- package/dist/opportunities/radar/radar.health.d.ts +0 -31
- package/dist/opportunities/radar/radar.health.js +0 -75
- package/dist/premises/premise.analyzer.d.ts +0 -35
- package/dist/premises/premise.analyzer.js +0 -115
- package/dist/premises/premise.decomposer.d.ts +0 -69
- package/dist/premises/premise.decomposer.js +0 -213
- package/dist/premises/premise.graph.d.ts +0 -345
- package/dist/premises/premise.graph.js +0 -278
- package/dist/premises/premise.indexer.d.ts +0 -35
- package/dist/premises/premise.indexer.js +0 -86
- package/dist/premises/premise.state.d.ts +0 -67
- package/dist/premises/premise.state.js +0 -94
- package/dist/premises/premise.tools.d.ts +0 -3
- package/dist/premises/premise.tools.js +0 -248
- package/dist/questions/question.env.d.ts +0 -27
- package/dist/questions/question.env.js +0 -27
- package/dist/questions/question.input.d.ts +0 -107
- package/dist/questions/question.module.d.ts +0 -30
- package/dist/questions/question.module.js +0 -28
- package/dist/questions/question.schema.d.ts +0 -1529
- package/dist/questions/question.schema.js +0 -420
- package/dist/shared/agent/activity-projection.d.ts +0 -271
- package/dist/shared/agent/activity-projection.js +0 -254
- package/dist/shared/agent/canonical-guidance.d.ts +0 -30
- package/dist/shared/agent/canonical-guidance.js +0 -246
- package/dist/shared/agent/model.resolver.d.ts +0 -48
- package/dist/shared/agent/tool.factory.d.ts +0 -17
- package/dist/shared/agent/tool.factory.js +0 -221
- package/dist/shared/agent/tool.helpers.d.ts +0 -482
- package/dist/shared/agent/tool.helpers.js +0 -232
- package/dist/shared/agent/tool.registry.d.ts +0 -25
- package/dist/shared/agent/tool.registry.js +0 -76
- package/dist/shared/agent/tool.runtime.d.ts +0 -28
- package/dist/shared/agent/tool.runtime.js +0 -194
- package/dist/shared/agent/tool.scope.d.ts +0 -44
- package/dist/shared/agent/tool.scope.js +0 -50
- package/dist/shared/agent/utility.tools.d.ts +0 -15
- package/dist/shared/agent/utility.tools.js +0 -322
- package/dist/shared/assignment/network-assignment.policy.d.ts +0 -61
- package/dist/shared/assignment/network-assignment.policy.js +0 -105
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +0 -100
- package/dist/shared/interfaces/agent-dispatcher.interface.js +0 -12
- package/dist/shared/interfaces/auth.interface.d.ts +0 -37
- package/dist/shared/interfaces/auth.interface.js +0 -1
- package/dist/shared/interfaces/chat-message-writer.interface.d.ts +0 -18
- package/dist/shared/interfaces/chat-message-writer.interface.js +0 -1
- package/dist/shared/interfaces/chat-session.interface.d.ts +0 -23
- package/dist/shared/interfaces/chat-session.interface.js +0 -18
- package/dist/shared/interfaces/chat-summary.interface.d.ts +0 -16
- package/dist/shared/interfaces/chat-summary.interface.js +0 -1
- package/dist/shared/interfaces/database.capabilities.d.ts +0 -100
- package/dist/shared/interfaces/database.interface.d.ts +0 -16
- package/dist/shared/interfaces/database.member-queries.d.ts +0 -219
- package/dist/shared/interfaces/database.member-queries.js +0 -4
- package/dist/shared/interfaces/database.negotiation.d.ts +0 -329
- package/dist/shared/interfaces/database.negotiation.js +0 -26
- package/dist/shared/interfaces/database.network-queries.js +0 -4
- package/dist/shared/interfaces/database.opportunity-queries.js +0 -4
- package/dist/shared/interfaces/delivery-ledger.interface.d.ts +0 -40
- package/dist/shared/interfaces/delivery-ledger.interface.js +0 -5
- package/dist/shared/interfaces/embedder.interface.d.ts +0 -92
- package/dist/shared/interfaces/embedder.interface.js +0 -4
- package/dist/shared/interfaces/enrichment-run.interface.d.ts +0 -62
- package/dist/shared/interfaces/enrichment-run.interface.js +0 -1
- package/dist/shared/interfaces/enrichment.interface.js +0 -1
- package/dist/shared/interfaces/negotiation-events.interface.d.ts +0 -77
- package/dist/shared/interfaces/negotiation-events.interface.js +0 -6
- package/dist/shared/interfaces/negotiation-summary.interface.d.ts +0 -25
- package/dist/shared/interfaces/negotiation-summary.interface.js +0 -1
- package/dist/shared/interfaces/negotiator-memory.interface.d.ts +0 -58
- package/dist/shared/interfaces/negotiator-memory.interface.js +0 -11
- package/dist/shared/interfaces/queue.interface.d.ts +0 -23
- package/dist/shared/interfaces/queue.interface.js +0 -4
- package/dist/shared/interfaces/scraper.interface.js +0 -1
- package/dist/shared/interfaces/tool-request-context.interface.d.ts +0 -11
- package/dist/shared/interfaces/tool-request-context.interface.js +0 -1
- package/dist/shared/observability/request-context.d.ts +0 -27
- package/dist/shared/observability/request-context.js +0 -6
- package/dist/shared/schemas/mcp-auth.schema.d.ts +0 -87
- package/dist/shared/schemas/mcp-auth.schema.js +0 -56
- package/dist/shared/schemas/negotiation-digest.schema.d.ts +0 -58
- package/dist/shared/schemas/negotiation-digest.schema.js +0 -38
- package/dist/shared/schemas/negotiation-state.schema.d.ts +0 -343
- package/dist/shared/schemas/negotiation-state.schema.js +0 -81
- package/dist/shared/schemas/question-block.fixture.d.ts +0 -12
- package/dist/shared/schemas/question-block.fixture.js +0 -39
- package/dist/shared/schemas/question-block.schema.d.ts +0 -111
- package/dist/shared/schemas/question-block.schema.js +0 -124
- package/dist/shared/schemas/structured-question.schema.d.ts +0 -66
- package/dist/shared/schemas/structured-question.schema.js +0 -31
- package/dist/shared/schemas/underspecification.schema.d.ts +0 -13
- package/dist/shared/schemas/underspecification.schema.js +0 -16
- /package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.js +0 -0
- /package/dist/{opportunities → internal/opportunities}/radar/radar.state.js +0 -0
- /package/dist/{shared → internal/shared}/network/metadata.renderer.d.ts +0 -0
- /package/dist/{shared → internal/shared}/network/metadata.renderer.js +0 -0
- /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.js +0 -0
- /package/dist/{shared → internal/shared}/observability/performance.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/performance.js +0 -0
- /package/dist/{shared → internal/shared}/observability/trace.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/trace.js +0 -0
- /package/dist/{shared → internal/shared}/utils/claim-safety.d.ts +0 -0
- /package/dist/{shared → internal/shared}/utils/claim-safety.js +0 -0
- /package/dist/{shared → internal/shared}/utils/telegram-handle.d.ts +0 -0
- /package/dist/{shared → internal/shared}/utils/telegram-handle.js +0 -0
- /package/dist/{shared/interfaces/database.capabilities.js → platform/database/capabilities.js} +0 -0
- /package/dist/{shared/interfaces/database.entities.js → platform/database/entities.js} +0 -0
- /package/dist/{shared/interfaces/database.identity-queries.js → platform/database/identity-queries.js} +0 -0
- /package/dist/{agents/agent.dispatcher.port.js → platform/database/negotiation.js} +0 -0
- /package/dist/{chat/chat.persona.js → platform/database/opportunity-queries.js} +0 -0
- /package/dist/{contexts/context.tools.port.js → platform/discovery/embedder.js} +0 -0
- /package/dist/{shared/interfaces/scraper.interface.d.ts → platform/discovery/scraper.d.ts} +0 -0
- /package/dist/{negotiations/negotiation.deadlock.contracts.js → platform/discovery/scraper.js} +0 -0
- /package/dist/{shared/interfaces/enrichment.interface.d.ts → platform/enrichment/ports.d.ts} +0 -0
- /package/dist/{negotiations/negotiation.tools.port.js → platform/enrichment/ports.js} +0 -0
- /package/dist/{opportunities/opportunity.tools.port.js → platform/runtime/observability.js} +0 -0
- /package/dist/{questions/question.input.js → protocol/core.js} +0 -0
- /package/dist/{shared → protocol}/schemas/chat-context.schema.d.ts +0 -0
- /package/dist/{shared → protocol}/schemas/chat-context.schema.js +0 -0
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Negotiation graph, stage 1: claim the conversation, task and seat.
|
|
3
|
-
*/
|
|
4
|
-
import { configuredProtocolVersion, readProtocolVersion } from "./negotiation.protocol.js";
|
|
5
|
-
import { buildIntentSnapshots } from "./negotiation.intent-snapshot-provenance.js";
|
|
6
|
-
import { holdsNegotiationConversationLock } from "./negotiation.task-lock-policy.js";
|
|
7
|
-
import { expectedNegotiationSpeaker } from "./negotiation.expected-speaker.js";
|
|
8
|
-
import { readNegotiationMessages } from "./negotiation.scope.js";
|
|
9
|
-
import { buildSeededAttribution } from './negotiation.attribution.js';
|
|
10
|
-
import { initLog, resolveTaskAttribution, turnsFromMessages } from "./negotiation.graph.shared.js";
|
|
11
|
-
export async function initNode(state, deps) {
|
|
12
|
-
try {
|
|
13
|
-
// Exact continuations reuse the prior conversation and preclaimed
|
|
14
|
-
// successor; they must not create any mutable state before the fence.
|
|
15
|
-
const agentIdA = `agent:${state.sourceUser.id}`;
|
|
16
|
-
const agentIdB = `agent:${state.candidateUser.id}`;
|
|
17
|
-
const execution = state.continuationExecution;
|
|
18
|
-
const conversation = execution
|
|
19
|
-
? { id: execution.conversationId }
|
|
20
|
-
: await deps.database.getOrCreateDM(agentIdA, agentIdB, 'agent');
|
|
21
|
-
// --- Lock gate: check for an active task on this conversation ---
|
|
22
|
-
// Two reads with two jobs. `conversationMessages` is the pair's whole shared
|
|
23
|
-
// DM — CONTEXT, including negotiations for other matches, which reaches the
|
|
24
|
-
// agent only as labelled prior dialogue. `negotiationMessages` is THIS
|
|
25
|
-
// match's own turns, and is the sole input to this negotiation's state:
|
|
26
|
-
// whether it has opened, whose turn it is, how far it has run.
|
|
27
|
-
const conversationMessages = await deps.database.getMessagesForConversation(conversation.id);
|
|
28
|
-
if (Boolean(state.resumeFromTaskId) !== Boolean(state.continuationSettlementId)
|
|
29
|
-
|| Boolean(state.resumeFromTaskId) !== Boolean(execution))
|
|
30
|
-
return { error: 'invalid continuation correlation' };
|
|
31
|
-
const exactContinuation = state.resumeFromTaskId && state.continuationSettlementId && execution
|
|
32
|
-
? { taskId: state.resumeFromTaskId, settlementId: state.continuationSettlementId, execution }
|
|
33
|
-
: null;
|
|
34
|
-
const priorTask = exactContinuation
|
|
35
|
-
? await deps.database.getTask(exactContinuation.taskId)
|
|
36
|
-
: state.opportunityId
|
|
37
|
-
? await deps.database.getNegotiationTaskForOpportunity(state.opportunityId)
|
|
38
|
-
: null;
|
|
39
|
-
const claimedSuccessor = exactContinuation
|
|
40
|
-
? await deps.database.getTask(exactContinuation.execution.successorTaskId)
|
|
41
|
-
: null;
|
|
42
|
-
if (exactContinuation) {
|
|
43
|
-
const settlement = priorTask?.metadata?.questionSettlement;
|
|
44
|
-
const storedExecution = claimedSuccessor?.metadata?.continuationExecution;
|
|
45
|
-
if (!priorTask
|
|
46
|
-
|| priorTask.conversationId !== conversation.id
|
|
47
|
-
|| priorTask.state !== 'canceled'
|
|
48
|
-
|| priorTask.metadata?.opportunityId !== state.opportunityId
|
|
49
|
-
|| settlement?.settlementId !== exactContinuation.settlementId
|
|
50
|
-
|| settlement?.taskId !== exactContinuation.taskId
|
|
51
|
-
|| !claimedSuccessor
|
|
52
|
-
|| claimedSuccessor.conversationId !== conversation.id
|
|
53
|
-
|| storedExecution?.token !== exactContinuation.execution.token
|
|
54
|
-
|| storedExecution?.fence !== exactContinuation.execution.fence
|
|
55
|
-
|| storedExecution?.status !== 'claimed')
|
|
56
|
-
return { error: 'invalid exact continuation task' };
|
|
57
|
-
}
|
|
58
|
-
const isLocked = !exactContinuation && !!priorTask && holdsNegotiationConversationLock(priorTask);
|
|
59
|
-
if (isLocked) {
|
|
60
|
-
initLog.info('Conversation locked by active task, returning busy', {
|
|
61
|
-
conversationId: conversation.id,
|
|
62
|
-
opportunityId: state.opportunityId,
|
|
63
|
-
});
|
|
64
|
-
return { error: 'busy' };
|
|
65
|
-
}
|
|
66
|
-
// --- Load this negotiation's own prior turns ---
|
|
67
|
-
// Resolved through the shared scope rule, not a local copy of it: the graph
|
|
68
|
-
// and the respond/polling surfaces must agree on what "this negotiation's
|
|
69
|
-
// messages" means, or an external agent can be told it is not its turn
|
|
70
|
-
// forever. That rule also owns the unkeyed case — a run with no opportunity
|
|
71
|
-
// has no identity apart from its conversation.
|
|
72
|
-
const negotiationMessages = await readNegotiationMessages({
|
|
73
|
-
byNegotiation: (id) => deps.database.getNegotiationMessages(id),
|
|
74
|
-
byConversation: async () => conversationMessages,
|
|
75
|
-
}, {
|
|
76
|
-
conversationId: conversation.id,
|
|
77
|
-
metadata: { opportunityId: state.opportunityId },
|
|
78
|
-
});
|
|
79
|
-
const priorTurns = turnsFromMessages(negotiationMessages);
|
|
80
|
-
// `isContinuation` means THIS negotiation has already spoken — not that the
|
|
81
|
-
// pair has history. A fresh match in a long-running DM is not a
|
|
82
|
-
// continuation, and must still open.
|
|
83
|
-
const isContinuation = priorTurns.length > 0;
|
|
84
|
-
// Determine scenario-based maxTurns
|
|
85
|
-
const scope = { action: 'manage:negotiations', scopeType: 'network', scopeId: state.indexContext.networkId };
|
|
86
|
-
const [sourceHasAgent, candidateHasAgent] = await Promise.all([
|
|
87
|
-
deps.dispatcher.hasExternalAgent(state.sourceUser.id, scope),
|
|
88
|
-
deps.dispatcher.hasExternalAgent(state.candidateUser.id, scope),
|
|
89
|
-
]);
|
|
90
|
-
const ambientMax = Number(process.env.NEGOTIATION_MAX_TURNS_AMBIENT) || 6;
|
|
91
|
-
let maxTurns = state.maxTurns;
|
|
92
|
-
if (maxTurns == null) {
|
|
93
|
-
maxTurns = (sourceHasAgent && candidateHasAgent) ? 0 : ambientMax;
|
|
94
|
-
}
|
|
95
|
-
// --- Initiator seat resolution (v2: rigid per match, stamped at discovery) ---
|
|
96
|
-
// 1. Continuations inherit from the prior task for the same opportunity —
|
|
97
|
-
// never re-derive, so the seat cannot flip between sessions.
|
|
98
|
-
// 2. Conversation-scoped tie-break: if another negotiation on this DM is
|
|
99
|
-
// active and fresh (symmetric concurrent start under a different
|
|
100
|
-
// opportunityId — the opportunity-scoped lock above cannot see it),
|
|
101
|
-
// the first created task keeps the seat; this run inherits its stamp.
|
|
102
|
-
// 3. Otherwise: explicit stamp from the caller, falling back to the
|
|
103
|
-
// session's sourceUser (pre-stamp heuristic behavior, unchanged).
|
|
104
|
-
const readInitiator = (metadata) => {
|
|
105
|
-
const v = metadata?.initiatorUserId;
|
|
106
|
-
return typeof v === 'string' && v.length > 0 ? v : null;
|
|
107
|
-
};
|
|
108
|
-
let initiatorUserId = readInitiator(priorTask?.metadata) ?? state.initiatorUserId ?? state.sourceUser.id;
|
|
109
|
-
// Conversation-scoped prior task: used only for the initiator tie-break
|
|
110
|
-
// (and only when active+fresh).
|
|
111
|
-
const convTask = !exactContinuation && !readInitiator(priorTask?.metadata)
|
|
112
|
-
? await deps.database.getLatestNegotiationTaskForConversation?.(conversation.id).catch(() => null)
|
|
113
|
-
: null;
|
|
114
|
-
if (!readInitiator(priorTask?.metadata)) {
|
|
115
|
-
if (convTask && convTask.id !== priorTask?.id && holdsNegotiationConversationLock(convTask)) {
|
|
116
|
-
const convInitiator = readInitiator(convTask.metadata);
|
|
117
|
-
if (convInitiator) {
|
|
118
|
-
initLog.info('Conversation-scoped tie-break: inheriting initiator seat from concurrent task', {
|
|
119
|
-
conversationId: conversation.id,
|
|
120
|
-
winningTaskId: convTask.id,
|
|
121
|
-
initiatorUserId: convInitiator,
|
|
122
|
-
});
|
|
123
|
-
initiatorUserId = convInitiator;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// --- Floor: derived from this negotiation's turns, after the seat is known ---
|
|
128
|
-
// Resolved here rather than above because an unopened negotiation starts
|
|
129
|
-
// with its initiator, which the tie-break may only just have settled.
|
|
130
|
-
const expectedSpeaker = expectedNegotiationSpeaker({
|
|
131
|
-
sourceUserId: state.sourceUser.id,
|
|
132
|
-
candidateUserId: state.candidateUser.id,
|
|
133
|
-
initiatorUserId,
|
|
134
|
-
}, negotiationMessages);
|
|
135
|
-
if (!expectedSpeaker)
|
|
136
|
-
return { error: 'invalid negotiation participants' };
|
|
137
|
-
const currentSpeaker = expectedSpeaker === state.sourceUser.id
|
|
138
|
-
? 'source'
|
|
139
|
-
: 'candidate';
|
|
140
|
-
// --- Protocol version: pinned per negotiation, re-stamped per match ---
|
|
141
|
-
// A prior task for this same negotiation (exact continuation resume or
|
|
142
|
-
// a re-run of the same opportunity) pins the version, so one
|
|
143
|
-
// negotiation never flips semantics mid-flight (absent field on a
|
|
144
|
-
// genuine prior = pre-v2 task = v1). Everything else — including
|
|
145
|
-
// continuations of older conversations between the same pair — stamps
|
|
146
|
-
// fresh from NEGOTIATION_PROTOCOL_VERSION, so a version cutover
|
|
147
|
-
// reaches existing pairs on their next new match instead of being
|
|
148
|
-
// pinned to v1 forever by conversation history.
|
|
149
|
-
const protocolVersion = priorTask
|
|
150
|
-
? (readProtocolVersion(priorTask.metadata) ?? 'v1')
|
|
151
|
-
: configuredProtocolVersion();
|
|
152
|
-
const taskMetadata = {
|
|
153
|
-
type: 'negotiation',
|
|
154
|
-
sourceUserId: state.sourceUser.id,
|
|
155
|
-
initiatorUserId,
|
|
156
|
-
protocolVersion,
|
|
157
|
-
candidateUserId: state.candidateUser.id,
|
|
158
|
-
networkId: state.indexContext.networkId,
|
|
159
|
-
sourceIntentId: state.sourceIntentId,
|
|
160
|
-
candidateIntentId: state.candidateIntentId,
|
|
161
|
-
participantBindings: [
|
|
162
|
-
...(state.sourceIntentId ? [{ userId: state.sourceUser.id, intentId: state.sourceIntentId, networkId: state.indexContext.networkId }] : []),
|
|
163
|
-
...(state.candidateIntentId ? [{ userId: state.candidateUser.id, intentId: state.candidateIntentId, networkId: state.indexContext.networkId }] : []),
|
|
164
|
-
],
|
|
165
|
-
intentSnapshots: buildIntentSnapshots(state.sourceUser, state.candidateUser),
|
|
166
|
-
...(state.opportunityId && { opportunityId: state.opportunityId }),
|
|
167
|
-
maxTurns,
|
|
168
|
-
isContinuation,
|
|
169
|
-
priorTurnCount: priorTurns.length,
|
|
170
|
-
...(exactContinuation ? {
|
|
171
|
-
resumeFromTaskId: exactContinuation.taskId,
|
|
172
|
-
continuationSettlementId: exactContinuation.settlementId,
|
|
173
|
-
} : {}),
|
|
174
|
-
};
|
|
175
|
-
if (state.opportunityId && Boolean(state.opportunityStatus) !== Boolean(state.opportunityUpdatedAt)) {
|
|
176
|
-
throw new Error('Negotiation attempt requires both opportunity status and updatedAt');
|
|
177
|
-
}
|
|
178
|
-
const task = exactContinuation
|
|
179
|
-
? claimedSuccessor
|
|
180
|
-
: state.opportunityId && state.opportunityStatus && state.opportunityUpdatedAt
|
|
181
|
-
? await deps.database.createNegotiationTaskForAttempt({
|
|
182
|
-
conversationId: conversation.id,
|
|
183
|
-
opportunityId: state.opportunityId,
|
|
184
|
-
expectedStatus: state.opportunityStatus,
|
|
185
|
-
expectedUpdatedAt: state.opportunityUpdatedAt,
|
|
186
|
-
metadata: taskMetadata,
|
|
187
|
-
})
|
|
188
|
-
: await deps.database.createTask(conversation.id, taskMetadata);
|
|
189
|
-
if (!task) {
|
|
190
|
-
throw new Error('Negotiation attempt is stale or already claimed');
|
|
191
|
-
}
|
|
192
|
-
// Attempt-bound discovery atomically promoted the exact persisted state
|
|
193
|
-
// to `negotiating` while inserting the task. Legacy/direct invocations
|
|
194
|
-
// with only an opportunity ID retain the prior best-effort status update.
|
|
195
|
-
if (state.opportunityId && !state.opportunityUpdatedAt) {
|
|
196
|
-
await deps.database.updateOpportunityStatus(state.opportunityId, 'negotiating').catch((err) => {
|
|
197
|
-
initLog.error('Failed to set opportunity status to negotiating', { opportunityId: state.opportunityId, error: err });
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
// Load user answers collected by the questioner between sessions
|
|
201
|
-
const userAnswers = (isContinuation && state.opportunityId)
|
|
202
|
-
? await deps.database.getOpportunityUserAnswers(state.opportunityId).catch((err) => {
|
|
203
|
-
initLog.error('Failed to load user answers', { opportunityId: state.opportunityId, error: err });
|
|
204
|
-
return [];
|
|
205
|
-
})
|
|
206
|
-
: [];
|
|
207
|
-
// Seed messages with THIS negotiation's prior turns (additive reducer
|
|
208
|
-
// appends new turns on top). taskId is preserved so the turn/screen nodes
|
|
209
|
-
// can separate this session's turns from earlier sessions of the same
|
|
210
|
-
// negotiation (IND-569).
|
|
211
|
-
const seedMessages = negotiationMessages.map((m) => ({
|
|
212
|
-
id: m.id,
|
|
213
|
-
senderId: m.senderId,
|
|
214
|
-
role: 'agent',
|
|
215
|
-
parts: m.parts,
|
|
216
|
-
createdAt: m.createdAt,
|
|
217
|
-
taskId: m.taskId ?? null,
|
|
218
|
-
}));
|
|
219
|
-
// IND-569: attribute the pair's whole shared DM to its originating
|
|
220
|
-
// negotiations, once, up front. Earlier-match and legacy unattributed
|
|
221
|
-
// blocks are immutable for the session; the current block is composed per
|
|
222
|
-
// turn. Keyed on the conversation, not on `isContinuation`: a fresh match
|
|
223
|
-
// has no turns of its own but the pair's history is exactly the context
|
|
224
|
-
// worth carrying into it.
|
|
225
|
-
const priorAttribution = conversationMessages.length > 0
|
|
226
|
-
? await buildSeededAttribution(conversationMessages
|
|
227
|
-
.map((m) => ({ taskId: m.taskId ?? null, turn: turnsFromMessages([m])[0] }))
|
|
228
|
-
.filter((e) => Boolean(e.turn)), state.opportunityId, (taskId) => resolveTaskAttribution(deps, taskId))
|
|
229
|
-
: null;
|
|
230
|
-
return {
|
|
231
|
-
conversationId: conversation.id,
|
|
232
|
-
taskId: task.id,
|
|
233
|
-
currentSpeaker,
|
|
234
|
-
turnCount: 0,
|
|
235
|
-
maxTurns,
|
|
236
|
-
isContinuation,
|
|
237
|
-
initiatorUserId,
|
|
238
|
-
protocolVersion,
|
|
239
|
-
priorTurnCount: priorTurns.length,
|
|
240
|
-
...(priorAttribution && { priorAttribution }),
|
|
241
|
-
...(userAnswers.length > 0 && { userAnswers }),
|
|
242
|
-
...(exactContinuation?.execution.consultation
|
|
243
|
-
? { privateConsultation: exactContinuation.execution.consultation }
|
|
244
|
-
: {}),
|
|
245
|
-
...(exactContinuation && (() => {
|
|
246
|
-
const turnContext = priorTask?.metadata?.turnContext;
|
|
247
|
-
const reason = turnContext?.consultationPolicyReason;
|
|
248
|
-
return typeof reason === 'string' ? { consultationPolicyReason: reason } : {};
|
|
249
|
-
})()),
|
|
250
|
-
...(seedMessages.length > 0 && { messages: seedMessages }),
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
catch (err) {
|
|
254
|
-
return { error: `Init failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
255
|
-
}
|
|
256
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bilateral negotiation graph: init → screen → turn* → finalize.
|
|
3
|
-
*
|
|
4
|
-
* Every node is a top-level function in a sibling module, taking the graph
|
|
5
|
-
* state and an explicit {@link NegotiationGraphDeps}. This file composes the
|
|
6
|
-
* dependency bag and wires the edges — nothing else.
|
|
7
|
-
*/
|
|
8
|
-
import { StateGraph } from "@langchain/langgraph";
|
|
9
|
-
import { NegotiationGraphState } from "./negotiation.state.js";
|
|
10
|
-
import { IndexNegotiator } from "./negotiation.agent.js";
|
|
11
|
-
import { NegotiationStallGapAuthor } from "./negotiation.stall-gap.js";
|
|
12
|
-
import { blocksNegotiationBeforeFirstTurn, NegotiationScreener } from "./negotiation.screen.js";
|
|
13
|
-
import { configuredScreenMode } from "./negotiation.screen.contracts.js";
|
|
14
|
-
import { isTerminalAction } from "./negotiation.protocol.js";
|
|
15
|
-
import { isNegotiationTurnCapReached } from "./negotiation.turn-cap.js";
|
|
16
|
-
import { initNode } from "./negotiation.graph.init.js";
|
|
17
|
-
import { screenNode } from "./negotiation.graph.screen.js";
|
|
18
|
-
import { turnNode } from "./negotiation.graph.turn.js";
|
|
19
|
-
import { finalizeNode } from "./negotiation.graph.finalize.js";
|
|
20
|
-
export { negotiateCandidates } from "./negotiation.candidates.js";
|
|
21
|
-
/**
|
|
22
|
-
* Factory for the bilateral negotiation LangGraph state machine.
|
|
23
|
-
* @remarks Accepts an AgentDispatcher for per-turn agent resolution.
|
|
24
|
-
*/
|
|
25
|
-
export class NegotiationGraphFactory {
|
|
26
|
-
constructor(database, dispatcher, timeoutQueue, questionerEnqueue, reflectEnqueue, memoryRetrieve, clientDmRetrieve) {
|
|
27
|
-
this.deps = {
|
|
28
|
-
database,
|
|
29
|
-
dispatcher,
|
|
30
|
-
timeoutQueue,
|
|
31
|
-
questionerEnqueue,
|
|
32
|
-
reflectEnqueue,
|
|
33
|
-
memoryRetrieve,
|
|
34
|
-
clientDmRetrieve,
|
|
35
|
-
systemAgent: new IndexNegotiator(),
|
|
36
|
-
stallGapAuthor: new NegotiationStallGapAuthor(),
|
|
37
|
-
screener: new NegotiationScreener(),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
createGraph() {
|
|
41
|
-
const deps = this.deps;
|
|
42
|
-
return new StateGraph(NegotiationGraphState)
|
|
43
|
-
.addNode("init", (state) => initNode(state, deps))
|
|
44
|
-
.addNode("screen", (state) => screenNode(state, deps))
|
|
45
|
-
.addNode("turn", (state) => turnNode(state, deps))
|
|
46
|
-
.addNode("finalize", (state) => finalizeNode(state, deps))
|
|
47
|
-
.addConditionalEdges("turn", routeAfterTurn, {
|
|
48
|
-
turn: "turn",
|
|
49
|
-
finalize: "finalize",
|
|
50
|
-
})
|
|
51
|
-
.addConditionalEdges("init", routeAfterInit, { screen: "screen", turn: "turn", finalize: "finalize" })
|
|
52
|
-
// P2.2: enforce-mode pass → finalize (screened_out); everything else → turn.
|
|
53
|
-
.addConditionalEdges("screen", routeAfterScreen, { turn: "turn", finalize: "finalize" })
|
|
54
|
-
.addEdge("__start__", "init")
|
|
55
|
-
.addEdge("finalize", "__end__")
|
|
56
|
-
.compile();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/** After init: fail closed, run the outreach gate, or go straight to the first turn. */
|
|
60
|
-
export function routeAfterInit(state) {
|
|
61
|
-
if (state.error)
|
|
62
|
-
return "finalize";
|
|
63
|
-
// Screen gate: fresh negotiations only (continuations already passed
|
|
64
|
-
// the gate when the dialogue opened); off disables the node entirely.
|
|
65
|
-
// IND-563: regular continuations (new opportunity, existing dm_pair)
|
|
66
|
-
// also run through the screen gate so stale matches are caught before
|
|
67
|
-
// re-engaging the counterparty. Exact ask_user resumes
|
|
68
|
-
// (continuationExecution) are mid-flight and must never be re-screened.
|
|
69
|
-
if (configuredScreenMode() !== "off" && !state.continuationExecution)
|
|
70
|
-
return "screen";
|
|
71
|
-
return "turn";
|
|
72
|
-
}
|
|
73
|
-
/** After the outreach gate: an enforced pass ends the negotiation before any turn. */
|
|
74
|
-
export function routeAfterScreen(state) {
|
|
75
|
-
return blocksNegotiationBeforeFirstTurn(state.screenDecision, state.turnCount) ? "finalize" : "turn";
|
|
76
|
-
}
|
|
77
|
-
/** After a turn: keep going, or settle. */
|
|
78
|
-
export function routeAfterTurn(state) {
|
|
79
|
-
if (state.status === 'waiting_for_agent')
|
|
80
|
-
return "finalize";
|
|
81
|
-
if (state.status === 'input_required')
|
|
82
|
-
return "finalize";
|
|
83
|
-
if (state.error)
|
|
84
|
-
return "finalize";
|
|
85
|
-
if (!state.lastTurn)
|
|
86
|
-
return "finalize";
|
|
87
|
-
// Terminal actions: accept (v1+v2), reject (v1), withdraw/decline (v2)
|
|
88
|
-
if (isTerminalAction(state.lastTurn.action))
|
|
89
|
-
return "finalize";
|
|
90
|
-
// question routes same as counter — next turn
|
|
91
|
-
if (isNegotiationTurnCapReached(state.turnCount, state.maxTurns))
|
|
92
|
-
return "finalize";
|
|
93
|
-
return "turn";
|
|
94
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Negotiation graph, stage 2: the outreach gate.
|
|
3
|
-
*/
|
|
4
|
-
import { type ScreenDecisionRecord } from "./negotiation.screen.js";
|
|
5
|
-
import type { NegotiationGraphDeps, NegotiationState } from "./negotiation.graph.shared.js";
|
|
6
|
-
/**
|
|
7
|
-
* Screen node (P2.1) — the outreach gate. Runs between init and the first
|
|
8
|
-
* turn on FRESH negotiations only (routing skips it on continuations and
|
|
9
|
-
* when NEGOTIATION_SCREEN_MODE=off). The reaching client's negotiator
|
|
10
|
-
* decides whether the match is worth its client's name; in shadow mode the
|
|
11
|
-
* decision is recorded (task metadata + trace event + log line) but never
|
|
12
|
-
* blocks — the negotiation always proceeds to the first turn. In enforce
|
|
13
|
-
* mode (P2.2) a `pass` routes straight to finalize: zero turns, zero
|
|
14
|
-
* counterparty involvement, outcome `reason: "screened_out"`, opportunity
|
|
15
|
-
* quietly `rejected` (init had already flipped it to `negotiating`).
|
|
16
|
-
* A failed screen still fails OPEN in every mode.
|
|
17
|
-
*/
|
|
18
|
-
export declare function screenNode(state: NegotiationState, deps: NegotiationGraphDeps): Promise<{
|
|
19
|
-
screenDecision: ScreenDecisionRecord;
|
|
20
|
-
memoryBySide: {
|
|
21
|
-
[x: string]: import("./negotiation.memory.js").NegotiatorMemoryEntry[];
|
|
22
|
-
};
|
|
23
|
-
}>;
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Negotiation graph, stage 2: the outreach gate.
|
|
3
|
-
*/
|
|
4
|
-
import { requestContext } from "../shared/observability/request-context.js";
|
|
5
|
-
import { configuredScreenMode } from "./negotiation.screen.contracts.js";
|
|
6
|
-
import { buildAttributedDialogue, memoryQueryText, retrieveMemory, screenNodeLog, turnsFromMessages } from "./negotiation.graph.shared.js";
|
|
7
|
-
/**
|
|
8
|
-
* Screen node (P2.1) — the outreach gate. Runs between init and the first
|
|
9
|
-
* turn on FRESH negotiations only (routing skips it on continuations and
|
|
10
|
-
* when NEGOTIATION_SCREEN_MODE=off). The reaching client's negotiator
|
|
11
|
-
* decides whether the match is worth its client's name; in shadow mode the
|
|
12
|
-
* decision is recorded (task metadata + trace event + log line) but never
|
|
13
|
-
* blocks — the negotiation always proceeds to the first turn. In enforce
|
|
14
|
-
* mode (P2.2) a `pass` routes straight to finalize: zero turns, zero
|
|
15
|
-
* counterparty involvement, outcome `reason: "screened_out"`, opportunity
|
|
16
|
-
* quietly `rejected` (init had already flipped it to `negotiating`).
|
|
17
|
-
* A failed screen still fails OPEN in every mode.
|
|
18
|
-
*/
|
|
19
|
-
export async function screenNode(state, deps) {
|
|
20
|
-
const traceEmitter = requestContext.getStore()?.traceEmitter;
|
|
21
|
-
const emitWide = (event) => traceEmitter?.(event);
|
|
22
|
-
const mode = configuredScreenMode();
|
|
23
|
-
const start = Date.now();
|
|
24
|
-
// The client is the initiator seat's user — the side whose negotiator is
|
|
25
|
-
// reaching out. Fresh runs stamp initiatorUserId in init; fall back to
|
|
26
|
-
// sourceUser (what the stamp defaults to anyway).
|
|
27
|
-
const initiatorId = state.initiatorUserId ?? state.sourceUser.id;
|
|
28
|
-
const clientIsSource = initiatorId !== state.candidateUser.id;
|
|
29
|
-
const clientUser = clientIsSource ? state.sourceUser : state.candidateUser;
|
|
30
|
-
const counterpartyUser = clientIsSource ? state.candidateUser : state.sourceUser;
|
|
31
|
-
// P5.3: the client's own negotiator memory informs the outreach gate.
|
|
32
|
-
// Cached into state so the client's first turn reuses it.
|
|
33
|
-
const clientSide = clientIsSource ? "source" : "candidate";
|
|
34
|
-
const clientMemory = state.memoryBySide?.[clientSide]
|
|
35
|
-
?? (deps.memoryRetrieve
|
|
36
|
-
? await retrieveMemory(deps, clientUser.id, counterpartyUser.id, memoryQueryText(state, counterpartyUser), "screen")
|
|
37
|
-
: []);
|
|
38
|
-
let decision;
|
|
39
|
-
let failedOpen = false;
|
|
40
|
-
let screenError;
|
|
41
|
-
try {
|
|
42
|
-
const counterpartyContext = (await deps.database.getUserContext(counterpartyUser.id, null).catch(() => null))?.text ?? "";
|
|
43
|
-
const priorDialogueAttributed = buildAttributedDialogue(state);
|
|
44
|
-
decision = await deps.screener.invoke({
|
|
45
|
-
clientUser,
|
|
46
|
-
counterpartyUser,
|
|
47
|
-
...(counterpartyContext && { counterpartyContext }),
|
|
48
|
-
...(clientMemory.length > 0 && { memory: clientMemory }),
|
|
49
|
-
// discoveryQuery belongs to the discovery session's source user; only
|
|
50
|
-
// meaningful for the client when the client holds the source side.
|
|
51
|
-
...(clientIsSource && state.discoveryQuery && { discoveryQuery: state.discoveryQuery }),
|
|
52
|
-
seedAssessment: state.seedAssessment,
|
|
53
|
-
indexContext: state.indexContext,
|
|
54
|
-
isContinuation: state.isContinuation,
|
|
55
|
-
...(state.messages.length > 0 && { priorDialogue: turnsFromMessages(state.messages) }),
|
|
56
|
-
...(priorDialogueAttributed && { priorDialogueAttributed }),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
// Fail open: a screen failure must never block a negotiation.
|
|
61
|
-
failedOpen = true;
|
|
62
|
-
screenError = err instanceof Error ? err.message : String(err);
|
|
63
|
-
screenNodeLog.warn("Screen failed; proceeding open (reach_out)", {
|
|
64
|
-
taskId: state.taskId,
|
|
65
|
-
opportunityId: state.opportunityId || undefined,
|
|
66
|
-
error: screenError,
|
|
67
|
-
});
|
|
68
|
-
decision = {
|
|
69
|
-
decision: "reach_out",
|
|
70
|
-
reasoning: `screen_error: ${screenError}`,
|
|
71
|
-
evidence: { counterpartyPremiseFit: "", intentAlignment: "" },
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
const durationMs = Date.now() - start;
|
|
75
|
-
const record = {
|
|
76
|
-
...decision,
|
|
77
|
-
mode,
|
|
78
|
-
...(failedOpen && { failedOpen, error: screenError }),
|
|
79
|
-
screenedAt: new Date().toISOString(),
|
|
80
|
-
durationMs,
|
|
81
|
-
};
|
|
82
|
-
await deps.database.setTaskScreenDecision?.(state.taskId, record, state.continuationExecution).catch((err) => {
|
|
83
|
-
screenNodeLog.error("Failed to persist screen decision", { taskId: state.taskId, error: err });
|
|
84
|
-
});
|
|
85
|
-
screenNodeLog.info("negotiation_screen", {
|
|
86
|
-
taskId: state.taskId,
|
|
87
|
-
opportunityId: state.opportunityId || undefined,
|
|
88
|
-
decision: decision.decision,
|
|
89
|
-
mode,
|
|
90
|
-
failedOpen,
|
|
91
|
-
durationMs,
|
|
92
|
-
});
|
|
93
|
-
if (state.opportunityId) {
|
|
94
|
-
emitWide({
|
|
95
|
-
type: "negotiation_screen",
|
|
96
|
-
opportunityId: state.opportunityId,
|
|
97
|
-
negotiationConversationId: state.conversationId,
|
|
98
|
-
decision: decision.decision,
|
|
99
|
-
reasoning: decision.reasoning,
|
|
100
|
-
mode,
|
|
101
|
-
failedOpen,
|
|
102
|
-
durationMs,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
// Routing happens on the conditional edge: shadow always proceeds to
|
|
106
|
-
// the first turn; enforce routes a (non-failed-open) pass to finalize.
|
|
107
|
-
return { screenDecision: record, memoryBySide: { [clientSide]: clientMemory } };
|
|
108
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared vocabulary for the negotiation graph's nodes.
|
|
3
|
-
*
|
|
4
|
-
* The nodes were closures inside `NegotiationGraphFactory.createGraph()`,
|
|
5
|
-
* capturing the injected database, dispatcher and queues. They are top-level
|
|
6
|
-
* functions now, each taking an explicit {@link NegotiationGraphDeps}; this
|
|
7
|
-
* module owns the bag itself and the helpers more than one node needs.
|
|
8
|
-
*/
|
|
9
|
-
import type { NegotiationGraphDatabase } from "../shared/interfaces/database.interface.js";
|
|
10
|
-
import type { NegotiationTimeoutQueue } from "../shared/interfaces/negotiation-events.interface.js";
|
|
11
|
-
import type { AgentDispatcher } from "../shared/interfaces/agent-dispatcher.interface.js";
|
|
12
|
-
import { NegotiationGraphState, type NegotiationTurn, type UserNegotiationContext } from "./negotiation.state.js";
|
|
13
|
-
import { IndexNegotiator } from "./negotiation.agent.js";
|
|
14
|
-
import { NegotiationScreener } from "./negotiation.screen.js";
|
|
15
|
-
import type { QuestionerEnqueueFn } from "../questions/question.module.js";
|
|
16
|
-
import type { ReflectEnqueueFn } from "./negotiation.reflect.js";
|
|
17
|
-
import type { NegotiatorMemoryEntry, NegotiatorMemoryRetrieveFn, NegotiatorMemoryScope } from "./negotiation.memory.js";
|
|
18
|
-
import type { NegotiatorClientDmMessage, NegotiatorClientDmRetrieveFn } from "./negotiation.client-dm.js";
|
|
19
|
-
import type { NegotiationStallGapAuthor } from "./negotiation.stall-gap.js";
|
|
20
|
-
import { type AttributedPriorDialogue, type TaskAttribution } from './negotiation.attribution.js';
|
|
21
|
-
/** The graph's channel state, as every node sees it. */
|
|
22
|
-
export type NegotiationState = typeof NegotiationGraphState.State;
|
|
23
|
-
/** Everything the negotiation nodes reach for. Composed once by the factory. */
|
|
24
|
-
export interface NegotiationGraphDeps {
|
|
25
|
-
database: NegotiationGraphDatabase;
|
|
26
|
-
dispatcher: AgentDispatcher;
|
|
27
|
-
timeoutQueue?: NegotiationTimeoutQueue;
|
|
28
|
-
questionerEnqueue?: QuestionerEnqueueFn;
|
|
29
|
-
reflectEnqueue?: ReflectEnqueueFn;
|
|
30
|
-
memoryRetrieve?: NegotiatorMemoryRetrieveFn;
|
|
31
|
-
/**
|
|
32
|
-
* A2H read path: the acting user's own negotiator DM for this signal.
|
|
33
|
-
* System-agent grounding only — see `negotiation.client-dm.ts`; this must
|
|
34
|
-
* never be forwarded to an external seat via `NegotiationTurnPayload`.
|
|
35
|
-
*/
|
|
36
|
-
clientDmRetrieve?: NegotiatorClientDmRetrieveFn;
|
|
37
|
-
/** In-process negotiator used when no personal agent answers. */
|
|
38
|
-
systemAgent: IndexNegotiator;
|
|
39
|
-
/** Authors the post-stall gap question at finalize (park-on-stall). */
|
|
40
|
-
stallGapAuthor?: NegotiationStallGapAuthor;
|
|
41
|
-
/** Outreach gate for fresh negotiations. */
|
|
42
|
-
screener: NegotiationScreener;
|
|
43
|
-
}
|
|
44
|
-
export declare const logger: import("../shared/observability/log.js").LoggerWithSource;
|
|
45
|
-
export declare const initLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
46
|
-
export declare const screenNodeLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
47
|
-
export declare const turnLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
48
|
-
export declare const finalizeLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
49
|
-
export declare const negotiateCandidatesLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
50
|
-
/** Extracts the ordered NegotiationTurn list from A2A message data parts. */
|
|
51
|
-
export declare function turnsFromMessages(messages: Array<{
|
|
52
|
-
parts: unknown[];
|
|
53
|
-
}>): NegotiationTurn[];
|
|
54
|
-
/**
|
|
55
|
-
* Whether `userId`'s side has already spent its one `ask_user` client
|
|
56
|
-
* consultation in THIS negotiation (P3.2 rationing: max one per negotiation per
|
|
57
|
-
* side). Callers pass `state.messages`, which carries this negotiation's turns
|
|
58
|
-
* across all of its sessions — so an earlier session of the same negotiation
|
|
59
|
-
* counts, while a consultation spent on a different match with the same
|
|
60
|
-
* counterparty does not.
|
|
61
|
-
*/
|
|
62
|
-
export declare function hasPriorAskUser(messages: Array<{
|
|
63
|
-
senderId: string;
|
|
64
|
-
parts: unknown[];
|
|
65
|
-
}>, userId: string): boolean;
|
|
66
|
-
/**
|
|
67
|
-
* How many ask rounds this negotiation has already spent, BOTH sides combined.
|
|
68
|
-
* A round is one persisted `ask_user` park — a mid-flight client consultation
|
|
69
|
-
* or a post-stall park — each of which suspends the negotiation on a human
|
|
70
|
-
* answer. Same substrate as {@link hasPriorAskUser} (the negotiation's own
|
|
71
|
-
* message record, spanning all of its sessions), read negotiation-wide rather
|
|
72
|
-
* than per side: the cap this feeds bounds the park → answer → resume loop for
|
|
73
|
-
* the negotiation as a whole, so two agents cannot ping-pong their humans
|
|
74
|
-
* indefinitely.
|
|
75
|
-
*/
|
|
76
|
-
export declare function countNegotiationAskRounds(messages: Array<{
|
|
77
|
-
senderId: string;
|
|
78
|
-
parts: unknown[];
|
|
79
|
-
}>): number;
|
|
80
|
-
/**
|
|
81
|
-
* P5.3 memory retrieval — never throws, never blocks a negotiation. The
|
|
82
|
-
* injected fn already resolves [] when NEGOTIATOR_MEMORY_INJECT is off;
|
|
83
|
-
* this wrapper adds the graph-side failure guard.
|
|
84
|
-
*/
|
|
85
|
-
export declare function retrieveMemory(deps: NegotiationGraphDeps, userId: string, counterpartyUserId: string, queryText: string, scope: NegotiatorMemoryScope): Promise<NegotiatorMemoryEntry[]>;
|
|
86
|
-
/**
|
|
87
|
-
* A2H client-DM retrieval — never throws, never blocks a negotiation. The
|
|
88
|
-
* injected fn already resolves [] when the flag is off or the user has no
|
|
89
|
-
* negotiator DM for this signal; this wrapper adds the graph-side failure
|
|
90
|
-
* guard, exactly as `retrieveMemory` does for the memory seam.
|
|
91
|
-
*
|
|
92
|
-
* `userId` is always the ACTING user's — the seam has no counterparty field,
|
|
93
|
-
* so the counterparty's DM cannot be requested from here.
|
|
94
|
-
*/
|
|
95
|
-
export declare function retrieveClientDm(deps: NegotiationGraphDeps, userId: string, intentId: string): Promise<NegotiatorClientDmMessage[]>;
|
|
96
|
-
/** Similarity query text: seed reasoning + counterparty context. */
|
|
97
|
-
export declare function memoryQueryText(state: NegotiationState, counterparty: UserNegotiationContext): string;
|
|
98
|
-
/**
|
|
99
|
-
* IND-569: resolve a prior negotiation task's attribution metadata for the
|
|
100
|
-
* per-opportunity prior-dialogue labels. Never throws — any failure returns
|
|
101
|
-
* null so the turns degrade to the unattributed block instead of leaking
|
|
102
|
-
* into the current opportunity's context.
|
|
103
|
-
*/
|
|
104
|
-
export declare function resolveTaskAttribution(deps: NegotiationGraphDeps, taskId: string): Promise<TaskAttribution | null>;
|
|
105
|
-
/**
|
|
106
|
-
* IND-569: build the attributed prior dialogue passed to the screener and
|
|
107
|
-
* turn prompts. Combines the immutable seeded attribution (earlier + legacy
|
|
108
|
-
* unattributed blocks, resolved once in init) with this session's own turns
|
|
109
|
-
* (task-id-matched). Null when there is no seeded attribution.
|
|
110
|
-
*/
|
|
111
|
-
export declare function buildAttributedDialogue(state: NegotiationState): AttributedPriorDialogue | null;
|