@indexnetwork/protocol 22.0.0-rc.499.1 → 64.0.0-rc.604.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1841 -0
- package/IMPLEMENTATION.md +140 -181
- package/README.md +16 -20
- package/STABILITY.md +16 -11
- package/dist/{intents/intent.module.d.ts → capabilities/intents.d.ts} +182 -192
- package/dist/capabilities/intents.js +88 -0
- package/dist/capabilities/negotiations.d.ts +17 -0
- package/dist/capabilities/negotiations.js +16 -0
- package/dist/{networks/network.module.d.ts → capabilities/networks.d.ts} +33 -169
- package/dist/{networks/network.module.js → capabilities/networks.js} +6 -17
- package/dist/index.d.ts +57 -134
- package/dist/index.js +41 -105
- package/dist/internal/agents/agent.repository.port.d.ts +59 -0
- package/dist/internal/agents/agent.repository.port.js +7 -0
- package/dist/internal/agents/agent.types.d.ts +35 -0
- package/dist/{agents → internal/agents}/agent.types.js +1 -6
- package/dist/{intents → internal/intents}/graph/intent.graph.d.ts +142 -151
- package/dist/{intents → internal/intents}/graph/intent.graph.execute.d.ts +5 -1
- package/dist/{intents → internal/intents}/graph/intent.graph.execute.js +165 -46
- package/dist/internal/intents/graph/intent.graph.infer.d.ts +78 -0
- package/dist/internal/intents/graph/intent.graph.infer.js +122 -0
- package/dist/internal/intents/graph/intent.graph.js +108 -0
- package/dist/{intents → internal/intents}/graph/intent.graph.reconcile.d.ts +18 -9
- package/dist/internal/intents/graph/intent.graph.reconcile.js +173 -0
- package/dist/internal/intents/graph/intent.graph.shared.d.ts +55 -0
- package/dist/{intents → internal/intents}/graph/intent.graph.shared.js +25 -70
- package/dist/{intents → internal/intents}/graph/intent.graph.state.d.ts +96 -32
- package/dist/{intents → internal/intents}/graph/intent.graph.state.js +42 -31
- package/dist/internal/intents/intent.admission.d.ts +16 -0
- package/dist/internal/intents/intent.admission.js +30 -0
- package/dist/{intents → internal/intents}/intent.inferrer.d.ts +1 -40
- package/dist/{intents → internal/intents}/intent.inferrer.js +13 -49
- package/dist/internal/intents/intent.preparer.d.ts +52 -0
- package/dist/internal/intents/intent.preparer.js +87 -0
- package/dist/{intents → internal/intents}/intent.verifier.d.ts +3 -36
- package/dist/{intents → internal/intents}/intent.verifier.js +0 -17
- package/dist/{networks → internal/networks}/indexer.graph.d.ts +15 -200
- package/dist/{networks → internal/networks}/indexer.graph.js +19 -128
- package/dist/{networks → internal/networks}/indexer.state.d.ts +8 -63
- package/dist/internal/networks/indexer.state.js +70 -0
- package/dist/{networks → internal/networks}/membership.graph.d.ts +6 -6
- package/dist/{networks → internal/networks}/membership.graph.js +3 -3
- package/dist/{networks → internal/networks}/membership.state.d.ts +2 -2
- package/dist/{networks → internal/networks}/membership.state.js +2 -2
- package/dist/{networks → internal/networks}/network.graph.d.ts +9 -22
- package/dist/{networks → internal/networks}/network.graph.js +13 -27
- package/dist/{networks → internal/networks}/network.recommender.d.ts +2 -2
- package/dist/{networks → internal/networks}/network.recommender.js +2 -2
- package/dist/{networks → internal/networks}/network.state.d.ts +4 -7
- package/dist/{networks → internal/networks}/network.state.js +4 -4
- package/dist/internal/opportunities/negotiation-context.loader.d.ts +26 -0
- package/dist/internal/opportunities/negotiation-context.loader.js +36 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.actor.d.ts +1 -1
- package/dist/{opportunities → internal/opportunities}/opportunity.actor.js +7 -1
- package/dist/internal/opportunities/opportunity.counterparties.d.ts +17 -0
- package/dist/internal/opportunities/opportunity.counterparties.js +19 -0
- package/dist/internal/opportunities/opportunity.events.d.ts +38 -0
- package/dist/internal/opportunities/opportunity.events.js +94 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.feed-selection.d.ts +3 -9
- package/dist/internal/opportunities/opportunity.feed-selection.js +40 -0
- package/dist/internal/opportunities/opportunity.graph.modes.d.ts +39 -0
- package/dist/internal/opportunities/opportunity.graph.modes.js +138 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.labels.d.ts +2 -3
- package/dist/internal/opportunities/opportunity.labels.js +9 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.presentation.d.ts +17 -86
- package/dist/{opportunities → internal/opportunities}/opportunity.presentation.js +54 -447
- package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.d.ts +2 -2
- package/dist/internal/opportunities/opportunity.utils.d.ts +105 -0
- package/dist/internal/opportunities/opportunity.utils.js +165 -0
- package/dist/{opportunities → internal/opportunities}/radar/radar.graph.d.ts +17 -17
- package/dist/{opportunities → internal/opportunities}/radar/radar.graph.js +41 -161
- package/dist/{opportunities → internal/opportunities}/radar/radar.state.d.ts +4 -11
- package/dist/{shared → internal/shared}/agent/model-signal.d.ts +1 -1
- package/dist/{shared → internal/shared}/agent/model-signal.js +1 -1
- package/dist/{shared → internal/shared}/agent/model.config.d.ts +28 -86
- package/dist/{shared → internal/shared}/agent/model.config.js +58 -69
- package/dist/internal/shared/agent/model.resolver.d.ts +33 -0
- package/dist/{shared → internal/shared}/agent/model.resolver.js +18 -33
- package/dist/internal/shared/agent/scope.d.ts +20 -0
- package/dist/internal/shared/agent/scope.js +24 -0
- package/dist/internal/shared/assignment/network-assignment.policy.d.ts +23 -0
- package/dist/internal/shared/assignment/network-assignment.policy.js +28 -0
- package/dist/{shared → internal/shared}/observability/log.d.ts +3 -6
- package/dist/{shared → internal/shared}/observability/log.js +9 -18
- package/dist/{shared → internal/shared}/observability/protocol.logger.d.ts +1 -1
- package/dist/{shared → internal/shared}/observability/protocol.logger.js +1 -1
- package/dist/internal/shared/observability/request-context.d.ts +29 -0
- package/dist/internal/shared/observability/request-context.js +17 -0
- package/dist/{shared → internal/shared}/utils/social-label.d.ts +2 -2
- package/dist/{shared → internal/shared}/utils/social-label.js +1 -1
- package/dist/platform/database/capabilities.d.ts +59 -0
- package/dist/{shared/interfaces/database.entities.d.ts → platform/database/entities.d.ts} +81 -121
- package/dist/{shared/interfaces/database.identity-queries.d.ts → platform/database/identity-queries.d.ts} +55 -20
- package/dist/platform/database/member-queries.d.ts +55 -0
- package/dist/platform/database/member-queries.js +4 -0
- package/dist/platform/database/negotiation.d.ts +38 -0
- package/dist/{shared/interfaces/database.network-queries.d.ts → platform/database/network-queries.d.ts} +66 -67
- package/dist/platform/database/network-queries.js +4 -0
- package/dist/{shared/interfaces/database.opportunity-queries.d.ts → platform/database/opportunity-queries.d.ts} +25 -109
- package/dist/{shared/interfaces/database.port.d.ts → platform/database/port.d.ts} +52 -117
- package/dist/{shared/interfaces/database.port.js → platform/database/port.js} +3 -5
- package/dist/platform/database.d.ts +23 -0
- package/dist/{shared/interfaces/database.interface.js → platform/database.js} +1 -1
- package/dist/{shared/interfaces/cache.interface.d.ts → platform/discovery/cache.d.ts} +2 -4
- package/dist/{shared/interfaces/cache.interface.js → platform/discovery/cache.js} +1 -1
- package/dist/platform/discovery/embedder.d.ts +31 -0
- package/dist/platform/runtime/errors.d.ts +6 -0
- package/dist/platform/runtime/errors.js +9 -0
- package/dist/platform/runtime/follow-up.d.ts +36 -0
- package/dist/platform/runtime/follow-up.js +4 -0
- package/dist/platform/runtime/observability.d.ts +34 -0
- package/dist/protocol/core.d.ts +11 -0
- package/dist/protocol/discovery.rules.d.ts +21 -0
- package/dist/protocol/discovery.rules.js +29 -0
- package/dist/protocol/negotiation.constants.d.ts +3 -0
- package/dist/protocol/negotiation.constants.js +3 -0
- package/dist/protocol/negotiation.rules.d.ts +73 -0
- package/dist/protocol/negotiation.rules.js +68 -0
- package/dist/protocol/protocol.prompt.d.ts +13 -0
- package/dist/protocol/protocol.prompt.js +190 -0
- package/dist/{shared → protocol}/schemas/discovery-question.schema.d.ts +13 -13
- package/dist/{shared → protocol}/schemas/discovery-question.schema.js +2 -2
- package/dist/{shared → protocol}/schemas/identity.schema.d.ts +4 -4
- package/dist/{shared → protocol}/schemas/identity.schema.js +4 -4
- package/dist/{shared → protocol}/schemas/network-assignment.schema.d.ts +11 -20
- package/dist/{shared → protocol}/schemas/network-assignment.schema.js +2 -9
- package/dist/protocol/schemas/underspecification.schema.d.ts +9 -0
- package/dist/protocol/schemas/underspecification.schema.js +12 -0
- package/package.json +7 -15
- package/dist/agents/agent.dispatcher.port.d.ts +0 -25
- package/dist/agents/agent.module.d.ts +0 -19
- package/dist/agents/agent.module.js +0 -11
- package/dist/agents/agent.repository.port.d.ts +0 -118
- package/dist/agents/agent.repository.port.js +0 -10
- package/dist/agents/agent.tools.d.ts +0 -16
- package/dist/agents/agent.tools.js +0 -351
- package/dist/agents/agent.tools.port.d.ts +0 -22
- package/dist/agents/agent.tools.port.js +0 -18
- package/dist/agents/agent.types.d.ts +0 -76
- package/dist/chat/chat-streaming.types.d.ts +0 -618
- package/dist/chat/chat-streaming.types.js +0 -297
- package/dist/chat/chat.agent.d.ts +0 -292
- package/dist/chat/chat.agent.js +0 -1010
- package/dist/chat/chat.graph.d.ts +0 -424
- package/dist/chat/chat.graph.js +0 -257
- package/dist/chat/chat.interrupt.classifier.d.ts +0 -25
- package/dist/chat/chat.interrupt.classifier.js +0 -64
- package/dist/chat/chat.persona.d.ts +0 -39
- package/dist/chat/chat.prompt.d.ts +0 -4
- package/dist/chat/chat.prompt.js +0 -12
- package/dist/chat/chat.prompt.modules.d.ts +0 -30
- package/dist/chat/chat.prompt.modules.js +0 -40
- package/dist/chat/chat.question-dedup.d.ts +0 -14
- package/dist/chat/chat.question-dedup.js +0 -17
- package/dist/chat/chat.state.d.ts +0 -135
- package/dist/chat/chat.state.js +0 -120
- package/dist/chat/chat.streamer.d.ts +0 -64
- package/dist/chat/chat.streamer.js +0 -217
- package/dist/chat/chat.suggester.d.ts +0 -23
- package/dist/chat/chat.suggester.js +0 -95
- package/dist/chat/chat.summarizer.d.ts +0 -20
- package/dist/chat/chat.summarizer.js +0 -97
- package/dist/chat/chat.title.generator.d.ts +0 -19
- package/dist/chat/chat.title.generator.js +0 -66
- package/dist/chat/chat.tools.d.ts +0 -5
- package/dist/chat/chat.tools.js +0 -62
- package/dist/chat/chat.utils.d.ts +0 -41
- package/dist/chat/chat.utils.js +0 -88
- package/dist/chat/negotiator.persona.d.ts +0 -74
- package/dist/chat/negotiator.persona.js +0 -154
- package/dist/chat/negotiator.prompt.d.ts +0 -45
- package/dist/chat/negotiator.prompt.js +0 -160
- package/dist/chat/negotiator.tools.d.ts +0 -42
- package/dist/chat/negotiator.tools.js +0 -134
- package/dist/chat/onboarding.persona.d.ts +0 -28
- package/dist/chat/onboarding.persona.js +0 -86
- package/dist/chat/onboarding.prompt.d.ts +0 -6
- package/dist/chat/onboarding.prompt.js +0 -63
- package/dist/chat/signal.persona.d.ts +0 -47
- package/dist/chat/signal.persona.js +0 -319
- package/dist/chat/signal.prompt.d.ts +0 -39
- package/dist/chat/signal.prompt.js +0 -136
- package/dist/contacts/contact.module.d.ts +0 -8
- package/dist/contacts/contact.module.js +0 -6
- package/dist/contacts/contact.repository.port.d.ts +0 -21
- package/dist/contacts/contact.repository.port.js +0 -12
- package/dist/contacts/contact.tools.d.ts +0 -17
- package/dist/contacts/contact.tools.js +0 -108
- package/dist/contacts/contact.tools.port.d.ts +0 -20
- package/dist/contacts/contact.tools.port.js +0 -16
- package/dist/contacts/contact.types.d.ts +0 -24
- package/dist/contacts/contact.types.js +0 -8
- package/dist/contexts/context.generator.d.ts +0 -95
- package/dist/contexts/context.generator.js +0 -127
- package/dist/contexts/context.module.d.ts +0 -13
- package/dist/contexts/context.module.js +0 -12
- package/dist/contexts/context.tools.port.d.ts +0 -9
- package/dist/discovery/hyde.documents.d.ts +0 -9
- package/dist/discovery/hyde.documents.js +0 -49
- package/dist/discovery/hyde.env.d.ts +0 -8
- package/dist/discovery/hyde.env.js +0 -9
- package/dist/discovery/hyde.frame.d.ts +0 -150
- package/dist/discovery/hyde.frame.js +0 -107
- package/dist/discovery/hyde.generator.d.ts +0 -38
- package/dist/discovery/hyde.generator.js +0 -103
- package/dist/discovery/hyde.graph.d.ts +0 -209
- package/dist/discovery/hyde.graph.js +0 -482
- package/dist/discovery/hyde.state.d.ts +0 -70
- package/dist/discovery/hyde.state.js +0 -85
- package/dist/discovery/hyde.strategies.d.ts +0 -17
- package/dist/discovery/hyde.strategies.js +0 -34
- package/dist/discovery/hyde.validator.d.ts +0 -78
- package/dist/discovery/hyde.validator.js +0 -48
- package/dist/discovery/index.d.ts +0 -26
- package/dist/discovery/index.js +0 -19
- package/dist/discovery/lens.inferrer.d.ts +0 -214
- package/dist/discovery/lens.inferrer.js +0 -152
- package/dist/enrichment/enrichment.generator.d.ts +0 -68
- package/dist/enrichment/enrichment.generator.js +0 -95
- package/dist/enrichment/enrichment.graph.d.ts +0 -544
- package/dist/enrichment/enrichment.graph.js +0 -695
- package/dist/enrichment/enrichment.state.d.ts +0 -141
- package/dist/enrichment/enrichment.state.js +0 -115
- package/dist/enrichment/enrichment.tools.context-read.d.ts +0 -10
- package/dist/enrichment/enrichment.tools.context-read.js +0 -353
- package/dist/enrichment/enrichment.tools.context-write.d.ts +0 -9
- package/dist/enrichment/enrichment.tools.context-write.js +0 -417
- package/dist/enrichment/enrichment.tools.d.ts +0 -13
- package/dist/enrichment/enrichment.tools.helpers.d.ts +0 -139
- package/dist/enrichment/enrichment.tools.helpers.js +0 -234
- package/dist/enrichment/enrichment.tools.js +0 -153
- package/dist/intents/graph/intent.graph.infer.d.ts +0 -44
- package/dist/intents/graph/intent.graph.infer.js +0 -97
- package/dist/intents/graph/intent.graph.js +0 -134
- package/dist/intents/graph/intent.graph.reconcile.js +0 -274
- package/dist/intents/graph/intent.graph.shared.d.ts +0 -68
- package/dist/intents/intake/intake.orchestrator.d.ts +0 -203
- package/dist/intents/intake/intake.orchestrator.js +0 -255
- package/dist/intents/intake/intake.pack.generator.d.ts +0 -57
- package/dist/intents/intake/intake.pack.generator.js +0 -90
- package/dist/intents/intent.clarifier.d.ts +0 -51
- package/dist/intents/intent.clarifier.js +0 -201
- package/dist/intents/intent.indexer.d.ts +0 -82
- package/dist/intents/intent.indexer.js +0 -170
- package/dist/intents/intent.module.js +0 -103
- package/dist/intents/intent.proposal.d.ts +0 -37
- package/dist/intents/intent.proposal.js +0 -14
- package/dist/intents/intent.reconciler.d.ts +0 -105
- package/dist/intents/intent.reconciler.js +0 -186
- package/dist/intents/intent.tools.d.ts +0 -27
- package/dist/intents/intent.tools.js +0 -808
- package/dist/maintenance/maintenance.graph.d.ts +0 -239
- package/dist/maintenance/maintenance.graph.js +0 -199
- package/dist/maintenance/maintenance.state.d.ts +0 -35
- package/dist/maintenance/maintenance.state.js +0 -55
- package/dist/mcp/elicitation.builder.d.ts +0 -53
- package/dist/mcp/elicitation.builder.js +0 -74
- package/dist/mcp/elicitation.dispatcher.d.ts +0 -36
- package/dist/mcp/elicitation.dispatcher.js +0 -86
- package/dist/mcp/mcp.authorization-policy.d.ts +0 -252
- package/dist/mcp/mcp.authorization-policy.js +0 -535
- package/dist/mcp/mcp.server.d.ts +0 -90
- package/dist/mcp/mcp.server.js +0 -631
- package/dist/negotiations/insight.generator.d.ts +0 -31
- package/dist/negotiations/insight.generator.js +0 -105
- package/dist/negotiations/negotiation.agent.d.ts +0 -130
- package/dist/negotiations/negotiation.agent.js +0 -396
- package/dist/negotiations/negotiation.answer-consumption.d.ts +0 -223
- package/dist/negotiations/negotiation.answer-consumption.js +0 -275
- package/dist/negotiations/negotiation.attribution.d.ts +0 -91
- package/dist/negotiations/negotiation.attribution.js +0 -109
- package/dist/negotiations/negotiation.candidates.d.ts +0 -83
- package/dist/negotiations/negotiation.candidates.js +0 -162
- package/dist/negotiations/negotiation.client-dm.d.ts +0 -50
- package/dist/negotiations/negotiation.client-dm.js +0 -66
- package/dist/negotiations/negotiation.consultation-policy.d.ts +0 -95
- package/dist/negotiations/negotiation.consultation-policy.js +0 -159
- package/dist/negotiations/negotiation.deadlock.contracts.d.ts +0 -10
- package/dist/negotiations/negotiation.deadlock.d.ts +0 -87
- package/dist/negotiations/negotiation.deadlock.js +0 -150
- package/dist/negotiations/negotiation.detail-reader.d.ts +0 -94
- package/dist/negotiations/negotiation.detail-reader.js +0 -91
- package/dist/negotiations/negotiation.expected-speaker.d.ts +0 -33
- package/dist/negotiations/negotiation.expected-speaker.js +0 -59
- package/dist/negotiations/negotiation.graph.d.ts +0 -694
- package/dist/negotiations/negotiation.graph.finalize.d.ts +0 -5
- package/dist/negotiations/negotiation.graph.finalize.js +0 -403
- package/dist/negotiations/negotiation.graph.init.d.ts +0 -54
- package/dist/negotiations/negotiation.graph.init.js +0 -256
- package/dist/negotiations/negotiation.graph.js +0 -94
- package/dist/negotiations/negotiation.graph.screen.d.ts +0 -23
- package/dist/negotiations/negotiation.graph.screen.js +0 -108
- package/dist/negotiations/negotiation.graph.shared.d.ts +0 -111
- package/dist/negotiations/negotiation.graph.shared.js +0 -168
- package/dist/negotiations/negotiation.graph.turn.d.ts +0 -134
- package/dist/negotiations/negotiation.graph.turn.js +0 -662
- package/dist/negotiations/negotiation.hermes-contract.d.ts +0 -31
- package/dist/negotiations/negotiation.hermes-contract.js +0 -72
- package/dist/negotiations/negotiation.intent-snapshot-provenance.d.ts +0 -21
- package/dist/negotiations/negotiation.intent-snapshot-provenance.js +0 -28
- package/dist/negotiations/negotiation.lifecycle-narration.d.ts +0 -18
- package/dist/negotiations/negotiation.lifecycle-narration.js +0 -87
- package/dist/negotiations/negotiation.memory.d.ts +0 -65
- package/dist/negotiations/negotiation.memory.js +0 -83
- package/dist/negotiations/negotiation.module.d.ts +0 -36
- package/dist/negotiations/negotiation.module.js +0 -23
- package/dist/negotiations/negotiation.protocol.d.ts +0 -1018
- package/dist/negotiations/negotiation.protocol.js +0 -224
- package/dist/negotiations/negotiation.question-safety.d.ts +0 -52
- package/dist/negotiations/negotiation.question-safety.js +0 -119
- package/dist/negotiations/negotiation.reflect.d.ts +0 -194
- package/dist/negotiations/negotiation.reflect.js +0 -145
- package/dist/negotiations/negotiation.scope.d.ts +0 -41
- package/dist/negotiations/negotiation.scope.js +0 -39
- package/dist/negotiations/negotiation.screen.contracts.d.ts +0 -88
- package/dist/negotiations/negotiation.screen.contracts.js +0 -58
- package/dist/negotiations/negotiation.screen.d.ts +0 -78
- package/dist/negotiations/negotiation.screen.js +0 -112
- package/dist/negotiations/negotiation.stall-gap.d.ts +0 -83
- package/dist/negotiations/negotiation.stall-gap.js +0 -152
- package/dist/negotiations/negotiation.stance.contracts.d.ts +0 -123
- package/dist/negotiations/negotiation.stance.contracts.js +0 -317
- package/dist/negotiations/negotiation.state.d.ts +0 -597
- package/dist/negotiations/negotiation.state.js +0 -286
- package/dist/negotiations/negotiation.summarizer.d.ts +0 -25
- package/dist/negotiations/negotiation.summarizer.js +0 -101
- package/dist/negotiations/negotiation.task-lock-policy.d.ts +0 -10
- package/dist/negotiations/negotiation.task-lock-policy.js +0 -22
- package/dist/negotiations/negotiation.tools.d.ts +0 -18
- package/dist/negotiations/negotiation.tools.js +0 -842
- package/dist/negotiations/negotiation.tools.port.d.ts +0 -17
- package/dist/negotiations/negotiation.turn-cap.d.ts +0 -9
- package/dist/negotiations/negotiation.turn-cap.js +0 -12
- package/dist/networks/indexer.state.js +0 -112
- package/dist/networks/network.tools.d.ts +0 -36
- package/dist/networks/network.tools.js +0 -594
- package/dist/opportunities/delivery-card.cache.d.ts +0 -25
- package/dist/opportunities/delivery-card.cache.js +0 -43
- package/dist/opportunities/discovery.env.d.ts +0 -20
- package/dist/opportunities/discovery.env.js +0 -109
- package/dist/opportunities/discriminator/discriminator.adjustments.d.ts +0 -90
- package/dist/opportunities/discriminator/discriminator.adjustments.js +0 -141
- package/dist/opportunities/discriminator/discriminator.assigner.d.ts +0 -78
- package/dist/opportunities/discriminator/discriminator.assigner.js +0 -153
- package/dist/opportunities/discriminator/discriminator.env.d.ts +0 -103
- package/dist/opportunities/discriminator/discriminator.env.js +0 -103
- package/dist/opportunities/discriminator/discriminator.miner.d.ts +0 -114
- package/dist/opportunities/discriminator/discriminator.miner.js +0 -228
- package/dist/opportunities/discriminator/discriminator.push.d.ts +0 -13
- package/dist/opportunities/discriminator/discriminator.push.js +0 -19
- package/dist/opportunities/discriminator/discriminator.question.d.ts +0 -58
- package/dist/opportunities/discriminator/discriminator.question.js +0 -155
- package/dist/opportunities/discriminator/discriminator.scorer.d.ts +0 -32
- package/dist/opportunities/discriminator/discriminator.scorer.js +0 -105
- package/dist/opportunities/discriminator/discriminator.shadow.d.ts +0 -32
- package/dist/opportunities/discriminator/discriminator.shadow.js +0 -90
- package/dist/opportunities/discriminator/discriminator.types.d.ts +0 -93
- package/dist/opportunities/discriminator/discriminator.types.js +0 -18
- package/dist/opportunities/negotiation-context.loader.d.ts +0 -59
- package/dist/opportunities/negotiation-context.loader.js +0 -90
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.d.ts +0 -43
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.js +0 -44
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.d.ts +0 -24
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.js +0 -188
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.d.ts +0 -26
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.js +0 -112
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.d.ts +0 -19
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.js +0 -61
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.d.ts +0 -191
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.js +0 -18
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.d.ts +0 -34
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.js +0 -91
- package/dist/opportunities/negotiation-summary.builder.d.ts +0 -37
- package/dist/opportunities/negotiation-summary.builder.js +0 -66
- package/dist/opportunities/opportunity.discovery-negotiation-summary.d.ts +0 -14
- package/dist/opportunities/opportunity.discovery-negotiation-summary.js +0 -46
- package/dist/opportunities/opportunity.enricher.d.ts +0 -71
- package/dist/opportunities/opportunity.enricher.js +0 -280
- package/dist/opportunities/opportunity.evaluator.d.ts +0 -289
- package/dist/opportunities/opportunity.evaluator.js +0 -516
- package/dist/opportunities/opportunity.evidence.d.ts +0 -22
- package/dist/opportunities/opportunity.evidence.js +0 -87
- package/dist/opportunities/opportunity.existing-negotiation.d.ts +0 -79
- package/dist/opportunities/opportunity.existing-negotiation.js +0 -118
- package/dist/opportunities/opportunity.feed-selection.js +0 -96
- package/dist/opportunities/opportunity.graph.d.ts +0 -1611
- package/dist/opportunities/opportunity.graph.discovery-strategies.d.ts +0 -109
- package/dist/opportunities/opportunity.graph.discovery-strategies.js +0 -451
- package/dist/opportunities/opportunity.graph.discovery.d.ts +0 -69
- package/dist/opportunities/opportunity.graph.discovery.js +0 -397
- package/dist/opportunities/opportunity.graph.evaluation.d.ts +0 -82
- package/dist/opportunities/opportunity.graph.evaluation.js +0 -608
- package/dist/opportunities/opportunity.graph.js +0 -193
- package/dist/opportunities/opportunity.graph.modes.d.ts +0 -538
- package/dist/opportunities/opportunity.graph.modes.js +0 -538
- package/dist/opportunities/opportunity.graph.negotiate.d.ts +0 -109
- package/dist/opportunities/opportunity.graph.negotiate.js +0 -392
- package/dist/opportunities/opportunity.graph.persist-node.d.ts +0 -93
- package/dist/opportunities/opportunity.graph.persist-node.js +0 -765
- package/dist/opportunities/opportunity.graph.prep.d.ts +0 -150
- package/dist/opportunities/opportunity.graph.prep.js +0 -381
- package/dist/opportunities/opportunity.graph.shared.d.ts +0 -173
- package/dist/opportunities/opportunity.graph.shared.js +0 -199
- package/dist/opportunities/opportunity.introducer-feature.d.ts +0 -2
- package/dist/opportunities/opportunity.introducer-feature.js +0 -4
- package/dist/opportunities/opportunity.introducer.d.ts +0 -77
- package/dist/opportunities/opportunity.introducer.js +0 -99
- package/dist/opportunities/opportunity.labels.js +0 -10
- package/dist/opportunities/opportunity.lifecycle.d.ts +0 -63
- package/dist/opportunities/opportunity.lifecycle.js +0 -181
- package/dist/opportunities/opportunity.module.d.ts +0 -54
- package/dist/opportunities/opportunity.module.js +0 -39
- package/dist/opportunities/opportunity.newborn-stamping.d.ts +0 -41
- package/dist/opportunities/opportunity.newborn-stamping.js +0 -81
- package/dist/opportunities/opportunity.owner-approval.d.ts +0 -118
- package/dist/opportunities/opportunity.owner-approval.js +0 -34
- package/dist/opportunities/opportunity.owner-provenance.d.ts +0 -6
- package/dist/opportunities/opportunity.owner-provenance.js +0 -28
- package/dist/opportunities/opportunity.persist.d.ts +0 -58
- package/dist/opportunities/opportunity.persist.js +0 -145
- package/dist/opportunities/opportunity.persistence-admission.d.ts +0 -39
- package/dist/opportunities/opportunity.persistence-admission.js +0 -59
- package/dist/opportunities/opportunity.state.d.ts +0 -451
- package/dist/opportunities/opportunity.state.js +0 -256
- package/dist/opportunities/opportunity.tools.cards.d.ts +0 -138
- package/dist/opportunities/opportunity.tools.cards.js +0 -212
- package/dist/opportunities/opportunity.tools.d.ts +0 -12
- package/dist/opportunities/opportunity.tools.js +0 -236
- package/dist/opportunities/opportunity.tools.list.d.ts +0 -10
- package/dist/opportunities/opportunity.tools.list.js +0 -489
- package/dist/opportunities/opportunity.tools.port.d.ts +0 -16
- package/dist/opportunities/opportunity.utils.d.ts +0 -217
- package/dist/opportunities/opportunity.utils.js +0 -395
- package/dist/opportunities/outcome/outcome.env.d.ts +0 -60
- package/dist/opportunities/outcome/outcome.env.js +0 -63
- package/dist/opportunities/outcome/outcome.hypotheses.d.ts +0 -29
- package/dist/opportunities/outcome/outcome.hypotheses.js +0 -117
- package/dist/opportunities/outcome/outcome.shadow.d.ts +0 -56
- package/dist/opportunities/outcome/outcome.shadow.js +0 -87
- package/dist/opportunities/outcome/outcome.types.d.ts +0 -110
- package/dist/opportunities/outcome/outcome.types.js +0 -26
- package/dist/opportunities/radar/radar.health.d.ts +0 -31
- package/dist/opportunities/radar/radar.health.js +0 -75
- package/dist/premises/premise.analyzer.d.ts +0 -35
- package/dist/premises/premise.analyzer.js +0 -115
- package/dist/premises/premise.decomposer.d.ts +0 -69
- package/dist/premises/premise.decomposer.js +0 -213
- package/dist/premises/premise.graph.d.ts +0 -345
- package/dist/premises/premise.graph.js +0 -278
- package/dist/premises/premise.indexer.d.ts +0 -35
- package/dist/premises/premise.indexer.js +0 -86
- package/dist/premises/premise.state.d.ts +0 -67
- package/dist/premises/premise.state.js +0 -94
- package/dist/premises/premise.tools.d.ts +0 -3
- package/dist/premises/premise.tools.js +0 -248
- package/dist/questions/question.env.d.ts +0 -27
- package/dist/questions/question.env.js +0 -27
- package/dist/questions/question.input.d.ts +0 -107
- package/dist/questions/question.module.d.ts +0 -30
- package/dist/questions/question.module.js +0 -28
- package/dist/questions/question.schema.d.ts +0 -1529
- package/dist/questions/question.schema.js +0 -420
- package/dist/shared/agent/activity-projection.d.ts +0 -271
- package/dist/shared/agent/activity-projection.js +0 -254
- package/dist/shared/agent/canonical-guidance.d.ts +0 -30
- package/dist/shared/agent/canonical-guidance.js +0 -246
- package/dist/shared/agent/model.resolver.d.ts +0 -48
- package/dist/shared/agent/tool.factory.d.ts +0 -17
- package/dist/shared/agent/tool.factory.js +0 -221
- package/dist/shared/agent/tool.helpers.d.ts +0 -482
- package/dist/shared/agent/tool.helpers.js +0 -232
- package/dist/shared/agent/tool.registry.d.ts +0 -25
- package/dist/shared/agent/tool.registry.js +0 -76
- package/dist/shared/agent/tool.runtime.d.ts +0 -28
- package/dist/shared/agent/tool.runtime.js +0 -194
- package/dist/shared/agent/tool.scope.d.ts +0 -44
- package/dist/shared/agent/tool.scope.js +0 -50
- package/dist/shared/agent/utility.tools.d.ts +0 -15
- package/dist/shared/agent/utility.tools.js +0 -322
- package/dist/shared/assignment/network-assignment.policy.d.ts +0 -61
- package/dist/shared/assignment/network-assignment.policy.js +0 -105
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +0 -100
- package/dist/shared/interfaces/agent-dispatcher.interface.js +0 -12
- package/dist/shared/interfaces/auth.interface.d.ts +0 -37
- package/dist/shared/interfaces/auth.interface.js +0 -1
- package/dist/shared/interfaces/chat-message-writer.interface.d.ts +0 -18
- package/dist/shared/interfaces/chat-message-writer.interface.js +0 -1
- package/dist/shared/interfaces/chat-session.interface.d.ts +0 -23
- package/dist/shared/interfaces/chat-session.interface.js +0 -18
- package/dist/shared/interfaces/chat-summary.interface.d.ts +0 -16
- package/dist/shared/interfaces/chat-summary.interface.js +0 -1
- package/dist/shared/interfaces/database.capabilities.d.ts +0 -100
- package/dist/shared/interfaces/database.interface.d.ts +0 -16
- package/dist/shared/interfaces/database.member-queries.d.ts +0 -219
- package/dist/shared/interfaces/database.member-queries.js +0 -4
- package/dist/shared/interfaces/database.negotiation.d.ts +0 -329
- package/dist/shared/interfaces/database.negotiation.js +0 -26
- package/dist/shared/interfaces/database.network-queries.js +0 -4
- package/dist/shared/interfaces/database.opportunity-queries.js +0 -4
- package/dist/shared/interfaces/delivery-ledger.interface.d.ts +0 -40
- package/dist/shared/interfaces/delivery-ledger.interface.js +0 -5
- package/dist/shared/interfaces/embedder.interface.d.ts +0 -92
- package/dist/shared/interfaces/embedder.interface.js +0 -4
- package/dist/shared/interfaces/enrichment-run.interface.d.ts +0 -62
- package/dist/shared/interfaces/enrichment-run.interface.js +0 -1
- package/dist/shared/interfaces/enrichment.interface.js +0 -1
- package/dist/shared/interfaces/negotiation-events.interface.d.ts +0 -77
- package/dist/shared/interfaces/negotiation-events.interface.js +0 -6
- package/dist/shared/interfaces/negotiation-summary.interface.d.ts +0 -25
- package/dist/shared/interfaces/negotiation-summary.interface.js +0 -1
- package/dist/shared/interfaces/negotiator-memory.interface.d.ts +0 -58
- package/dist/shared/interfaces/negotiator-memory.interface.js +0 -11
- package/dist/shared/interfaces/queue.interface.d.ts +0 -23
- package/dist/shared/interfaces/queue.interface.js +0 -4
- package/dist/shared/interfaces/scraper.interface.js +0 -1
- package/dist/shared/interfaces/tool-request-context.interface.d.ts +0 -11
- package/dist/shared/interfaces/tool-request-context.interface.js +0 -1
- package/dist/shared/observability/request-context.d.ts +0 -27
- package/dist/shared/observability/request-context.js +0 -6
- package/dist/shared/schemas/mcp-auth.schema.d.ts +0 -87
- package/dist/shared/schemas/mcp-auth.schema.js +0 -56
- package/dist/shared/schemas/negotiation-digest.schema.d.ts +0 -58
- package/dist/shared/schemas/negotiation-digest.schema.js +0 -38
- package/dist/shared/schemas/negotiation-state.schema.d.ts +0 -343
- package/dist/shared/schemas/negotiation-state.schema.js +0 -81
- package/dist/shared/schemas/question-block.fixture.d.ts +0 -12
- package/dist/shared/schemas/question-block.fixture.js +0 -39
- package/dist/shared/schemas/question-block.schema.d.ts +0 -111
- package/dist/shared/schemas/question-block.schema.js +0 -124
- package/dist/shared/schemas/structured-question.schema.d.ts +0 -66
- package/dist/shared/schemas/structured-question.schema.js +0 -31
- package/dist/shared/schemas/underspecification.schema.d.ts +0 -13
- package/dist/shared/schemas/underspecification.schema.js +0 -16
- /package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.js +0 -0
- /package/dist/{opportunities → internal/opportunities}/radar/radar.state.js +0 -0
- /package/dist/{shared → internal/shared}/network/metadata.renderer.d.ts +0 -0
- /package/dist/{shared → internal/shared}/network/metadata.renderer.js +0 -0
- /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.js +0 -0
- /package/dist/{shared → internal/shared}/observability/performance.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/performance.js +0 -0
- /package/dist/{shared → internal/shared}/observability/trace.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/trace.js +0 -0
- /package/dist/{shared → internal/shared}/utils/claim-safety.d.ts +0 -0
- /package/dist/{shared → internal/shared}/utils/claim-safety.js +0 -0
- /package/dist/{shared → internal/shared}/utils/telegram-handle.d.ts +0 -0
- /package/dist/{shared → internal/shared}/utils/telegram-handle.js +0 -0
- /package/dist/{shared/interfaces/database.capabilities.js → platform/database/capabilities.js} +0 -0
- /package/dist/{shared/interfaces/database.entities.js → platform/database/entities.js} +0 -0
- /package/dist/{shared/interfaces/database.identity-queries.js → platform/database/identity-queries.js} +0 -0
- /package/dist/{agents/agent.dispatcher.port.js → platform/database/negotiation.js} +0 -0
- /package/dist/{chat/chat.persona.js → platform/database/opportunity-queries.js} +0 -0
- /package/dist/{contexts/context.tools.port.js → platform/discovery/embedder.js} +0 -0
- /package/dist/{shared/interfaces/scraper.interface.d.ts → platform/discovery/scraper.d.ts} +0 -0
- /package/dist/{negotiations/negotiation.deadlock.contracts.js → platform/discovery/scraper.js} +0 -0
- /package/dist/{shared/interfaces/enrichment.interface.d.ts → platform/enrichment/ports.d.ts} +0 -0
- /package/dist/{negotiations/negotiation.tools.port.js → platform/enrichment/ports.js} +0 -0
- /package/dist/{opportunities/opportunity.tools.port.js → platform/runtime/observability.js} +0 -0
- /package/dist/{questions/question.input.js → protocol/core.js} +0 -0
- /package/dist/{shared → protocol}/schemas/chat-context.schema.d.ts +0 -0
- /package/dist/{shared → protocol}/schemas/chat-context.schema.js +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Negotiation context loader: given an opportunity, fetches the turn log of
|
|
3
|
+
* the negotiation attached to it so the card presenter can explain *why* the
|
|
4
|
+
* opportunity surfaced.
|
|
5
|
+
*
|
|
6
|
+
* An expired opportunity's negotiation no longer matters, so the loader
|
|
7
|
+
* returns null for it without asking the host.
|
|
8
|
+
*/
|
|
9
|
+
import type { NegotiationContextDatabase, NegotiationContextOutcome, NegotiationContextTurn, OpportunityStatus } from '../../platform/database.js';
|
|
10
|
+
/** Snapshot of a negotiation surfaced to the presenter. */
|
|
11
|
+
export interface NegotiationContext {
|
|
12
|
+
status: OpportunityStatus;
|
|
13
|
+
turnCount: number;
|
|
14
|
+
turns: NegotiationContextTurn[];
|
|
15
|
+
outcome?: NegotiationContextOutcome;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Loads the negotiation context for an opportunity.
|
|
19
|
+
*
|
|
20
|
+
* @param db - The host's negotiation read.
|
|
21
|
+
* @param opportunityId - The opportunity being presented.
|
|
22
|
+
* @param opportunityStatus - Its current status.
|
|
23
|
+
* @param viewerId - Who the card is being presented to.
|
|
24
|
+
* @returns The context, or null when no meaningful negotiation exists.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadNegotiationContext(db: NegotiationContextDatabase, opportunityId: string, opportunityStatus: OpportunityStatus, viewerId: string): Promise<NegotiationContext | null>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Negotiation context loader: given an opportunity, fetches the turn log of
|
|
3
|
+
* the negotiation attached to it so the card presenter can explain *why* the
|
|
4
|
+
* opportunity surfaced.
|
|
5
|
+
*
|
|
6
|
+
* An expired opportunity's negotiation no longer matters, so the loader
|
|
7
|
+
* returns null for it without asking the host.
|
|
8
|
+
*/
|
|
9
|
+
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
10
|
+
const logger = protocolLogger('NegotiationContextLoader');
|
|
11
|
+
const STATUSES_WITH_NO_NEGOTIATION = ['expired'];
|
|
12
|
+
/**
|
|
13
|
+
* Loads the negotiation context for an opportunity.
|
|
14
|
+
*
|
|
15
|
+
* @param db - The host's negotiation read.
|
|
16
|
+
* @param opportunityId - The opportunity being presented.
|
|
17
|
+
* @param opportunityStatus - Its current status.
|
|
18
|
+
* @param viewerId - Who the card is being presented to.
|
|
19
|
+
* @returns The context, or null when no meaningful negotiation exists.
|
|
20
|
+
*/
|
|
21
|
+
export async function loadNegotiationContext(db, opportunityId, opportunityStatus, viewerId) {
|
|
22
|
+
if (STATUSES_WITH_NO_NEGOTIATION.includes(opportunityStatus)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const record = await db.readNegotiationContext(opportunityId, viewerId);
|
|
26
|
+
if (!record) {
|
|
27
|
+
logger.verbose('No negotiation found for opportunity', { opportunityId, opportunityStatus });
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
status: opportunityStatus,
|
|
32
|
+
turnCount: record.turns.length,
|
|
33
|
+
turns: record.turns,
|
|
34
|
+
...(record.outcome ? { outcome: record.outcome } : {}),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateOpportunityData, OpportunityActor } from '
|
|
1
|
+
import type { CreateOpportunityData, OpportunityActor } from '../../platform/database.js';
|
|
2
2
|
/**
|
|
3
3
|
* Normalize an actor intent value while preserving protocol string IDs.
|
|
4
4
|
* Null-like model sentinels are represented by absence in persisted actors.
|
|
@@ -8,7 +8,13 @@ export function normalizeOpportunityActorIntent(value) {
|
|
|
8
8
|
const normalized = value.trim();
|
|
9
9
|
if (normalized.length === 0
|
|
10
10
|
|| normalized.toLowerCase() === 'null'
|
|
11
|
-
|| normalized.toLowerCase() === 'undefined'
|
|
11
|
+
|| normalized.toLowerCase() === 'undefined'
|
|
12
|
+
// Python's null literal, which evaluators do emit: a candidate actor was
|
|
13
|
+
// persisted with `intent: "None"` in dev and every downstream reader took
|
|
14
|
+
// it for a real binding — the counterparty seat was granted a
|
|
15
|
+
// consultation (whose park writes `recipientIntentId` straight at the
|
|
16
|
+
// intents table) on a signal that does not exist.
|
|
17
|
+
|| normalized.toLowerCase() === 'none') {
|
|
12
18
|
return undefined;
|
|
13
19
|
}
|
|
14
20
|
return normalized;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The counterparty side of a pair discovery scored.
|
|
3
|
+
*
|
|
4
|
+
* Discovery does not stage the pair anywhere: it hands the host the pair and
|
|
5
|
+
* the host opens the opportunity and its negotiation. {@link pairKeyOf} is what
|
|
6
|
+
* keeps that idempotent across both principals' runs.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Stable identity of a two-intent pair within a network, independent of which
|
|
10
|
+
* side's discovery run found it.
|
|
11
|
+
*
|
|
12
|
+
* Ids are length-prefixed rather than joined on a separator: an id containing
|
|
13
|
+
* the separator would otherwise let two different pairs produce one key, and
|
|
14
|
+
* this key is a uniqueness constraint.
|
|
15
|
+
*/
|
|
16
|
+
export declare function pairKeyOf(networkId: string, intentA: string, intentB: string): string;
|
|
17
|
+
export type { CreateIntentCounterpartyData, OpenedNegotiation, } from '../../platform/database.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The counterparty side of a pair discovery scored.
|
|
3
|
+
*
|
|
4
|
+
* Discovery does not stage the pair anywhere: it hands the host the pair and
|
|
5
|
+
* the host opens the opportunity and its negotiation. {@link pairKeyOf} is what
|
|
6
|
+
* keeps that idempotent across both principals' runs.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Stable identity of a two-intent pair within a network, independent of which
|
|
10
|
+
* side's discovery run found it.
|
|
11
|
+
*
|
|
12
|
+
* Ids are length-prefixed rather than joined on a separator: an id containing
|
|
13
|
+
* the separator would otherwise let two different pairs produce one key, and
|
|
14
|
+
* this key is a uniqueness constraint.
|
|
15
|
+
*/
|
|
16
|
+
export function pairKeyOf(networkId, intentA, intentB) {
|
|
17
|
+
const [low, high] = intentA <= intentB ? [intentA, intentB] : [intentB, intentA];
|
|
18
|
+
return [networkId, low, high].map((part) => `${part.length}:${part}`).join('');
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Append-only opportunity facts. The row status is a projection of these. */
|
|
2
|
+
export type OpportunityEventType = 'opened' | 'agreed' | 'committed' | 'declined' | 'expired';
|
|
3
|
+
export interface OpportunityLogEvent {
|
|
4
|
+
type: OpportunityEventType;
|
|
5
|
+
/** Set only for `committed`. */
|
|
6
|
+
actorUserId: string | null;
|
|
7
|
+
}
|
|
8
|
+
export type OpportunityProjectionStatus = 'negotiating' | 'pending' | 'accepted' | 'rejected' | 'expired';
|
|
9
|
+
export interface OpportunityProjection {
|
|
10
|
+
status: OpportunityProjectionStatus;
|
|
11
|
+
committedActorIds: string[];
|
|
12
|
+
}
|
|
13
|
+
export type OpportunityAdmission = {
|
|
14
|
+
ok: true;
|
|
15
|
+
projection: OpportunityProjection;
|
|
16
|
+
introduction: boolean;
|
|
17
|
+
} | {
|
|
18
|
+
ok: false;
|
|
19
|
+
error: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Fold an opportunity's event log into the status readers filter on.
|
|
23
|
+
*
|
|
24
|
+
* @param events - Log order, oldest first. The first event is `opened`.
|
|
25
|
+
* @param actorIds - Distinct named humans on the opportunity.
|
|
26
|
+
* @returns The projected status. A log that breaks the admission rules throws.
|
|
27
|
+
*/
|
|
28
|
+
export declare function projectOpportunity(events: OpportunityLogEvent[], actorIds: string[]): OpportunityProjection;
|
|
29
|
+
/**
|
|
30
|
+
* Decide whether one event may be appended, and what the row becomes.
|
|
31
|
+
*
|
|
32
|
+
* @param events - Events already stored, oldest first.
|
|
33
|
+
* @param actorIds - Distinct named humans on the opportunity.
|
|
34
|
+
* @param event - The event to append.
|
|
35
|
+
* @returns The next projection, or why the event is illegal. `introduction` is
|
|
36
|
+
* true only when this commit is the one that completes the set.
|
|
37
|
+
*/
|
|
38
|
+
export declare function admitOpportunityEvent(events: OpportunityLogEvent[], actorIds: string[], event: OpportunityLogEvent): OpportunityAdmission;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const TERMINAL = new Set(['accepted', 'rejected', 'expired']);
|
|
2
|
+
const EMPTY = { status: 'negotiating', committedActorIds: [], opened: false };
|
|
3
|
+
function visible(state) {
|
|
4
|
+
return { status: state.status, committedActorIds: state.committedActorIds };
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Fold an opportunity's event log into the status readers filter on.
|
|
8
|
+
*
|
|
9
|
+
* @param events - Log order, oldest first. The first event is `opened`.
|
|
10
|
+
* @param actorIds - Distinct named humans on the opportunity.
|
|
11
|
+
* @returns The projected status. A log that breaks the admission rules throws.
|
|
12
|
+
*/
|
|
13
|
+
export function projectOpportunity(events, actorIds) {
|
|
14
|
+
return visible(events.reduce((projection, event) => {
|
|
15
|
+
const next = applyEvent(projection, actorIds, event);
|
|
16
|
+
if (!next.ok)
|
|
17
|
+
throw new Error(next.error);
|
|
18
|
+
return next.state;
|
|
19
|
+
}, EMPTY));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Decide whether one event may be appended, and what the row becomes.
|
|
23
|
+
*
|
|
24
|
+
* @param events - Events already stored, oldest first.
|
|
25
|
+
* @param actorIds - Distinct named humans on the opportunity.
|
|
26
|
+
* @param event - The event to append.
|
|
27
|
+
* @returns The next projection, or why the event is illegal. `introduction` is
|
|
28
|
+
* true only when this commit is the one that completes the set.
|
|
29
|
+
*/
|
|
30
|
+
export function admitOpportunityEvent(events, actorIds, event) {
|
|
31
|
+
let state = EMPTY;
|
|
32
|
+
for (const existing of events) {
|
|
33
|
+
const step = applyEvent(state, actorIds, existing);
|
|
34
|
+
if (!step.ok)
|
|
35
|
+
return step;
|
|
36
|
+
state = step.state;
|
|
37
|
+
}
|
|
38
|
+
const admitted = applyEvent(state, actorIds, event);
|
|
39
|
+
if (!admitted.ok)
|
|
40
|
+
return admitted;
|
|
41
|
+
return { ok: true, introduction: admitted.introduction, projection: visible(admitted.state) };
|
|
42
|
+
}
|
|
43
|
+
function applyEvent(projection, actorIds, event) {
|
|
44
|
+
if (event.type === 'opened') {
|
|
45
|
+
if (projection.opened)
|
|
46
|
+
return { ok: false, error: 'This opportunity is already open.' };
|
|
47
|
+
return { ok: true, introduction: false, state: { ...EMPTY, opened: true } };
|
|
48
|
+
}
|
|
49
|
+
if (!projection.opened)
|
|
50
|
+
return { ok: false, error: 'This opportunity is not open.' };
|
|
51
|
+
if (TERMINAL.has(projection.status)) {
|
|
52
|
+
return { ok: false, error: 'This opportunity can no longer change.' };
|
|
53
|
+
}
|
|
54
|
+
if (event.type === 'agreed') {
|
|
55
|
+
if (projection.status !== 'negotiating')
|
|
56
|
+
return { ok: false, error: 'Agents have not agreed yet.' };
|
|
57
|
+
return { ok: true, introduction: false, state: { ...projection, status: 'pending' } };
|
|
58
|
+
}
|
|
59
|
+
if (event.type === 'declined' || event.type === 'expired') {
|
|
60
|
+
if (projection.status !== 'negotiating' && projection.status !== 'pending') {
|
|
61
|
+
return { ok: false, error: 'This opportunity can no longer change.' };
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
ok: true,
|
|
65
|
+
introduction: false,
|
|
66
|
+
state: {
|
|
67
|
+
opened: true,
|
|
68
|
+
status: event.type === 'declined' ? 'rejected' : 'expired',
|
|
69
|
+
committedActorIds: projection.committedActorIds,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (projection.status !== 'pending')
|
|
74
|
+
return { ok: false, error: 'Agents have not agreed yet.' };
|
|
75
|
+
const actorUserId = event.actorUserId;
|
|
76
|
+
if (!actorUserId || !actorIds.includes(actorUserId)) {
|
|
77
|
+
return { ok: false, error: 'You are not part of this opportunity.' };
|
|
78
|
+
}
|
|
79
|
+
if (projection.committedActorIds.includes(actorUserId)) {
|
|
80
|
+
return { ok: false, error: 'You have already acted on this opportunity.' };
|
|
81
|
+
}
|
|
82
|
+
const committedActorIds = [...projection.committedActorIds, actorUserId];
|
|
83
|
+
const distinct = [...new Set(actorIds)];
|
|
84
|
+
const complete = distinct.length > 0 && distinct.every((id) => committedActorIds.includes(id));
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
introduction: complete,
|
|
88
|
+
state: {
|
|
89
|
+
opened: true,
|
|
90
|
+
status: complete ? 'accepted' : 'pending',
|
|
91
|
+
committedActorIds,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { ChatGraphCompositeDatabase, Opportunity } from '../shared/interfaces/database.interface.js';
|
|
1
|
+
import type { CompositeDatabase, Opportunity } from '../../platform/database.js';
|
|
3
2
|
export interface OpportunityFeedSelectionInput {
|
|
4
|
-
reader: Pick<
|
|
5
|
-
deliveryLedger?: Pick<DeliveryLedger, 'getDeliveredOpportunities'>;
|
|
3
|
+
reader: Pick<CompositeDatabase, 'getOpportunitiesForUser'>;
|
|
6
4
|
viewerId: string;
|
|
7
5
|
networkId?: string;
|
|
8
6
|
intentScope: {
|
|
9
7
|
scopeType?: 'intent';
|
|
10
8
|
scopeId?: string;
|
|
11
9
|
};
|
|
12
|
-
isMcp: boolean;
|
|
13
|
-
includeDigestMarkers?: boolean;
|
|
14
10
|
displayLimit: number;
|
|
15
11
|
warn: (message: string, data: Record<string, unknown>) => void;
|
|
16
12
|
}
|
|
@@ -18,13 +14,11 @@ export interface OpportunityFeedSelection {
|
|
|
18
14
|
opportunities: Opportunity[];
|
|
19
15
|
dedupedCount: number;
|
|
20
16
|
skippedIds: string[];
|
|
21
|
-
redeliveryIds: Set<string>;
|
|
22
17
|
fetchedCount: number;
|
|
23
|
-
isDigestMode: boolean;
|
|
24
18
|
}
|
|
25
19
|
/**
|
|
26
20
|
* Selects actionable opportunities for the chat/feed surface. The caller actor
|
|
27
21
|
* check is deliberately the first post-read filter so non-actor rows cannot
|
|
28
|
-
* affect
|
|
22
|
+
* affect selection or downstream profile/presentation reads.
|
|
29
23
|
*/
|
|
30
24
|
export declare function selectOpportunityFeed(args: OpportunityFeedSelectionInput): Promise<OpportunityFeedSelection>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { deduplicateByPerson, selectByComposition } from './opportunity.utils.js';
|
|
2
|
+
const ACTIONABLE_FEED_STATUSES = ['pending'];
|
|
3
|
+
const FEED_FETCH_LIMIT = 30;
|
|
4
|
+
/**
|
|
5
|
+
* Selects actionable opportunities for the chat/feed surface. The caller actor
|
|
6
|
+
* check is deliberately the first post-read filter so non-actor rows cannot
|
|
7
|
+
* affect selection or downstream profile/presentation reads.
|
|
8
|
+
*/
|
|
9
|
+
export async function selectOpportunityFeed(args) {
|
|
10
|
+
const fetched = await args.reader.getOpportunitiesForUser(args.viewerId, {
|
|
11
|
+
networkId: args.networkId,
|
|
12
|
+
...args.intentScope,
|
|
13
|
+
statuses: ACTIONABLE_FEED_STATUSES,
|
|
14
|
+
limit: FEED_FETCH_LIMIT,
|
|
15
|
+
});
|
|
16
|
+
const skippedIds = [];
|
|
17
|
+
const callerScoped = fetched.filter((opportunity) => {
|
|
18
|
+
if (opportunity.actors.some((actor) => actor.userId === args.viewerId))
|
|
19
|
+
return true;
|
|
20
|
+
args.warn('Opportunity feed: skipping opportunity where caller is not an actor', {
|
|
21
|
+
opportunityId: opportunity.id,
|
|
22
|
+
viewerId: args.viewerId,
|
|
23
|
+
actorUserIds: opportunity.actors
|
|
24
|
+
.map((actor) => actor.userId)
|
|
25
|
+
.filter((userId) => typeof userId === 'string'),
|
|
26
|
+
});
|
|
27
|
+
skippedIds.push(opportunity.id);
|
|
28
|
+
return false;
|
|
29
|
+
});
|
|
30
|
+
const deduped = deduplicateByPerson(callerScoped, args.viewerId);
|
|
31
|
+
const selected = deduped.length > 0
|
|
32
|
+
? selectByComposition(deduped, args.viewerId)
|
|
33
|
+
: deduped;
|
|
34
|
+
return {
|
|
35
|
+
opportunities: selected.slice(0, args.displayLimit),
|
|
36
|
+
dedupedCount: deduped.length,
|
|
37
|
+
skippedIds,
|
|
38
|
+
fetchedCount: fetched.length,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The opportunity operations that are not discovery.
|
|
3
|
+
*
|
|
4
|
+
* These used to be graph nodes reached through an `operationMode` conditional
|
|
5
|
+
* edge at START — nine one-node paths sharing a state machine they never used.
|
|
6
|
+
* They are plain async functions now; callers invoke the one they mean. Only
|
|
7
|
+
* the discovery pipeline still needs a graph.
|
|
8
|
+
*
|
|
9
|
+
* Each returns the same shape the corresponding node returned, so callers read
|
|
10
|
+
* `readResult` / `mutationResult` exactly as before.
|
|
11
|
+
*/
|
|
12
|
+
import type { Id } from '../../platform/database.js';
|
|
13
|
+
import type { OpportunityDatabase } from '../../platform/database.js';
|
|
14
|
+
/**
|
|
15
|
+
* Read mode: list opportunities for the user, optionally filtered by networkId.
|
|
16
|
+
* Fast path — no LLM calls.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readOpportunities(deps: {
|
|
19
|
+
database: OpportunityDatabase;
|
|
20
|
+
}, request: {
|
|
21
|
+
userId: Id<'users'>;
|
|
22
|
+
networkId?: Id<'networks'>;
|
|
23
|
+
}): Promise<{
|
|
24
|
+
readResult: {
|
|
25
|
+
count: number;
|
|
26
|
+
message: string;
|
|
27
|
+
opportunities: {
|
|
28
|
+
id: string;
|
|
29
|
+
networkName: string;
|
|
30
|
+
connectedWith: string[];
|
|
31
|
+
suggestedBy: null;
|
|
32
|
+
reasoning: string;
|
|
33
|
+
status: import("../../platform/database.js").OpportunityStatus;
|
|
34
|
+
category: string;
|
|
35
|
+
confidence: number | null;
|
|
36
|
+
source: string | null;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
}>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The opportunity operations that are not discovery.
|
|
3
|
+
*
|
|
4
|
+
* These used to be graph nodes reached through an `operationMode` conditional
|
|
5
|
+
* edge at START — nine one-node paths sharing a state machine they never used.
|
|
6
|
+
* They are plain async functions now; callers invoke the one they mean. Only
|
|
7
|
+
* the discovery pipeline still needs a graph.
|
|
8
|
+
*
|
|
9
|
+
* Each returns the same shape the corresponding node returned, so callers read
|
|
10
|
+
* `readResult` / `mutationResult` exactly as before.
|
|
11
|
+
*/
|
|
12
|
+
import { timed } from '../shared/observability/performance.js';
|
|
13
|
+
import { safeFallbackSummary } from "./opportunity.presentation.js";
|
|
14
|
+
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
15
|
+
const readLog = protocolLogger('Opportunity:Read');
|
|
16
|
+
/**
|
|
17
|
+
* Read mode: list opportunities for the user, optionally filtered by networkId.
|
|
18
|
+
* Fast path — no LLM calls.
|
|
19
|
+
*/
|
|
20
|
+
export async function readOpportunities(deps, request) {
|
|
21
|
+
return timed("OpportunityGraph.read", async () => {
|
|
22
|
+
readLog.verbose('Listing opportunities', {
|
|
23
|
+
userId: request.userId,
|
|
24
|
+
networkId: request.networkId,
|
|
25
|
+
});
|
|
26
|
+
try {
|
|
27
|
+
let networkIdFilter;
|
|
28
|
+
if (request.networkId) {
|
|
29
|
+
const [isMember, isOwner] = await Promise.all([
|
|
30
|
+
deps.database.isNetworkMember(request.networkId, request.userId),
|
|
31
|
+
deps.database.isNetworkOwner(request.networkId, request.userId),
|
|
32
|
+
]);
|
|
33
|
+
if (!isMember && !isOwner) {
|
|
34
|
+
return {
|
|
35
|
+
readResult: { count: 0, opportunities: [], message: 'Network not found or you are not a member.' },
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
networkIdFilter = request.networkId;
|
|
39
|
+
}
|
|
40
|
+
const rawList = await deps.database.getOpportunitiesForUser(request.userId, {
|
|
41
|
+
limit: 30,
|
|
42
|
+
...(networkIdFilter ? { networkId: networkIdFilter } : {}),
|
|
43
|
+
});
|
|
44
|
+
const list = rawList.filter((opp) => opp.status !== 'expired');
|
|
45
|
+
if (list.length === 0) {
|
|
46
|
+
return {
|
|
47
|
+
readResult: {
|
|
48
|
+
count: 0,
|
|
49
|
+
message: 'You have no opportunities yet. Create or refine an approved signal; matching runs in the background. Review persisted results later from the opportunities read.',
|
|
50
|
+
opportunities: [],
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Dedupe by counterpart set (same people = one row) so chat does not show "You and X" per network
|
|
55
|
+
const counterpartKey = (opp) => opp.actors
|
|
56
|
+
.filter((a) => a.userId !== request.userId)
|
|
57
|
+
.map((a) => a.userId)
|
|
58
|
+
.sort()
|
|
59
|
+
.join(',');
|
|
60
|
+
const byKey = new Map();
|
|
61
|
+
for (const opp of list) {
|
|
62
|
+
const key = counterpartKey(opp);
|
|
63
|
+
const existing = byKey.get(key);
|
|
64
|
+
const conf = Number(opp.interpretation?.confidence ?? opp.confidence ?? 0);
|
|
65
|
+
const existingConf = existing ? Number(existing.interpretation?.confidence ?? existing.confidence ?? 0) : 0;
|
|
66
|
+
const oppTime = opp.updatedAt instanceof Date ? opp.updatedAt.getTime() : new Date(opp.updatedAt).getTime();
|
|
67
|
+
const existingTime = existing
|
|
68
|
+
? (existing.updatedAt instanceof Date ? existing.updatedAt.getTime() : new Date(existing.updatedAt).getTime())
|
|
69
|
+
: 0;
|
|
70
|
+
if (!existing || conf > existingConf || (conf === existingConf && oppTime > existingTime)) {
|
|
71
|
+
byKey.set(key, opp);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const dedupedList = [...byKey.values()];
|
|
75
|
+
const enriched = await Promise.all(dedupedList.map(async (opp) => {
|
|
76
|
+
// "Other parties" = every actor who is not the current user.
|
|
77
|
+
const otherParties = opp.actors.filter((a) => a.userId !== request.userId);
|
|
78
|
+
const partyIds = otherParties.map((a) => a.userId);
|
|
79
|
+
const idsToResolve = partyIds;
|
|
80
|
+
// Use the counterpart's (non-viewer) networkId — it reflects where the match was found.
|
|
81
|
+
// actors[0] is typically the viewer with an arbitrary first-target-network value.
|
|
82
|
+
const counterpartActor = opp.actors.find((a) => a.userId !== request.userId);
|
|
83
|
+
const actorNetworkId = counterpartActor?.networkId ?? opp.actors[0]?.networkId;
|
|
84
|
+
const [networkRecord, ...profileAndUserPairs] = await Promise.all([
|
|
85
|
+
actorNetworkId ? deps.database.getNetwork(actorNetworkId) : Promise.resolve(null),
|
|
86
|
+
...idsToResolve.map(async (uid) => {
|
|
87
|
+
const [profile, user] = await Promise.all([
|
|
88
|
+
deps.database.getProfile(uid),
|
|
89
|
+
deps.database.getUser(uid),
|
|
90
|
+
]);
|
|
91
|
+
return (profile?.identity?.name ?? user?.name ?? 'Unknown');
|
|
92
|
+
}),
|
|
93
|
+
]);
|
|
94
|
+
const connectedWith = profileAndUserPairs.slice(0, partyIds.length);
|
|
95
|
+
const suggestedBy = null;
|
|
96
|
+
const category = opp.interpretation?.category ?? 'connection';
|
|
97
|
+
const confidence = opp.interpretation?.confidence ?? (opp.confidence ? Number(opp.confidence) : null);
|
|
98
|
+
const source = opp.detection?.source ? (OPPORTUNITY_SOURCE_LABEL[opp.detection.source] ?? opp.detection.source) : null;
|
|
99
|
+
return {
|
|
100
|
+
id: opp.id,
|
|
101
|
+
networkName: networkRecord?.title ?? (actorNetworkId ?? ''),
|
|
102
|
+
connectedWith,
|
|
103
|
+
suggestedBy,
|
|
104
|
+
reasoning: safeFallbackSummary(opp.interpretation?.reasoning, {
|
|
105
|
+
counterpartName: connectedWith.join(' and '),
|
|
106
|
+
emptyText: 'Connection opportunity',
|
|
107
|
+
}),
|
|
108
|
+
status: opp.status,
|
|
109
|
+
category,
|
|
110
|
+
confidence: confidence != null ? confidence : null,
|
|
111
|
+
source,
|
|
112
|
+
};
|
|
113
|
+
}));
|
|
114
|
+
return {
|
|
115
|
+
readResult: {
|
|
116
|
+
count: enriched.length,
|
|
117
|
+
message: `You have ${enriched.length} opportunity(ies).`,
|
|
118
|
+
opportunities: enriched,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
readLog.error('Failed', { error: err });
|
|
124
|
+
return {
|
|
125
|
+
readResult: { count: 0, opportunities: [], message: 'Failed to list opportunities.' },
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/** Human-readable label per detection source, for the read-mode listing. */
|
|
131
|
+
const OPPORTUNITY_SOURCE_LABEL = {
|
|
132
|
+
chat: 'Suggested in chat',
|
|
133
|
+
opportunity_graph: 'System match',
|
|
134
|
+
manual: 'Manual',
|
|
135
|
+
cron: 'Scheduled',
|
|
136
|
+
member_added: 'Member added',
|
|
137
|
+
// Read-only history: nothing stamps this source any more, but old rows carry it.
|
|
138
|
+
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
/** Max chars for main text in minimal opportunity cards
|
|
1
|
+
/** Max chars for main text in minimal opportunity cards. Full text shown so cards are not truncated. */
|
|
2
2
|
export declare const MINIMAL_MAIN_TEXT_MAX_CHARS = 2000;
|
|
3
3
|
/** Hardcoded button labels for opportunity cards (not LLM-generated). */
|
|
4
|
-
export declare const PRIMARY_ACTION_LABEL_INTRODUCER = "Good match";
|
|
5
4
|
export declare const PRIMARY_ACTION_LABEL_DEFAULT = "Start Chat";
|
|
6
5
|
export declare const SECONDARY_ACTION_LABEL = "Skip";
|
|
7
6
|
/** Returns the primary action label based on the viewer's role. */
|
|
8
|
-
export declare function getPrimaryActionLabel(
|
|
7
|
+
export declare function getPrimaryActionLabel(_viewerRole: string): string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Max chars for main text in minimal opportunity cards. 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_DEFAULT = "Start Chat";
|
|
5
|
+
export const SECONDARY_ACTION_LABEL = "Skip";
|
|
6
|
+
/** Returns the primary action label based on the viewer's role. */
|
|
7
|
+
export function getPrimaryActionLabel(_viewerRole) {
|
|
8
|
+
return PRIMARY_ACTION_LABEL_DEFAULT;
|
|
9
|
+
}
|