@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,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared vocabulary for the opportunity graph's nodes and modes.
|
|
3
|
-
*
|
|
4
|
-
* The nodes used to be closures inside `OpportunityGraphFactory.createGraph()`,
|
|
5
|
-
* capturing `this` and the resolved thresholds. They are now top-level functions
|
|
6
|
-
* that take an explicit {@link OpportunityGraphDeps} bag, so each node is
|
|
7
|
-
* readable — and testable — on its own. This module owns the pieces more than
|
|
8
|
-
* one of them needs: the dependency bag, the loggers, the trace wrapper, and the
|
|
9
|
-
* small pure helpers.
|
|
10
|
-
*/
|
|
11
|
-
import type { Id } from '../shared/interfaces/database.interface.js';
|
|
12
|
-
import { OpportunityGraphState, type IndexedIntent, type SourceProfileData, type CandidateMatch } from './opportunity.state.js';
|
|
13
|
-
import type { CandidateProfile, EvaluatorEntity, EvaluatorInput } from "./opportunity.evaluator.js";
|
|
14
|
-
import type { OpportunityGraphDatabase, Opportunity } from '../shared/interfaces/database.interface.js';
|
|
15
|
-
import type { Embedder } from '../shared/interfaces/embedder.interface.js';
|
|
16
|
-
import type { NegotiationGraphLike } from '../negotiations/negotiation.module.js';
|
|
17
|
-
import type { AgentDispatcher } from '../shared/interfaces/agent-dispatcher.interface.js';
|
|
18
|
-
import type { QueueOpportunityNotificationFn } from "./opportunity.lifecycle.js";
|
|
19
|
-
import type { StampNewbornOpportunitiesFn } from "./opportunity.newborn-stamping.js";
|
|
20
|
-
/** The graph's channel state, as every node sees it. */
|
|
21
|
-
export type OpportunityState = typeof OpportunityGraphState.State;
|
|
22
|
-
/** Optional evaluator for testing (avoids LLM calls). */
|
|
23
|
-
export type OpportunityEvaluatorLike = {
|
|
24
|
-
invoke?: (sourceProfileContext: string, candidates: CandidateProfile[], options: {
|
|
25
|
-
minScore?: number;
|
|
26
|
-
}) => Promise<Array<{
|
|
27
|
-
sourceId: string;
|
|
28
|
-
candidateId: string;
|
|
29
|
-
score: number;
|
|
30
|
-
reasoning: string;
|
|
31
|
-
valencyRole: 'Agent' | 'Patient' | 'Peer';
|
|
32
|
-
}>>;
|
|
33
|
-
invokeEntityBundle?: (input: EvaluatorInput, options: {
|
|
34
|
-
minScore?: number;
|
|
35
|
-
returnAll?: boolean;
|
|
36
|
-
signal?: AbortSignal;
|
|
37
|
-
}) => Promise<Array<{
|
|
38
|
-
reasoning: string;
|
|
39
|
-
score: number;
|
|
40
|
-
actors: Array<{
|
|
41
|
-
userId: string;
|
|
42
|
-
role: 'agent' | 'patient' | 'peer';
|
|
43
|
-
intentId?: string | null;
|
|
44
|
-
evidenceKey?: string | null;
|
|
45
|
-
}>;
|
|
46
|
-
}>>;
|
|
47
|
-
};
|
|
48
|
-
/** Input shape for the HyDE graph invoke call (query-based embedding). */
|
|
49
|
-
export interface HydeGeneratorInvokeInput {
|
|
50
|
-
sourceType: 'query';
|
|
51
|
-
sourceText: string;
|
|
52
|
-
forceRegenerate?: boolean;
|
|
53
|
-
profileContext?: string;
|
|
54
|
-
}
|
|
55
|
-
/** The compiled HyDE graph, as the discovery node consumes it. */
|
|
56
|
-
export interface OpportunityHydeGenerator {
|
|
57
|
-
invoke: (input: HydeGeneratorInvokeInput) => Promise<{
|
|
58
|
-
hydeEmbeddings: Record<string, number[]>;
|
|
59
|
-
lenses?: Array<{
|
|
60
|
-
label: string;
|
|
61
|
-
corpus: 'profiles' | 'intents' | 'premises';
|
|
62
|
-
}>;
|
|
63
|
-
hydeDocuments?: Record<string, {
|
|
64
|
-
hydeText?: string;
|
|
65
|
-
lens?: string;
|
|
66
|
-
}>;
|
|
67
|
-
}>;
|
|
68
|
-
}
|
|
69
|
-
export interface OpportunityGraphThresholdOverrides {
|
|
70
|
-
retrievalMinSimilarity?: number;
|
|
71
|
-
evaluatorMinScore?: number;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Everything the nodes and modes reach for. Composed once by
|
|
75
|
-
* `OpportunityGraphFactory` and passed to each function explicitly.
|
|
76
|
-
*/
|
|
77
|
-
export interface OpportunityGraphDeps {
|
|
78
|
-
database: OpportunityGraphDatabase;
|
|
79
|
-
embedder: Embedder;
|
|
80
|
-
hydeGenerator: OpportunityHydeGenerator;
|
|
81
|
-
/** Resolved evaluator: the injected test double, or a real `OpportunityEvaluator`. */
|
|
82
|
-
evaluatorAgent: OpportunityEvaluatorLike;
|
|
83
|
-
queueNotification?: QueueOpportunityNotificationFn;
|
|
84
|
-
negotiationGraph?: NegotiationGraphLike;
|
|
85
|
-
/**
|
|
86
|
-
* Used on the chat path to decide whether to wait for the user's personal
|
|
87
|
-
* agent (long timeout) or fall back to the system agent immediately
|
|
88
|
-
* (short timeout). Without it, the chat path always uses a short timeout.
|
|
89
|
-
*/
|
|
90
|
-
agentDispatcher?: Pick<AgentDispatcher, 'hasExternalAgent'>;
|
|
91
|
-
/**
|
|
92
|
-
* Callback to enqueue a negotiate_existing job for an opportunity.
|
|
93
|
-
* When provided, negotiate_existing mode uses this to queue follow-up
|
|
94
|
-
* negotiations after introducer approval.
|
|
95
|
-
*/
|
|
96
|
-
queueNegotiateExisting?: (opportunityId: string, userId: string) => Promise<void>;
|
|
97
|
-
/** Host-side P4b stamper. Omitted by manual/introducer/enrichment roots. */
|
|
98
|
-
stampNewbornOpportunities?: StampNewbornOpportunitiesFn;
|
|
99
|
-
retrievalMinSimilarity: number;
|
|
100
|
-
evaluatorMinScore: number;
|
|
101
|
-
}
|
|
102
|
-
export declare const logger: import("../shared/observability/log.js").LoggerWithSource;
|
|
103
|
-
export declare const prepLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
104
|
-
export declare const scopeLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
105
|
-
export declare const resolveLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
106
|
-
export declare const discoveryLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
107
|
-
export declare const evaluationLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
108
|
-
export declare const negotiateLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
109
|
-
export declare const rankingLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
110
|
-
export declare const introValidationLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
111
|
-
export declare const introEvaluationLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
112
|
-
export declare const persistLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
113
|
-
export declare const persistPathLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
114
|
-
export declare const persistDedupLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
115
|
-
export declare const readLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
116
|
-
export declare const updateLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
117
|
-
export declare const deleteLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
118
|
-
export declare const sendLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
119
|
-
export declare const negotiateExistingLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
120
|
-
export declare const routingLog: import("../shared/observability/log.js").LoggerWithSource;
|
|
121
|
-
/**
|
|
122
|
-
* Error text can include provider response bodies, URLs, and credentials. Keep
|
|
123
|
-
* observability useful by retaining only a conservative error class at this
|
|
124
|
-
* boundary; detailed errors are intentionally not emitted from graph traces.
|
|
125
|
-
*/
|
|
126
|
-
export declare function safeOpportunityGraphError(_error: unknown): string;
|
|
127
|
-
/**
|
|
128
|
-
* Wraps a graph node function to emit agent_start/agent_end trace events
|
|
129
|
-
* at its boundaries so the frontend TRACE panel shows real-time progress.
|
|
130
|
-
* @param traceName - Kebab-case agent name (e.g. "opportunity-prep")
|
|
131
|
-
* @param nodeFn - The original node function
|
|
132
|
-
* @param summaryFn - Optional function to derive a summary string from the node result
|
|
133
|
-
*/
|
|
134
|
-
export declare function withNodeTrace<S, R>(traceName: string, nodeFn: (state: S) => Promise<R>, summaryFn?: (result: R) => string | undefined): (state: S) => Promise<R>;
|
|
135
|
-
/** Shared trace summary: surface `error` when a node returned one. */
|
|
136
|
-
export declare function errorSummary(result: unknown): string | undefined;
|
|
137
|
-
/** Time window for persist-node dedup. Suppresses a second opportunity with the same person while a recent one (within 30 days) is still in flight, so a person is not re-surfaced multiple times within a month (EDG-23). */
|
|
138
|
-
export declare const DEDUP_WINDOW_MS: number;
|
|
139
|
-
export declare function isActiveNegotiationTaskFresh(task: {
|
|
140
|
-
state: string;
|
|
141
|
-
updatedAt: Date;
|
|
142
|
-
}): boolean;
|
|
143
|
-
export declare function triggerForOwner(opportunity: Opportunity, ownerUserId: string): string | undefined;
|
|
144
|
-
export declare function belongsToOwnedIntent(opportunity: Opportunity, ownerUserId: string, triggerIntentId: string): boolean;
|
|
145
|
-
export declare function getRejectionCooldownMs(): number;
|
|
146
|
-
/**
|
|
147
|
-
* Similarity multiplier applied to candidates that fall within the rejection
|
|
148
|
-
* cool-down window (IND-567). 0.5 halves their ranking score, typically
|
|
149
|
-
* pushing them below the evaluation-batch cut while leaving a soft trace in
|
|
150
|
-
* the trace log rather than silently dropping them.
|
|
151
|
-
*/
|
|
152
|
-
export declare const REJECTION_COOLDOWN_SIMILARITY_PENALTY = 0.5;
|
|
153
|
-
export declare function networkMembershipPairKey(userId: string, networkId: string): string;
|
|
154
|
-
/** Per-source cap for candidate premise matches. */
|
|
155
|
-
export declare const PREMISE_MATCH_LIMIT_PER_SOURCE = 20;
|
|
156
|
-
/** Resolve the source premise discovery cap from env, preserving 0 as an explicit disable switch. */
|
|
157
|
-
export declare function getSourcePremiseDiscoveryLimit(): number;
|
|
158
|
-
export declare function buildEvaluatorEvidenceKey(candidate: CandidateMatch): string;
|
|
159
|
-
/**
|
|
160
|
-
* Builds a compact text summary of the discoverer's profile and active intents
|
|
161
|
-
* for use as profileContext in HyDE generation.
|
|
162
|
-
* @param profile - The discoverer's profile data (identity, attributes)
|
|
163
|
-
* @param intents - The discoverer's indexed intents (capped at 5)
|
|
164
|
-
* @returns A context string, or undefined if no meaningful data is available
|
|
165
|
-
*/
|
|
166
|
-
export declare function buildDiscovererContext(profile: SourceProfileData | null | undefined, intents: IndexedIntent[] | undefined): string | undefined;
|
|
167
|
-
/**
|
|
168
|
-
* Build a networkContexts map for the evaluator from a set of entities.
|
|
169
|
-
* Fetches network data, checks permissions.contextInjection.discovery,
|
|
170
|
-
* and renders context for eligible networks.
|
|
171
|
-
*/
|
|
172
|
-
export declare function buildNetworkContexts(entities: EvaluatorEntity[], database: Pick<OpportunityGraphDatabase, 'getNetwork'>): Promise<Record<string, string>>;
|
|
173
|
-
export type { Id };
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared vocabulary for the opportunity graph's nodes and modes.
|
|
3
|
-
*
|
|
4
|
-
* The nodes used to be closures inside `OpportunityGraphFactory.createGraph()`,
|
|
5
|
-
* capturing `this` and the resolved thresholds. They are now top-level functions
|
|
6
|
-
* that take an explicit {@link OpportunityGraphDeps} bag, so each node is
|
|
7
|
-
* readable — and testable — on its own. This module owns the pieces more than
|
|
8
|
-
* one of them needs: the dependency bag, the loggers, the trace wrapper, and the
|
|
9
|
-
* small pure helpers.
|
|
10
|
-
*/
|
|
11
|
-
import { ASK_USER_LOCK_SLACK_MS, askUserAnswerWindowMs } from '../negotiations/negotiation.module.js';
|
|
12
|
-
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
13
|
-
import { renderNetworkContext } from '../shared/network/metadata.renderer.js';
|
|
14
|
-
import { requestContext } from '../shared/observability/request-context.js';
|
|
15
|
-
export const logger = protocolLogger('OpportunityGraph');
|
|
16
|
-
export const prepLog = protocolLogger('OpportunityGraph:Prep');
|
|
17
|
-
export const scopeLog = protocolLogger('OpportunityGraph:Scope');
|
|
18
|
-
export const resolveLog = protocolLogger('OpportunityGraph:Resolve');
|
|
19
|
-
export const discoveryLog = protocolLogger('OpportunityGraph:Discovery');
|
|
20
|
-
export const evaluationLog = protocolLogger('OpportunityGraph:Evaluation');
|
|
21
|
-
export const negotiateLog = protocolLogger('OpportunityGraph:Negotiate');
|
|
22
|
-
export const rankingLog = protocolLogger('OpportunityGraph:Ranking');
|
|
23
|
-
export const introValidationLog = protocolLogger('OpportunityGraph:IntroValidation');
|
|
24
|
-
export const introEvaluationLog = protocolLogger('OpportunityGraph:IntroEvaluation');
|
|
25
|
-
export const persistLog = protocolLogger('OpportunityGraph:Persist');
|
|
26
|
-
export const persistPathLog = protocolLogger('OpportunityGraph:Persist:PathSelect');
|
|
27
|
-
export const persistDedupLog = protocolLogger('OpportunityGraph:Persist:Dedup');
|
|
28
|
-
export const readLog = protocolLogger('OpportunityGraph:Read');
|
|
29
|
-
export const updateLog = protocolLogger('OpportunityGraph:Update');
|
|
30
|
-
export const deleteLog = protocolLogger('OpportunityGraph:Delete');
|
|
31
|
-
export const sendLog = protocolLogger('OpportunityGraph:Send');
|
|
32
|
-
export const negotiateExistingLog = protocolLogger('OpportunityGraph:NegotiateExisting');
|
|
33
|
-
export const routingLog = protocolLogger('OpportunityGraph:Routing');
|
|
34
|
-
/**
|
|
35
|
-
* Error text can include provider response bodies, URLs, and credentials. Keep
|
|
36
|
-
* observability useful by retaining only a conservative error class at this
|
|
37
|
-
* boundary; detailed errors are intentionally not emitted from graph traces.
|
|
38
|
-
*/
|
|
39
|
-
export function safeOpportunityGraphError(_error) {
|
|
40
|
-
return 'OpportunityEvaluationError: [redacted]';
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Wraps a graph node function to emit agent_start/agent_end trace events
|
|
44
|
-
* at its boundaries so the frontend TRACE panel shows real-time progress.
|
|
45
|
-
* @param traceName - Kebab-case agent name (e.g. "opportunity-prep")
|
|
46
|
-
* @param nodeFn - The original node function
|
|
47
|
-
* @param summaryFn - Optional function to derive a summary string from the node result
|
|
48
|
-
*/
|
|
49
|
-
export function withNodeTrace(traceName, nodeFn, summaryFn) {
|
|
50
|
-
return async (state) => {
|
|
51
|
-
const traceEmitter = requestContext.getStore()?.traceEmitter;
|
|
52
|
-
const nodeStart = Date.now();
|
|
53
|
-
traceEmitter?.({ type: "agent_start", name: traceName });
|
|
54
|
-
try {
|
|
55
|
-
const result = await nodeFn(state);
|
|
56
|
-
const durationMs = Date.now() - nodeStart;
|
|
57
|
-
const summary = summaryFn?.(result) ?? undefined;
|
|
58
|
-
traceEmitter?.({ type: "agent_end", name: traceName, durationMs, summary });
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
const durationMs = Date.now() - nodeStart;
|
|
63
|
-
const errMsg = safeOpportunityGraphError(err);
|
|
64
|
-
traceEmitter?.({ type: "agent_end", name: traceName, durationMs, summary: `error: ${errMsg}` });
|
|
65
|
-
throw err;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
/** Shared trace summary: surface `error` when a node returned one. */
|
|
70
|
-
export function errorSummary(result) {
|
|
71
|
-
const r = result;
|
|
72
|
-
return r?.error ? `error: ${r.error}` : undefined;
|
|
73
|
-
}
|
|
74
|
-
/** Time window for persist-node dedup. Suppresses a second opportunity with the same person while a recent one (within 30 days) is still in flight, so a person is not re-surfaced multiple times within a month (EDG-23). */
|
|
75
|
-
export const DEDUP_WINDOW_MS = 30 * 24 * 60 * 60 * 1000;
|
|
76
|
-
const ACTIVE_NEGOTIATION_TASK_STATES = new Set([
|
|
77
|
-
'submitted',
|
|
78
|
-
'working',
|
|
79
|
-
'input_required',
|
|
80
|
-
'waiting_for_agent',
|
|
81
|
-
'claimed',
|
|
82
|
-
]);
|
|
83
|
-
export function isActiveNegotiationTaskFresh(task) {
|
|
84
|
-
if (!ACTIVE_NEGOTIATION_TASK_STATES.has(task.state))
|
|
85
|
-
return false;
|
|
86
|
-
const freshnessMs = task.state === 'input_required'
|
|
87
|
-
? askUserAnswerWindowMs() + ASK_USER_LOCK_SLACK_MS
|
|
88
|
-
: 5 * 60 * 1000;
|
|
89
|
-
return Date.now() - new Date(task.updatedAt).getTime() < freshnessMs;
|
|
90
|
-
}
|
|
91
|
-
export function triggerForOwner(opportunity, ownerUserId) {
|
|
92
|
-
return opportunity.detection.triggeredBy
|
|
93
|
-
?? opportunity.actors.find((actor) => actor.userId === ownerUserId)?.intent;
|
|
94
|
-
}
|
|
95
|
-
export function belongsToOwnedIntent(opportunity, ownerUserId, triggerIntentId) {
|
|
96
|
-
return opportunity.detection.triggeredBy === triggerIntentId
|
|
97
|
-
|| opportunity.actors.some((actor) => actor.userId === ownerUserId && actor.intent === triggerIntentId);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* IND-567: Cool-down window (ms) for cross-query rejection suppression.
|
|
101
|
-
* Candidates with a recently rejected or stalled opportunity within this window
|
|
102
|
-
* receive a similarity penalty during evaluation ranking. Default 7 days.
|
|
103
|
-
* Override with DISCOVERY_REJECTION_COOLDOWN_DAYS (positive float).
|
|
104
|
-
*/
|
|
105
|
-
const DEFAULT_REJECTION_COOLDOWN_MS = 7 * 24 * 60 * 60 * 1000;
|
|
106
|
-
export function getRejectionCooldownMs() {
|
|
107
|
-
const raw = process.env.DISCOVERY_REJECTION_COOLDOWN_DAYS;
|
|
108
|
-
if (!raw)
|
|
109
|
-
return DEFAULT_REJECTION_COOLDOWN_MS;
|
|
110
|
-
const n = Number.parseFloat(raw);
|
|
111
|
-
return Number.isFinite(n) && n > 0 ? Math.round(n * 24 * 60 * 60 * 1000) : DEFAULT_REJECTION_COOLDOWN_MS;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Similarity multiplier applied to candidates that fall within the rejection
|
|
115
|
-
* cool-down window (IND-567). 0.5 halves their ranking score, typically
|
|
116
|
-
* pushing them below the evaluation-batch cut while leaving a soft trace in
|
|
117
|
-
* the trace log rather than silently dropping them.
|
|
118
|
-
*/
|
|
119
|
-
export const REJECTION_COOLDOWN_SIMILARITY_PENALTY = 0.5;
|
|
120
|
-
/** Default cap for source premises used by premise-to-premise discovery. Prevents BACKEND-5-style fan-out. */
|
|
121
|
-
const DEFAULT_SOURCE_PREMISE_DISCOVERY_LIMIT = 40;
|
|
122
|
-
/** NUL separator: it cannot occur inside an id, so the composite key is unambiguous. */
|
|
123
|
-
const PAIR_KEY_SEPARATOR = String.fromCharCode(0);
|
|
124
|
-
export function networkMembershipPairKey(userId, networkId) {
|
|
125
|
-
return userId + PAIR_KEY_SEPARATOR + networkId;
|
|
126
|
-
}
|
|
127
|
-
/** Per-source cap for candidate premise matches. */
|
|
128
|
-
export const PREMISE_MATCH_LIMIT_PER_SOURCE = 20;
|
|
129
|
-
/** Resolve the source premise discovery cap from env, preserving 0 as an explicit disable switch. */
|
|
130
|
-
export function getSourcePremiseDiscoveryLimit() {
|
|
131
|
-
const raw = process.env.DISCOVERY_SOURCE_PREMISE_LIMIT;
|
|
132
|
-
if (raw === undefined || raw.trim() === '')
|
|
133
|
-
return DEFAULT_SOURCE_PREMISE_DISCOVERY_LIMIT;
|
|
134
|
-
const parsed = Number.parseInt(raw, 10);
|
|
135
|
-
return Number.isFinite(parsed) && parsed >= 0 ? parsed : DEFAULT_SOURCE_PREMISE_DISCOVERY_LIMIT;
|
|
136
|
-
}
|
|
137
|
-
export function buildEvaluatorEvidenceKey(candidate) {
|
|
138
|
-
return [
|
|
139
|
-
candidate.candidateUserId,
|
|
140
|
-
candidate.networkId,
|
|
141
|
-
candidate.candidateIntentId ?? candidate.candidatePremiseId ?? candidate.candidateContextId ?? candidate.sourceContextId ?? 'profile',
|
|
142
|
-
].join(':');
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Builds a compact text summary of the discoverer's profile and active intents
|
|
146
|
-
* for use as profileContext in HyDE generation.
|
|
147
|
-
* @param profile - The discoverer's profile data (identity, attributes)
|
|
148
|
-
* @param intents - The discoverer's indexed intents (capped at 5)
|
|
149
|
-
* @returns A context string, or undefined if no meaningful data is available
|
|
150
|
-
*/
|
|
151
|
-
export function buildDiscovererContext(profile, intents) {
|
|
152
|
-
const lines = [];
|
|
153
|
-
if (profile) {
|
|
154
|
-
const identity = profile.identity;
|
|
155
|
-
if (identity?.name || identity?.bio) {
|
|
156
|
-
lines.push(`Profile: ${[identity.name, identity.bio].filter(Boolean).join(', ')}`);
|
|
157
|
-
}
|
|
158
|
-
if (identity?.location) {
|
|
159
|
-
lines.push(`Location: ${identity.location}`);
|
|
160
|
-
}
|
|
161
|
-
if (profile.context) {
|
|
162
|
-
lines.push(`Context: ${profile.context}`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (intents?.length) {
|
|
166
|
-
// indexedIntents preserves DB order from getActiveIntents (newest first),
|
|
167
|
-
// so slice(0, 5) is deterministic without an explicit sort.
|
|
168
|
-
const capped = intents.slice(0, 5);
|
|
169
|
-
lines.push('');
|
|
170
|
-
lines.push('Active intents:');
|
|
171
|
-
for (const intent of capped) {
|
|
172
|
-
lines.push(`- ${intent.payload}`);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
return lines.length > 0 ? lines.join('\n') : undefined;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Build a networkContexts map for the evaluator from a set of entities.
|
|
179
|
-
* Fetches network data, checks permissions.contextInjection.discovery,
|
|
180
|
-
* and renders context for eligible networks.
|
|
181
|
-
*/
|
|
182
|
-
export async function buildNetworkContexts(entities, database) {
|
|
183
|
-
const networkIds = [...new Set(entities.map((e) => e.networkId))];
|
|
184
|
-
const networks = await Promise.all(networkIds.map((nid) => database.getNetwork(nid).then((n) => ({ nid, n }))));
|
|
185
|
-
const contexts = {};
|
|
186
|
-
for (const { nid, n: network } of networks) {
|
|
187
|
-
if (!network)
|
|
188
|
-
continue;
|
|
189
|
-
const perms = (network.permissions ?? {});
|
|
190
|
-
const injection = perms.contextInjection;
|
|
191
|
-
if (injection?.discovery === false)
|
|
192
|
-
continue;
|
|
193
|
-
contexts[nid] = renderNetworkContext({
|
|
194
|
-
title: network.title,
|
|
195
|
-
prompt: network.prompt,
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
return contexts;
|
|
199
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Introducer Discovery: proactive discovery of connector-flow opportunities
|
|
3
|
-
* between a user's contacts.
|
|
4
|
-
*
|
|
5
|
-
* Selects top-N contacts from the user's personal network and runs scoped
|
|
6
|
-
* HyDE discovery for each, creating latent introducer opportunities that
|
|
7
|
-
* the user (as introducer) must approve before parties see them.
|
|
8
|
-
*/
|
|
9
|
-
/** Maximum contacts to evaluate per maintenance cycle. */
|
|
10
|
-
export declare const MAX_CONTACTS_PER_CYCLE = 5;
|
|
11
|
-
/** Maximum candidate opportunities per contact. */
|
|
12
|
-
export declare const MAX_CANDIDATES_PER_CONTACT = 3;
|
|
13
|
-
/** Detection source value for introducer-discovered opportunities. */
|
|
14
|
-
export declare const INTRODUCER_DISCOVERY_SOURCE: "introducer_discovery";
|
|
15
|
-
/** A contact with their active intents, used for introducer discovery selection. */
|
|
16
|
-
export interface ContactWithIntents {
|
|
17
|
-
userId: string;
|
|
18
|
-
/** Most recent intent updatedAt timestamp (ISO string or null). */
|
|
19
|
-
latestIntentAt: string | null;
|
|
20
|
-
/** Number of active intents this contact has. */
|
|
21
|
-
intentCount: number;
|
|
22
|
-
}
|
|
23
|
-
/** Database methods needed for introducer discovery contact selection. */
|
|
24
|
-
export interface IntroducerDiscoveryDatabase {
|
|
25
|
-
/** Get the user's personal network ID. */
|
|
26
|
-
getPersonalIndexId(userId: string): Promise<string | null>;
|
|
27
|
-
/** Get contacts from a personal network with their intent freshness data. */
|
|
28
|
-
getContactsWithIntentFreshness(personalIndexId: string, ownerId: string, limit: number): Promise<ContactWithIntents[]>;
|
|
29
|
-
}
|
|
30
|
-
/** Queue interface for enqueuing introducer discovery jobs. */
|
|
31
|
-
export interface IntroducerDiscoveryQueue {
|
|
32
|
-
addJob(data: {
|
|
33
|
-
intentId: string;
|
|
34
|
-
userId: string;
|
|
35
|
-
indexIds?: string[];
|
|
36
|
-
contactUserId?: string;
|
|
37
|
-
}, options?: {
|
|
38
|
-
priority?: number;
|
|
39
|
-
jobId?: string;
|
|
40
|
-
}): Promise<unknown>;
|
|
41
|
-
}
|
|
42
|
-
/** Result of a single introducer discovery cycle. */
|
|
43
|
-
export interface IntroducerDiscoveryResult {
|
|
44
|
-
contactsEvaluated: number;
|
|
45
|
-
jobsEnqueued: number;
|
|
46
|
-
skippedReason?: string;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Select top-N contacts for introducer discovery, sorted by intent freshness.
|
|
50
|
-
* Contacts with no active intents are excluded.
|
|
51
|
-
*
|
|
52
|
-
* @param database - Database adapter with contact/intent queries
|
|
53
|
-
* @param userId - The introducer user
|
|
54
|
-
* @param limit - Max contacts to return (default MAX_CONTACTS_PER_CYCLE)
|
|
55
|
-
* @returns Sorted contacts with intent data
|
|
56
|
-
*/
|
|
57
|
-
export declare function selectContactsForDiscovery(database: IntroducerDiscoveryDatabase, userId: string, limit?: number): Promise<ContactWithIntents[]>;
|
|
58
|
-
/**
|
|
59
|
-
* Determine whether introducer discovery should run based on the current
|
|
60
|
-
* connector-flow composition. Triggers when connector-flow count is below
|
|
61
|
-
* the soft target.
|
|
62
|
-
*
|
|
63
|
-
* @param connectorFlowCount - Current number of connector-flow opportunities
|
|
64
|
-
* @param connectorFlowTarget - Soft target (default 2)
|
|
65
|
-
* @returns Whether introducer discovery should run
|
|
66
|
-
*/
|
|
67
|
-
export declare function shouldRunIntroducerDiscovery(connectorFlowCount: number, connectorFlowTarget?: number): boolean;
|
|
68
|
-
/**
|
|
69
|
-
* Run introducer discovery for a user: select contacts, enqueue discovery jobs.
|
|
70
|
-
* Each job uses onBehalfOfUserId so the opportunity graph treats the user as introducer.
|
|
71
|
-
*
|
|
72
|
-
* @param database - Database adapter for contact queries
|
|
73
|
-
* @param queue - Queue for enqueuing discovery jobs
|
|
74
|
-
* @param userId - The introducer user
|
|
75
|
-
* @returns Summary of the discovery cycle
|
|
76
|
-
*/
|
|
77
|
-
export declare function runIntroducerDiscovery(database: IntroducerDiscoveryDatabase, queue: IntroducerDiscoveryQueue, userId: string): Promise<IntroducerDiscoveryResult>;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Introducer Discovery: proactive discovery of connector-flow opportunities
|
|
3
|
-
* between a user's contacts.
|
|
4
|
-
*
|
|
5
|
-
* Selects top-N contacts from the user's personal network and runs scoped
|
|
6
|
-
* HyDE discovery for each, creating latent introducer opportunities that
|
|
7
|
-
* the user (as introducer) must approve before parties see them.
|
|
8
|
-
*/
|
|
9
|
-
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
10
|
-
const logger = protocolLogger('IntroducerDiscovery');
|
|
11
|
-
/** Maximum contacts to evaluate per maintenance cycle. */
|
|
12
|
-
export const MAX_CONTACTS_PER_CYCLE = 5;
|
|
13
|
-
/** Maximum candidate opportunities per contact. */
|
|
14
|
-
export const MAX_CANDIDATES_PER_CONTACT = 3;
|
|
15
|
-
/** Detection source value for introducer-discovered opportunities. */
|
|
16
|
-
export const INTRODUCER_DISCOVERY_SOURCE = 'introducer_discovery';
|
|
17
|
-
/**
|
|
18
|
-
* Select top-N contacts for introducer discovery, sorted by intent freshness.
|
|
19
|
-
* Contacts with no active intents are excluded.
|
|
20
|
-
*
|
|
21
|
-
* @param database - Database adapter with contact/intent queries
|
|
22
|
-
* @param userId - The introducer user
|
|
23
|
-
* @param limit - Max contacts to return (default MAX_CONTACTS_PER_CYCLE)
|
|
24
|
-
* @returns Sorted contacts with intent data
|
|
25
|
-
*/
|
|
26
|
-
export async function selectContactsForDiscovery(database, userId, limit = MAX_CONTACTS_PER_CYCLE) {
|
|
27
|
-
const personalIndexId = await database.getPersonalIndexId(userId);
|
|
28
|
-
if (!personalIndexId) {
|
|
29
|
-
logger.verbose('No personal network found', { userId });
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
const contacts = await database.getContactsWithIntentFreshness(personalIndexId, userId, limit);
|
|
33
|
-
logger.verbose('Selected contacts for discovery', { userId, totalContacts: contacts.length, limit });
|
|
34
|
-
return contacts;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Determine whether introducer discovery should run based on the current
|
|
38
|
-
* connector-flow composition. Triggers when connector-flow count is below
|
|
39
|
-
* the soft target.
|
|
40
|
-
*
|
|
41
|
-
* @param connectorFlowCount - Current number of connector-flow opportunities
|
|
42
|
-
* @param connectorFlowTarget - Soft target (default 2)
|
|
43
|
-
* @returns Whether introducer discovery should run
|
|
44
|
-
*/
|
|
45
|
-
export function shouldRunIntroducerDiscovery(connectorFlowCount, connectorFlowTarget = 2) {
|
|
46
|
-
return connectorFlowCount < connectorFlowTarget;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Run introducer discovery for a user: select contacts, enqueue discovery jobs.
|
|
50
|
-
* Each job uses onBehalfOfUserId so the opportunity graph treats the user as introducer.
|
|
51
|
-
*
|
|
52
|
-
* @param database - Database adapter for contact queries
|
|
53
|
-
* @param queue - Queue for enqueuing discovery jobs
|
|
54
|
-
* @param userId - The introducer user
|
|
55
|
-
* @returns Summary of the discovery cycle
|
|
56
|
-
*/
|
|
57
|
-
export async function runIntroducerDiscovery(database, queue, userId) {
|
|
58
|
-
const personalIndexId = await database.getPersonalIndexId(userId);
|
|
59
|
-
if (!personalIndexId) {
|
|
60
|
-
return { contactsEvaluated: 0, jobsEnqueued: 0, skippedReason: 'no_personal_index' };
|
|
61
|
-
}
|
|
62
|
-
const contacts = await selectContactsForDiscovery(database, userId);
|
|
63
|
-
if (contacts.length === 0) {
|
|
64
|
-
return { contactsEvaluated: 0, jobsEnqueued: 0, skippedReason: 'no_contacts' };
|
|
65
|
-
}
|
|
66
|
-
const bucket = Math.floor(Date.now() / (12 * 60 * 60 * 1000)); // 12h dedup bucket
|
|
67
|
-
const results = await Promise.allSettled(contacts.map(async (contact) => {
|
|
68
|
-
// For each contact, we enqueue a discovery job using one of their intents
|
|
69
|
-
// The opportunity graph will use onBehalfOfUserId to discover on behalf of the contact
|
|
70
|
-
// while the userId (introducer) gets the introducer role
|
|
71
|
-
const jobId = `introducer-discovery-${userId}-${contact.userId}-${bucket}`;
|
|
72
|
-
try {
|
|
73
|
-
await queue.addJob({
|
|
74
|
-
intentId: `introducer:${contact.userId}`,
|
|
75
|
-
userId,
|
|
76
|
-
indexIds: [personalIndexId],
|
|
77
|
-
contactUserId: contact.userId,
|
|
78
|
-
}, { priority: 15, jobId });
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
catch (err) {
|
|
82
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
-
if (/duplicate|already exists|job.*id/i.test(message)) {
|
|
84
|
-
logger.verbose('Job skipped (duplicate)', { userId, contactUserId: contact.userId, error: message });
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
throw err;
|
|
88
|
-
}
|
|
89
|
-
}));
|
|
90
|
-
for (const r of results) {
|
|
91
|
-
if (r.status === 'rejected') {
|
|
92
|
-
const errMsg = r.reason instanceof Error ? r.reason.message : String(r.reason);
|
|
93
|
-
logger.error('Job enqueue failed', { error: errMsg });
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const jobsEnqueued = results.filter((r) => r.status === 'fulfilled' && r.value).length;
|
|
97
|
-
logger.info('Discovery cycle complete', { userId, contactsEvaluated: contacts.length, jobsEnqueued });
|
|
98
|
-
return { contactsEvaluated: contacts.length, jobsEnqueued };
|
|
99
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Max chars for main text in minimal opportunity cards (chat tool payload). Full text shown so cards are not truncated. */
|
|
2
|
-
export const MINIMAL_MAIN_TEXT_MAX_CHARS = 2000;
|
|
3
|
-
/** Hardcoded button labels for opportunity cards (not LLM-generated). */
|
|
4
|
-
export const PRIMARY_ACTION_LABEL_INTRODUCER = "Good match";
|
|
5
|
-
export const PRIMARY_ACTION_LABEL_DEFAULT = "Start Chat";
|
|
6
|
-
export const SECONDARY_ACTION_LABEL = "Skip";
|
|
7
|
-
/** Returns the primary action label based on the viewer's role. */
|
|
8
|
-
export function getPrimaryActionLabel(viewerRole) {
|
|
9
|
-
return viewerRole === "introducer" ? PRIMARY_ACTION_LABEL_INTRODUCER : PRIMARY_ACTION_LABEL_DEFAULT;
|
|
10
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { Opportunity, OpportunityActor, OpportunityGraphDatabase } from '../shared/interfaces/database.interface.js';
|
|
2
|
-
/** The mutation result shape returned by opportunity lifecycle graph nodes. */
|
|
3
|
-
export interface OpportunityMutationResult {
|
|
4
|
-
success: boolean;
|
|
5
|
-
message?: string;
|
|
6
|
-
opportunityId?: string;
|
|
7
|
-
notified?: string[];
|
|
8
|
-
conversationId?: string;
|
|
9
|
-
error?: string;
|
|
10
|
-
}
|
|
11
|
-
/** Narrow persistence boundary for user-driven opportunity lifecycle actions. */
|
|
12
|
-
export type OpportunityLifecyclePort = Pick<OpportunityGraphDatabase, 'getOpportunity' | 'getOrCreateDM' | 'stampOpportunityActorAction' | 'updateOpportunityActorApproval' | 'updateOpportunityStatus'>;
|
|
13
|
-
/** Host callback used to notify an actor after an opportunity becomes visible to them. */
|
|
14
|
-
export type QueueOpportunityNotificationFn = (opportunityId: string, recipientId: string, priority: 'immediate' | 'high' | 'low') => Promise<unknown>;
|
|
15
|
-
type StatusTransitionPlan = {
|
|
16
|
-
kind: 'stamp_accepted';
|
|
17
|
-
counterpartUserId?: string;
|
|
18
|
-
} | {
|
|
19
|
-
kind: 'set_terminal_status';
|
|
20
|
-
status: 'rejected' | 'expired';
|
|
21
|
-
};
|
|
22
|
-
type SendOpportunityPlan = {
|
|
23
|
-
sender: OpportunityActor;
|
|
24
|
-
recipients: OpportunityActor[];
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Applies status-transition admission rules before lifecycle persistence.
|
|
28
|
-
* Acceptance is a two-party action: an actor that already acted cannot accept
|
|
29
|
-
* again, while rejection and expiry remain available to any participating actor.
|
|
30
|
-
*/
|
|
31
|
-
export declare function assessOpportunityStatusTransition(opportunity: Opportunity, actorUserId: string, newStatus: string | undefined): StatusTransitionPlan | OpportunityMutationResult;
|
|
32
|
-
/**
|
|
33
|
-
* Applies send admission and recipient-routing rules without performing writes.
|
|
34
|
-
* Introducers, peers, and direct patient/party flows each reveal the next tier
|
|
35
|
-
* to a distinct audience.
|
|
36
|
-
*/
|
|
37
|
-
export declare function assessOpportunitySend(opportunity: Opportunity, actorUserId: string): SendOpportunityPlan | OpportunityMutationResult;
|
|
38
|
-
/** Checks whether a caller may approve this opportunity's introducer gate. */
|
|
39
|
-
export declare function assessIntroductionApproval(opportunity: Opportunity, actorUserId: string): OpportunityMutationResult | {
|
|
40
|
-
kind: 'approve';
|
|
41
|
-
};
|
|
42
|
-
/** Persists an admitted status transition, preserving accept-before-write DM ordering. */
|
|
43
|
-
export declare function updateOpportunityLifecycle(database: OpportunityLifecyclePort, input: {
|
|
44
|
-
opportunityId?: string;
|
|
45
|
-
actorUserId: string;
|
|
46
|
-
newStatus?: string;
|
|
47
|
-
}): Promise<OpportunityMutationResult>;
|
|
48
|
-
/** Expires an opportunity after verifying the caller is one of its actors. */
|
|
49
|
-
export declare function deleteOpportunityLifecycle(database: OpportunityLifecyclePort, input: {
|
|
50
|
-
opportunityId?: string;
|
|
51
|
-
actorUserId: string;
|
|
52
|
-
}): Promise<OpportunityMutationResult>;
|
|
53
|
-
/** Persists a send transition, then notifies only the actors exposed by its routing policy. */
|
|
54
|
-
export declare function sendOpportunityLifecycle(database: OpportunityLifecyclePort, input: {
|
|
55
|
-
opportunityId?: string;
|
|
56
|
-
actorUserId: string;
|
|
57
|
-
}, queueNotification?: QueueOpportunityNotificationFn): Promise<OpportunityMutationResult>;
|
|
58
|
-
/** Approves an introducer gate before enqueuing the existing-opportunity negotiation. */
|
|
59
|
-
export declare function approveOpportunityIntroduction(database: OpportunityLifecyclePort, input: {
|
|
60
|
-
opportunityId?: string;
|
|
61
|
-
actorUserId: string;
|
|
62
|
-
}, queueNegotiateExisting?: (opportunityId: string, userId: string) => Promise<void>): Promise<OpportunityMutationResult>;
|
|
63
|
-
export {};
|