@indexnetwork/protocol 3.7.0-rc.277.1 → 3.7.1-rc.278.1
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/agent/agent.tools.js +1 -1
- package/dist/agent/agent.tools.js.map +1 -1
- package/dist/chat/chat.agent.d.ts +6 -6
- package/dist/chat/chat.agent.d.ts.map +1 -1
- package/dist/chat/chat.agent.js +9 -9
- package/dist/chat/chat.agent.js.map +1 -1
- package/dist/chat/chat.graph.d.ts.map +1 -1
- package/dist/chat/chat.graph.js +3 -12
- package/dist/chat/chat.graph.js.map +1 -1
- package/dist/chat/chat.interrupt.classifier.d.ts.map +1 -1
- package/dist/chat/chat.interrupt.classifier.js +1 -3
- package/dist/chat/chat.interrupt.classifier.js.map +1 -1
- package/dist/chat/chat.suggester.js.map +1 -1
- package/dist/context/context.generator.d.ts +2 -0
- package/dist/context/context.generator.d.ts.map +1 -1
- package/dist/context/context.generator.js +8 -6
- package/dist/context/context.generator.js.map +1 -1
- package/dist/intent/intent.clarifier.d.ts +2 -0
- package/dist/intent/intent.clarifier.d.ts.map +1 -1
- package/dist/intent/intent.clarifier.js +9 -23
- package/dist/intent/intent.clarifier.js.map +1 -1
- package/dist/intent/intent.graph.d.ts.map +1 -1
- package/dist/intent/intent.graph.js +29 -26
- package/dist/intent/intent.graph.js.map +1 -1
- package/dist/intent/intent.tools.d.ts.map +1 -1
- package/dist/intent/intent.tools.js +18 -48
- package/dist/intent/intent.tools.js.map +1 -1
- package/dist/maintenance/maintenance.graph.d.ts.map +1 -1
- package/dist/maintenance/maintenance.graph.js +1 -2
- package/dist/maintenance/maintenance.graph.js.map +1 -1
- package/dist/mcp/mcp.server.d.ts.map +1 -1
- package/dist/mcp/mcp.server.js +2 -4
- package/dist/mcp/mcp.server.js.map +1 -1
- package/dist/negotiation/negotiation.graph.d.ts.map +1 -1
- package/dist/negotiation/negotiation.graph.js +13 -20
- package/dist/negotiation/negotiation.graph.js.map +1 -1
- package/dist/negotiation/negotiation.tools.d.ts.map +1 -1
- package/dist/negotiation/negotiation.tools.js +12 -12
- package/dist/negotiation/negotiation.tools.js.map +1 -1
- package/dist/network/indexer/indexer.graph.d.ts +9 -9
- package/dist/network/indexer/indexer.graph.d.ts.map +1 -1
- package/dist/network/indexer/indexer.graph.js.map +1 -1
- package/dist/network/network.graph.d.ts.map +1 -1
- package/dist/network/network.graph.js +19 -25
- package/dist/network/network.graph.js.map +1 -1
- package/dist/opportunity/feed/feed.categorizer.d.ts.map +1 -1
- package/dist/opportunity/feed/feed.categorizer.js +15 -20
- package/dist/opportunity/feed/feed.categorizer.js.map +1 -1
- package/dist/opportunity/feed/feed.graph.d.ts.map +1 -1
- package/dist/opportunity/feed/feed.graph.js +8 -10
- package/dist/opportunity/feed/feed.graph.js.map +1 -1
- package/dist/opportunity/opportunity.introducer.d.ts.map +1 -1
- package/dist/opportunity/opportunity.introducer.js +1 -2
- package/dist/opportunity/opportunity.introducer.js.map +1 -1
- package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
- package/dist/opportunity/opportunity.tools.js +3 -2
- package/dist/opportunity/opportunity.tools.js.map +1 -1
- package/dist/profile/profile.enricher.d.ts +5 -7
- package/dist/profile/profile.enricher.d.ts.map +1 -1
- package/dist/profile/profile.enricher.js +8 -10
- package/dist/profile/profile.enricher.js.map +1 -1
- package/dist/profile/profile.generator.d.ts.map +1 -1
- package/dist/profile/profile.generator.js +1 -2
- package/dist/profile/profile.generator.js.map +1 -1
- package/dist/profile/profile.tools.js +1 -1
- package/dist/profile/profile.tools.js.map +1 -1
- package/dist/questioner/questioner.presets.d.ts.map +1 -1
- package/dist/questioner/questioner.presets.js +24 -38
- package/dist/questioner/questioner.presets.js.map +1 -1
- package/dist/shared/agent/tool.factory.d.ts.map +1 -1
- package/dist/shared/agent/tool.factory.js +1 -2
- package/dist/shared/agent/tool.factory.js.map +1 -1
- package/dist/shared/agent/tool.runtime.d.ts.map +1 -1
- package/dist/shared/agent/tool.runtime.js +20 -13
- package/dist/shared/agent/tool.runtime.js.map +1 -1
- package/dist/shared/hyde/hyde.graph.d.ts.map +1 -1
- package/dist/shared/hyde/hyde.graph.js +3 -2
- package/dist/shared/hyde/hyde.graph.js.map +1 -1
- package/dist/shared/hyde/hyde.strategies.d.ts +2 -1
- package/dist/shared/hyde/hyde.strategies.d.ts.map +1 -1
- package/dist/shared/hyde/hyde.strategies.js.map +1 -1
- package/dist/shared/observability/trace.d.ts +3 -3
- package/dist/shared/observability/trace.d.ts.map +1 -1
- package/dist/shared/observability/trace.js +19 -33
- package/dist/shared/observability/trace.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.graph.js","sourceRoot":"/","sources":["intent/intent.graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { StateGraph, START, END } from \"@langchain/langgraph\";\nimport { IntentGraphState, VerifiedIntent, ExecutionResult } from \"./intent.state.js\";\nimport { ExplicitIntentInferrer } from \"./intent.inferrer.js\";\nimport { SemanticVerifier } from \"./intent.verifier.js\";\nimport { DEFAULT_SPECIFICITY_WARNING } from \"./intent.specificity.js\";\nimport { IntentReconciler } from \"./intent.reconciler.js\";\nimport { IntentGraphDatabase } from \"../shared/interfaces/database.interface.js\";\nimport { getAbortSignalConfig } from \"../shared/agent/model-signal.js\";\nimport type { EmbeddingGenerator } from \"../shared/interfaces/embedder.interface.js\";\nimport type { IntentGraphQueue } from \"../shared/interfaces/queue.interface.js\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport { timed } from \"../shared/observability/performance.js\";\nimport { requestContext } from \"../shared/observability/request-context.js\";\nimport type { DebugMetaAgent } from \"../chat/chat-streaming.types.js\";\nimport type { QuestionerEnqueueFn } from \"../questioner/questioner.types.js\";\n\nconst logger = protocolLogger(\"IntentGraphFactory\");\nconst MAX_PERMISSIBLE_ENTROPY = 0.75;\nconst MIN_CLEAR_INTENT_SCORE = 40;\nconst GENERIC_JOB_PHRASE = /\\b(?:a|any|some)\\s+job\\b/i;\n\ntype ParsedProfile = {\n identity?: { bio?: string; name?: string; location?: string };\n narrative?: { context?: string };\n attributes?: { skills?: string[]; interests?: string[] };\n};\n\nconst parseProfile = (profile: string): ParsedProfile | null => {\n if (!profile || !profile.trim()) return null;\n try {\n const parsed = JSON.parse(profile) as ParsedProfile;\n return parsed && typeof parsed === \"object\" ? parsed : null;\n } catch {\n return null;\n }\n};\n\nconst inferRoleFromProfileText = (text: string): string | null => {\n const normalized = text.toLowerCase();\n if (/\\b(engineer|developer)\\b/.test(normalized)) return \"software engineering\";\n if (/\\b(designer|ux|ui)\\b/.test(normalized)) return \"product design\";\n if (/\\b(marketing|marketer|growth)\\b/.test(normalized)) return \"marketing\";\n if (/\\b(product manager|product)\\b/.test(normalized)) return \"product management\";\n if (/\\b(data scientist|machine learning|ml|ai)\\b/.test(normalized)) return \"AI/ML\";\n if (/\\b(sales|account executive|business development)\\b/.test(normalized)) return \"sales\";\n return null;\n};\n\nconst buildJobQualifierFromProfile = (profile: ParsedProfile | null): string | null => {\n if (!profile) return null;\n\n const skills = (profile.attributes?.skills ?? [])\n .filter((skill): skill is string => typeof skill === \"string\" && skill.trim().length > 0)\n .slice(0, 2);\n const interests = (profile.attributes?.interests ?? [])\n .filter((interest): interest is string => typeof interest === \"string\" && interest.trim().length > 0)\n .slice(0, 1);\n\n const profileText = [\n profile.identity?.bio,\n profile.narrative?.context,\n ]\n .filter((item): item is string => typeof item === \"string\" && item.trim().length > 0)\n .join(\" \");\n const roleHint = inferRoleFromProfileText(profileText);\n\n if (skills.length > 0 && roleHint) {\n return `${skills.join(\" / \")} ${roleHint} role`;\n }\n if (skills.length > 0) {\n return `${skills.join(\" / \")} role`;\n }\n if (interests.length > 0 && roleHint) {\n return `${interests[0]} ${roleHint} role`;\n }\n if (roleHint) {\n return `${roleHint} role`;\n }\n return null;\n};\n\nconst enrichVagueIntentWithProfile = (description: string, profileContext: string): string => {\n const trimmed = description?.trim();\n if (!trimmed) return description;\n\n const isGenericJobRequest =\n GENERIC_JOB_PHRASE.test(trimmed) ||\n /\\b(?:find|get|look(?:ing)?\\s+for|want)\\s+(?:to\\s+)?(?:find\\s+)?job\\b/i.test(trimmed);\n if (!isGenericJobRequest) return description;\n\n const profile = parseProfile(profileContext);\n const qualifier = buildJobQualifierFromProfile(profile);\n if (!qualifier) return description;\n\n const enriched = trimmed\n .replace(/\\ba job\\b/i, `a ${qualifier}`)\n .replace(/\\bjob\\b/i, `${qualifier}`)\n .replace(/\\s{2,}/g, \" \")\n .trim();\n\n return enriched.length > 0 ? enriched : description;\n};\n\nconst isVague = (description: string, entropy: number, clarity: number): boolean => {\n if (GENERIC_JOB_PHRASE.test(description)) return true;\n if (entropy > MAX_PERMISSIBLE_ENTROPY) return true;\n if (clarity < MIN_CLEAR_INTENT_SCORE) return true;\n return false;\n};\n\nconst getSpecificityWarning = (verdict: { specificity_warning?: string | null }): string => {\n const warning = verdict.specificity_warning?.trim();\n return warning && warning.length > 0 ? warning : DEFAULT_SPECIFICITY_WARNING;\n};\n\nconst toSpeechActType = (classification?: string): \"COMMISSIVE\" | \"DIRECTIVE\" | null => {\n if (classification === \"COMMISSIVE\" || classification === \"DIRECTIVE\") return classification;\n return null;\n};\n\n/**\n * Factory class to build and compile the Intent Processing Graph.\n */\nexport class IntentGraphFactory {\n constructor(\n private database: IntentGraphDatabase,\n private embedder?: EmbeddingGenerator,\n private intentQueue?: IntentGraphQueue,\n private questionerEnqueue?: QuestionerEnqueueFn,\n ) { }\n\n public createGraph() {\n // Instantiate Agents (Nodes)\n const inferrer = new ExplicitIntentInferrer();\n const verifier = new SemanticVerifier();\n const reconciler = new IntentReconciler();\n\n // --- NODE DEFINITIONS ---\n\n /**\n * Node 0: Prep\n * Always fetches ALL of the user's active intents from the DB via getActiveIntents(userId).\n * This ensures reconciliation can detect duplicates and modifications globally,\n * regardless of index scope.\n */\n const prepNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.prep\", async () => {\n logger.verbose(\"Starting preparation phase\", {\n operationMode: state.operationMode,\n hasContent: !!state.inputContent,\n targetIntentIds: state.targetIntentIds,\n networkId: state.networkId,\n });\n\n // Gate: write operations require an existing profile\n if (state.operationMode !== 'read') {\n const profile = await this.database.getProfile(state.userId);\n if (!profile) {\n const msg = \"You need to create a profile before creating intents. Please set up your profile first.\";\n logger.error(\"Prep failed: no profile for user\", { userId: state.userId });\n return { error: msg };\n }\n }\n\n const activeIntents = await this.database.getActiveIntents(state.userId);\n const formattedActiveIntents = activeIntents\n .map(i => `ID: ${i.id}, Description: ${i.payload}, Summary: ${i.summary || 'N/A'}`)\n .join('\\n') || \"No active intents.\";\n\n logger.verbose(\"Fetched active intents\", {\n count: activeIntents.length,\n operationMode: state.operationMode\n });\n\n return {\n activeIntents: formattedActiveIntents,\n trace: [{\n node: \"prep\",\n detail: `Fetched ${activeIntents.length} active intent(s)`,\n }],\n };\n });\n };\n\n /**\n * Node 1: Inference\n * Extracts intents from raw content.\n * Phase 4: Uses operation mode to control behavior and determine if node should execute.\n * Phase 5: Passes conversation context for anaphoric resolution.\n */\n const inferenceNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.inference\", async () => {\n logger.verbose(\"Starting inference\", {\n operationMode: state.operationMode,\n hasContent: !!state.inputContent,\n contentPreview: state.inputContent?.substring(0, 50),\n hasConversationContext: !!state.conversationContext,\n conversationMessagesCount: state.conversationContext?.length || 0\n });\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n // Phase 4: Control profile fallback based on operation mode\n // Only allow for create operations without explicit content\n const allowProfileFallback = state.operationMode === 'create' && !state.inputContent;\n\n // Cast operationMode: 'read' and 'propose' map to 'create' for the inferrer\n // (inference node is never called in read mode; propose behaves like create for inference)\n const inferrerMode = (state.operationMode === 'read' || state.operationMode === 'propose') ? 'create' : state.operationMode;\n const _traceEmitterInferrer = requestContext.getStore()?.traceEmitter;\n const inferrerStart = Date.now();\n _traceEmitterInferrer?.({ type: \"agent_start\", name: \"intent-inferrer\" });\n const result = await inferrer.invoke(\n state.inputContent || null,\n state.userProfile,\n {\n allowProfileFallback,\n operationMode: inferrerMode,\n conversationContext: state.conversationContext // Phase 5: Pass conversation history\n }\n );\n agentTimingsAccum.push({ name: 'intent.inferrer', durationMs: Date.now() - inferrerStart });\n _traceEmitterInferrer?.({ type: \"agent_end\", name: \"intent-inferrer\", durationMs: Date.now() - inferrerStart, summary: result.intents.length > 0 ? `Extracted ${result.intents.length} intent(s)` : \"intent-inferrer completed\" });\n\n logger.verbose(\"Inference complete\", {\n inferredCount: result.intents.length,\n operationMode: state.operationMode\n });\n\n const descriptions = result.intents.map(i => i.description).slice(0, 3);\n const truncated = result.intents.length > 3 ? `... +${result.intents.length - 3} more` : \"\";\n\n return {\n inferredIntents: result.intents,\n agentTimings: agentTimingsAccum,\n trace: [{\n node: \"inference\",\n detail: result.intents.length === 0\n ? \"No intents extracted\"\n : `Extracted ${result.intents.length}: ${descriptions.map(d => `\"${d.slice(0, 50)}${d.length > 50 ? '...' : ''}\"`).join(\", \")}${truncated}`,\n }],\n };\n });\n };\n\n /**\n * Node 2: Verification (Map-Reduce / Parallel)\n * Verifies each inferred intent in parallel.\n * Phase 4: Can be skipped for delete operations and updates with no new intents.\n */\n const verificationNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.verification\", async () => {\n const intents = state.inferredIntents;\n\n logger.verbose(\"Starting verification\", {\n operationMode: state.operationMode,\n intentCount: intents.length\n });\n\n if (intents.length === 0) {\n logger.verbose(\"No intents to verify\");\n return { verifiedIntents: [], agentTimings: [] };\n }\n\n logger.verbose(`Verifying ${intents.length} intents in parallel...`);\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n // Parallel Execution\n const verificationResults = await Promise.all(\n intents.map(async (intent): Promise<VerifiedIntent | null> => {\n try {\n let description = intent.description;\n const _traceEmitterVerifier = requestContext.getStore()?.traceEmitter;\n const verifierStart1 = Date.now();\n _traceEmitterVerifier?.({ type: \"agent_start\", name: \"intent-verifier\" });\n let verdict = await verifier.invoke(description, state.userProfile);\n agentTimingsAccum.push({ name: 'intent.verifier', durationMs: Date.now() - verifierStart1 });\n _traceEmitterVerifier?.({ type: \"agent_end\", name: \"intent-verifier\", durationMs: Date.now() - verifierStart1, summary: `Verified: ${verdict.classification}` });\n\n if (isVague(description, verdict.semantic_entropy, verdict.felicity_scores.clarity)) {\n const enrichedDescription = enrichVagueIntentWithProfile(description, state.userProfile);\n if (enrichedDescription !== description) {\n logger.verbose(\"Enriched vague intent using profile context\", {\n before: description,\n after: enrichedDescription,\n });\n const _traceEmitterVerifier2 = requestContext.getStore()?.traceEmitter;\n const verifierStart2 = Date.now();\n _traceEmitterVerifier2?.({ type: \"agent_start\", name: \"intent-verifier\" });\n const enrichedVerdict = await verifier.invoke(enrichedDescription, state.userProfile);\n agentTimingsAccum.push({ name: 'intent.verifier', durationMs: Date.now() - verifierStart2 });\n _traceEmitterVerifier2?.({ type: \"agent_end\", name: \"intent-verifier\", durationMs: Date.now() - verifierStart2, summary: `Verified (enriched): ${enrichedVerdict.classification}` });\n const becameClear =\n enrichedVerdict.semantic_entropy < verdict.semantic_entropy ||\n enrichedVerdict.felicity_scores.clarity > verdict.felicity_scores.clarity;\n if (becameClear) {\n description = enrichedDescription;\n verdict = enrichedVerdict;\n }\n }\n }\n\n // Filter Logic: Must be a Commissive, Directive, or Declaration\n const VALID_TYPES = ['COMMISSIVE', 'DIRECTIVE', 'DECLARATION'];\n if (!VALID_TYPES.includes(verdict.classification)) {\n logger.warn(`Dropping intent: \"${description}\" (Type: ${verdict.classification})`);\n return null;\n }\n\n if (isVague(description, verdict.semantic_entropy, verdict.felicity_scores.clarity)) {\n logger.warn(`Dropping vague intent after verification: \"${description}\"`, {\n entropy: verdict.semantic_entropy,\n clarity: verdict.felicity_scores.clarity,\n });\n return null;\n }\n\n if (state.operationMode !== 'propose' && verdict.referential_breadth === 'broad') {\n logger.warn(`Dropping broad attributive intent before persistence: \"${description}\"`, {\n referentialBreadth: verdict.referential_breadth,\n missingSelectionalConstraints: verdict.missing_selectional_constraints,\n warning: getSpecificityWarning(verdict),\n });\n return null;\n }\n\n // Calculate Score\n const score = Math.min(\n verdict.felicity_scores.authority,\n verdict.felicity_scores.sincerity,\n verdict.felicity_scores.clarity\n );\n\n // Return enriched intent\n return {\n ...intent,\n description,\n verification: verdict,\n score\n };\n } catch (e) {\n logger.error(`Error verifying intent: ${intent.description}`, { error: e });\n return null;\n }\n })\n );\n\n // Filter out nulls\n const verified = verificationResults.filter((i): i is VerifiedIntent => i !== null);\n logger.verbose(`Verification complete`, {\n passed: verified.length,\n total: intents.length,\n operationMode: state.operationMode\n });\n\n // Build trace entries with Felicity scores for each verified intent\n const traceEntries = verified.map(v => {\n const fs = v.verification?.felicity_scores;\n const entropy = v.verification?.semantic_entropy;\n const classification = v.verification?.classification;\n const referentialBreadth = v.verification?.referential_breadth;\n return {\n node: \"verification\",\n detail: `\"${v.description.slice(0, 40)}${v.description.length > 40 ? '...' : ''}\" → ${classification}${referentialBreadth ? ` (${referentialBreadth} referential breadth)` : ''}`,\n data: fs ? {\n clarity: fs.clarity,\n authority: fs.authority,\n sincerity: fs.sincerity,\n entropy: entropy != null ? Math.round(entropy * 100) / 100 : undefined,\n referentialBreadth,\n missingSelectionalConstraints: v.verification?.missing_selectional_constraints,\n specificityWarning: v.verification?.specificity_warning ?? undefined,\n classification,\n score: v.score,\n } : undefined,\n };\n });\n\n // Add summary trace if some intents were filtered out\n const dropped = intents.length - verified.length;\n if (dropped > 0) {\n traceEntries.unshift({\n node: \"verification\",\n detail: `Verified ${verified.length}/${intents.length} (${dropped} filtered as invalid)`,\n data: undefined,\n });\n } else if (verified.length > 0) {\n traceEntries.unshift({\n node: \"verification\",\n detail: `Verified ${verified.length} intent(s)`,\n data: undefined,\n });\n }\n\n return { verifiedIntents: verified, agentTimings: agentTimingsAccum, trace: traceEntries };\n });\n };\n\n /**\n * Node 3: Reconciliation\n * Decides on final actions (Create, Update, Expire).\n * Phase 4: Handles delete operations directly without LLM reconciliation.\n */\n const reconciliationNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.reconciliation\", async () => {\n logger.verbose(\"Starting reconciliation\", {\n operationMode: state.operationMode,\n verifiedIntentCount: state.verifiedIntents.length,\n targetIntentIds: state.targetIntentIds\n });\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n // Phase 4: Handle delete operations directly\n if (state.operationMode === 'delete') {\n if (!state.targetIntentIds || state.targetIntentIds.length === 0) {\n logger.warn(\"Delete mode with no target IDs\");\n return {\n actions: [],\n agentTimings: agentTimingsAccum,\n trace: [{ node: \"reconciler\", detail: \"Delete mode with no target IDs\" }],\n };\n }\n\n logger.verbose(\"Delete mode - generating expire actions\", {\n targetIds: state.targetIntentIds\n });\n\n const actions = state.targetIntentIds.map(id => ({\n type: 'expire' as const,\n id,\n reasoning: 'User requested deletion'\n }));\n\n return {\n actions,\n agentTimings: agentTimingsAccum,\n trace: [{\n node: \"reconciler\",\n detail: `Actions: expire=${actions.length}`,\n }],\n };\n }\n\n // Standard reconciliation for create/update operations\n const candidates = state.verifiedIntents;\n if (candidates.length === 0) {\n logger.verbose(\"No verified intents to reconcile\");\n return {\n actions: [],\n agentTimings: agentTimingsAccum,\n trace: [{ node: \"reconciler\", detail: \"No intents to reconcile\" }],\n };\n }\n\n // Format candidates for the Reconciler Prompt\n const formattedCandidates = candidates.map(c =>\n `- [${c.type.toUpperCase()}] \"${c.description}\" (Confidence: ${c.confidence}, Score: ${c.score})\\n` +\n ` Reasoning: ${c.reasoning}\\n` +\n ` Verification: ${c.verification?.classification} (Flags: ${c.verification?.flags.join(', ') || 'None'})`\n ).join('\\n');\n\n logger.verbose(\"Invoking reconciler agent\", {\n candidateCount: candidates.length,\n operationMode: state.operationMode\n });\n\n const _traceEmitterReconciler = requestContext.getStore()?.traceEmitter;\n const reconcilerStart = Date.now();\n _traceEmitterReconciler?.({ type: \"agent_start\", name: \"intent-reconciler\" });\n const result = await reconciler.invoke(formattedCandidates, state.activeIntents);\n agentTimingsAccum.push({ name: 'intent.reconciler', durationMs: Date.now() - reconcilerStart });\n _traceEmitterReconciler?.({ type: \"agent_end\", name: \"intent-reconciler\", durationMs: Date.now() - reconcilerStart, summary: `Reconciled ${result.actions.length} action(s)` });\n\n logger.verbose(\"Reconciliation complete\", {\n actionCount: result.actions.length,\n operationMode: state.operationMode\n });\n\n // Count actions by type\n const counts = { create: 0, update: 0, expire: 0 };\n for (const a of result.actions) {\n if (a.type in counts) counts[a.type as keyof typeof counts]++;\n }\n\n return {\n actions: result.actions,\n agentTimings: agentTimingsAccum,\n trace: [{\n node: \"reconciler\",\n detail: `Actions: create=${counts.create}, update=${counts.update}, expire=${counts.expire}`,\n }],\n };\n });\n };\n\n /** Strip URLs and \"More details at [url]\" from intent payloads before persisting. */\n const sanitizePayload = (payload: string): string => {\n if (!payload || typeof payload !== \"string\") return payload;\n const out = payload\n .replace(/\\s*More details at\\s*:?\\s*https?:\\/\\/[^\\s\"'<>)\\]]+/gi, \"\")\n .replace(/\\s*See\\s+https?:\\/\\/[^\\s\"'<>)\\]]+\\s+for\\s+more[^.]*\\.?/gi, \"\")\n .replace(/https?:\\/\\/[^\\s\"'<>)\\]]+/g, \"\")\n .replace(/\\s{2,}/g, \" \")\n .trim();\n return out.replace(/[.,;]\\s*$/, \"\").trim() || payload;\n };\n\n /**\n * Node 4: Executor\n * Executes reconciler actions against the database.\n */\n const executorNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.executor\", async () => {\n const actions = state.actions;\n if (!actions || actions.length === 0) {\n return { executionResults: [] };\n }\n\n logger.verbose(`Executing ${actions.length} actions...`);\n const results: ExecutionResult[] = [];\n const verifiedIntentByPayload = new Map<string, VerifiedIntent>();\n for (const verifiedIntent of state.verifiedIntents) {\n verifiedIntentByPayload.set(verifiedIntent.description, verifiedIntent);\n verifiedIntentByPayload.set(sanitizePayload(verifiedIntent.description), verifiedIntent);\n }\n\n for (const action of actions) {\n const actionType = action.type.toLowerCase() as 'create' | 'update' | 'expire';\n try {\n if (actionType === 'create') {\n const createAction = action as {\n payload: string;\n score: number | null;\n semanticEntropy?: number | null;\n referentialAnchor?: string | null;\n intentMode?: 'REFERENTIAL' | 'ATTRIBUTIVE' | null;\n };\n const sanitizedPayload = sanitizePayload(createAction.payload);\n const matchedVerifiedIntent =\n verifiedIntentByPayload.get(createAction.payload) ||\n verifiedIntentByPayload.get(sanitizedPayload);\n\n // Generate embedding for the intent payload\n let flatEmbedding: number[] | undefined;\n if (this.embedder) {\n try {\n const embedding = await this.embedder.generate(sanitizedPayload, undefined, getAbortSignalConfig());\n flatEmbedding = Array.isArray(embedding?.[0])\n ? (embedding as number[][])[0]\n : (embedding as number[]);\n logger.verbose(\"Generated embedding for new intent\", { dimensions: flatEmbedding?.length });\n } catch (embErr) {\n logger.error(\"Failed to generate embedding for intent (continuing without)\", { error: embErr });\n }\n }\n\n const created = await this.database.createIntent({\n userId: state.userId,\n payload: sanitizedPayload,\n confidence: createAction.score ? createAction.score / 100 : 1.0,\n inferenceType: 'explicit',\n sourceType: 'discovery_form',\n embedding: flatEmbedding,\n semanticEntropy:\n createAction.semanticEntropy ??\n matchedVerifiedIntent?.verification?.semantic_entropy ??\n null,\n referentialAnchor:\n createAction.referentialAnchor ??\n matchedVerifiedIntent?.verification?.referential_anchor ??\n null,\n felicityAuthority: matchedVerifiedIntent?.verification?.felicity_scores.authority ?? null,\n felicitySincerity: matchedVerifiedIntent?.verification?.felicity_scores.sincerity ?? null,\n felicityClarity: matchedVerifiedIntent?.verification?.felicity_scores.clarity ?? null,\n intentMode: createAction.intentMode ?? null,\n speechActType: toSpeechActType(matchedVerifiedIntent?.verification?.classification),\n });\n\n results.push({ actionType: 'create', success: true, intentId: created.id, payload: sanitizedPayload });\n logger.verbose(`Created intent: ${created.id}`);\n\n this.intentQueue?.addGenerateHydeJob({\n intentId: created.id,\n userId: state.userId,\n ...(state.networkId ? { networkScopeId: state.networkId } : {}),\n }).catch((err) =>\n logger.error('Failed to enqueue intent HyDE job', { intentId: created.id, error: err })\n );\n\n if (this.questionerEnqueue) {\n const parsed = parseProfile(state.userProfile);\n this.questionerEnqueue({\n mode: 'intent',\n userId: state.userId,\n sourceType: 'intent',\n sourceId: created.id,\n context: {\n intentId: created.id,\n payload: sanitizedPayload,\n userProfile: {\n name: parsed?.identity?.name,\n bio: parsed?.identity?.bio,\n skills: parsed?.attributes?.skills,\n interests: parsed?.attributes?.interests,\n },\n },\n }).catch((err) =>\n logger.error('Failed to enqueue intent question generation', { intentId: created.id, error: err })\n );\n }\n\n } else if (actionType === 'update') {\n const updateAction = action as {\n id: string;\n payload: string;\n intentMode?: 'REFERENTIAL' | 'ATTRIBUTIVE' | null;\n };\n const sanitizedPayload = sanitizePayload(updateAction.payload);\n const matchedVerifiedIntent =\n verifiedIntentByPayload.get(updateAction.payload) ||\n verifiedIntentByPayload.get(sanitizedPayload);\n\n // Regenerate embedding for the updated payload\n let flatEmbedding: number[] | undefined;\n if (this.embedder) {\n try {\n const embedding = await this.embedder.generate(sanitizedPayload, undefined, getAbortSignalConfig());\n flatEmbedding = Array.isArray(embedding?.[0])\n ? (embedding as number[][])[0]\n : (embedding as number[]);\n logger.verbose(\"Generated embedding for updated intent\", { intentId: updateAction.id, dimensions: flatEmbedding?.length });\n } catch (embErr) {\n logger.error(\"Failed to generate embedding for intent update (continuing without)\", { error: embErr });\n }\n }\n\n const updated = await this.database.updateIntent(updateAction.id, {\n payload: sanitizedPayload,\n embedding: flatEmbedding,\n semanticEntropy:\n matchedVerifiedIntent?.verification?.semantic_entropy ??\n null,\n referentialAnchor:\n matchedVerifiedIntent?.verification?.referential_anchor ??\n null,\n felicityAuthority: matchedVerifiedIntent?.verification?.felicity_scores.authority ?? null,\n felicitySincerity: matchedVerifiedIntent?.verification?.felicity_scores.sincerity ?? null,\n felicityClarity: matchedVerifiedIntent?.verification?.felicity_scores.clarity ?? null,\n intentMode: updateAction.intentMode ?? null,\n speechActType: toSpeechActType(matchedVerifiedIntent?.verification?.classification),\n });\n results.push({\n actionType: 'update',\n success: !!updated,\n intentId: updateAction.id,\n payload: sanitizedPayload,\n error: updated ? undefined : 'Intent not found'\n });\n logger.verbose(`Updated intent: ${updateAction.id}`);\n if (updated) {\n this.intentQueue?.addGenerateHydeJob({\n intentId: updateAction.id,\n userId: state.userId,\n ...(state.networkId ? { networkScopeId: state.networkId } : {}),\n }).catch((err) =>\n logger.error('Failed to enqueue intent HyDE job', { intentId: updateAction.id, error: err })\n );\n }\n\n } else if (actionType === 'expire') {\n const expireAction = action as { id: string };\n const result = await this.database.archiveIntent(expireAction.id);\n results.push({\n actionType: 'expire',\n success: result.success,\n intentId: expireAction.id,\n error: result.error\n });\n logger.verbose(`Archived intent: ${expireAction.id}`);\n if (result.success) {\n this.intentQueue?.addDeleteHydeJob({ intentId: expireAction.id }).catch((err) =>\n logger.error('Failed to enqueue intent HyDE delete job', { intentId: expireAction.id, error: err })\n );\n }\n }\n } catch (error) {\n logger.error(`Failed to execute ${action.type}:`, { error });\n results.push({\n actionType,\n success: false,\n intentId: 'id' in action ? action.id : undefined,\n error: error instanceof Error ? error.message : 'Unknown error'\n });\n }\n }\n\n return { executionResults: results };\n });\n };\n\n // --- QUERY NODE (Read Mode) ---\n\n /**\n * Node: Query\n * Fast-path read node — fetches intents from DB based on scope.\n * Handles: global user intents, index-scoped (all or filtered by user).\n * No LLM calls; no inference/verification/reconciliation.\n */\n const queryNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.query\", async () => {\n logger.verbose(\"Starting query (read mode)\", {\n userId: state.userId,\n networkId: state.networkId,\n queryUserId: state.queryUserId,\n allUserIntents: state.allUserIntents,\n });\n\n try {\n // Scope-aware default: caller's intents across all reachable indexes.\n // Triggered when the tool layer passed indexScope and did not pick a\n // specific networkId or queryUserId — i.e. \"my intents\" in a chat\n // where the agent's reach is more than one index.\n if (\n !state.queryUserId &&\n !state.networkId &&\n state.indexScope &&\n state.indexScope.length > 0\n ) {\n const intents = await this.database.getActiveIntentsAcrossIndexes(\n state.userId,\n state.indexScope,\n );\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"You don't have any active intents yet. Share what you're looking for.\",\n },\n };\n }\n return {\n readResult: {\n count: intents.length,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n })),\n },\n };\n }\n\n // When allUserIntents is true, ignore index scope and return all\n const effectiveIndexId = state.allUserIntents ? undefined : state.networkId;\n\n if (effectiveIndexId) {\n // Verify membership\n const isMember = await this.database.isNetworkMember(effectiveIndexId, state.userId);\n if (!isMember) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"Index not found or you are not a member.\",\n },\n };\n }\n\n // Index-scoped read\n if (!state.queryUserId) {\n // All intents in the index (any member can see)\n const intents = await this.database.getNetworkIntentsForMember(\n effectiveIndexId,\n state.userId,\n { limit: 50, offset: 0 }\n );\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"No intents in this index yet.\",\n networkId: effectiveIndexId,\n },\n };\n }\n return {\n readResult: {\n count: intents.length,\n networkId: effectiveIndexId,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n userId: i.userId,\n userName: i.userName,\n })),\n },\n };\n }\n\n // Specific user's intents in the index\n const effectiveUserId = state.queryUserId;\n const intents = await this.database.getIntentsInIndexForMember(\n effectiveUserId,\n effectiveIndexId\n );\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message:\n effectiveUserId === state.userId\n ? \"You don't have any intents in this index yet.\"\n : \"No intents for that user in this index.\",\n networkId: effectiveIndexId,\n },\n };\n }\n const user = await this.database.getUser(effectiveUserId);\n const userName = user?.name ?? null;\n return {\n readResult: {\n count: intents.length,\n networkId: effectiveIndexId,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n userId: effectiveUserId,\n userName,\n })),\n },\n };\n }\n\n // Global (no index scope): return user's own active intents\n const intents = await this.database.getActiveIntents(state.userId);\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message:\n \"You don't have any active intents yet. Share what you're looking for.\",\n },\n };\n }\n return {\n readResult: {\n count: intents.length,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n })),\n },\n };\n } catch (err) {\n logger.error(\"Query node failed\", { error: err });\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"Failed to fetch intents. Please try again.\",\n },\n };\n }\n });\n };\n\n // --- CONDITIONAL ROUTING FUNCTIONS ---\n\n /**\n * After prep: read mode → query; otherwise decide inference vs reconciler by operation mode.\n */\n const afterPrepRoute = (state: typeof IntentGraphState.State): string => {\n if (state.error) {\n logger.warn('Prep failed with error, short-circuiting to END', { error: state.error });\n return '__end__';\n }\n if (state.operationMode === 'read') {\n logger.verbose('Read mode - routing to query (fast path)');\n return 'query';\n }\n return shouldRunInference(state);\n };\n \n /**\n * Determines if inference should run based on operation mode.\n * Delete operations skip inference entirely and go straight to reconciliation.\n */\n const shouldRunInference = (state: typeof IntentGraphState.State): string => {\n if (state.operationMode === 'delete') {\n logger.verbose('Delete mode - skipping inference, routing to reconciliation');\n return 'reconciler';\n }\n \n logger.verbose('Running inference', {\n operationMode: state.operationMode\n });\n return 'inference';\n };\n \n /**\n * Determines if verification should run based on operation mode and inferred intents.\n * Skips verification for:\n * - Operations with no inferred intents\n * - Can be extended to skip for update operations with no new intents\n */\n const shouldRunVerification = (state: typeof IntentGraphState.State): string => {\n if (state.inferredIntents.length === 0) {\n if (state.operationMode === 'propose') {\n logger.verbose('Propose mode with no inferred intents - exiting early');\n return '__end__';\n }\n logger.verbose('No intents to verify - skipping verification, routing to reconciliation');\n return 'reconciler';\n }\n \n if (state.operationMode === 'update') {\n logger.verbose('Update mode with new intents - running verification');\n return 'verification';\n }\n \n if (state.operationMode === 'create') {\n logger.verbose('Create mode - running verification');\n return 'verification';\n }\n \n // Default to verification for safety\n logger.verbose('Default routing to verification');\n return 'verification';\n };\n\n // --- GRAPH ASSEMBLY WITH CONDITIONAL EDGES (PHASE 4) ---\n\n const workflow = new StateGraph(IntentGraphState)\n .addNode(\"prep\", prepNode)\n .addNode(\"query\", queryNode)\n .addNode(\"inference\", inferenceNode)\n .addNode(\"verification\", verificationNode)\n .addNode(\"reconciler\", reconciliationNode)\n .addNode(\"executor\", executorNode)\n\n // Flow paths:\n // - READ: prep → query → END (fast path, no LLM calls)\n // - CREATE: prep → inference → verification → reconciler → executor → END\n // - UPDATE: prep → inference → reconciliation → executor → END (skips verification if no new intents)\n // - DELETE: prep → reconciliation → executor → END (skips inference and verification)\n // - PROPOSE: prep → inference → verification → END (no reconciliation/execution, no DB writes)\n .addEdge(START, \"prep\")\n \n // After prep: read mode → query; else inference or reconciler\n .addConditionalEdges(\"prep\", afterPrepRoute, {\n query: \"query\",\n inference: \"inference\",\n reconciler: \"reconciler\",\n __end__: END,\n })\n\n // Query (read mode) always ends\n .addEdge(\"query\", END)\n \n // After inference: decide if we need verification (skip if no intents)\n .addConditionalEdges(\"inference\", shouldRunVerification, {\n verification: \"verification\",\n reconciler: \"reconciler\",\n __end__: END,\n })\n \n // After verification: propose mode exits early; others continue to reconciliation\n .addConditionalEdges(\"verification\", (state: typeof IntentGraphState.State) => {\n if (state.operationMode === 'propose') {\n logger.verbose('Propose mode - stopping after verification, skipping reconciliation');\n return '__end__';\n }\n return 'reconciler';\n }, {\n reconciler: \"reconciler\",\n __end__: END,\n })\n \n // Reconciliation always goes to executor\n .addEdge(\"reconciler\", \"executor\")\n \n // Executor is always the end\n .addEdge(\"executor\", END);\n\n return workflow.compile();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"intent.graph.js","sourceRoot":"/","sources":["intent/intent.graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { StateGraph, START, END } from \"@langchain/langgraph\";\nimport { IntentGraphState, VerifiedIntent, ExecutionResult } from \"./intent.state.js\";\nimport { ExplicitIntentInferrer } from \"./intent.inferrer.js\";\nimport { SemanticVerifier } from \"./intent.verifier.js\";\nimport { DEFAULT_SPECIFICITY_WARNING } from \"./intent.specificity.js\";\nimport { IntentReconciler } from \"./intent.reconciler.js\";\nimport { IntentGraphDatabase } from \"../shared/interfaces/database.interface.js\";\nimport { getAbortSignalConfig } from \"../shared/agent/model-signal.js\";\nimport type { EmbeddingGenerator } from \"../shared/interfaces/embedder.interface.js\";\nimport type { IntentGraphQueue } from \"../shared/interfaces/queue.interface.js\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport { timed } from \"../shared/observability/performance.js\";\nimport { requestContext } from \"../shared/observability/request-context.js\";\nimport type { DebugMetaAgent } from \"../chat/chat-streaming.types.js\";\nimport type { QuestionerEnqueueFn } from \"../questioner/questioner.types.js\";\n\nconst logger = protocolLogger(\"IntentGraphFactory\");\nconst MAX_PERMISSIBLE_ENTROPY = 0.75;\nconst MIN_CLEAR_INTENT_SCORE = 40;\nconst GENERIC_JOB_PHRASE = /\\b(?:a|any|some)\\s+job\\b/i;\n\ntype ParsedProfile = {\n identity?: { bio?: string; name?: string; location?: string };\n narrative?: { context?: string };\n attributes?: { skills?: string[]; interests?: string[] };\n};\n\nconst parseProfile = (profile: string): ParsedProfile | null => {\n if (!profile || !profile.trim()) return null;\n try {\n const parsed = JSON.parse(profile) as ParsedProfile;\n return parsed && typeof parsed === \"object\" ? parsed : null;\n } catch {\n return null;\n }\n};\n\nconst inferRoleFromProfileText = (text: string): string | null => {\n const normalized = text.toLowerCase();\n if (/\\b(engineer|developer)\\b/.test(normalized)) return \"software engineering\";\n if (/\\b(designer|ux|ui)\\b/.test(normalized)) return \"product design\";\n if (/\\b(marketing|marketer|growth)\\b/.test(normalized)) return \"marketing\";\n if (/\\b(product manager|product)\\b/.test(normalized)) return \"product management\";\n if (/\\b(data scientist|machine learning|ml|ai)\\b/.test(normalized)) return \"AI/ML\";\n if (/\\b(sales|account executive|business development)\\b/.test(normalized)) return \"sales\";\n return null;\n};\n\nconst buildJobQualifierFromProfile = (profile: ParsedProfile | null): string | null => {\n if (!profile) return null;\n\n const skills = (profile.attributes?.skills ?? [])\n .filter((skill): skill is string => typeof skill === \"string\" && skill.trim().length > 0)\n .slice(0, 2);\n const interests = (profile.attributes?.interests ?? [])\n .filter((interest): interest is string => typeof interest === \"string\" && interest.trim().length > 0)\n .slice(0, 1);\n\n const profileText = [\n profile.identity?.bio,\n profile.narrative?.context,\n ]\n .filter((item): item is string => typeof item === \"string\" && item.trim().length > 0)\n .join(\" \");\n const roleHint = inferRoleFromProfileText(profileText);\n\n if (skills.length > 0 && roleHint) {\n return `${skills.join(\" / \")} ${roleHint} role`;\n }\n if (skills.length > 0) {\n return `${skills.join(\" / \")} role`;\n }\n if (interests.length > 0 && roleHint) {\n return `${interests[0]} ${roleHint} role`;\n }\n if (roleHint) {\n return `${roleHint} role`;\n }\n return null;\n};\n\nconst enrichVagueIntentWithProfile = (description: string, profileContext: string): string => {\n const trimmed = description?.trim();\n if (!trimmed) return description;\n\n const isGenericJobRequest =\n GENERIC_JOB_PHRASE.test(trimmed) ||\n /\\b(?:find|get|look(?:ing)?\\s+for|want)\\s+(?:to\\s+)?(?:find\\s+)?job\\b/i.test(trimmed);\n if (!isGenericJobRequest) return description;\n\n const profile = parseProfile(profileContext);\n const qualifier = buildJobQualifierFromProfile(profile);\n if (!qualifier) return description;\n\n const enriched = trimmed\n .replace(/\\ba job\\b/i, `a ${qualifier}`)\n .replace(/\\bjob\\b/i, `${qualifier}`)\n .replace(/\\s{2,}/g, \" \")\n .trim();\n\n return enriched.length > 0 ? enriched : description;\n};\n\nconst isVague = (description: string, entropy: number, clarity: number): boolean => {\n if (GENERIC_JOB_PHRASE.test(description)) return true;\n if (entropy > MAX_PERMISSIBLE_ENTROPY) return true;\n if (clarity < MIN_CLEAR_INTENT_SCORE) return true;\n return false;\n};\n\nconst getSpecificityWarning = (verdict: { specificity_warning?: string | null }): string => {\n const warning = verdict.specificity_warning?.trim();\n return warning && warning.length > 0 ? warning : DEFAULT_SPECIFICITY_WARNING;\n};\n\nconst toSpeechActType = (classification?: string): \"COMMISSIVE\" | \"DIRECTIVE\" | null => {\n if (classification === \"COMMISSIVE\" || classification === \"DIRECTIVE\") return classification;\n return null;\n};\n\n/**\n * Factory class to build and compile the Intent Processing Graph.\n */\nexport class IntentGraphFactory {\n constructor(\n private database: IntentGraphDatabase,\n private embedder?: EmbeddingGenerator,\n private intentQueue?: IntentGraphQueue,\n private questionerEnqueue?: QuestionerEnqueueFn,\n ) { }\n\n public createGraph() {\n // Instantiate Agents (Nodes)\n const inferrer = new ExplicitIntentInferrer();\n const verifier = new SemanticVerifier();\n const reconciler = new IntentReconciler();\n\n // --- NODE DEFINITIONS ---\n\n /**\n * Node 0: Prep\n * Always fetches ALL of the user's active intents from the DB via getActiveIntents(userId).\n * This ensures reconciliation can detect duplicates and modifications globally,\n * regardless of index scope.\n */\n const prepNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.prep\", async () => {\n logger.verbose(\"Starting preparation phase\", {\n operationMode: state.operationMode,\n hasContent: !!state.inputContent,\n targetIntentIds: state.targetIntentIds,\n networkId: state.networkId,\n });\n\n // Gate: write operations require an existing profile\n if (state.operationMode !== 'read') {\n const profile = await this.database.getProfile(state.userId);\n if (!profile) {\n const msg = \"You need to create a profile before creating intents. Please set up your profile first.\";\n logger.error(\"Prep failed: no profile for user\", { userId: state.userId });\n return { error: msg };\n }\n }\n\n const activeIntents = await this.database.getActiveIntents(state.userId);\n const formattedActiveIntents = activeIntents\n .map(i => `ID: ${i.id}, Description: ${i.payload}, Summary: ${i.summary || 'N/A'}`)\n .join('\\n') || \"No active intents.\";\n\n logger.verbose(\"Fetched active intents\", {\n count: activeIntents.length,\n operationMode: state.operationMode\n });\n\n return {\n activeIntents: formattedActiveIntents,\n trace: [{\n node: \"prep\",\n detail: `Fetched ${activeIntents.length} active intent(s)`,\n }],\n };\n });\n };\n\n /**\n * Node 1: Inference\n * Extracts intents from raw content.\n * Phase 4: Uses operation mode to control behavior and determine if node should execute.\n * Phase 5: Passes conversation context for anaphoric resolution.\n */\n const inferenceNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.inference\", async () => {\n logger.verbose(\"Starting inference\", {\n operationMode: state.operationMode,\n hasContent: !!state.inputContent,\n contentPreview: state.inputContent?.substring(0, 50),\n hasConversationContext: !!state.conversationContext,\n conversationMessagesCount: state.conversationContext?.length || 0\n });\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n // Phase 4: Control profile fallback based on operation mode\n // Only allow for create operations without explicit content\n const allowProfileFallback = state.operationMode === 'create' && !state.inputContent;\n\n // Cast operationMode: 'read' and 'propose' map to 'create' for the inferrer\n // (inference node is never called in read mode; propose behaves like create for inference)\n const inferrerMode = (state.operationMode === 'read' || state.operationMode === 'propose') ? 'create' : state.operationMode;\n const _traceEmitterInferrer = requestContext.getStore()?.traceEmitter;\n const inferrerStart = Date.now();\n _traceEmitterInferrer?.({ type: \"agent_start\", name: \"intent-inferrer\" });\n const result = await inferrer.invoke(\n state.inputContent || null,\n state.userProfile,\n {\n allowProfileFallback,\n operationMode: inferrerMode,\n conversationContext: state.conversationContext // Phase 5: Pass conversation history\n }\n );\n agentTimingsAccum.push({ name: 'intent.inferrer', durationMs: Date.now() - inferrerStart });\n _traceEmitterInferrer?.({ type: \"agent_end\", name: \"intent-inferrer\", durationMs: Date.now() - inferrerStart, summary: result.intents.length > 0 ? `Extracted ${result.intents.length} intent(s)` : \"intent-inferrer completed\" });\n\n logger.verbose(\"Inference complete\", {\n inferredCount: result.intents.length,\n operationMode: state.operationMode\n });\n\n const descriptions = result.intents.map(i => i.description).slice(0, 3);\n const truncated = result.intents.length > 3 ? `... +${result.intents.length - 3} more` : \"\";\n\n return {\n inferredIntents: result.intents,\n agentTimings: agentTimingsAccum,\n trace: [{\n node: \"inference\",\n detail: result.intents.length === 0\n ? \"No intents extracted\"\n : `Extracted ${result.intents.length}: ${descriptions.map(d => `\"${d.slice(0, 50)}${d.length > 50 ? '...' : ''}\"`).join(\", \")}${truncated}`,\n }],\n };\n });\n };\n\n /**\n * Node 2: Verification (Map-Reduce / Parallel)\n * Verifies each inferred intent in parallel.\n * Phase 4: Can be skipped for delete operations and updates with no new intents.\n */\n const verificationNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.verification\", async () => {\n const intents = state.inferredIntents;\n\n logger.verbose(\"Starting verification\", {\n operationMode: state.operationMode,\n intentCount: intents.length\n });\n\n if (intents.length === 0) {\n logger.verbose(\"No intents to verify\");\n return { verifiedIntents: [], agentTimings: [] };\n }\n\n logger.verbose(`Verifying ${intents.length} intents in parallel...`);\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n // Parallel Execution\n const verificationResults = await Promise.all(\n intents.map(async (intent): Promise<VerifiedIntent | null> => {\n try {\n let description = intent.description;\n const _traceEmitterVerifier = requestContext.getStore()?.traceEmitter;\n const verifierStart1 = Date.now();\n _traceEmitterVerifier?.({ type: \"agent_start\", name: \"intent-verifier\" });\n let verdict = await verifier.invoke(description, state.userProfile);\n agentTimingsAccum.push({ name: 'intent.verifier', durationMs: Date.now() - verifierStart1 });\n _traceEmitterVerifier?.({ type: \"agent_end\", name: \"intent-verifier\", durationMs: Date.now() - verifierStart1, summary: `Verified: ${verdict.classification}` });\n\n if (isVague(description, verdict.semantic_entropy, verdict.felicity_scores.clarity)) {\n const enrichedDescription = enrichVagueIntentWithProfile(description, state.userProfile);\n if (enrichedDescription !== description) {\n logger.verbose(\"Enriched vague intent using profile context\", {\n before: description,\n after: enrichedDescription,\n });\n const _traceEmitterVerifier2 = requestContext.getStore()?.traceEmitter;\n const verifierStart2 = Date.now();\n _traceEmitterVerifier2?.({ type: \"agent_start\", name: \"intent-verifier\" });\n const enrichedVerdict = await verifier.invoke(enrichedDescription, state.userProfile);\n agentTimingsAccum.push({ name: 'intent.verifier', durationMs: Date.now() - verifierStart2 });\n _traceEmitterVerifier2?.({ type: \"agent_end\", name: \"intent-verifier\", durationMs: Date.now() - verifierStart2, summary: `Verified (enriched): ${enrichedVerdict.classification}` });\n const becameClear =\n enrichedVerdict.semantic_entropy < verdict.semantic_entropy ||\n enrichedVerdict.felicity_scores.clarity > verdict.felicity_scores.clarity;\n if (becameClear) {\n description = enrichedDescription;\n verdict = enrichedVerdict;\n }\n }\n }\n\n // Filter Logic: Must be a Commissive, Directive, or Declaration\n const VALID_TYPES = ['COMMISSIVE', 'DIRECTIVE', 'DECLARATION'];\n if (!VALID_TYPES.includes(verdict.classification)) {\n logger.warn(`Dropping intent: \"${description}\" (Type: ${verdict.classification})`);\n return null;\n }\n\n if (isVague(description, verdict.semantic_entropy, verdict.felicity_scores.clarity)) {\n logger.warn(`Dropping vague intent after verification: \"${description}\"`, {\n entropy: verdict.semantic_entropy,\n clarity: verdict.felicity_scores.clarity,\n });\n return null;\n }\n\n if (state.operationMode !== 'propose' && verdict.referential_breadth === 'broad') {\n logger.warn(`Dropping broad attributive intent before persistence: \"${description}\"`, {\n referentialBreadth: verdict.referential_breadth,\n missingSelectionalConstraints: verdict.missing_selectional_constraints,\n warning: getSpecificityWarning(verdict),\n });\n return null;\n }\n\n // Calculate Score\n const score = Math.min(\n verdict.felicity_scores.authority,\n verdict.felicity_scores.sincerity,\n verdict.felicity_scores.clarity\n );\n\n // Return enriched intent\n return {\n ...intent,\n description,\n verification: verdict,\n score\n };\n } catch (e) {\n logger.error(`Error verifying intent: ${intent.description}`, { error: e });\n return null;\n }\n })\n );\n\n // Filter out nulls\n const verified = verificationResults.filter((i): i is VerifiedIntent => i !== null);\n logger.verbose(`Verification complete`, {\n passed: verified.length,\n total: intents.length,\n operationMode: state.operationMode\n });\n\n // Build trace entries with Felicity scores for each verified intent\n const traceEntries = verified.map(v => {\n const fs = v.verification?.felicity_scores;\n const entropy = v.verification?.semantic_entropy;\n const classification = v.verification?.classification;\n const referentialBreadth = v.verification?.referential_breadth;\n return {\n node: \"verification\",\n detail: `\"${v.description.slice(0, 40)}${v.description.length > 40 ? '...' : ''}\" → ${classification}${referentialBreadth ? ` (${referentialBreadth} referential breadth)` : ''}`,\n data: fs ? {\n clarity: fs.clarity,\n authority: fs.authority,\n sincerity: fs.sincerity,\n entropy: entropy != null ? Math.round(entropy * 100) / 100 : undefined,\n referentialBreadth,\n missingSelectionalConstraints: v.verification?.missing_selectional_constraints,\n specificityWarning: v.verification?.specificity_warning ?? undefined,\n classification,\n score: v.score,\n } : undefined,\n };\n });\n\n // Add summary trace if some intents were filtered out\n const dropped = intents.length - verified.length;\n if (dropped > 0) {\n traceEntries.unshift({\n node: \"verification\",\n detail: `Verified ${verified.length}/${intents.length} (${dropped} filtered as invalid)`,\n data: undefined,\n });\n } else if (verified.length > 0) {\n traceEntries.unshift({\n node: \"verification\",\n detail: `Verified ${verified.length} intent(s)`,\n data: undefined,\n });\n }\n\n return { verifiedIntents: verified, agentTimings: agentTimingsAccum, trace: traceEntries };\n });\n };\n\n /**\n * Node 3: Reconciliation\n * Decides on final actions (Create, Update, Expire).\n * Phase 4: Handles delete operations directly without LLM reconciliation.\n */\n const reconciliationNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.reconciliation\", async () => {\n logger.verbose(\"Starting reconciliation\", {\n operationMode: state.operationMode,\n verifiedIntentCount: state.verifiedIntents.length,\n targetIntentIds: state.targetIntentIds\n });\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n // Phase 4: Handle delete operations directly\n if (state.operationMode === 'delete') {\n if (!state.targetIntentIds || state.targetIntentIds.length === 0) {\n logger.warn(\"Delete mode with no target IDs\");\n return {\n actions: [],\n agentTimings: agentTimingsAccum,\n trace: [{ node: \"reconciler\", detail: \"Delete mode with no target IDs\" }],\n };\n }\n\n logger.verbose(\"Delete mode - generating expire actions\", {\n targetIds: state.targetIntentIds\n });\n\n const actions = state.targetIntentIds.map(id => ({\n type: 'expire' as const,\n id,\n reasoning: 'User requested deletion'\n }));\n\n return {\n actions,\n agentTimings: agentTimingsAccum,\n trace: [{\n node: \"reconciler\",\n detail: `Actions: expire=${actions.length}`,\n }],\n };\n }\n\n // Standard reconciliation for create/update operations\n const candidates = state.verifiedIntents;\n if (candidates.length === 0) {\n logger.verbose(\"No verified intents to reconcile\");\n return {\n actions: [],\n agentTimings: agentTimingsAccum,\n trace: [{ node: \"reconciler\", detail: \"No intents to reconcile\" }],\n };\n }\n\n // Format candidates for the Reconciler Prompt\n const formattedCandidates = candidates.map(c =>\n `- [${c.type.toUpperCase()}] \"${c.description}\" (Confidence: ${c.confidence}, Score: ${c.score})\\n` +\n ` Reasoning: ${c.reasoning}\\n` +\n ` Verification: ${c.verification?.classification} (Flags: ${c.verification?.flags.join(', ') || 'None'})`\n ).join('\\n');\n\n logger.verbose(\"Invoking reconciler agent\", {\n candidateCount: candidates.length,\n operationMode: state.operationMode\n });\n\n const _traceEmitterReconciler = requestContext.getStore()?.traceEmitter;\n const reconcilerStart = Date.now();\n _traceEmitterReconciler?.({ type: \"agent_start\", name: \"intent-reconciler\" });\n const result = await reconciler.invoke(formattedCandidates, state.activeIntents);\n agentTimingsAccum.push({ name: 'intent.reconciler', durationMs: Date.now() - reconcilerStart });\n _traceEmitterReconciler?.({ type: \"agent_end\", name: \"intent-reconciler\", durationMs: Date.now() - reconcilerStart, summary: `Reconciled ${result.actions.length} action(s)` });\n\n logger.verbose(\"Reconciliation complete\", {\n actionCount: result.actions.length,\n operationMode: state.operationMode\n });\n\n // Count actions by type\n const counts = { create: 0, update: 0, expire: 0 };\n for (const a of result.actions) {\n if (a.type in counts) counts[a.type as keyof typeof counts]++;\n }\n\n return {\n actions: result.actions,\n agentTimings: agentTimingsAccum,\n trace: [{\n node: \"reconciler\",\n detail: `Actions: create=${counts.create}, update=${counts.update}, expire=${counts.expire}`,\n }],\n };\n });\n };\n\n /** Strip URLs and \"More details at [url]\" from intent payloads before persisting. */\n const sanitizePayload = (payload: string): string => {\n if (!payload || typeof payload !== \"string\") return payload;\n const out = payload\n .replace(/\\s*More details at\\s*:?\\s*https?:\\/\\/[^\\s\"'<>)\\]]+/gi, \"\")\n .replace(/\\s*See\\s+https?:\\/\\/[^\\s\"'<>)\\]]+\\s+for\\s+more[^.]*\\.?/gi, \"\")\n .replace(/https?:\\/\\/[^\\s\"'<>)\\]]+/g, \"\")\n .replace(/\\s{2,}/g, \" \")\n .trim();\n return out.replace(/[.,;]\\s*$/, \"\").trim() || payload;\n };\n\n /**\n * Generate a flat embedding for an intent payload, swallowing failures so\n * persistence can continue without an embedding. `intentId` is logging-only\n * (present for updates, absent for creates).\n */\n const generateIntentEmbedding = async (\n sanitizedPayload: string,\n intentId?: string,\n ): Promise<number[] | undefined> => {\n if (!this.embedder) return undefined;\n try {\n const embedding = await this.embedder.generate(sanitizedPayload, undefined, getAbortSignalConfig());\n const flatEmbedding = Array.isArray(embedding?.[0])\n ? (embedding as number[][])[0]\n : (embedding as number[]);\n logger.verbose(\"Generated embedding for intent\", {\n ...(intentId ? { intentId } : {}),\n dimensions: flatEmbedding?.length,\n });\n return flatEmbedding;\n } catch (embErr) {\n logger.error(\"Failed to generate embedding for intent (continuing without)\", {\n ...(intentId ? { intentId } : {}),\n error: embErr,\n });\n return undefined;\n }\n };\n\n /**\n * Node 4: Executor\n * Executes reconciler actions against the database.\n */\n const executorNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.executor\", async () => {\n const actions = state.actions;\n if (!actions || actions.length === 0) {\n return { executionResults: [] };\n }\n\n logger.verbose(`Executing ${actions.length} actions...`);\n const results: ExecutionResult[] = [];\n const verifiedIntentByPayload = new Map<string, VerifiedIntent>();\n for (const verifiedIntent of state.verifiedIntents) {\n verifiedIntentByPayload.set(verifiedIntent.description, verifiedIntent);\n verifiedIntentByPayload.set(sanitizePayload(verifiedIntent.description), verifiedIntent);\n }\n\n for (const action of actions) {\n const actionType = action.type.toLowerCase() as 'create' | 'update' | 'expire';\n try {\n if (actionType === 'create') {\n const createAction = action as {\n payload: string;\n score: number | null;\n semanticEntropy?: number | null;\n referentialAnchor?: string | null;\n intentMode?: 'REFERENTIAL' | 'ATTRIBUTIVE' | null;\n };\n const sanitizedPayload = sanitizePayload(createAction.payload);\n const matchedVerifiedIntent =\n verifiedIntentByPayload.get(createAction.payload) ||\n verifiedIntentByPayload.get(sanitizedPayload);\n\n // Generate embedding for the intent payload\n const flatEmbedding = await generateIntentEmbedding(sanitizedPayload);\n\n const created = await this.database.createIntent({\n userId: state.userId,\n payload: sanitizedPayload,\n confidence: createAction.score ? createAction.score / 100 : 1.0,\n inferenceType: 'explicit',\n sourceType: 'discovery_form',\n embedding: flatEmbedding,\n semanticEntropy:\n createAction.semanticEntropy ??\n matchedVerifiedIntent?.verification?.semantic_entropy ??\n null,\n referentialAnchor:\n createAction.referentialAnchor ??\n matchedVerifiedIntent?.verification?.referential_anchor ??\n null,\n felicityAuthority: matchedVerifiedIntent?.verification?.felicity_scores.authority ?? null,\n felicitySincerity: matchedVerifiedIntent?.verification?.felicity_scores.sincerity ?? null,\n felicityClarity: matchedVerifiedIntent?.verification?.felicity_scores.clarity ?? null,\n intentMode: createAction.intentMode ?? null,\n speechActType: toSpeechActType(matchedVerifiedIntent?.verification?.classification),\n });\n\n results.push({ actionType: 'create', success: true, intentId: created.id, payload: sanitizedPayload });\n logger.verbose(`Created intent: ${created.id}`);\n\n this.intentQueue?.addGenerateHydeJob({\n intentId: created.id,\n userId: state.userId,\n ...(state.networkId ? { networkScopeId: state.networkId } : {}),\n }).catch((err) =>\n logger.error('Failed to enqueue intent HyDE job', { intentId: created.id, error: err })\n );\n\n if (this.questionerEnqueue) {\n const parsed = parseProfile(state.userProfile);\n this.questionerEnqueue({\n mode: 'intent',\n userId: state.userId,\n sourceType: 'intent',\n sourceId: created.id,\n context: {\n intentId: created.id,\n payload: sanitizedPayload,\n userProfile: {\n name: parsed?.identity?.name,\n bio: parsed?.identity?.bio,\n skills: parsed?.attributes?.skills,\n interests: parsed?.attributes?.interests,\n },\n },\n }).catch((err) =>\n logger.error('Failed to enqueue intent question generation', { intentId: created.id, error: err })\n );\n }\n\n } else if (actionType === 'update') {\n const updateAction = action as {\n id: string;\n payload: string;\n intentMode?: 'REFERENTIAL' | 'ATTRIBUTIVE' | null;\n };\n const sanitizedPayload = sanitizePayload(updateAction.payload);\n const matchedVerifiedIntent =\n verifiedIntentByPayload.get(updateAction.payload) ||\n verifiedIntentByPayload.get(sanitizedPayload);\n\n // Regenerate embedding for the updated payload\n const flatEmbedding = await generateIntentEmbedding(sanitizedPayload, updateAction.id);\n\n const updated = await this.database.updateIntent(updateAction.id, {\n payload: sanitizedPayload,\n embedding: flatEmbedding,\n semanticEntropy:\n matchedVerifiedIntent?.verification?.semantic_entropy ??\n null,\n referentialAnchor:\n matchedVerifiedIntent?.verification?.referential_anchor ??\n null,\n felicityAuthority: matchedVerifiedIntent?.verification?.felicity_scores.authority ?? null,\n felicitySincerity: matchedVerifiedIntent?.verification?.felicity_scores.sincerity ?? null,\n felicityClarity: matchedVerifiedIntent?.verification?.felicity_scores.clarity ?? null,\n intentMode: updateAction.intentMode ?? null,\n speechActType: toSpeechActType(matchedVerifiedIntent?.verification?.classification),\n });\n results.push({\n actionType: 'update',\n success: !!updated,\n intentId: updateAction.id,\n payload: sanitizedPayload,\n error: updated ? undefined : 'Intent not found'\n });\n logger.verbose(`Updated intent: ${updateAction.id}`);\n if (updated) {\n this.intentQueue?.addGenerateHydeJob({\n intentId: updateAction.id,\n userId: state.userId,\n ...(state.networkId ? { networkScopeId: state.networkId } : {}),\n }).catch((err) =>\n logger.error('Failed to enqueue intent HyDE job', { intentId: updateAction.id, error: err })\n );\n }\n\n } else if (actionType === 'expire') {\n const expireAction = action as { id: string };\n const result = await this.database.archiveIntent(expireAction.id);\n results.push({\n actionType: 'expire',\n success: result.success,\n intentId: expireAction.id,\n error: result.error\n });\n logger.verbose(`Archived intent: ${expireAction.id}`);\n if (result.success) {\n this.intentQueue?.addDeleteHydeJob({ intentId: expireAction.id }).catch((err) =>\n logger.error('Failed to enqueue intent HyDE delete job', { intentId: expireAction.id, error: err })\n );\n }\n }\n } catch (error) {\n logger.error(`Failed to execute ${action.type}:`, { error });\n results.push({\n actionType,\n success: false,\n intentId: 'id' in action ? action.id : undefined,\n error: error instanceof Error ? error.message : 'Unknown error'\n });\n }\n }\n\n return { executionResults: results };\n });\n };\n\n // --- QUERY NODE (Read Mode) ---\n\n /**\n * Node: Query\n * Fast-path read node — fetches intents from DB based on scope.\n * Handles: global user intents, index-scoped (all or filtered by user).\n * No LLM calls; no inference/verification/reconciliation.\n */\n const queryNode = async (state: typeof IntentGraphState.State) => {\n return timed(\"IntentGraph.query\", async () => {\n logger.verbose(\"Starting query (read mode)\", {\n userId: state.userId,\n networkId: state.networkId,\n queryUserId: state.queryUserId,\n allUserIntents: state.allUserIntents,\n });\n\n try {\n // Scope-aware default: caller's intents across all reachable indexes.\n // Triggered when the tool layer passed indexScope and did not pick a\n // specific networkId or queryUserId — i.e. \"my intents\" in a chat\n // where the agent's reach is more than one index.\n if (\n !state.queryUserId &&\n !state.networkId &&\n state.indexScope &&\n state.indexScope.length > 0\n ) {\n const intents = await this.database.getActiveIntentsAcrossIndexes(\n state.userId,\n state.indexScope,\n );\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"You don't have any active intents yet. Share what you're looking for.\",\n },\n };\n }\n return {\n readResult: {\n count: intents.length,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n })),\n },\n };\n }\n\n // When allUserIntents is true, ignore index scope and return all\n const effectiveIndexId = state.allUserIntents ? undefined : state.networkId;\n\n if (effectiveIndexId) {\n // Verify membership\n const isMember = await this.database.isNetworkMember(effectiveIndexId, state.userId);\n if (!isMember) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"Index not found or you are not a member.\",\n },\n };\n }\n\n // Index-scoped read\n if (!state.queryUserId) {\n // All intents in the index (any member can see)\n const intents = await this.database.getNetworkIntentsForMember(\n effectiveIndexId,\n state.userId,\n { limit: 50, offset: 0 }\n );\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"No intents in this index yet.\",\n networkId: effectiveIndexId,\n },\n };\n }\n return {\n readResult: {\n count: intents.length,\n networkId: effectiveIndexId,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n userId: i.userId,\n userName: i.userName,\n })),\n },\n };\n }\n\n // Specific user's intents in the index\n const effectiveUserId = state.queryUserId;\n const intents = await this.database.getIntentsInIndexForMember(\n effectiveUserId,\n effectiveIndexId\n );\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message:\n effectiveUserId === state.userId\n ? \"You don't have any intents in this index yet.\"\n : \"No intents for that user in this index.\",\n networkId: effectiveIndexId,\n },\n };\n }\n const user = await this.database.getUser(effectiveUserId);\n const userName = user?.name ?? null;\n return {\n readResult: {\n count: intents.length,\n networkId: effectiveIndexId,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n userId: effectiveUserId,\n userName,\n })),\n },\n };\n }\n\n // Global (no index scope): return user's own active intents\n const intents = await this.database.getActiveIntents(state.userId);\n if (intents.length === 0) {\n return {\n readResult: {\n count: 0,\n intents: [],\n message:\n \"You don't have any active intents yet. Share what you're looking for.\",\n },\n };\n }\n return {\n readResult: {\n count: intents.length,\n intents: intents.map((i) => ({\n id: i.id,\n description: i.payload,\n summary: i.summary,\n createdAt: i.createdAt,\n })),\n },\n };\n } catch (err) {\n logger.error(\"Query node failed\", { error: err });\n return {\n readResult: {\n count: 0,\n intents: [],\n message: \"Failed to fetch intents. Please try again.\",\n },\n };\n }\n });\n };\n\n // --- CONDITIONAL ROUTING FUNCTIONS ---\n\n /**\n * After prep: read mode → query; otherwise decide inference vs reconciler by operation mode.\n */\n const afterPrepRoute = (state: typeof IntentGraphState.State): string => {\n if (state.error) {\n logger.warn('Prep failed with error, short-circuiting to END', { error: state.error });\n return '__end__';\n }\n if (state.operationMode === 'read') {\n logger.verbose('Read mode - routing to query (fast path)');\n return 'query';\n }\n return shouldRunInference(state);\n };\n \n /**\n * Determines if inference should run based on operation mode.\n * Delete operations skip inference entirely and go straight to reconciliation.\n */\n const shouldRunInference = (state: typeof IntentGraphState.State): string => {\n if (state.operationMode === 'delete') {\n logger.verbose('Delete mode - skipping inference, routing to reconciliation');\n return 'reconciler';\n }\n \n logger.verbose('Running inference', {\n operationMode: state.operationMode\n });\n return 'inference';\n };\n \n /**\n * Determines if verification should run based on operation mode and inferred intents.\n * Skips verification for:\n * - Operations with no inferred intents\n * - Can be extended to skip for update operations with no new intents\n */\n const shouldRunVerification = (state: typeof IntentGraphState.State): string => {\n if (state.inferredIntents.length === 0) {\n if (state.operationMode === 'propose') {\n logger.verbose('Propose mode with no inferred intents - exiting early');\n return '__end__';\n }\n logger.verbose('No intents to verify - skipping verification, routing to reconciliation');\n return 'reconciler';\n }\n \n if (state.operationMode === 'update') {\n logger.verbose('Update mode with new intents - running verification');\n return 'verification';\n }\n \n if (state.operationMode === 'create') {\n logger.verbose('Create mode - running verification');\n return 'verification';\n }\n \n // Default to verification for safety\n logger.verbose('Default routing to verification');\n return 'verification';\n };\n\n // --- GRAPH ASSEMBLY WITH CONDITIONAL EDGES (PHASE 4) ---\n\n const workflow = new StateGraph(IntentGraphState)\n .addNode(\"prep\", prepNode)\n .addNode(\"query\", queryNode)\n .addNode(\"inference\", inferenceNode)\n .addNode(\"verification\", verificationNode)\n .addNode(\"reconciler\", reconciliationNode)\n .addNode(\"executor\", executorNode)\n\n // Flow paths:\n // - READ: prep → query → END (fast path, no LLM calls)\n // - CREATE: prep → inference → verification → reconciler → executor → END\n // - UPDATE: prep → inference → reconciliation → executor → END (skips verification if no new intents)\n // - DELETE: prep → reconciliation → executor → END (skips inference and verification)\n // - PROPOSE: prep → inference → verification → END (no reconciliation/execution, no DB writes)\n .addEdge(START, \"prep\")\n \n // After prep: read mode → query; else inference or reconciler\n .addConditionalEdges(\"prep\", afterPrepRoute, {\n query: \"query\",\n inference: \"inference\",\n reconciler: \"reconciler\",\n __end__: END,\n })\n\n // Query (read mode) always ends\n .addEdge(\"query\", END)\n \n // After inference: decide if we need verification (skip if no intents)\n .addConditionalEdges(\"inference\", shouldRunVerification, {\n verification: \"verification\",\n reconciler: \"reconciler\",\n __end__: END,\n })\n \n // After verification: propose mode exits early; others continue to reconciliation\n .addConditionalEdges(\"verification\", (state: typeof IntentGraphState.State) => {\n if (state.operationMode === 'propose') {\n logger.verbose('Propose mode - stopping after verification, skipping reconciliation');\n return '__end__';\n }\n return 'reconciler';\n }, {\n reconciler: \"reconciler\",\n __end__: END,\n })\n \n // Reconciliation always goes to executor\n .addEdge(\"reconciler\", \"executor\")\n \n // Executor is always the end\n .addEdge(\"executor\", END);\n\n return workflow.compile();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.tools.d.ts","sourceRoot":"/","sources":["intent/intent.tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AA4D5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"intent.tools.d.ts","sourceRoot":"/","sources":["intent/intent.tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AA4D5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,qDA6qBvE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { DEFAULT_SPECIFICITY_WARNING } from "./intent.specificity.js";
|
|
3
3
|
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
4
|
-
import {
|
|
4
|
+
import { traceGraph } from "../shared/observability/trace.js";
|
|
5
5
|
import { success, error, UUID_REGEX } from "../shared/agent/tool.helpers.js";
|
|
6
6
|
import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
|
|
7
7
|
const logger = protocolLogger("ChatTools:Intent");
|
|
@@ -146,11 +146,8 @@ export function createIntentTools(defineTool, deps) {
|
|
|
146
146
|
graphInput.allUserIntents = true;
|
|
147
147
|
}
|
|
148
148
|
const _readIntentGraphStart = Date.now();
|
|
149
|
-
const
|
|
150
|
-
_readIntentTraceEmitter?.({ type: "graph_start", name: "intent" });
|
|
151
|
-
const result = await invokeWithAbortSignal(graphs.intent, graphInput);
|
|
149
|
+
const result = await traceGraph("intent", () => invokeWithAbortSignal(graphs.intent, graphInput));
|
|
152
150
|
const _readIntentGraphMs = Date.now() - _readIntentGraphStart;
|
|
153
|
-
_readIntentTraceEmitter?.({ type: "graph_end", name: "intent", durationMs: _readIntentGraphMs });
|
|
154
151
|
if (result.readResult) {
|
|
155
152
|
if (result.readResult.count === 0 && result.readResult.message && /not a member|Network not found/i.test(result.readResult.message)) {
|
|
156
153
|
return error(result.readResult.message);
|
|
@@ -219,27 +216,21 @@ export function createIntentTools(defineTool, deps) {
|
|
|
219
216
|
const effectiveIndexId = context.networkId || query.networkId?.trim() || undefined;
|
|
220
217
|
// Fetch profile (the intent graph needs it for inference)
|
|
221
218
|
const _profileGraphStart1 = Date.now();
|
|
222
|
-
const
|
|
223
|
-
_createIntentProfileTraceEmitter?.({ type: "graph_start", name: "profile" });
|
|
224
|
-
const profileResult = await invokeWithAbortSignal(graphs.profile, { userId: context.userId, operationMode: 'query' });
|
|
219
|
+
const profileResult = await traceGraph("profile", () => invokeWithAbortSignal(graphs.profile, { userId: context.userId, operationMode: 'query' }));
|
|
225
220
|
const _profileGraphMs1 = Date.now() - _profileGraphStart1;
|
|
226
|
-
_createIntentProfileTraceEmitter?.({ type: "graph_end", name: "profile", durationMs: _profileGraphMs1 });
|
|
227
221
|
const latestUser = profileResult.profile ? undefined : typeof userDb.getUser === "function" ? await userDb.getUser() : context.user;
|
|
228
222
|
const approvedProfileFallback = profileResult.profile ? "" : buildApprovedProfileFallback(latestUser);
|
|
229
223
|
const userProfile = profileResult.profile ? JSON.stringify(profileResult.profile) : approvedProfileFallback;
|
|
230
224
|
// Run inference + verification only (propose mode — no DB persistence)
|
|
231
225
|
const _intentGraphStart1 = Date.now();
|
|
232
|
-
const
|
|
233
|
-
_createIntentTraceEmitter?.({ type: "graph_start", name: "intent" });
|
|
234
|
-
const result = await invokeWithAbortSignal(graphs.intent, {
|
|
226
|
+
const result = await traceGraph("intent", () => invokeWithAbortSignal(graphs.intent, {
|
|
235
227
|
userId: context.userId,
|
|
236
228
|
userProfile,
|
|
237
229
|
inputContent: query.description,
|
|
238
230
|
operationMode: 'propose',
|
|
239
231
|
...(effectiveIndexId ? { networkId: effectiveIndexId } : {}),
|
|
240
|
-
});
|
|
232
|
+
}));
|
|
241
233
|
const _intentGraphMs1 = Date.now() - _intentGraphStart1;
|
|
242
|
-
_createIntentTraceEmitter?.({ type: "graph_end", name: "intent", durationMs: _intentGraphMs1 });
|
|
243
234
|
logger.debug("Intent graph propose response", { result });
|
|
244
235
|
const verified = result.verifiedIntents || [];
|
|
245
236
|
// MCP contexts have no interactive UI for proposal cards — default to auto-approve
|
|
@@ -286,17 +277,14 @@ export function createIntentTools(defineTool, deps) {
|
|
|
286
277
|
const createTimings = [];
|
|
287
278
|
for (const v of verified) {
|
|
288
279
|
const _createGraphStart = Date.now();
|
|
289
|
-
const
|
|
290
|
-
_createTraceEmitter?.({ type: "graph_start", name: "intent" });
|
|
291
|
-
const createResult = await invokeWithAbortSignal(graphs.intent, {
|
|
280
|
+
const createResult = await traceGraph("intent", () => invokeWithAbortSignal(graphs.intent, {
|
|
292
281
|
userId: context.userId,
|
|
293
282
|
userProfile,
|
|
294
283
|
inputContent: v.description,
|
|
295
284
|
operationMode: 'create',
|
|
296
285
|
...(effectiveIndexId ? { networkId: effectiveIndexId } : {}),
|
|
297
|
-
});
|
|
286
|
+
}));
|
|
298
287
|
const _createGraphMs = Date.now() - _createGraphStart;
|
|
299
|
-
_createTraceEmitter?.({ type: "graph_end", name: "intent", durationMs: _createGraphMs });
|
|
300
288
|
createTimings.push({ name: 'intent-create', durationMs: _createGraphMs, agents: createResult.agentTimings ?? [] });
|
|
301
289
|
const succeeded = createResult.executionResults?.some((r) => r.success);
|
|
302
290
|
if (succeeded) {
|
|
@@ -391,27 +379,21 @@ export function createIntentTools(defineTool, deps) {
|
|
|
391
379
|
}
|
|
392
380
|
}
|
|
393
381
|
const _profileGraphStart2 = Date.now();
|
|
394
|
-
const
|
|
395
|
-
_updateIntentProfileTraceEmitter?.({ type: "graph_start", name: "profile" });
|
|
396
|
-
const profileResult = await invokeWithAbortSignal(graphs.profile, { userId: context.userId, operationMode: 'query' });
|
|
382
|
+
const profileResult = await traceGraph("profile", () => invokeWithAbortSignal(graphs.profile, { userId: context.userId, operationMode: 'query' }));
|
|
397
383
|
const _profileGraphMs2 = Date.now() - _profileGraphStart2;
|
|
398
|
-
_updateIntentProfileTraceEmitter?.({ type: "graph_end", name: "profile", durationMs: _profileGraphMs2 });
|
|
399
384
|
const latestUser = profileResult.profile ? undefined : typeof userDb.getUser === "function" ? await userDb.getUser() : context.user;
|
|
400
385
|
const approvedProfileFallback = profileResult.profile ? "" : buildApprovedProfileFallback(latestUser);
|
|
401
386
|
const userProfile = profileResult.profile ? JSON.stringify(profileResult.profile) : approvedProfileFallback;
|
|
402
387
|
const _intentGraphStart2 = Date.now();
|
|
403
|
-
const
|
|
404
|
-
_updateIntentTraceEmitter?.({ type: "graph_start", name: "intent" });
|
|
405
|
-
const result = await invokeWithAbortSignal(graphs.intent, {
|
|
388
|
+
const result = await traceGraph("intent", () => invokeWithAbortSignal(graphs.intent, {
|
|
406
389
|
userId: context.userId,
|
|
407
390
|
userProfile,
|
|
408
391
|
operationMode: 'update',
|
|
409
392
|
inputContent: query.description,
|
|
410
393
|
targetIntentIds: [intentId],
|
|
411
394
|
...(context.networkId && { networkId: context.networkId }),
|
|
412
|
-
});
|
|
395
|
+
}));
|
|
413
396
|
const _intentGraphMs2 = Date.now() - _intentGraphStart2;
|
|
414
|
-
_updateIntentTraceEmitter?.({ type: "graph_end", name: "intent", durationMs: _intentGraphMs2 });
|
|
415
397
|
if (result.executionResults?.some((r) => !r.success)) {
|
|
416
398
|
return error("Failed to update intent.");
|
|
417
399
|
}
|
|
@@ -461,17 +443,14 @@ export function createIntentTools(defineTool, deps) {
|
|
|
461
443
|
}
|
|
462
444
|
}
|
|
463
445
|
const _deleteIntentGraphStart = Date.now();
|
|
464
|
-
const
|
|
465
|
-
_deleteIntentTraceEmitter?.({ type: "graph_start", name: "intent" });
|
|
466
|
-
const result = await invokeWithAbortSignal(graphs.intent, {
|
|
446
|
+
const result = await traceGraph("intent", () => invokeWithAbortSignal(graphs.intent, {
|
|
467
447
|
userId: context.userId,
|
|
468
448
|
userProfile: "",
|
|
469
449
|
operationMode: 'delete',
|
|
470
450
|
targetIntentIds: [intentId],
|
|
471
451
|
...(context.networkId && { networkId: context.networkId }),
|
|
472
|
-
});
|
|
452
|
+
}));
|
|
473
453
|
const _deleteIntentGraphMs = Date.now() - _deleteIntentGraphStart;
|
|
474
|
-
_deleteIntentTraceEmitter?.({ type: "graph_end", name: "intent", durationMs: _deleteIntentGraphMs });
|
|
475
454
|
if (result.executionResults?.some((r) => !r.success)) {
|
|
476
455
|
return error("Failed to delete intent.");
|
|
477
456
|
}
|
|
@@ -509,17 +488,14 @@ export function createIntentTools(defineTool, deps) {
|
|
|
509
488
|
return error(`This chat is scoped to ${context.indexName ?? 'this index'}. You can only link intents to this community.`);
|
|
510
489
|
}
|
|
511
490
|
const _createIntentIndexGraphStart = Date.now();
|
|
512
|
-
const
|
|
513
|
-
_createIntentIndexTraceEmitter?.({ type: "graph_start", name: "intent_network" });
|
|
514
|
-
const result = await invokeWithAbortSignal(graphs.intentIndex, {
|
|
491
|
+
const result = await traceGraph("intent_network", () => invokeWithAbortSignal(graphs.intentIndex, {
|
|
515
492
|
userId: context.userId,
|
|
516
493
|
networkId,
|
|
517
494
|
intentId,
|
|
518
495
|
operationMode: 'create',
|
|
519
496
|
skipEvaluation: true,
|
|
520
|
-
});
|
|
497
|
+
}));
|
|
521
498
|
const _createIntentIndexGraphMs = Date.now() - _createIntentIndexGraphStart;
|
|
522
|
-
_createIntentIndexTraceEmitter?.({ type: "graph_end", name: "intent_network", durationMs: _createIntentIndexGraphMs });
|
|
523
499
|
if (result.mutationResult) {
|
|
524
500
|
if (result.mutationResult.success) {
|
|
525
501
|
const alreadyExisted = result.mutationResult.message?.includes('already in this network') ?? false;
|
|
@@ -582,17 +558,14 @@ export function createIntentTools(defineTool, deps) {
|
|
|
582
558
|
}
|
|
583
559
|
}
|
|
584
560
|
const _readIntentIndexGraphStart = Date.now();
|
|
585
|
-
const
|
|
586
|
-
_readIntentIndexTraceEmitter?.({ type: "graph_start", name: "intent_network" });
|
|
587
|
-
const result = await invokeWithAbortSignal(graphs.intentIndex, {
|
|
561
|
+
const result = await traceGraph("intent_network", () => invokeWithAbortSignal(graphs.intentIndex, {
|
|
588
562
|
userId: context.userId,
|
|
589
563
|
networkId,
|
|
590
564
|
intentId,
|
|
591
565
|
operationMode: 'read',
|
|
592
566
|
queryUserId,
|
|
593
|
-
});
|
|
567
|
+
}));
|
|
594
568
|
const _readIntentIndexGraphMs = Date.now() - _readIntentIndexGraphStart;
|
|
595
|
-
_readIntentIndexTraceEmitter?.({ type: "graph_end", name: "intent_network", durationMs: _readIntentIndexGraphMs });
|
|
596
569
|
if (result.error) {
|
|
597
570
|
return error(result.error);
|
|
598
571
|
}
|
|
@@ -627,16 +600,13 @@ export function createIntentTools(defineTool, deps) {
|
|
|
627
600
|
return error(`This chat is scoped to ${context.indexName ?? 'this index'}. You can only unlink intents from this community.`);
|
|
628
601
|
}
|
|
629
602
|
const _deleteIntentIndexGraphStart = Date.now();
|
|
630
|
-
const
|
|
631
|
-
_deleteIntentIndexTraceEmitter?.({ type: "graph_start", name: "intent_network" });
|
|
632
|
-
const result = await invokeWithAbortSignal(graphs.intentIndex, {
|
|
603
|
+
const result = await traceGraph("intent_network", () => invokeWithAbortSignal(graphs.intentIndex, {
|
|
633
604
|
userId: context.userId,
|
|
634
605
|
networkId,
|
|
635
606
|
intentId,
|
|
636
607
|
operationMode: 'delete',
|
|
637
|
-
});
|
|
608
|
+
}));
|
|
638
609
|
const _deleteIntentIndexGraphMs = Date.now() - _deleteIntentIndexGraphStart;
|
|
639
|
-
_deleteIntentIndexTraceEmitter?.({ type: "graph_end", name: "intent_network", durationMs: _deleteIntentIndexGraphMs });
|
|
640
610
|
if (result.mutationResult) {
|
|
641
611
|
if (result.mutationResult.success) {
|
|
642
612
|
return success({
|