@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,223 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Answer consumption: route a client's DM reply to its parked negotiations and
|
|
3
|
-
* resume them (conversational-questions plan, "Answers").
|
|
4
|
-
*
|
|
5
|
-
* The delivery surface decides that a chat reply answers a question-message
|
|
6
|
-
* and maps the reply's content onto block refs; this module owns everything
|
|
7
|
-
* after that decision — the RESUME SEAM. Given a routed answer and the block
|
|
8
|
-
* it answers, it re-resolves each referenced negotiation to its current park
|
|
9
|
-
* and resumes it exactly once:
|
|
10
|
-
*
|
|
11
|
-
* - A mid-flight consult park (`input_required` task with a captured ask-user
|
|
12
|
-
* binding) resumes through the same durable settlement → exact continuation
|
|
13
|
-
* path the card answer used: settle the exact task, then enqueue the
|
|
14
|
-
* settlement-keyed resume. The settle is a CAS on the parked task, so a
|
|
15
|
-
* second delivery finds it already settled and only re-enqueues the
|
|
16
|
-
* idempotent continuation — never a double resume.
|
|
17
|
-
* - A post-stall park (completed task on a stalled opportunity whose trailing
|
|
18
|
-
* turn is the authored `ask_user` gap, `NEGOTIATION_PARK_REASONING`) resumes
|
|
19
|
-
* as a fresh negotiation attempt: the answer is recorded on the opportunity
|
|
20
|
-
* (where continuation prompts already read it via
|
|
21
|
-
* `getOpportunityUserAnswers`) and a retry is enqueued. Exactly-once is the
|
|
22
|
-
* attempt claim: concurrent retries race `createNegotiationTaskForAttempt`
|
|
23
|
-
* and all but one lose.
|
|
24
|
-
*
|
|
25
|
-
* Idempotency is a property of the negotiation, not of any settlement record
|
|
26
|
-
* kept here: re-resolution + the `input_required` admission gate (mid-flight)
|
|
27
|
-
* and the atomic attempt claim (post-stall) make a repeated delivery a no-op.
|
|
28
|
-
* A ref that matches nothing in the block resumes NOTHING — misrouting resumes
|
|
29
|
-
* the wrong negotiation with the wrong fact, which is worse than asking again —
|
|
30
|
-
* and is reported back so the delivery surface can ask a clarifying follow-up.
|
|
31
|
-
*
|
|
32
|
-
* A resumed negotiation may park again; the ask-rounds cap (#1430) bounds that
|
|
33
|
-
* loop at park time. This module deliberately adds no second counter.
|
|
34
|
-
*/
|
|
35
|
-
import type { NegotiationGraphDatabase, NegotiationUserAnswer } from "../shared/interfaces/database.interface.js";
|
|
36
|
-
import type { QuestionBlock, QuestionBlockQuestion } from "../shared/schemas/question-block.schema.js";
|
|
37
|
-
/** One answer the delivery agent routed onto a block ref. */
|
|
38
|
-
export interface RoutedAnswer {
|
|
39
|
-
/** The block ref the reply was matched to — primary or alsoUnblocks alike. */
|
|
40
|
-
ref: string;
|
|
41
|
-
/** The client's answer for that question, as free text. */
|
|
42
|
-
answerText: string;
|
|
43
|
-
}
|
|
44
|
-
/** A resolved route: the owning question and every negotiation its answer resumes. */
|
|
45
|
-
export interface AnswerRoute {
|
|
46
|
-
question: QuestionBlockQuestion;
|
|
47
|
-
/** Primary first, then `alsoUnblocks` — one answer resumes them all. */
|
|
48
|
-
opportunityIds: string[];
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Resolve a matched ref to its question and full resume set. The block schema
|
|
52
|
-
* guarantees every ref appears exactly once across the whole block, so this is
|
|
53
|
-
* a lookup — ambiguity is a producer-side error that cannot reach here through
|
|
54
|
-
* a parsed block. Returns null for a ref the block does not carry: the caller
|
|
55
|
-
* must ask a clarifying follow-up, never resume speculatively.
|
|
56
|
-
*/
|
|
57
|
-
export declare function routeAnswerRef(block: QuestionBlock, ref: string): AnswerRoute | null;
|
|
58
|
-
/** The minimal ask-user binding a mid-flight resume needs, read off task metadata. */
|
|
59
|
-
interface AskUserResumeBinding {
|
|
60
|
-
settlementId: string;
|
|
61
|
-
recipientUserId: string;
|
|
62
|
-
recipientIntentId: string;
|
|
63
|
-
networkId: string;
|
|
64
|
-
opportunityId: string;
|
|
65
|
-
}
|
|
66
|
-
/** What answering a given ref would resume, as re-resolved right now. */
|
|
67
|
-
export type ParkClassification = {
|
|
68
|
-
kind: "inflight";
|
|
69
|
-
taskId: string;
|
|
70
|
-
binding: AskUserResumeBinding;
|
|
71
|
-
} | {
|
|
72
|
-
kind: "post_stall";
|
|
73
|
-
taskId: string;
|
|
74
|
-
}
|
|
75
|
-
/** No negotiation task exists for the ref at all. */
|
|
76
|
-
| {
|
|
77
|
-
kind: "no_negotiation";
|
|
78
|
-
}
|
|
79
|
-
/** A negotiation exists but holds no live park — already resumed, expired, or terminal. */
|
|
80
|
-
| {
|
|
81
|
-
kind: "not_parked";
|
|
82
|
-
}
|
|
83
|
-
/** Parked, but awaiting the OTHER side's client — this user's answer must not resume it. */
|
|
84
|
-
| {
|
|
85
|
-
kind: "wrong_recipient";
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* Re-resolve a negotiation ref to its current park. This is the exact task
|
|
89
|
-
* re-resolution the graph itself uses (`getNegotiationTaskForOpportunity`),
|
|
90
|
-
* never a snapshot: answer routing branches on what the negotiation is NOW,
|
|
91
|
-
* so a park that was answered, expired, or superseded since the block was
|
|
92
|
-
* authored classifies as `not_parked` and the answer no-ops.
|
|
93
|
-
*/
|
|
94
|
-
export declare function classifyParkedNegotiation(database: Pick<NegotiationGraphDatabase, "getNegotiationTaskForOpportunity" | "getNegotiationMessages">, input: {
|
|
95
|
-
opportunityId: string;
|
|
96
|
-
userId: string;
|
|
97
|
-
}): Promise<ParkClassification>;
|
|
98
|
-
/** Everything a mid-flight settle needs; all fields come from the re-resolved binding. */
|
|
99
|
-
export interface InflightAnswerSettlementInput {
|
|
100
|
-
taskId: string;
|
|
101
|
-
settlementId: string;
|
|
102
|
-
opportunityId: string;
|
|
103
|
-
recipientUserId: string;
|
|
104
|
-
recipientIntentId: string;
|
|
105
|
-
networkId: string;
|
|
106
|
-
answer: {
|
|
107
|
-
selectedOptions: string[];
|
|
108
|
-
freeText?: string;
|
|
109
|
-
answeredAt: string;
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* - `settled`: this call closed the exact `input_required` task and durably
|
|
114
|
-
* stored the answer for the continuation claim to read.
|
|
115
|
-
* - `already_settled`: an earlier delivery settled it; the stored settlement
|
|
116
|
-
* stands. Resuming is still correct — the continuation enqueue and claim are
|
|
117
|
-
* settlement-keyed and idempotent, so re-enqueueing recovers a lost job
|
|
118
|
-
* without a double resume.
|
|
119
|
-
* - `lost`: the admission gate refused — the task is no longer
|
|
120
|
-
* `input_required` (answer-window expiry or another path won). No resume.
|
|
121
|
-
*/
|
|
122
|
-
export type InflightAnswerSettlementResult = "settled" | "already_settled" | "lost";
|
|
123
|
-
export interface NegotiationAnswerConsumptionPorts {
|
|
124
|
-
/** The same reads the negotiation graph resolves parks with. */
|
|
125
|
-
database: Pick<NegotiationGraphDatabase, "getNegotiationTaskForOpportunity" | "getNegotiationMessages">;
|
|
126
|
-
/**
|
|
127
|
-
* Settle the exact mid-flight consult: CAS the `input_required` task closed
|
|
128
|
-
* under the deterministic settlement lock and durably store the answer where
|
|
129
|
-
* the continuation claim reads its private consultation. Implementations
|
|
130
|
-
* must be answer-vs-timeout safe (the expiry worker races this) and must
|
|
131
|
-
* report a repeat delivery as `already_settled`, never settle twice.
|
|
132
|
-
*/
|
|
133
|
-
settleInflightAnswer(input: InflightAnswerSettlementInput): Promise<InflightAnswerSettlementResult>;
|
|
134
|
-
/**
|
|
135
|
-
* Enqueue the exact durable continuation — the same settlement-keyed resume
|
|
136
|
-
* the card answer path enqueues. Must be idempotent per settlementId.
|
|
137
|
-
*/
|
|
138
|
-
enqueueInflightResume(input: {
|
|
139
|
-
opportunityId: string;
|
|
140
|
-
userId: string;
|
|
141
|
-
taskId: string;
|
|
142
|
-
settlementId: string;
|
|
143
|
-
recipientIntentId: string;
|
|
144
|
-
networkId: string;
|
|
145
|
-
}): Promise<void>;
|
|
146
|
-
/**
|
|
147
|
-
* Append the routed answer to the opportunity's `userAnswers`, where
|
|
148
|
-
* continuation prompts already read between-session context. Implementations
|
|
149
|
-
* MUST ignore an append whose `questionId` is already present — that key is
|
|
150
|
-
* deterministic per park, so a repeated delivery records nothing twice.
|
|
151
|
-
*/
|
|
152
|
-
recordOpportunityAnswer(input: {
|
|
153
|
-
opportunityId: string;
|
|
154
|
-
answer: NegotiationUserAnswer;
|
|
155
|
-
}): Promise<void>;
|
|
156
|
-
/**
|
|
157
|
-
* Enqueue a fresh negotiate-existing retry of the stalled opportunity.
|
|
158
|
-
* `parkTaskId` identifies the answered park; implementations should dedupe
|
|
159
|
-
* on it. Over-enqueueing is safe regardless: every retry races the atomic
|
|
160
|
-
* attempt claim and all but one lose.
|
|
161
|
-
*/
|
|
162
|
-
enqueueStalledRetry(input: {
|
|
163
|
-
opportunityId: string;
|
|
164
|
-
userId: string;
|
|
165
|
-
parkTaskId: string;
|
|
166
|
-
}): Promise<void>;
|
|
167
|
-
}
|
|
168
|
-
/** Deterministic identity of a post-stall park's recorded answer (dedup key, never rendered). */
|
|
169
|
-
export declare function negotiationParkAnswerId(parkTaskId: string): string;
|
|
170
|
-
export type NegotiationAnswerResumeOutcome = "resumed_inflight" | "resumed_retry" | "not_parked" | "no_negotiation" | "wrong_recipient";
|
|
171
|
-
export interface NegotiationAnswerInput {
|
|
172
|
-
/** The negotiation to resume: one ref out of a routed answer's resume set. */
|
|
173
|
-
opportunityId: string;
|
|
174
|
-
/** The answering client — the park must be awaiting THIS user's side. */
|
|
175
|
-
userId: string;
|
|
176
|
-
answerText: string;
|
|
177
|
-
/** ISO timestamp of the reply; defaults to now. */
|
|
178
|
-
answeredAt?: string;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Resume one parked negotiation with a routed answer, exactly once. Both
|
|
182
|
-
* outcomes that resume enqueue asynchronously — the negotiation continues on
|
|
183
|
-
* its queue, not inline. Every other outcome resumes nothing. Throws only on
|
|
184
|
-
* port failure; every step is safe to repeat, so the caller may simply
|
|
185
|
-
* redeliver.
|
|
186
|
-
*/
|
|
187
|
-
export declare function resumeParkedNegotiation(ports: NegotiationAnswerConsumptionPorts, input: NegotiationAnswerInput): Promise<NegotiationAnswerResumeOutcome>;
|
|
188
|
-
export interface QuestionBlockAnswerConsumptionInput {
|
|
189
|
-
/** The parsed block the reply answers (see `parseQuestionMessage`). */
|
|
190
|
-
block: QuestionBlock;
|
|
191
|
-
/** The replying client — the DM's owner. */
|
|
192
|
-
userId: string;
|
|
193
|
-
/** The reply's content routed onto block refs; empty when nothing matched. */
|
|
194
|
-
answers: RoutedAnswer[];
|
|
195
|
-
/** ISO timestamp of the reply; defaults to now. */
|
|
196
|
-
answeredAt?: string;
|
|
197
|
-
}
|
|
198
|
-
export interface QuestionBlockAnswerConsumptionResult {
|
|
199
|
-
resumed: Array<{
|
|
200
|
-
opportunityId: string;
|
|
201
|
-
outcome: "resumed_inflight" | "resumed_retry";
|
|
202
|
-
}>;
|
|
203
|
-
skipped: Array<{
|
|
204
|
-
opportunityId: string;
|
|
205
|
-
outcome: "not_parked" | "no_negotiation" | "wrong_recipient" | "duplicate_route" | "failed";
|
|
206
|
-
}>;
|
|
207
|
-
/** Routed answers whose ref the block does not carry — resume nothing, ask again. */
|
|
208
|
-
unmatched: RoutedAnswer[];
|
|
209
|
-
/**
|
|
210
|
-
* True when the reply left something unresolved on the routing side: no
|
|
211
|
-
* answer matched at all, or a ref matched nothing in the block. The caller
|
|
212
|
-
* owns the clarifying follow-up; this seam only ever refuses to guess.
|
|
213
|
-
*/
|
|
214
|
-
needsClarification: boolean;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Consume a client reply against the block it answers: resolve each routed
|
|
218
|
-
* answer to its question, then resume the primary negotiation and every
|
|
219
|
-
* `alsoUnblocks` ref with that answer, exactly once each. Failures are
|
|
220
|
-
* per-negotiation — one broken target never blocks the rest of the reply.
|
|
221
|
-
*/
|
|
222
|
-
export declare function consumeQuestionBlockAnswers(ports: NegotiationAnswerConsumptionPorts, input: QuestionBlockAnswerConsumptionInput): Promise<QuestionBlockAnswerConsumptionResult>;
|
|
223
|
-
export {};
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Answer consumption: route a client's DM reply to its parked negotiations and
|
|
3
|
-
* resume them (conversational-questions plan, "Answers").
|
|
4
|
-
*
|
|
5
|
-
* The delivery surface decides that a chat reply answers a question-message
|
|
6
|
-
* and maps the reply's content onto block refs; this module owns everything
|
|
7
|
-
* after that decision — the RESUME SEAM. Given a routed answer and the block
|
|
8
|
-
* it answers, it re-resolves each referenced negotiation to its current park
|
|
9
|
-
* and resumes it exactly once:
|
|
10
|
-
*
|
|
11
|
-
* - A mid-flight consult park (`input_required` task with a captured ask-user
|
|
12
|
-
* binding) resumes through the same durable settlement → exact continuation
|
|
13
|
-
* path the card answer used: settle the exact task, then enqueue the
|
|
14
|
-
* settlement-keyed resume. The settle is a CAS on the parked task, so a
|
|
15
|
-
* second delivery finds it already settled and only re-enqueues the
|
|
16
|
-
* idempotent continuation — never a double resume.
|
|
17
|
-
* - A post-stall park (completed task on a stalled opportunity whose trailing
|
|
18
|
-
* turn is the authored `ask_user` gap, `NEGOTIATION_PARK_REASONING`) resumes
|
|
19
|
-
* as a fresh negotiation attempt: the answer is recorded on the opportunity
|
|
20
|
-
* (where continuation prompts already read it via
|
|
21
|
-
* `getOpportunityUserAnswers`) and a retry is enqueued. Exactly-once is the
|
|
22
|
-
* attempt claim: concurrent retries race `createNegotiationTaskForAttempt`
|
|
23
|
-
* and all but one lose.
|
|
24
|
-
*
|
|
25
|
-
* Idempotency is a property of the negotiation, not of any settlement record
|
|
26
|
-
* kept here: re-resolution + the `input_required` admission gate (mid-flight)
|
|
27
|
-
* and the atomic attempt claim (post-stall) make a repeated delivery a no-op.
|
|
28
|
-
* A ref that matches nothing in the block resumes NOTHING — misrouting resumes
|
|
29
|
-
* the wrong negotiation with the wrong fact, which is worse than asking again —
|
|
30
|
-
* and is reported back so the delivery surface can ask a clarifying follow-up.
|
|
31
|
-
*
|
|
32
|
-
* A resumed negotiation may park again; the ask-rounds cap (#1430) bounds that
|
|
33
|
-
* loop at park time. This module deliberately adds no second counter.
|
|
34
|
-
*/
|
|
35
|
-
import { NEGOTIATION_PARK_REASONING } from "./negotiation.stall-gap.js";
|
|
36
|
-
import { negotiationQuestionSettlementId } from "./negotiation.question-safety.js";
|
|
37
|
-
import { turnsFromMessages } from "./negotiation.graph.shared.js";
|
|
38
|
-
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
39
|
-
const answerLog = protocolLogger("NegotiationAnswerConsumption");
|
|
40
|
-
/**
|
|
41
|
-
* Resolve a matched ref to its question and full resume set. The block schema
|
|
42
|
-
* guarantees every ref appears exactly once across the whole block, so this is
|
|
43
|
-
* a lookup — ambiguity is a producer-side error that cannot reach here through
|
|
44
|
-
* a parsed block. Returns null for a ref the block does not carry: the caller
|
|
45
|
-
* must ask a clarifying follow-up, never resume speculatively.
|
|
46
|
-
*/
|
|
47
|
-
export function routeAnswerRef(block, ref) {
|
|
48
|
-
for (const question of block.questions) {
|
|
49
|
-
const opportunityIds = [question.opportunityId, ...(question.alsoUnblocks ?? [])];
|
|
50
|
-
if (opportunityIds.includes(ref))
|
|
51
|
-
return { question, opportunityIds };
|
|
52
|
-
}
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
function nonEmptyString(value) {
|
|
56
|
-
return typeof value === "string" && value.length > 0;
|
|
57
|
-
}
|
|
58
|
-
function readAskUserResumeBinding(metadata) {
|
|
59
|
-
const turnContext = metadata?.turnContext;
|
|
60
|
-
const binding = turnContext?.askUserBinding;
|
|
61
|
-
if (!binding
|
|
62
|
-
|| !nonEmptyString(binding.settlementId)
|
|
63
|
-
|| !nonEmptyString(binding.recipientUserId)
|
|
64
|
-
|| !nonEmptyString(binding.recipientIntentId)
|
|
65
|
-
|| !nonEmptyString(binding.networkId)
|
|
66
|
-
|| !nonEmptyString(binding.opportunityId))
|
|
67
|
-
return null;
|
|
68
|
-
return {
|
|
69
|
-
settlementId: binding.settlementId,
|
|
70
|
-
recipientUserId: binding.recipientUserId,
|
|
71
|
-
recipientIntentId: binding.recipientIntentId,
|
|
72
|
-
networkId: binding.networkId,
|
|
73
|
-
opportunityId: binding.opportunityId,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* The trailing canonical turn of a negotiation's own messages, when it is the
|
|
78
|
-
* authored post-stall gap. Non-turn messages are skipped, mirroring
|
|
79
|
-
* `turnsFromMessages`; any other trailing turn means the negotiation is not
|
|
80
|
-
* parked post-stall.
|
|
81
|
-
*/
|
|
82
|
-
function trailingParkMessage(messages) {
|
|
83
|
-
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
84
|
-
const message = messages[index];
|
|
85
|
-
const turn = turnsFromMessages([message])[0];
|
|
86
|
-
if (!turn)
|
|
87
|
-
continue;
|
|
88
|
-
return turn.action === "ask_user" && turn.assessment?.reasoning === NEGOTIATION_PARK_REASONING
|
|
89
|
-
? { senderId: message.senderId, taskId: message.taskId, turn }
|
|
90
|
-
: null;
|
|
91
|
-
}
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Re-resolve a negotiation ref to its current park. This is the exact task
|
|
96
|
-
* re-resolution the graph itself uses (`getNegotiationTaskForOpportunity`),
|
|
97
|
-
* never a snapshot: answer routing branches on what the negotiation is NOW,
|
|
98
|
-
* so a park that was answered, expired, or superseded since the block was
|
|
99
|
-
* authored classifies as `not_parked` and the answer no-ops.
|
|
100
|
-
*/
|
|
101
|
-
export async function classifyParkedNegotiation(database, input) {
|
|
102
|
-
const task = await database.getNegotiationTaskForOpportunity(input.opportunityId);
|
|
103
|
-
if (!task)
|
|
104
|
-
return { kind: "no_negotiation" };
|
|
105
|
-
if (task.state === "input_required") {
|
|
106
|
-
const binding = readAskUserResumeBinding(task.metadata);
|
|
107
|
-
if (!binding
|
|
108
|
-
|| binding.opportunityId !== input.opportunityId
|
|
109
|
-
|| binding.settlementId !== negotiationQuestionSettlementId(task.id)) {
|
|
110
|
-
answerLog.warn("input_required negotiation task carries no coherent ask-user binding; answer cannot resume it", {
|
|
111
|
-
taskId: task.id,
|
|
112
|
-
opportunityId: input.opportunityId,
|
|
113
|
-
});
|
|
114
|
-
return { kind: "not_parked" };
|
|
115
|
-
}
|
|
116
|
-
if (binding.recipientUserId !== input.userId)
|
|
117
|
-
return { kind: "wrong_recipient" };
|
|
118
|
-
return { kind: "inflight", taskId: task.id, binding };
|
|
119
|
-
}
|
|
120
|
-
if (task.state === "completed") {
|
|
121
|
-
const messages = await database.getNegotiationMessages(input.opportunityId);
|
|
122
|
-
const park = trailingParkMessage(messages);
|
|
123
|
-
if (!park)
|
|
124
|
-
return { kind: "not_parked" };
|
|
125
|
-
// The gap was written by the finalizing session's task — the most recent
|
|
126
|
-
// one. A trailing park from an older task means state has moved on.
|
|
127
|
-
if (park.taskId != null && park.taskId !== task.id)
|
|
128
|
-
return { kind: "not_parked" };
|
|
129
|
-
if (park.senderId !== `agent:${input.userId}`)
|
|
130
|
-
return { kind: "wrong_recipient" };
|
|
131
|
-
return { kind: "post_stall", taskId: task.id };
|
|
132
|
-
}
|
|
133
|
-
// submitted/working/waiting_for_agent: a session is live (possibly the very
|
|
134
|
-
// resume a first delivery triggered); canceled: a settled consult awaiting
|
|
135
|
-
// its successor; failed/rejected: terminal. None hold an answerable park.
|
|
136
|
-
return { kind: "not_parked" };
|
|
137
|
-
}
|
|
138
|
-
/** Deterministic identity of a post-stall park's recorded answer (dedup key, never rendered). */
|
|
139
|
-
export function negotiationParkAnswerId(parkTaskId) {
|
|
140
|
-
return `negotiation-park-answer-v1-${parkTaskId}`;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Resume one parked negotiation with a routed answer, exactly once. Both
|
|
144
|
-
* outcomes that resume enqueue asynchronously — the negotiation continues on
|
|
145
|
-
* its queue, not inline. Every other outcome resumes nothing. Throws only on
|
|
146
|
-
* port failure; every step is safe to repeat, so the caller may simply
|
|
147
|
-
* redeliver.
|
|
148
|
-
*/
|
|
149
|
-
export async function resumeParkedNegotiation(ports, input) {
|
|
150
|
-
const classification = await classifyParkedNegotiation(ports.database, {
|
|
151
|
-
opportunityId: input.opportunityId,
|
|
152
|
-
userId: input.userId,
|
|
153
|
-
});
|
|
154
|
-
const answeredAt = input.answeredAt ?? new Date().toISOString();
|
|
155
|
-
if (classification.kind === "inflight") {
|
|
156
|
-
const settlement = await ports.settleInflightAnswer({
|
|
157
|
-
taskId: classification.taskId,
|
|
158
|
-
settlementId: classification.binding.settlementId,
|
|
159
|
-
opportunityId: input.opportunityId,
|
|
160
|
-
recipientUserId: classification.binding.recipientUserId,
|
|
161
|
-
recipientIntentId: classification.binding.recipientIntentId,
|
|
162
|
-
networkId: classification.binding.networkId,
|
|
163
|
-
answer: { selectedOptions: [], freeText: input.answerText, answeredAt },
|
|
164
|
-
});
|
|
165
|
-
if (settlement === "lost") {
|
|
166
|
-
answerLog.info("negotiation_answer_settlement_lost", {
|
|
167
|
-
taskId: classification.taskId,
|
|
168
|
-
opportunityId: input.opportunityId,
|
|
169
|
-
});
|
|
170
|
-
return "not_parked";
|
|
171
|
-
}
|
|
172
|
-
// Settlement is durable; enqueue after it, never before — a crash between
|
|
173
|
-
// the two is recovered by redelivery (`already_settled` → enqueue again).
|
|
174
|
-
await ports.enqueueInflightResume({
|
|
175
|
-
opportunityId: input.opportunityId,
|
|
176
|
-
userId: classification.binding.recipientUserId,
|
|
177
|
-
taskId: classification.taskId,
|
|
178
|
-
settlementId: classification.binding.settlementId,
|
|
179
|
-
recipientIntentId: classification.binding.recipientIntentId,
|
|
180
|
-
networkId: classification.binding.networkId,
|
|
181
|
-
});
|
|
182
|
-
answerLog.info("negotiation_answer_resumed_inflight", {
|
|
183
|
-
taskId: classification.taskId,
|
|
184
|
-
opportunityId: input.opportunityId,
|
|
185
|
-
settlement,
|
|
186
|
-
});
|
|
187
|
-
return "resumed_inflight";
|
|
188
|
-
}
|
|
189
|
-
if (classification.kind === "post_stall") {
|
|
190
|
-
// Record before enqueueing: the retry's continuation prompt must see the
|
|
191
|
-
// answer. The deterministic id makes the append idempotent, so the
|
|
192
|
-
// crash-recovery order (record, then enqueue, redeliver on failure) holds.
|
|
193
|
-
await ports.recordOpportunityAnswer({
|
|
194
|
-
opportunityId: input.opportunityId,
|
|
195
|
-
answer: {
|
|
196
|
-
questionId: negotiationParkAnswerId(classification.taskId),
|
|
197
|
-
selectedOptions: [],
|
|
198
|
-
freeText: input.answerText,
|
|
199
|
-
answeredAt,
|
|
200
|
-
},
|
|
201
|
-
});
|
|
202
|
-
await ports.enqueueStalledRetry({
|
|
203
|
-
opportunityId: input.opportunityId,
|
|
204
|
-
userId: input.userId,
|
|
205
|
-
parkTaskId: classification.taskId,
|
|
206
|
-
});
|
|
207
|
-
answerLog.info("negotiation_answer_resumed_retry", {
|
|
208
|
-
taskId: classification.taskId,
|
|
209
|
-
opportunityId: input.opportunityId,
|
|
210
|
-
});
|
|
211
|
-
return "resumed_retry";
|
|
212
|
-
}
|
|
213
|
-
if (classification.kind === "wrong_recipient") {
|
|
214
|
-
answerLog.warn("Answer routed to a negotiation parked on the counterparty's side; not resuming", {
|
|
215
|
-
opportunityId: input.opportunityId,
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
return classification.kind;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Consume a client reply against the block it answers: resolve each routed
|
|
222
|
-
* answer to its question, then resume the primary negotiation and every
|
|
223
|
-
* `alsoUnblocks` ref with that answer, exactly once each. Failures are
|
|
224
|
-
* per-negotiation — one broken target never blocks the rest of the reply.
|
|
225
|
-
*/
|
|
226
|
-
export async function consumeQuestionBlockAnswers(ports, input) {
|
|
227
|
-
const answeredAt = input.answeredAt ?? new Date().toISOString();
|
|
228
|
-
const result = {
|
|
229
|
-
resumed: [],
|
|
230
|
-
skipped: [],
|
|
231
|
-
unmatched: [],
|
|
232
|
-
needsClarification: false,
|
|
233
|
-
};
|
|
234
|
-
const consumedQuestions = new Set();
|
|
235
|
-
for (const answer of input.answers) {
|
|
236
|
-
const route = routeAnswerRef(input.block, answer.ref);
|
|
237
|
-
if (!route) {
|
|
238
|
-
result.unmatched.push(answer);
|
|
239
|
-
continue;
|
|
240
|
-
}
|
|
241
|
-
// Two routed answers can name refs of the same question; the first wins.
|
|
242
|
-
// The later one is surfaced as a duplicate rather than silently merged —
|
|
243
|
-
// choosing between conflicting phrasings is the delivery agent's job.
|
|
244
|
-
if (consumedQuestions.has(route.question.opportunityId)) {
|
|
245
|
-
result.skipped.push({ opportunityId: route.question.opportunityId, outcome: "duplicate_route" });
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
consumedQuestions.add(route.question.opportunityId);
|
|
249
|
-
for (const opportunityId of route.opportunityIds) {
|
|
250
|
-
try {
|
|
251
|
-
const outcome = await resumeParkedNegotiation(ports, {
|
|
252
|
-
opportunityId,
|
|
253
|
-
userId: input.userId,
|
|
254
|
-
answerText: answer.answerText,
|
|
255
|
-
answeredAt,
|
|
256
|
-
});
|
|
257
|
-
if (outcome === "resumed_inflight" || outcome === "resumed_retry") {
|
|
258
|
-
result.resumed.push({ opportunityId, outcome });
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
result.skipped.push({ opportunityId, outcome });
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
catch (err) {
|
|
265
|
-
answerLog.error("Failed to resume an answered negotiation; continuing with the rest of the reply", {
|
|
266
|
-
opportunityId,
|
|
267
|
-
error: err instanceof Error ? err.message : String(err),
|
|
268
|
-
});
|
|
269
|
-
result.skipped.push({ opportunityId, outcome: "failed" });
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
result.needsClarification = input.answers.length === 0 || result.unmatched.length > 0;
|
|
274
|
-
return result;
|
|
275
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import type { NegotiationTurn } from "./negotiation.state.js";
|
|
2
|
-
/**
|
|
3
|
-
* Prior-dialogue attribution (IND-569).
|
|
4
|
-
*
|
|
5
|
-
* On a continuation negotiation the negotiator agent is seeded with every
|
|
6
|
-
* prior turn this pair exchanged — across ALL past opportunities on the shared
|
|
7
|
-
* DM. Rendered flat, the agent cannot tell which turns belonged to a different,
|
|
8
|
-
* already-concluded opportunity versus the one it is negotiating right now.
|
|
9
|
-
* That undifferentiated context lets stale turns from another opportunity read
|
|
10
|
-
* as if they were part of the current exchange (and, since they cross a trust
|
|
11
|
-
* boundary into the prompt, as if they were current instructions).
|
|
12
|
-
*
|
|
13
|
-
* This module groups seeded prior turns by their originating opportunity so the
|
|
14
|
-
* prompt can label each earlier negotiation explicitly, keep legacy
|
|
15
|
-
* unattributed turns in their own block, and separate the current opportunity's
|
|
16
|
-
* own turns. The grouping is pure (DB access is injected via `resolveTask`) so
|
|
17
|
-
* it is unit-testable without a live database.
|
|
18
|
-
*/
|
|
19
|
-
/** Best-effort attribution metadata for one prior negotiation task. */
|
|
20
|
-
export interface TaskAttribution {
|
|
21
|
-
/** The opportunity the task negotiated (grouping key). Null when unresolved. */
|
|
22
|
-
opportunityId: string | null;
|
|
23
|
-
/** Human-facing intent/opportunity title for the header (best-effort). */
|
|
24
|
-
opportunityTitle: string | null;
|
|
25
|
-
/** Coarse conclusion label (e.g. `accepted` | `declined` | `not pursued`). */
|
|
26
|
-
outcome: string | null;
|
|
27
|
-
/** ISO timestamp the prior negotiation concluded (task.updatedAt), or null. */
|
|
28
|
-
concludedAt: string | null;
|
|
29
|
-
}
|
|
30
|
-
/** A concluded prior negotiation on a DIFFERENT opportunity with this counterparty. */
|
|
31
|
-
export interface EarlierNegotiationGroup {
|
|
32
|
-
/** Opportunity id (grouping key). */
|
|
33
|
-
opportunityId: string;
|
|
34
|
-
/** Human-facing intent/opportunity title; null when it could not be resolved. */
|
|
35
|
-
opportunityTitle: string | null;
|
|
36
|
-
/** Coarse conclusion label; null when it could not be resolved. */
|
|
37
|
-
outcome: string | null;
|
|
38
|
-
/** ISO timestamp the prior negotiation concluded, or null. */
|
|
39
|
-
concludedAt: string | null;
|
|
40
|
-
/** The turns exchanged in that earlier negotiation, in order. */
|
|
41
|
-
turns: NegotiationTurn[];
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* The immutable slice of attributed prior dialogue derived once from the
|
|
45
|
-
* seeded prior messages (init node): everything that existed before this
|
|
46
|
-
* session's task. `currentSeeded` holds prior turns that belong to the SAME
|
|
47
|
-
* opportunity now being negotiated (e.g. an earlier session of it), which must
|
|
48
|
-
* join the current block rather than an earlier one.
|
|
49
|
-
*/
|
|
50
|
-
export interface SeededAttribution {
|
|
51
|
-
earlier: EarlierNegotiationGroup[];
|
|
52
|
-
unattributed: NegotiationTurn[];
|
|
53
|
-
currentSeeded: NegotiationTurn[];
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Attributed prior dialogue passed to the negotiator agent and the outreach
|
|
57
|
-
* screener (IND-569). `current` combines same-opportunity seeded turns with
|
|
58
|
-
* the turns exchanged in this session.
|
|
59
|
-
*/
|
|
60
|
-
export interface AttributedPriorDialogue {
|
|
61
|
-
/** Prior concluded negotiations on OTHER opportunities, grouped + labeled. */
|
|
62
|
-
earlier: EarlierNegotiationGroup[];
|
|
63
|
-
/** Legacy/unattributed prior turns (null task_id) — never mixed into current. */
|
|
64
|
-
unattributed: NegotiationTurn[];
|
|
65
|
-
/** The current opportunity's own turns (same-opportunity seeded + this session). */
|
|
66
|
-
current: NegotiationTurn[];
|
|
67
|
-
}
|
|
68
|
-
/** True when the attributed dialogue carries no turns in any block. */
|
|
69
|
-
export declare function attributedDialogueIsEmpty(d: AttributedPriorDialogue): boolean;
|
|
70
|
-
/**
|
|
71
|
-
* Partition seeded prior turns into earlier-opportunity groups, an unattributed
|
|
72
|
-
* block, and same-opportunity turns. Pure over the injected `resolveTask` — the
|
|
73
|
-
* caller supplies a DB-backed resolver (graph) or a fake (tests). Any task that
|
|
74
|
-
* fails to resolve, or carries no opportunity, degrades to the unattributed
|
|
75
|
-
* block so an attribution failure NEVER leaks a stale turn into the current
|
|
76
|
-
* opportunity's context.
|
|
77
|
-
*/
|
|
78
|
-
export declare function buildSeededAttribution(entries: Array<{
|
|
79
|
-
taskId?: string | null;
|
|
80
|
-
turn: NegotiationTurn;
|
|
81
|
-
}>, currentOpportunityId: string, resolveTask: (taskId: string) => Promise<TaskAttribution | null>): Promise<SeededAttribution>;
|
|
82
|
-
/** Combine the immutable seeded attribution with this session's own turns. */
|
|
83
|
-
export declare function combineAttributedDialogue(seeded: SeededAttribution, currentSessionTurns: NegotiationTurn[]): AttributedPriorDialogue;
|
|
84
|
-
/**
|
|
85
|
-
* Render the attributed prior dialogue into labeled prompt blocks. `formatTurn`
|
|
86
|
-
* lets each surface (negotiator agent / screener) keep its own per-turn line
|
|
87
|
-
* format while sharing the block structure. Only non-empty blocks are emitted;
|
|
88
|
-
* earlier and unattributed blocks are re-indexed from 1 within their block so
|
|
89
|
-
* turn numbers never imply a single flat exchange across opportunities.
|
|
90
|
-
*/
|
|
91
|
-
export declare function renderAttributedPriorDialogue(dialogue: AttributedPriorDialogue, formatTurn: (turn: NegotiationTurn, index: number) => string): string;
|