@indexnetwork/protocol 22.0.0-rc.498.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 -132
- package/dist/index.js +41 -100
- 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,159 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Read the centralized consultation-policy switch. Invalid, absent, and empty
|
|
3
|
-
* values deliberately roll back to off.
|
|
4
|
-
*/
|
|
5
|
-
export function negotiationConsultationPolicyMode() {
|
|
6
|
-
const raw = process.env.NEGOTIATION_CONSULTATION_POLICY_MODE;
|
|
7
|
-
return raw === "shadow" || raw === "on" ? raw : "off";
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Pure IND-508 eligibility policy. It intentionally never sees user text,
|
|
11
|
-
* evaluator output, profiles, IDs, prompts, or messages; only safe protocol
|
|
12
|
-
* enums and the exact binding/lifecycle booleans supplied by the graph.
|
|
13
|
-
*/
|
|
14
|
-
export function assessConsultationEligibility(input) {
|
|
15
|
-
if (input.protocolVersion !== "v2"
|
|
16
|
-
|| input.isFinalTurn
|
|
17
|
-
|| input.screenedOut
|
|
18
|
-
|| input.previouslyConsulted
|
|
19
|
-
|| !input.hasExactResumeCoordinate
|
|
20
|
-
|| !input.lifecycleValid
|
|
21
|
-
|| isObviousTerminal(input.action))
|
|
22
|
-
return { eligible: false };
|
|
23
|
-
// ─── Pre-contact consultation (the opening turn) ──────────────────────────
|
|
24
|
-
// Before this branch the opening turn was a blanket exclusion, so the
|
|
25
|
-
// initiator's turn-0 vocabulary was binary: reach out, or pass with the
|
|
26
|
-
// counterparty never contacted. A third verdict is admissible when the
|
|
27
|
-
// blocking doubt is one only the client can settle — how their own criteria
|
|
28
|
-
// bound the search — and the pause costs the counterparty nothing, because
|
|
29
|
-
// nothing has been sent.
|
|
30
|
-
//
|
|
31
|
-
// The admission is deliberately NARROW, and narrower than the mid-flight
|
|
32
|
-
// rules below:
|
|
33
|
-
//
|
|
34
|
-
// - INITIATOR ONLY. A turn-0 counterparty seat (tie-break inheritance) is
|
|
35
|
-
// responding to an outreach, so its client's criteria are not what is
|
|
36
|
-
// blocking; there is no pre-contact position to protect either.
|
|
37
|
-
// - A MODEL-AUTHORED `ask_user` ONLY. Every rule below infers a
|
|
38
|
-
// consultation from a draft that asked for something else, which needs
|
|
39
|
-
// history to be a safe inference — and at turn 0 there is none. The
|
|
40
|
-
// acting agent is the only party that has read the client's own signal,
|
|
41
|
-
// so the pre-contact case is the one where volunteering the pause is the
|
|
42
|
-
// evidence, not a substitute for it. This also keeps the distinction the
|
|
43
|
-
// graph prompt draws — client-resolvable scope doubt consults;
|
|
44
|
-
// counterparty evidence that contradicts the match passes silently —
|
|
45
|
-
// resolvable HERE only as "the agent did not ask", which is exactly what
|
|
46
|
-
// a contradiction-shaped doubt produces.
|
|
47
|
-
//
|
|
48
|
-
// The category is fixed rather than read off the draft: a pre-contact pause
|
|
49
|
-
// is by construction an unresolved constraint the OWNER controls. The
|
|
50
|
-
// consult counts as an ordinary ask round (the graph reads the same
|
|
51
|
-
// `negotiationAskRoundsCap` substrate before granting the action at all).
|
|
52
|
-
if (input.isOpeningTurn) {
|
|
53
|
-
return input.seat === "initiator" && input.action === "ask_user"
|
|
54
|
-
? { eligible: true, reason: "unresolved_owner_constraint" }
|
|
55
|
-
: { eligible: false };
|
|
56
|
-
}
|
|
57
|
-
// A patient-side counter is a schema-constrained, source-safe signal that
|
|
58
|
-
// the owner must decide whether a consequential disclosure or permission is
|
|
59
|
-
// acceptable. This is reachable under the normal v2 action vocabulary; it
|
|
60
|
-
// deliberately does not inspect or depend on a model-produced `ask_user`.
|
|
61
|
-
if (input.ownSuggestedRole === "patient" && input.action === "counter") {
|
|
62
|
-
return { eligible: true, reason: "consequential_disclosure_permission" };
|
|
63
|
-
}
|
|
64
|
-
// Preserve observability for a valid legacy ask_user draft; production
|
|
65
|
-
// policy admission no longer depends on this action because the patient-side
|
|
66
|
-
// counter rule above is schema-constrained and independently reachable.
|
|
67
|
-
if (input.action === "ask_user") {
|
|
68
|
-
return { eligible: true, reason: "consequential_disclosure_permission" };
|
|
69
|
-
}
|
|
70
|
-
// A repeated run of safe counter/question action enums means the parties are
|
|
71
|
-
// not converging. This precedes action-local rules so the policy is stable.
|
|
72
|
-
const trailingActions = [...input.priorActions, input.action].slice(-3);
|
|
73
|
-
const trailingNonConvergent = trailingActions.length === 3
|
|
74
|
-
&& trailingActions.every((action) => action === "counter" || action === "question");
|
|
75
|
-
if (trailingNonConvergent) {
|
|
76
|
-
return { eligible: true, reason: "repeated_non_convergence" };
|
|
77
|
-
}
|
|
78
|
-
if (input.ownSuggestedRole === "agent" && input.action === "counter") {
|
|
79
|
-
return { eligible: true, reason: "insufficient_commitment_authority" };
|
|
80
|
-
}
|
|
81
|
-
if (input.action === "question") {
|
|
82
|
-
return { eligible: true, reason: "unresolved_owner_constraint" };
|
|
83
|
-
}
|
|
84
|
-
return { eligible: false };
|
|
85
|
-
}
|
|
86
|
-
/** Fixed source-safe inputs that still traverse the existing questioner guard. */
|
|
87
|
-
export function consultationPromptFor(reason) {
|
|
88
|
-
switch (reason) {
|
|
89
|
-
case "consequential_disclosure_permission":
|
|
90
|
-
return { disclosureSubject: "your permission", draftQuestion: "May I share the information needed to explore this collaboration?" };
|
|
91
|
-
case "repeated_non_convergence":
|
|
92
|
-
return { disclosureSubject: "your priorities", draftQuestion: "Which trade-off matters most as I decide how to proceed?" };
|
|
93
|
-
case "insufficient_commitment_authority":
|
|
94
|
-
return { disclosureSubject: "your decision authority", draftQuestion: "What commitments may I make on your behalf?" };
|
|
95
|
-
case "unresolved_owner_constraint":
|
|
96
|
-
return { disclosureSubject: "your preferences", draftQuestion: "What outcome would you prefer?" };
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
function isObviousTerminal(action) {
|
|
100
|
-
return action === "accept" || action === "reject" || action === "withdraw" || action === "decline";
|
|
101
|
-
}
|
|
102
|
-
// ─── Pre-contact consultation: bounds and recognition ────────────────────────
|
|
103
|
-
/**
|
|
104
|
-
* How many pre-contact consultations one intent may hold OPEN at once.
|
|
105
|
-
*
|
|
106
|
-
* A vague signal can surface many candidates in a batch, and the doubt that
|
|
107
|
-
* blocks the first ("does 'academic linguistics' strictly bound this, or is
|
|
108
|
-
* adjacent depth in scope?") is usually the same doubt that blocks all of
|
|
109
|
-
* them. One answer generalizes: it lands in the signal's DM, and the DM is
|
|
110
|
-
* injected into every later turn-0 decision on that signal. The cap exists
|
|
111
|
-
* for the agent that does not internalize that and would interrogate its
|
|
112
|
-
* client candidate-by-candidate.
|
|
113
|
-
*
|
|
114
|
-
* Two, not one: a second genuinely different question about the same signal
|
|
115
|
-
* is plausible, a third is a pattern. Past the cap the action is simply not
|
|
116
|
-
* offered and the seat falls back to today's binary reach-out-or-pass.
|
|
117
|
-
*/
|
|
118
|
-
export const MAX_OPEN_PRE_CONTACT_CONSULTS_PER_INTENT = 2;
|
|
119
|
-
/**
|
|
120
|
-
* Whether a negotiation's own turns show it has never contacted the
|
|
121
|
-
* counterparty — every turn it holds is a client-consultation park.
|
|
122
|
-
*
|
|
123
|
-
* This is what makes a post-consult resume still-the-opening. A mid-flight
|
|
124
|
-
* consult always has an `outreach` behind it (the counterparty seat cannot
|
|
125
|
-
* even speak before one), so this is false for every park the pre-contact
|
|
126
|
-
* verdict did not create, and the resume rules it gates stay off the
|
|
127
|
-
* mid-flight path by construction rather than by a flag.
|
|
128
|
-
*/
|
|
129
|
-
export function isPreContactConsultResume(turns) {
|
|
130
|
-
return turns.length > 0 && turns.every((turn) => turn.action === "ask_user");
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Turn-context key stamped on a pre-contact park. Written at park time beside
|
|
134
|
-
* the ask-user binding, read back by {@link countOpenPreContactConsults} — the
|
|
135
|
-
* park row is the only durable record of the consultation, so the marker lives
|
|
136
|
-
* with it rather than in a separate counter that could drift.
|
|
137
|
-
*/
|
|
138
|
-
export const PRE_CONTACT_CONSULT_MARKER = "preContactConsult";
|
|
139
|
-
/**
|
|
140
|
-
* Count the pre-contact consultations currently open for one `(user, intent)`
|
|
141
|
-
* scope, from the user's own negotiation tasks.
|
|
142
|
-
*
|
|
143
|
-
* "Open" is derived from the durable park itself — an `input_required` task
|
|
144
|
-
* whose captured ask-user binding names this recipient pair and whose turn
|
|
145
|
-
* context carries the pre-contact stamp — so answering, expiry, and resume all
|
|
146
|
-
* retire a park from the count with no counter to keep in step. Mid-flight
|
|
147
|
-
* consults carry no stamp and never count.
|
|
148
|
-
*/
|
|
149
|
-
export function countOpenPreContactConsults(tasks, scope) {
|
|
150
|
-
return tasks.filter((task) => {
|
|
151
|
-
if (task.state !== "input_required" || task.id === scope.excludeTaskId)
|
|
152
|
-
return false;
|
|
153
|
-
const turnContext = task.metadata?.turnContext;
|
|
154
|
-
if (turnContext?.[PRE_CONTACT_CONSULT_MARKER] !== true)
|
|
155
|
-
return false;
|
|
156
|
-
const binding = turnContext.askUserBinding;
|
|
157
|
-
return binding?.recipientUserId === scope.userId && binding.recipientIntentId === scope.intentId;
|
|
158
|
-
}).length;
|
|
159
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Internal-only metadata persisted when a deadlock causes a stance shift. */
|
|
2
|
-
export interface DeadlockShiftRecord {
|
|
3
|
-
reason: "consecutive_non_convergent";
|
|
4
|
-
consecutiveNonConvergent: number;
|
|
5
|
-
threshold: number;
|
|
6
|
-
/** Zero-based session turn index at which the shifted draft happened. */
|
|
7
|
-
shiftedAtTurn: number;
|
|
8
|
-
seat: "initiator" | "counterparty";
|
|
9
|
-
detectedAt: string;
|
|
10
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deadlock detection + persuasion→bargaining mode shift (IND-428, backlog item 6).
|
|
3
|
-
*
|
|
4
|
-
* Grounding: Wells & Reed (2006), *Knowing When to Bargain* — a persuasion
|
|
5
|
-
* dialogue (arguing the merits) that reaches a stalemate may execute a *legal
|
|
6
|
-
* shift* into a negotiation dialogue (offering concessions). See
|
|
7
|
-
* `docs/design/negotiation-dialogue-game.md` for the formal framing of the
|
|
8
|
-
* turn protocol as a dialogue game.
|
|
9
|
-
*
|
|
10
|
-
* Design constraints (hard):
|
|
11
|
-
* - **Deterministic**: deadlock is decided by pure inspection of the persisted
|
|
12
|
-
* turn history — never by an LLM.
|
|
13
|
-
* - **Stance, not rules**: a detected deadlock changes the system agent's
|
|
14
|
-
* *drafting stance* only. Locutions, seat vocabularies (`allowedActionsFor`),
|
|
15
|
-
* termination, and turn-cap semantics are untouched.
|
|
16
|
-
* - **Default-off**: gated on `NEGOTIATION_DEADLOCK_SHIFT_ENABLED === "true"`
|
|
17
|
-
* (strict literal) and applied only to v2 negotiations, checked alongside the
|
|
18
|
-
* protocol-version plumbing. When off, the legacy path is byte-identical.
|
|
19
|
-
* - **Fail-open**: any detection error means "no deadlock" — advisory
|
|
20
|
-
* infrastructure never blocks a negotiation.
|
|
21
|
-
*/
|
|
22
|
-
import { type NegotiatorStance } from "./negotiation.stance.contracts.js";
|
|
23
|
-
export type { DeadlockShiftRecord } from "./negotiation.deadlock.contracts.js";
|
|
24
|
-
/**
|
|
25
|
-
* Whether the deadlock→bargaining mode shift is enabled, from the
|
|
26
|
-
* `NEGOTIATION_DEADLOCK_SHIFT_ENABLED` env switch. Strict literal `"true"`
|
|
27
|
-
* only — the deployment is byte-for-byte unchanged until the flag is flipped,
|
|
28
|
-
* and rolling back is the same single switch.
|
|
29
|
-
*/
|
|
30
|
-
export declare function configuredDeadlockShiftEnabled(): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Default deadlock threshold: 4 consecutive non-convergent turns. Sized
|
|
33
|
-
* against the ambient turn cap (6): an outreach plus 4 unbroken counters
|
|
34
|
-
* leaves exactly the closing turns to draft in the bargaining stance.
|
|
35
|
-
*/
|
|
36
|
-
export declare const DEFAULT_DEADLOCK_THRESHOLD = 4;
|
|
37
|
-
/**
|
|
38
|
-
* Lower bound on the configurable threshold. Below 2 the "stalemate" signal is
|
|
39
|
-
* meaningless — a single counter is ordinary dialogue, not a deadlock.
|
|
40
|
-
*/
|
|
41
|
-
export declare const MIN_DEADLOCK_THRESHOLD = 2;
|
|
42
|
-
/**
|
|
43
|
-
* Consecutive non-convergent turns that constitute a deadlock, from
|
|
44
|
-
* `NEGOTIATION_DEADLOCK_THRESHOLD`. Must be an integer >= 2; invalid,
|
|
45
|
-
* non-integer, or out-of-range values fall back to the default (fail-open
|
|
46
|
-
* toward the documented behavior, mirroring `askUserAnswerWindowMs`).
|
|
47
|
-
*/
|
|
48
|
-
export declare function configuredDeadlockThreshold(): number;
|
|
49
|
-
export interface DeadlockAssessment {
|
|
50
|
-
/** True when the trailing non-convergent run has reached the threshold. */
|
|
51
|
-
deadlocked: boolean;
|
|
52
|
-
/** Length of the maximal trailing run of counter/question turns. */
|
|
53
|
-
consecutiveNonConvergent: number;
|
|
54
|
-
/** The threshold the run was compared against. */
|
|
55
|
-
threshold: number;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Deterministic stalemate detector: measures the maximal *trailing* run of
|
|
59
|
-
* non-convergent turns (`counter`/`question`) in the persisted history and
|
|
60
|
-
* compares it against the threshold. Continuation histories are included by
|
|
61
|
-
* construction — the caller passes the full turn list, so a deadlock spanning
|
|
62
|
-
* sessions still counts.
|
|
63
|
-
*
|
|
64
|
-
* Pure state inspection; no LLM, no I/O, no clock.
|
|
65
|
-
*/
|
|
66
|
-
export declare function assessDeadlock(history: ReadonlyArray<{
|
|
67
|
-
action?: string;
|
|
68
|
-
}>, threshold?: number): DeadlockAssessment;
|
|
69
|
-
/**
|
|
70
|
-
* Renders the deadlock-stance prompt section. Returns the empty string when
|
|
71
|
-
* the shift is not active, so the rendered system prompt is byte-identical to
|
|
72
|
-
* the legacy build on every non-shifted turn (mirrors
|
|
73
|
-
* `renderNegotiatorMemorySection`). The `ask_user` escalation line renders
|
|
74
|
-
* only when the caller already legally holds the action (`canAskUser`) — the
|
|
75
|
-
* shift never invents a locution.
|
|
76
|
-
*
|
|
77
|
-
* IND-611: `stance` selects which resolution the shift drafts toward —
|
|
78
|
-
* bargaining (`advocate`/`evaluator`, the default and today's behavior) or
|
|
79
|
-
* stalemate (`skeptic`). Omitted → bargaining, byte-identical to before.
|
|
80
|
-
*/
|
|
81
|
-
export declare function renderBargainingShiftSection(input: {
|
|
82
|
-
active: boolean;
|
|
83
|
-
userName: string;
|
|
84
|
-
canAskUser: boolean;
|
|
85
|
-
consecutiveNonConvergent: number;
|
|
86
|
-
stance?: NegotiatorStance;
|
|
87
|
-
}): string;
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deadlock detection + persuasion→bargaining mode shift (IND-428, backlog item 6).
|
|
3
|
-
*
|
|
4
|
-
* Grounding: Wells & Reed (2006), *Knowing When to Bargain* — a persuasion
|
|
5
|
-
* dialogue (arguing the merits) that reaches a stalemate may execute a *legal
|
|
6
|
-
* shift* into a negotiation dialogue (offering concessions). See
|
|
7
|
-
* `docs/design/negotiation-dialogue-game.md` for the formal framing of the
|
|
8
|
-
* turn protocol as a dialogue game.
|
|
9
|
-
*
|
|
10
|
-
* Design constraints (hard):
|
|
11
|
-
* - **Deterministic**: deadlock is decided by pure inspection of the persisted
|
|
12
|
-
* turn history — never by an LLM.
|
|
13
|
-
* - **Stance, not rules**: a detected deadlock changes the system agent's
|
|
14
|
-
* *drafting stance* only. Locutions, seat vocabularies (`allowedActionsFor`),
|
|
15
|
-
* termination, and turn-cap semantics are untouched.
|
|
16
|
-
* - **Default-off**: gated on `NEGOTIATION_DEADLOCK_SHIFT_ENABLED === "true"`
|
|
17
|
-
* (strict literal) and applied only to v2 negotiations, checked alongside the
|
|
18
|
-
* protocol-version plumbing. When off, the legacy path is byte-identical.
|
|
19
|
-
* - **Fail-open**: any detection error means "no deadlock" — advisory
|
|
20
|
-
* infrastructure never blocks a negotiation.
|
|
21
|
-
*/
|
|
22
|
-
import { stanceResolvesDeadlockByStalemate } from "./negotiation.stance.contracts.js";
|
|
23
|
-
// ─── Configuration ───────────────────────────────────────────────────────────
|
|
24
|
-
/**
|
|
25
|
-
* Whether the deadlock→bargaining mode shift is enabled, from the
|
|
26
|
-
* `NEGOTIATION_DEADLOCK_SHIFT_ENABLED` env switch. Strict literal `"true"`
|
|
27
|
-
* only — the deployment is byte-for-byte unchanged until the flag is flipped,
|
|
28
|
-
* and rolling back is the same single switch.
|
|
29
|
-
*/
|
|
30
|
-
export function configuredDeadlockShiftEnabled() {
|
|
31
|
-
return process.env.NEGOTIATION_DEADLOCK_SHIFT_ENABLED === "true";
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Default deadlock threshold: 4 consecutive non-convergent turns. Sized
|
|
35
|
-
* against the ambient turn cap (6): an outreach plus 4 unbroken counters
|
|
36
|
-
* leaves exactly the closing turns to draft in the bargaining stance.
|
|
37
|
-
*/
|
|
38
|
-
export const DEFAULT_DEADLOCK_THRESHOLD = 4;
|
|
39
|
-
/**
|
|
40
|
-
* Lower bound on the configurable threshold. Below 2 the "stalemate" signal is
|
|
41
|
-
* meaningless — a single counter is ordinary dialogue, not a deadlock.
|
|
42
|
-
*/
|
|
43
|
-
export const MIN_DEADLOCK_THRESHOLD = 2;
|
|
44
|
-
/**
|
|
45
|
-
* Consecutive non-convergent turns that constitute a deadlock, from
|
|
46
|
-
* `NEGOTIATION_DEADLOCK_THRESHOLD`. Must be an integer >= 2; invalid,
|
|
47
|
-
* non-integer, or out-of-range values fall back to the default (fail-open
|
|
48
|
-
* toward the documented behavior, mirroring `askUserAnswerWindowMs`).
|
|
49
|
-
*/
|
|
50
|
-
export function configuredDeadlockThreshold() {
|
|
51
|
-
const raw = process.env.NEGOTIATION_DEADLOCK_THRESHOLD;
|
|
52
|
-
if (raw) {
|
|
53
|
-
const parsed = Number(raw);
|
|
54
|
-
if (Number.isInteger(parsed) && parsed >= MIN_DEADLOCK_THRESHOLD)
|
|
55
|
-
return parsed;
|
|
56
|
-
}
|
|
57
|
-
return DEFAULT_DEADLOCK_THRESHOLD;
|
|
58
|
-
}
|
|
59
|
-
// ─── Detection ───────────────────────────────────────────────────────────────
|
|
60
|
-
/**
|
|
61
|
-
* The locutions that count toward a stalemate: challenges and information
|
|
62
|
-
* requests that keep the dialogue open without converging. Everything else —
|
|
63
|
-
* openings (`propose`/`outreach`: a fresh case is on the table), terminal
|
|
64
|
-
* actions (the game is deciding, not stalling), and `ask_user` (new principal
|
|
65
|
-
* input is about to arrive) — RESETS the run to zero. Unknown/missing actions
|
|
66
|
-
* also reset (conservative: never manufacture a deadlock from unreadable data).
|
|
67
|
-
*/
|
|
68
|
-
const NON_CONVERGENT_ACTIONS = new Set(["counter", "question"]);
|
|
69
|
-
/**
|
|
70
|
-
* Deterministic stalemate detector: measures the maximal *trailing* run of
|
|
71
|
-
* non-convergent turns (`counter`/`question`) in the persisted history and
|
|
72
|
-
* compares it against the threshold. Continuation histories are included by
|
|
73
|
-
* construction — the caller passes the full turn list, so a deadlock spanning
|
|
74
|
-
* sessions still counts.
|
|
75
|
-
*
|
|
76
|
-
* Pure state inspection; no LLM, no I/O, no clock.
|
|
77
|
-
*/
|
|
78
|
-
export function assessDeadlock(history, threshold = DEFAULT_DEADLOCK_THRESHOLD) {
|
|
79
|
-
const effectiveThreshold = Number.isInteger(threshold) && threshold >= MIN_DEADLOCK_THRESHOLD
|
|
80
|
-
? threshold
|
|
81
|
-
: DEFAULT_DEADLOCK_THRESHOLD;
|
|
82
|
-
let run = 0;
|
|
83
|
-
for (let i = history.length - 1; i >= 0; i--) {
|
|
84
|
-
const action = history[i]?.action;
|
|
85
|
-
if (typeof action === "string" && NON_CONVERGENT_ACTIONS.has(action)) {
|
|
86
|
-
run += 1;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
deadlocked: run >= effectiveThreshold,
|
|
94
|
-
consecutiveNonConvergent: run,
|
|
95
|
-
threshold: effectiveThreshold,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
// ─── Internal shift record (task metadata JSONB, never public) ──────────────
|
|
99
|
-
// ─── Prompt section (system agent drafting stance) ──────────────────────────
|
|
100
|
-
const BARGAINING_SHIFT_SECTION = `
|
|
101
|
-
|
|
102
|
-
DEADLOCK — SHIFT FROM PERSUASION TO BARGAINING. The last {consecutive} turns were counters/questions without convergence: the merits have been argued and restating them will not move the other side. For this turn, change stance:
|
|
103
|
-
- Do NOT re-argue fit or repeat points already made.
|
|
104
|
-
- Offer a concrete concession or scope reduction instead: a smaller first step (a single intro call, a scoped trial, a narrower version of the collaboration), dropping a contested requirement, or a trade on a dimension not yet contested.
|
|
105
|
-
- Make the remaining objection priceable: name the specific smaller commitment that would resolve it.{askUserEscalation}
|
|
106
|
-
- If no reduced scope would genuinely serve {userName}'s interests, conclude decisively with a terminal action from your allowed set rather than another repetitive counter.
|
|
107
|
-
This shift changes your stance only — your available actions are unchanged.`;
|
|
108
|
-
const BARGAINING_ASK_USER_ESCALATION = `
|
|
109
|
-
- If a concession would require {userName}'s own input or permission (budget, availability, private details), escalate with "ask_user" instead of guessing.`;
|
|
110
|
-
/**
|
|
111
|
-
* Skeptic-stance deadlock resolution (IND-611). Under `NEGOTIATOR_STANCE=skeptic`
|
|
112
|
-
* a stalemate resolves as a stalemate rather than by bargaining: the designed
|
|
113
|
-
* outcome of persistent disagreement stops being "a smaller match" and becomes
|
|
114
|
-
* "possibly no match". Same trigger, same threshold, same actions — only the
|
|
115
|
-
* drafting stance differs. `advocate`/`evaluator` keep the bargaining section
|
|
116
|
-
* byte-identical.
|
|
117
|
-
*/
|
|
118
|
-
const STALEMATE_SHIFT_SECTION = `
|
|
119
|
-
|
|
120
|
-
DEADLOCK — THE MERITS ARE EXHAUSTED. The last {consecutive} turns were counters/questions without convergence: the merits have been argued and restating them will not move the other side. For this turn, change stance:
|
|
121
|
-
- Do NOT re-argue fit or repeat points already made.
|
|
122
|
-
- Do NOT buy agreement with a concession or a reduced scope. A shrunken version of a match that could not be agreed on its merits is usually worth less of {userName}'s attention than the full one was, not more.
|
|
123
|
-
- Name the ONE specific thing that would genuinely change your assessment. If it has not appeared after this many turns, it is unlikely to.
|
|
124
|
-
- Absent that, conclude decisively with a terminal action from your allowed set. An unresolved disagreement is an acceptable outcome; a match made to end the disagreement is not.
|
|
125
|
-
This shift changes your stance only — your available actions are unchanged.`;
|
|
126
|
-
/**
|
|
127
|
-
* Renders the deadlock-stance prompt section. Returns the empty string when
|
|
128
|
-
* the shift is not active, so the rendered system prompt is byte-identical to
|
|
129
|
-
* the legacy build on every non-shifted turn (mirrors
|
|
130
|
-
* `renderNegotiatorMemorySection`). The `ask_user` escalation line renders
|
|
131
|
-
* only when the caller already legally holds the action (`canAskUser`) — the
|
|
132
|
-
* shift never invents a locution.
|
|
133
|
-
*
|
|
134
|
-
* IND-611: `stance` selects which resolution the shift drafts toward —
|
|
135
|
-
* bargaining (`advocate`/`evaluator`, the default and today's behavior) or
|
|
136
|
-
* stalemate (`skeptic`). Omitted → bargaining, byte-identical to before.
|
|
137
|
-
*/
|
|
138
|
-
export function renderBargainingShiftSection(input) {
|
|
139
|
-
if (!input.active)
|
|
140
|
-
return "";
|
|
141
|
-
if (input.stance && stanceResolvesDeadlockByStalemate(input.stance)) {
|
|
142
|
-
return STALEMATE_SHIFT_SECTION
|
|
143
|
-
.replace("{consecutive}", String(input.consecutiveNonConvergent))
|
|
144
|
-
.replace(/{userName}/g, input.userName);
|
|
145
|
-
}
|
|
146
|
-
return BARGAINING_SHIFT_SECTION
|
|
147
|
-
.replace("{consecutive}", String(input.consecutiveNonConvergent))
|
|
148
|
-
.replace("{askUserEscalation}", input.canAskUser ? BARGAINING_ASK_USER_ESCALATION : "")
|
|
149
|
-
.replace(/{userName}/g, input.userName);
|
|
150
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import type { NegotiationOpportunityLifecycle } from '../shared/interfaces/database.interface.js';
|
|
2
|
-
import type { SeedAssessment, UserNegotiationContext } from './negotiation.state.js';
|
|
3
|
-
export interface AuthorizedNegotiationDetailTask {
|
|
4
|
-
id: string;
|
|
5
|
-
conversationId: string;
|
|
6
|
-
state: string;
|
|
7
|
-
createdAt: Date;
|
|
8
|
-
updatedAt: Date;
|
|
9
|
-
}
|
|
10
|
-
export interface AuthorizedNegotiationDetailMetadata {
|
|
11
|
-
sourceUserId?: string;
|
|
12
|
-
candidateUserId?: string;
|
|
13
|
-
initiatorUserId?: string;
|
|
14
|
-
protocolVersion?: string;
|
|
15
|
-
maxTurns?: number;
|
|
16
|
-
opportunityId?: string;
|
|
17
|
-
isContinuation?: boolean;
|
|
18
|
-
priorTurnCount?: number;
|
|
19
|
-
turnContext?: {
|
|
20
|
-
sourceUser: UserNegotiationContext;
|
|
21
|
-
candidateUser: UserNegotiationContext;
|
|
22
|
-
indexContext: {
|
|
23
|
-
networkId: string;
|
|
24
|
-
prompt?: string;
|
|
25
|
-
};
|
|
26
|
-
seedAssessment: SeedAssessment;
|
|
27
|
-
discoveryQuery?: string;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export interface NegotiationDetailMessage {
|
|
31
|
-
senderId: string;
|
|
32
|
-
parts: unknown[];
|
|
33
|
-
createdAt: Date;
|
|
34
|
-
}
|
|
35
|
-
export interface NegotiationDetailArtifact {
|
|
36
|
-
name: string | null;
|
|
37
|
-
parts: unknown[];
|
|
38
|
-
}
|
|
39
|
-
export interface AuthorizedNegotiationDetailReaderInput {
|
|
40
|
-
task: AuthorizedNegotiationDetailTask;
|
|
41
|
-
metadata: AuthorizedNegotiationDetailMetadata;
|
|
42
|
-
callerUserId: string;
|
|
43
|
-
callerRole: 'source' | 'candidate';
|
|
44
|
-
readMessages: (conversationId: string) => Promise<NegotiationDetailMessage[]>;
|
|
45
|
-
readArtifacts: (taskId: string) => Promise<NegotiationDetailArtifact[]>;
|
|
46
|
-
readLifecycleEvidence: (opportunityIds: string[], ownerUserId: string) => Promise<Record<string, NegotiationOpportunityLifecycle>>;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Projects an already-authorized negotiation task into the caller's detail
|
|
50
|
-
* response. Admission and scope/privacy decisions stay in the tools facade;
|
|
51
|
-
* this reader owns only parallel reads and deterministic response shaping.
|
|
52
|
-
*/
|
|
53
|
-
export declare function readAuthorizedNegotiationDetail(input: AuthorizedNegotiationDetailReaderInput): Promise<{
|
|
54
|
-
id: string;
|
|
55
|
-
conversationId: string;
|
|
56
|
-
conversationType: "agent_negotiation";
|
|
57
|
-
status: string;
|
|
58
|
-
role: "source" | "candidate";
|
|
59
|
-
seat: import("../index.js").NegotiationSeat;
|
|
60
|
-
protocolVersion: import("../index.js").NegotiationProtocolVersion;
|
|
61
|
-
allowedActions: readonly ("propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user")[];
|
|
62
|
-
counterpartyId: string;
|
|
63
|
-
turnCount: number;
|
|
64
|
-
isUsersTurn: boolean;
|
|
65
|
-
isContinuation: boolean;
|
|
66
|
-
priorTurnCount: number;
|
|
67
|
-
turnsAdded: number;
|
|
68
|
-
turns: {
|
|
69
|
-
turnNumber: number;
|
|
70
|
-
speaker: string;
|
|
71
|
-
senderId: string;
|
|
72
|
-
action: string;
|
|
73
|
-
actionActor: "agent";
|
|
74
|
-
reasoning: string | null;
|
|
75
|
-
suggestedRoles: {} | null;
|
|
76
|
-
message: string | null;
|
|
77
|
-
createdAt: Date;
|
|
78
|
-
}[];
|
|
79
|
-
outcome: unknown;
|
|
80
|
-
lifecycle: import("./negotiation.lifecycle-narration.js").NegotiationLifecycleNarration;
|
|
81
|
-
context: {
|
|
82
|
-
discoveryQuery?: string | undefined;
|
|
83
|
-
ownUser: UserNegotiationContext;
|
|
84
|
-
otherUser: UserNegotiationContext;
|
|
85
|
-
indexContext: {
|
|
86
|
-
networkId: string;
|
|
87
|
-
prompt?: string;
|
|
88
|
-
};
|
|
89
|
-
seedAssessment: SeedAssessment;
|
|
90
|
-
isDiscoverer: boolean;
|
|
91
|
-
} | null;
|
|
92
|
-
createdAt: Date;
|
|
93
|
-
updatedAt: Date;
|
|
94
|
-
}>;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { expectedNegotiationSpeaker } from './negotiation.expected-speaker.js';
|
|
2
|
-
import { buildLifecycleNarration } from './negotiation.lifecycle-narration.js';
|
|
3
|
-
import { allowedActionsFor, readProtocolVersion, resolveSeat } from './negotiation.protocol.js';
|
|
4
|
-
/**
|
|
5
|
-
* Projects an already-authorized negotiation task into the caller's detail
|
|
6
|
-
* response. Admission and scope/privacy decisions stay in the tools facade;
|
|
7
|
-
* this reader owns only parallel reads and deterministic response shaping.
|
|
8
|
-
*/
|
|
9
|
-
export async function readAuthorizedNegotiationDetail(input) {
|
|
10
|
-
const { task, metadata, callerUserId, callerRole } = input;
|
|
11
|
-
const isSource = callerRole === 'source';
|
|
12
|
-
const counterpartyId = isSource ? metadata.candidateUserId : metadata.sourceUserId;
|
|
13
|
-
const negotiationContext = metadata.turnContext
|
|
14
|
-
? {
|
|
15
|
-
ownUser: isSource ? metadata.turnContext.sourceUser : metadata.turnContext.candidateUser,
|
|
16
|
-
otherUser: isSource ? metadata.turnContext.candidateUser : metadata.turnContext.sourceUser,
|
|
17
|
-
indexContext: metadata.turnContext.indexContext,
|
|
18
|
-
seedAssessment: metadata.turnContext.seedAssessment,
|
|
19
|
-
isDiscoverer: isSource,
|
|
20
|
-
...(metadata.turnContext.discoveryQuery && { discoveryQuery: metadata.turnContext.discoveryQuery }),
|
|
21
|
-
}
|
|
22
|
-
: null;
|
|
23
|
-
const lifecycleOpportunityId = metadata.opportunityId?.trim() || undefined;
|
|
24
|
-
// These independent reads must stay concurrent: message/artifact latency must
|
|
25
|
-
// not delay lifecycle evidence, and missing lifecycle evidence remains fail-open.
|
|
26
|
-
const [messages, artifacts, opportunityLifecycles] = await Promise.all([
|
|
27
|
-
input.readMessages(task.conversationId),
|
|
28
|
-
input.readArtifacts(task.id),
|
|
29
|
-
input.readLifecycleEvidence(lifecycleOpportunityId ? [lifecycleOpportunityId] : [], callerUserId),
|
|
30
|
-
]);
|
|
31
|
-
// Sender IDs, rather than parity, determine continuation turns. The parity
|
|
32
|
-
// fallback is retained for legacy rows that do not record a sender ID.
|
|
33
|
-
const turns = messages.map((message, index) => {
|
|
34
|
-
const dataPart = message.parts?.find((part) => part.kind === 'data');
|
|
35
|
-
const turnData = dataPart?.data;
|
|
36
|
-
const turnNumber = index + 1;
|
|
37
|
-
const speaker = message.senderId
|
|
38
|
-
? (message.senderId === `agent:${metadata.sourceUserId}` ? 'source' : 'candidate')
|
|
39
|
-
: (turnNumber % 2 === 1 ? 'source' : 'candidate');
|
|
40
|
-
return {
|
|
41
|
-
turnNumber,
|
|
42
|
-
speaker,
|
|
43
|
-
senderId: message.senderId,
|
|
44
|
-
action: turnData?.action ?? 'unknown',
|
|
45
|
-
actionActor: 'agent',
|
|
46
|
-
reasoning: turnData?.assessment?.reasoning ?? null,
|
|
47
|
-
suggestedRoles: turnData?.assessment?.suggestedRoles ?? null,
|
|
48
|
-
message: turnData?.message ?? null,
|
|
49
|
-
createdAt: message.createdAt,
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
const outcomeArtifact = artifacts.find((artifact) => artifact.name === 'negotiation-outcome');
|
|
53
|
-
const outcome = outcomeArtifact
|
|
54
|
-
? outcomeArtifact.parts?.find((part) => part.kind === 'data')?.data
|
|
55
|
-
: null;
|
|
56
|
-
const turnCount = messages.length;
|
|
57
|
-
const expectedSpeaker = expectedNegotiationSpeaker(metadata, messages);
|
|
58
|
-
const status = task.state === 'working' ? 'active'
|
|
59
|
-
: task.state === 'waiting_for_agent' ? 'waiting_for_agent'
|
|
60
|
-
: task.state === 'completed' ? 'completed'
|
|
61
|
-
: task.state;
|
|
62
|
-
const isUsersTurn = status !== 'completed' && expectedSpeaker === callerUserId;
|
|
63
|
-
const protocolVersion = readProtocolVersion(metadata) ?? 'v1';
|
|
64
|
-
const seat = resolveSeat(callerUserId, metadata);
|
|
65
|
-
const priorTurnCount = metadata.priorTurnCount ?? 0;
|
|
66
|
-
return {
|
|
67
|
-
id: task.id,
|
|
68
|
-
conversationId: task.conversationId,
|
|
69
|
-
conversationType: 'agent_negotiation',
|
|
70
|
-
status,
|
|
71
|
-
role: callerRole,
|
|
72
|
-
seat,
|
|
73
|
-
protocolVersion,
|
|
74
|
-
allowedActions: allowedActionsFor(protocolVersion, seat),
|
|
75
|
-
counterpartyId: counterpartyId ?? 'unknown',
|
|
76
|
-
turnCount,
|
|
77
|
-
isUsersTurn,
|
|
78
|
-
isContinuation: metadata.isContinuation ?? false,
|
|
79
|
-
priorTurnCount,
|
|
80
|
-
// Clamped: `turnCount` is match-scoped, but a task stamped before that
|
|
81
|
-
// change carries a conversation-wide `priorTurnCount`, which would other-
|
|
82
|
-
// wise report a negative delta for negotiations in flight across the deploy.
|
|
83
|
-
turnsAdded: Math.max(0, turnCount - priorTurnCount),
|
|
84
|
-
turns,
|
|
85
|
-
outcome,
|
|
86
|
-
lifecycle: buildLifecycleNarration(status, lifecycleOpportunityId ? opportunityLifecycles[lifecycleOpportunityId] : undefined),
|
|
87
|
-
context: negotiationContext,
|
|
88
|
-
createdAt: task.createdAt,
|
|
89
|
-
updatedAt: task.updatedAt,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export interface NegotiationSpeakerParticipants {
|
|
2
|
-
sourceUserId?: unknown;
|
|
3
|
-
candidateUserId?: unknown;
|
|
4
|
-
/**
|
|
5
|
-
* The seat that opens this negotiation (v2 stamp). An unopened negotiation
|
|
6
|
-
* starts with its initiator; `sourceUserId` is the pre-stamp fallback, which
|
|
7
|
-
* is what the stamp defaults to anyway.
|
|
8
|
-
*/
|
|
9
|
-
initiatorUserId?: unknown;
|
|
10
|
-
}
|
|
11
|
-
export interface NegotiationSpeakerMessage {
|
|
12
|
-
senderId?: unknown;
|
|
13
|
-
parts?: unknown;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Resolves the participant whose agent owns the next canonical bilateral turn.
|
|
17
|
-
*
|
|
18
|
-
* `messages` must be THIS negotiation's messages (see
|
|
19
|
-
* `getNegotiationMessages`), never the whole conversation. Two agents share one
|
|
20
|
-
* DM across every match they are ever paired on, so conversation-scoped parity
|
|
21
|
-
* makes a fresh negotiation inherit the turn order of an unrelated, concluded
|
|
22
|
-
* one — handing the floor to the counterparty, who may `accept` immediately and
|
|
23
|
-
* conclude the match before its initiator has spoken.
|
|
24
|
-
*
|
|
25
|
-
* Participant identities must be nonempty and distinct. Unrelated agent,
|
|
26
|
-
* system, and owner-settlement messages are ignored while finding the latest
|
|
27
|
-
* source/candidate message. An ordinary canonical message passes the floor to
|
|
28
|
-
* the other participant; `ask_user` retains it for the consulting sender's
|
|
29
|
-
* exact successor. A negotiation with no canonical history of its own has not
|
|
30
|
-
* opened yet, so it starts with its initiator. Invalid participant metadata
|
|
31
|
-
* always fails closed.
|
|
32
|
-
*/
|
|
33
|
-
export declare function expectedNegotiationSpeaker(participants: NegotiationSpeakerParticipants, messages: readonly NegotiationSpeakerMessage[]): string | null;
|