@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,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Seat-scoped negotiation protocol rules (v2 client-advocate protocol).
|
|
3
|
-
*
|
|
4
|
-
* v2 fixes exactly one initiating seat per match (`metadata.initiatorUserId`,
|
|
5
|
-
* stamped at discovery time — IND-396) and makes consent asymmetric:
|
|
6
|
-
* **accept can only come from the counterparty seat**, schema-enforced.
|
|
7
|
-
*
|
|
8
|
-
* Vocabulary per seat (v2):
|
|
9
|
-
* - initiator: `outreach | counter | question | withdraw` (no accept)
|
|
10
|
-
* - counterparty: `accept | decline | counter | question`
|
|
11
|
-
* - final turn: initiator `withdraw | counter`; counterparty `accept | decline`
|
|
12
|
-
*
|
|
13
|
-
* v1 tasks keep the legacy vocabulary (`propose | accept | reject | counter |
|
|
14
|
-
* question`) — the version is inherited per conversation, never re-stamped, so
|
|
15
|
-
* in-flight v1 negotiations are grandfathered untouched.
|
|
16
|
-
*
|
|
17
|
-
* Outcome mapping is version-independent: `accept` → opportunity `pending`,
|
|
18
|
-
* `reject`/`withdraw`/`decline` → `rejected`, turn-cap → `stalled`.
|
|
19
|
-
*/
|
|
20
|
-
import { z } from "zod";
|
|
21
|
-
import { AskUserPayloadSchema } from "../shared/schemas/negotiation-state.schema.js";
|
|
22
|
-
// ─── Shared assessment fragment ──────────────────────────────────────────────
|
|
23
|
-
const AssessmentSchema = z.object({
|
|
24
|
-
reasoning: z.string(),
|
|
25
|
-
suggestedRoles: z.object({
|
|
26
|
-
ownUser: z.enum(["agent", "patient", "peer"]),
|
|
27
|
-
otherUser: z.enum(["agent", "patient", "peer"]),
|
|
28
|
-
}),
|
|
29
|
-
});
|
|
30
|
-
function turnSchema(actions) {
|
|
31
|
-
return z.object({
|
|
32
|
-
action: z.enum(actions),
|
|
33
|
-
assessment: AssessmentSchema,
|
|
34
|
-
message: z.string().nullable().optional(),
|
|
35
|
-
/** Present when action is `ask_user` (v2, P3.2). */
|
|
36
|
-
askUser: AskUserPayloadSchema.nullable().optional(),
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
// ─── v2 seat-scoped turn schemas ─────────────────────────────────────────────
|
|
40
|
-
/** Initiator seat, non-final turn: may reach out, push back, ask, or walk away — never accept. */
|
|
41
|
-
export const InitiatorTurnSchema = turnSchema(["outreach", "counter", "question", "withdraw"]);
|
|
42
|
-
/** Counterparty seat, non-final turn: the only seat that can accept. */
|
|
43
|
-
export const CounterpartyTurnSchema = turnSchema(["accept", "decline", "counter", "question"]);
|
|
44
|
-
/** Initiator seat, final allowed turn: commit to walking away or leave the door open. */
|
|
45
|
-
export const FinalInitiatorTurnSchema = turnSchema(["withdraw", "counter"]);
|
|
46
|
-
/** Counterparty seat, final allowed turn: must decide. */
|
|
47
|
-
export const FinalCounterpartyTurnSchema = turnSchema(["accept", "decline"]);
|
|
48
|
-
// ─── v2 ask_user variants (P3.2, flag-gated) ────────────────────────────────
|
|
49
|
-
// Non-final turns only: the final-cap turn must decide, never pause. Selected
|
|
50
|
-
// via the `opts.askUser` parameter on allowedActionsFor/turnSchemaFor — the
|
|
51
|
-
// base schemas above stay byte-identical for every existing caller.
|
|
52
|
-
/** Initiator seat, non-final turn, with the client-consult pause available. */
|
|
53
|
-
export const InitiatorAskUserTurnSchema = turnSchema(["outreach", "counter", "question", "withdraw", "ask_user"]);
|
|
54
|
-
/** Counterparty seat, non-final turn, with the client-consult pause available. */
|
|
55
|
-
export const CounterpartyAskUserTurnSchema = turnSchema(["accept", "decline", "counter", "question", "ask_user"]);
|
|
56
|
-
// ─── Action vocabulary per version + seat ────────────────────────────────────
|
|
57
|
-
const V1_ACTIONS = ["propose", "accept", "reject", "counter", "question"];
|
|
58
|
-
const V1_FINAL_ACTIONS = ["accept", "reject"];
|
|
59
|
-
const V2_INITIATOR_ACTIONS = ["outreach", "counter", "question", "withdraw"];
|
|
60
|
-
const V2_COUNTERPARTY_ACTIONS = ["accept", "decline", "counter", "question"];
|
|
61
|
-
const V2_FINAL_INITIATOR_ACTIONS = ["withdraw", "counter"];
|
|
62
|
-
const V2_FINAL_COUNTERPARTY_ACTIONS = ["accept", "decline"];
|
|
63
|
-
const V2_INITIATOR_ASK_USER_ACTIONS = [...V2_INITIATOR_ACTIONS, "ask_user"];
|
|
64
|
-
const V2_COUNTERPARTY_ASK_USER_ACTIONS = [...V2_COUNTERPARTY_ACTIONS, "ask_user"];
|
|
65
|
-
/**
|
|
66
|
-
* The set of actions a given seat may submit under a given protocol version.
|
|
67
|
-
*
|
|
68
|
-
* v1 ignores the seat entirely (legacy symmetric vocabulary) so pre-v2
|
|
69
|
-
* negotiations behave exactly as before.
|
|
70
|
-
*/
|
|
71
|
-
export function allowedActionsFor(version, seat, isFinalTurn = false, opts) {
|
|
72
|
-
if (version !== "v2")
|
|
73
|
-
return isFinalTurn ? V1_FINAL_ACTIONS : V1_ACTIONS;
|
|
74
|
-
const askUser = opts?.askUser === true && !isFinalTurn;
|
|
75
|
-
if (seat === "initiator") {
|
|
76
|
-
return isFinalTurn ? V2_FINAL_INITIATOR_ACTIONS : (askUser ? V2_INITIATOR_ASK_USER_ACTIONS : V2_INITIATOR_ACTIONS);
|
|
77
|
-
}
|
|
78
|
-
return isFinalTurn ? V2_FINAL_COUNTERPARTY_ACTIONS : (askUser ? V2_COUNTERPARTY_ASK_USER_ACTIONS : V2_COUNTERPARTY_ACTIONS);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Zod turn schema for a system-agent turn, selected by version + seat +
|
|
82
|
-
* final-turn flag. v1 returns the legacy schemas (seat-agnostic); v2 returns
|
|
83
|
-
* the seat-scoped schemas above, making an initiator `accept` structurally
|
|
84
|
-
* impossible rather than prompt-discouraged.
|
|
85
|
-
*
|
|
86
|
-
* The v1 legacy schemas are passed in by the caller (they live in
|
|
87
|
-
* `negotiation.state.ts`) to keep this module free of a state-module import.
|
|
88
|
-
*/
|
|
89
|
-
export function turnSchemaFor(version, seat, isFinalTurn, v1Schemas, opts) {
|
|
90
|
-
if (version !== "v2")
|
|
91
|
-
return isFinalTurn ? v1Schemas.final : v1Schemas.system;
|
|
92
|
-
const askUser = opts?.askUser === true && !isFinalTurn;
|
|
93
|
-
if (seat === "initiator") {
|
|
94
|
-
return isFinalTurn ? FinalInitiatorTurnSchema : (askUser ? InitiatorAskUserTurnSchema : InitiatorTurnSchema);
|
|
95
|
-
}
|
|
96
|
-
return isFinalTurn ? FinalCounterpartyTurnSchema : (askUser ? CounterpartyAskUserTurnSchema : CounterpartyTurnSchema);
|
|
97
|
-
}
|
|
98
|
-
// ─── Action semantics (version-independent) ──────────────────────────────────
|
|
99
|
-
/** Terminal actions end the negotiation immediately. */
|
|
100
|
-
export function isTerminalAction(action) {
|
|
101
|
-
return action === "accept" || action === "reject" || action === "withdraw" || action === "decline";
|
|
102
|
-
}
|
|
103
|
-
/** Reject-like actions map the opportunity to `rejected` (v1 reject, v2 withdraw/decline). */
|
|
104
|
-
export function isRejectLikeAction(action) {
|
|
105
|
-
return action === "reject" || action === "withdraw" || action === "decline";
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Conservative action when an agent produced schema-invalid output (after the
|
|
109
|
-
* retry) or an internal error needs a seat-valid terminal placeholder.
|
|
110
|
-
*
|
|
111
|
-
* Non-final turns fall back to `counter` (keeps the dialogue open — the AC's
|
|
112
|
-
* "conservative counter"). Final turns must decide: v1 → `reject`, v2
|
|
113
|
-
* counterparty → `decline`, v2 initiator → `counter` is still legal on the
|
|
114
|
-
* final turn so it stays `counter` (finalizes as turn-cap/stalled).
|
|
115
|
-
*/
|
|
116
|
-
export function fallbackActionFor(version, seat, isFinalTurn) {
|
|
117
|
-
if (!isFinalTurn)
|
|
118
|
-
return "counter";
|
|
119
|
-
if (version !== "v2")
|
|
120
|
-
return "reject";
|
|
121
|
-
return seat === "counterparty" ? "decline" : "counter";
|
|
122
|
-
}
|
|
123
|
-
/** Seat-appropriate reject-like action for error paths. */
|
|
124
|
-
export function rejectActionFor(version, seat) {
|
|
125
|
-
if (version !== "v2")
|
|
126
|
-
return "reject";
|
|
127
|
-
return seat === "initiator" ? "withdraw" : "decline";
|
|
128
|
-
}
|
|
129
|
-
// ─── Metadata readers ────────────────────────────────────────────────────────
|
|
130
|
-
/**
|
|
131
|
-
* Read the protocol version off task metadata. Returns null when the task
|
|
132
|
-
* predates version stamping (treat as v1 at the call site when the task is a
|
|
133
|
-
* genuine prior; fresh tasks stamp from {@link configuredProtocolVersion}).
|
|
134
|
-
*/
|
|
135
|
-
export function readProtocolVersion(metadata) {
|
|
136
|
-
const v = metadata?.protocolVersion;
|
|
137
|
-
return v === "v2" ? "v2" : v === "v1" ? "v1" : null;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Protocol version for negotiations without a prior task for the same
|
|
141
|
-
* opportunity, from the `NEGOTIATION_PROTOCOL_VERSION` env switch. Defaults
|
|
142
|
-
* to `v1` when unset — v2 is opt-in per environment, and rolling back is the
|
|
143
|
-
* same single switch (only in-flight negotiations stay pinned to their
|
|
144
|
-
* stamped version).
|
|
145
|
-
*/
|
|
146
|
-
export function configuredProtocolVersion() {
|
|
147
|
-
return process.env.NEGOTIATION_PROTOCOL_VERSION === "v2" ? "v2" : "v1";
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Whether the `ask_user` client-consult pause (P3.2) is enabled, from the
|
|
151
|
-
* `NEGOTIATION_ASK_USER_ENABLED` env switch. Defaults to off — the deployment
|
|
152
|
-
* is byte-for-byte unchanged until the flag is flipped, and rolling back is
|
|
153
|
-
* the same single switch.
|
|
154
|
-
*/
|
|
155
|
-
export function configuredAskUserEnabled() {
|
|
156
|
-
return process.env.NEGOTIATION_ASK_USER_ENABLED === "true";
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Default per-negotiation ask cap: total client-consultation rounds (mid-flight
|
|
160
|
-
* `ask_user` pauses and post-stall parks, both sides combined) before the
|
|
161
|
-
* negotiation stalls terminally instead of parking again. Three admits one
|
|
162
|
-
* post-stall park even after each side has spent its one mid-flight consult.
|
|
163
|
-
*/
|
|
164
|
-
export const DEFAULT_NEGOTIATION_ASK_ROUNDS_CAP = 3;
|
|
165
|
-
/**
|
|
166
|
-
* Per-negotiation ask cap, overridable via `NEGOTIATION_ASK_ROUNDS_CAP`.
|
|
167
|
-
* Invalid or non-positive values fall back to the default — zero is not an
|
|
168
|
-
* off switch here; the cap exists so two agents cannot ping-pong their humans
|
|
169
|
-
* indefinitely. It tunes the bound, it does not gate the behaviour.
|
|
170
|
-
*/
|
|
171
|
-
export function negotiationAskRoundsCap() {
|
|
172
|
-
const raw = process.env.NEGOTIATION_ASK_ROUNDS_CAP;
|
|
173
|
-
if (raw) {
|
|
174
|
-
const parsed = Number(raw);
|
|
175
|
-
if (Number.isInteger(parsed) && parsed > 0)
|
|
176
|
-
return parsed;
|
|
177
|
-
}
|
|
178
|
-
return DEFAULT_NEGOTIATION_ASK_ROUNDS_CAP;
|
|
179
|
-
}
|
|
180
|
-
/** Default answer window for a paused `ask_user` negotiation: 24 hours. */
|
|
181
|
-
export const DEFAULT_ASK_USER_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
182
|
-
/**
|
|
183
|
-
* Answer window for a paused `ask_user` negotiation, in ms. Overridable via
|
|
184
|
-
* `NEGOTIATION_ASK_USER_WINDOW_MS` (dev/e2e use shorter windows to exercise
|
|
185
|
-
* the expiry path); invalid or non-positive values fall back to 24 h.
|
|
186
|
-
*/
|
|
187
|
-
export function askUserAnswerWindowMs() {
|
|
188
|
-
const raw = process.env.NEGOTIATION_ASK_USER_WINDOW_MS;
|
|
189
|
-
if (raw) {
|
|
190
|
-
const parsed = Number(raw);
|
|
191
|
-
if (Number.isFinite(parsed) && parsed > 0)
|
|
192
|
-
return parsed;
|
|
193
|
-
}
|
|
194
|
-
return DEFAULT_ASK_USER_WINDOW_MS;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Slack added on top of the answer window when deciding whether a paused
|
|
198
|
-
* (`input_required`) task still holds the conversation lock. Covers expiry
|
|
199
|
-
* worker delay: the lock must outlive the timer slightly, so ambient
|
|
200
|
-
* rediscovery cannot slip in between window expiry and the worker's resume.
|
|
201
|
-
*/
|
|
202
|
-
export const ASK_USER_LOCK_SLACK_MS = 60 * 60 * 1000;
|
|
203
|
-
/**
|
|
204
|
-
* Resolve the seat of `userId` on a negotiation task.
|
|
205
|
-
*
|
|
206
|
-
* Keys on `metadata.initiatorUserId` (the rigid v2 stamp), **never on turn
|
|
207
|
-
* parity** — continuations can start with either side speaking first, so
|
|
208
|
-
* parity misattributes seats across sessions. Pre-stamp tasks fall back to
|
|
209
|
-
* `sourceUserId` (the discovery-session opener), which is what the stamp
|
|
210
|
-
* defaults to anyway.
|
|
211
|
-
*/
|
|
212
|
-
export function resolveSeat(userId, metadata) {
|
|
213
|
-
const initiator = typeof metadata?.initiatorUserId === "string" && metadata.initiatorUserId.length > 0
|
|
214
|
-
? metadata.initiatorUserId
|
|
215
|
-
: typeof metadata?.sourceUserId === "string"
|
|
216
|
-
? metadata.sourceUserId
|
|
217
|
-
: undefined;
|
|
218
|
-
return initiator === userId ? "initiator" : "counterparty";
|
|
219
|
-
}
|
|
220
|
-
/** Human-readable seat-violation message shared by respond surfaces. */
|
|
221
|
-
export function seatViolationMessage(action, seat, version) {
|
|
222
|
-
const allowed = allowedActionsFor(version, seat).join(", ");
|
|
223
|
-
return `Action "${action}" is not allowed for your seat (${seat}) under negotiation protocol ${version}. Allowed actions: ${allowed}.`;
|
|
224
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { StructuredQuestion } from '../shared/schemas/structured-question.schema.js';
|
|
2
|
-
/** Fixed prompt-safe labels; producers must not replace them with raw network/counterparty text. */
|
|
3
|
-
export declare const NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY = "the other participant";
|
|
4
|
-
export declare const NEGOTIATION_QUESTION_GENERIC_NETWORK = "the selected network";
|
|
5
|
-
/**
|
|
6
|
-
* Deterministically reject question context copied from private negotiation inputs.
|
|
7
|
-
* This guard never rewrites content: unsafe or ambiguous text yields no card while
|
|
8
|
-
* the already-armed timeout retains the conservative continuation path.
|
|
9
|
-
*/
|
|
10
|
-
export declare function isSafeNegotiationQuestionText(value: string, options?: {
|
|
11
|
-
forbiddenIdentifiers?: string[];
|
|
12
|
-
forbiddenSourceText?: string[];
|
|
13
|
-
}): boolean;
|
|
14
|
-
/**
|
|
15
|
-
* Whole-question gate for a question the NEGOTIATOR authored.
|
|
16
|
-
*
|
|
17
|
-
* The pre-A2H `disclosureSubject` never reached the client as written — the
|
|
18
|
-
* server templated the copy around it. An authored `StructuredQuestion` is
|
|
19
|
-
* rendered verbatim, so every visible field needs the same gate the subject
|
|
20
|
-
* got, and it needs it with the identifiers in hand.
|
|
21
|
-
*
|
|
22
|
-
* That is the capability the api-side `isSafeNegotiationQuestionPayload` lacks
|
|
23
|
-
* and cannot gain: at the DB boundary it holds only generic patterns, so it
|
|
24
|
-
* cannot tell that a perfectly well-formed question is naming THIS counterparty
|
|
25
|
-
* or paraphrasing THIS seed assessment. The turn node has both, which is why
|
|
26
|
-
* this runs here and not there.
|
|
27
|
-
*
|
|
28
|
-
* Fail-closed and non-rewriting, like every guard in this file: a caller that
|
|
29
|
-
* gets `false` drops the question and keeps the enum-only path, rather than
|
|
30
|
-
* shipping a repaired one.
|
|
31
|
-
*
|
|
32
|
-
* @param options.forbiddenIdentifiers Names that must not appear as words —
|
|
33
|
-
* the counterparty's, at the call site.
|
|
34
|
-
* @param options.forbiddenSourceText Private inputs that must not be echoed —
|
|
35
|
-
* the seed assessment's reasoning, at the call site.
|
|
36
|
-
*/
|
|
37
|
-
export declare function isSafeAuthoredNegotiationQuestion(question: StructuredQuestion | null | undefined, options?: {
|
|
38
|
-
forbiddenIdentifiers?: string[];
|
|
39
|
-
forbiddenSourceText?: string[];
|
|
40
|
-
}): boolean;
|
|
41
|
-
/** Validate the only structured fields allowed to enter the inflight Questioner prompt. */
|
|
42
|
-
export declare function validateInflightAskUserFields(input: {
|
|
43
|
-
disclosureSubject?: string | null;
|
|
44
|
-
draftQuestion?: string | null;
|
|
45
|
-
forbiddenIdentifiers?: string[];
|
|
46
|
-
forbiddenSourceText?: string[];
|
|
47
|
-
}): {
|
|
48
|
-
disclosureSubject: string;
|
|
49
|
-
draftQuestion?: string;
|
|
50
|
-
} | null;
|
|
51
|
-
/** Stable, non-secret settlement/outbox key derived only from the exact paused task. */
|
|
52
|
-
export declare function negotiationQuestionSettlementId(taskId: string): string;
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { hasUnsupportedOpportunityClaim } from '../shared/utils/claim-safety.js';
|
|
2
|
-
/** Fixed prompt-safe labels; producers must not replace them with raw network/counterparty text. */
|
|
3
|
-
export const NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY = 'the other participant';
|
|
4
|
-
export const NEGOTIATION_QUESTION_GENERIC_NETWORK = 'the selected network';
|
|
5
|
-
const INTERNAL_ID_PATTERN = /\b(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|(?:task|intent|network|opportunity|user|match)[_-]?id)\b/i;
|
|
6
|
-
const PRIVATE_SOURCE_PATTERN = /\b(?:private transcript|raw transcript|assessment(?:\.reasoning)?|seed assessment|evaluator reasoning|match reason|matchReason|internal metadata|counterparty profile)\b/i;
|
|
7
|
-
function normalize(value) {
|
|
8
|
-
return value.toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim();
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Deterministically reject question context copied from private negotiation inputs.
|
|
12
|
-
* This guard never rewrites content: unsafe or ambiguous text yields no card while
|
|
13
|
-
* the already-armed timeout retains the conservative continuation path.
|
|
14
|
-
*/
|
|
15
|
-
export function isSafeNegotiationQuestionText(value, options) {
|
|
16
|
-
const trimmed = value.trim();
|
|
17
|
-
if (trimmed.length === 0 || trimmed.length > 600)
|
|
18
|
-
return false;
|
|
19
|
-
if (INTERNAL_ID_PATTERN.test(trimmed) || PRIVATE_SOURCE_PATTERN.test(trimmed))
|
|
20
|
-
return false;
|
|
21
|
-
if (hasUnsupportedOpportunityClaim(trimmed))
|
|
22
|
-
return false;
|
|
23
|
-
const normalized = normalize(trimmed);
|
|
24
|
-
for (const identifier of options?.forbiddenIdentifiers ?? []) {
|
|
25
|
-
const forbidden = normalize(identifier);
|
|
26
|
-
if (forbidden.length >= 3 && new RegExp(`(?:^| )${forbidden.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?: |$)`).test(normalized)) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
for (const source of options?.forbiddenSourceText ?? []) {
|
|
31
|
-
const forbidden = normalize(source);
|
|
32
|
-
if (forbidden.length >= 24 && (normalized.includes(forbidden) || forbidden.includes(normalized))) {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Instruction-shaped text that must never survive into a rendered question.
|
|
40
|
-
*
|
|
41
|
-
* Applies ONLY to `isSafeAuthoredNegotiationQuestion` — deliberately not added
|
|
42
|
-
* to `isSafeNegotiationQuestionText`, which guards a live path whose verdicts
|
|
43
|
-
* must not move. The exposure is specific to the authored question: the client
|
|
44
|
-
* reads these strings verbatim on a card, and whatever they select comes BACK
|
|
45
|
-
* into the negotiator's prompt as a user answer. An option labelled "ignore
|
|
46
|
-
* previous instructions" is therefore a round-trip injection with a human
|
|
47
|
-
* clicking the button.
|
|
48
|
-
*
|
|
49
|
-
* Two families. Override phrasings ("ignore the above", "you are now a…"), and
|
|
50
|
-
* forged structure: role headers and the `--- section ---` delimiter this
|
|
51
|
-
* codebase actually uses to fence prompt sections (see
|
|
52
|
-
* `renderNegotiatorClientDmSection`), which is what a forged block would have
|
|
53
|
-
* to imitate to be read as one.
|
|
54
|
-
*/
|
|
55
|
-
const PROMPT_INJECTION_PATTERN = /\b(?:ignore|disregard|forget|override|bypass)\b[^.!?\n]{0,40}\b(?:instructions?|prompts?|rules?|directives?|guidelines?|everything\s+above|the\s+above|all\s+of\s+the\s+above)\b|\byou\s+are\s+now\s+(?:an?|the)\b|\bnew\s+instructions?\s*:|^\s*(?:#{1,6}\s*|\*{2}\s*)?(?:system|assistant|developer|human)\s*:|<\|[^|>]{0,40}\|>|\[\/?(?:INST|SYS)\]|^\s*-{3,}[^\n]*-{3,}\s*$/im;
|
|
56
|
-
/**
|
|
57
|
-
* Whole-question gate for a question the NEGOTIATOR authored.
|
|
58
|
-
*
|
|
59
|
-
* The pre-A2H `disclosureSubject` never reached the client as written — the
|
|
60
|
-
* server templated the copy around it. An authored `StructuredQuestion` is
|
|
61
|
-
* rendered verbatim, so every visible field needs the same gate the subject
|
|
62
|
-
* got, and it needs it with the identifiers in hand.
|
|
63
|
-
*
|
|
64
|
-
* That is the capability the api-side `isSafeNegotiationQuestionPayload` lacks
|
|
65
|
-
* and cannot gain: at the DB boundary it holds only generic patterns, so it
|
|
66
|
-
* cannot tell that a perfectly well-formed question is naming THIS counterparty
|
|
67
|
-
* or paraphrasing THIS seed assessment. The turn node has both, which is why
|
|
68
|
-
* this runs here and not there.
|
|
69
|
-
*
|
|
70
|
-
* Fail-closed and non-rewriting, like every guard in this file: a caller that
|
|
71
|
-
* gets `false` drops the question and keeps the enum-only path, rather than
|
|
72
|
-
* shipping a repaired one.
|
|
73
|
-
*
|
|
74
|
-
* @param options.forbiddenIdentifiers Names that must not appear as words —
|
|
75
|
-
* the counterparty's, at the call site.
|
|
76
|
-
* @param options.forbiddenSourceText Private inputs that must not be echoed —
|
|
77
|
-
* the seed assessment's reasoning, at the call site.
|
|
78
|
-
*/
|
|
79
|
-
export function isSafeAuthoredNegotiationQuestion(question, options) {
|
|
80
|
-
if (!question || typeof question !== 'object')
|
|
81
|
-
return false;
|
|
82
|
-
// Re-checked rather than trusted from the schema: this gate also runs on
|
|
83
|
-
// turns that arrive from an external agent, and a rendered card with one
|
|
84
|
-
// option (or fifteen) is a broken card regardless of how it validated.
|
|
85
|
-
const questionOptions = question.options;
|
|
86
|
-
if (!Array.isArray(questionOptions) || questionOptions.length < 2 || questionOptions.length > 4)
|
|
87
|
-
return false;
|
|
88
|
-
const fields = [
|
|
89
|
-
question.title,
|
|
90
|
-
question.prompt,
|
|
91
|
-
...questionOptions.flatMap((option) => [option?.label, option?.description]),
|
|
92
|
-
];
|
|
93
|
-
for (const field of fields) {
|
|
94
|
-
if (typeof field !== 'string')
|
|
95
|
-
return false;
|
|
96
|
-
if (!isSafeNegotiationQuestionText(field, options))
|
|
97
|
-
return false;
|
|
98
|
-
if (PROMPT_INJECTION_PATTERN.test(field))
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
/** Validate the only structured fields allowed to enter the inflight Questioner prompt. */
|
|
104
|
-
export function validateInflightAskUserFields(input) {
|
|
105
|
-
const disclosureSubject = input.disclosureSubject?.trim();
|
|
106
|
-
if (!disclosureSubject || !isSafeNegotiationQuestionText(disclosureSubject, input))
|
|
107
|
-
return null;
|
|
108
|
-
const draftQuestion = input.draftQuestion?.trim();
|
|
109
|
-
if (draftQuestion && !isSafeNegotiationQuestionText(draftQuestion, input))
|
|
110
|
-
return null;
|
|
111
|
-
return {
|
|
112
|
-
disclosureSubject,
|
|
113
|
-
...(draftQuestion ? { draftQuestion } : {}),
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
/** Stable, non-secret settlement/outbox key derived only from the exact paused task. */
|
|
117
|
-
export function negotiationQuestionSettlementId(taskId) {
|
|
118
|
-
return `negotiation-question-settlement-v1-${taskId}`;
|
|
119
|
-
}
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { createStructuredModel } from "../shared/agent/model.config.js";
|
|
3
|
-
export { NEGOTIATOR_MEMORY_KINDS } from "./negotiation.memory.js";
|
|
4
|
-
export type { DistilledMemoryKind } from "./negotiation.memory.js";
|
|
5
|
-
/** Hard ceiling on entries distilled per reflection pass (per side). */
|
|
6
|
-
export declare const MAX_DISTILLED_MEMORIES = 3;
|
|
7
|
-
/**
|
|
8
|
-
* One distilled memory entry as produced by the reflection LLM. The caller
|
|
9
|
-
* owns persistence: it resolves `aboutCounterparty` to a `subjectUserId`,
|
|
10
|
-
* computes the embedding, and attaches provenance `sourceRefs`.
|
|
11
|
-
*/
|
|
12
|
-
export declare const DistilledMemorySchema: z.ZodObject<{
|
|
13
|
-
kind: z.ZodEnum<["playbook", "disclosure_rule", "counterparty_dossier", "threshold"]>;
|
|
14
|
-
/** Self-contained operational statement, useful without the transcript. */
|
|
15
|
-
content: z.ZodString;
|
|
16
|
-
/** Evidence strength, 0..1. Explicit client statements score high. */
|
|
17
|
-
confidence: z.ZodNumber;
|
|
18
|
-
/**
|
|
19
|
-
* True when the entry is about the counterparty (kind should be
|
|
20
|
-
* `counterparty_dossier`); false for client-side rules and playbooks.
|
|
21
|
-
*/
|
|
22
|
-
aboutCounterparty: z.ZodBoolean;
|
|
23
|
-
/** Turn indexes (0-based, into the provided transcript) evidencing this entry. */
|
|
24
|
-
turnIndexes: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
|
|
25
|
-
}, "strip", z.ZodTypeAny, {
|
|
26
|
-
kind: "threshold" | "playbook" | "disclosure_rule" | "counterparty_dossier";
|
|
27
|
-
confidence: number;
|
|
28
|
-
content: string;
|
|
29
|
-
aboutCounterparty: boolean;
|
|
30
|
-
turnIndexes: number[];
|
|
31
|
-
}, {
|
|
32
|
-
kind: "threshold" | "playbook" | "disclosure_rule" | "counterparty_dossier";
|
|
33
|
-
confidence: number;
|
|
34
|
-
content: string;
|
|
35
|
-
aboutCounterparty: boolean;
|
|
36
|
-
turnIndexes?: number[] | undefined;
|
|
37
|
-
}>;
|
|
38
|
-
export type DistilledMemory = z.infer<typeof DistilledMemorySchema>;
|
|
39
|
-
export declare const ReflectionResultSchema: z.ZodObject<{
|
|
40
|
-
memories: z.ZodArray<z.ZodObject<{
|
|
41
|
-
kind: z.ZodEnum<["playbook", "disclosure_rule", "counterparty_dossier", "threshold"]>;
|
|
42
|
-
/** Self-contained operational statement, useful without the transcript. */
|
|
43
|
-
content: z.ZodString;
|
|
44
|
-
/** Evidence strength, 0..1. Explicit client statements score high. */
|
|
45
|
-
confidence: z.ZodNumber;
|
|
46
|
-
/**
|
|
47
|
-
* True when the entry is about the counterparty (kind should be
|
|
48
|
-
* `counterparty_dossier`); false for client-side rules and playbooks.
|
|
49
|
-
*/
|
|
50
|
-
aboutCounterparty: z.ZodBoolean;
|
|
51
|
-
/** Turn indexes (0-based, into the provided transcript) evidencing this entry. */
|
|
52
|
-
turnIndexes: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
|
|
53
|
-
}, "strip", z.ZodTypeAny, {
|
|
54
|
-
kind: "threshold" | "playbook" | "disclosure_rule" | "counterparty_dossier";
|
|
55
|
-
confidence: number;
|
|
56
|
-
content: string;
|
|
57
|
-
aboutCounterparty: boolean;
|
|
58
|
-
turnIndexes: number[];
|
|
59
|
-
}, {
|
|
60
|
-
kind: "threshold" | "playbook" | "disclosure_rule" | "counterparty_dossier";
|
|
61
|
-
confidence: number;
|
|
62
|
-
content: string;
|
|
63
|
-
aboutCounterparty: boolean;
|
|
64
|
-
turnIndexes?: number[] | undefined;
|
|
65
|
-
}>, "many">;
|
|
66
|
-
}, "strip", z.ZodTypeAny, {
|
|
67
|
-
memories: {
|
|
68
|
-
kind: "threshold" | "playbook" | "disclosure_rule" | "counterparty_dossier";
|
|
69
|
-
confidence: number;
|
|
70
|
-
content: string;
|
|
71
|
-
aboutCounterparty: boolean;
|
|
72
|
-
turnIndexes: number[];
|
|
73
|
-
}[];
|
|
74
|
-
}, {
|
|
75
|
-
memories: {
|
|
76
|
-
kind: "threshold" | "playbook" | "disclosure_rule" | "counterparty_dossier";
|
|
77
|
-
confidence: number;
|
|
78
|
-
content: string;
|
|
79
|
-
aboutCounterparty: boolean;
|
|
80
|
-
turnIndexes?: number[] | undefined;
|
|
81
|
-
}[];
|
|
82
|
-
}>;
|
|
83
|
-
export type ReflectionResult = z.infer<typeof ReflectionResultSchema>;
|
|
84
|
-
/** A transcript row projected into the reflecting client's perspective. */
|
|
85
|
-
export interface ReflectionTranscriptEntry {
|
|
86
|
-
index: number;
|
|
87
|
-
speaker: "client" | "counterparty";
|
|
88
|
-
action: string;
|
|
89
|
-
message?: string;
|
|
90
|
-
reasoning?: string;
|
|
91
|
-
}
|
|
92
|
-
export interface NegotiationReflectionInput {
|
|
93
|
-
/** The user whose negotiator is reflecting (memories land on their agent). */
|
|
94
|
-
clientUser: {
|
|
95
|
-
id: string;
|
|
96
|
-
name?: string;
|
|
97
|
-
bio?: string;
|
|
98
|
-
};
|
|
99
|
-
counterpartyUser: {
|
|
100
|
-
id: string;
|
|
101
|
-
name?: string;
|
|
102
|
-
bio?: string;
|
|
103
|
-
};
|
|
104
|
-
/** The client's seat in this negotiation. */
|
|
105
|
-
seat: "initiator" | "counterparty";
|
|
106
|
-
outcome: {
|
|
107
|
-
hasOpportunity: boolean;
|
|
108
|
-
reasoning: string;
|
|
109
|
-
turnCount: number;
|
|
110
|
-
};
|
|
111
|
-
transcript: ReflectionTranscriptEntry[];
|
|
112
|
-
/** Network prompt for context (optional). */
|
|
113
|
-
indexContext?: string;
|
|
114
|
-
}
|
|
115
|
-
export interface ChatReflectionInput {
|
|
116
|
-
clientUser: {
|
|
117
|
-
id: string;
|
|
118
|
-
name?: string;
|
|
119
|
-
};
|
|
120
|
-
/** The negotiator DM messages, oldest first. */
|
|
121
|
-
messages: Array<{
|
|
122
|
-
role: "user" | "assistant";
|
|
123
|
-
content: string;
|
|
124
|
-
}>;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Payload the finalize node hands to the injected {@link ReflectEnqueueFn}.
|
|
128
|
-
* Carries user display context so the reflect worker never re-loads profiles;
|
|
129
|
-
* turn history is loaded from the conversation by the worker (payloads stay
|
|
130
|
-
* small in Redis).
|
|
131
|
-
*/
|
|
132
|
-
export interface NegotiationReflectJobData {
|
|
133
|
-
negotiationId: string;
|
|
134
|
-
conversationId: string;
|
|
135
|
-
opportunityId?: string;
|
|
136
|
-
sourceUser: {
|
|
137
|
-
id: string;
|
|
138
|
-
name?: string;
|
|
139
|
-
bio?: string;
|
|
140
|
-
};
|
|
141
|
-
candidateUser: {
|
|
142
|
-
id: string;
|
|
143
|
-
name?: string;
|
|
144
|
-
bio?: string;
|
|
145
|
-
};
|
|
146
|
-
initiatorUserId: string;
|
|
147
|
-
outcome: {
|
|
148
|
-
hasOpportunity: boolean;
|
|
149
|
-
reasoning: string;
|
|
150
|
-
turnCount: number;
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Injected enqueue callback for post-negotiation reflection (P5.2). The
|
|
155
|
-
* protocol package has no BullMQ access — services/api wires this at its
|
|
156
|
-
* composition roots, exactly like `QuestionerEnqueueFn`. Called fire-and-
|
|
157
|
-
* forget from the finalize node: a reflection failure must never affect the
|
|
158
|
-
* negotiation outcome.
|
|
159
|
-
*/
|
|
160
|
-
export type ReflectEnqueueFn = (job: NegotiationReflectJobData) => Promise<void>;
|
|
161
|
-
export interface NegotiationReflectorConfig {
|
|
162
|
-
/** Hard ceiling on the reflection LLM round-trip, in ms (default 20000). */
|
|
163
|
-
timeoutMs?: number;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* The memory distiller (P5.2). One structured LLM call per reflection pass,
|
|
167
|
-
* producing ≤ {@link MAX_DISTILLED_MEMORIES} private memory entries for one
|
|
168
|
-
* client's negotiator. Throws on LLM/validation failure — callers (the reflect
|
|
169
|
-
* queue worker) own the swallow-and-log policy, since reflection must never
|
|
170
|
-
* affect a negotiation outcome.
|
|
171
|
-
*/
|
|
172
|
-
export declare class NegotiationReflector {
|
|
173
|
-
private readonly timeoutMs;
|
|
174
|
-
constructor(config?: NegotiationReflectorConfig);
|
|
175
|
-
/**
|
|
176
|
-
* Distill memories from a finished negotiation, from one side's perspective.
|
|
177
|
-
* @throws When the LLM call times out or returns schema-invalid output.
|
|
178
|
-
*/
|
|
179
|
-
reflectNegotiation(input: NegotiationReflectionInput): Promise<DistilledMemory[]>;
|
|
180
|
-
/**
|
|
181
|
-
* Distill stated preferences/corrections from a client ↔ negotiator chat.
|
|
182
|
-
* @throws When the LLM call times out or returns schema-invalid output.
|
|
183
|
-
*/
|
|
184
|
-
reflectChat(input: ChatReflectionInput): Promise<DistilledMemory[]>;
|
|
185
|
-
private distill;
|
|
186
|
-
/**
|
|
187
|
-
* Raw structured-model round trip. Split out as a seam so tests can drive
|
|
188
|
-
* the schema-validation path without a live provider.
|
|
189
|
-
*/
|
|
190
|
-
protected callModel(model: ReturnType<typeof createStructuredModel>, chatMessages: Array<{
|
|
191
|
-
role: string;
|
|
192
|
-
content: string;
|
|
193
|
-
}>): Promise<unknown>;
|
|
194
|
-
}
|