@indexnetwork/protocol 0.1.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/dist/agents/chat.agent.d.ts +218 -0
- package/dist/agents/chat.agent.d.ts.map +1 -0
- package/dist/agents/chat.agent.js +884 -0
- package/dist/agents/chat.agent.js.map +1 -0
- package/dist/agents/chat.prompt.d.ts +18 -0
- package/dist/agents/chat.prompt.d.ts.map +1 -0
- package/dist/agents/chat.prompt.js +372 -0
- package/dist/agents/chat.prompt.js.map +1 -0
- package/dist/agents/chat.prompt.modules.d.ts +61 -0
- package/dist/agents/chat.prompt.modules.d.ts.map +1 -0
- package/dist/agents/chat.prompt.modules.js +366 -0
- package/dist/agents/chat.prompt.modules.js.map +1 -0
- package/dist/agents/chat.title.generator.d.ts +20 -0
- package/dist/agents/chat.title.generator.d.ts.map +1 -0
- package/dist/agents/chat.title.generator.js +66 -0
- package/dist/agents/chat.title.generator.js.map +1 -0
- package/dist/agents/home.categorizer.d.ts +28 -0
- package/dist/agents/home.categorizer.d.ts.map +1 -0
- package/dist/agents/home.categorizer.js +170 -0
- package/dist/agents/home.categorizer.js.map +1 -0
- package/dist/agents/hyde.generator.d.ts +27 -0
- package/dist/agents/hyde.generator.d.ts.map +1 -0
- package/dist/agents/hyde.generator.js +75 -0
- package/dist/agents/hyde.generator.js.map +1 -0
- package/dist/agents/hyde.strategies.d.ts +17 -0
- package/dist/agents/hyde.strategies.d.ts.map +1 -0
- package/dist/agents/hyde.strategies.js +29 -0
- package/dist/agents/hyde.strategies.js.map +1 -0
- package/dist/agents/intent.clarifier.d.ts +29 -0
- package/dist/agents/intent.clarifier.d.ts.map +1 -0
- package/dist/agents/intent.clarifier.js +186 -0
- package/dist/agents/intent.clarifier.js.map +1 -0
- package/dist/agents/intent.indexer.d.ts +77 -0
- package/dist/agents/intent.indexer.d.ts.map +1 -0
- package/dist/agents/intent.indexer.js +164 -0
- package/dist/agents/intent.indexer.js.map +1 -0
- package/dist/agents/intent.inferrer.d.ts +95 -0
- package/dist/agents/intent.inferrer.d.ts.map +1 -0
- package/dist/agents/intent.inferrer.js +238 -0
- package/dist/agents/intent.inferrer.js.map +1 -0
- package/dist/agents/intent.reconciler.d.ts +106 -0
- package/dist/agents/intent.reconciler.d.ts.map +1 -0
- package/dist/agents/intent.reconciler.js +184 -0
- package/dist/agents/intent.reconciler.js.map +1 -0
- package/dist/agents/intent.verifier.d.ts +97 -0
- package/dist/agents/intent.verifier.d.ts.map +1 -0
- package/dist/agents/intent.verifier.js +234 -0
- package/dist/agents/intent.verifier.js.map +1 -0
- package/dist/agents/invite.generator.d.ts +47 -0
- package/dist/agents/invite.generator.d.ts.map +1 -0
- package/dist/agents/invite.generator.js +56 -0
- package/dist/agents/invite.generator.js.map +1 -0
- package/dist/agents/lens.inferrer.d.ts +37 -0
- package/dist/agents/lens.inferrer.d.ts.map +1 -0
- package/dist/agents/lens.inferrer.js +98 -0
- package/dist/agents/lens.inferrer.js.map +1 -0
- package/dist/agents/model.config.d.ts +120 -0
- package/dist/agents/model.config.d.ts.map +1 -0
- package/dist/agents/model.config.js +76 -0
- package/dist/agents/model.config.js.map +1 -0
- package/dist/agents/negotiation.insights.generator.d.ts +32 -0
- package/dist/agents/negotiation.insights.generator.d.ts.map +1 -0
- package/dist/agents/negotiation.insights.generator.js +105 -0
- package/dist/agents/negotiation.insights.generator.js.map +1 -0
- package/dist/agents/negotiation.proposer.d.ts +26 -0
- package/dist/agents/negotiation.proposer.d.ts.map +1 -0
- package/dist/agents/negotiation.proposer.js +67 -0
- package/dist/agents/negotiation.proposer.js.map +1 -0
- package/dist/agents/negotiation.responder.d.ts +26 -0
- package/dist/agents/negotiation.responder.d.ts.map +1 -0
- package/dist/agents/negotiation.responder.js +71 -0
- package/dist/agents/negotiation.responder.js.map +1 -0
- package/dist/agents/opportunity.evaluator.d.ts +253 -0
- package/dist/agents/opportunity.evaluator.d.ts.map +1 -0
- package/dist/agents/opportunity.evaluator.js +413 -0
- package/dist/agents/opportunity.evaluator.js.map +1 -0
- package/dist/agents/opportunity.presenter.d.ts +115 -0
- package/dist/agents/opportunity.presenter.d.ts.map +1 -0
- package/dist/agents/opportunity.presenter.js +524 -0
- package/dist/agents/opportunity.presenter.js.map +1 -0
- package/dist/agents/profile.generator.d.ts +67 -0
- package/dist/agents/profile.generator.d.ts.map +1 -0
- package/dist/agents/profile.generator.js +97 -0
- package/dist/agents/profile.generator.js.map +1 -0
- package/dist/agents/profile.hyde.generator.d.ts +43 -0
- package/dist/agents/profile.hyde.generator.d.ts.map +1 -0
- package/dist/agents/profile.hyde.generator.js +113 -0
- package/dist/agents/profile.hyde.generator.js.map +1 -0
- package/dist/agents/suggestion.generator.d.ts +24 -0
- package/dist/agents/suggestion.generator.d.ts.map +1 -0
- package/dist/agents/suggestion.generator.js +96 -0
- package/dist/agents/suggestion.generator.js.map +1 -0
- package/dist/graphs/chat.graph.d.ts +312 -0
- package/dist/graphs/chat.graph.d.ts.map +1 -0
- package/dist/graphs/chat.graph.js +267 -0
- package/dist/graphs/chat.graph.js.map +1 -0
- package/dist/graphs/home.graph.d.ts +180 -0
- package/dist/graphs/home.graph.d.ts.map +1 -0
- package/dist/graphs/home.graph.js +598 -0
- package/dist/graphs/home.graph.js.map +1 -0
- package/dist/graphs/hyde.graph.d.ts +110 -0
- package/dist/graphs/hyde.graph.d.ts.map +1 -0
- package/dist/graphs/hyde.graph.js +235 -0
- package/dist/graphs/hyde.graph.js.map +1 -0
- package/dist/graphs/index.graph.d.ts +620 -0
- package/dist/graphs/index.graph.d.ts.map +1 -0
- package/dist/graphs/index.graph.js +226 -0
- package/dist/graphs/index.graph.js.map +1 -0
- package/dist/graphs/index_membership.graph.d.ts +250 -0
- package/dist/graphs/index_membership.graph.d.ts.map +1 -0
- package/dist/graphs/index_membership.graph.js +204 -0
- package/dist/graphs/index_membership.graph.js.map +1 -0
- package/dist/graphs/intent.graph.d.ts +490 -0
- package/dist/graphs/intent.graph.d.ts.map +1 -0
- package/dist/graphs/intent.graph.js +787 -0
- package/dist/graphs/intent.graph.js.map +1 -0
- package/dist/graphs/intent_index.graph.d.ts +396 -0
- package/dist/graphs/intent_index.graph.d.ts.map +1 -0
- package/dist/graphs/intent_index.graph.js +331 -0
- package/dist/graphs/intent_index.graph.js.map +1 -0
- package/dist/graphs/maintenance.graph.d.ts +177 -0
- package/dist/graphs/maintenance.graph.d.ts.map +1 -0
- package/dist/graphs/maintenance.graph.js +173 -0
- package/dist/graphs/maintenance.graph.js.map +1 -0
- package/dist/graphs/negotiation.graph.d.ts +819 -0
- package/dist/graphs/negotiation.graph.d.ts.map +1 -0
- package/dist/graphs/negotiation.graph.js +255 -0
- package/dist/graphs/negotiation.graph.js.map +1 -0
- package/dist/graphs/opportunity.graph.d.ts +1082 -0
- package/dist/graphs/opportunity.graph.d.ts.map +1 -0
- package/dist/graphs/opportunity.graph.js +2534 -0
- package/dist/graphs/opportunity.graph.js.map +1 -0
- package/dist/graphs/profile.graph.d.ts +617 -0
- package/dist/graphs/profile.graph.d.ts.map +1 -0
- package/dist/graphs/profile.graph.js +839 -0
- package/dist/graphs/profile.graph.js.map +1 -0
- package/dist/graphs/tests/chat.graph.mocks.d.ts +104 -0
- package/dist/graphs/tests/chat.graph.mocks.d.ts.map +1 -0
- package/dist/graphs/tests/chat.graph.mocks.js +225 -0
- package/dist/graphs/tests/chat.graph.mocks.js.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/auth.interface.d.ts +15 -0
- package/dist/interfaces/auth.interface.d.ts.map +1 -0
- package/dist/interfaces/auth.interface.js +2 -0
- package/dist/interfaces/auth.interface.js.map +1 -0
- package/dist/interfaces/cache.interface.d.ts +43 -0
- package/dist/interfaces/cache.interface.d.ts.map +1 -0
- package/dist/interfaces/cache.interface.js +6 -0
- package/dist/interfaces/cache.interface.js.map +1 -0
- package/dist/interfaces/chat-session.interface.d.ts +11 -0
- package/dist/interfaces/chat-session.interface.d.ts.map +1 -0
- package/dist/interfaces/chat-session.interface.js +2 -0
- package/dist/interfaces/chat-session.interface.js.map +1 -0
- package/dist/interfaces/contact.interface.d.ts +48 -0
- package/dist/interfaces/contact.interface.d.ts.map +1 -0
- package/dist/interfaces/contact.interface.js +2 -0
- package/dist/interfaces/contact.interface.js.map +1 -0
- package/dist/interfaces/database.interface.d.ts +1495 -0
- package/dist/interfaces/database.interface.d.ts.map +1 -0
- package/dist/interfaces/database.interface.js +2 -0
- package/dist/interfaces/database.interface.js.map +1 -0
- package/dist/interfaces/embedder.interface.d.ts +85 -0
- package/dist/interfaces/embedder.interface.d.ts.map +1 -0
- package/dist/interfaces/embedder.interface.js +5 -0
- package/dist/interfaces/embedder.interface.js.map +1 -0
- package/dist/interfaces/enrichment.interface.d.ts +40 -0
- package/dist/interfaces/enrichment.interface.d.ts.map +1 -0
- package/dist/interfaces/enrichment.interface.js +2 -0
- package/dist/interfaces/enrichment.interface.js.map +1 -0
- package/dist/interfaces/integration.interface.d.ts +91 -0
- package/dist/interfaces/integration.interface.d.ts.map +1 -0
- package/dist/interfaces/integration.interface.js +2 -0
- package/dist/interfaces/integration.interface.js.map +1 -0
- package/dist/interfaces/queue.interface.d.ts +17 -0
- package/dist/interfaces/queue.interface.d.ts.map +1 -0
- package/dist/interfaces/queue.interface.js +5 -0
- package/dist/interfaces/queue.interface.js.map +1 -0
- package/dist/interfaces/scraper.interface.d.ts +31 -0
- package/dist/interfaces/scraper.interface.d.ts.map +1 -0
- package/dist/interfaces/scraper.interface.js +2 -0
- package/dist/interfaces/scraper.interface.js.map +1 -0
- package/dist/interfaces/storage.interface.d.ts +46 -0
- package/dist/interfaces/storage.interface.d.ts.map +1 -0
- package/dist/interfaces/storage.interface.js +6 -0
- package/dist/interfaces/storage.interface.js.map +1 -0
- package/dist/mcp/mcp.server.d.ts +29 -0
- package/dist/mcp/mcp.server.d.ts.map +1 -0
- package/dist/mcp/mcp.server.js +171 -0
- package/dist/mcp/mcp.server.js.map +1 -0
- package/dist/states/chat.state.d.ts +126 -0
- package/dist/states/chat.state.d.ts.map +1 -0
- package/dist/states/chat.state.js +112 -0
- package/dist/states/chat.state.js.map +1 -0
- package/dist/states/home.state.d.ts +100 -0
- package/dist/states/home.state.d.ts.map +1 -0
- package/dist/states/home.state.js +74 -0
- package/dist/states/home.state.js.map +1 -0
- package/dist/states/hyde.state.d.ts +54 -0
- package/dist/states/hyde.state.d.ts.map +1 -0
- package/dist/states/hyde.state.js +66 -0
- package/dist/states/hyde.state.js.map +1 -0
- package/dist/states/index.state.d.ts +179 -0
- package/dist/states/index.state.d.ts.map +1 -0
- package/dist/states/index.state.js +56 -0
- package/dist/states/index.state.js.map +1 -0
- package/dist/states/index_membership.state.d.ts +77 -0
- package/dist/states/index_membership.state.d.ts.map +1 -0
- package/dist/states/index_membership.state.js +43 -0
- package/dist/states/index_membership.state.js.map +1 -0
- package/dist/states/intent.state.d.ts +203 -0
- package/dist/states/intent.state.d.ts.map +1 -0
- package/dist/states/intent.state.js +153 -0
- package/dist/states/intent.state.js.map +1 -0
- package/dist/states/intent_index.state.d.ts +148 -0
- package/dist/states/intent_index.state.d.ts.map +1 -0
- package/dist/states/intent_index.state.js +100 -0
- package/dist/states/intent_index.state.js.map +1 -0
- package/dist/states/maintenance.state.d.ts +36 -0
- package/dist/states/maintenance.state.d.ts.map +1 -0
- package/dist/states/maintenance.state.js +56 -0
- package/dist/states/maintenance.state.js.map +1 -0
- package/dist/states/negotiation.state.d.ts +230 -0
- package/dist/states/negotiation.state.d.ts.map +1 -0
- package/dist/states/negotiation.state.js +82 -0
- package/dist/states/negotiation.state.js.map +1 -0
- package/dist/states/opportunity.state.d.ts +300 -0
- package/dist/states/opportunity.state.d.ts.map +1 -0
- package/dist/states/opportunity.state.js +207 -0
- package/dist/states/opportunity.state.js.map +1 -0
- package/dist/states/profile.state.d.ts +172 -0
- package/dist/states/profile.state.d.ts.map +1 -0
- package/dist/states/profile.state.js +133 -0
- package/dist/states/profile.state.js.map +1 -0
- package/dist/streamers/chat.streamer.d.ts +55 -0
- package/dist/streamers/chat.streamer.d.ts.map +1 -0
- package/dist/streamers/chat.streamer.js +186 -0
- package/dist/streamers/chat.streamer.js.map +1 -0
- package/dist/streamers/index.d.ts +3 -0
- package/dist/streamers/index.d.ts.map +1 -0
- package/dist/streamers/index.js +3 -0
- package/dist/streamers/index.js.map +1 -0
- package/dist/streamers/response.streamer.d.ts +36 -0
- package/dist/streamers/response.streamer.d.ts.map +1 -0
- package/dist/streamers/response.streamer.js +46 -0
- package/dist/streamers/response.streamer.js.map +1 -0
- package/dist/support/chat.utils.d.ts +42 -0
- package/dist/support/chat.utils.d.ts.map +1 -0
- package/dist/support/chat.utils.js +89 -0
- package/dist/support/chat.utils.js.map +1 -0
- package/dist/support/debug-meta.sanitizer.d.ts +18 -0
- package/dist/support/debug-meta.sanitizer.d.ts.map +1 -0
- package/dist/support/debug-meta.sanitizer.js +82 -0
- package/dist/support/debug-meta.sanitizer.js.map +1 -0
- package/dist/support/feed.health.d.ts +32 -0
- package/dist/support/feed.health.d.ts.map +1 -0
- package/dist/support/feed.health.js +76 -0
- package/dist/support/feed.health.js.map +1 -0
- package/dist/support/introducer.discovery.d.ts +78 -0
- package/dist/support/introducer.discovery.d.ts.map +1 -0
- package/dist/support/introducer.discovery.js +101 -0
- package/dist/support/introducer.discovery.js.map +1 -0
- package/dist/support/log.d.ts +65 -0
- package/dist/support/log.d.ts.map +1 -0
- package/dist/support/log.js +76 -0
- package/dist/support/log.js.map +1 -0
- package/dist/support/lucide.icon-catalog.d.ts +22 -0
- package/dist/support/lucide.icon-catalog.d.ts.map +1 -0
- package/dist/support/lucide.icon-catalog.js +101 -0
- package/dist/support/lucide.icon-catalog.js.map +1 -0
- package/dist/support/opportunity.card-text.d.ts +39 -0
- package/dist/support/opportunity.card-text.d.ts.map +1 -0
- package/dist/support/opportunity.card-text.js +333 -0
- package/dist/support/opportunity.card-text.js.map +1 -0
- package/dist/support/opportunity.constants.d.ts +9 -0
- package/dist/support/opportunity.constants.d.ts.map +1 -0
- package/dist/support/opportunity.constants.js +11 -0
- package/dist/support/opportunity.constants.js.map +1 -0
- package/dist/support/opportunity.discover.d.ts +144 -0
- package/dist/support/opportunity.discover.d.ts.map +1 -0
- package/dist/support/opportunity.discover.js +610 -0
- package/dist/support/opportunity.discover.js.map +1 -0
- package/dist/support/opportunity.enricher.d.ts +44 -0
- package/dist/support/opportunity.enricher.d.ts.map +1 -0
- package/dist/support/opportunity.enricher.js +245 -0
- package/dist/support/opportunity.enricher.js.map +1 -0
- package/dist/support/opportunity.persist.d.ts +39 -0
- package/dist/support/opportunity.persist.d.ts.map +1 -0
- package/dist/support/opportunity.persist.js +63 -0
- package/dist/support/opportunity.persist.js.map +1 -0
- package/dist/support/opportunity.presentation.d.ts +21 -0
- package/dist/support/opportunity.presentation.d.ts.map +1 -0
- package/dist/support/opportunity.presentation.js +75 -0
- package/dist/support/opportunity.presentation.js.map +1 -0
- package/dist/support/opportunity.sanitize.d.ts +18 -0
- package/dist/support/opportunity.sanitize.d.ts.map +1 -0
- package/dist/support/opportunity.sanitize.js +89 -0
- package/dist/support/opportunity.sanitize.js.map +1 -0
- package/dist/support/opportunity.utils.d.ts +99 -0
- package/dist/support/opportunity.utils.d.ts.map +1 -0
- package/dist/support/opportunity.utils.js +184 -0
- package/dist/support/opportunity.utils.js.map +1 -0
- package/dist/support/performance.d.ts +19 -0
- package/dist/support/performance.d.ts.map +1 -0
- package/dist/support/performance.js +43 -0
- package/dist/support/performance.js.map +1 -0
- package/dist/support/profile.enrichment-display-name.d.ts +16 -0
- package/dist/support/profile.enrichment-display-name.d.ts.map +1 -0
- package/dist/support/profile.enrichment-display-name.js +22 -0
- package/dist/support/profile.enrichment-display-name.js.map +1 -0
- package/dist/support/protocol.logger.d.ts +22 -0
- package/dist/support/protocol.logger.d.ts.map +1 -0
- package/dist/support/protocol.logger.js +44 -0
- package/dist/support/protocol.logger.js.map +1 -0
- package/dist/support/request-context.d.ts +19 -0
- package/dist/support/request-context.d.ts.map +1 -0
- package/dist/support/request-context.js +7 -0
- package/dist/support/request-context.js.map +1 -0
- package/dist/tools/contact.tools.d.ts +7 -0
- package/dist/tools/contact.tools.d.ts.map +1 -0
- package/dist/tools/contact.tools.js +115 -0
- package/dist/tools/contact.tools.js.map +1 -0
- package/dist/tools/index.d.ts +17 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +140 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/index.tools.d.ts +3 -0
- package/dist/tools/index.tools.d.ts.map +1 -0
- package/dist/tools/index.tools.js +423 -0
- package/dist/tools/index.tools.js.map +1 -0
- package/dist/tools/integration.tools.d.ts +13 -0
- package/dist/tools/integration.tools.d.ts.map +1 -0
- package/dist/tools/integration.tools.js +77 -0
- package/dist/tools/integration.tools.js.map +1 -0
- package/dist/tools/intent.tools.d.ts +3 -0
- package/dist/tools/intent.tools.d.ts.map +1 -0
- package/dist/tools/intent.tools.js +458 -0
- package/dist/tools/intent.tools.js.map +1 -0
- package/dist/tools/opportunity.tools.d.ts +44 -0
- package/dist/tools/opportunity.tools.d.ts.map +1 -0
- package/dist/tools/opportunity.tools.js +814 -0
- package/dist/tools/opportunity.tools.js.map +1 -0
- package/dist/tools/profile.tools.d.ts +3 -0
- package/dist/tools/profile.tools.d.ts.map +1 -0
- package/dist/tools/profile.tools.js +513 -0
- package/dist/tools/profile.tools.js.map +1 -0
- package/dist/tools/tool.helpers.d.ts +225 -0
- package/dist/tools/tool.helpers.d.ts.map +1 -0
- package/dist/tools/tool.helpers.js +172 -0
- package/dist/tools/tool.helpers.js.map +1 -0
- package/dist/tools/tool.registry.d.ts +12 -0
- package/dist/tools/tool.registry.d.ts.map +1 -0
- package/dist/tools/tool.registry.js +62 -0
- package/dist/tools/tool.registry.js.map +1 -0
- package/dist/tools/utility.tools.d.ts +3 -0
- package/dist/tools/utility.tools.d.ts.map +1 -0
- package/dist/tools/utility.tools.js +107 -0
- package/dist/tools/utility.tools.js.map +1 -0
- package/dist/types/chat-streaming.types.d.ts +472 -0
- package/dist/types/chat-streaming.types.d.ts.map +1 -0
- package/dist/types/chat-streaming.types.js +260 -0
- package/dist/types/chat-streaming.types.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Factory — creates an McpServer instance with all protocol tools
|
|
3
|
+
* registered from the existing tool registry. Each tool invocation resolves
|
|
4
|
+
* auth from the HTTP request, builds a ResolvedToolContext, and delegates
|
|
5
|
+
* to the raw tool handler.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { McpServer, fromJsonSchema } from '@modelcontextprotocol/server';
|
|
9
|
+
import { resolveChatContext } from '../tools/tool.helpers.js';
|
|
10
|
+
import { createToolRegistry } from '../tools/tool.registry.js';
|
|
11
|
+
import { protocolLogger } from '../support/protocol.logger.js';
|
|
12
|
+
const logger = protocolLogger('McpServer');
|
|
13
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
14
|
+
// ZOD 3 → JSON SCHEMA CONVERSION
|
|
15
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
16
|
+
/**
|
|
17
|
+
* Minimal Zod-to-JSON-Schema conversion for MCP tool registration.
|
|
18
|
+
* Converts Zod 3.x schemas to plain JSON Schema objects that can be
|
|
19
|
+
* wrapped with `fromJsonSchema()` for MCP SDK compatibility.
|
|
20
|
+
*/
|
|
21
|
+
function zodToJsonSchema(schema) {
|
|
22
|
+
if (schema instanceof z.ZodObject) {
|
|
23
|
+
const shape = schema.shape;
|
|
24
|
+
const properties = {};
|
|
25
|
+
const required = [];
|
|
26
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
27
|
+
const zodValue = value;
|
|
28
|
+
properties[key] = zodToJsonSchema(zodValue);
|
|
29
|
+
if (!(zodValue instanceof z.ZodOptional) && !(zodValue instanceof z.ZodDefault)) {
|
|
30
|
+
required.push(key);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { type: 'object', properties, ...(required.length ? { required } : {}) };
|
|
34
|
+
}
|
|
35
|
+
if (schema instanceof z.ZodString) {
|
|
36
|
+
const result = { type: 'string' };
|
|
37
|
+
// Detect .url(), .email(), .uuid() etc. via Zod's internal checks array
|
|
38
|
+
const checks = schema._def?.checks;
|
|
39
|
+
if (checks) {
|
|
40
|
+
for (const check of checks) {
|
|
41
|
+
if (check.kind === 'url')
|
|
42
|
+
result.format = 'uri';
|
|
43
|
+
else if (check.kind === 'email')
|
|
44
|
+
result.format = 'email';
|
|
45
|
+
else if (check.kind === 'uuid')
|
|
46
|
+
result.format = 'uuid';
|
|
47
|
+
else if (check.kind === 'datetime')
|
|
48
|
+
result.format = 'date-time';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
if (schema instanceof z.ZodNumber) {
|
|
54
|
+
const checks = schema._def?.checks;
|
|
55
|
+
const result = { type: 'number' };
|
|
56
|
+
if (checks) {
|
|
57
|
+
for (const check of checks) {
|
|
58
|
+
if (check.kind === 'int')
|
|
59
|
+
result.type = 'integer';
|
|
60
|
+
else if (check.kind === 'min')
|
|
61
|
+
result.minimum = check.value;
|
|
62
|
+
else if (check.kind === 'max')
|
|
63
|
+
result.maximum = check.value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
if (schema instanceof z.ZodBoolean)
|
|
69
|
+
return { type: 'boolean' };
|
|
70
|
+
if (schema instanceof z.ZodArray) {
|
|
71
|
+
return { type: 'array', items: zodToJsonSchema(schema.element) };
|
|
72
|
+
}
|
|
73
|
+
if (schema instanceof z.ZodOptional) {
|
|
74
|
+
return zodToJsonSchema(schema.unwrap());
|
|
75
|
+
}
|
|
76
|
+
if (schema instanceof z.ZodDefault) {
|
|
77
|
+
return zodToJsonSchema(schema.removeDefault());
|
|
78
|
+
}
|
|
79
|
+
if (schema instanceof z.ZodEnum) {
|
|
80
|
+
return { type: 'string', enum: schema.options };
|
|
81
|
+
}
|
|
82
|
+
if (schema instanceof z.ZodNullable) {
|
|
83
|
+
const inner = zodToJsonSchema(schema.unwrap());
|
|
84
|
+
return { ...inner, nullable: true };
|
|
85
|
+
}
|
|
86
|
+
if (schema instanceof z.ZodRecord) {
|
|
87
|
+
return { type: 'object', additionalProperties: true };
|
|
88
|
+
}
|
|
89
|
+
return { type: 'object' };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates an MCP server with all protocol tools registered.
|
|
93
|
+
* Tools resolve auth per-request via the HTTP request available in ServerContext.
|
|
94
|
+
*
|
|
95
|
+
* @param deps - Shared tool dependencies (graphs, database, embedder, etc.)
|
|
96
|
+
* @param authResolver - Resolves authenticated user ID from the HTTP request
|
|
97
|
+
* @param scopedDepsFactory - Factory for creating per-request scoped databases
|
|
98
|
+
* @returns A configured McpServer ready to be connected to a transport
|
|
99
|
+
*/
|
|
100
|
+
export function createMcpServer(deps, authResolver, scopedDepsFactory) {
|
|
101
|
+
const server = new McpServer({
|
|
102
|
+
name: 'index-network',
|
|
103
|
+
version: '1.0.0',
|
|
104
|
+
});
|
|
105
|
+
const registry = createToolRegistry(deps);
|
|
106
|
+
for (const [toolName, toolDef] of registry) {
|
|
107
|
+
// Convert Zod 3 schema to JSON Schema, then wrap with fromJsonSchema
|
|
108
|
+
// for MCP SDK's StandardSchemaWithJSON compatibility
|
|
109
|
+
const jsonSchema = zodToJsonSchema(toolDef.schema);
|
|
110
|
+
const mcpSchema = fromJsonSchema(jsonSchema);
|
|
111
|
+
server.registerTool(toolName, {
|
|
112
|
+
description: toolDef.description,
|
|
113
|
+
inputSchema: mcpSchema,
|
|
114
|
+
}, async (args, ctx) => {
|
|
115
|
+
try {
|
|
116
|
+
// Extract the original HTTP request from the MCP server context
|
|
117
|
+
const httpReq = ctx.http?.req;
|
|
118
|
+
if (!httpReq) {
|
|
119
|
+
return {
|
|
120
|
+
content: [{ type: 'text', text: JSON.stringify({ error: 'No HTTP request available in MCP context' }) }],
|
|
121
|
+
isError: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Resolve authenticated user
|
|
125
|
+
const userId = await authResolver.resolveUserId(httpReq);
|
|
126
|
+
// Resolve chat context for the user
|
|
127
|
+
const context = await resolveChatContext({ database: deps.database, userId });
|
|
128
|
+
// Build per-request scoped databases via injected factory
|
|
129
|
+
const indexScope = context.userIndexes.map((m) => m.indexId);
|
|
130
|
+
const scopedDbs = scopedDepsFactory.create(userId, indexScope);
|
|
131
|
+
// Override deps with per-request scoped databases
|
|
132
|
+
const requestDeps = { ...deps, ...scopedDbs };
|
|
133
|
+
// Re-create registry with per-request deps for scoped database access
|
|
134
|
+
const requestRegistry = createToolRegistry(requestDeps);
|
|
135
|
+
const requestTool = requestRegistry.get(toolName);
|
|
136
|
+
if (!requestTool) {
|
|
137
|
+
return {
|
|
138
|
+
content: [{ type: 'text', text: JSON.stringify({ error: `Tool "${toolName}" not found` }) }],
|
|
139
|
+
isError: true,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// Validate input against the original Zod schema
|
|
143
|
+
const parseResult = toolDef.schema.safeParse(args);
|
|
144
|
+
if (!parseResult.success) {
|
|
145
|
+
const issues = parseResult.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
|
|
146
|
+
return {
|
|
147
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: `Invalid input: ${issues}` }) }],
|
|
148
|
+
isError: true,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const validatedArgs = parseResult.data;
|
|
152
|
+
// Execute the tool handler
|
|
153
|
+
const result = await requestTool.handler({ context, query: validatedArgs });
|
|
154
|
+
return {
|
|
155
|
+
content: [{ type: 'text', text: result }],
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
160
|
+
logger.error(`MCP tool "${toolName}" failed`, { error: message });
|
|
161
|
+
return {
|
|
162
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
|
|
163
|
+
isError: true,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
logger.verbose(`MCP server created with ${registry.size} tools`);
|
|
169
|
+
return server;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=mcp.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.server.js","sourceRoot":"","sources":["../../src/mcp/mcp.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { BaseMessage } from "@langchain/core/messages";
|
|
2
|
+
import type { DebugMetaToolCall } from "../types/chat-streaming.types.js";
|
|
3
|
+
/** Routing decision from router node (target, operationType, extractedContext). */
|
|
4
|
+
export interface RoutingDecision {
|
|
5
|
+
target: string;
|
|
6
|
+
operationType: string | null;
|
|
7
|
+
extractedContext?: string | null;
|
|
8
|
+
}
|
|
9
|
+
/** Intent subgraph result (actions, inferredIntents, etc.). */
|
|
10
|
+
export interface IntentSubgraphResult {
|
|
11
|
+
actions?: Array<{
|
|
12
|
+
type: string;
|
|
13
|
+
payload?: string;
|
|
14
|
+
}>;
|
|
15
|
+
inferredIntents?: unknown[];
|
|
16
|
+
indexingResults?: unknown[];
|
|
17
|
+
mode?: string;
|
|
18
|
+
intents?: unknown[];
|
|
19
|
+
count?: number;
|
|
20
|
+
error?: string;
|
|
21
|
+
/** When the intent graph exits early (e.g. index-scoped without intents); surface to user. */
|
|
22
|
+
requiredMessage?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Index subgraph result (memberships, ownedIndexes, specificIndexData). */
|
|
25
|
+
export interface IndexSubgraphResult {
|
|
26
|
+
mode?: string;
|
|
27
|
+
memberships?: unknown[];
|
|
28
|
+
ownedIndexes?: unknown[];
|
|
29
|
+
specificIndexData?: unknown;
|
|
30
|
+
count?: number;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Aggregated results from subgraphs (intent, index, profile, opportunity, scrape). */
|
|
34
|
+
export interface SubgraphResults {
|
|
35
|
+
intent?: IntentSubgraphResult;
|
|
36
|
+
index?: IndexSubgraphResult;
|
|
37
|
+
profile?: unknown;
|
|
38
|
+
opportunity?: unknown;
|
|
39
|
+
scrape?: unknown;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The Chat Graph State using LangGraph Annotations.
|
|
43
|
+
*
|
|
44
|
+
* This is a simplified state for the agent loop architecture.
|
|
45
|
+
* The agent handles all routing decisions internally via tool calling.
|
|
46
|
+
*
|
|
47
|
+
* Design Principles:
|
|
48
|
+
* - Messages accumulate through the conversation (includes tool calls/results)
|
|
49
|
+
* - Iteration count tracks loop progress for soft/hard limits
|
|
50
|
+
* - Final response is extracted at the end
|
|
51
|
+
*/
|
|
52
|
+
export declare const ChatGraphState: import("@langchain/langgraph").AnnotationRoot<{
|
|
53
|
+
/**
|
|
54
|
+
* The User ID - required for all operations.
|
|
55
|
+
*/
|
|
56
|
+
userId: {
|
|
57
|
+
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
|
|
58
|
+
(): import("@langchain/langgraph").LastValue<string>;
|
|
59
|
+
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Optional index (community) ID when chat is scoped to a specific index.
|
|
63
|
+
* When set, the agent and tools use this as the current index (e.g. read_intents,
|
|
64
|
+
* create_intent with indexId, scope index assignment to this index only).
|
|
65
|
+
*/
|
|
66
|
+
indexId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
67
|
+
/**
|
|
68
|
+
* Chat session ID when streaming with context. Used by tools to create draft
|
|
69
|
+
* opportunities tied to this conversation (context.conversationId).
|
|
70
|
+
*/
|
|
71
|
+
sessionId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
72
|
+
/**
|
|
73
|
+
* Conversation history using LangGraph's built-in message reducer.
|
|
74
|
+
* Includes: HumanMessage, AIMessage, ToolMessage, SystemMessage
|
|
75
|
+
* Automatically handles message appending, ID management, and ordering.
|
|
76
|
+
*/
|
|
77
|
+
messages: import("@langchain/langgraph").BaseChannel<BaseMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>, import("@langchain/core/messages").MessageType>[], BaseMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>, import("@langchain/core/messages").MessageType>[] | import("@langchain/langgraph").OverwriteValue<BaseMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>, import("@langchain/core/messages").MessageType>[]>, unknown>;
|
|
78
|
+
/**
|
|
79
|
+
* Current iteration count in the agent loop.
|
|
80
|
+
* Used for soft limit (nudge) and hard limit (force exit).
|
|
81
|
+
*/
|
|
82
|
+
iterationCount: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
|
|
83
|
+
/**
|
|
84
|
+
* Flag indicating whether the agent loop should continue.
|
|
85
|
+
* Set to false when agent produces final response or hits hard limit.
|
|
86
|
+
*/
|
|
87
|
+
shouldContinue: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* The final generated response text.
|
|
90
|
+
* Set when the agent decides to stop and respond.
|
|
91
|
+
*/
|
|
92
|
+
responseText: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
93
|
+
/**
|
|
94
|
+
* Error message if the agent loop fails.
|
|
95
|
+
*/
|
|
96
|
+
error: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
97
|
+
/**
|
|
98
|
+
* Per-turn debug meta (graph, iterations, tool calls) for copy-debug.
|
|
99
|
+
* Not persisted; only used so the streamer receives it in the updates chunk.
|
|
100
|
+
*/
|
|
101
|
+
debugMeta: import("@langchain/langgraph").BaseChannel<{
|
|
102
|
+
graph: string;
|
|
103
|
+
iterations: number;
|
|
104
|
+
tools: DebugMetaToolCall[];
|
|
105
|
+
} | undefined, {
|
|
106
|
+
graph: string;
|
|
107
|
+
iterations: number;
|
|
108
|
+
tools: DebugMetaToolCall[];
|
|
109
|
+
} | import("@langchain/langgraph").OverwriteValue<{
|
|
110
|
+
graph: string;
|
|
111
|
+
iterations: number;
|
|
112
|
+
tools: DebugMetaToolCall[];
|
|
113
|
+
} | undefined> | undefined, unknown>;
|
|
114
|
+
/** Router output: target, operationType, extractedContext. */
|
|
115
|
+
routingDecision: import("@langchain/langgraph").BaseChannel<RoutingDecision | undefined, RoutingDecision | import("@langchain/langgraph").OverwriteValue<RoutingDecision | undefined> | undefined, unknown>;
|
|
116
|
+
/** Results from intent/profile/opportunity/scrape subgraphs. */
|
|
117
|
+
subgraphResults: import("@langchain/langgraph").BaseChannel<SubgraphResults | undefined, SubgraphResults | import("@langchain/langgraph").OverwriteValue<SubgraphResults | undefined> | undefined, unknown>;
|
|
118
|
+
/** User profile context (e.g. for intent nodes). */
|
|
119
|
+
userProfile: import("@langchain/langgraph").BaseChannel<unknown, unknown, unknown>;
|
|
120
|
+
}>;
|
|
121
|
+
/**
|
|
122
|
+
* The full state type for the Chat Graph.
|
|
123
|
+
* Use this for typing node functions and graph invocations.
|
|
124
|
+
*/
|
|
125
|
+
export type ChatGraphStateType = typeof ChatGraphState.State;
|
|
126
|
+
//# sourceMappingURL=chat.state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.state.d.ts","sourceRoot":"","sources":["../../src/states/chat.state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAM1E,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc;IAKzB;;OAEG;;;;;;IAGH;;;;OAIG;;IAMH;;;OAGG;;IAMH;;;;OAIG;;IAUH;;;OAGG;;IAMH;;;OAGG;;IAUH;;;OAGG;;IAMH;;OAEG;;IAMH;;;OAGG;;eAC4B,MAAM;oBAAc,MAAM;eAAS,iBAAiB,EAAE;;eAAtD,MAAM;oBAAc,MAAM;eAAS,iBAAiB,EAAE;;eAAtD,MAAM;oBAAc,MAAM;eAAS,iBAAiB,EAAE;;IAMrF,8DAA8D;;IAK9D,gEAAgE;;IAKhE,oDAAoD;;EAMpD,CAAC;AAMH;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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
|
+
* Optional index (community) ID when chat is scoped to a specific index.
|
|
26
|
+
* When set, the agent and tools use this as the current index (e.g. read_intents,
|
|
27
|
+
* create_intent with indexId, scope index assignment to this index only).
|
|
28
|
+
*/
|
|
29
|
+
indexId: Annotation({
|
|
30
|
+
reducer: (curr, next) => next ?? curr,
|
|
31
|
+
default: () => undefined,
|
|
32
|
+
}),
|
|
33
|
+
/**
|
|
34
|
+
* Chat session ID when streaming with context. Used by tools to create draft
|
|
35
|
+
* opportunities tied to this conversation (context.conversationId).
|
|
36
|
+
*/
|
|
37
|
+
sessionId: Annotation({
|
|
38
|
+
reducer: (curr, next) => next ?? curr,
|
|
39
|
+
default: () => undefined,
|
|
40
|
+
}),
|
|
41
|
+
/**
|
|
42
|
+
* Conversation history using LangGraph's built-in message reducer.
|
|
43
|
+
* Includes: HumanMessage, AIMessage, ToolMessage, SystemMessage
|
|
44
|
+
* Automatically handles message appending, ID management, and ordering.
|
|
45
|
+
*/
|
|
46
|
+
messages: Annotation({
|
|
47
|
+
reducer: messagesStateReducer,
|
|
48
|
+
default: () => [],
|
|
49
|
+
}),
|
|
50
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
51
|
+
// LOOP CONTROL
|
|
52
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
53
|
+
/**
|
|
54
|
+
* Current iteration count in the agent loop.
|
|
55
|
+
* Used for soft limit (nudge) and hard limit (force exit).
|
|
56
|
+
*/
|
|
57
|
+
iterationCount: Annotation({
|
|
58
|
+
reducer: (curr, next) => next,
|
|
59
|
+
default: () => 0,
|
|
60
|
+
}),
|
|
61
|
+
/**
|
|
62
|
+
* Flag indicating whether the agent loop should continue.
|
|
63
|
+
* Set to false when agent produces final response or hits hard limit.
|
|
64
|
+
*/
|
|
65
|
+
shouldContinue: Annotation({
|
|
66
|
+
reducer: (curr, next) => next,
|
|
67
|
+
default: () => true,
|
|
68
|
+
}),
|
|
69
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
70
|
+
// OUTPUTS
|
|
71
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
72
|
+
/**
|
|
73
|
+
* The final generated response text.
|
|
74
|
+
* Set when the agent decides to stop and respond.
|
|
75
|
+
*/
|
|
76
|
+
responseText: Annotation({
|
|
77
|
+
reducer: (curr, next) => next,
|
|
78
|
+
default: () => undefined,
|
|
79
|
+
}),
|
|
80
|
+
/**
|
|
81
|
+
* Error message if the agent loop fails.
|
|
82
|
+
*/
|
|
83
|
+
error: Annotation({
|
|
84
|
+
reducer: (curr, next) => next,
|
|
85
|
+
default: () => undefined,
|
|
86
|
+
}),
|
|
87
|
+
/**
|
|
88
|
+
* Per-turn debug meta (graph, iterations, tool calls) for copy-debug.
|
|
89
|
+
* Not persisted; only used so the streamer receives it in the updates chunk.
|
|
90
|
+
*/
|
|
91
|
+
debugMeta: Annotation({
|
|
92
|
+
reducer: (curr, next) => next,
|
|
93
|
+
default: () => undefined,
|
|
94
|
+
}),
|
|
95
|
+
// Legacy subgraph state (used by index/intent/response nodes when present)
|
|
96
|
+
/** Router output: target, operationType, extractedContext. */
|
|
97
|
+
routingDecision: Annotation({
|
|
98
|
+
reducer: (curr, next) => next,
|
|
99
|
+
default: () => undefined,
|
|
100
|
+
}),
|
|
101
|
+
/** Results from intent/profile/opportunity/scrape subgraphs. */
|
|
102
|
+
subgraphResults: Annotation({
|
|
103
|
+
reducer: (curr, next) => next,
|
|
104
|
+
default: () => undefined,
|
|
105
|
+
}),
|
|
106
|
+
/** User profile context (e.g. for intent nodes). */
|
|
107
|
+
userProfile: Annotation({
|
|
108
|
+
reducer: (curr, next) => next,
|
|
109
|
+
default: () => undefined,
|
|
110
|
+
}),
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=chat.state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.state.js","sourceRoot":"","sources":["../../src/states/chat.state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAgDxE,iFAAiF;AACjF,6CAA6C;AAC7C,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAC5C,8EAA8E;IAC9E,cAAc;IACd,8EAA8E;IAE9E;;OAEG;IACH,MAAM,EAAE,CAAA,UAAkB,CAAA;IAE1B;;;;OAIG;IACH,OAAO,EAAE,UAAU,CAAqB;QACtC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;;OAGG;IACH,SAAS,EAAE,UAAU,CAAqB;QACxC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;;;OAIG;IACH,QAAQ,EAAE,UAAU,CAAgB;QAClC,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;KAClB,CAAC;IAEF,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E;;;OAGG;IACH,cAAc,EAAE,UAAU,CAAS;QACjC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;KACjB,CAAC;IAEF;;;OAGG;IACH,cAAc,EAAE,UAAU,CAAU;QAClC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB,CAAC;IAEF,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E;;;OAGG;IACH,YAAY,EAAE,UAAU,CAAqB;QAC3C,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;OAEG;IACH,KAAK,EAAE,UAAU,CAAqB;QACpC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF;;;OAGG;IACH,SAAS,EAAE,UAAU,CAAgF;QACnG,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,2EAA2E;IAC3E,8DAA8D;IAC9D,eAAe,EAAE,UAAU,CAA8B;QACvD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IACF,gEAAgE;IAChE,eAAe,EAAE,UAAU,CAA8B;QACvD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IACF,oDAAoD;IACpD,WAAW,EAAE,UAAU,CAAU;QAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;CAEH,CAAC,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Opportunity } from '../interfaces/database.interface.js';
|
|
2
|
+
import type { DebugMetaAgent } from '../types/chat-streaming.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Home view card item: one opportunity with full presenter-driven display contract.
|
|
5
|
+
*/
|
|
6
|
+
export interface HomeCardItem {
|
|
7
|
+
opportunityId: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
name: string;
|
|
10
|
+
avatar: string | null;
|
|
11
|
+
mainText: string;
|
|
12
|
+
cta: string;
|
|
13
|
+
headline?: string;
|
|
14
|
+
/** Presenter-generated; primary button (accept) and secondary button (dismiss). */
|
|
15
|
+
primaryActionLabel: string;
|
|
16
|
+
secondaryActionLabel: string;
|
|
17
|
+
/** Presenter-generated subtitle under the other party name (e.g. "1 mutual intent"). */
|
|
18
|
+
mutualIntentsLabel: string;
|
|
19
|
+
/** Narrator chip for human-introduced opportunities; avatar set when narrator is a user */
|
|
20
|
+
narratorChip?: {
|
|
21
|
+
name: string;
|
|
22
|
+
text: string;
|
|
23
|
+
avatar?: string | null;
|
|
24
|
+
userId?: string;
|
|
25
|
+
};
|
|
26
|
+
/** Viewer's role in this opportunity (e.g. 'introducer', 'party', 'agent', 'patient', 'peer'). */
|
|
27
|
+
viewerRole?: string;
|
|
28
|
+
/** Whether the counterpart is a ghost (not yet onboarded) user. */
|
|
29
|
+
isGhost?: boolean;
|
|
30
|
+
/** Second party in introducer arrow layout. Present when viewerRole is 'introducer'. */
|
|
31
|
+
secondParty?: {
|
|
32
|
+
name: string;
|
|
33
|
+
avatar?: string | null;
|
|
34
|
+
userId?: string;
|
|
35
|
+
};
|
|
36
|
+
/** For section assignment from LLM */
|
|
37
|
+
_cardIndex: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Dynamic section from LLM categorization.
|
|
41
|
+
*/
|
|
42
|
+
export interface HomeSectionProposal {
|
|
43
|
+
id: string;
|
|
44
|
+
title: string;
|
|
45
|
+
subtitle?: string;
|
|
46
|
+
iconName: string;
|
|
47
|
+
itemIndices: number[];
|
|
48
|
+
}
|
|
49
|
+
/** Card item as returned in API (no internal _cardIndex). */
|
|
50
|
+
export type HomeSectionItem = Omit<HomeCardItem, '_cardIndex'>;
|
|
51
|
+
/**
|
|
52
|
+
* Final section for API response.
|
|
53
|
+
*/
|
|
54
|
+
export interface HomeSection {
|
|
55
|
+
id: string;
|
|
56
|
+
title: string;
|
|
57
|
+
subtitle?: string;
|
|
58
|
+
iconName: string;
|
|
59
|
+
items: HomeSectionItem[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Home Graph State (Annotation-based).
|
|
63
|
+
* Flow: loadOpportunities → generateCardText → categorizeDynamically → normalizeAndSort → finalizeResponse.
|
|
64
|
+
*/
|
|
65
|
+
export declare const HomeGraphState: import("@langchain/langgraph").AnnotationRoot<{
|
|
66
|
+
userId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
|
|
67
|
+
indexId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
68
|
+
limit: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
|
|
69
|
+
/** When true, bypass presenter and categorizer Redis caches. */
|
|
70
|
+
noCache: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
|
|
71
|
+
/** Raw opportunities visible to the viewer (after visibility filter). */
|
|
72
|
+
opportunities: import("@langchain/langgraph").BaseChannel<Opportunity[], Opportunity[] | import("@langchain/langgraph").OverwriteValue<Opportunity[]>, unknown>;
|
|
73
|
+
/** Cards with presenter output and narrator chip. */
|
|
74
|
+
cards: import("@langchain/langgraph").BaseChannel<HomeCardItem[], HomeCardItem[] | import("@langchain/langgraph").OverwriteValue<HomeCardItem[]>, unknown>;
|
|
75
|
+
/** LLM output: dynamic sections with icon and item indices. */
|
|
76
|
+
sectionProposals: import("@langchain/langgraph").BaseChannel<HomeSectionProposal[], HomeSectionProposal[] | import("@langchain/langgraph").OverwriteValue<HomeSectionProposal[]>, unknown>;
|
|
77
|
+
/** Final sections for response. */
|
|
78
|
+
sections: import("@langchain/langgraph").BaseChannel<HomeSection[], HomeSection[] | import("@langchain/langgraph").OverwriteValue<HomeSection[]>, unknown>;
|
|
79
|
+
/** Presenter results retrieved from cache (opportunityId → HomeCardItem). */
|
|
80
|
+
cachedCards: import("@langchain/langgraph").BaseChannel<Map<string, HomeCardItem>, Map<string, HomeCardItem> | import("@langchain/langgraph").OverwriteValue<Map<string, HomeCardItem>>, unknown>;
|
|
81
|
+
/** Opportunities that had no cache hit and need presenter generation. */
|
|
82
|
+
uncachedOpportunities: import("@langchain/langgraph").BaseChannel<Opportunity[], Opportunity[] | import("@langchain/langgraph").OverwriteValue<Opportunity[]>, unknown>;
|
|
83
|
+
/** Whether categorizer results were found in cache. */
|
|
84
|
+
categoryCacheHit: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
|
|
85
|
+
error: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
86
|
+
/** Meta for response (e.g. totalOpportunities, totalSections). */
|
|
87
|
+
meta: import("@langchain/langgraph").BaseChannel<{
|
|
88
|
+
totalOpportunities: number;
|
|
89
|
+
totalSections: number;
|
|
90
|
+
}, {
|
|
91
|
+
totalOpportunities: number;
|
|
92
|
+
totalSections: number;
|
|
93
|
+
} | import("@langchain/langgraph").OverwriteValue<{
|
|
94
|
+
totalOpportunities: number;
|
|
95
|
+
totalSections: number;
|
|
96
|
+
}>, unknown>;
|
|
97
|
+
/** Timing records for each agent invocation within this graph run. */
|
|
98
|
+
agentTimings: import("@langchain/langgraph").BaseChannel<DebugMetaAgent[], DebugMetaAgent[] | import("@langchain/langgraph").OverwriteValue<DebugMetaAgent[]>, unknown>;
|
|
99
|
+
}>;
|
|
100
|
+
//# sourceMappingURL=home.state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.state.d.ts","sourceRoot":"","sources":["../../src/states/home.state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wFAAwF;IACxF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvF,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wFAAwF;IACxF,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;IAczB,gEAAgE;;IAMhE,yEAAyE;;IAMzE,qDAAqD;;IAMrD,+DAA+D;;IAM/D,mCAAmC;;IAMnC,6EAA6E;;IAM7E,yEAAyE;;IAMzE,uDAAuD;;;IAWvD,kEAAkE;;4BAC3B,MAAM;uBAAiB,MAAM;;4BAA7B,MAAM;uBAAiB,MAAM;;4BAA7B,MAAM;uBAAiB,MAAM;;IAKpE,sEAAsE;;EAKtE,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Annotation } from '@langchain/langgraph';
|
|
2
|
+
/**
|
|
3
|
+
* Home Graph State (Annotation-based).
|
|
4
|
+
* Flow: loadOpportunities → generateCardText → categorizeDynamically → normalizeAndSort → finalizeResponse.
|
|
5
|
+
*/
|
|
6
|
+
export const HomeGraphState = Annotation.Root({
|
|
7
|
+
userId: Annotation({
|
|
8
|
+
reducer: (curr, next) => next ?? curr,
|
|
9
|
+
default: () => '',
|
|
10
|
+
}),
|
|
11
|
+
indexId: Annotation({
|
|
12
|
+
reducer: (curr, next) => next ?? curr,
|
|
13
|
+
default: () => undefined,
|
|
14
|
+
}),
|
|
15
|
+
limit: Annotation({
|
|
16
|
+
reducer: (curr, next) => next ?? curr,
|
|
17
|
+
default: () => 50,
|
|
18
|
+
}),
|
|
19
|
+
/** When true, bypass presenter and categorizer Redis caches. */
|
|
20
|
+
noCache: Annotation({
|
|
21
|
+
reducer: (curr, next) => next ?? curr,
|
|
22
|
+
default: () => false,
|
|
23
|
+
}),
|
|
24
|
+
/** Raw opportunities visible to the viewer (after visibility filter). */
|
|
25
|
+
opportunities: Annotation({
|
|
26
|
+
reducer: (curr, next) => next ?? curr,
|
|
27
|
+
default: () => [],
|
|
28
|
+
}),
|
|
29
|
+
/** Cards with presenter output and narrator chip. */
|
|
30
|
+
cards: Annotation({
|
|
31
|
+
reducer: (curr, next) => next ?? curr,
|
|
32
|
+
default: () => [],
|
|
33
|
+
}),
|
|
34
|
+
/** LLM output: dynamic sections with icon and item indices. */
|
|
35
|
+
sectionProposals: Annotation({
|
|
36
|
+
reducer: (curr, next) => next ?? curr,
|
|
37
|
+
default: () => [],
|
|
38
|
+
}),
|
|
39
|
+
/** Final sections for response. */
|
|
40
|
+
sections: Annotation({
|
|
41
|
+
reducer: (curr, next) => next ?? curr,
|
|
42
|
+
default: () => [],
|
|
43
|
+
}),
|
|
44
|
+
/** Presenter results retrieved from cache (opportunityId → HomeCardItem). */
|
|
45
|
+
cachedCards: Annotation({
|
|
46
|
+
reducer: (curr, next) => next ?? curr,
|
|
47
|
+
default: () => new Map(),
|
|
48
|
+
}),
|
|
49
|
+
/** Opportunities that had no cache hit and need presenter generation. */
|
|
50
|
+
uncachedOpportunities: Annotation({
|
|
51
|
+
reducer: (curr, next) => next ?? curr,
|
|
52
|
+
default: () => [],
|
|
53
|
+
}),
|
|
54
|
+
/** Whether categorizer results were found in cache. */
|
|
55
|
+
categoryCacheHit: Annotation({
|
|
56
|
+
reducer: (curr, next) => next ?? curr,
|
|
57
|
+
default: () => false,
|
|
58
|
+
}),
|
|
59
|
+
error: Annotation({
|
|
60
|
+
reducer: (curr, next) => next ?? curr,
|
|
61
|
+
default: () => undefined,
|
|
62
|
+
}),
|
|
63
|
+
/** Meta for response (e.g. totalOpportunities, totalSections). */
|
|
64
|
+
meta: Annotation({
|
|
65
|
+
reducer: (curr, next) => next ?? curr,
|
|
66
|
+
default: () => ({ totalOpportunities: 0, totalSections: 0 }),
|
|
67
|
+
}),
|
|
68
|
+
/** Timing records for each agent invocation within this graph run. */
|
|
69
|
+
agentTimings: Annotation({
|
|
70
|
+
reducer: (acc, val) => [...acc, ...val],
|
|
71
|
+
default: () => [],
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=home.state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.state.js","sourceRoot":"","sources":["../../src/states/home.state.ts"],"names":[],"mappings":"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"}
|