@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,43 +0,0 @@
|
|
|
1
|
-
import { gatherPresenterContext } from "./opportunity.presentation.js";
|
|
2
|
-
import { buildDeliveryCardPresentationCacheKey } from "./opportunity.presentation.js";
|
|
3
|
-
export const DELIVERY_CARD_CACHE_TTL = 24 * 60 * 60; // 24 hours
|
|
4
|
-
export async function getOrCreateDeliveryCardBatch(cache, presenter, presenterDb, opportunities, viewerId, options) {
|
|
5
|
-
if (opportunities.length === 0) {
|
|
6
|
-
return new Map();
|
|
7
|
-
}
|
|
8
|
-
const ttl = options?.ttl ?? DELIVERY_CARD_CACHE_TTL;
|
|
9
|
-
const keys = opportunities.map((opp) => buildDeliveryCardPresentationCacheKey(opp.id, opp.status, viewerId));
|
|
10
|
-
const cached = await cache.mget(keys);
|
|
11
|
-
const result = new Map();
|
|
12
|
-
const misses = [];
|
|
13
|
-
for (let i = 0; i < opportunities.length; i++) {
|
|
14
|
-
const item = cached[i];
|
|
15
|
-
if (item) {
|
|
16
|
-
result.set(opportunities[i].id, item);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
misses.push({ opp: opportunities[i], index: i });
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
// Generate cards for cache misses
|
|
23
|
-
await Promise.all(misses.map(async ({ opp, index }) => {
|
|
24
|
-
const presenterInput = await gatherPresenterContext(presenterDb, opp, viewerId);
|
|
25
|
-
presenterInput.opportunityStatus = opp.status;
|
|
26
|
-
const presented = await presenter.presentCard(presenterInput);
|
|
27
|
-
const card = {
|
|
28
|
-
opportunityId: opp.id,
|
|
29
|
-
headline: presented.headline,
|
|
30
|
-
personalizedSummary: presented.personalizedSummary,
|
|
31
|
-
suggestedAction: presented.suggestedAction,
|
|
32
|
-
narratorRemark: presented.narratorRemark,
|
|
33
|
-
greeting: presented.greeting ?? '',
|
|
34
|
-
};
|
|
35
|
-
result.set(opp.id, card);
|
|
36
|
-
// Presenter fallbacks are safe for this request but are deliberately not
|
|
37
|
-
// persisted for 24 hours; a later request should retry genuine copy.
|
|
38
|
-
if (!presented.isFallback) {
|
|
39
|
-
await cache.set(keys[index], card, { ttl });
|
|
40
|
-
}
|
|
41
|
-
}));
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export declare const DISCOVERY_MIN_SIMILARITY_DEFAULT = 0.3;
|
|
2
|
-
export declare const DISCOVERY_EVALUATOR_MIN_SCORE_DEFAULT = 50;
|
|
3
|
-
export declare function validateDiscoveryMinSimilarity(value: number): number;
|
|
4
|
-
export declare function validateDiscoveryEvaluatorMinScore(value: number): number;
|
|
5
|
-
export declare function discoveryMinSimilarity(): number;
|
|
6
|
-
export declare function discoveryEvaluatorMinScore(): number;
|
|
7
|
-
/** Data types allowed to participate in opportunity matching. */
|
|
8
|
-
export type DiscoveryMatchType = 'intent' | 'profile';
|
|
9
|
-
/** Test hook: clear warn-once state so each test observes warnings. */
|
|
10
|
-
export declare function resetDiscoveryEnvWarningsForTests(): void;
|
|
11
|
-
/** Current DISCOVERY_ALLOWED_TYPES set (default: intent + profile). */
|
|
12
|
-
export declare function discoveryAllowedTypes(): ReadonlySet<DiscoveryMatchType>;
|
|
13
|
-
/** True when intents may participate in matching (source or candidate). */
|
|
14
|
-
export declare function discoveryIntentMatchingEnabled(): boolean;
|
|
15
|
-
/** True when profile data (premises or user_contexts) may participate. */
|
|
16
|
-
export declare function discoveryProfileMatchingEnabled(): boolean;
|
|
17
|
-
/** What "profile" means in matching: heavyweight premises or lightweight user_contexts. */
|
|
18
|
-
export type DiscoveryProfileSource = 'premise' | 'user_context';
|
|
19
|
-
/** Current DISCOVERY_PROFILE_SOURCE (default: premise). */
|
|
20
|
-
export declare function discoveryProfileSource(): DiscoveryProfileSource;
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Centralized accessors for discovery match-type environment variables.
|
|
3
|
-
*
|
|
4
|
-
* DISCOVERY_ALLOWED_TYPES CSV of `intent`, `profile` (default: both).
|
|
5
|
-
* Master gate for which data types may participate
|
|
6
|
-
* in opportunity matching. `profile` is an umbrella
|
|
7
|
-
* whose representation is selected by
|
|
8
|
-
* DISCOVERY_PROFILE_SOURCE. Unknown tokens warn once
|
|
9
|
-
* and are ignored; if no valid tokens remain, falls
|
|
10
|
-
* back to both-allowed with a warning (a typo must
|
|
11
|
-
* never disable all discovery).
|
|
12
|
-
* DISCOVERY_PROFILE_SOURCE `premise` (default, heavyweight: atomic premises
|
|
13
|
-
* as profile corpus + premise-to-premise) or
|
|
14
|
-
* `user_context` (lightweight: synthesized context
|
|
15
|
-
* paragraphs as profile corpus + context-to-context).
|
|
16
|
-
* Unknown values warn once and fall back to `premise`.
|
|
17
|
-
*
|
|
18
|
-
* All reads go through this module — do not read these variables via
|
|
19
|
-
* `process.env` elsewhere. Values are read on every call (no caching) so
|
|
20
|
-
* tests and long-lived processes observe changes.
|
|
21
|
-
*/
|
|
22
|
-
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
23
|
-
const envLog = protocolLogger('Discovery:env');
|
|
24
|
-
export const DISCOVERY_MIN_SIMILARITY_DEFAULT = 0.30;
|
|
25
|
-
export const DISCOVERY_EVALUATOR_MIN_SCORE_DEFAULT = 50;
|
|
26
|
-
const DECIMAL_VALUE = /^[+]?(?:\d+(?:\.\d*)?|\.\d+)$/;
|
|
27
|
-
function validateThreshold(name, value, max) {
|
|
28
|
-
if (!Number.isFinite(value) || value < 0 || value > max) {
|
|
29
|
-
throw new Error(`${name} must be a finite decimal between 0 and ${max} (inclusive)`);
|
|
30
|
-
}
|
|
31
|
-
return value;
|
|
32
|
-
}
|
|
33
|
-
function readThreshold(raw, name, fallback, max) {
|
|
34
|
-
if (raw === undefined || raw.trim() === '')
|
|
35
|
-
return fallback;
|
|
36
|
-
const normalized = raw.trim();
|
|
37
|
-
if (!DECIMAL_VALUE.test(normalized)) {
|
|
38
|
-
throw new Error(`${name} must be a finite decimal between 0 and ${max} (inclusive)`);
|
|
39
|
-
}
|
|
40
|
-
return validateThreshold(name, Number(normalized), max);
|
|
41
|
-
}
|
|
42
|
-
export function validateDiscoveryMinSimilarity(value) {
|
|
43
|
-
return validateThreshold('DISCOVERY_MIN_SIMILARITY', value, 1);
|
|
44
|
-
}
|
|
45
|
-
export function validateDiscoveryEvaluatorMinScore(value) {
|
|
46
|
-
return validateThreshold('DISCOVERY_EVALUATOR_MIN_SCORE', value, 100);
|
|
47
|
-
}
|
|
48
|
-
export function discoveryMinSimilarity() {
|
|
49
|
-
return readThreshold(process.env.DISCOVERY_MIN_SIMILARITY, 'DISCOVERY_MIN_SIMILARITY', DISCOVERY_MIN_SIMILARITY_DEFAULT, 1);
|
|
50
|
-
}
|
|
51
|
-
export function discoveryEvaluatorMinScore() {
|
|
52
|
-
return readThreshold(process.env.DISCOVERY_EVALUATOR_MIN_SCORE, 'DISCOVERY_EVALUATOR_MIN_SCORE', DISCOVERY_EVALUATOR_MIN_SCORE_DEFAULT, 100);
|
|
53
|
-
}
|
|
54
|
-
const VALID_TOKENS = new Set(['intent', 'profile']);
|
|
55
|
-
const BOTH = new Set(['intent', 'profile']);
|
|
56
|
-
/** Tokens/values already warned about (warn-once per process). */
|
|
57
|
-
const warned = new Set();
|
|
58
|
-
/** Test hook: clear warn-once state so each test observes warnings. */
|
|
59
|
-
export function resetDiscoveryEnvWarningsForTests() {
|
|
60
|
-
warned.clear();
|
|
61
|
-
}
|
|
62
|
-
function warnOnce(key, message) {
|
|
63
|
-
if (warned.has(key))
|
|
64
|
-
return;
|
|
65
|
-
warned.add(key);
|
|
66
|
-
envLog.warn(message);
|
|
67
|
-
}
|
|
68
|
-
/** Current DISCOVERY_ALLOWED_TYPES set (default: intent + profile). */
|
|
69
|
-
export function discoveryAllowedTypes() {
|
|
70
|
-
const raw = process.env.DISCOVERY_ALLOWED_TYPES;
|
|
71
|
-
if (raw === undefined || raw.trim() === '')
|
|
72
|
-
return BOTH;
|
|
73
|
-
const parsed = new Set();
|
|
74
|
-
for (const token of raw.split(',')) {
|
|
75
|
-
const t = token.trim().toLowerCase();
|
|
76
|
-
if (!t)
|
|
77
|
-
continue;
|
|
78
|
-
if (VALID_TOKENS.has(t)) {
|
|
79
|
-
parsed.add(t);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
warnOnce(`token:${t}`, `DISCOVERY_ALLOWED_TYPES: ignoring unknown token "${t}" (valid: intent, profile)`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (parsed.size === 0) {
|
|
86
|
-
warnOnce('fallback', `DISCOVERY_ALLOWED_TYPES="${raw}" has no valid tokens; falling back to intent,profile`);
|
|
87
|
-
return BOTH;
|
|
88
|
-
}
|
|
89
|
-
return parsed;
|
|
90
|
-
}
|
|
91
|
-
/** True when intents may participate in matching (source or candidate). */
|
|
92
|
-
export function discoveryIntentMatchingEnabled() {
|
|
93
|
-
return discoveryAllowedTypes().has('intent');
|
|
94
|
-
}
|
|
95
|
-
/** True when profile data (premises or user_contexts) may participate. */
|
|
96
|
-
export function discoveryProfileMatchingEnabled() {
|
|
97
|
-
return discoveryAllowedTypes().has('profile');
|
|
98
|
-
}
|
|
99
|
-
/** Current DISCOVERY_PROFILE_SOURCE (default: premise). */
|
|
100
|
-
export function discoveryProfileSource() {
|
|
101
|
-
const raw = process.env.DISCOVERY_PROFILE_SOURCE;
|
|
102
|
-
if (raw === undefined || raw.trim() === '')
|
|
103
|
-
return 'premise';
|
|
104
|
-
const v = raw.trim().toLowerCase();
|
|
105
|
-
if (v === 'premise' || v === 'user_context')
|
|
106
|
-
return v;
|
|
107
|
-
warnOnce(`source:${v}`, `DISCOVERY_PROFILE_SOURCE: unknown value "${raw}"; falling back to "premise" (valid: premise, user_context)`);
|
|
108
|
-
return 'premise';
|
|
109
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import type { QuestionPoolDiscriminator } from "../../questions/question.module.js";
|
|
2
|
-
/** Recipient and intent provenance that scopes one pool preference. */
|
|
3
|
-
export interface PoolAdjustmentProvenance {
|
|
4
|
-
recipientUserId: string;
|
|
5
|
-
intentId: string;
|
|
6
|
-
}
|
|
7
|
-
/** One applied adjustment on an opportunity (stored in metadata.poolAdjustments). */
|
|
8
|
-
export interface PoolAdjustment extends PoolAdjustmentProvenance {
|
|
9
|
-
/** The answered question that produced this adjustment (reversal key). */
|
|
10
|
-
questionId: string;
|
|
11
|
-
/** Discriminator label, e.g. "Hands-on builders vs advisors". */
|
|
12
|
-
label: string;
|
|
13
|
-
/** Side this candidate was assigned to (or "unknown"). */
|
|
14
|
-
side: string;
|
|
15
|
-
/** Multiplicative factor: chosen 1.0, other 0.6, unknown 0.9. */
|
|
16
|
-
factor: number;
|
|
17
|
-
/** Template chip text from the user's own answer. Set on demotions only. */
|
|
18
|
-
detail?: string;
|
|
19
|
-
/** ISO-8601 apply timestamp. */
|
|
20
|
-
appliedAt: string;
|
|
21
|
-
/** Full intent fingerprint authoritative when this adjustment was created. */
|
|
22
|
-
intentFingerprint?: string;
|
|
23
|
-
/** Audit-only marker: stale adjustments remain stored but have no ranking effect. */
|
|
24
|
-
stale?: true;
|
|
25
|
-
}
|
|
26
|
-
/** Reads valid adjustments, optionally narrowed to one recipient + intent. */
|
|
27
|
-
export declare function readPoolAdjustments(metadata: Record<string, unknown> | null | undefined, provenance?: PoolAdjustmentProvenance): PoolAdjustment[];
|
|
28
|
-
/** Reads valid, non-stale adjustments for ranking and presentation behavior. */
|
|
29
|
-
export declare function readActivePoolAdjustments(metadata: Record<string, unknown> | null | undefined, provenance?: PoolAdjustmentProvenance): PoolAdjustment[];
|
|
30
|
-
/**
|
|
31
|
-
* Cumulative adjustment multiplier for an opportunity, floored at
|
|
32
|
-
* {@link POOL_ADJUSTMENT_FLOOR}. 1 when no scoped adjustments exist.
|
|
33
|
-
*/
|
|
34
|
-
export declare function poolAdjustmentMultiplier(metadata: Record<string, unknown> | null | undefined, provenance: PoolAdjustmentProvenance): number;
|
|
35
|
-
/** Adjusted confidence: `confidence × Π factor`, floored. */
|
|
36
|
-
export declare function adjustedConfidence(confidence: number, metadata: Record<string, unknown> | null | undefined, provenance: PoolAdjustmentProvenance): number;
|
|
37
|
-
/** Deterministic provenance signal stored alongside one adjustment. */
|
|
38
|
-
export interface PoolAdjustmentSignal extends PoolAdjustmentProvenance {
|
|
39
|
-
type: "pool_discriminator";
|
|
40
|
-
weight: 1 | -1 | 0;
|
|
41
|
-
detail: string;
|
|
42
|
-
questionId: string;
|
|
43
|
-
}
|
|
44
|
-
/** Pure helper input shared by Tier-0 answers and newborn stamping. */
|
|
45
|
-
export interface BuildPoolAdjustmentInput extends PoolAdjustmentProvenance {
|
|
46
|
-
questionId: string;
|
|
47
|
-
label: string;
|
|
48
|
-
/** Verified side assignment, or null when the candidate is unassigned. */
|
|
49
|
-
assignedSide: string | null;
|
|
50
|
-
chosenSide: string;
|
|
51
|
-
appliedAt: string;
|
|
52
|
-
/** Full intent fingerprint authoritative when this adjustment was created. */
|
|
53
|
-
intentFingerprint?: string;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Build one P3-compatible adjustment and signal. This is the only place that
|
|
57
|
-
* defines chosen/other/unknown factors, weights, and safe template details.
|
|
58
|
-
*/
|
|
59
|
-
export declare function buildPoolAdjustment(input: BuildPoolAdjustmentInput): {
|
|
60
|
-
adjustment: PoolAdjustment;
|
|
61
|
-
signal: PoolAdjustmentSignal;
|
|
62
|
-
};
|
|
63
|
-
/** Plan entry: what to write on one opportunity for one answer. */
|
|
64
|
-
export interface PoolAdjustmentPlanEntry {
|
|
65
|
-
opportunityId: string;
|
|
66
|
-
adjustment: PoolAdjustment;
|
|
67
|
-
signal: PoolAdjustmentSignal;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Computes the write plan for one answered discriminator. Pure: the caller
|
|
71
|
-
* loads/patches rows. "Both matter" (or any label not in `sides`) yields an
|
|
72
|
-
* empty plan — no preference, no adjustments.
|
|
73
|
-
*
|
|
74
|
-
* @param discriminator The asked discriminator (from detection.pool).
|
|
75
|
-
* @param chosenSide The selected option label (chip label = side label).
|
|
76
|
-
* @param questionId Reversal key.
|
|
77
|
-
* @param recipientUserId User whose answer produced the preference.
|
|
78
|
-
* @param intentId Intent whose candidate pool was ranked.
|
|
79
|
-
* @param now ISO-8601 timestamp.
|
|
80
|
-
* @param intentFingerprint Full intent fingerprint authoritative at apply time.
|
|
81
|
-
*/
|
|
82
|
-
export declare function planPoolAdjustments(discriminator: QuestionPoolDiscriminator, chosenSide: string, questionId: string, recipientUserId: string, intentId: string, now: string, intentFingerprint?: string): PoolAdjustmentPlanEntry[];
|
|
83
|
-
/**
|
|
84
|
-
* Merges one adjustment into an opportunity's existing metadata, replacing
|
|
85
|
-
* only the entry for the same question + recipient + intent provenance.
|
|
86
|
-
* Returns the NEW metadata object (caller persists it wholesale).
|
|
87
|
-
*/
|
|
88
|
-
export declare function mergePoolAdjustment(metadata: Record<string, unknown> | null | undefined, adjustment: PoolAdjustment): Record<string, unknown>;
|
|
89
|
-
/** Latest scoped user-explainable demotion detail for card presentation. */
|
|
90
|
-
export declare function latestPoolDemotionDetail(metadata: Record<string, unknown> | null | undefined, provenance: PoolAdjustmentProvenance): string | undefined;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pool-adjustment domain logic (IND-419) — pure functions, no I/O.
|
|
3
|
-
*
|
|
4
|
-
* When a user answers a pool_discovery question, every candidate the mining
|
|
5
|
-
* pass assigned to a side gets a multiplicative adjustment written to
|
|
6
|
-
* `opportunities.metadata.poolAdjustments`. The radar view (flag-gated) orders
|
|
7
|
-
* by `confidence × Π factor`, floored so demoted candidates stay visible.
|
|
8
|
-
*
|
|
9
|
-
* Invariants:
|
|
10
|
-
* - Deterministic and O(pool): no LLM at answer time — the applyPlan was
|
|
11
|
-
* computed (and evidence-verified) at mining time.
|
|
12
|
-
* - Reversible: entries are keyed by questionId; re-answering replaces them,
|
|
13
|
-
* dismissal-driven reversal removes them.
|
|
14
|
-
* - `detail` carries the template chip text built from the user's OWN answer
|
|
15
|
-
* ("Hands-on builders vs advisors: you chose Advisor") — never LLM
|
|
16
|
-
* reasoning (see `packages/protocol/src/opportunity/AGENTS.md`).
|
|
17
|
-
*/
|
|
18
|
-
import { POOL_ADJUSTMENT_FACTOR_OTHER, POOL_ADJUSTMENT_FACTOR_UNKNOWN, POOL_ADJUSTMENT_FLOOR } from "./discriminator.env.js";
|
|
19
|
-
/** Reads valid adjustments, optionally narrowed to one recipient + intent. */
|
|
20
|
-
export function readPoolAdjustments(metadata, provenance) {
|
|
21
|
-
const raw = metadata?.poolAdjustments;
|
|
22
|
-
if (!Array.isArray(raw))
|
|
23
|
-
return [];
|
|
24
|
-
return raw.filter((a) => {
|
|
25
|
-
if (typeof a !== "object" || a === null ||
|
|
26
|
-
typeof a.questionId !== "string" ||
|
|
27
|
-
typeof a.recipientUserId !== "string" ||
|
|
28
|
-
typeof a.intentId !== "string" ||
|
|
29
|
-
typeof a.factor !== "number" ||
|
|
30
|
-
(a.stale !== undefined && a.stale !== true))
|
|
31
|
-
return false;
|
|
32
|
-
return provenance === undefined || (a.recipientUserId === provenance.recipientUserId &&
|
|
33
|
-
a.intentId === provenance.intentId);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
/** Reads valid, non-stale adjustments for ranking and presentation behavior. */
|
|
37
|
-
export function readActivePoolAdjustments(metadata, provenance) {
|
|
38
|
-
return readPoolAdjustments(metadata, provenance).filter((adjustment) => adjustment.stale !== true);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Cumulative adjustment multiplier for an opportunity, floored at
|
|
42
|
-
* {@link POOL_ADJUSTMENT_FLOOR}. 1 when no scoped adjustments exist.
|
|
43
|
-
*/
|
|
44
|
-
export function poolAdjustmentMultiplier(metadata, provenance) {
|
|
45
|
-
const adjustments = readActivePoolAdjustments(metadata, provenance);
|
|
46
|
-
if (adjustments.length === 0)
|
|
47
|
-
return 1;
|
|
48
|
-
const product = adjustments.reduce((acc, a) => acc * (Number.isFinite(a.factor) && a.factor > 0 ? a.factor : 1), 1);
|
|
49
|
-
return Math.max(POOL_ADJUSTMENT_FLOOR, product);
|
|
50
|
-
}
|
|
51
|
-
/** Adjusted confidence: `confidence × Π factor`, floored. */
|
|
52
|
-
export function adjustedConfidence(confidence, metadata, provenance) {
|
|
53
|
-
return confidence * poolAdjustmentMultiplier(metadata, provenance);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Build one P3-compatible adjustment and signal. This is the only place that
|
|
57
|
-
* defines chosen/other/unknown factors, weights, and safe template details.
|
|
58
|
-
*/
|
|
59
|
-
export function buildPoolAdjustment(input) {
|
|
60
|
-
const isUnknown = input.assignedSide === null;
|
|
61
|
-
const isChosen = !isUnknown && input.assignedSide === input.chosenSide;
|
|
62
|
-
const factor = isUnknown ? POOL_ADJUSTMENT_FACTOR_UNKNOWN : isChosen ? 1 : POOL_ADJUSTMENT_FACTOR_OTHER;
|
|
63
|
-
const weight = isUnknown ? 0 : isChosen ? 1 : -1;
|
|
64
|
-
const side = input.assignedSide ?? "unknown";
|
|
65
|
-
return {
|
|
66
|
-
adjustment: {
|
|
67
|
-
questionId: input.questionId,
|
|
68
|
-
recipientUserId: input.recipientUserId,
|
|
69
|
-
intentId: input.intentId,
|
|
70
|
-
label: input.label,
|
|
71
|
-
side,
|
|
72
|
-
factor,
|
|
73
|
-
...(!isChosen && !isUnknown ? { detail: `${input.label}: you chose ${input.chosenSide}` } : {}),
|
|
74
|
-
appliedAt: input.appliedAt,
|
|
75
|
-
...(input.intentFingerprint !== undefined ? { intentFingerprint: input.intentFingerprint } : {}),
|
|
76
|
-
},
|
|
77
|
-
signal: {
|
|
78
|
-
type: "pool_discriminator",
|
|
79
|
-
weight,
|
|
80
|
-
recipientUserId: input.recipientUserId,
|
|
81
|
-
intentId: input.intentId,
|
|
82
|
-
detail: isUnknown ? `${input.label}: unassigned` : `${input.label}: ${input.chosenSide}`,
|
|
83
|
-
questionId: input.questionId,
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Computes the write plan for one answered discriminator. Pure: the caller
|
|
89
|
-
* loads/patches rows. "Both matter" (or any label not in `sides`) yields an
|
|
90
|
-
* empty plan — no preference, no adjustments.
|
|
91
|
-
*
|
|
92
|
-
* @param discriminator The asked discriminator (from detection.pool).
|
|
93
|
-
* @param chosenSide The selected option label (chip label = side label).
|
|
94
|
-
* @param questionId Reversal key.
|
|
95
|
-
* @param recipientUserId User whose answer produced the preference.
|
|
96
|
-
* @param intentId Intent whose candidate pool was ranked.
|
|
97
|
-
* @param now ISO-8601 timestamp.
|
|
98
|
-
* @param intentFingerprint Full intent fingerprint authoritative at apply time.
|
|
99
|
-
*/
|
|
100
|
-
export function planPoolAdjustments(discriminator, chosenSide, questionId, recipientUserId, intentId, now, intentFingerprint) {
|
|
101
|
-
// Chip labels are word-capped side labels; match on the capped prefix too.
|
|
102
|
-
const matchesSide = (side) => side === chosenSide || side.startsWith(chosenSide) || chosenSide.startsWith(side);
|
|
103
|
-
const chosen = discriminator.sides.find(matchesSide);
|
|
104
|
-
if (!chosen)
|
|
105
|
-
return []; // "Both matter" or unrecognized option → no adjustments.
|
|
106
|
-
const plan = [];
|
|
107
|
-
for (const a of discriminator.assignments) {
|
|
108
|
-
plan.push({
|
|
109
|
-
opportunityId: a.opportunityId,
|
|
110
|
-
...buildPoolAdjustment({
|
|
111
|
-
questionId,
|
|
112
|
-
recipientUserId,
|
|
113
|
-
intentId,
|
|
114
|
-
label: discriminator.label,
|
|
115
|
-
assignedSide: a.side,
|
|
116
|
-
chosenSide: chosen,
|
|
117
|
-
appliedAt: now,
|
|
118
|
-
...(intentFingerprint !== undefined ? { intentFingerprint } : {}),
|
|
119
|
-
}),
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
return plan;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Merges one adjustment into an opportunity's existing metadata, replacing
|
|
126
|
-
* only the entry for the same question + recipient + intent provenance.
|
|
127
|
-
* Returns the NEW metadata object (caller persists it wholesale).
|
|
128
|
-
*/
|
|
129
|
-
export function mergePoolAdjustment(metadata, adjustment) {
|
|
130
|
-
const existing = readPoolAdjustments(metadata).filter((a) => !(a.questionId === adjustment.questionId &&
|
|
131
|
-
a.recipientUserId === adjustment.recipientUserId &&
|
|
132
|
-
a.intentId === adjustment.intentId));
|
|
133
|
-
return { ...(metadata ?? {}), poolAdjustments: [...existing, adjustment] };
|
|
134
|
-
}
|
|
135
|
-
/** Latest scoped user-explainable demotion detail for card presentation. */
|
|
136
|
-
export function latestPoolDemotionDetail(metadata, provenance) {
|
|
137
|
-
return [...readActivePoolAdjustments(metadata, provenance)]
|
|
138
|
-
.reverse()
|
|
139
|
-
.find((adjustment) => adjustment.factor < 1 && typeof adjustment.detail === 'string' && adjustment.detail.length > 0)
|
|
140
|
-
?.detail;
|
|
141
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { createStructuredModel } from "../../shared/agent/model.config.js";
|
|
3
|
-
import type { PoolCandidate } from "./discriminator.types.js";
|
|
4
|
-
declare const AxisSchema: z.ZodObject<{
|
|
5
|
-
questionId: z.ZodString;
|
|
6
|
-
assignments: z.ZodArray<z.ZodObject<{
|
|
7
|
-
candidateId: z.ZodString;
|
|
8
|
-
side: z.ZodNullable<z.ZodString>;
|
|
9
|
-
evidence: z.ZodNullable<z.ZodString>;
|
|
10
|
-
}, "strip", z.ZodTypeAny, {
|
|
11
|
-
evidence: string | null;
|
|
12
|
-
side: string | null;
|
|
13
|
-
candidateId: string;
|
|
14
|
-
}, {
|
|
15
|
-
evidence: string | null;
|
|
16
|
-
side: string | null;
|
|
17
|
-
candidateId: string;
|
|
18
|
-
}>, "many">;
|
|
19
|
-
}, "strip", z.ZodTypeAny, {
|
|
20
|
-
assignments: {
|
|
21
|
-
evidence: string | null;
|
|
22
|
-
side: string | null;
|
|
23
|
-
candidateId: string;
|
|
24
|
-
}[];
|
|
25
|
-
questionId: string;
|
|
26
|
-
}, {
|
|
27
|
-
assignments: {
|
|
28
|
-
evidence: string | null;
|
|
29
|
-
side: string | null;
|
|
30
|
-
candidateId: string;
|
|
31
|
-
}[];
|
|
32
|
-
questionId: string;
|
|
33
|
-
}>;
|
|
34
|
-
type RawAxis = z.infer<typeof AxisSchema>;
|
|
35
|
-
/** Fixed answered axis; deliberately excludes the owner's chosen side. */
|
|
36
|
-
export interface PoolDiscriminatorAssignmentAxis {
|
|
37
|
-
questionId: string;
|
|
38
|
-
label: string;
|
|
39
|
-
sides: string[];
|
|
40
|
-
}
|
|
41
|
-
/** One batched assignment call. */
|
|
42
|
-
export interface PoolDiscriminatorAssignmentInput {
|
|
43
|
-
axes: PoolDiscriminatorAssignmentAxis[];
|
|
44
|
-
candidates: PoolCandidate[];
|
|
45
|
-
}
|
|
46
|
-
/** Verified assignment. Invalid or explicit unknown classifications use null. */
|
|
47
|
-
export interface PoolDiscriminatorCandidateAssignment {
|
|
48
|
-
candidateId: string;
|
|
49
|
-
side: string | null;
|
|
50
|
-
evidence: string | null;
|
|
51
|
-
}
|
|
52
|
-
/** One valid returned axis. Missing or malformed axes are omitted entirely. */
|
|
53
|
-
export interface PoolDiscriminatorAssignedAxis {
|
|
54
|
-
questionId: string;
|
|
55
|
-
assignments: PoolDiscriminatorCandidateAssignment[];
|
|
56
|
-
}
|
|
57
|
-
/** Construction options for {@link PoolDiscriminatorAssigner}. */
|
|
58
|
-
export interface PoolDiscriminatorAssignerConfig {
|
|
59
|
-
modelConfig?: Parameters<typeof createStructuredModel>[3];
|
|
60
|
-
}
|
|
61
|
-
/** Build the classifier prompt without any chosen-side preference. */
|
|
62
|
-
export declare function buildAssignmentPrompt(input: PoolDiscriminatorAssignmentInput): string;
|
|
63
|
-
/** Verify one model-returned axis against fixed IDs, sides, and contexts. */
|
|
64
|
-
export declare function verifyAssignedAxis(raw: RawAxis, input: PoolDiscriminatorAssignmentInput): PoolDiscriminatorAssignedAxis | null;
|
|
65
|
-
/** Stateless one-call newborn candidate classifier. */
|
|
66
|
-
export declare class PoolDiscriminatorAssigner {
|
|
67
|
-
private model;
|
|
68
|
-
constructor(config?: PoolDiscriminatorAssignerConfig);
|
|
69
|
-
/**
|
|
70
|
-
* Classify every candidate against every fixed axis in one provider call.
|
|
71
|
-
* Provider failures propagate so the host graph's fail-open seam can retain
|
|
72
|
-
* the original un-stamped create items.
|
|
73
|
-
*/
|
|
74
|
-
assign(input: PoolDiscriminatorAssignmentInput, options?: {
|
|
75
|
-
signal?: AbortSignal;
|
|
76
|
-
}): Promise<PoolDiscriminatorAssignedAxis[]>;
|
|
77
|
-
}
|
|
78
|
-
export {};
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* Evidence-verified assignment of call-local newborn candidates to already
|
|
12
|
-
* answered pool-discriminator axes (IND-420 P4b).
|
|
13
|
-
*
|
|
14
|
-
* One structured model call batches every fixed axis and candidate. The model
|
|
15
|
-
* never receives the owner's chosen side; it only classifies public candidate
|
|
16
|
-
* context. Code owns all identifiers, allowed sides, and evidence verification.
|
|
17
|
-
*/
|
|
18
|
-
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
19
|
-
import { z } from "zod";
|
|
20
|
-
import { createStructuredModel } from "../../shared/agent/model.config.js";
|
|
21
|
-
import { invokeWithAbortSignal } from "../../shared/agent/model-signal.js";
|
|
22
|
-
import { protocolLogger } from "../../shared/observability/protocol.logger.js";
|
|
23
|
-
import { Timed } from "../../shared/observability/performance.js";
|
|
24
|
-
import { POOL_DISCRIMINATOR_MAX_CANDIDATES } from "./discriminator.env.js";
|
|
25
|
-
import { poolEvidenceMatches } from "./discriminator.miner.js";
|
|
26
|
-
/** QuestionerAdapter caps fresh answered preferences at this count. */
|
|
27
|
-
const MAX_ASSIGNMENT_AXES = 10;
|
|
28
|
-
const logger = protocolLogger("PoolDiscriminatorAssigner");
|
|
29
|
-
const AssignmentSchema = z.object({
|
|
30
|
-
candidateId: z.string(),
|
|
31
|
-
side: z.string().nullable(),
|
|
32
|
-
evidence: z.string().max(200).nullable(),
|
|
33
|
-
});
|
|
34
|
-
const AxisSchema = z.object({
|
|
35
|
-
questionId: z.string(),
|
|
36
|
-
assignments: z.array(AssignmentSchema).max(POOL_DISCRIMINATOR_MAX_CANDIDATES),
|
|
37
|
-
});
|
|
38
|
-
// Keep fields optional at the outer response layer so one malformed/missing
|
|
39
|
-
// axis can be skipped independently, while still bounding and describing the
|
|
40
|
-
// nested assignment payload sent through structured output.
|
|
41
|
-
const ResponseAxisSchema = z.object({
|
|
42
|
-
questionId: z.string().optional(),
|
|
43
|
-
assignments: z.array(AssignmentSchema).max(POOL_DISCRIMINATOR_MAX_CANDIDATES).optional(),
|
|
44
|
-
}).passthrough();
|
|
45
|
-
const ResponseSchema = z.object({ axes: z.array(ResponseAxisSchema).max(MAX_ASSIGNMENT_AXES) });
|
|
46
|
-
const SYSTEM_PROMPT = `Classify candidate matches against FIXED preference axes.
|
|
47
|
-
|
|
48
|
-
Rules:
|
|
49
|
-
- Use only the supplied questionId, candidateId, and side labels. Never invent or rename them.
|
|
50
|
-
- Return one axis object per supplied question and one assignment per candidate.
|
|
51
|
-
- Pick a side only when the candidate context clearly supports it; otherwise use side null and evidence null.
|
|
52
|
-
- Every non-null side requires a short VERBATIM substring copied from that candidate's context. It is checked mechanically.
|
|
53
|
-
- Do not infer the user's preference. You are classifying candidates, not choosing which side is better.
|
|
54
|
-
- Return only questionId, candidateId, side, and evidence fields.`;
|
|
55
|
-
/** Build the classifier prompt without any chosen-side preference. */
|
|
56
|
-
export function buildAssignmentPrompt(input) {
|
|
57
|
-
const axes = input.axes.map((axis) => ({
|
|
58
|
-
questionId: axis.questionId,
|
|
59
|
-
label: axis.label,
|
|
60
|
-
sides: axis.sides,
|
|
61
|
-
}));
|
|
62
|
-
const candidates = input.candidates.map((candidate) => ({
|
|
63
|
-
candidateId: candidate.id,
|
|
64
|
-
publicContext: candidate.publicContext,
|
|
65
|
-
}));
|
|
66
|
-
return JSON.stringify({ axes, candidates }, null, 2);
|
|
67
|
-
}
|
|
68
|
-
/** Verify one model-returned axis against fixed IDs, sides, and contexts. */
|
|
69
|
-
export function verifyAssignedAxis(raw, input) {
|
|
70
|
-
const fixedAxis = input.axes.find((axis) => axis.questionId === raw.questionId);
|
|
71
|
-
if (!fixedAxis)
|
|
72
|
-
return null;
|
|
73
|
-
const contextById = new Map(input.candidates.map((candidate) => [candidate.id, candidate.publicContext]));
|
|
74
|
-
const firstById = new Map();
|
|
75
|
-
for (const assignment of raw.assignments) {
|
|
76
|
-
const context = contextById.get(assignment.candidateId);
|
|
77
|
-
if (context === undefined || firstById.has(assignment.candidateId))
|
|
78
|
-
continue;
|
|
79
|
-
if (assignment.side === null) {
|
|
80
|
-
firstById.set(assignment.candidateId, {
|
|
81
|
-
candidateId: assignment.candidateId,
|
|
82
|
-
side: null,
|
|
83
|
-
evidence: null,
|
|
84
|
-
});
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
if (!fixedAxis.sides.includes(assignment.side) || !poolEvidenceMatches(context, assignment.evidence)) {
|
|
88
|
-
firstById.set(assignment.candidateId, {
|
|
89
|
-
candidateId: assignment.candidateId,
|
|
90
|
-
side: null,
|
|
91
|
-
evidence: null,
|
|
92
|
-
});
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
firstById.set(assignment.candidateId, {
|
|
96
|
-
candidateId: assignment.candidateId,
|
|
97
|
-
side: assignment.side,
|
|
98
|
-
evidence: assignment.evidence,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
return {
|
|
102
|
-
questionId: fixedAxis.questionId,
|
|
103
|
-
assignments: input.candidates.map((candidate) => firstById.get(candidate.id) ?? {
|
|
104
|
-
candidateId: candidate.id,
|
|
105
|
-
side: null,
|
|
106
|
-
evidence: null,
|
|
107
|
-
}),
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/** Stateless one-call newborn candidate classifier. */
|
|
111
|
-
export class PoolDiscriminatorAssigner {
|
|
112
|
-
constructor(config) {
|
|
113
|
-
this.model = createStructuredModel("poolDiscriminatorAssigner", ResponseSchema, { name: "pool_newborn_assignments" }, config?.modelConfig);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Classify every candidate against every fixed axis in one provider call.
|
|
117
|
-
* Provider failures propagate so the host graph's fail-open seam can retain
|
|
118
|
-
* the original un-stamped create items.
|
|
119
|
-
*/
|
|
120
|
-
async assign(input, options) {
|
|
121
|
-
if (input.axes.length === 0 || input.candidates.length === 0)
|
|
122
|
-
return [];
|
|
123
|
-
const boundedInput = {
|
|
124
|
-
axes: input.axes.slice(0, MAX_ASSIGNMENT_AXES),
|
|
125
|
-
candidates: input.candidates.slice(0, POOL_DISCRIMINATOR_MAX_CANDIDATES),
|
|
126
|
-
};
|
|
127
|
-
const raw = await invokeWithAbortSignal(this.model, [new SystemMessage(SYSTEM_PROMPT), new HumanMessage(buildAssignmentPrompt(boundedInput))], options?.signal);
|
|
128
|
-
const parsed = ResponseSchema.safeParse(raw);
|
|
129
|
-
if (!parsed.success) {
|
|
130
|
-
logger.warn("Assignment response failed schema validation", { issues: parsed.error.issues.length });
|
|
131
|
-
return [];
|
|
132
|
-
}
|
|
133
|
-
const seen = new Set();
|
|
134
|
-
const verified = [];
|
|
135
|
-
for (const rawAxis of parsed.data.axes) {
|
|
136
|
-
const axis = AxisSchema.safeParse(rawAxis);
|
|
137
|
-
if (!axis.success || seen.has(axis.data.questionId))
|
|
138
|
-
continue;
|
|
139
|
-
const result = verifyAssignedAxis(axis.data, boundedInput);
|
|
140
|
-
if (!result)
|
|
141
|
-
continue;
|
|
142
|
-
seen.add(result.questionId);
|
|
143
|
-
verified.push(result);
|
|
144
|
-
}
|
|
145
|
-
return verified;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
__decorate([
|
|
149
|
-
Timed(),
|
|
150
|
-
__metadata("design:type", Function),
|
|
151
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
152
|
-
__metadata("design:returntype", Promise)
|
|
153
|
-
], PoolDiscriminatorAssigner.prototype, "assign", null);
|