@indexnetwork/protocol 22.0.0-rc.499.1 → 64.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1841 -0
- package/IMPLEMENTATION.md +140 -181
- package/README.md +16 -20
- package/STABILITY.md +16 -11
- package/dist/{intents/intent.module.d.ts → capabilities/intents.d.ts} +182 -192
- package/dist/capabilities/intents.js +88 -0
- package/dist/capabilities/negotiations.d.ts +17 -0
- package/dist/capabilities/negotiations.js +16 -0
- package/dist/{networks/network.module.d.ts → capabilities/networks.d.ts} +33 -169
- package/dist/{networks/network.module.js → capabilities/networks.js} +6 -17
- package/dist/index.d.ts +57 -134
- package/dist/index.js +41 -105
- package/dist/internal/agents/agent.repository.port.d.ts +59 -0
- package/dist/internal/agents/agent.repository.port.js +7 -0
- package/dist/internal/agents/agent.types.d.ts +35 -0
- package/dist/{agents → internal/agents}/agent.types.js +1 -6
- package/dist/{intents → internal/intents}/graph/intent.graph.d.ts +142 -151
- package/dist/{intents → internal/intents}/graph/intent.graph.execute.d.ts +5 -1
- package/dist/{intents → internal/intents}/graph/intent.graph.execute.js +165 -46
- package/dist/internal/intents/graph/intent.graph.infer.d.ts +78 -0
- package/dist/internal/intents/graph/intent.graph.infer.js +122 -0
- package/dist/internal/intents/graph/intent.graph.js +108 -0
- package/dist/{intents → internal/intents}/graph/intent.graph.reconcile.d.ts +18 -9
- package/dist/internal/intents/graph/intent.graph.reconcile.js +173 -0
- package/dist/internal/intents/graph/intent.graph.shared.d.ts +55 -0
- package/dist/{intents → internal/intents}/graph/intent.graph.shared.js +25 -70
- package/dist/{intents → internal/intents}/graph/intent.graph.state.d.ts +96 -32
- package/dist/{intents → internal/intents}/graph/intent.graph.state.js +42 -31
- package/dist/internal/intents/intent.admission.d.ts +16 -0
- package/dist/internal/intents/intent.admission.js +30 -0
- package/dist/{intents → internal/intents}/intent.inferrer.d.ts +1 -40
- package/dist/{intents → internal/intents}/intent.inferrer.js +13 -49
- package/dist/internal/intents/intent.preparer.d.ts +52 -0
- package/dist/internal/intents/intent.preparer.js +87 -0
- package/dist/{intents → internal/intents}/intent.verifier.d.ts +3 -36
- package/dist/{intents → internal/intents}/intent.verifier.js +0 -17
- package/dist/{networks → internal/networks}/indexer.graph.d.ts +15 -200
- package/dist/{networks → internal/networks}/indexer.graph.js +19 -128
- package/dist/{networks → internal/networks}/indexer.state.d.ts +8 -63
- package/dist/internal/networks/indexer.state.js +70 -0
- package/dist/{networks → internal/networks}/membership.graph.d.ts +6 -6
- package/dist/{networks → internal/networks}/membership.graph.js +3 -3
- package/dist/{networks → internal/networks}/membership.state.d.ts +2 -2
- package/dist/{networks → internal/networks}/membership.state.js +2 -2
- package/dist/{networks → internal/networks}/network.graph.d.ts +9 -22
- package/dist/{networks → internal/networks}/network.graph.js +13 -27
- package/dist/{networks → internal/networks}/network.recommender.d.ts +2 -2
- package/dist/{networks → internal/networks}/network.recommender.js +2 -2
- package/dist/{networks → internal/networks}/network.state.d.ts +4 -7
- package/dist/{networks → internal/networks}/network.state.js +4 -4
- package/dist/internal/opportunities/negotiation-context.loader.d.ts +26 -0
- package/dist/internal/opportunities/negotiation-context.loader.js +36 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.actor.d.ts +1 -1
- package/dist/{opportunities → internal/opportunities}/opportunity.actor.js +7 -1
- package/dist/internal/opportunities/opportunity.counterparties.d.ts +17 -0
- package/dist/internal/opportunities/opportunity.counterparties.js +19 -0
- package/dist/internal/opportunities/opportunity.events.d.ts +38 -0
- package/dist/internal/opportunities/opportunity.events.js +94 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.feed-selection.d.ts +3 -9
- package/dist/internal/opportunities/opportunity.feed-selection.js +40 -0
- package/dist/internal/opportunities/opportunity.graph.modes.d.ts +39 -0
- package/dist/internal/opportunities/opportunity.graph.modes.js +138 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.labels.d.ts +2 -3
- package/dist/internal/opportunities/opportunity.labels.js +9 -0
- package/dist/{opportunities → internal/opportunities}/opportunity.presentation.d.ts +17 -86
- package/dist/{opportunities → internal/opportunities}/opportunity.presentation.js +54 -447
- package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.d.ts +2 -2
- package/dist/internal/opportunities/opportunity.utils.d.ts +105 -0
- package/dist/internal/opportunities/opportunity.utils.js +165 -0
- package/dist/{opportunities → internal/opportunities}/radar/radar.graph.d.ts +17 -17
- package/dist/{opportunities → internal/opportunities}/radar/radar.graph.js +41 -161
- package/dist/{opportunities → internal/opportunities}/radar/radar.state.d.ts +4 -11
- package/dist/{shared → internal/shared}/agent/model-signal.d.ts +1 -1
- package/dist/{shared → internal/shared}/agent/model-signal.js +1 -1
- package/dist/{shared → internal/shared}/agent/model.config.d.ts +28 -86
- package/dist/{shared → internal/shared}/agent/model.config.js +58 -69
- package/dist/internal/shared/agent/model.resolver.d.ts +33 -0
- package/dist/{shared → internal/shared}/agent/model.resolver.js +18 -33
- package/dist/internal/shared/agent/scope.d.ts +20 -0
- package/dist/internal/shared/agent/scope.js +24 -0
- package/dist/internal/shared/assignment/network-assignment.policy.d.ts +23 -0
- package/dist/internal/shared/assignment/network-assignment.policy.js +28 -0
- package/dist/{shared → internal/shared}/observability/log.d.ts +3 -6
- package/dist/{shared → internal/shared}/observability/log.js +9 -18
- package/dist/{shared → internal/shared}/observability/protocol.logger.d.ts +1 -1
- package/dist/{shared → internal/shared}/observability/protocol.logger.js +1 -1
- package/dist/internal/shared/observability/request-context.d.ts +29 -0
- package/dist/internal/shared/observability/request-context.js +17 -0
- package/dist/{shared → internal/shared}/utils/social-label.d.ts +2 -2
- package/dist/{shared → internal/shared}/utils/social-label.js +1 -1
- package/dist/platform/database/capabilities.d.ts +59 -0
- package/dist/{shared/interfaces/database.entities.d.ts → platform/database/entities.d.ts} +81 -121
- package/dist/{shared/interfaces/database.identity-queries.d.ts → platform/database/identity-queries.d.ts} +55 -20
- package/dist/platform/database/member-queries.d.ts +55 -0
- package/dist/platform/database/member-queries.js +4 -0
- package/dist/platform/database/negotiation.d.ts +38 -0
- package/dist/{shared/interfaces/database.network-queries.d.ts → platform/database/network-queries.d.ts} +66 -67
- package/dist/platform/database/network-queries.js +4 -0
- package/dist/{shared/interfaces/database.opportunity-queries.d.ts → platform/database/opportunity-queries.d.ts} +25 -109
- package/dist/{shared/interfaces/database.port.d.ts → platform/database/port.d.ts} +52 -117
- package/dist/{shared/interfaces/database.port.js → platform/database/port.js} +3 -5
- package/dist/platform/database.d.ts +23 -0
- package/dist/{shared/interfaces/database.interface.js → platform/database.js} +1 -1
- package/dist/{shared/interfaces/cache.interface.d.ts → platform/discovery/cache.d.ts} +2 -4
- package/dist/{shared/interfaces/cache.interface.js → platform/discovery/cache.js} +1 -1
- package/dist/platform/discovery/embedder.d.ts +31 -0
- package/dist/platform/runtime/errors.d.ts +6 -0
- package/dist/platform/runtime/errors.js +9 -0
- package/dist/platform/runtime/follow-up.d.ts +36 -0
- package/dist/platform/runtime/follow-up.js +4 -0
- package/dist/platform/runtime/observability.d.ts +34 -0
- package/dist/protocol/core.d.ts +11 -0
- package/dist/protocol/discovery.rules.d.ts +21 -0
- package/dist/protocol/discovery.rules.js +29 -0
- package/dist/protocol/negotiation.constants.d.ts +3 -0
- package/dist/protocol/negotiation.constants.js +3 -0
- package/dist/protocol/negotiation.rules.d.ts +73 -0
- package/dist/protocol/negotiation.rules.js +68 -0
- package/dist/protocol/protocol.prompt.d.ts +13 -0
- package/dist/protocol/protocol.prompt.js +190 -0
- package/dist/{shared → protocol}/schemas/discovery-question.schema.d.ts +13 -13
- package/dist/{shared → protocol}/schemas/discovery-question.schema.js +2 -2
- package/dist/{shared → protocol}/schemas/identity.schema.d.ts +4 -4
- package/dist/{shared → protocol}/schemas/identity.schema.js +4 -4
- package/dist/{shared → protocol}/schemas/network-assignment.schema.d.ts +11 -20
- package/dist/{shared → protocol}/schemas/network-assignment.schema.js +2 -9
- package/dist/protocol/schemas/underspecification.schema.d.ts +9 -0
- package/dist/protocol/schemas/underspecification.schema.js +12 -0
- package/package.json +7 -15
- package/dist/agents/agent.dispatcher.port.d.ts +0 -25
- package/dist/agents/agent.module.d.ts +0 -19
- package/dist/agents/agent.module.js +0 -11
- package/dist/agents/agent.repository.port.d.ts +0 -118
- package/dist/agents/agent.repository.port.js +0 -10
- package/dist/agents/agent.tools.d.ts +0 -16
- package/dist/agents/agent.tools.js +0 -351
- package/dist/agents/agent.tools.port.d.ts +0 -22
- package/dist/agents/agent.tools.port.js +0 -18
- package/dist/agents/agent.types.d.ts +0 -76
- package/dist/chat/chat-streaming.types.d.ts +0 -618
- package/dist/chat/chat-streaming.types.js +0 -297
- package/dist/chat/chat.agent.d.ts +0 -292
- package/dist/chat/chat.agent.js +0 -1010
- package/dist/chat/chat.graph.d.ts +0 -424
- package/dist/chat/chat.graph.js +0 -257
- package/dist/chat/chat.interrupt.classifier.d.ts +0 -25
- package/dist/chat/chat.interrupt.classifier.js +0 -64
- package/dist/chat/chat.persona.d.ts +0 -39
- package/dist/chat/chat.prompt.d.ts +0 -4
- package/dist/chat/chat.prompt.js +0 -12
- package/dist/chat/chat.prompt.modules.d.ts +0 -30
- package/dist/chat/chat.prompt.modules.js +0 -40
- package/dist/chat/chat.question-dedup.d.ts +0 -14
- package/dist/chat/chat.question-dedup.js +0 -17
- package/dist/chat/chat.state.d.ts +0 -135
- package/dist/chat/chat.state.js +0 -120
- package/dist/chat/chat.streamer.d.ts +0 -64
- package/dist/chat/chat.streamer.js +0 -217
- package/dist/chat/chat.suggester.d.ts +0 -23
- package/dist/chat/chat.suggester.js +0 -95
- package/dist/chat/chat.summarizer.d.ts +0 -20
- package/dist/chat/chat.summarizer.js +0 -97
- package/dist/chat/chat.title.generator.d.ts +0 -19
- package/dist/chat/chat.title.generator.js +0 -66
- package/dist/chat/chat.tools.d.ts +0 -5
- package/dist/chat/chat.tools.js +0 -62
- package/dist/chat/chat.utils.d.ts +0 -41
- package/dist/chat/chat.utils.js +0 -88
- package/dist/chat/negotiator.persona.d.ts +0 -74
- package/dist/chat/negotiator.persona.js +0 -154
- package/dist/chat/negotiator.prompt.d.ts +0 -45
- package/dist/chat/negotiator.prompt.js +0 -160
- package/dist/chat/negotiator.tools.d.ts +0 -42
- package/dist/chat/negotiator.tools.js +0 -134
- package/dist/chat/onboarding.persona.d.ts +0 -28
- package/dist/chat/onboarding.persona.js +0 -86
- package/dist/chat/onboarding.prompt.d.ts +0 -6
- package/dist/chat/onboarding.prompt.js +0 -63
- package/dist/chat/signal.persona.d.ts +0 -47
- package/dist/chat/signal.persona.js +0 -319
- package/dist/chat/signal.prompt.d.ts +0 -39
- package/dist/chat/signal.prompt.js +0 -136
- package/dist/contacts/contact.module.d.ts +0 -8
- package/dist/contacts/contact.module.js +0 -6
- package/dist/contacts/contact.repository.port.d.ts +0 -21
- package/dist/contacts/contact.repository.port.js +0 -12
- package/dist/contacts/contact.tools.d.ts +0 -17
- package/dist/contacts/contact.tools.js +0 -108
- package/dist/contacts/contact.tools.port.d.ts +0 -20
- package/dist/contacts/contact.tools.port.js +0 -16
- package/dist/contacts/contact.types.d.ts +0 -24
- package/dist/contacts/contact.types.js +0 -8
- package/dist/contexts/context.generator.d.ts +0 -95
- package/dist/contexts/context.generator.js +0 -127
- package/dist/contexts/context.module.d.ts +0 -13
- package/dist/contexts/context.module.js +0 -12
- package/dist/contexts/context.tools.port.d.ts +0 -9
- package/dist/discovery/hyde.documents.d.ts +0 -9
- package/dist/discovery/hyde.documents.js +0 -49
- package/dist/discovery/hyde.env.d.ts +0 -8
- package/dist/discovery/hyde.env.js +0 -9
- package/dist/discovery/hyde.frame.d.ts +0 -150
- package/dist/discovery/hyde.frame.js +0 -107
- package/dist/discovery/hyde.generator.d.ts +0 -38
- package/dist/discovery/hyde.generator.js +0 -103
- package/dist/discovery/hyde.graph.d.ts +0 -209
- package/dist/discovery/hyde.graph.js +0 -482
- package/dist/discovery/hyde.state.d.ts +0 -70
- package/dist/discovery/hyde.state.js +0 -85
- package/dist/discovery/hyde.strategies.d.ts +0 -17
- package/dist/discovery/hyde.strategies.js +0 -34
- package/dist/discovery/hyde.validator.d.ts +0 -78
- package/dist/discovery/hyde.validator.js +0 -48
- package/dist/discovery/index.d.ts +0 -26
- package/dist/discovery/index.js +0 -19
- package/dist/discovery/lens.inferrer.d.ts +0 -214
- package/dist/discovery/lens.inferrer.js +0 -152
- package/dist/enrichment/enrichment.generator.d.ts +0 -68
- package/dist/enrichment/enrichment.generator.js +0 -95
- package/dist/enrichment/enrichment.graph.d.ts +0 -544
- package/dist/enrichment/enrichment.graph.js +0 -695
- package/dist/enrichment/enrichment.state.d.ts +0 -141
- package/dist/enrichment/enrichment.state.js +0 -115
- package/dist/enrichment/enrichment.tools.context-read.d.ts +0 -10
- package/dist/enrichment/enrichment.tools.context-read.js +0 -353
- package/dist/enrichment/enrichment.tools.context-write.d.ts +0 -9
- package/dist/enrichment/enrichment.tools.context-write.js +0 -417
- package/dist/enrichment/enrichment.tools.d.ts +0 -13
- package/dist/enrichment/enrichment.tools.helpers.d.ts +0 -139
- package/dist/enrichment/enrichment.tools.helpers.js +0 -234
- package/dist/enrichment/enrichment.tools.js +0 -153
- package/dist/intents/graph/intent.graph.infer.d.ts +0 -44
- package/dist/intents/graph/intent.graph.infer.js +0 -97
- package/dist/intents/graph/intent.graph.js +0 -134
- package/dist/intents/graph/intent.graph.reconcile.js +0 -274
- package/dist/intents/graph/intent.graph.shared.d.ts +0 -68
- package/dist/intents/intake/intake.orchestrator.d.ts +0 -203
- package/dist/intents/intake/intake.orchestrator.js +0 -255
- package/dist/intents/intake/intake.pack.generator.d.ts +0 -57
- package/dist/intents/intake/intake.pack.generator.js +0 -90
- package/dist/intents/intent.clarifier.d.ts +0 -51
- package/dist/intents/intent.clarifier.js +0 -201
- package/dist/intents/intent.indexer.d.ts +0 -82
- package/dist/intents/intent.indexer.js +0 -170
- package/dist/intents/intent.module.js +0 -103
- package/dist/intents/intent.proposal.d.ts +0 -37
- package/dist/intents/intent.proposal.js +0 -14
- package/dist/intents/intent.reconciler.d.ts +0 -105
- package/dist/intents/intent.reconciler.js +0 -186
- package/dist/intents/intent.tools.d.ts +0 -27
- package/dist/intents/intent.tools.js +0 -808
- package/dist/maintenance/maintenance.graph.d.ts +0 -239
- package/dist/maintenance/maintenance.graph.js +0 -199
- package/dist/maintenance/maintenance.state.d.ts +0 -35
- package/dist/maintenance/maintenance.state.js +0 -55
- package/dist/mcp/elicitation.builder.d.ts +0 -53
- package/dist/mcp/elicitation.builder.js +0 -74
- package/dist/mcp/elicitation.dispatcher.d.ts +0 -36
- package/dist/mcp/elicitation.dispatcher.js +0 -86
- package/dist/mcp/mcp.authorization-policy.d.ts +0 -252
- package/dist/mcp/mcp.authorization-policy.js +0 -535
- package/dist/mcp/mcp.server.d.ts +0 -90
- package/dist/mcp/mcp.server.js +0 -631
- package/dist/negotiations/insight.generator.d.ts +0 -31
- package/dist/negotiations/insight.generator.js +0 -105
- package/dist/negotiations/negotiation.agent.d.ts +0 -130
- package/dist/negotiations/negotiation.agent.js +0 -396
- package/dist/negotiations/negotiation.answer-consumption.d.ts +0 -223
- package/dist/negotiations/negotiation.answer-consumption.js +0 -275
- package/dist/negotiations/negotiation.attribution.d.ts +0 -91
- package/dist/negotiations/negotiation.attribution.js +0 -109
- package/dist/negotiations/negotiation.candidates.d.ts +0 -83
- package/dist/negotiations/negotiation.candidates.js +0 -162
- package/dist/negotiations/negotiation.client-dm.d.ts +0 -50
- package/dist/negotiations/negotiation.client-dm.js +0 -66
- package/dist/negotiations/negotiation.consultation-policy.d.ts +0 -95
- package/dist/negotiations/negotiation.consultation-policy.js +0 -159
- package/dist/negotiations/negotiation.deadlock.contracts.d.ts +0 -10
- package/dist/negotiations/negotiation.deadlock.d.ts +0 -87
- package/dist/negotiations/negotiation.deadlock.js +0 -150
- package/dist/negotiations/negotiation.detail-reader.d.ts +0 -94
- package/dist/negotiations/negotiation.detail-reader.js +0 -91
- package/dist/negotiations/negotiation.expected-speaker.d.ts +0 -33
- package/dist/negotiations/negotiation.expected-speaker.js +0 -59
- package/dist/negotiations/negotiation.graph.d.ts +0 -694
- package/dist/negotiations/negotiation.graph.finalize.d.ts +0 -5
- package/dist/negotiations/negotiation.graph.finalize.js +0 -403
- package/dist/negotiations/negotiation.graph.init.d.ts +0 -54
- package/dist/negotiations/negotiation.graph.init.js +0 -256
- package/dist/negotiations/negotiation.graph.js +0 -94
- package/dist/negotiations/negotiation.graph.screen.d.ts +0 -23
- package/dist/negotiations/negotiation.graph.screen.js +0 -108
- package/dist/negotiations/negotiation.graph.shared.d.ts +0 -111
- package/dist/negotiations/negotiation.graph.shared.js +0 -168
- package/dist/negotiations/negotiation.graph.turn.d.ts +0 -134
- package/dist/negotiations/negotiation.graph.turn.js +0 -662
- package/dist/negotiations/negotiation.hermes-contract.d.ts +0 -31
- package/dist/negotiations/negotiation.hermes-contract.js +0 -72
- package/dist/negotiations/negotiation.intent-snapshot-provenance.d.ts +0 -21
- package/dist/negotiations/negotiation.intent-snapshot-provenance.js +0 -28
- package/dist/negotiations/negotiation.lifecycle-narration.d.ts +0 -18
- package/dist/negotiations/negotiation.lifecycle-narration.js +0 -87
- package/dist/negotiations/negotiation.memory.d.ts +0 -65
- package/dist/negotiations/negotiation.memory.js +0 -83
- package/dist/negotiations/negotiation.module.d.ts +0 -36
- package/dist/negotiations/negotiation.module.js +0 -23
- package/dist/negotiations/negotiation.protocol.d.ts +0 -1018
- package/dist/negotiations/negotiation.protocol.js +0 -224
- package/dist/negotiations/negotiation.question-safety.d.ts +0 -52
- package/dist/negotiations/negotiation.question-safety.js +0 -119
- package/dist/negotiations/negotiation.reflect.d.ts +0 -194
- package/dist/negotiations/negotiation.reflect.js +0 -145
- package/dist/negotiations/negotiation.scope.d.ts +0 -41
- package/dist/negotiations/negotiation.scope.js +0 -39
- package/dist/negotiations/negotiation.screen.contracts.d.ts +0 -88
- package/dist/negotiations/negotiation.screen.contracts.js +0 -58
- package/dist/negotiations/negotiation.screen.d.ts +0 -78
- package/dist/negotiations/negotiation.screen.js +0 -112
- package/dist/negotiations/negotiation.stall-gap.d.ts +0 -83
- package/dist/negotiations/negotiation.stall-gap.js +0 -152
- package/dist/negotiations/negotiation.stance.contracts.d.ts +0 -123
- package/dist/negotiations/negotiation.stance.contracts.js +0 -317
- package/dist/negotiations/negotiation.state.d.ts +0 -597
- package/dist/negotiations/negotiation.state.js +0 -286
- package/dist/negotiations/negotiation.summarizer.d.ts +0 -25
- package/dist/negotiations/negotiation.summarizer.js +0 -101
- package/dist/negotiations/negotiation.task-lock-policy.d.ts +0 -10
- package/dist/negotiations/negotiation.task-lock-policy.js +0 -22
- package/dist/negotiations/negotiation.tools.d.ts +0 -18
- package/dist/negotiations/negotiation.tools.js +0 -842
- package/dist/negotiations/negotiation.tools.port.d.ts +0 -17
- package/dist/negotiations/negotiation.turn-cap.d.ts +0 -9
- package/dist/negotiations/negotiation.turn-cap.js +0 -12
- package/dist/networks/indexer.state.js +0 -112
- package/dist/networks/network.tools.d.ts +0 -36
- package/dist/networks/network.tools.js +0 -594
- package/dist/opportunities/delivery-card.cache.d.ts +0 -25
- package/dist/opportunities/delivery-card.cache.js +0 -43
- package/dist/opportunities/discovery.env.d.ts +0 -20
- package/dist/opportunities/discovery.env.js +0 -109
- package/dist/opportunities/discriminator/discriminator.adjustments.d.ts +0 -90
- package/dist/opportunities/discriminator/discriminator.adjustments.js +0 -141
- package/dist/opportunities/discriminator/discriminator.assigner.d.ts +0 -78
- package/dist/opportunities/discriminator/discriminator.assigner.js +0 -153
- package/dist/opportunities/discriminator/discriminator.env.d.ts +0 -103
- package/dist/opportunities/discriminator/discriminator.env.js +0 -103
- package/dist/opportunities/discriminator/discriminator.miner.d.ts +0 -114
- package/dist/opportunities/discriminator/discriminator.miner.js +0 -228
- package/dist/opportunities/discriminator/discriminator.push.d.ts +0 -13
- package/dist/opportunities/discriminator/discriminator.push.js +0 -19
- package/dist/opportunities/discriminator/discriminator.question.d.ts +0 -58
- package/dist/opportunities/discriminator/discriminator.question.js +0 -155
- package/dist/opportunities/discriminator/discriminator.scorer.d.ts +0 -32
- package/dist/opportunities/discriminator/discriminator.scorer.js +0 -105
- package/dist/opportunities/discriminator/discriminator.shadow.d.ts +0 -32
- package/dist/opportunities/discriminator/discriminator.shadow.js +0 -90
- package/dist/opportunities/discriminator/discriminator.types.d.ts +0 -93
- package/dist/opportunities/discriminator/discriminator.types.js +0 -18
- package/dist/opportunities/negotiation-context.loader.d.ts +0 -59
- package/dist/opportunities/negotiation-context.loader.js +0 -90
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.d.ts +0 -43
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.env.js +0 -44
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.d.ts +0 -24
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.extractor.js +0 -188
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.d.ts +0 -26
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.miner.js +0 -112
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.d.ts +0 -19
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.shadow.js +0 -61
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.d.ts +0 -191
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.types.js +0 -18
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.d.ts +0 -34
- package/dist/opportunities/negotiation-evidence/negotiation-evidence.verifier.js +0 -91
- package/dist/opportunities/negotiation-summary.builder.d.ts +0 -37
- package/dist/opportunities/negotiation-summary.builder.js +0 -66
- package/dist/opportunities/opportunity.discovery-negotiation-summary.d.ts +0 -14
- package/dist/opportunities/opportunity.discovery-negotiation-summary.js +0 -46
- package/dist/opportunities/opportunity.enricher.d.ts +0 -71
- package/dist/opportunities/opportunity.enricher.js +0 -280
- package/dist/opportunities/opportunity.evaluator.d.ts +0 -289
- package/dist/opportunities/opportunity.evaluator.js +0 -516
- package/dist/opportunities/opportunity.evidence.d.ts +0 -22
- package/dist/opportunities/opportunity.evidence.js +0 -87
- package/dist/opportunities/opportunity.existing-negotiation.d.ts +0 -79
- package/dist/opportunities/opportunity.existing-negotiation.js +0 -118
- package/dist/opportunities/opportunity.feed-selection.js +0 -96
- package/dist/opportunities/opportunity.graph.d.ts +0 -1611
- package/dist/opportunities/opportunity.graph.discovery-strategies.d.ts +0 -109
- package/dist/opportunities/opportunity.graph.discovery-strategies.js +0 -451
- package/dist/opportunities/opportunity.graph.discovery.d.ts +0 -69
- package/dist/opportunities/opportunity.graph.discovery.js +0 -397
- package/dist/opportunities/opportunity.graph.evaluation.d.ts +0 -82
- package/dist/opportunities/opportunity.graph.evaluation.js +0 -608
- package/dist/opportunities/opportunity.graph.js +0 -193
- package/dist/opportunities/opportunity.graph.modes.d.ts +0 -538
- package/dist/opportunities/opportunity.graph.modes.js +0 -538
- package/dist/opportunities/opportunity.graph.negotiate.d.ts +0 -109
- package/dist/opportunities/opportunity.graph.negotiate.js +0 -392
- package/dist/opportunities/opportunity.graph.persist-node.d.ts +0 -93
- package/dist/opportunities/opportunity.graph.persist-node.js +0 -765
- package/dist/opportunities/opportunity.graph.prep.d.ts +0 -150
- package/dist/opportunities/opportunity.graph.prep.js +0 -381
- package/dist/opportunities/opportunity.graph.shared.d.ts +0 -173
- package/dist/opportunities/opportunity.graph.shared.js +0 -199
- package/dist/opportunities/opportunity.introducer-feature.d.ts +0 -2
- package/dist/opportunities/opportunity.introducer-feature.js +0 -4
- package/dist/opportunities/opportunity.introducer.d.ts +0 -77
- package/dist/opportunities/opportunity.introducer.js +0 -99
- package/dist/opportunities/opportunity.labels.js +0 -10
- package/dist/opportunities/opportunity.lifecycle.d.ts +0 -63
- package/dist/opportunities/opportunity.lifecycle.js +0 -181
- package/dist/opportunities/opportunity.module.d.ts +0 -54
- package/dist/opportunities/opportunity.module.js +0 -39
- package/dist/opportunities/opportunity.newborn-stamping.d.ts +0 -41
- package/dist/opportunities/opportunity.newborn-stamping.js +0 -81
- package/dist/opportunities/opportunity.owner-approval.d.ts +0 -118
- package/dist/opportunities/opportunity.owner-approval.js +0 -34
- package/dist/opportunities/opportunity.owner-provenance.d.ts +0 -6
- package/dist/opportunities/opportunity.owner-provenance.js +0 -28
- package/dist/opportunities/opportunity.persist.d.ts +0 -58
- package/dist/opportunities/opportunity.persist.js +0 -145
- package/dist/opportunities/opportunity.persistence-admission.d.ts +0 -39
- package/dist/opportunities/opportunity.persistence-admission.js +0 -59
- package/dist/opportunities/opportunity.state.d.ts +0 -451
- package/dist/opportunities/opportunity.state.js +0 -256
- package/dist/opportunities/opportunity.tools.cards.d.ts +0 -138
- package/dist/opportunities/opportunity.tools.cards.js +0 -212
- package/dist/opportunities/opportunity.tools.d.ts +0 -12
- package/dist/opportunities/opportunity.tools.js +0 -236
- package/dist/opportunities/opportunity.tools.list.d.ts +0 -10
- package/dist/opportunities/opportunity.tools.list.js +0 -489
- package/dist/opportunities/opportunity.tools.port.d.ts +0 -16
- package/dist/opportunities/opportunity.utils.d.ts +0 -217
- package/dist/opportunities/opportunity.utils.js +0 -395
- package/dist/opportunities/outcome/outcome.env.d.ts +0 -60
- package/dist/opportunities/outcome/outcome.env.js +0 -63
- package/dist/opportunities/outcome/outcome.hypotheses.d.ts +0 -29
- package/dist/opportunities/outcome/outcome.hypotheses.js +0 -117
- package/dist/opportunities/outcome/outcome.shadow.d.ts +0 -56
- package/dist/opportunities/outcome/outcome.shadow.js +0 -87
- package/dist/opportunities/outcome/outcome.types.d.ts +0 -110
- package/dist/opportunities/outcome/outcome.types.js +0 -26
- package/dist/opportunities/radar/radar.health.d.ts +0 -31
- package/dist/opportunities/radar/radar.health.js +0 -75
- package/dist/premises/premise.analyzer.d.ts +0 -35
- package/dist/premises/premise.analyzer.js +0 -115
- package/dist/premises/premise.decomposer.d.ts +0 -69
- package/dist/premises/premise.decomposer.js +0 -213
- package/dist/premises/premise.graph.d.ts +0 -345
- package/dist/premises/premise.graph.js +0 -278
- package/dist/premises/premise.indexer.d.ts +0 -35
- package/dist/premises/premise.indexer.js +0 -86
- package/dist/premises/premise.state.d.ts +0 -67
- package/dist/premises/premise.state.js +0 -94
- package/dist/premises/premise.tools.d.ts +0 -3
- package/dist/premises/premise.tools.js +0 -248
- package/dist/questions/question.env.d.ts +0 -27
- package/dist/questions/question.env.js +0 -27
- package/dist/questions/question.input.d.ts +0 -107
- package/dist/questions/question.module.d.ts +0 -30
- package/dist/questions/question.module.js +0 -28
- package/dist/questions/question.schema.d.ts +0 -1529
- package/dist/questions/question.schema.js +0 -420
- package/dist/shared/agent/activity-projection.d.ts +0 -271
- package/dist/shared/agent/activity-projection.js +0 -254
- package/dist/shared/agent/canonical-guidance.d.ts +0 -30
- package/dist/shared/agent/canonical-guidance.js +0 -246
- package/dist/shared/agent/model.resolver.d.ts +0 -48
- package/dist/shared/agent/tool.factory.d.ts +0 -17
- package/dist/shared/agent/tool.factory.js +0 -221
- package/dist/shared/agent/tool.helpers.d.ts +0 -482
- package/dist/shared/agent/tool.helpers.js +0 -232
- package/dist/shared/agent/tool.registry.d.ts +0 -25
- package/dist/shared/agent/tool.registry.js +0 -76
- package/dist/shared/agent/tool.runtime.d.ts +0 -28
- package/dist/shared/agent/tool.runtime.js +0 -194
- package/dist/shared/agent/tool.scope.d.ts +0 -44
- package/dist/shared/agent/tool.scope.js +0 -50
- package/dist/shared/agent/utility.tools.d.ts +0 -15
- package/dist/shared/agent/utility.tools.js +0 -322
- package/dist/shared/assignment/network-assignment.policy.d.ts +0 -61
- package/dist/shared/assignment/network-assignment.policy.js +0 -105
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +0 -100
- package/dist/shared/interfaces/agent-dispatcher.interface.js +0 -12
- package/dist/shared/interfaces/auth.interface.d.ts +0 -37
- package/dist/shared/interfaces/auth.interface.js +0 -1
- package/dist/shared/interfaces/chat-message-writer.interface.d.ts +0 -18
- package/dist/shared/interfaces/chat-message-writer.interface.js +0 -1
- package/dist/shared/interfaces/chat-session.interface.d.ts +0 -23
- package/dist/shared/interfaces/chat-session.interface.js +0 -18
- package/dist/shared/interfaces/chat-summary.interface.d.ts +0 -16
- package/dist/shared/interfaces/chat-summary.interface.js +0 -1
- package/dist/shared/interfaces/database.capabilities.d.ts +0 -100
- package/dist/shared/interfaces/database.interface.d.ts +0 -16
- package/dist/shared/interfaces/database.member-queries.d.ts +0 -219
- package/dist/shared/interfaces/database.member-queries.js +0 -4
- package/dist/shared/interfaces/database.negotiation.d.ts +0 -329
- package/dist/shared/interfaces/database.negotiation.js +0 -26
- package/dist/shared/interfaces/database.network-queries.js +0 -4
- package/dist/shared/interfaces/database.opportunity-queries.js +0 -4
- package/dist/shared/interfaces/delivery-ledger.interface.d.ts +0 -40
- package/dist/shared/interfaces/delivery-ledger.interface.js +0 -5
- package/dist/shared/interfaces/embedder.interface.d.ts +0 -92
- package/dist/shared/interfaces/embedder.interface.js +0 -4
- package/dist/shared/interfaces/enrichment-run.interface.d.ts +0 -62
- package/dist/shared/interfaces/enrichment-run.interface.js +0 -1
- package/dist/shared/interfaces/enrichment.interface.js +0 -1
- package/dist/shared/interfaces/negotiation-events.interface.d.ts +0 -77
- package/dist/shared/interfaces/negotiation-events.interface.js +0 -6
- package/dist/shared/interfaces/negotiation-summary.interface.d.ts +0 -25
- package/dist/shared/interfaces/negotiation-summary.interface.js +0 -1
- package/dist/shared/interfaces/negotiator-memory.interface.d.ts +0 -58
- package/dist/shared/interfaces/negotiator-memory.interface.js +0 -11
- package/dist/shared/interfaces/queue.interface.d.ts +0 -23
- package/dist/shared/interfaces/queue.interface.js +0 -4
- package/dist/shared/interfaces/scraper.interface.js +0 -1
- package/dist/shared/interfaces/tool-request-context.interface.d.ts +0 -11
- package/dist/shared/interfaces/tool-request-context.interface.js +0 -1
- package/dist/shared/observability/request-context.d.ts +0 -27
- package/dist/shared/observability/request-context.js +0 -6
- package/dist/shared/schemas/mcp-auth.schema.d.ts +0 -87
- package/dist/shared/schemas/mcp-auth.schema.js +0 -56
- package/dist/shared/schemas/negotiation-digest.schema.d.ts +0 -58
- package/dist/shared/schemas/negotiation-digest.schema.js +0 -38
- package/dist/shared/schemas/negotiation-state.schema.d.ts +0 -343
- package/dist/shared/schemas/negotiation-state.schema.js +0 -81
- package/dist/shared/schemas/question-block.fixture.d.ts +0 -12
- package/dist/shared/schemas/question-block.fixture.js +0 -39
- package/dist/shared/schemas/question-block.schema.d.ts +0 -111
- package/dist/shared/schemas/question-block.schema.js +0 -124
- package/dist/shared/schemas/structured-question.schema.d.ts +0 -66
- package/dist/shared/schemas/structured-question.schema.js +0 -31
- package/dist/shared/schemas/underspecification.schema.d.ts +0 -13
- package/dist/shared/schemas/underspecification.schema.js +0 -16
- /package/dist/{opportunities → internal/opportunities}/opportunity.update-admission.js +0 -0
- /package/dist/{opportunities → internal/opportunities}/radar/radar.state.js +0 -0
- /package/dist/{shared → internal/shared}/network/metadata.renderer.d.ts +0 -0
- /package/dist/{shared → internal/shared}/network/metadata.renderer.js +0 -0
- /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/debug-meta.sanitizer.js +0 -0
- /package/dist/{shared → internal/shared}/observability/performance.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/performance.js +0 -0
- /package/dist/{shared → internal/shared}/observability/trace.d.ts +0 -0
- /package/dist/{shared → internal/shared}/observability/trace.js +0 -0
- /package/dist/{shared → internal/shared}/utils/claim-safety.d.ts +0 -0
- /package/dist/{shared → internal/shared}/utils/claim-safety.js +0 -0
- /package/dist/{shared → internal/shared}/utils/telegram-handle.d.ts +0 -0
- /package/dist/{shared → internal/shared}/utils/telegram-handle.js +0 -0
- /package/dist/{shared/interfaces/database.capabilities.js → platform/database/capabilities.js} +0 -0
- /package/dist/{shared/interfaces/database.entities.js → platform/database/entities.js} +0 -0
- /package/dist/{shared/interfaces/database.identity-queries.js → platform/database/identity-queries.js} +0 -0
- /package/dist/{agents/agent.dispatcher.port.js → platform/database/negotiation.js} +0 -0
- /package/dist/{chat/chat.persona.js → platform/database/opportunity-queries.js} +0 -0
- /package/dist/{contexts/context.tools.port.js → platform/discovery/embedder.js} +0 -0
- /package/dist/{shared/interfaces/scraper.interface.d.ts → platform/discovery/scraper.d.ts} +0 -0
- /package/dist/{negotiations/negotiation.deadlock.contracts.js → platform/discovery/scraper.js} +0 -0
- /package/dist/{shared/interfaces/enrichment.interface.d.ts → platform/enrichment/ports.d.ts} +0 -0
- /package/dist/{negotiations/negotiation.tools.port.js → platform/enrichment/ports.js} +0 -0
- /package/dist/{opportunities/opportunity.tools.port.js → platform/runtime/observability.js} +0 -0
- /package/dist/{questions/question.input.js → protocol/core.js} +0 -0
- /package/dist/{shared → protocol}/schemas/chat-context.schema.d.ts +0 -0
- /package/dist/{shared → protocol}/schemas/chat-context.schema.js +0 -0
package/dist/chat/chat.state.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { Annotation, messagesStateReducer } from "@langchain/langgraph";
|
|
2
|
-
// ══════════════════════════════════════════════════════════════════════════════
|
|
3
|
-
// CHAT GRAPH STATE (Agent Loop Architecture)
|
|
4
|
-
// ══════════════════════════════════════════════════════════════════════════════
|
|
5
|
-
/**
|
|
6
|
-
* The Chat Graph State using LangGraph Annotations.
|
|
7
|
-
*
|
|
8
|
-
* This is a simplified state for the agent loop architecture.
|
|
9
|
-
* The agent handles all routing decisions internally via tool calling.
|
|
10
|
-
*
|
|
11
|
-
* Design Principles:
|
|
12
|
-
* - Messages accumulate through the conversation (includes tool calls/results)
|
|
13
|
-
* - Iteration count tracks loop progress for soft/hard limits
|
|
14
|
-
* - Final response is extracted at the end
|
|
15
|
-
*/
|
|
16
|
-
export const ChatGraphState = Annotation.Root({
|
|
17
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
18
|
-
// CORE INPUTS
|
|
19
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
20
|
-
/**
|
|
21
|
-
* The User ID - required for all operations.
|
|
22
|
-
*/
|
|
23
|
-
userId: (Annotation),
|
|
24
|
-
/**
|
|
25
|
-
* Legacy optional index (community) ID when chat is scoped to a specific index.
|
|
26
|
-
* New callers should set scopeType/scopeId; networkId is retained as an edge alias.
|
|
27
|
-
*/
|
|
28
|
-
networkId: Annotation({
|
|
29
|
-
reducer: (curr, next) => next ?? curr,
|
|
30
|
-
default: () => undefined,
|
|
31
|
-
}),
|
|
32
|
-
/** Focused request scope type. Network scope uses a network id; intent scope uses an intent id. */
|
|
33
|
-
scopeType: Annotation({
|
|
34
|
-
reducer: (curr, next) => next ?? curr,
|
|
35
|
-
default: () => undefined,
|
|
36
|
-
}),
|
|
37
|
-
/** Focused request scope id. Network scope uses a network id; intent scope uses an intent id. */
|
|
38
|
-
scopeId: Annotation({
|
|
39
|
-
reducer: (curr, next) => next ?? curr,
|
|
40
|
-
default: () => undefined,
|
|
41
|
-
}),
|
|
42
|
-
/**
|
|
43
|
-
* Chat session ID when streaming with context. Used by tools to create draft
|
|
44
|
-
* opportunities tied to this conversation (context.conversationId).
|
|
45
|
-
*/
|
|
46
|
-
sessionId: Annotation({
|
|
47
|
-
reducer: (curr, next) => next ?? curr,
|
|
48
|
-
default: () => undefined,
|
|
49
|
-
}),
|
|
50
|
-
/**
|
|
51
|
-
* Conversation history using LangGraph's built-in message reducer.
|
|
52
|
-
* Includes: HumanMessage, AIMessage, ToolMessage, SystemMessage
|
|
53
|
-
* Automatically handles message appending, ID management, and ordering.
|
|
54
|
-
*/
|
|
55
|
-
messages: Annotation({
|
|
56
|
-
reducer: messagesStateReducer,
|
|
57
|
-
default: () => [],
|
|
58
|
-
}),
|
|
59
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
60
|
-
// LOOP CONTROL
|
|
61
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
62
|
-
/**
|
|
63
|
-
* Current iteration count in the agent loop.
|
|
64
|
-
* Used for soft limit (nudge) and hard limit (force exit).
|
|
65
|
-
*/
|
|
66
|
-
iterationCount: Annotation({
|
|
67
|
-
reducer: (curr, next) => next,
|
|
68
|
-
default: () => 0,
|
|
69
|
-
}),
|
|
70
|
-
/**
|
|
71
|
-
* Flag indicating whether the agent loop should continue.
|
|
72
|
-
* Set to false when agent produces final response or hits hard limit.
|
|
73
|
-
*/
|
|
74
|
-
shouldContinue: Annotation({
|
|
75
|
-
reducer: (curr, next) => next,
|
|
76
|
-
default: () => true,
|
|
77
|
-
}),
|
|
78
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
79
|
-
// OUTPUTS
|
|
80
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
81
|
-
/**
|
|
82
|
-
* The final generated response text.
|
|
83
|
-
* Set when the agent decides to stop and respond.
|
|
84
|
-
*/
|
|
85
|
-
responseText: Annotation({
|
|
86
|
-
reducer: (curr, next) => next,
|
|
87
|
-
default: () => undefined,
|
|
88
|
-
}),
|
|
89
|
-
/**
|
|
90
|
-
* Error message if the agent loop fails.
|
|
91
|
-
*/
|
|
92
|
-
error: Annotation({
|
|
93
|
-
reducer: (curr, next) => next,
|
|
94
|
-
default: () => undefined,
|
|
95
|
-
}),
|
|
96
|
-
/**
|
|
97
|
-
* Per-turn debug meta (graph, iterations, tool calls) for copy-debug.
|
|
98
|
-
* Not persisted; only used so the streamer receives it in the updates chunk.
|
|
99
|
-
*/
|
|
100
|
-
debugMeta: Annotation({
|
|
101
|
-
reducer: (curr, next) => next,
|
|
102
|
-
default: () => undefined,
|
|
103
|
-
}),
|
|
104
|
-
// Legacy subgraph state (used by index/intent/response nodes when present)
|
|
105
|
-
/** Router output: target, operationType, extractedContext. */
|
|
106
|
-
routingDecision: Annotation({
|
|
107
|
-
reducer: (curr, next) => next,
|
|
108
|
-
default: () => undefined,
|
|
109
|
-
}),
|
|
110
|
-
/** Results from intent/profile/opportunities/scrape subgraphs. */
|
|
111
|
-
subgraphResults: Annotation({
|
|
112
|
-
reducer: (curr, next) => next,
|
|
113
|
-
default: () => undefined,
|
|
114
|
-
}),
|
|
115
|
-
/** User profile context (e.g. for intent nodes). */
|
|
116
|
-
userProfile: Annotation({
|
|
117
|
-
reducer: (curr, next) => next,
|
|
118
|
-
default: () => undefined,
|
|
119
|
-
}),
|
|
120
|
-
});
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { BaseMessage } from "@langchain/core/messages";
|
|
2
|
-
import { BaseCheckpointSaver } from "@langchain/langgraph";
|
|
3
|
-
import type { ToolScopeType } from "../shared/agent/tool.scope.js";
|
|
4
|
-
import type { ChatStreamEvent } from "./chat-streaming.types.js";
|
|
5
|
-
/**
|
|
6
|
-
* Top-level streaming service for Chat Graph events.
|
|
7
|
-
*
|
|
8
|
-
* Uses `graph.stream()` with `streamMode: ["custom", "updates"]` so that
|
|
9
|
-
* the agent's `config.writer()` calls arrive as `"custom"` chunks (text
|
|
10
|
-
* tokens and tool-activity events) and the final state update arrives as
|
|
11
|
-
* an `"updates"` chunk.
|
|
12
|
-
*/
|
|
13
|
-
export declare class ChatStreamer {
|
|
14
|
-
private loadSessionContext;
|
|
15
|
-
private createStreamingGraph;
|
|
16
|
-
constructor(loadSessionContext: (sessionId: string, maxMessages: number) => Promise<BaseMessage[]>, createStreamingGraph: (checkpointer?: BaseCheckpointSaver) => any);
|
|
17
|
-
/**
|
|
18
|
-
* Streams chat events with full session context.
|
|
19
|
-
* Loads previous conversation history and optionally uses a checkpointer
|
|
20
|
-
* for state persistence.
|
|
21
|
-
*
|
|
22
|
-
* @param input - Configuration for context-aware streaming
|
|
23
|
-
* @param checkpointer - Optional checkpointer for state persistence
|
|
24
|
-
* @yields ChatStreamEvent objects
|
|
25
|
-
*/
|
|
26
|
-
streamChatEventsWithContext(input: {
|
|
27
|
-
userId: string;
|
|
28
|
-
message: string;
|
|
29
|
-
sessionId: string;
|
|
30
|
-
maxContextMessages?: number;
|
|
31
|
-
/** @deprecated Use scopeType/scopeId. Kept for REST/session edge compatibility. */
|
|
32
|
-
networkId?: string;
|
|
33
|
-
scopeType?: ToolScopeType;
|
|
34
|
-
scopeId?: string;
|
|
35
|
-
prefillMessages?: Array<{
|
|
36
|
-
role: "assistant" | "user";
|
|
37
|
-
content: string;
|
|
38
|
-
}>;
|
|
39
|
-
/** Per-run identifier used to form a composite LangGraph thread_id (sessionId:runId).
|
|
40
|
-
* When provided, prevents stale checkpoint state from a prior run being resumed.
|
|
41
|
-
* Defaults to sessionId alone when absent (backward compatible). */
|
|
42
|
-
runId?: string;
|
|
43
|
-
}, checkpointer?: BaseCheckpointSaver, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
44
|
-
/**
|
|
45
|
-
* Streams chat events from the graph execution.
|
|
46
|
-
*
|
|
47
|
-
* Uses `graph.stream()` with `streamMode: ["custom", "updates"]`:
|
|
48
|
-
* - `"custom"` chunks carry {@link AgentStreamEvent} objects emitted by
|
|
49
|
-
* `ChatAgent.streamRun()` via `config.writer()`
|
|
50
|
-
* - `"updates"` chunks carry the final state update from `agentLoopNode`
|
|
51
|
-
*
|
|
52
|
-
* @param input - The input state for the graph (userId and messages)
|
|
53
|
-
* @param sessionId - The session ID for event attribution
|
|
54
|
-
* @param checkpointer - Optional checkpointer for persistence
|
|
55
|
-
* @yields ChatStreamEvent objects
|
|
56
|
-
*/
|
|
57
|
-
streamChatEvents(input: {
|
|
58
|
-
userId: string;
|
|
59
|
-
messages: BaseMessage[];
|
|
60
|
-
networkId?: string;
|
|
61
|
-
scopeType?: ToolScopeType;
|
|
62
|
-
scopeId?: string;
|
|
63
|
-
}, sessionId: string, checkpointer?: BaseCheckpointSaver, signal?: AbortSignal, threadId?: string): AsyncGenerator<ChatStreamEvent>;
|
|
64
|
-
}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { AIMessage, HumanMessage } from "@langchain/core/messages";
|
|
2
|
-
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
3
|
-
import { createAgentEndEvent, createAgentStartEvent, createDebugMetaEvent, createDecisionQuestionsEvent, createErrorEvent, createGraphEndEvent, createPhaseStartEvent, createPhaseEndEvent, createGraphStartEvent, createIterationStartEvent, createLlmStartEvent, createLlmEndEvent, createResponseCompleteEvent, createResponseResetEvent, createHallucinationDetectedEvent, createStatusEvent, createTokenEvent, createToolActivityEvent, createChatSummarizerStartEvent, createChatSummarizerEndEvent } from "./chat-streaming.types.js";
|
|
4
|
-
const logger = protocolLogger("ChatStreamer");
|
|
5
|
-
// ══════════════════════════════════════════════════════════════════════════════
|
|
6
|
-
// CHAT STREAMER (Streaming Narration Architecture)
|
|
7
|
-
// ══════════════════════════════════════════════════════════════════════════════
|
|
8
|
-
/**
|
|
9
|
-
* Top-level streaming service for Chat Graph events.
|
|
10
|
-
*
|
|
11
|
-
* Uses `graph.stream()` with `streamMode: ["custom", "updates"]` so that
|
|
12
|
-
* the agent's `config.writer()` calls arrive as `"custom"` chunks (text
|
|
13
|
-
* tokens and tool-activity events) and the final state update arrives as
|
|
14
|
-
* an `"updates"` chunk.
|
|
15
|
-
*/
|
|
16
|
-
export class ChatStreamer {
|
|
17
|
-
constructor(loadSessionContext, createStreamingGraph) {
|
|
18
|
-
this.loadSessionContext = loadSessionContext;
|
|
19
|
-
this.createStreamingGraph = createStreamingGraph;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Streams chat events with full session context.
|
|
23
|
-
* Loads previous conversation history and optionally uses a checkpointer
|
|
24
|
-
* for state persistence.
|
|
25
|
-
*
|
|
26
|
-
* @param input - Configuration for context-aware streaming
|
|
27
|
-
* @param checkpointer - Optional checkpointer for state persistence
|
|
28
|
-
* @yields ChatStreamEvent objects
|
|
29
|
-
*/
|
|
30
|
-
async *streamChatEventsWithContext(input, checkpointer, signal) {
|
|
31
|
-
const { userId, message, sessionId, maxContextMessages = 20, networkId, scopeType, scopeId, prefillMessages, runId, } = input;
|
|
32
|
-
const effectiveScopeType = scopeType ?? (networkId ? 'network' : undefined);
|
|
33
|
-
const effectiveScopeId = scopeId ?? (effectiveScopeType === 'network' ? networkId : undefined);
|
|
34
|
-
logger.verbose("Starting context-aware streaming", {
|
|
35
|
-
userId,
|
|
36
|
-
sessionId,
|
|
37
|
-
maxContextMessages,
|
|
38
|
-
hasCheckpointer: !!checkpointer,
|
|
39
|
-
hasIndexScope: !!effectiveScopeId,
|
|
40
|
-
scopeType: effectiveScopeType,
|
|
41
|
-
scopeId: effectiveScopeId,
|
|
42
|
-
});
|
|
43
|
-
try {
|
|
44
|
-
// Load previous conversation context
|
|
45
|
-
const previousMessages = await this.loadSessionContext(sessionId, maxContextMessages);
|
|
46
|
-
// Inject prefill messages (e.g. hardcoded onboarding greeting) only for fresh sessions
|
|
47
|
-
const prefill = previousMessages.length === 0
|
|
48
|
-
? (prefillMessages ?? []).map((pm) => pm.role === "assistant" ? new AIMessage(pm.content) : new HumanMessage(pm.content))
|
|
49
|
-
: [];
|
|
50
|
-
const allMessages = [...previousMessages, ...prefill, new HumanMessage(message)];
|
|
51
|
-
logger.verbose("Context prepared", {
|
|
52
|
-
previousCount: previousMessages.length,
|
|
53
|
-
totalCount: allMessages.length,
|
|
54
|
-
});
|
|
55
|
-
// Form composite thread_id when a runId is provided
|
|
56
|
-
const threadId = runId ? `${sessionId}:${runId}` : sessionId;
|
|
57
|
-
// Stream with context using the optional checkpointer
|
|
58
|
-
yield* this.streamChatEvents({ userId, messages: allMessages, scopeType: effectiveScopeType, scopeId: effectiveScopeId }, sessionId, checkpointer, signal, threadId);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
logger.error("Stream error", {
|
|
62
|
-
error: error instanceof Error ? error.message : String(error),
|
|
63
|
-
});
|
|
64
|
-
yield createErrorEvent(sessionId, error instanceof Error
|
|
65
|
-
? error.message
|
|
66
|
-
: "Unknown error during context-aware streaming", "CONTEXT_STREAM_ERROR");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Streams chat events from the graph execution.
|
|
71
|
-
*
|
|
72
|
-
* Uses `graph.stream()` with `streamMode: ["custom", "updates"]`:
|
|
73
|
-
* - `"custom"` chunks carry {@link AgentStreamEvent} objects emitted by
|
|
74
|
-
* `ChatAgent.streamRun()` via `config.writer()`
|
|
75
|
-
* - `"updates"` chunks carry the final state update from `agentLoopNode`
|
|
76
|
-
*
|
|
77
|
-
* @param input - The input state for the graph (userId and messages)
|
|
78
|
-
* @param sessionId - The session ID for event attribution
|
|
79
|
-
* @param checkpointer - Optional checkpointer for persistence
|
|
80
|
-
* @yields ChatStreamEvent objects
|
|
81
|
-
*/
|
|
82
|
-
async *streamChatEvents(input, sessionId, checkpointer, signal, threadId) {
|
|
83
|
-
const graph = this.createStreamingGraph(checkpointer);
|
|
84
|
-
try {
|
|
85
|
-
const initialState = {
|
|
86
|
-
userId: input.userId,
|
|
87
|
-
messages: input.messages,
|
|
88
|
-
};
|
|
89
|
-
const effectiveScopeType = input.scopeType ?? (input.networkId ? 'network' : undefined);
|
|
90
|
-
const effectiveScopeId = input.scopeId ?? (effectiveScopeType === 'network' ? input.networkId : undefined);
|
|
91
|
-
if (input.networkId)
|
|
92
|
-
initialState.networkId = input.networkId;
|
|
93
|
-
if (effectiveScopeType && effectiveScopeId) {
|
|
94
|
-
initialState.scopeType = effectiveScopeType;
|
|
95
|
-
initialState.scopeId = effectiveScopeId;
|
|
96
|
-
}
|
|
97
|
-
initialState.sessionId = sessionId;
|
|
98
|
-
// Use graph.stream() with custom + updates modes.
|
|
99
|
-
// Custom events come from config.writer() inside agentLoopNode.
|
|
100
|
-
const eventStream = await graph.stream(initialState, {
|
|
101
|
-
streamMode: ["custom", "updates"],
|
|
102
|
-
configurable: { thread_id: threadId ?? sessionId, signal },
|
|
103
|
-
signal,
|
|
104
|
-
});
|
|
105
|
-
// Emit initial status
|
|
106
|
-
yield createStatusEvent(sessionId, "Processing your message...");
|
|
107
|
-
for await (const tuple of eventStream) {
|
|
108
|
-
if (signal?.aborted)
|
|
109
|
-
break;
|
|
110
|
-
// graph.stream with multiple modes yields [mode, chunk] tuples
|
|
111
|
-
const [mode, chunk] = tuple;
|
|
112
|
-
// ─────────────────────────────────────────────────────────────────
|
|
113
|
-
// CUSTOM: writer events from ChatAgent.streamRun()
|
|
114
|
-
// ─────────────────────────────────────────────────────────────────
|
|
115
|
-
if (mode === "custom") {
|
|
116
|
-
const event = chunk;
|
|
117
|
-
if (event.type === "iteration_start") {
|
|
118
|
-
yield createIterationStartEvent(sessionId, event.iteration);
|
|
119
|
-
}
|
|
120
|
-
if (event.type === "llm_start") {
|
|
121
|
-
yield createLlmStartEvent(sessionId, event.iteration);
|
|
122
|
-
}
|
|
123
|
-
if (event.type === "text_chunk" && event.content) {
|
|
124
|
-
yield createTokenEvent(sessionId, event.content);
|
|
125
|
-
}
|
|
126
|
-
if (event.type === "response_reset") {
|
|
127
|
-
yield createResponseResetEvent(sessionId, event.reason);
|
|
128
|
-
}
|
|
129
|
-
if (event.type === "hallucination_detected") {
|
|
130
|
-
yield createHallucinationDetectedEvent(sessionId, event.blockType, event.tool);
|
|
131
|
-
}
|
|
132
|
-
if (event.type === "llm_end") {
|
|
133
|
-
yield createLlmEndEvent(sessionId, event.iteration, event.hasToolCalls, event.toolNames);
|
|
134
|
-
}
|
|
135
|
-
if (event.type === "tool_activity") {
|
|
136
|
-
logger.debug("Tool activity", { name: event.name, phase: event.phase });
|
|
137
|
-
if (event.phase === "start") {
|
|
138
|
-
yield createToolActivityEvent(sessionId, event.name, event.name, "start");
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
yield createToolActivityEvent(sessionId, event.name, event.name, "end", event.success, event.summary, event.steps);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (event.type === "graph_start") {
|
|
145
|
-
yield createGraphStartEvent(sessionId, event.name);
|
|
146
|
-
}
|
|
147
|
-
if (event.type === "graph_end") {
|
|
148
|
-
yield createGraphEndEvent(sessionId, event.name, event.durationMs);
|
|
149
|
-
}
|
|
150
|
-
if (event.type === "phase_start") {
|
|
151
|
-
yield createPhaseStartEvent(sessionId, event.name);
|
|
152
|
-
}
|
|
153
|
-
if (event.type === "phase_end") {
|
|
154
|
-
yield createPhaseEndEvent(sessionId, event.name, event.durationMs);
|
|
155
|
-
}
|
|
156
|
-
if (event.type === "agent_start") {
|
|
157
|
-
yield createAgentStartEvent(sessionId, event.name);
|
|
158
|
-
}
|
|
159
|
-
if (event.type === "agent_end") {
|
|
160
|
-
yield createAgentEndEvent(sessionId, event.name, event.durationMs, event.summary);
|
|
161
|
-
}
|
|
162
|
-
if (event.type === "decision_questions") {
|
|
163
|
-
yield createDecisionQuestionsEvent(sessionId, { questions: event.questions });
|
|
164
|
-
}
|
|
165
|
-
if (event.type === "status") {
|
|
166
|
-
// Keep-alive/status line from long-blocking tools so SSE
|
|
167
|
-
// transports do not idle out.
|
|
168
|
-
yield createStatusEvent(sessionId, event.message);
|
|
169
|
-
}
|
|
170
|
-
if (event.type === "chat_summarizer_start") {
|
|
171
|
-
yield createChatSummarizerStartEvent(sessionId, event.payload);
|
|
172
|
-
}
|
|
173
|
-
if (event.type === "chat_summarizer_end") {
|
|
174
|
-
yield createChatSummarizerEndEvent(sessionId, event.payload);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// ─────────────────────────────────────────────────────────────────
|
|
178
|
-
// UPDATES: final state from agentLoopNode
|
|
179
|
-
// ─────────────────────────────────────────────────────────────────
|
|
180
|
-
if (mode === "updates") {
|
|
181
|
-
// The updates chunk is { agent_loop: { responseText, error, ... } }
|
|
182
|
-
const updates = chunk;
|
|
183
|
-
const agentOutput = updates?.agent_loop;
|
|
184
|
-
if (agentOutput?.error) {
|
|
185
|
-
logger.warn("Agent loop returned error via updates", {
|
|
186
|
-
error: agentOutput.error,
|
|
187
|
-
});
|
|
188
|
-
yield createErrorEvent(sessionId, String(agentOutput.error), "AGENT_ERROR");
|
|
189
|
-
}
|
|
190
|
-
// Yield the agent's authoritative response text so the
|
|
191
|
-
// controller can persist it without relying on token accumulation.
|
|
192
|
-
const responseText = typeof agentOutput?.responseText === "string"
|
|
193
|
-
? agentOutput.responseText
|
|
194
|
-
: "";
|
|
195
|
-
yield createResponseCompleteEvent(sessionId, responseText);
|
|
196
|
-
const debugMeta = agentOutput?.debugMeta;
|
|
197
|
-
if (debugMeta?.graph != null &&
|
|
198
|
-
typeof debugMeta.iterations === "number") {
|
|
199
|
-
const llmFallback = { calls: 0, totalDurationMs: 0, resets: [], hallucinations: [] };
|
|
200
|
-
yield createDebugMetaEvent(sessionId, debugMeta.graph, debugMeta.iterations, Array.isArray(debugMeta.tools) ? debugMeta.tools : [], debugMeta.llm ?? llmFallback, debugMeta.orchestratorNegotiations);
|
|
201
|
-
}
|
|
202
|
-
logger.verbose("Agent loop complete (updates)", {
|
|
203
|
-
responseLength: responseText.length,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
logger.error("Stream error", {
|
|
210
|
-
error: error instanceof Error ? error.message : String(error),
|
|
211
|
-
});
|
|
212
|
-
yield createErrorEvent(sessionId, error instanceof Error
|
|
213
|
-
? error.message
|
|
214
|
-
: "Unknown error during streaming", "STREAM_ERROR");
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { ChatSuggestion } from "./chat-streaming.types.js";
|
|
2
|
-
export interface SuggestionGeneratorInput {
|
|
3
|
-
/** Last few messages (user and assistant) to derive context */
|
|
4
|
-
messages: Array<{
|
|
5
|
-
role: "user" | "assistant";
|
|
6
|
-
content: string;
|
|
7
|
-
}>;
|
|
8
|
-
/** Optional index/community context to tailor suggestions */
|
|
9
|
-
indexContext?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Lightweight generator for context-aware chat follow-up suggestions.
|
|
13
|
-
* Uses a fast model and structured output to return 3-5 suggestions per call.
|
|
14
|
-
*/
|
|
15
|
-
export declare class SuggestionGenerator {
|
|
16
|
-
private model;
|
|
17
|
-
constructor();
|
|
18
|
-
/**
|
|
19
|
-
* Generate follow-up suggestions from the last exchange.
|
|
20
|
-
* Returns empty array on failure (graceful degradation).
|
|
21
|
-
*/
|
|
22
|
-
generate(input: SuggestionGeneratorInput): Promise<ChatSuggestion[]>;
|
|
23
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
11
|
-
import { z } from "zod";
|
|
12
|
-
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
13
|
-
import { Timed } from "../shared/observability/performance.js";
|
|
14
|
-
import { createStructuredModel } from "../shared/agent/model.config.js";
|
|
15
|
-
import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
|
|
16
|
-
const logger = protocolLogger("SuggestionGenerator");
|
|
17
|
-
const suggestionItemSchema = z.object({
|
|
18
|
-
label: z.string().describe("Short label for the chip (2-5 words)"),
|
|
19
|
-
type: z.enum(["direct", "prompt"]).describe("direct = auto-submit message; prompt = prefill input"),
|
|
20
|
-
followupText: z.string().nullable().describe("For type=direct: full message to send when clicked; null for prompt type"),
|
|
21
|
-
prefill: z.string().nullable().describe("For type=prompt: text to prefill the input; null for direct type"),
|
|
22
|
-
});
|
|
23
|
-
const suggestionsSchema = z.object({
|
|
24
|
-
suggestions: z
|
|
25
|
-
.array(suggestionItemSchema)
|
|
26
|
-
.min(1)
|
|
27
|
-
.max(6)
|
|
28
|
-
.describe("3-5 follow-up suggestions based on the conversation"),
|
|
29
|
-
});
|
|
30
|
-
const SYSTEM_PROMPT = `You generate follow-up suggestions for a chat user based on their conversation.
|
|
31
|
-
|
|
32
|
-
Rules:
|
|
33
|
-
- Return 3-5 suggestions. Mix of "direct" (one-click send) and "prompt" (prefill for user to edit).
|
|
34
|
-
- Labels must be short: 2-5 words (e.g. "Find collaborators", "Add more details").
|
|
35
|
-
- For type=direct: provide followupText as the exact message to send (complete sentence).
|
|
36
|
-
- For type=prompt: provide prefill as the start of a sentence the user can complete (e.g. "I need help with ").
|
|
37
|
-
- Suggestions must be relevant to the last exchange and natural next steps.
|
|
38
|
-
- Do not repeat what the user or assistant just said; suggest logical follow-ups.
|
|
39
|
-
- Voice: Calm, direct; no hype or networking clichés. Prefer words like opportunity, overlap, signal, pattern, relevant. Avoid: search, leverage, networking, match, optimize, scale.`;
|
|
40
|
-
/**
|
|
41
|
-
* Lightweight generator for context-aware chat follow-up suggestions.
|
|
42
|
-
* Uses a fast model and structured output to return 3-5 suggestions per call.
|
|
43
|
-
*/
|
|
44
|
-
export class SuggestionGenerator {
|
|
45
|
-
constructor() {
|
|
46
|
-
this.model = createStructuredModel("suggestionGenerator", suggestionsSchema, { name: "chat_suggestions" });
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Generate follow-up suggestions from the last exchange.
|
|
50
|
-
* Returns empty array on failure (graceful degradation).
|
|
51
|
-
*/
|
|
52
|
-
async generate(input) {
|
|
53
|
-
const { messages, indexContext } = input;
|
|
54
|
-
if (messages.length === 0)
|
|
55
|
-
return [];
|
|
56
|
-
const excerpt = messages
|
|
57
|
-
.slice(-6)
|
|
58
|
-
.map((m) => `${m.role === "user" ? "User" : "Assistant"}: ${m.content.slice(0, 300)}`)
|
|
59
|
-
.join("\n\n");
|
|
60
|
-
const userContent = indexContext
|
|
61
|
-
? `Conversation (community context: ${indexContext}):\n\n${excerpt}\n\nGenerate 3-5 follow-up suggestions.`
|
|
62
|
-
: `Conversation:\n\n${excerpt}\n\nGenerate 3-5 follow-up suggestions.`;
|
|
63
|
-
try {
|
|
64
|
-
const result = await invokeWithAbortSignal(this.model, [
|
|
65
|
-
new SystemMessage(SYSTEM_PROMPT),
|
|
66
|
-
new HumanMessage(userContent),
|
|
67
|
-
]);
|
|
68
|
-
const parsed = suggestionsSchema.safeParse(result);
|
|
69
|
-
if (!parsed.success) {
|
|
70
|
-
logger.warn("Parse failed", { error: parsed.error.message });
|
|
71
|
-
return [];
|
|
72
|
-
}
|
|
73
|
-
const out = parsed.data.suggestions.map((s) => ({
|
|
74
|
-
label: s.label,
|
|
75
|
-
type: s.type,
|
|
76
|
-
...(s.type === "direct" && s.followupText != null && { followupText: s.followupText }),
|
|
77
|
-
...(s.type === "prompt" && s.prefill != null && { prefill: s.prefill }),
|
|
78
|
-
}));
|
|
79
|
-
logger.verbose("Generated", { count: out.length });
|
|
80
|
-
return out;
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
logger.warn("Failed", {
|
|
84
|
-
error: error instanceof Error ? error.message : String(error),
|
|
85
|
-
});
|
|
86
|
-
return [];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
__decorate([
|
|
91
|
-
Timed(),
|
|
92
|
-
__metadata("design:type", Function),
|
|
93
|
-
__metadata("design:paramtypes", [Object]),
|
|
94
|
-
__metadata("design:returntype", Promise)
|
|
95
|
-
], SuggestionGenerator.prototype, "generate", null);
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type ChatContextDigest } from "../shared/schemas/chat-context.schema.js";
|
|
2
|
-
export interface ChatSummarizerMessage {
|
|
3
|
-
role: "user" | "assistant";
|
|
4
|
-
content: string;
|
|
5
|
-
}
|
|
6
|
-
export interface ChatSummarizerInput {
|
|
7
|
-
previousDigest: ChatContextDigest | null;
|
|
8
|
-
newMessages: ChatSummarizerMessage[];
|
|
9
|
-
}
|
|
10
|
-
/** Pure LLM summarizer; no DB, no events. */
|
|
11
|
-
export declare class ChatSummarizer {
|
|
12
|
-
private model;
|
|
13
|
-
constructor();
|
|
14
|
-
/**
|
|
15
|
-
* Summarize a chat session into a bounded structured digest.
|
|
16
|
-
* @param input - Previous digest (or null) and any messages added since.
|
|
17
|
-
* @returns Updated digest, or null on LLM failure / first-time empty input.
|
|
18
|
-
*/
|
|
19
|
-
summarize(input: ChatSummarizerInput): Promise<ChatContextDigest | null>;
|
|
20
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* ChatSummarizer — rolling, incremental digest of a chat session. Takes the
|
|
12
|
-
* previous persisted digest (if any) plus messages added since, returns a
|
|
13
|
-
* structured ChatContextDigest. Pure: no DB, no events. Persistence is the
|
|
14
|
-
* caller's responsibility (see backend ChatSummaryService).
|
|
15
|
-
*
|
|
16
|
-
* The model is instructed to drop entries in the previous digest that newer
|
|
17
|
-
* messages override, keeping the digest bounded as the session grows.
|
|
18
|
-
*/
|
|
19
|
-
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
20
|
-
import { ChatContextDigestSchema } from "../shared/schemas/chat-context.schema.js";
|
|
21
|
-
import { createStructuredModel } from "../shared/agent/model.config.js";
|
|
22
|
-
import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
|
|
23
|
-
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
24
|
-
import { Timed } from "../shared/observability/performance.js";
|
|
25
|
-
const logger = protocolLogger("ChatSummarizer");
|
|
26
|
-
const MESSAGE_CONTENT_CAP = 240;
|
|
27
|
-
const SYSTEM_PROMPT = `You distill chat sessions into a compact structured digest used to keep an assistant from asking obvious questions.
|
|
28
|
-
|
|
29
|
-
Output four arrays:
|
|
30
|
-
- statedFacts: facts the user volunteered (stage, location, role, timing, scope, budget, …).
|
|
31
|
-
- openQuestions: questions the assistant asked that the user has not yet answered.
|
|
32
|
-
- rejectionReasons: pushback the user gave on prior assistant proposals (e.g. "none of these fit — all US-based").
|
|
33
|
-
- surfacedFindings: facts the assistant has already shared with the user from prior negotiation results.
|
|
34
|
-
|
|
35
|
-
Rules:
|
|
36
|
-
- Drop entries from the previous digest that newer messages override or contradict.
|
|
37
|
-
- Keep each entry short (≤140 chars), specific, and standalone.
|
|
38
|
-
- Bound the digest: at most 20 statedFacts, 10 openQuestions, 10 rejectionReasons, 20 surfacedFindings. Drop the least relevant when over.
|
|
39
|
-
- Never invent facts. If the digest is empty for a category, output an empty array.`;
|
|
40
|
-
/** Pure LLM summarizer; no DB, no events. */
|
|
41
|
-
export class ChatSummarizer {
|
|
42
|
-
constructor() {
|
|
43
|
-
this.model = createStructuredModel("chatContextSummarizer", ChatContextDigestSchema, {
|
|
44
|
-
name: "chat_context_digest",
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Summarize a chat session into a bounded structured digest.
|
|
49
|
-
* @param input - Previous digest (or null) and any messages added since.
|
|
50
|
-
* @returns Updated digest, or null on LLM failure / first-time empty input.
|
|
51
|
-
*/
|
|
52
|
-
async summarize(input) {
|
|
53
|
-
if (input.newMessages.length === 0) {
|
|
54
|
-
return input.previousDigest;
|
|
55
|
-
}
|
|
56
|
-
const truncated = input.newMessages.map((m) => ({
|
|
57
|
-
role: m.role,
|
|
58
|
-
content: m.content.length > MESSAGE_CONTENT_CAP
|
|
59
|
-
? m.content.slice(0, MESSAGE_CONTENT_CAP)
|
|
60
|
-
: m.content,
|
|
61
|
-
}));
|
|
62
|
-
const user = [
|
|
63
|
-
input.previousDigest
|
|
64
|
-
? `Previous digest:\n${JSON.stringify(input.previousDigest, null, 2)}`
|
|
65
|
-
: "Previous digest: (none — this is the first summarization for this session)",
|
|
66
|
-
"",
|
|
67
|
-
"New messages (since previous digest):",
|
|
68
|
-
...truncated.map((m) => ` [${m.role}] ${m.content}`),
|
|
69
|
-
"",
|
|
70
|
-
"Produce the updated digest now.",
|
|
71
|
-
].join("\n");
|
|
72
|
-
try {
|
|
73
|
-
const response = await invokeWithAbortSignal(this.model, [
|
|
74
|
-
new SystemMessage(SYSTEM_PROMPT),
|
|
75
|
-
new HumanMessage(user),
|
|
76
|
-
]);
|
|
77
|
-
const parsed = ChatContextDigestSchema.safeParse(response);
|
|
78
|
-
if (!parsed.success) {
|
|
79
|
-
logger.warn("ChatSummarizer parse failed", { error: parsed.error.message });
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
return parsed.data;
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
logger.warn("ChatSummarizer LLM call failed", {
|
|
86
|
-
error: err instanceof Error ? err.message : String(err),
|
|
87
|
-
});
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
__decorate([
|
|
93
|
-
Timed(),
|
|
94
|
-
__metadata("design:type", Function),
|
|
95
|
-
__metadata("design:paramtypes", [Object]),
|
|
96
|
-
__metadata("design:returntype", Promise)
|
|
97
|
-
], ChatSummarizer.prototype, "summarize", null);
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface TitleGeneratorInput {
|
|
2
|
-
messages: Array<{
|
|
3
|
-
role: string;
|
|
4
|
-
content: string;
|
|
5
|
-
}>;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Generates a short, descriptive title for a chat session using the first exchange.
|
|
9
|
-
* Only meaningful when there is at least one user message and one assistant message.
|
|
10
|
-
*/
|
|
11
|
-
export declare class ChatTitleGenerator {
|
|
12
|
-
private model;
|
|
13
|
-
constructor();
|
|
14
|
-
/**
|
|
15
|
-
* Suggests a title from the conversation excerpt.
|
|
16
|
-
* Call only when there is at least one user and one assistant message.
|
|
17
|
-
*/
|
|
18
|
-
invoke(input: TitleGeneratorInput): Promise<string>;
|
|
19
|
-
}
|