@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
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { requestContext } from "../observability/request-context.js";
|
|
3
|
-
import { ActivitySummaryResponseSchema, McpActivityCallerSchema, activitySummaryNetworkId, projectActivitySummary } from "./activity-projection.js";
|
|
4
|
-
import { CANONICAL_GUIDANCE_SUMMARY, CANONICAL_GUIDANCE_TOPICS, CANONICAL_GUIDANCE_TOPICS_CONTENT } from "./canonical-guidance.js";
|
|
5
|
-
import { success, error, normalizeUrl } from "./tool.helpers.js";
|
|
6
|
-
/** Owner-trusted surfaces (REST/chat) receive the full owner view. */
|
|
7
|
-
const HUMAN_OWNER_CALLER = {
|
|
8
|
-
kind: "human",
|
|
9
|
-
permissions: [],
|
|
10
|
-
networkScopeId: null,
|
|
11
|
-
};
|
|
12
|
-
export function createUtilityTools(defineTool, deps, options = {}) {
|
|
13
|
-
const { scraper } = deps;
|
|
14
|
-
const isMcpSurface = options.surface === "mcp";
|
|
15
|
-
// scrape_url is omitted from the MCP tool surface (IND-597). It remains
|
|
16
|
-
// available via the direct HTTP Tool API and the chat agent.
|
|
17
|
-
const scrapeUrl = isMcpSurface ? null : defineTool({
|
|
18
|
-
name: "scrape_url",
|
|
19
|
-
description: "Extracts text content from a web URL — articles, LinkedIn/GitHub profiles, documentation, project pages, etc. " +
|
|
20
|
-
"Returns the page's text content (up to 10,000 characters) for use in subsequent tool calls.\n\n" +
|
|
21
|
-
"**When to use:**\n" +
|
|
22
|
-
"- Before create_intent: when the user shares a URL and wants to create an intent from it. Scrape first, then synthesize into a description.\n" +
|
|
23
|
-
"- Before create_user_context or update_user_context: when the user shares a profile URL to update their profile from.\n" +
|
|
24
|
-
"- When the user asks about content at a URL.\n\n" +
|
|
25
|
-
"**URL format:** Bare domains work fine (e.g. 'github.com/user/repo') — protocol (https://) is added automatically.\n\n" +
|
|
26
|
-
"**Returns:** `{ url, contentLength, content }`. Content is truncated at 10,000 chars. " +
|
|
27
|
-
"Returns an error if the URL is unreachable, requires login, or has no extractable text.",
|
|
28
|
-
querySchema: z.object({
|
|
29
|
-
url: z.string().describe("The URL to extract content from. Protocol is optional — 'github.com/user/repo', 'linkedin.com/in/name', and 'https://example.com' all work."),
|
|
30
|
-
objective: z.string().optional().describe("Why you're scraping — guides content extraction for better results. Examples: 'User wants to create an intent from this project page', 'User wants to update their profile from this LinkedIn page', 'Extract key information about this company'. Omit for generic text extraction."),
|
|
31
|
-
}),
|
|
32
|
-
handler: async ({ context: _context, query }) => {
|
|
33
|
-
const normalizedUrl = normalizeUrl(query.url);
|
|
34
|
-
if (!normalizedUrl) {
|
|
35
|
-
return error("Invalid URL format. Please provide a valid URL (e.g. 'github.com/user/repo' or 'https://example.com').");
|
|
36
|
-
}
|
|
37
|
-
const content = await scraper.extractUrlContent(normalizedUrl, {
|
|
38
|
-
objective: query.objective?.trim() || undefined,
|
|
39
|
-
signal: requestContext.getStore()?.abortSignal,
|
|
40
|
-
});
|
|
41
|
-
if (!content) {
|
|
42
|
-
return error("Couldn't extract content from that URL. It may be blocked, require login, or have no extractable text.");
|
|
43
|
-
}
|
|
44
|
-
const truncatedContent = content.length > 10000
|
|
45
|
-
? content.substring(0, 10000) + "\n\n[Content truncated...]"
|
|
46
|
-
: content;
|
|
47
|
-
return success({
|
|
48
|
-
url: normalizedUrl,
|
|
49
|
-
contentLength: content.length,
|
|
50
|
-
content: truncatedContent,
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
const readDocs = defineTool({
|
|
55
|
-
name: "read_docs",
|
|
56
|
-
description: "Returns comprehensive documentation about the Index Network protocol — entity model, workflows, tool usage guidance, and domain concepts. " +
|
|
57
|
-
"This is the primary way for an external agent to bootstrap understanding of the system.\n\n" +
|
|
58
|
-
"**When to use:** Call this FIRST when starting a new session.\n" +
|
|
59
|
-
"Also call when you need to understand identity, context, premises, signals, communities, networks, opportunities, or negotiations.\n\n" +
|
|
60
|
-
"**Returns:** Markdown documentation. Pass `topic` to get a specific section, or omit for the summary.\n\n" +
|
|
61
|
-
`**Available canonical topics:** ${CANONICAL_GUIDANCE_TOPICS.join(", ")}`,
|
|
62
|
-
querySchema: z.object({
|
|
63
|
-
topic: z.string().optional().describe(`Narrow to a canonical topic: ${CANONICAL_GUIDANCE_TOPICS.join(", ")}. Omit to get the summary.`),
|
|
64
|
-
}),
|
|
65
|
-
handler: async ({ context: _context, query }) => {
|
|
66
|
-
const topic = query.topic?.trim().toLowerCase();
|
|
67
|
-
// Canonical guidance is the MCP read_docs foundation. When on MCP surface,
|
|
68
|
-
// legacy supplemental topics (entities, intents, opportunities, etc.) are
|
|
69
|
-
// omitted to avoid repeating the canonical source (IND-602/603).
|
|
70
|
-
// REST/chat surfaces retain full topic coverage for backwards compatibility.
|
|
71
|
-
if (isMcpSurface) {
|
|
72
|
-
// MCP surface: use canonical guidance only.
|
|
73
|
-
if (!topic) {
|
|
74
|
-
// Return summary of canonical guidance
|
|
75
|
-
return success({ content: CANONICAL_GUIDANCE_SUMMARY });
|
|
76
|
-
}
|
|
77
|
-
// Try to match canonical topic
|
|
78
|
-
const normalizedTopic = topic.replace(/_/g, "-").toLowerCase();
|
|
79
|
-
for (const canonicalTopic of CANONICAL_GUIDANCE_TOPICS) {
|
|
80
|
-
if (canonicalTopic === normalizedTopic || normalizedTopic.includes(canonicalTopic.split("-")[0])) {
|
|
81
|
-
return success({ topic: canonicalTopic, content: CANONICAL_GUIDANCE_TOPICS_CONTENT[canonicalTopic] });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Unknown topic on MCP surface
|
|
85
|
-
return success({
|
|
86
|
-
content: `Unknown canonical topic "${topic}". Available topics: ${CANONICAL_GUIDANCE_TOPICS.join(", ")}. Request summary for full canonical guidance.`,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
// REST/chat surfaces: provide full legacy documentation alongside canonical.
|
|
90
|
-
// Contact management tools are not exposed on the MCP surface (IND-596), so
|
|
91
|
-
// full guidance includes contact workflows. This is for REST/chat only.
|
|
92
|
-
const contactsSection = `## Contact Management
|
|
93
|
-
|
|
94
|
-
Contacts are people in a user's personal network, stored as members of their personal network with 'contact' permission.
|
|
95
|
-
|
|
96
|
-
- **How contacts arise**: Accepting an opportunity puts both people in each other's personal network. There is no import or manual-add path.
|
|
97
|
-
- **Personal network scope**: Approved signals from personal-network contacts are matched in the background. Use list_opportunities only to review persisted results.
|
|
98
|
-
- **Contact data**: Each contact has userId, name, email, and avatar.
|
|
99
|
-
|
|
100
|
-
### Contact Workflow
|
|
101
|
-
1. list_contacts → view all contacts with userId
|
|
102
|
-
2. create_intent or update_intent → create or refine an approved signal for background matching
|
|
103
|
-
3. list_opportunities → review persisted results when background processing finds matches
|
|
104
|
-
4. remove_contact(contactUserId) → remove from network`;
|
|
105
|
-
const managingContactsWorkflow = `### Managing Contacts
|
|
106
|
-
1. list_contacts() → view network
|
|
107
|
-
2. create_intent or update_intent → create or refine an approved signal for background matching
|
|
108
|
-
3. list_opportunities → review persisted results
|
|
109
|
-
|
|
110
|
-
`;
|
|
111
|
-
const sections = {
|
|
112
|
-
// Legacy topics (REST/chat only)
|
|
113
|
-
entities: `## Entity Model & Relationships
|
|
114
|
-
|
|
115
|
-
- **Users**: People on the platform. Authenticated via API key (X-API-Key header) for MCP/external agents, or session-based (Better Auth) for the web app.
|
|
116
|
-
- **Profiles**: A user's identity — name, bio, skills, interests, location, social links. Generated from account data or social URLs via enrichment. One profile per user.
|
|
117
|
-
- **Indexes** (also called "networks"): Communities or groups where members share intents and discover opportunities. Each has a title, optional prompt (purpose description), join policy (anyone or invite_only), and an owner. The user's **personal network** (isPersonal=true) stores their contacts.
|
|
118
|
-
- **Network Members**: Junction between Users and Indexes. Tracks permissions (owner, member, contact), join date, auto-assign setting, and optional member prompt.
|
|
119
|
-
- **Intents**: Signals of interest/need — what a user is looking for (e.g. "Looking for a React developer in Berlin"). Each has a description (payload), summary, confidence score (0-1), inferenceType (explicit/implicit), source tracking, and vector embedding.
|
|
120
|
-
- **IntentNetworks**: Many-to-many junction between Intents and Indexes. An intent can be in multiple indexes. Has a relevancyScore (0-1) indicating how well the intent fits the index's purpose.
|
|
121
|
-
- **Opportunities**: Discovered connections between users based on complementary intents within shared networks. Have actors with roles (introducer, party), status lifecycle, match reasoning, confidence score, and presentation data.
|
|
122
|
-
- **Contacts**: People in a user's personal network, stored as network members with 'contact' permission on the personal network. Established by accepting an opportunity, which adds both people to each other's personal network. Always real accounts.
|
|
123
|
-
|
|
124
|
-
### Key Relationships
|
|
125
|
-
- Users → Profiles (1:1)
|
|
126
|
-
- Users → Indexes (many:many via Network Members)
|
|
127
|
-
- Users → Intents (1:many, user owns intents)
|
|
128
|
-
- Intents → Indexes (many:many via IntentNetworks with relevancyScore)
|
|
129
|
-
- Opportunities → Users (many:many via actors with roles)
|
|
130
|
-
- Opportunities → Indexes (scoped to shared network context)
|
|
131
|
-
- Contacts → Personal Network (stored as members with 'contact' permission)`,
|
|
132
|
-
intents: `## Intent Lifecycle
|
|
133
|
-
|
|
134
|
-
Intents are the core unit of discovery — they represent what users are seeking and drive semantic matching.
|
|
135
|
-
|
|
136
|
-
1. **Creation** (create_intent): User describes what they're looking for. The system runs inference (extracting structured intents from free text) and verification (checking specificity, speech-act type). Returns a proposal for user approval.
|
|
137
|
-
2. **Confidence & Classification**: Each intent gets a confidence score (0-1), inferenceType (explicit = user stated directly, implicit = system inferred), and speech act classification (commissive, directive, assertive).
|
|
138
|
-
3. **Index Assignment**: After creation, the intent is automatically evaluated against all networks the user belongs to. The index's prompt is used as criteria. Matching indexes get linked via IntentNetworks with a relevancyScore (0-1).
|
|
139
|
-
4. **Discovery Trigger**: Creating an intent triggers background opportunity detection — the system searches for other users in shared networks whose intents complement this one.
|
|
140
|
-
5. **Source Tracking**: Intents track their origin via sourceType (file, integration, link, discovery_form, enrichment) and sourceId.
|
|
141
|
-
6. **Update** (update_intent): Re-processes through inference/verification, recalculates embeddings and index assignments.
|
|
142
|
-
7. **Archive** (delete_intent): Soft-deletes the intent. It stops participating in discovery but is not permanently removed.
|
|
143
|
-
|
|
144
|
-
### Intent Best Practices
|
|
145
|
-
- Be specific: "Looking for a senior React developer for a 3-month contract in Berlin" > "Need a developer"
|
|
146
|
-
- One intent per need: don't combine multiple requests into one intent
|
|
147
|
-
- Update rather than delete+create to preserve history`,
|
|
148
|
-
opportunities: `## Opportunity Lifecycle
|
|
149
|
-
|
|
150
|
-
Opportunities represent discovered connections between users — potential matches worth pursuing.
|
|
151
|
-
|
|
152
|
-
1. **Background matching**: The opportunity graph evaluates approved signals whose intents semantically complement each other within shared networks. It uses HyDE embeddings for retrieval and an LLM evaluator for scoring.
|
|
153
|
-
2. **Roles**: Each opportunity assigns roles to actors:
|
|
154
|
-
- **introducer**: The person who triggered the introduction (may be the system or another user)
|
|
155
|
-
- **party**: The people being connected (typically 2)
|
|
156
|
-
3. **Status Flow**: draft → pending → accepted/rejected/expired
|
|
157
|
-
- **draft**: Created but not sent. Only the creator/introducer sees it.
|
|
158
|
-
- **pending**: Sent to the other party. They're notified and can respond.
|
|
159
|
-
- **accepted**: Both parties agreed to connect.
|
|
160
|
-
- **rejected**: One party declined.
|
|
161
|
-
- **expired**: Timed out without response.
|
|
162
|
-
4. **Creation**: Opportunities are created by background matching after approved signals are created or refined. list_opportunities only reviews persisted cards; it never starts matching or targets a person.
|
|
163
|
-
5. **Presentation**: Each opportunity includes personalized match reasoning, confidence score, and suggested next action.
|
|
164
|
-
|
|
165
|
-
### Opportunity Workflow
|
|
166
|
-
1. create_intent(description) or update_intent(intentId, description) → create or refine an approved signal
|
|
167
|
-
2. background matching → persists opportunity cards when matches are found
|
|
168
|
-
3. list_opportunities() → review persisted cards
|
|
169
|
-
4. update_opportunity(opportunityId, status="pending") → sends to other party
|
|
170
|
-
5. Other party sees opportunity → calls update_opportunity(status="accepted" or "rejected")`,
|
|
171
|
-
indexes: `## Index Mechanics
|
|
172
|
-
|
|
173
|
-
Indexes (also called "networks") are communities where members share what they're looking for and the system discovers connections between them.
|
|
174
|
-
|
|
175
|
-
- **Purpose prompt**: Each index has an optional prompt describing its purpose (e.g. "AI/ML co-founders in Berlin"). This prompt is used by the intent indexer to evaluate whether an intent belongs in this community. Networks without prompts accept all intents (relevancyScore defaults to 1.0).
|
|
176
|
-
- **Join policy**: "anyone" (open — any user can self-join) or "invite_only" (only the owner can add members).
|
|
177
|
-
- **Personal network**: Each user has exactly one personal network (isPersonal=true) created on registration. It stores their contacts. Cannot be deleted, renamed, or listed publicly.
|
|
178
|
-
- **Membership**: Members can see all intents in the index. The **auto-assign** setting on a membership means new intents by that user are automatically evaluated against the index.
|
|
179
|
-
- **Owner permissions**: Network owners can update settings (title, prompt, joinPolicy), add/remove members, and delete the network (if sole member).
|
|
180
|
-
- **Discovery scope**: Opportunities are discovered within index boundaries — the system matches intents of members who share at least one index.
|
|
181
|
-
|
|
182
|
-
### Index Workflow
|
|
183
|
-
1. create_network(title, prompt) → creates new community, you become owner
|
|
184
|
-
2. create_network_membership(networkId, userId) → invite members
|
|
185
|
-
3. Members create intents → auto-assigned to the index based on prompt
|
|
186
|
-
4. Members' approved signals are matched in the background; list_opportunities only reviews persisted results`,
|
|
187
|
-
profiles: `## Profile System
|
|
188
|
-
|
|
189
|
-
Profiles are the user's identity on the platform, used for semantic matching in opportunity discovery.
|
|
190
|
-
|
|
191
|
-
- **Structure**: name, bio, location, skills[], interests[], social links (LinkedIn, GitHub, Twitter, websites)
|
|
192
|
-
- **Generation**: Auto-generated from account data (name, email, social links) via web enrichment. Can also be created from explicit user input (bioOrDescription).
|
|
193
|
-
- **Enrichment**: The system scrapes public profiles (LinkedIn, GitHub, Twitter) to build a rich identity with skills, interests, and narrative context.
|
|
194
|
-
- **Embeddings**: HyDE (Hypothetical Document Embedding) generates synthetic documents for semantic matching:
|
|
195
|
-
- Mirror: self-description of the person
|
|
196
|
-
- Reciprocal: what this person would look for in others
|
|
197
|
-
- Neighborhood: related community context
|
|
198
|
-
- **Onboarding flow**: create_user_context() → preview → create_user_context(confirm=true) → complete_onboarding()
|
|
199
|
-
- **Updates**: Use update_user_context for targeted changes, create_user_context for full regeneration.
|
|
200
|
-
|
|
201
|
-
### Profile Best Practices
|
|
202
|
-
- Richer profiles produce better opportunity matches
|
|
203
|
-
- Social links enable enrichment — encourage users to add LinkedIn/GitHub
|
|
204
|
-
- Profiles are recalculated when updated, which may surface new matches`,
|
|
205
|
-
contacts: contactsSection,
|
|
206
|
-
discovery: `## Discovery Mechanics
|
|
207
|
-
|
|
208
|
-
Discovery is the process of finding meaningful connections between users based on their intents and profiles.
|
|
209
|
-
|
|
210
|
-
### How Discovery Works
|
|
211
|
-
1. **Trigger**: Runs automatically when an approved signal is created or refined.
|
|
212
|
-
2. **Pipeline**: Preparation (gather user context) → Scope (determine which indexes to search) → Candidate retrieval (semantic matching via HyDE embeddings) → Evaluation (LLM scores relevance and complementarity) → Ranking → Persist as opportunities.
|
|
213
|
-
3. **Semantic matching**: Uses HyDE (Hypothetical Document Embeddings) to find candidate intents that complement the source. This goes beyond keyword matching — it understands conceptual relationships.
|
|
214
|
-
4. **Evaluation**: An LLM evaluator agent scores each candidate match on relevance, complementarity, and actionability. Low-scoring matches are filtered out.
|
|
215
|
-
5. **Results**: Persisted as draft opportunities with roles, reasoning, and confidence scores.
|
|
216
|
-
6. **Background processing**: After intent creation, a queue job continues looking for matches asynchronously.
|
|
217
|
-
7. **Review**: Use list_opportunities to review persisted actionable cards; it does not run matching.
|
|
218
|
-
|
|
219
|
-
### Discovery Best Practices
|
|
220
|
-
- More specific intents produce more relevant matches
|
|
221
|
-
- Richer profiles improve matching quality
|
|
222
|
-
- Scope to a specific index (networkId) for more targeted results
|
|
223
|
-
- After discovery returns no results, suggest creating an intent to attract future matches`,
|
|
224
|
-
workflows: `## Common Tool Workflows
|
|
225
|
-
|
|
226
|
-
### New User Setup
|
|
227
|
-
1. create_user_context(linkedinUrl/githubUrl) → generate profile from social data
|
|
228
|
-
2. complete_onboarding() → unlock full access
|
|
229
|
-
3. read_networks() → see available communities
|
|
230
|
-
4. create_network_membership(networkId) → join a community
|
|
231
|
-
5. create_intent(description) → post what you're looking for
|
|
232
|
-
6. Background matching evaluates the approved signal; list_opportunities reviews persisted results
|
|
233
|
-
|
|
234
|
-
### Finding Connections
|
|
235
|
-
1. read_networks() → list user's communities (get networkId)
|
|
236
|
-
2. create_intent(description) or update_intent(intentId, description) → create or refine an approved signal in the relevant network
|
|
237
|
-
3. Background matching persists eligible cards; list_opportunities reviews them
|
|
238
|
-
4. update_opportunity(opportunityId, status="pending") → send a persisted card
|
|
239
|
-
|
|
240
|
-
### Helping Connections Emerge
|
|
241
|
-
1. read_network_memberships(networkId) → understand the shared community
|
|
242
|
-
2. create_intent(description) or update_intent(intentId, description) → capture or refine an approved signal
|
|
243
|
-
3. Background matching evaluates approved signals
|
|
244
|
-
4. list_opportunities() → review persisted results
|
|
245
|
-
|
|
246
|
-
${managingContactsWorkflow}### Creating a Community
|
|
247
|
-
1. create_network(title, prompt) → create network
|
|
248
|
-
2. create_network_membership(networkId, userId) → invite members
|
|
249
|
-
3. Members create intents → auto-indexed
|
|
250
|
-
4. Members' approved signals are matched in the background; list_opportunities only reviews persisted results`,
|
|
251
|
-
authentication: `## Authentication & API Access
|
|
252
|
-
|
|
253
|
-
### For External AI Agents (MCP)
|
|
254
|
-
- Authenticate via **X-API-Key** header with a valid API key
|
|
255
|
-
- The API key is tied to a specific user account
|
|
256
|
-
- All operations execute in the context of the authenticated user
|
|
257
|
-
- Base URL: protocol.index.network/mcp
|
|
258
|
-
|
|
259
|
-
### Key Constraints
|
|
260
|
-
- Users can only read their own intents globally, or intents in indexes they belong to
|
|
261
|
-
- Users can only read profiles of people in shared networks
|
|
262
|
-
- Network-scoped operations are restricted to that index
|
|
263
|
-
- Personal networks cannot be deleted or renamed
|
|
264
|
-
- Only network owners can update settings, add/remove members (for invite_only networks)
|
|
265
|
-
|
|
266
|
-
### Rate Limits & Best Practices
|
|
267
|
-
- Avoid unnecessary read_intents/read_networks calls — cache results within a conversation
|
|
268
|
-
- Use pagination (limit/page) for large result sets
|
|
269
|
-
- Call read_docs once at the start to understand the domain`,
|
|
270
|
-
// Canonical topics (on REST/chat for completeness)
|
|
271
|
-
"identity-context": CANONICAL_GUIDANCE_TOPICS_CONTENT["identity-context"],
|
|
272
|
-
premises: CANONICAL_GUIDANCE_TOPICS_CONTENT.premises,
|
|
273
|
-
signals: CANONICAL_GUIDANCE_TOPICS_CONTENT.signals,
|
|
274
|
-
"communities-networks": CANONICAL_GUIDANCE_TOPICS_CONTENT["communities-networks"],
|
|
275
|
-
negotiations: CANONICAL_GUIDANCE_TOPICS_CONTENT.negotiations,
|
|
276
|
-
};
|
|
277
|
-
if (topic) {
|
|
278
|
-
const normalizedTopic = topic.replace(/_/g, "-").toLowerCase();
|
|
279
|
-
const matched = Object.entries(sections).find(([key]) => key === normalizedTopic || key.includes(normalizedTopic) || normalizedTopic.includes(key));
|
|
280
|
-
if (matched) {
|
|
281
|
-
return success({ topic: matched[0], content: matched[1] });
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// Return full documentation (summary + all topics)
|
|
285
|
-
const fullDoc = [CANONICAL_GUIDANCE_SUMMARY, ...Object.values(sections)].join("\n\n");
|
|
286
|
-
return success({ content: fullDoc });
|
|
287
|
-
},
|
|
288
|
-
});
|
|
289
|
-
const readActivitySummary = defineTool({
|
|
290
|
-
name: "read_activity_summary",
|
|
291
|
-
description: "Returns grounded, aggregate-only activity for the authenticated user's agent over a recent time window.\n\n" +
|
|
292
|
-
"**Response domains (permission-projected for agent callers):**\n" +
|
|
293
|
-
"- signals (`liveSignalsWatched`, `opportunitiesBySignal` with signal IDs/titles) — requires manage:intents.\n" +
|
|
294
|
-
"- opportunities (`opportunitiesSurfaced`) — requires manage:opportunities.\n" +
|
|
295
|
-
"- questions (`pendingQuestionsByDomain`, `answeredQuestionsByDomain`) — meta-network counts grouped by the question's affected domain; " +
|
|
296
|
-
"each domain's counts require that domain's manage:identity/premises/intents/opportunities/negotiations permission; conversational chat-mode counts are human-owner-only.\n" +
|
|
297
|
-
"- negotiations (`negotiationsStarted`, `negotiationsCompleted`) — requires manage:negotiations.\n" +
|
|
298
|
-
"Human owners receive every domain. Agent callers receive only the domains their permissions authorize; " +
|
|
299
|
-
"a network agent's network-bound aggregates are narrowed to its bound community at the query layer.\n\n" +
|
|
300
|
-
"**Privacy:** the response never returns counterparty identities, chats, turns, transcripts, per-counterparty rows, " +
|
|
301
|
-
"or any private content — only aggregate counts and (with manage:intents) the owner's own signal IDs/titles.",
|
|
302
|
-
querySchema: z.object({
|
|
303
|
-
sinceHours: z.number().int().optional().default(24).describe("Look back this many hours; values are clamped to 1-168 (default 24)."),
|
|
304
|
-
}).strict(),
|
|
305
|
-
handler: async ({ context, query }) => {
|
|
306
|
-
const sinceHours = Math.max(1, Math.min(168, query.sinceHours));
|
|
307
|
-
// Absent on owner-trusted REST/chat surfaces → full owner view. On MCP the
|
|
308
|
-
// server binds the typed resolved caller context and the centralized
|
|
309
|
-
// projection decides every visible domain.
|
|
310
|
-
const caller = context.mcpCaller
|
|
311
|
-
? McpActivityCallerSchema.parse(context.mcpCaller)
|
|
312
|
-
: HUMAN_OWNER_CALLER;
|
|
313
|
-
const networkId = activitySummaryNetworkId(caller);
|
|
314
|
-
const summary = await deps.userDb.getAgentActivitySummary({
|
|
315
|
-
sinceHours,
|
|
316
|
-
...(networkId ? { networkId } : {}),
|
|
317
|
-
});
|
|
318
|
-
return success(ActivitySummaryResponseSchema.parse(projectActivitySummary(caller, summary)));
|
|
319
|
-
},
|
|
320
|
-
});
|
|
321
|
-
return [scrapeUrl, readDocs, readActivitySummary].filter((tool) => tool !== null);
|
|
322
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { ScopeMembership, ToolScopeEnvelope } from "../agent/tool.scope.js";
|
|
2
|
-
import type { NetworkAssignmentMetadata, NetworkAssignmentMode, NetworkAssignmentPromptPresence, NetworkAssignmentRawScores, NetworkAssignmentResourceType, NetworkAssignmentScope } from "../schemas/network-assignment.schema.js";
|
|
3
|
-
/** Centralized default for unified premises/intent network assignment. */
|
|
4
|
-
export declare const DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD = 0.7;
|
|
5
|
-
export interface PromptPresenceInput {
|
|
6
|
-
indexPrompt?: string | null;
|
|
7
|
-
memberPrompt?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export type AssignmentScopeMembership = ScopeMembership | string;
|
|
10
|
-
export interface ResolveAssignmentNetworkScopeArgs extends ToolScopeEnvelope {
|
|
11
|
-
memberships: AssignmentScopeMembership[];
|
|
12
|
-
/** @deprecated Use `scopeType: 'network'` + `scopeId`. */
|
|
13
|
-
networkScopeId?: string;
|
|
14
|
-
}
|
|
15
|
-
export interface BuildNetworkAssignmentDecisionArgs extends PromptPresenceInput {
|
|
16
|
-
resourceType: NetworkAssignmentResourceType;
|
|
17
|
-
mode: NetworkAssignmentMode;
|
|
18
|
-
scope: NetworkAssignmentScope;
|
|
19
|
-
rawScores?: NetworkAssignmentRawScores | null;
|
|
20
|
-
threshold?: number;
|
|
21
|
-
evaluator?: string;
|
|
22
|
-
source?: string;
|
|
23
|
-
reason?: string;
|
|
24
|
-
createdAt?: string;
|
|
25
|
-
}
|
|
26
|
-
export interface NetworkAssignmentDecision {
|
|
27
|
-
assigned: boolean;
|
|
28
|
-
finalScore: number;
|
|
29
|
-
metadata: NetworkAssignmentMetadata;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Classifies whether a network/member prompt pair can filter a resource.
|
|
33
|
-
*
|
|
34
|
-
* @param input - Network and member prompt values to inspect.
|
|
35
|
-
* @returns Prompt-presence classification for assignment policy decisions.
|
|
36
|
-
*/
|
|
37
|
-
export declare function classifyPromptPresence(input: PromptPresenceInput): NetworkAssignmentPromptPresence;
|
|
38
|
-
/**
|
|
39
|
-
* Resolves the networks to evaluate: all memberships in global scope, or the
|
|
40
|
-
* focused network plus personal memberships in network scope. The focused
|
|
41
|
-
* network must also be a membership to avoid broadening scope accidentally.
|
|
42
|
-
*
|
|
43
|
-
* @param args - User memberships plus optional active network scope.
|
|
44
|
-
* @returns Network IDs that assignment should evaluate.
|
|
45
|
-
*/
|
|
46
|
-
export declare function resolveAssignmentNetworkScope(args: ResolveAssignmentNetworkScopeArgs): string[];
|
|
47
|
-
/**
|
|
48
|
-
* Builds a unified assignment decision and metadata envelope.
|
|
49
|
-
*
|
|
50
|
-
* @param args - Assignment resource, scope, prompt, score, and provenance inputs.
|
|
51
|
-
* @returns Assignment decision and explainability metadata.
|
|
52
|
-
*/
|
|
53
|
-
export declare function buildNetworkAssignmentDecision(args: BuildNetworkAssignmentDecisionArgs): NetworkAssignmentDecision;
|
|
54
|
-
/**
|
|
55
|
-
* Combines index/member scores according to available prompt filtration.
|
|
56
|
-
*
|
|
57
|
-
* @param rawScores - Optional normalized index and member scores.
|
|
58
|
-
* @param promptPresence - Which prompts are present for this assignment decision.
|
|
59
|
-
* @returns Final normalized score in the 0..1 range.
|
|
60
|
-
*/
|
|
61
|
-
export declare function combineAssignmentScores(rawScores: NetworkAssignmentRawScores, promptPresence: NetworkAssignmentPromptPresence): number;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { deriveAllowedNetworkIds, scopeFromNetworkId } from "../agent/tool.scope.js";
|
|
2
|
-
/** Centralized default for unified premises/intent network assignment. */
|
|
3
|
-
export const DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD = 0.7;
|
|
4
|
-
/**
|
|
5
|
-
* Classifies whether a network/member prompt pair can filter a resource.
|
|
6
|
-
*
|
|
7
|
-
* @param input - Network and member prompt values to inspect.
|
|
8
|
-
* @returns Prompt-presence classification for assignment policy decisions.
|
|
9
|
-
*/
|
|
10
|
-
export function classifyPromptPresence(input) {
|
|
11
|
-
const hasIndex = !!input.indexPrompt?.trim();
|
|
12
|
-
const hasMember = !!input.memberPrompt?.trim();
|
|
13
|
-
if (hasIndex && hasMember)
|
|
14
|
-
return "both";
|
|
15
|
-
if (hasIndex)
|
|
16
|
-
return "index";
|
|
17
|
-
if (hasMember)
|
|
18
|
-
return "member";
|
|
19
|
-
return "none";
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Resolves the networks to evaluate: all memberships in global scope, or the
|
|
23
|
-
* focused network plus personal memberships in network scope. The focused
|
|
24
|
-
* network must also be a membership to avoid broadening scope accidentally.
|
|
25
|
-
*
|
|
26
|
-
* @param args - User memberships plus optional active network scope.
|
|
27
|
-
* @returns Network IDs that assignment should evaluate.
|
|
28
|
-
*/
|
|
29
|
-
export function resolveAssignmentNetworkScope(args) {
|
|
30
|
-
const memberships = args.memberships.map((membership) => (typeof membership === "string"
|
|
31
|
-
? { networkId: membership, isPersonal: false }
|
|
32
|
-
: membership));
|
|
33
|
-
const scope = args.scopeType && args.scopeId
|
|
34
|
-
? { scopeType: args.scopeType, scopeId: args.scopeId }
|
|
35
|
-
: scopeFromNetworkId(args.networkScopeId);
|
|
36
|
-
return deriveAllowedNetworkIds({ memberships, ...scope });
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Builds a unified assignment decision and metadata envelope.
|
|
40
|
-
*
|
|
41
|
-
* @param args - Assignment resource, scope, prompt, score, and provenance inputs.
|
|
42
|
-
* @returns Assignment decision and explainability metadata.
|
|
43
|
-
*/
|
|
44
|
-
export function buildNetworkAssignmentDecision(args) {
|
|
45
|
-
const threshold = clampScore(args.threshold ?? DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD);
|
|
46
|
-
const promptPresence = classifyPromptPresence(args);
|
|
47
|
-
if (args.mode === "manual_override") {
|
|
48
|
-
const finalScore = 1.0;
|
|
49
|
-
return buildDecision(args, promptPresence, threshold, finalScore, true, args.reason ?? "Explicit manual override.");
|
|
50
|
-
}
|
|
51
|
-
if (promptPresence === "none") {
|
|
52
|
-
const finalScore = 1.0;
|
|
53
|
-
return buildDecision(args, promptPresence, threshold, finalScore, true, args.reason ?? "No prompts configured; network has no dynamic filtration.");
|
|
54
|
-
}
|
|
55
|
-
const finalScore = combineAssignmentScores(args.rawScores ?? {}, promptPresence);
|
|
56
|
-
const assigned = finalScore >= threshold;
|
|
57
|
-
return buildDecision(args, promptPresence, threshold, finalScore, assigned, args.reason);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Combines index/member scores according to available prompt filtration.
|
|
61
|
-
*
|
|
62
|
-
* @param rawScores - Optional normalized index and member scores.
|
|
63
|
-
* @param promptPresence - Which prompts are present for this assignment decision.
|
|
64
|
-
* @returns Final normalized score in the 0..1 range.
|
|
65
|
-
*/
|
|
66
|
-
export function combineAssignmentScores(rawScores, promptPresence) {
|
|
67
|
-
const indexScore = clampScore(rawScores.indexScore ?? 0);
|
|
68
|
-
const memberScore = clampScore(rawScores.memberScore ?? 0);
|
|
69
|
-
switch (promptPresence) {
|
|
70
|
-
case "both":
|
|
71
|
-
return clampScore(indexScore * 0.6 + memberScore * 0.4);
|
|
72
|
-
case "index":
|
|
73
|
-
return indexScore;
|
|
74
|
-
case "member":
|
|
75
|
-
return memberScore;
|
|
76
|
-
case "none":
|
|
77
|
-
return 1.0;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function buildDecision(args, promptPresence, threshold, finalScore, assigned, reason) {
|
|
81
|
-
return {
|
|
82
|
-
assigned,
|
|
83
|
-
finalScore,
|
|
84
|
-
metadata: {
|
|
85
|
-
resourceType: args.resourceType,
|
|
86
|
-
mode: args.mode,
|
|
87
|
-
scope: args.scope,
|
|
88
|
-
policy: "unified-threshold-v1",
|
|
89
|
-
threshold,
|
|
90
|
-
promptPresence,
|
|
91
|
-
...(args.rawScores ? { rawScores: args.rawScores } : {}),
|
|
92
|
-
finalScore,
|
|
93
|
-
assigned,
|
|
94
|
-
...(reason ? { reason } : {}),
|
|
95
|
-
...(args.evaluator ? { evaluator: args.evaluator } : {}),
|
|
96
|
-
...(args.source ? { source: args.source } : {}),
|
|
97
|
-
...(args.createdAt ? { createdAt: args.createdAt } : {}),
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function clampScore(score) {
|
|
102
|
-
if (!Number.isFinite(score))
|
|
103
|
-
return 0;
|
|
104
|
-
return Math.max(0, Math.min(1, score));
|
|
105
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDispatcher interface for the negotiation graph.
|
|
3
|
-
*
|
|
4
|
-
* The graph calls dispatch() per turn and receives a result.
|
|
5
|
-
* It never knows about webhooks, MCP, transports, or agent resolution.
|
|
6
|
-
* The concrete implementation lives in the host application.
|
|
7
|
-
*
|
|
8
|
-
* IND-548: these types are also accessible via agents/ports, which
|
|
9
|
-
* re-exports from here. This file remains the authoritative source to avoid a
|
|
10
|
-
* module cycle through the negotiation capability facade.
|
|
11
|
-
*/
|
|
12
|
-
import type { NegotiationTurn, UserNegotiationContext, SeedAssessment } from '../schemas/negotiation-state.schema.js';
|
|
13
|
-
import type { NegotiatorMemoryEntry } from '../../negotiations/negotiation.memory.js';
|
|
14
|
-
import type { AttributedPriorDialogue } from '../../negotiations/negotiation.attribution.js';
|
|
15
|
-
import type { NegotiationPrivateConsultation } from './database.interface.js';
|
|
16
|
-
import type { NegotiationContinuationTimeoutIdentity } from './negotiation-events.interface.js';
|
|
17
|
-
/** Payload sent to the dispatcher for each negotiation turn. */
|
|
18
|
-
export interface NegotiationTurnPayload {
|
|
19
|
-
negotiationId: string;
|
|
20
|
-
ownUser: UserNegotiationContext;
|
|
21
|
-
otherUser: UserNegotiationContext;
|
|
22
|
-
indexContext: {
|
|
23
|
-
networkId: string;
|
|
24
|
-
prompt?: string;
|
|
25
|
-
};
|
|
26
|
-
seedAssessment: SeedAssessment;
|
|
27
|
-
history: NegotiationTurn[];
|
|
28
|
-
isFinalTurn: boolean;
|
|
29
|
-
/** Whether ownUser is the party that initiated the discovery. */
|
|
30
|
-
isDiscoverer: boolean;
|
|
31
|
-
/** The explicit search query that triggered this discovery (if any). Takes priority over background intents. */
|
|
32
|
-
discoveryQuery?: string;
|
|
33
|
-
/** The acting user's seat under the v2 client-advocate protocol (`initiator` | `counterparty`). */
|
|
34
|
-
seat?: string;
|
|
35
|
-
/** Negotiation protocol version for this task (`v1` | `v2`). */
|
|
36
|
-
protocolVersion?: string;
|
|
37
|
-
/** Actions the acting seat may submit on this turn (seat + version + final-turn scoped). */
|
|
38
|
-
allowedActions?: string[];
|
|
39
|
-
/**
|
|
40
|
-
* The acting user's OWN negotiator memories (P5.3 read path) — private
|
|
41
|
-
* context for the dispatched agent. Never contains the counterparty's
|
|
42
|
-
* memory; absent when `NEGOTIATOR_MEMORY_INJECT` is off or nothing was
|
|
43
|
-
* retrieved.
|
|
44
|
-
*/
|
|
45
|
-
negotiatorMemory?: NegotiatorMemoryEntry[];
|
|
46
|
-
/** Recipient-private ask-user consultation, present only for that recipient's turn. */
|
|
47
|
-
privateConsultation?: NegotiationPrivateConsultation;
|
|
48
|
-
/**
|
|
49
|
-
* Prior dialogue with this counterparty, grouped and labeled per opportunity
|
|
50
|
-
* (IND-569). Present only on continuations; lets an external agent see which
|
|
51
|
-
* prior turns belonged to already-concluded OTHER opportunities versus the
|
|
52
|
-
* one under negotiation now. Absent → no attributed prior dialogue available.
|
|
53
|
-
*/
|
|
54
|
-
priorDialogue?: AttributedPriorDialogue;
|
|
55
|
-
/** Server-only continuation generation used to fence the delayed park timeout. */
|
|
56
|
-
timeoutContinuation?: NegotiationContinuationTimeoutIdentity;
|
|
57
|
-
}
|
|
58
|
-
/** Result of a dispatch attempt. */
|
|
59
|
-
export type AgentDispatchResult = {
|
|
60
|
-
handled: true;
|
|
61
|
-
turn: NegotiationTurn;
|
|
62
|
-
} | {
|
|
63
|
-
handled: false;
|
|
64
|
-
reason: 'no_agent' | 'timeout';
|
|
65
|
-
} | {
|
|
66
|
-
handled: false;
|
|
67
|
-
reason: 'waiting';
|
|
68
|
-
resumeToken: string;
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Dispatches a negotiation turn to the appropriate agent.
|
|
72
|
-
* Tries external (poller) agents first, falls back to system agent.
|
|
73
|
-
*/
|
|
74
|
-
export interface AgentDispatcher {
|
|
75
|
-
/**
|
|
76
|
-
* Attempt to dispatch a negotiation turn to an external (poller) agent.
|
|
77
|
-
* @param userId - The user whose agent should handle this turn
|
|
78
|
-
* @param scope - Permission scope for agent resolution
|
|
79
|
-
* @param payload - Turn context (users, history, seed assessment)
|
|
80
|
-
* @param options - Timeout configuration
|
|
81
|
-
* @returns Handled result with turn, or unhandled result with reason
|
|
82
|
-
*/
|
|
83
|
-
dispatch(userId: string, scope: {
|
|
84
|
-
action: string;
|
|
85
|
-
scopeType: string;
|
|
86
|
-
scopeId?: string;
|
|
87
|
-
}, payload: NegotiationTurnPayload, options: {
|
|
88
|
-
timeoutMs: number;
|
|
89
|
-
}): Promise<AgentDispatchResult>;
|
|
90
|
-
/**
|
|
91
|
-
* Check whether a user has an authorized external (poller) agent for the given
|
|
92
|
-
* scope. Used at init to determine scenario-based turn caps. Type-only by design
|
|
93
|
-
* (no heartbeat freshness) — see IND-410.
|
|
94
|
-
*/
|
|
95
|
-
hasExternalAgent(userId: string, scope: {
|
|
96
|
-
action: string;
|
|
97
|
-
scopeType: string;
|
|
98
|
-
scopeId?: string;
|
|
99
|
-
}): Promise<boolean>;
|
|
100
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDispatcher interface for the negotiation graph.
|
|
3
|
-
*
|
|
4
|
-
* The graph calls dispatch() per turn and receives a result.
|
|
5
|
-
* It never knows about webhooks, MCP, transports, or agent resolution.
|
|
6
|
-
* The concrete implementation lives in the host application.
|
|
7
|
-
*
|
|
8
|
-
* IND-548: these types are also accessible via agents/ports, which
|
|
9
|
-
* re-exports from here. This file remains the authoritative source to avoid a
|
|
10
|
-
* module cycle through the negotiation capability facade.
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { McpAuthInput, McpResolvedIdentity } from '../schemas/mcp-auth.schema.js';
|
|
2
|
-
/**
|
|
3
|
-
* Resolves the authenticated MCP identity from an auth input DTO.
|
|
4
|
-
* The DTO is extracted from the transport at the edge (e.g. from HTTP Request
|
|
5
|
-
* headers) before the protocol layer is called. New auth paths stay free of
|
|
6
|
-
* platform-specific `Request` coupling; `resolveUserId` remains only as a
|
|
7
|
-
* deprecated compatibility bridge while callers migrate to `resolveIdentity`.
|
|
8
|
-
*/
|
|
9
|
-
export interface McpAuthResolver {
|
|
10
|
-
/**
|
|
11
|
-
* Extracts and validates the authenticated identity from the auth input.
|
|
12
|
-
*
|
|
13
|
-
* @param input - Transport-neutral auth input DTO with credential fields
|
|
14
|
-
* extracted at the MCP transport edge.
|
|
15
|
-
* @returns The authenticated user's UUID, optional agent UUID, auth method,
|
|
16
|
-
* and `networkScopeId` if the caller's API key is bound to a network-scoped
|
|
17
|
-
* agent.
|
|
18
|
-
*
|
|
19
|
-
* When `networkScopeId` is set, the MCP server promotes it into the
|
|
20
|
-
* canonical `{ scopeType: 'network', scopeId }` envelope. Downstream tools
|
|
21
|
-
* derive concrete allowed network IDs from that envelope plus memberships.
|
|
22
|
-
*
|
|
23
|
-
* `isSessionAuth` is true for OAuth/JWT bearer sessions — the agent-
|
|
24
|
-
* registration gate in the MCP server is skipped for these callers.
|
|
25
|
-
*
|
|
26
|
-
* @throws Error if authentication fails (no token, invalid token, etc.)
|
|
27
|
-
*/
|
|
28
|
-
resolveIdentity(input: McpAuthInput): Promise<McpResolvedIdentity>;
|
|
29
|
-
/**
|
|
30
|
-
* Deprecated HTTP Request bridge retained for compatibility with older
|
|
31
|
-
* callers. New transport code must extract `McpAuthInput` at the edge and
|
|
32
|
-
* call `resolveIdentity` instead.
|
|
33
|
-
*
|
|
34
|
-
* @deprecated Use resolveIdentity instead.
|
|
35
|
-
*/
|
|
36
|
-
resolveUserId(request: Request): Promise<string>;
|
|
37
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|