@indexnetwork/protocol 22.0.0-rc.499.1 → 64.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,155 +0,0 @@
|
|
|
1
|
-
import { POOL_DISCRIMINATOR_MIN_POOL_SIZE, POOL_QUESTION_MAX_DISCRIMINATORS, POOL_QUESTION_MIN_EVIDENCE_RATE, POOL_QUESTION_MIN_VOI } from "./discriminator.env.js";
|
|
2
|
-
/** Fixed option appended to every pool question — the no-preference escape. */
|
|
3
|
-
export const BOTH_MATTER_LABEL = "Both matter";
|
|
4
|
-
/** Max words in a chip-style option label (prototype voice: terse, glanceable). */
|
|
5
|
-
const MAX_LABEL_WORDS = 5;
|
|
6
|
-
/** Question title (≤12 chars, per QuestionSchema). */
|
|
7
|
-
const POOL_QUESTION_TITLE = "Matches";
|
|
8
|
-
/**
|
|
9
|
-
* Converts a scored discriminator into the compact snapshot form stored on
|
|
10
|
-
* the question row (verified assignments only; unknowns dropped).
|
|
11
|
-
*/
|
|
12
|
-
export function toQuestionDiscriminator(d) {
|
|
13
|
-
const sideCounts = {};
|
|
14
|
-
for (const side of d.sides)
|
|
15
|
-
sideCounts[side] = 0;
|
|
16
|
-
const assignments = [];
|
|
17
|
-
for (const a of d.assignments) {
|
|
18
|
-
if (a.side === null || !a.verified)
|
|
19
|
-
continue;
|
|
20
|
-
if (!(a.side in sideCounts))
|
|
21
|
-
continue;
|
|
22
|
-
sideCounts[a.side] += 1;
|
|
23
|
-
assignments.push({ opportunityId: a.id, side: a.side });
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
label: d.label,
|
|
27
|
-
questionSeed: d.questionSeed,
|
|
28
|
-
sides: d.sides,
|
|
29
|
-
sideCounts,
|
|
30
|
-
voi: d.voi,
|
|
31
|
-
evidenceRate: d.evidenceRate,
|
|
32
|
-
...(d.embedding ? { embedding: d.embedding } : {}),
|
|
33
|
-
...(d.embeddingModel ? { embeddingModel: d.embeddingModel } : {}),
|
|
34
|
-
assignments,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Filters a mining pass down to question-eligible discriminators:
|
|
39
|
-
* VoI ≥ {@link POOL_QUESTION_MIN_VOI}, evidenceRate ≥
|
|
40
|
-
* {@link POOL_QUESTION_MIN_EVIDENCE_RATE}, capped at
|
|
41
|
-
* {@link POOL_QUESTION_MAX_DISCRIMINATORS}. Input is already VoI-sorted.
|
|
42
|
-
*/
|
|
43
|
-
export function selectQuestionDiscriminators(discriminators) {
|
|
44
|
-
return discriminators
|
|
45
|
-
.filter((d) => d.voi >= POOL_QUESTION_MIN_VOI && d.evidenceRate >= POOL_QUESTION_MIN_EVIDENCE_RATE)
|
|
46
|
-
.slice(0, POOL_QUESTION_MAX_DISCRIMINATORS);
|
|
47
|
-
}
|
|
48
|
-
/** Truncates a side label to the chip word budget. */
|
|
49
|
-
function chipLabel(side) {
|
|
50
|
-
const words = side.trim().split(/\s+/);
|
|
51
|
-
return words.slice(0, MAX_LABEL_WORDS).join(" ");
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Miner seeds are sometimes written from the intent owner's POV ("Do I
|
|
55
|
-
* prefer…"). The question is asked TO the owner, so normalize to second
|
|
56
|
-
* person. Conservative verb-pair map + bare pronoun/possessive swaps.
|
|
57
|
-
*/
|
|
58
|
-
function toSecondPerson(seed) {
|
|
59
|
-
return seed
|
|
60
|
-
.replace(/\b(do|should|would|could|can|will) I\b/gi, (_, verb) => `${verb.toLowerCase()} you`)
|
|
61
|
-
.replace(/\bam I\b/gi, "are you")
|
|
62
|
-
.replace(/\bI\b/g, "you")
|
|
63
|
-
.replace(/\bmy\b/gi, "your")
|
|
64
|
-
// Third-person seeds ("Is the user primarily involved…") — the question is
|
|
65
|
-
// asked TO the owner, never ABOUT them.
|
|
66
|
-
.replace(/\b(is|was) (?:the|this) (user|owner|discoverer|client)\b/gi, "are you")
|
|
67
|
-
.replace(/\bdoes (?:the|this) (user|owner|discoverer|client)\b/gi, "do you")
|
|
68
|
-
.replace(/\b(?:the|this) (user|owner|discoverer|client)'s\b/gi, "your")
|
|
69
|
-
.replace(/\b(?:the|this) (user|owner|discoverer|client)\b/gi, "you");
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Catch-all: after normalization the prompt must be second-person. Any
|
|
73
|
-
* residual third-person reference to the owner means an unanticipated seed
|
|
74
|
-
* shape slipped through — the deterministic two-sided template (always
|
|
75
|
-
* second-person) is the safe fallback.
|
|
76
|
-
*/
|
|
77
|
-
function isStillThirdPerson(prompt) {
|
|
78
|
-
return /\b(?:the|this|a) (?:user|owner|discoverer|client)\b/i.test(prompt);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* A good discriminator prompt names BOTH sides so the chips read as a real
|
|
82
|
-
* choice. When the seed mentions fewer than two sides (e.g. "Do you prefer
|
|
83
|
-
* hands-on prototyping?"), fall back to a deterministic two-sided template.
|
|
84
|
-
*/
|
|
85
|
-
function mentionsSide(seed, side) {
|
|
86
|
-
const lowerSeed = seed.toLowerCase();
|
|
87
|
-
return side
|
|
88
|
-
.toLowerCase()
|
|
89
|
-
.split(/[^a-z0-9-]+/)
|
|
90
|
-
.filter((w) => w.length > 3)
|
|
91
|
-
.some((w) => lowerSeed.includes(w));
|
|
92
|
-
}
|
|
93
|
-
/** Ensures the prompt reads as one second-person, two-sided question. */
|
|
94
|
-
function toPrompt(questionSeed, sides) {
|
|
95
|
-
let p = toSecondPerson(questionSeed.trim().replace(/\s+/g, " "));
|
|
96
|
-
const sidesMentioned = sides.filter((s) => mentionsSide(p, s)).length;
|
|
97
|
-
if (sidesMentioned < 2 || isStillThirdPerson(p)) {
|
|
98
|
-
const last = sides[sides.length - 1];
|
|
99
|
-
const head = sides.slice(0, -1).join(", ");
|
|
100
|
-
p = `Which matters more here: ${head} or ${last}`;
|
|
101
|
-
}
|
|
102
|
-
// Sentence-case the first character (template + normalization can lowercase it).
|
|
103
|
-
p = p.charAt(0).toUpperCase() + p.slice(1);
|
|
104
|
-
if (!/[?]$/.test(p))
|
|
105
|
-
p = p.replace(/[.!]+$/, "") + "?";
|
|
106
|
-
return p.slice(0, 400);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Builds the pool_discovery question. Returns null when the pool is below
|
|
110
|
-
* the k-anonymity floor or the discriminator shape is unusable (guards are
|
|
111
|
-
* duplicated here so no caller can bypass them).
|
|
112
|
-
*/
|
|
113
|
-
export function synthesizePoolQuestion(input) {
|
|
114
|
-
const { discriminator: d, poolSize } = input;
|
|
115
|
-
if (poolSize < POOL_DISCRIMINATOR_MIN_POOL_SIZE)
|
|
116
|
-
return null;
|
|
117
|
-
if (d.sides.length < 2 || d.sides.length > 3)
|
|
118
|
-
return null;
|
|
119
|
-
// Evidence chip: aggregate count + the intent it belongs to, so the card is
|
|
120
|
-
// self-identifying on every surface (QuestionSchema caps evidence at 160).
|
|
121
|
-
const snippet = input.intentText?.trim().replace(/\s+/g, " ") ?? "";
|
|
122
|
-
const evidence = snippet.length > 0
|
|
123
|
-
? `based on ${poolSize} people matching “${snippet.slice(0, 110)}${snippet.length > 110 ? "…" : ""}”`
|
|
124
|
-
: `based on ${poolSize} people matching this intent`;
|
|
125
|
-
const sideOptions = d.sides.map((side) => ({
|
|
126
|
-
label: chipLabel(side),
|
|
127
|
-
description: `${d.sideCounts[side] ?? 0} of your ${poolSize} current matches lean this way`,
|
|
128
|
-
}));
|
|
129
|
-
const options = [
|
|
130
|
-
...sideOptions,
|
|
131
|
-
{
|
|
132
|
-
label: BOTH_MATTER_LABEL,
|
|
133
|
-
description: "No preference — keep the current ranking",
|
|
134
|
-
},
|
|
135
|
-
];
|
|
136
|
-
return {
|
|
137
|
-
payload: {
|
|
138
|
-
title: POOL_QUESTION_TITLE,
|
|
139
|
-
prompt: toPrompt(d.questionSeed, d.sides),
|
|
140
|
-
options,
|
|
141
|
-
multiSelect: false,
|
|
142
|
-
evidence,
|
|
143
|
-
},
|
|
144
|
-
pool: {
|
|
145
|
-
poolSize,
|
|
146
|
-
opportunityIds: [...input.opportunityIds],
|
|
147
|
-
minedAt: input.minedAt,
|
|
148
|
-
...(input.runId ? { runId: input.runId } : {}),
|
|
149
|
-
...(snippet.length > 0 ? { intentText: snippet.slice(0, 160) } : {}),
|
|
150
|
-
...(input.intentFingerprint ? { intentFingerprint: input.intentFingerprint } : {}),
|
|
151
|
-
discriminator: d,
|
|
152
|
-
alternates: input.alternates,
|
|
153
|
-
},
|
|
154
|
-
};
|
|
155
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pool-axis VoI scorer — pure functions, no LLM, no I/O (IND-417).
|
|
3
|
-
*
|
|
4
|
-
* VoI = H_norm × coverage^1.5 × novelty
|
|
5
|
-
*
|
|
6
|
-
* H_norm score-weighted entropy over the axis sides, normalized by
|
|
7
|
-
* log2(k). Entropy is computed over candidate *score mass*
|
|
8
|
-
* (confidence weights), not head counts, so a balanced split of
|
|
9
|
-
* low-confidence junk-tail candidates doesn't inflate VoI.
|
|
10
|
-
* coverage fraction of total pool score mass with a verified side
|
|
11
|
-
* assignment. The ^1.5 exponent is the anti-vague-axis knob:
|
|
12
|
-
* axes the LLM couldn't ground in evidence lose fast.
|
|
13
|
-
* novelty 1 − max cosine similarity between the axis embedding and
|
|
14
|
-
* reference embeddings (existing premises, intent sentences).
|
|
15
|
-
* An axis the user has already answered elsewhere scores ~0.
|
|
16
|
-
*/
|
|
17
|
-
import type { MinedDiscriminator, PoolCandidate, ScoredDiscriminator } from "./discriminator.types.js";
|
|
18
|
-
/** Cosine similarity of two equal-length vectors, in [-1, 1]. 0 for degenerate input. */
|
|
19
|
-
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
20
|
-
/**
|
|
21
|
-
* Novelty of an axis vs reference texts: 1 − max cosine similarity, clamped
|
|
22
|
-
* to [0, 1]. No references → 1 (fully novel).
|
|
23
|
-
*/
|
|
24
|
-
export declare function computeNovelty(axisEmbedding: number[], referenceEmbeddings: number[][]): number;
|
|
25
|
-
/**
|
|
26
|
-
* Score one mined axis against its pool.
|
|
27
|
-
*
|
|
28
|
-
* @param axis Mined axis with verified assignments (one per candidate).
|
|
29
|
-
* @param candidates The pool (provides score mass per candidate id).
|
|
30
|
-
* @param novelty Precomputed novelty in [0,1] (see {@link computeNovelty}).
|
|
31
|
-
*/
|
|
32
|
-
export declare function scoreDiscriminator(axis: MinedDiscriminator, candidates: PoolCandidate[], novelty: number): ScoredDiscriminator;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pool-axis VoI scorer — pure functions, no LLM, no I/O (IND-417).
|
|
3
|
-
*
|
|
4
|
-
* VoI = H_norm × coverage^1.5 × novelty
|
|
5
|
-
*
|
|
6
|
-
* H_norm score-weighted entropy over the axis sides, normalized by
|
|
7
|
-
* log2(k). Entropy is computed over candidate *score mass*
|
|
8
|
-
* (confidence weights), not head counts, so a balanced split of
|
|
9
|
-
* low-confidence junk-tail candidates doesn't inflate VoI.
|
|
10
|
-
* coverage fraction of total pool score mass with a verified side
|
|
11
|
-
* assignment. The ^1.5 exponent is the anti-vague-axis knob:
|
|
12
|
-
* axes the LLM couldn't ground in evidence lose fast.
|
|
13
|
-
* novelty 1 − max cosine similarity between the axis embedding and
|
|
14
|
-
* reference embeddings (existing premises, intent sentences).
|
|
15
|
-
* An axis the user has already answered elsewhere scores ~0.
|
|
16
|
-
*/
|
|
17
|
-
/** Cosine similarity of two equal-length vectors, in [-1, 1]. 0 for degenerate input. */
|
|
18
|
-
export function cosineSimilarity(a, b) {
|
|
19
|
-
if (a.length === 0 || a.length !== b.length)
|
|
20
|
-
return 0;
|
|
21
|
-
let dot = 0;
|
|
22
|
-
let normA = 0;
|
|
23
|
-
let normB = 0;
|
|
24
|
-
for (let i = 0; i < a.length; i++) {
|
|
25
|
-
dot += a[i] * b[i];
|
|
26
|
-
normA += a[i] * a[i];
|
|
27
|
-
normB += b[i] * b[i];
|
|
28
|
-
}
|
|
29
|
-
if (normA === 0 || normB === 0)
|
|
30
|
-
return 0;
|
|
31
|
-
return dot / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Novelty of an axis vs reference texts: 1 − max cosine similarity, clamped
|
|
35
|
-
* to [0, 1]. No references → 1 (fully novel).
|
|
36
|
-
*/
|
|
37
|
-
export function computeNovelty(axisEmbedding, referenceEmbeddings) {
|
|
38
|
-
if (referenceEmbeddings.length === 0)
|
|
39
|
-
return 1;
|
|
40
|
-
let maxSim = 0;
|
|
41
|
-
for (const ref of referenceEmbeddings) {
|
|
42
|
-
const sim = cosineSimilarity(axisEmbedding, ref);
|
|
43
|
-
if (sim > maxSim)
|
|
44
|
-
maxSim = sim;
|
|
45
|
-
}
|
|
46
|
-
return Math.min(1, Math.max(0, 1 - maxSim));
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Weight for one candidate's score mass. Negative/NaN scores contribute 0;
|
|
50
|
-
* when the whole pool has zero mass the caller falls back to count weights.
|
|
51
|
-
*/
|
|
52
|
-
function massOf(score) {
|
|
53
|
-
return Number.isFinite(score) && score > 0 ? score : 0;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Score one mined axis against its pool.
|
|
57
|
-
*
|
|
58
|
-
* @param axis Mined axis with verified assignments (one per candidate).
|
|
59
|
-
* @param candidates The pool (provides score mass per candidate id).
|
|
60
|
-
* @param novelty Precomputed novelty in [0,1] (see {@link computeNovelty}).
|
|
61
|
-
*/
|
|
62
|
-
export function scoreDiscriminator(axis, candidates, novelty) {
|
|
63
|
-
const massById = new Map();
|
|
64
|
-
let totalMass = 0;
|
|
65
|
-
for (const c of candidates) {
|
|
66
|
-
const m = massOf(c.score);
|
|
67
|
-
massById.set(c.id, m);
|
|
68
|
-
totalMass += m;
|
|
69
|
-
}
|
|
70
|
-
// Degenerate pool (all zero/invalid scores): fall back to count weights.
|
|
71
|
-
const useCounts = totalMass <= 0;
|
|
72
|
-
if (useCounts) {
|
|
73
|
-
totalMass = candidates.length;
|
|
74
|
-
for (const c of candidates)
|
|
75
|
-
massById.set(c.id, 1);
|
|
76
|
-
}
|
|
77
|
-
const sideMass = new Map();
|
|
78
|
-
let assignedMass = 0;
|
|
79
|
-
for (const a of axis.assignments) {
|
|
80
|
-
if (a.side === null || !a.verified)
|
|
81
|
-
continue;
|
|
82
|
-
if (!axis.sides.includes(a.side))
|
|
83
|
-
continue;
|
|
84
|
-
const m = massById.get(a.id) ?? 0;
|
|
85
|
-
if (m <= 0)
|
|
86
|
-
continue;
|
|
87
|
-
sideMass.set(a.side, (sideMass.get(a.side) ?? 0) + m);
|
|
88
|
-
assignedMass += m;
|
|
89
|
-
}
|
|
90
|
-
const k = axis.sides.length;
|
|
91
|
-
let entropy = 0;
|
|
92
|
-
if (assignedMass > 0 && k >= 2) {
|
|
93
|
-
let h = 0;
|
|
94
|
-
for (const mass of sideMass.values()) {
|
|
95
|
-
const p = mass / assignedMass;
|
|
96
|
-
if (p > 0)
|
|
97
|
-
h -= p * Math.log2(p);
|
|
98
|
-
}
|
|
99
|
-
entropy = h / Math.log2(k);
|
|
100
|
-
}
|
|
101
|
-
const coverage = totalMass > 0 ? assignedMass / totalMass : 0;
|
|
102
|
-
const clampedNovelty = Math.min(1, Math.max(0, novelty));
|
|
103
|
-
const voi = entropy * Math.pow(coverage, 1.5) * clampedNovelty;
|
|
104
|
-
return { ...axis, entropy, coverage, novelty: clampedNovelty, voi };
|
|
105
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingGenerator } from "../../shared/interfaces/embedder.interface.js";
|
|
2
|
-
import type { PoolDiscriminatorMiner } from "./discriminator.miner.js";
|
|
3
|
-
import type { PoolCandidate, DiscriminatorShadowResult } from "./discriminator.types.js";
|
|
4
|
-
/** Input for one shadow mining+scoring pass. */
|
|
5
|
-
export interface DiscriminatorShadowInput {
|
|
6
|
-
/** Intent payload (+ summary) or search query that produced the pool. */
|
|
7
|
-
intentText: string;
|
|
8
|
-
/** The pool (already filtered/capped by the caller). */
|
|
9
|
-
candidates: PoolCandidate[];
|
|
10
|
-
/**
|
|
11
|
-
* Novelty references: the intent owner's active premise texts and intent
|
|
12
|
-
* sentences. An axis semantically equal to any reference scores ~0.
|
|
13
|
-
*/
|
|
14
|
-
referenceTexts: string[];
|
|
15
|
-
/** Legacy/model-mismatched resolved axes re-embedded with an independent budget. */
|
|
16
|
-
priorReferenceTexts?: string[];
|
|
17
|
-
/** Fresh resolved-axis vectors generated by the current embedding model. */
|
|
18
|
-
priorReferenceEmbeddings?: number[][];
|
|
19
|
-
/** Model used for current axis embeddings and persisted metadata. */
|
|
20
|
-
embeddingModel?: string;
|
|
21
|
-
/** Retain generated axis vectors on results for durable question snapshots. */
|
|
22
|
-
retainEmbeddings?: boolean;
|
|
23
|
-
miner: Pick<PoolDiscriminatorMiner, "mine">;
|
|
24
|
-
embedder: EmbeddingGenerator;
|
|
25
|
-
signal?: AbortSignal;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Runs miner → embeddings → scorer. Throws only when *mining* fails (callers
|
|
29
|
-
* are fire-and-forget); embedding failures degrade to novelty = 1 for all
|
|
30
|
-
* discriminators rather than dropping the pass.
|
|
31
|
-
*/
|
|
32
|
-
export declare function runPoolDiscriminatorShadow(input: DiscriminatorShadowInput): Promise<DiscriminatorShadowResult>;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shadow orchestrator: mine discriminators for a pool, embed them, score VoI, and
|
|
3
|
-
* return the log payload (IND-417). No persistence, no questions, no UI —
|
|
4
|
-
* P1 output is consumed only by structured logs for human review.
|
|
5
|
-
*/
|
|
6
|
-
import { protocolLogger } from "../../shared/observability/protocol.logger.js";
|
|
7
|
-
import { computeNovelty, scoreDiscriminator } from "./discriminator.scorer.js";
|
|
8
|
-
const logger = protocolLogger("PoolDiscriminatorShadow");
|
|
9
|
-
/** Max ordinary current-intent/premise text references compared for novelty. */
|
|
10
|
-
const MAX_REFERENCE_TEXTS = 24;
|
|
11
|
-
/** Text embedded per discriminator for the novelty comparison. */
|
|
12
|
-
function discriminatorEmbeddingText(d) {
|
|
13
|
-
return `${d.label} — ${d.questionSeed}`;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Runs miner → embeddings → scorer. Throws only when *mining* fails (callers
|
|
17
|
-
* are fire-and-forget); embedding failures degrade to novelty = 1 for all
|
|
18
|
-
* discriminators rather than dropping the pass.
|
|
19
|
-
*/
|
|
20
|
-
export async function runPoolDiscriminatorShadow(input) {
|
|
21
|
-
const { candidates } = input;
|
|
22
|
-
const mined = await input.miner.mine({ intentText: input.intentText, candidates }, input.signal ? { signal: input.signal } : undefined);
|
|
23
|
-
if (mined.length === 0) {
|
|
24
|
-
return { poolSize: candidates.length, discriminators: [] };
|
|
25
|
-
}
|
|
26
|
-
const references = input.referenceTexts
|
|
27
|
-
.map((t) => t.trim())
|
|
28
|
-
.filter((t) => t.length > 0)
|
|
29
|
-
.slice(0, MAX_REFERENCE_TEXTS);
|
|
30
|
-
const priorReferenceTexts = (input.priorReferenceTexts ?? [])
|
|
31
|
-
.map((text) => text.trim())
|
|
32
|
-
.filter((text) => text.length > 0);
|
|
33
|
-
const priorReferenceEmbeddings = (input.priorReferenceEmbeddings ?? [])
|
|
34
|
-
.filter((embedding) => embedding.length > 0);
|
|
35
|
-
const hasPriorReferenceHistory = priorReferenceTexts.length > 0 || priorReferenceEmbeddings.length > 0;
|
|
36
|
-
let novelties = mined.map(() => 1);
|
|
37
|
-
let discriminatorEmbeddings = null;
|
|
38
|
-
let priorReferenceComparisonUnavailable = false;
|
|
39
|
-
const shouldEmbed = input.retainEmbeddings
|
|
40
|
-
|| references.length > 0
|
|
41
|
-
|| hasPriorReferenceHistory;
|
|
42
|
-
if (shouldEmbed) {
|
|
43
|
-
try {
|
|
44
|
-
const texts = [
|
|
45
|
-
...mined.map(discriminatorEmbeddingText),
|
|
46
|
-
...references,
|
|
47
|
-
...priorReferenceTexts,
|
|
48
|
-
];
|
|
49
|
-
const embeddings = (await input.embedder.generate(texts));
|
|
50
|
-
if (embeddings.length !== texts.length || embeddings.some((embedding) => !Array.isArray(embedding) || embedding.length === 0)) {
|
|
51
|
-
throw new Error("Embedding provider returned an invalid batch");
|
|
52
|
-
}
|
|
53
|
-
const comparisonEmbeddings = [...embeddings, ...priorReferenceEmbeddings];
|
|
54
|
-
const dimension = comparisonEmbeddings[0]?.length;
|
|
55
|
-
if (dimension !== undefined && comparisonEmbeddings.some((embedding) => embedding.length !== dimension)) {
|
|
56
|
-
throw new Error("Embedding comparison batch contains incompatible vector dimensions");
|
|
57
|
-
}
|
|
58
|
-
discriminatorEmbeddings = embeddings.slice(0, mined.length);
|
|
59
|
-
const referenceEmbeddings = [
|
|
60
|
-
...priorReferenceEmbeddings,
|
|
61
|
-
...embeddings.slice(mined.length),
|
|
62
|
-
];
|
|
63
|
-
novelties = discriminatorEmbeddings.map((embedding) => computeNovelty(embedding, referenceEmbeddings));
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
logger.warn("Novelty embedding failed; defaulting novelty to 1", {
|
|
67
|
-
error: err instanceof Error ? err.message : String(err),
|
|
68
|
-
});
|
|
69
|
-
priorReferenceComparisonUnavailable = hasPriorReferenceHistory;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const discriminators = mined
|
|
73
|
-
.map((d, i) => {
|
|
74
|
-
const scored = scoreDiscriminator(d, candidates, novelties[i]);
|
|
75
|
-
const embedding = input.retainEmbeddings ? discriminatorEmbeddings?.[i] : undefined;
|
|
76
|
-
return embedding
|
|
77
|
-
? {
|
|
78
|
-
...scored,
|
|
79
|
-
embedding,
|
|
80
|
-
...(input.embeddingModel ? { embeddingModel: input.embeddingModel } : {}),
|
|
81
|
-
}
|
|
82
|
-
: scored;
|
|
83
|
-
})
|
|
84
|
-
.sort((a, b) => b.voi - a.voi);
|
|
85
|
-
return {
|
|
86
|
-
poolSize: candidates.length,
|
|
87
|
-
discriminators,
|
|
88
|
-
...(priorReferenceComparisonUnavailable ? { priorReferenceComparisonUnavailable: true } : {}),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pool discriminator mining — shared types (IND-416 / IND-417).
|
|
3
|
-
*
|
|
4
|
-
* A "pool discriminator" is a preference dimension that splits a discovery-run
|
|
5
|
-
* candidate pool into meaningfully different groups (e.g. "hands-on builders
|
|
6
|
-
* vs advisors"). Discriminators are mined by one structured LLM pass, then
|
|
7
|
-
* scored deterministically (VoI = entropy × coverage^1.5 × novelty) so the
|
|
8
|
-
* highest value question can eventually be asked to the intent owner.
|
|
9
|
-
*
|
|
10
|
-
* Vocabulary note: the LLM wire format (prompt + response schema in the miner)
|
|
11
|
-
* speaks of "axes" with mutually exclusive "sides" — the clearest way to
|
|
12
|
-
* explain the concept to the model. Everything the rest of the codebase
|
|
13
|
-
* touches (types, exports, logs) uses "discriminator".
|
|
14
|
-
*
|
|
15
|
-
* P1 (shadow) uses these types for log-only output; later phases reuse them
|
|
16
|
-
* for question synthesis and answer application.
|
|
17
|
-
*/
|
|
18
|
-
/** One candidate in the pool as supplied to the miner LLM. */
|
|
19
|
-
export interface PoolCandidate {
|
|
20
|
-
/** Opportunity id (stable key for later answer application). */
|
|
21
|
-
id: string;
|
|
22
|
-
/**
|
|
23
|
-
* The exact public-context string shown to the LLM for this candidate
|
|
24
|
-
* (name + bio + matchReason + headline + premise snippets, ≤400 chars).
|
|
25
|
-
* Evidence spans are substring-verified against this exact string.
|
|
26
|
-
*/
|
|
27
|
-
publicContext: string;
|
|
28
|
-
/** Candidate confidence/score — the mass used for score-weighted entropy. */
|
|
29
|
-
score: number;
|
|
30
|
-
}
|
|
31
|
-
/** Input envelope for one mining pass. */
|
|
32
|
-
export interface DiscriminatorMiningInput {
|
|
33
|
-
/** Intent payload (+ summary) or ad-hoc search query that produced the pool. */
|
|
34
|
-
intentText: string;
|
|
35
|
-
candidates: PoolCandidate[];
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* One candidate assignment on a discriminator, after code-side evidence verification.
|
|
39
|
-
* `side === null` means unknown (LLM abstained, evidence failed verification,
|
|
40
|
-
* or the candidate was missing from the LLM output).
|
|
41
|
-
*/
|
|
42
|
-
export interface VerifiedAssignment {
|
|
43
|
-
/** Candidate (opportunity) id. */
|
|
44
|
-
id: string;
|
|
45
|
-
/** Verified side label (one of the discriminator's sides), or null = unknown. */
|
|
46
|
-
side: string | null;
|
|
47
|
-
/** The evidence span quoted by the LLM (kept for logging/audit), if any. */
|
|
48
|
-
evidence: string | null;
|
|
49
|
-
/**
|
|
50
|
-
* True when the LLM proposed a side AND its evidence span substring-matched
|
|
51
|
-
* the candidate's publicContext. False for demoted-to-unknown proposals.
|
|
52
|
-
*/
|
|
53
|
-
verified: boolean;
|
|
54
|
-
}
|
|
55
|
-
/** One mined discriminator after evidence verification (pre-scoring). */
|
|
56
|
-
export interface MinedDiscriminator {
|
|
57
|
-
/** Short discriminator label, e.g. "Hands-on builders vs strategic advisors". */
|
|
58
|
-
label: string;
|
|
59
|
-
/** A question the intent owner could be asked to resolve the discriminator. */
|
|
60
|
-
questionSeed: string;
|
|
61
|
-
/** 2–3 mutually exclusive side labels. */
|
|
62
|
-
sides: string[];
|
|
63
|
-
/** Exactly one entry per pool candidate. */
|
|
64
|
-
assignments: VerifiedAssignment[];
|
|
65
|
-
/**
|
|
66
|
-
* verified-proposals / total side proposals from the LLM for this discriminator
|
|
67
|
-
* (0 when the LLM proposed no sides at all). The hallucination health metric.
|
|
68
|
-
*/
|
|
69
|
-
evidenceRate: number;
|
|
70
|
-
}
|
|
71
|
-
/** A mined discriminator with its deterministic VoI score components. */
|
|
72
|
-
export interface ScoredDiscriminator extends MinedDiscriminator {
|
|
73
|
-
/** Current discriminator embedding retained for durable semantic dedup. */
|
|
74
|
-
embedding?: number[];
|
|
75
|
-
/** Model that generated {@link embedding}. */
|
|
76
|
-
embeddingModel?: string;
|
|
77
|
-
/** Normalized score-weighted entropy over sides, in [0,1]. */
|
|
78
|
-
entropy: number;
|
|
79
|
-
/** Assigned score mass / total pool score mass, in [0,1]. */
|
|
80
|
-
coverage: number;
|
|
81
|
-
/** 1 − max cosine similarity vs reference texts (premises/intent), in [0,1]. */
|
|
82
|
-
novelty: number;
|
|
83
|
-
/** entropy × coverage^1.5 × novelty. */
|
|
84
|
-
voi: number;
|
|
85
|
-
}
|
|
86
|
-
/** Result of one shadow mining+scoring pass (the log payload shape). */
|
|
87
|
-
export interface DiscriminatorShadowResult {
|
|
88
|
-
poolSize: number;
|
|
89
|
-
/** Scored discriminators, sorted by VoI descending. */
|
|
90
|
-
discriminators: ScoredDiscriminator[];
|
|
91
|
-
/** Historical-axis comparison could not be completed due to invalid embeddings. */
|
|
92
|
-
priorReferenceComparisonUnavailable?: boolean;
|
|
93
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pool discriminator mining — shared types (IND-416 / IND-417).
|
|
3
|
-
*
|
|
4
|
-
* A "pool discriminator" is a preference dimension that splits a discovery-run
|
|
5
|
-
* candidate pool into meaningfully different groups (e.g. "hands-on builders
|
|
6
|
-
* vs advisors"). Discriminators are mined by one structured LLM pass, then
|
|
7
|
-
* scored deterministically (VoI = entropy × coverage^1.5 × novelty) so the
|
|
8
|
-
* highest value question can eventually be asked to the intent owner.
|
|
9
|
-
*
|
|
10
|
-
* Vocabulary note: the LLM wire format (prompt + response schema in the miner)
|
|
11
|
-
* speaks of "axes" with mutually exclusive "sides" — the clearest way to
|
|
12
|
-
* explain the concept to the model. Everything the rest of the codebase
|
|
13
|
-
* touches (types, exports, logs) uses "discriminator".
|
|
14
|
-
*
|
|
15
|
-
* P1 (shadow) uses these types for log-only output; later phases reuse them
|
|
16
|
-
* for question synthesis and answer application.
|
|
17
|
-
*/
|
|
18
|
-
export {};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Negotiation context loader: given an opportunity, fetches the attached
|
|
3
|
-
* negotiation task's transcript and outcome so the card presenter can
|
|
4
|
-
* explain *why* the opportunity surfaced.
|
|
5
|
-
*
|
|
6
|
-
* For `draft`, `latent`, and `expired` opportunities, no negotiation has
|
|
7
|
-
* happened (or no longer matters) so the loader returns null.
|
|
8
|
-
*
|
|
9
|
-
* For `negotiating` opportunities, only `turnCount` / `turnCap` are returned
|
|
10
|
-
* — the presenter renders a templated chip without invoking the LLM.
|
|
11
|
-
*
|
|
12
|
-
* For `pending`, `stalled`, `accepted`, and `rejected` opportunities, the
|
|
13
|
-
* full transcript and outcome are included so the prompt can ground its
|
|
14
|
-
* explanation in concrete turn content.
|
|
15
|
-
*
|
|
16
|
-
* Screened-out negotiations (P2.2 — the client's own outreach gate declined
|
|
17
|
-
* before any turn was exchanged) return null: presentation treats them as
|
|
18
|
-
* never-happened, so no card, feed, or digest surface can frame the client's
|
|
19
|
-
* private gate decision as a "counterparty declined" event.
|
|
20
|
-
*/
|
|
21
|
-
import type { NegotiationGraphDatabase, OpportunityStatus } from '../shared/interfaces/database.interface.js';
|
|
22
|
-
import type { NegotiationOutcome, NegotiationTurn } from '../negotiations/negotiation.module.js';
|
|
23
|
-
/**
|
|
24
|
-
* Narrow slice of {@link NegotiationGraphDatabase} required by the loader. Kept
|
|
25
|
-
* minimal so call sites can opt into a smaller surface.
|
|
26
|
-
*/
|
|
27
|
-
export type NegotiationContextDatabase = Pick<NegotiationGraphDatabase, 'getNegotiationTaskForOpportunity' | 'getNegotiationMessages' | 'getArtifactsForTask'>;
|
|
28
|
-
/**
|
|
29
|
-
* Snapshot of a negotiation surfaced to the presenter. `turns` and `outcome`
|
|
30
|
-
* are only populated for post-negotiation statuses (pending/stalled/
|
|
31
|
-
* accepted/rejected); `negotiating` gets only the counters.
|
|
32
|
-
*/
|
|
33
|
-
export interface NegotiationContext {
|
|
34
|
-
status: OpportunityStatus;
|
|
35
|
-
/**
|
|
36
|
-
* Conversation/task id of the A2A negotiation that produced this opportunity.
|
|
37
|
-
* Lets callers deep-link to the negotiation trace (e.g. `/chat/:conversationId`).
|
|
38
|
-
* Present whenever a negotiation task exists (i.e. context is non-null).
|
|
39
|
-
*/
|
|
40
|
-
conversationId: string;
|
|
41
|
-
turnCount: number;
|
|
42
|
-
/** Max turns allowed for this negotiation (0 = unlimited). */
|
|
43
|
-
turnCap: number;
|
|
44
|
-
/** Only present when status is not `negotiating`. */
|
|
45
|
-
outcome?: NegotiationOutcome;
|
|
46
|
-
/** Only present when status is not `negotiating`. */
|
|
47
|
-
turns?: NegotiationTurn[];
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Loads the negotiation context for an opportunity.
|
|
51
|
-
*
|
|
52
|
-
* @param db - Narrow slice of NegotiationGraphDatabase.
|
|
53
|
-
* @param opportunityId - Opportunity to load negotiation context for.
|
|
54
|
-
* @param opportunityStatus - Current opportunity status. Used to gate loading
|
|
55
|
-
* and to decide which fields to populate.
|
|
56
|
-
* @returns NegotiationContext, or null when no meaningful negotiation exists
|
|
57
|
-
* (draft/latent/expired) or when the task lookup fails.
|
|
58
|
-
*/
|
|
59
|
-
export declare function loadNegotiationContext(db: NegotiationContextDatabase, opportunityId: string, opportunityStatus: OpportunityStatus): Promise<NegotiationContext | null>;
|