@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,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maintenance Graph: evaluate feed health and trigger rediscovery when unhealthy.
|
|
3
|
+
* Also runs introducer discovery when connector-flow slots are underfilled.
|
|
4
|
+
*
|
|
5
|
+
* Write path — separate from the read-only HomeGraph.
|
|
6
|
+
* Flow: loadCurrentFeed → scoreFeedHealth → [shouldRediscover] → rediscover → introducerDiscovery → logMaintenance → END
|
|
7
|
+
* └─ [skip rediscovery] ─────────────→ introducerDiscovery → logMaintenance → END
|
|
8
|
+
*/
|
|
9
|
+
import { StateGraph, START, END } from '@langchain/langgraph';
|
|
10
|
+
import { MaintenanceGraphState } from '../states/maintenance.state.js';
|
|
11
|
+
import { computeFeedHealth } from '../support/feed.health.js';
|
|
12
|
+
import { canUserSeeOpportunity, classifyOpportunity, isActionableForViewer, FEED_SOFT_TARGETS } from '../support/opportunity.utils.js';
|
|
13
|
+
import { shouldRunIntroducerDiscovery, runIntroducerDiscovery, } from '../support/introducer.discovery.js';
|
|
14
|
+
import { protocolLogger } from '../support/protocol.logger.js';
|
|
15
|
+
const logger = protocolLogger('MaintenanceGraph');
|
|
16
|
+
const FRESHNESS_WINDOW_MS = 12 * 60 * 60 * 1000; // 12 hours
|
|
17
|
+
/**
|
|
18
|
+
* Factory for the Maintenance Graph.
|
|
19
|
+
* Accepts database, cache, and queue dependencies via constructor injection.
|
|
20
|
+
*/
|
|
21
|
+
export class MaintenanceGraphFactory {
|
|
22
|
+
constructor(database, cache, queue) {
|
|
23
|
+
this.database = database;
|
|
24
|
+
this.cache = cache;
|
|
25
|
+
this.queue = queue;
|
|
26
|
+
}
|
|
27
|
+
/** Compile and return the maintenance graph. */
|
|
28
|
+
createGraph() {
|
|
29
|
+
const loadCurrentFeedNode = async (state) => {
|
|
30
|
+
if (!state.userId) {
|
|
31
|
+
return { error: 'userId is required' };
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const raw = await this.database.getOpportunitiesForUser(state.userId, { limit: 150 });
|
|
35
|
+
const actionable = raw.filter((opp) => isActionableForViewer(opp.actors, opp.status, state.userId));
|
|
36
|
+
const expired = raw.filter((opp) => opp.status === 'expired' && canUserSeeOpportunity(opp.actors, opp.status, state.userId));
|
|
37
|
+
const activeIntents = await this.database.getActiveIntents(state.userId);
|
|
38
|
+
// Read last rediscovery timestamp from cache
|
|
39
|
+
let lastRediscoveryAt = null;
|
|
40
|
+
try {
|
|
41
|
+
const cached = await this.cache.get(`rediscovery:lastRun:${state.userId}`);
|
|
42
|
+
if (typeof cached?.triggeredAt === 'string') {
|
|
43
|
+
const parsed = Date.parse(cached.triggeredAt);
|
|
44
|
+
if (Number.isFinite(parsed)) {
|
|
45
|
+
lastRediscoveryAt = parsed;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Cache unavailable — treat as no data
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
currentOpportunities: actionable,
|
|
54
|
+
expiredCount: expired.length,
|
|
55
|
+
activeIntents: activeIntents ?? [],
|
|
56
|
+
lastRediscoveryAt,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
logger.error('MaintenanceGraph loadCurrentFeed failed', { error: e });
|
|
61
|
+
return { error: 'Failed to load current feed' };
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const scoreFeedHealthNode = async (state) => {
|
|
65
|
+
if (state.error)
|
|
66
|
+
return {};
|
|
67
|
+
try {
|
|
68
|
+
const opps = state.currentOpportunities ?? [];
|
|
69
|
+
let connectionCount = 0;
|
|
70
|
+
let connectorFlowCount = 0;
|
|
71
|
+
for (const opp of opps) {
|
|
72
|
+
const category = classifyOpportunity(opp, state.userId);
|
|
73
|
+
if (category === 'connection')
|
|
74
|
+
connectionCount++;
|
|
75
|
+
else if (category === 'connector-flow')
|
|
76
|
+
connectorFlowCount++;
|
|
77
|
+
}
|
|
78
|
+
const healthResult = computeFeedHealth({
|
|
79
|
+
connectionCount,
|
|
80
|
+
connectorFlowCount,
|
|
81
|
+
expiredCount: state.expiredCount,
|
|
82
|
+
totalActionable: opps.length,
|
|
83
|
+
lastRediscoveryAt: state.lastRediscoveryAt,
|
|
84
|
+
freshnessWindowMs: FRESHNESS_WINDOW_MS,
|
|
85
|
+
});
|
|
86
|
+
logger.verbose(`[MaintenanceGraph] Feed health scored — userId=${state.userId} score=${healthResult.score} shouldMaintain=${healthResult.shouldMaintain} connectorFlowCount=${connectorFlowCount}`);
|
|
87
|
+
return { healthResult, connectorFlowCount };
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
logger.error('MaintenanceGraph scoreFeedHealth failed', { error: e });
|
|
91
|
+
return { error: 'Failed to score feed health' };
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const shouldRediscover = (state) => {
|
|
95
|
+
if (state.error)
|
|
96
|
+
return 'introducerDiscovery';
|
|
97
|
+
if (state.healthResult?.shouldMaintain && state.activeIntents.length > 0) {
|
|
98
|
+
return 'rediscover';
|
|
99
|
+
}
|
|
100
|
+
return 'introducerDiscovery';
|
|
101
|
+
};
|
|
102
|
+
const rediscoverNode = async (state) => {
|
|
103
|
+
try {
|
|
104
|
+
const bucket = Math.floor(Date.now() / (6 * 60 * 60 * 1000));
|
|
105
|
+
let enqueued = 0;
|
|
106
|
+
const results = await Promise.allSettled(state.activeIntents.map((intent) => this.queue.addJob({ intentId: intent.id, userId: state.userId }, { priority: 10, jobId: `rediscovery-${state.userId}-${intent.id}-${bucket}` })));
|
|
107
|
+
for (const r of results) {
|
|
108
|
+
if (r.status === 'rejected') {
|
|
109
|
+
const errMsg = r.reason instanceof Error ? r.reason.message : String(r.reason);
|
|
110
|
+
logger.error(`[MaintenanceGraph] Rediscovery job enqueue failed: ${errMsg}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
enqueued = results.filter((r) => r.status === 'fulfilled').length;
|
|
114
|
+
// Record last run timestamp
|
|
115
|
+
if (enqueued > 0) {
|
|
116
|
+
try {
|
|
117
|
+
await this.cache.set(`rediscovery:lastRun:${state.userId}`, { triggeredAt: new Date().toISOString() }, { ttl: 24 * 60 * 60 });
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Cache write failure is non-fatal
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { rediscoveryJobsEnqueued: enqueued };
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
logger.error('MaintenanceGraph rediscover failed', { error: e });
|
|
127
|
+
return { error: 'Failed to enqueue rediscovery jobs' };
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const introducerDiscoveryNode = async (state) => {
|
|
131
|
+
try {
|
|
132
|
+
const connectorFlowTarget = FEED_SOFT_TARGETS.connectorFlow;
|
|
133
|
+
if (!shouldRunIntroducerDiscovery(state.connectorFlowCount, connectorFlowTarget)) {
|
|
134
|
+
logger.verbose(`[MaintenanceGraph] Introducer discovery skipped — connector-flow target met — userId=${state.userId} connectorFlowCount=${state.connectorFlowCount} connectorFlowTarget=${connectorFlowTarget}`);
|
|
135
|
+
return {};
|
|
136
|
+
}
|
|
137
|
+
// Cast database/queue to introducer discovery interfaces (they are compatible)
|
|
138
|
+
const result = await runIntroducerDiscovery(this.database, this.queue, state.userId);
|
|
139
|
+
logger.info(`[MaintenanceGraph] Introducer discovery complete — userId=${state.userId} contactsEvaluated=${result.contactsEvaluated} jobsEnqueued=${result.jobsEnqueued}${result.skippedReason ? ` skippedReason=${result.skippedReason}` : ''}`);
|
|
140
|
+
return { introducerDiscoveryJobsEnqueued: result.jobsEnqueued };
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
logger.error('MaintenanceGraph introducerDiscovery failed', { error: e });
|
|
144
|
+
// Non-fatal: do not set error, just log and continue
|
|
145
|
+
return {};
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
const logMaintenanceNode = async (state) => {
|
|
149
|
+
logger.info(`[MaintenanceGraph] Maintenance complete — userId=${state.userId} score=${state.healthResult?.score} shouldMaintain=${state.healthResult?.shouldMaintain} rediscoveryJobs=${state.rediscoveryJobsEnqueued} introducerDiscoveryJobs=${state.introducerDiscoveryJobsEnqueued} activeIntents=${state.activeIntents.length} connectorFlowCount=${state.connectorFlowCount}`);
|
|
150
|
+
return {};
|
|
151
|
+
};
|
|
152
|
+
const graph = new StateGraph(MaintenanceGraphState)
|
|
153
|
+
.addNode('loadCurrentFeed', loadCurrentFeedNode)
|
|
154
|
+
.addNode('scoreFeedHealth', scoreFeedHealthNode)
|
|
155
|
+
.addNode('rediscover', rediscoverNode)
|
|
156
|
+
.addNode('introducerDiscovery', introducerDiscoveryNode)
|
|
157
|
+
.addNode('logMaintenance', logMaintenanceNode)
|
|
158
|
+
.addEdge(START, 'loadCurrentFeed')
|
|
159
|
+
.addConditionalEdges('loadCurrentFeed', (state) => (state.error ? 'end' : 'scoreFeedHealth'), {
|
|
160
|
+
scoreFeedHealth: 'scoreFeedHealth',
|
|
161
|
+
end: END,
|
|
162
|
+
})
|
|
163
|
+
.addConditionalEdges('scoreFeedHealth', shouldRediscover, {
|
|
164
|
+
rediscover: 'rediscover',
|
|
165
|
+
introducerDiscovery: 'introducerDiscovery',
|
|
166
|
+
})
|
|
167
|
+
.addEdge('rediscover', 'introducerDiscovery')
|
|
168
|
+
.addEdge('introducerDiscovery', 'logMaintenance')
|
|
169
|
+
.addEdge('logMaintenance', END);
|
|
170
|
+
return graph.compile();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=maintenance.graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.graph.js","sourceRoot":"","sources":["../../src/graphs/maintenance.graph.ts"],"names":[],"mappings":"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"}
|