@indexnetwork/protocol 3.9.0-rc.284.1 → 3.10.0-rc.285.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/intent/intent.graph.d.ts.map +1 -1
- package/dist/intent/intent.graph.js +16 -51
- package/dist/intent/intent.graph.js.map +1 -1
- package/dist/negotiation/negotiation.graph.d.ts.map +1 -1
- package/dist/negotiation/negotiation.graph.js +2 -1
- package/dist/negotiation/negotiation.graph.js.map +1 -1
- package/dist/network/network.recommender.d.ts +2 -7
- package/dist/network/network.recommender.d.ts.map +1 -1
- package/dist/network/network.recommender.js +3 -8
- package/dist/network/network.recommender.js.map +1 -1
- package/dist/network/network.tools.d.ts.map +1 -1
- package/dist/network/network.tools.js +7 -9
- package/dist/network/network.tools.js.map +1 -1
- package/dist/opportunity/discovery-question.helper.d.ts +2 -2
- package/dist/opportunity/discovery-question.helper.d.ts.map +1 -1
- package/dist/opportunity/discovery-question.helper.js +1 -17
- package/dist/opportunity/discovery-question.helper.js.map +1 -1
- package/dist/opportunity/opportunity.discover.d.ts.map +1 -1
- package/dist/opportunity/opportunity.discover.js +5 -2
- package/dist/opportunity/opportunity.discover.js.map +1 -1
- package/dist/opportunity/question.prompt.d.ts +7 -2
- package/dist/opportunity/question.prompt.d.ts.map +1 -1
- package/dist/opportunity/question.prompt.js +1 -15
- package/dist/opportunity/question.prompt.js.map +1 -1
- package/dist/profile/profile.graph.d.ts.map +1 -1
- package/dist/profile/profile.graph.js +2 -7
- package/dist/profile/profile.graph.js.map +1 -1
- package/dist/questioner/questioner.presets.d.ts.map +1 -1
- package/dist/questioner/questioner.presets.js +10 -21
- package/dist/questioner/questioner.presets.js.map +1 -1
- package/dist/questioner/questioner.types.d.ts +6 -19
- package/dist/questioner/questioner.types.d.ts.map +1 -1
- package/dist/questioner/questioner.types.js.map +1 -1
- package/dist/shared/agent/tool.helpers.d.ts +7 -6
- package/dist/shared/agent/tool.helpers.d.ts.map +1 -1
- package/dist/shared/agent/tool.helpers.js.map +1 -1
- package/dist/shared/interfaces/database.interface.d.ts +3 -3
- package/dist/shared/interfaces/database.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/database.interface.js.map +1 -1
- package/dist/shared/schemas/discovery-question.schema.d.ts +2 -1
- package/dist/shared/schemas/discovery-question.schema.d.ts.map +1 -1
- package/dist/shared/schemas/discovery-question.schema.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.tools.js","sourceRoot":"/","sources":["network/network.tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport { requestContext } from \"../shared/observability/request-context.js\";\nimport { renderNetworkContext } from '../shared/network/metadata.renderer.js';\n\nimport type { DefineTool, ToolDeps } from \"../shared/agent/tool.helpers.js\";\nimport { success, error, UUID_REGEX } from \"../shared/agent/tool.helpers.js\";\nimport { NetworkRecommender } from \"./network.recommender.js\";\n\n// Lazy singleton — only instantiated on first onboarding ranking call so that\n// importing this module does not require OPENROUTER_API_KEY at load time.\nlet recommender: NetworkRecommender | undefined;\n\nexport function createNetworkTools(defineTool: DefineTool, deps: ToolDeps) {\n const { graphs, userDb, systemDb } = deps;\n\n const enrichWithContext = (networks: Array<Record<string, unknown>>) =>\n networks.map((n) => ({\n ...n,\n renderedContext: renderNetworkContext({\n type: (n.type as string) ?? 'community',\n title: (n.title as string) ?? '',\n prompt: n.prompt as string | undefined,\n metadata: (n.metadata as Record<string, unknown>) ?? {},\n }),\n }));\n\n const readIndexes = defineTool({\n name: \"read_networks\",\n description:\n \"Lists the authenticated user's networks (communities), including ones they own and public communities they can join.\\n\\n\" +\n \"**When to use:** To find network IDs for scoping other operations (read_intents, discover_opportunities, read_network_memberships), \" +\n \"or to show the user which communities they belong to.\\n\\n\" +\n \"**Returns:** Up to three lists — `memberOf` (networks the user joined), `owns` (networks the user created), and `publicNetworks` \" +\n \"(publicly joinable communities the user is not yet a member of). Entries in `memberOf` include `isPersonal` set to `true` for the user's \" +\n \"personal network.\\n\\n\" +\n \"**Note:** In index-scoped chats, only the scoped network is returned. During onboarding, `orderedNetworkIds` \" +\n \"may be returned alongside `publicNetworks` \\u2014 a ranked array of network IDs ordered by relevance to the user's profile (omitted when ranking is unavailable or fails).\",\n querySchema: z.object({\n userId: z.string().optional().describe(\"Must be the current user's ID or omitted. Cannot list another user's indexes.\"),\n }),\n handler: async ({ context, query }) => {\n if (query.userId && query.userId.trim() !== context.userId) {\n return error(\"You can only list your own indexes. Omit userId to see the current user's indexes.\");\n }\n\n const _readIndexGraphStart = Date.now();\n const _readIndexTraceEmitter = requestContext.getStore()?.traceEmitter;\n _readIndexTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n networkId: context.networkId || undefined,\n operationMode: 'read' as const,\n showAll: false, // Never allow bypass - strict scope enforcement\n });\n const _readIndexGraphMs = Date.now() - _readIndexGraphStart;\n _readIndexTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _readIndexGraphMs });\n\n if (result.error) {\n return error(result.error);\n }\n if (result.readResult) {\n const rr = result.readResult as Record<string, unknown>;\n const enriched = {\n ...rr,\n ...(Array.isArray(rr.memberOf) ? { memberOf: enrichWithContext(rr.memberOf as Array<Record<string, unknown>>) } : {}),\n ...(Array.isArray(rr.owns) ? { owns: enrichWithContext(rr.owns as Array<Record<string, unknown>>) } : {}),\n ...(Array.isArray(rr.publicNetworks) ? { publicNetworks: enrichWithContext(rr.publicNetworks as Array<Record<string, unknown>>) } : {}),\n };\n\n // When scoped, add clear metadata so model knows results are limited\n if (context.networkId) {\n return success({\n ...enriched,\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `Results are limited to \"${context.indexName ?? 'this index'}\" because this chat is scoped to that community. The user may belong to other communities not shown here.`,\n },\n _graphTimings: [{ name: 'index', durationMs: _readIndexGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n // Onboarding-only: rank public networks by profile relevance.\n // Guard: only when isOnboarding, userProfile exists, not scoped, and there are public networks to rank.\n let orderedNetworkIds: string[] | undefined;\n if (\n context.isOnboarding &&\n context.userProfile &&\n Array.isArray(enriched.publicNetworks) &&\n (enriched.publicNetworks as Array<Record<string, unknown>>).length > 0\n ) {\n // Cap at 50 to bound LLM context window usage (matches the UI's discoverPublicIndexes(1, 50)).\n const publicNetworksForRanking = (enriched.publicNetworks as Array<Record<string, unknown>>)\n .slice(0, 50)\n .map((n) => ({\n networkId: n.networkId as string,\n renderedContext: (n.renderedContext as string) ?? `## ${n.title as string}`,\n }));\n const rankFn = deps.networkRanker ?? (async (input) => {\n try {\n recommender ??= new NetworkRecommender();\n return await recommender.invoke(input);\n } catch (err) {\n // e.g. missing OPENROUTER_API_KEY — degrade gracefully, omit orderedNetworkIds\n console.warn(\"[read_networks] NetworkRecommender unavailable, skipping ranking:\", err);\n return null;\n }\n });\n const rankingResult = await rankFn({\n userProfile: {\n bio: context.userProfile.identity.bio,\n location: context.userProfile.identity.location || context.user.location || \"\",\n interests: context.userProfile.attributes.interests,\n skills: context.userProfile.attributes.skills,\n },\n networks: publicNetworksForRanking,\n }).catch((err: unknown) => {\n // Catches errors from a custom deps.networkRanker (the default fallback\n // handles its own errors internally). Degrade gracefully: omit orderedNetworkIds.\n console.warn(\"[read_networks] networkRanker threw, skipping ranking:\", err);\n deps.reportToolError?.(err, { operation: \"network-ranking\", toolName: \"read_networks\", userId: context.userId });\n return null;\n });\n if (rankingResult) {\n // Normalize LLM output against the ranked slice (top 50):\n // keep only IDs from the input set, de-dupe preserving order, then\n // append any slice IDs the model omitted. Networks beyond the top-50\n // slice are not in orderedNetworkIds and will sort to the tail in the\n // frontend (consistent with the UI's own 50-item page size).\n const inputIds = publicNetworksForRanking.map((n) => n.networkId);\n const inputIdSet = new Set(inputIds);\n const seen = new Set<string>();\n const normalized: string[] = [];\n for (const id of rankingResult.rankedNetworkIds) {\n if (inputIdSet.has(id) && !seen.has(id)) {\n normalized.push(id);\n seen.add(id);\n }\n }\n for (const id of inputIds) {\n if (!seen.has(id)) normalized.push(id);\n }\n orderedNetworkIds = normalized;\n }\n }\n\n return success({\n ...enriched,\n ...(orderedNetworkIds !== undefined ? { orderedNetworkIds } : {}),\n _graphTimings: [{ name: 'index', durationMs: _readIndexGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(\"Failed to fetch index information.\");\n },\n });\n\n const readIndexMemberships = defineTool({\n name: \"read_network_memberships\",\n description:\n \"Reads index membership information — who is in which community. Essential for understanding the social graph before \" +\n \"creating introductions or exploring intents.\\n\\n\" +\n \"**Usage modes:**\\n\" +\n \"- With `networkId` only: lists ALL members of that index — returns userId, name, avatar, permissions (owner/member), intentCount, and joinedAt. \" +\n \"Use this to see who's in a community before browsing their intents or creating introductions.\\n\" +\n \"- With `userId` only (or omit for self): lists all indexes that user belongs to — returns networkId, networkTitle, permissions, joinedAt.\\n\" +\n \"- With both `networkId` and `userId`: checks whether that specific user is a member of that specific index (returns isMember boolean).\\n\\n\" +\n \"**When to use:** Before creating introductions (need to verify shared index membership), to explore community members, \" +\n \"or to check if a user belongs to a specific index.\\n\\n\" +\n \"**Returns:** Member list with user details, or membership list with index details, or a membership check result.\\n\\n\" +\n \"**Personal index semantics.** The personal index (`isPersonal: true` on the membership) is the user's \" +\n \"contact list — members of that index are the user's contacts. For another user, this tool only reveals the \" +\n \"indexes you already share with them.\\n\\n\" +\n \"**Shared-context pattern.** To find overlap with another user: (1) omit `userId` to read your own \" +\n \"memberships, (2) call this tool with the other person's actual `userId` to get the shared indexes, \" +\n \"(3) call read_intents for each shared network to see what each is looking for there, (4) call \" +\n \"read_user_profiles for the other party. That sequence gives you enough to decide whether to propose a \" +\n \"direct connection or an introduction.\",\n querySchema: z.object({\n networkId: z.string().optional().describe(\"Index UUID — lists all members of this index. Get from read_networks. In index-scoped chats, only the scoped index can be queried.\"),\n userId: z.string().optional().describe(\"User ID — lists that user's index memberships. Omit to get the current user's memberships. When combined with networkId, checks if this user is in that specific index.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || undefined;\n const userId = query.userId?.trim() || undefined;\n\n if (networkId && !UUID_REGEX.test(networkId)) {\n return error(\"Invalid index ID format. Use the exact UUID from read_networks.\");\n }\n\n // Mode 1: list members of an index\n if (networkId && !userId) {\n // Enforce strict scope: when chat is index-scoped, only allow querying that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only query members of this index.`\n );\n }\n\n const _readMembersGraphStart = Date.now();\n const _readMembersTraceEmitter = requestContext.getStore()?.traceEmitter;\n _readMembersTraceEmitter?.({ type: \"graph_start\", name: \"network_membership\" });\n const result = await graphs.networkMembership.invoke({\n userId: context.userId,\n networkId,\n operationMode: 'read' as const,\n });\n const _readMembersGraphMs = Date.now() - _readMembersGraphStart;\n _readMembersTraceEmitter?.({ type: \"graph_end\", name: \"network_membership\", durationMs: _readMembersGraphMs });\n\n if (result.error) {\n return error(result.error);\n }\n if (result.readResult) {\n return success({ ...result.readResult, _graphTimings: [{ name: 'network_membership', durationMs: _readMembersGraphMs, agents: result.agentTimings ?? [] }] });\n }\n return error(\"Failed to fetch index members.\");\n }\n\n // Mode 2: list a user's memberships (indexes they belong to)\n const targetUserId = userId || context.userId;\n\n // Use userDb for own memberships, but systemDb access is implicit through shared index scope\n let memberships: Awaited<ReturnType<typeof userDb.getNetworkMemberships>>;\n if (targetUserId !== context.userId) {\n // Cross-user access: systemDb will validate shared index membership\n const callerMemberships = await userDb.getNetworkMemberships();\n if (networkId) {\n // Strict scope enforcement: when chat is index-scoped, only allow querying that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only query membership in this community.`\n );\n }\n\n const callerInIndex = callerMemberships.some((m) => m.networkId === networkId);\n if (!callerInIndex) {\n return error(\n \"Unauthorized: you can only view another user's membership in an index you belong to. Provide your own userId or omit userId for your memberships.\",\n );\n }\n // Check if target user is in the index (systemDb validates scope)\n const isMember = await systemDb.isNetworkMember(networkId, targetUserId);\n if (isMember) {\n return success({ isMember: true, userId: targetUserId, networkId });\n }\n return success({ isMember: false, userId: targetUserId, networkId, message: \"User is not a member of this index.\" });\n } else {\n // Strict scope enforcement: when chat is index-scoped, only check the scoped index\n if (context.networkId) {\n const isMember = await systemDb.isNetworkMember(context.networkId, targetUserId);\n if (isMember) {\n return success({\n isMember: true,\n userId: targetUserId,\n networkId: context.networkId,\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `This chat is scoped to \"${context.indexName ?? 'this index'}\". Only membership in this community is shown.`,\n },\n });\n }\n return success({\n isMember: false,\n userId: targetUserId,\n networkId: context.networkId,\n message: \"User is not a member of this community.\",\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `This chat is scoped to \"${context.indexName ?? 'this index'}\". Only membership in this community was checked.`,\n },\n });\n }\n\n // Unscoped chat: show overlap with shared indexes (intersection of caller and target memberships)\n const sharedIndexes: typeof callerMemberships = [];\n for (const m of callerMemberships) {\n if (await systemDb.isNetworkMember(m.networkId, targetUserId)) {\n sharedIndexes.push(m);\n }\n }\n if (sharedIndexes.length === 0) {\n return error(\n \"Unauthorized: you can only view another user's memberships if you share at least one index, or request your own memberships.\",\n );\n }\n // Return only the indexes that are shared\n return success({\n userId: targetUserId,\n count: sharedIndexes.length,\n memberships: sharedIndexes.map((m) => ({\n networkId: m.networkId,\n networkTitle: m.networkTitle,\n })),\n note: \"Only showing shared indexes.\",\n });\n }\n } else {\n // Own memberships - use userDb\n memberships = await userDb.getNetworkMemberships();\n\n // NOTE: context.networkId here is the *focus* of the scoped chat — it filters\n // what we show, not what we can reach. indexScope is the reach; the bound\n // network is one element of it. See IND-306 for the equivalent in read_intents.\n // Strict scope enforcement: when chat is index-scoped, only return the scoped index membership\n if (context.networkId && !networkId) {\n memberships = memberships.filter((m) => m.networkId === context.networkId);\n }\n }\n\n // If both networkId and userId: filter to that specific membership\n if (networkId) {\n // Strict scope enforcement: when chat is index-scoped, only allow querying that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only query membership in this community.`\n );\n }\n\n const callerMemberships = await userDb.getNetworkMemberships();\n const callerInIndex =\n targetUserId === context.userId ||\n callerMemberships.some((m) => m.networkId === networkId);\n if (!callerInIndex) {\n return error(\n \"Unauthorized: you can only view membership in an index you belong to.\",\n );\n }\n const match = memberships.find((m) => m.networkId === networkId);\n if (!match) {\n return success({ isMember: false, userId: targetUserId, networkId, message: \"User is not a member of this index.\" });\n }\n return success({\n isMember: true,\n userId: targetUserId,\n networkId,\n networkTitle: match.networkTitle,\n permissions: match.permissions,\n joinedAt: match.joinedAt,\n });\n }\n\n // When scoped, add clear metadata so model knows results are limited\n if (context.networkId && targetUserId === context.userId) {\n return success({\n userId: targetUserId,\n count: memberships.length,\n memberships: memberships.map((m) => ({\n networkId: m.networkId,\n networkTitle: m.networkTitle,\n permissions: m.permissions,\n joinedAt: m.joinedAt,\n })),\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `Results are limited to \"${context.indexName ?? 'this index'}\" because this chat is scoped to that community. The user may belong to other communities not shown here.`,\n },\n });\n }\n\n return success({\n userId: targetUserId,\n count: memberships.length,\n memberships: memberships.map((m) => ({\n networkId: m.networkId,\n networkTitle: m.networkTitle,\n permissions: m.permissions,\n joinedAt: m.joinedAt,\n })),\n });\n },\n });\n\n const updateNetworkSettingsSchema = z.object({\n title: z.string().optional(),\n prompt: z.string().nullable().optional(),\n imageUrl: z.string().url().nullable().optional(),\n joinPolicy: z.enum(['anyone', 'invite_only']).optional(),\n allowGuestVibeCheck: z.boolean().optional(),\n }).strict();\n\n const updateNetwork = defineTool({\n name: \"update_network\",\n description:\n \"Updates settings of an existing index (community). Only the index owner can perform updates.\\n\\n\" +\n \"**Updatable fields:** title (display name), prompt (purpose description used for intent auto-assignment), \" +\n \"imageUrl (community avatar), joinPolicy ('anyone' for open or 'invite_only'), allowGuestVibeCheck (allow non-members to preview).\\n\\n\" +\n \"**When to use:** When an index owner wants to change their community's settings — e.g. update the purpose description, \" +\n \"change from invite-only to open, or update the community image.\\n\\n\" +\n \"**Important:** Changing the prompt affects how future intents are evaluated for auto-assignment to this index. \" +\n \"Existing intent-index links are not re-evaluated automatically.\\n\\n\" +\n \"**Returns:** Confirmation with the list of settings that were updated.\",\n querySchema: z.object({\n networkId: z.string().optional().describe(\"Index UUID to update. Get from read_networks. Defaults to the scoped index in index-scoped chats.\"),\n settings: updateNetworkSettingsSchema.describe(\"Object with fields to update. All fields are optional — only include the ones to change. title: display name. prompt: purpose description (used for intent auto-assignment). imageUrl: community image URL (null to remove). joinPolicy: 'anyone' or 'invite_only'. allowGuestVibeCheck: boolean.\"),\n }),\n handler: async ({ context, query }) => {\n const effectiveIndexId = (query.networkId?.trim() || context.networkId) ?? null;\n if (!effectiveIndexId || !UUID_REGEX.test(effectiveIndexId)) {\n return error(\"Valid networkId required.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow updating that index\n if (context.networkId && effectiveIndexId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only update this community's settings.`\n );\n }\n\n const _updateNetworkGraphStart = Date.now();\n const _updateNetworkTraceEmitter = requestContext.getStore()?.traceEmitter;\n _updateNetworkTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n networkId: effectiveIndexId,\n operationMode: 'update' as const,\n updateInput: query.settings,\n });\n const _updateNetworkGraphMs = Date.now() - _updateNetworkGraphStart;\n _updateNetworkTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _updateNetworkGraphMs });\n\n if (result.mutationResult && !result.mutationResult.success) {\n return error(result.mutationResult.error || \"Failed to update index.\");\n }\n return success({ message: \"Index updated.\", settings: Object.keys(query.settings), _graphTimings: [{ name: 'index', durationMs: _updateNetworkGraphMs, agents: result.agentTimings ?? [] }] });\n },\n });\n\n const createNetwork = defineTool({\n name: \"create_network\",\n description:\n \"Creates a new index (community/group). The authenticated user becomes the owner with full control over settings and membership.\\n\\n\" +\n \"**What is an index?** A shared space where members post intents (what they're looking for) and the system discovers opportunities \" +\n \"(complementary matches) between members. The index's prompt guides what kinds of intents belong.\\n\\n\" +\n \"**When to use:** When the user wants to create a new community — e.g. a professional network, interest group, or project team.\\n\\n\" +\n \"**Returns:** The new index's networkId (UUID) and title. Use the networkId to add members (create_network_membership), \" +\n \"link intents (create_intent_index), or run discovery (discover_opportunities with networkId).\",\n querySchema: z.object({\n title: z.string().describe(\"Display name of the index (e.g. 'AI Founders Berlin', 'Design Co-op'). Required.\"),\n prompt: z.string().optional().describe(\"Description of what this community is about (e.g. 'Early-stage AI/ML founders in Berlin looking for co-founders, advisors, and investors'). Used by the system to evaluate which intents belong in this index. Highly recommended for better auto-assignment.\"),\n imageUrl: z.string().url().optional().describe(\"URL for the community's avatar/image. Optional.\"),\n joinPolicy: z.enum(['anyone', 'invite_only']).optional().describe(\"'anyone' = open (any user can self-join), 'invite_only' = only the owner can add members. Defaults to 'invite_only'.\"),\n }),\n handler: async ({ context, query }) => {\n if (!query.title?.trim()) {\n return error(\"Title is required.\");\n }\n\n const _createNetworkGraphStart = Date.now();\n const _createNetworkTraceEmitter = requestContext.getStore()?.traceEmitter;\n _createNetworkTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n operationMode: 'create' as const,\n createInput: {\n title: query.title.trim(),\n prompt: query.prompt?.trim() || undefined,\n imageUrl: query.imageUrl || undefined,\n joinPolicy: query.joinPolicy,\n },\n });\n const _createNetworkGraphMs = Date.now() - _createNetworkGraphStart;\n _createNetworkTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _createNetworkGraphMs });\n\n if (result.mutationResult) {\n if (result.mutationResult.success) {\n return success({\n created: true,\n networkId: result.mutationResult.networkId,\n title: result.mutationResult.title,\n message: result.mutationResult.message,\n _graphTimings: [{ name: 'index', durationMs: _createNetworkGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(result.mutationResult.error || \"Failed to create index.\");\n }\n return error(\"Failed to create index.\");\n },\n });\n\n const deleteNetwork = defineTool({\n name: \"delete_network\",\n description:\n \"Permanently deletes an index (community). Only the owner can delete, and the index must have no other members \" +\n \"(remove all members first with delete_network_membership). Personal indexes cannot be deleted.\\n\\n\" +\n \"**When to use:** When the owner wants to disband a community. This is irreversible — all intent-index links to this index are removed.\\n\\n\" +\n \"**Prerequisites:** Must be the owner. Must be the sole remaining member (remove others first).\\n\\n\" +\n \"**Returns:** Confirmation that the index was deleted.\",\n querySchema: z.object({\n networkId: z.string().optional().describe(\"Index UUID to delete. Get from read_networks. Defaults to the scoped index in index-scoped chats. Cannot be a personal index.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || context.networkId;\n if (!networkId || !UUID_REGEX.test(networkId)) {\n return error(\"Valid networkId required.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow deleting that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only delete this community.`\n );\n }\n\n const _deleteNetworkGraphStart = Date.now();\n const _deleteNetworkTraceEmitter = requestContext.getStore()?.traceEmitter;\n _deleteNetworkTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n networkId,\n operationMode: 'delete' as const,\n });\n const _deleteNetworkGraphMs = Date.now() - _deleteNetworkGraphStart;\n _deleteNetworkTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _deleteNetworkGraphMs });\n\n if (result.mutationResult && !result.mutationResult.success) {\n return error(result.mutationResult.error || \"Failed to delete index.\");\n }\n return success({ message: \"Network deleted.\", _graphTimings: [{ name: 'index', durationMs: _deleteNetworkGraphMs, agents: result.agentTimings ?? [] }] });\n },\n });\n\n const createNetworkMembership = defineTool({\n name: \"create_network_membership\",\n description:\n \"Adds a user as a member of an index (community). Membership enables the user to post intents in the index and be discovered \" +\n \"by other members through opportunity matching.\\n\\n\" +\n \"**Usage modes:**\\n\" +\n \"- Omit userId: self-join (only works for indexes with joinPolicy 'anyone').\\n\" +\n \"- With userId: add another user (only the index owner can do this for 'invite_only' indexes).\\n\\n\" +\n \"**When to use:** When the user wants to join an open community, or when an index owner wants to invite someone.\\n\\n\" +\n \"**Returns:** Confirmation that the member was added (or a note that they were already a member). \" +\n \"After joining, the user's existing intents with autoAssign=true may be evaluated against the new index.\",\n querySchema: z.object({\n userId: z.string().optional().describe(\"User ID to add as a member. Omit to join the index yourself. Get user IDs from read_user_profiles(query=name) or read_network_memberships.\"),\n networkId: z.string().optional().describe(\"Index UUID to add the member to. Get from read_networks. Defaults to the scoped index in index-scoped chats.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || context.networkId;\n const targetUserId = query.userId?.trim() || context.userId;\n if (!networkId || !UUID_REGEX.test(networkId)) {\n return error(\"Invalid index ID format. Use the exact UUID from read_networks.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow adding to that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only add members to this community.`\n );\n }\n\n const _createMembershipGraphStart = Date.now();\n const _createMembershipTraceEmitter = requestContext.getStore()?.traceEmitter;\n _createMembershipTraceEmitter?.({ type: \"graph_start\", name: \"network_membership\" });\n const result = await graphs.networkMembership.invoke({\n userId: context.userId,\n networkId,\n targetUserId,\n operationMode: 'create' as const,\n });\n const _createMembershipGraphMs = Date.now() - _createMembershipGraphStart;\n _createMembershipTraceEmitter?.({ type: \"graph_end\", name: \"network_membership\", durationMs: _createMembershipGraphMs });\n\n if (result.mutationResult) {\n if (result.mutationResult.success) {\n const alreadyMember = result.mutationResult.message?.includes(\"already\");\n return success({\n created: !alreadyMember,\n message: result.mutationResult.message,\n _graphTimings: [{ name: 'network_membership', durationMs: _createMembershipGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(result.mutationResult.error || \"Failed to add member.\");\n }\n return error(\"Failed to add member.\");\n },\n });\n\n const deleteNetworkMembership = defineTool({\n name: \"delete_network_membership\",\n description:\n \"Removes a user from an index (community). After removal, the user's intents are unlinked from this index \" +\n \"and they can no longer participate in opportunity discovery within it.\\n\\n\" +\n \"**Permissions:** Only the index owner can remove members. The owner themselves cannot be removed (delete the index instead).\\n\\n\" +\n \"**When to use:** When an index owner wants to remove a member from the community. \" +\n \"Use read_network_memberships(networkId) first to get the userId of the member to remove.\\n\\n\" +\n \"**Returns:** Confirmation that the member was removed.\",\n querySchema: z.object({\n userId: z.string().describe(\"User ID of the member to remove. Get from read_network_memberships(networkId). Cannot be the index owner.\"),\n networkId: z.string().optional().describe(\"Index UUID to remove the member from. Get from read_networks. Defaults to the scoped index in index-scoped chats.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || context.networkId;\n const targetUserId = query.userId?.trim();\n\n if (!networkId || !UUID_REGEX.test(networkId)) {\n return error(\"Valid networkId required. Use the exact UUID from read_networks.\");\n }\n if (!targetUserId) {\n return error(\"userId is required.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only manage members of this community.`\n );\n }\n\n const _deleteMembershipGraphStart = Date.now();\n const _deleteMembershipTraceEmitter = requestContext.getStore()?.traceEmitter;\n _deleteMembershipTraceEmitter?.({ type: \"graph_start\", name: \"network_membership\" });\n const result = await graphs.networkMembership.invoke({\n userId: context.userId,\n networkId,\n targetUserId,\n operationMode: 'delete' as const,\n });\n const _deleteMembershipGraphMs = Date.now() - _deleteMembershipGraphStart;\n _deleteMembershipTraceEmitter?.({ type: \"graph_end\", name: \"network_membership\", durationMs: _deleteMembershipGraphMs });\n\n if (result.mutationResult) {\n if (result.mutationResult.success) {\n return success({\n removed: true,\n message: result.mutationResult.message,\n _graphTimings: [{ name: 'network_membership', durationMs: _deleteMembershipGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(result.mutationResult.error || \"Failed to remove member.\");\n }\n return error(\"Failed to remove member.\");\n },\n });\n\n return [readIndexes, readIndexMemberships, updateNetwork, createNetwork, deleteNetwork, createNetworkMembership, deleteNetworkMembership] as const;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"network.tools.js","sourceRoot":"/","sources":["network/network.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAG9E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,8EAA8E;AAC9E,0EAA0E;AAC1E,IAAI,WAA2C,CAAC;AAEhD,MAAM,UAAU,kBAAkB,CAAC,UAAsB,EAAE,IAAc;IACvE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE1C,MAAM,iBAAiB,GAAG,CAAC,QAAwC,EAAE,EAAE,CACrE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnB,GAAG,CAAC;QACJ,eAAe,EAAE,oBAAoB,CAAC;YACpC,IAAI,EAAG,CAAC,CAAC,IAAe,IAAI,WAAW;YACvC,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,EAAE;YAChC,MAAM,EAAE,CAAC,CAAC,MAA4B;YACtC,QAAQ,EAAG,CAAC,CAAC,QAAoC,IAAI,EAAE;SACxD,CAAC;KACH,CAAC,CAAC,CAAC;IAEN,MAAM,WAAW,GAAG,UAAU,CAAC;QAC7B,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,0HAA0H;YAC1H,sIAAsI;YACtI,2DAA2D;YAC3D,mIAAmI;YACnI,2IAA2I;YAC3I,uBAAuB;YACvB,+GAA+G;YAC/G,4KAA4K;QAC9K,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;SACxH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC3D,OAAO,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACrG,CAAC;YAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,MAAM,sBAAsB,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;YACvE,sBAAsB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;gBACzC,aAAa,EAAE,MAAe;gBAC9B,OAAO,EAAE,KAAK,EAAE,gDAAgD;aACjE,CAAC,CAAC;YACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,oBAAoB,CAAC;YAC5D,sBAAsB,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAE9F,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAqC,CAAC;gBACxD,MAAM,QAAQ,GAAG;oBACf,GAAG,EAAE;oBACL,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC,QAA0C,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrH,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,IAAsC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,CAAC,cAAgD,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxI,CAAC;gBAEF,qEAAqE;gBACrE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACtB,OAAO,OAAO,CAAC;wBACb,GAAG,QAAQ;wBACX,gBAAgB,EAAE;4BAChB,QAAQ,EAAE,IAAI;4BACd,aAAa,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;4BACrD,OAAO,EAAE,2BAA2B,OAAO,CAAC,SAAS,IAAI,YAAY,2GAA2G;yBACjL;wBACD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;qBACrG,CAAC,CAAC;gBACL,CAAC;gBACD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,0EAA0E;gBAC1E,6EAA6E;gBAC7E,IAAI,iBAAuC,CAAC;gBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjG,IACE,OAAO,CAAC,YAAY;oBACpB,WAAW;oBACX,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACrC,QAAQ,CAAC,cAAiD,CAAC,MAAM,GAAG,CAAC,EACtE,CAAC;oBACD,+FAA+F;oBAC/F,MAAM,wBAAwB,GAAI,QAAQ,CAAC,cAAiD;yBACzF,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;yBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACX,SAAS,EAAE,CAAC,CAAC,SAAmB;wBAChC,eAAe,EAAG,CAAC,CAAC,eAA0B,IAAI,MAAM,CAAC,CAAC,KAAe,EAAE;qBAC5E,CAAC,CAAC,CAAC;oBACN,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBACpD,IAAI,CAAC;4BACH,WAAW,KAAX,WAAW,GAAK,IAAI,kBAAkB,EAAE,EAAC;4BACzC,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACzC,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,+EAA+E;4BAC/E,OAAO,CAAC,IAAI,CAAC,mEAAmE,EAAE,GAAG,CAAC,CAAC;4BACvF,OAAO,IAAI,CAAC;wBACd,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;wBACjC,WAAW;wBACX,QAAQ,EAAE,wBAAwB;qBACnC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;wBACxB,wEAAwE;wBACxE,kFAAkF;wBAClF,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,GAAG,CAAC,CAAC;wBAC5E,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;wBACjH,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;oBACH,IAAI,aAAa,EAAE,CAAC;wBAClB,0DAA0D;wBAC1D,mEAAmE;wBACnE,qEAAqE;wBACrE,sEAAsE;wBACtE,6DAA6D;wBAC7D,MAAM,QAAQ,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;wBAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;wBAChC,KAAK,MAAM,EAAE,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;4BAChD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gCACxC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCACpB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BACf,CAAC;wBACH,CAAC;wBACD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;4BAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gCAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACzC,CAAC;wBACD,iBAAiB,GAAG,UAAU,CAAC;oBACjC,CAAC;gBACH,CAAC;gBAED,OAAO,OAAO,CAAC;oBACb,GAAG,QAAQ;oBACX,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;iBACrG,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACrD,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,UAAU,CAAC;QACtC,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,sHAAsH;YACtH,kDAAkD;YAClD,oBAAoB;YACpB,kJAAkJ;YAClJ,iGAAiG;YACjG,6IAA6I;YAC7I,4IAA4I;YAC5I,yHAAyH;YACzH,wDAAwD;YACxD,sHAAsH;YACtH,wGAAwG;YACxG,6GAA6G;YAC7G,0CAA0C;YAC1C,oGAAoG;YACpG,qGAAqG;YACrG,gGAAgG;YAChG,wGAAwG;YACxG,uCAAuC;QACzC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oIAAoI,CAAC;YAC/K,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yKAAyK,CAAC;SAClN,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;YACvD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;YAEjD,IAAI,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAClF,CAAC;YAED,mCAAmC;YACnC,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;gBACzB,kFAAkF;gBAClF,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;oBACzD,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,6CAA6C,CACzG,CAAC;gBACJ,CAAC;gBAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC1C,MAAM,wBAAwB,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;gBACzE,wBAAwB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;gBAChF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;oBACnD,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,SAAS;oBACT,aAAa,EAAE,MAAe;iBAC/B,CAAC,CAAC;gBACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,sBAAsB,CAAC;gBAChE,wBAAwB,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAE/G,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,OAAO,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChK,CAAC;gBACD,OAAO,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACjD,CAAC;YAED,6DAA6D;YAC7D,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;YAE9C,6FAA6F;YAC7F,IAAI,WAAqE,CAAC;YAC1E,IAAI,YAAY,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpC,oEAAoE;gBACpE,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBAC/D,IAAI,SAAS,EAAE,CAAC;oBACd,sFAAsF;oBACtF,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;wBACzD,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,oDAAoD,CAChH,CAAC;oBACJ,CAAC;oBAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;oBAC/E,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,OAAO,KAAK,CACV,mJAAmJ,CACpJ,CAAC;oBACJ,CAAC;oBACD,kEAAkE;oBAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBACzE,IAAI,QAAQ,EAAE,CAAC;wBACb,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;oBACtE,CAAC;oBACD,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAC;gBACvH,CAAC;qBAAM,CAAC;oBACN,mFAAmF;oBACnF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;wBACtB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;wBACjF,IAAI,QAAQ,EAAE,CAAC;4BACb,OAAO,OAAO,CAAC;gCACb,QAAQ,EAAE,IAAI;gCACd,MAAM,EAAE,YAAY;gCACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gCAC5B,gBAAgB,EAAE;oCAChB,QAAQ,EAAE,IAAI;oCACd,aAAa,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;oCACrD,OAAO,EAAE,2BAA2B,OAAO,CAAC,SAAS,IAAI,YAAY,gDAAgD;iCACtH;6BACF,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO,OAAO,CAAC;4BACb,QAAQ,EAAE,KAAK;4BACf,MAAM,EAAE,YAAY;4BACpB,SAAS,EAAE,OAAO,CAAC,SAAS;4BAC5B,OAAO,EAAE,yCAAyC;4BAClD,gBAAgB,EAAE;gCAChB,QAAQ,EAAE,IAAI;gCACd,aAAa,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;gCACrD,OAAO,EAAE,2BAA2B,OAAO,CAAC,SAAS,IAAI,YAAY,mDAAmD;6BACzH;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,kGAAkG;oBAClG,MAAM,aAAa,GAA6B,EAAE,CAAC;oBACnD,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;wBAClC,IAAI,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;4BAC9D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxB,CAAC;oBACH,CAAC;oBACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC/B,OAAO,KAAK,CACV,8HAA8H,CAC/H,CAAC;oBACJ,CAAC;oBACD,0CAA0C;oBAC1C,OAAO,OAAO,CAAC;wBACb,MAAM,EAAE,YAAY;wBACpB,KAAK,EAAE,aAAa,CAAC,MAAM;wBAC3B,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACrC,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,YAAY,EAAE,CAAC,CAAC,YAAY;yBAC7B,CAAC,CAAC;wBACH,IAAI,EAAE,8BAA8B;qBACrC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,+BAA+B;gBAC/B,WAAW,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBAEnD,8EAA8E;gBAC9E,0EAA0E;gBAC1E,gFAAgF;gBAChF,+FAA+F;gBAC/F,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAED,mEAAmE;YACnE,IAAI,SAAS,EAAE,CAAC;gBACd,sFAAsF;gBACtF,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;oBACzD,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,oDAAoD,CAChH,CAAC;gBACJ,CAAC;gBAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBAC/D,MAAM,aAAa,GACjB,YAAY,KAAK,OAAO,CAAC,MAAM;oBAC/B,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,OAAO,KAAK,CACV,uEAAuE,CACxE,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBACjE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAC;gBACvH,CAAC;gBACD,OAAO,OAAO,CAAC;oBACb,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,YAAY;oBACpB,SAAS;oBACT,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB,CAAC,CAAC;YACL,CAAC;YAED,qEAAqE;YACrE,IAAI,OAAO,CAAC,SAAS,IAAI,YAAY,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACzD,OAAO,OAAO,CAAC;oBACb,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,WAAW,CAAC,MAAM;oBACzB,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACnC,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,YAAY,EAAE,CAAC,CAAC,YAAY;wBAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;oBACH,gBAAgB,EAAE;wBAChB,QAAQ,EAAE,IAAI;wBACd,aAAa,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;wBACrD,OAAO,EAAE,2BAA2B,OAAO,CAAC,SAAS,IAAI,YAAY,2GAA2G;qBACjL;iBACF,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,WAAW,CAAC,MAAM;gBACzB,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;aACJ,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAChD,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE;QACxD,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC5C,CAAC,CAAC,MAAM,EAAE,CAAC;IAEZ,MAAM,aAAa,GAAG,UAAU,CAAC;QAC/B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,kGAAkG;YAClG,4GAA4G;YAC5G,uIAAuI;YACvI,yHAAyH;YACzH,qEAAqE;YACrE,iHAAiH;YACjH,qEAAqE;YACrE,wEAAwE;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mGAAmG,CAAC;YAC9I,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,CAAC,mSAAmS,CAAC;SACpV,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;YAChF,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC5C,CAAC;YAED,sFAAsF;YACtF,IAAI,OAAO,CAAC,SAAS,IAAI,gBAAgB,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBAChE,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,kDAAkD,CAC9G,CAAC;YACJ,CAAC;YAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5C,MAAM,0BAA0B,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;YAC3E,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,gBAAgB;gBAC3B,aAAa,EAAE,QAAiB;gBAChC,WAAW,EAAE,KAAK,CAAC,QAAQ;aAC5B,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,CAAC;YACpE,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAEtG,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACjM,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,UAAU,CAAC;QAC/B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,qIAAqI;YACrI,oIAAoI;YACpI,sGAAsG;YACtG,oIAAoI;YACpI,yHAAyH;YACzH,+FAA+F;QACjG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kFAAkF,CAAC;YAC9G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+PAA+P,CAAC;YACvS,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YACjG,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sHAAsH,CAAC;SAC1L,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACrC,CAAC;YAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5C,MAAM,0BAA0B,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;YAC3E,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,aAAa,EAAE,QAAiB;gBAChC,WAAW,EAAE;oBACX,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;oBACzB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS;oBACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;oBACrC,UAAU,EAAE,KAAK,CAAC,UAAU;iBAC7B;aACF,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,CAAC;YACpE,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAEtG,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC;wBACb,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,SAAS;wBAC1C,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK;wBAClC,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO;wBACtC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;qBACzG,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,UAAU,CAAC;QAC/B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,gHAAgH;YAChH,oGAAoG;YACpG,4IAA4I;YAC5I,oGAAoG;YACpG,uDAAuD;QACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+HAA+H,CAAC;SAC3K,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC;YAC/D,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC5C,CAAC;YAED,sFAAsF;YACtF,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzD,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,uCAAuC,CACnG,CAAC;YACJ,CAAC;YAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5C,MAAM,0BAA0B,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;YAC3E,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS;gBACT,aAAa,EAAE,QAAiB;aACjC,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,CAAC;YACpE,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAEtG,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5J,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,UAAU,CAAC;QACzC,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,8HAA8H;YAC9H,oDAAoD;YACpD,oBAAoB;YACpB,+EAA+E;YAC/E,mGAAmG;YACnG,qHAAqH;YACrH,mGAAmG;YACnG,yGAAyG;QAC3G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4IAA4I,CAAC;YACpL,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8GAA8G,CAAC;SAC1J,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC;YAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;YAC5D,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAClF,CAAC;YAED,uFAAuF;YACvF,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzD,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,+CAA+C,CAC3G,CAAC;YACJ,CAAC;YAED,MAAM,2BAA2B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/C,MAAM,6BAA6B,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;YAC9E,6BAA6B,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACnD,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS;gBACT,YAAY;gBACZ,aAAa,EAAE,QAAiB;aACjC,CAAC,CAAC;YACH,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,2BAA2B,CAAC;YAC1E,6BAA6B,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAEzH,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAClC,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACzE,OAAO,OAAO,CAAC;wBACb,OAAO,EAAE,CAAC,aAAa;wBACvB,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO;wBACtC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;qBACzH,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,UAAU,CAAC;QACzC,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,2GAA2G;YAC3G,4EAA4E;YAC5E,kIAAkI;YAClI,oFAAoF;YACpF,8FAA8F;YAC9F,wDAAwD;QAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2GAA2G,CAAC;YACxI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mHAAmH,CAAC;SAC/J,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC;YAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAE1C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACtC,CAAC;YAED,6EAA6E;YAC7E,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzD,OAAO,KAAK,CACV,0BAA0B,OAAO,CAAC,SAAS,IAAI,YAAY,kDAAkD,CAC9G,CAAC;YACJ,CAAC;YAED,MAAM,2BAA2B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/C,MAAM,6BAA6B,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;YAC9E,6BAA6B,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACnD,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS;gBACT,YAAY;gBACZ,aAAa,EAAE,QAAiB;aACjC,CAAC,CAAC;YACH,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,2BAA2B,CAAC;YAC1E,6BAA6B,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAEzH,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC;wBACb,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO;wBACtC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;qBACzH,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,CAAU,CAAC;AACrJ,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { requestContext } from \"../shared/observability/request-context.js\";\nimport { renderNetworkContext } from '../shared/network/metadata.renderer.js';\n\nimport type { DefineTool, ToolDeps } from \"../shared/agent/tool.helpers.js\";\nimport { success, error, UUID_REGEX } from \"../shared/agent/tool.helpers.js\";\nimport { NetworkRecommender } from \"./network.recommender.js\";\n\n// Lazy singleton — only instantiated on first onboarding ranking call so that\n// importing this module does not require OPENROUTER_API_KEY at load time.\nlet recommender: NetworkRecommender | undefined;\n\nexport function createNetworkTools(defineTool: DefineTool, deps: ToolDeps) {\n const { graphs, userDb, systemDb } = deps;\n\n const enrichWithContext = (networks: Array<Record<string, unknown>>) =>\n networks.map((n) => ({\n ...n,\n renderedContext: renderNetworkContext({\n type: (n.type as string) ?? 'community',\n title: (n.title as string) ?? '',\n prompt: n.prompt as string | undefined,\n metadata: (n.metadata as Record<string, unknown>) ?? {},\n }),\n }));\n\n const readIndexes = defineTool({\n name: \"read_networks\",\n description:\n \"Lists the authenticated user's networks (communities), including ones they own and public communities they can join.\\n\\n\" +\n \"**When to use:** To find network IDs for scoping other operations (read_intents, discover_opportunities, read_network_memberships), \" +\n \"or to show the user which communities they belong to.\\n\\n\" +\n \"**Returns:** Up to three lists — `memberOf` (networks the user joined), `owns` (networks the user created), and `publicNetworks` \" +\n \"(publicly joinable communities the user is not yet a member of). Entries in `memberOf` include `isPersonal` set to `true` for the user's \" +\n \"personal network.\\n\\n\" +\n \"**Note:** In index-scoped chats, only the scoped network is returned. During onboarding, `orderedNetworkIds` \" +\n \"may be returned alongside `publicNetworks` \\u2014 a ranked array of network IDs ordered by relevance to the user's profile (omitted when ranking is unavailable or fails).\",\n querySchema: z.object({\n userId: z.string().optional().describe(\"Must be the current user's ID or omitted. Cannot list another user's indexes.\"),\n }),\n handler: async ({ context, query }) => {\n if (query.userId && query.userId.trim() !== context.userId) {\n return error(\"You can only list your own indexes. Omit userId to see the current user's indexes.\");\n }\n\n const _readIndexGraphStart = Date.now();\n const _readIndexTraceEmitter = requestContext.getStore()?.traceEmitter;\n _readIndexTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n networkId: context.networkId || undefined,\n operationMode: 'read' as const,\n showAll: false, // Never allow bypass - strict scope enforcement\n });\n const _readIndexGraphMs = Date.now() - _readIndexGraphStart;\n _readIndexTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _readIndexGraphMs });\n\n if (result.error) {\n return error(result.error);\n }\n if (result.readResult) {\n const rr = result.readResult as Record<string, unknown>;\n const enriched = {\n ...rr,\n ...(Array.isArray(rr.memberOf) ? { memberOf: enrichWithContext(rr.memberOf as Array<Record<string, unknown>>) } : {}),\n ...(Array.isArray(rr.owns) ? { owns: enrichWithContext(rr.owns as Array<Record<string, unknown>>) } : {}),\n ...(Array.isArray(rr.publicNetworks) ? { publicNetworks: enrichWithContext(rr.publicNetworks as Array<Record<string, unknown>>) } : {}),\n };\n\n // When scoped, add clear metadata so model knows results are limited\n if (context.networkId) {\n return success({\n ...enriched,\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `Results are limited to \"${context.indexName ?? 'this index'}\" because this chat is scoped to that community. The user may belong to other communities not shown here.`,\n },\n _graphTimings: [{ name: 'index', durationMs: _readIndexGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n // Onboarding-only: rank public networks by relevance to the user's global\n // user_context paragraph (the profile-replacing identity text). Guard: only\n // when isOnboarding, not scoped, there are public networks to rank, and a\n // user_context is resolvable (generated on demand by the injected resolver).\n let orderedNetworkIds: string[] | undefined;\n const userContext = deps.getUserContextText ? await deps.getUserContextText(context.userId) : \"\";\n if (\n context.isOnboarding &&\n userContext &&\n Array.isArray(enriched.publicNetworks) &&\n (enriched.publicNetworks as Array<Record<string, unknown>>).length > 0\n ) {\n // Cap at 50 to bound LLM context window usage (matches the UI's discoverPublicIndexes(1, 50)).\n const publicNetworksForRanking = (enriched.publicNetworks as Array<Record<string, unknown>>)\n .slice(0, 50)\n .map((n) => ({\n networkId: n.networkId as string,\n renderedContext: (n.renderedContext as string) ?? `## ${n.title as string}`,\n }));\n const rankFn = deps.networkRanker ?? (async (input) => {\n try {\n recommender ??= new NetworkRecommender();\n return await recommender.invoke(input);\n } catch (err) {\n // e.g. missing OPENROUTER_API_KEY — degrade gracefully, omit orderedNetworkIds\n console.warn(\"[read_networks] NetworkRecommender unavailable, skipping ranking:\", err);\n return null;\n }\n });\n const rankingResult = await rankFn({\n userContext,\n networks: publicNetworksForRanking,\n }).catch((err: unknown) => {\n // Catches errors from a custom deps.networkRanker (the default fallback\n // handles its own errors internally). Degrade gracefully: omit orderedNetworkIds.\n console.warn(\"[read_networks] networkRanker threw, skipping ranking:\", err);\n deps.reportToolError?.(err, { operation: \"network-ranking\", toolName: \"read_networks\", userId: context.userId });\n return null;\n });\n if (rankingResult) {\n // Normalize LLM output against the ranked slice (top 50):\n // keep only IDs from the input set, de-dupe preserving order, then\n // append any slice IDs the model omitted. Networks beyond the top-50\n // slice are not in orderedNetworkIds and will sort to the tail in the\n // frontend (consistent with the UI's own 50-item page size).\n const inputIds = publicNetworksForRanking.map((n) => n.networkId);\n const inputIdSet = new Set(inputIds);\n const seen = new Set<string>();\n const normalized: string[] = [];\n for (const id of rankingResult.rankedNetworkIds) {\n if (inputIdSet.has(id) && !seen.has(id)) {\n normalized.push(id);\n seen.add(id);\n }\n }\n for (const id of inputIds) {\n if (!seen.has(id)) normalized.push(id);\n }\n orderedNetworkIds = normalized;\n }\n }\n\n return success({\n ...enriched,\n ...(orderedNetworkIds !== undefined ? { orderedNetworkIds } : {}),\n _graphTimings: [{ name: 'index', durationMs: _readIndexGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(\"Failed to fetch index information.\");\n },\n });\n\n const readIndexMemberships = defineTool({\n name: \"read_network_memberships\",\n description:\n \"Reads index membership information — who is in which community. Essential for understanding the social graph before \" +\n \"creating introductions or exploring intents.\\n\\n\" +\n \"**Usage modes:**\\n\" +\n \"- With `networkId` only: lists ALL members of that index — returns userId, name, avatar, permissions (owner/member), intentCount, and joinedAt. \" +\n \"Use this to see who's in a community before browsing their intents or creating introductions.\\n\" +\n \"- With `userId` only (or omit for self): lists all indexes that user belongs to — returns networkId, networkTitle, permissions, joinedAt.\\n\" +\n \"- With both `networkId` and `userId`: checks whether that specific user is a member of that specific index (returns isMember boolean).\\n\\n\" +\n \"**When to use:** Before creating introductions (need to verify shared index membership), to explore community members, \" +\n \"or to check if a user belongs to a specific index.\\n\\n\" +\n \"**Returns:** Member list with user details, or membership list with index details, or a membership check result.\\n\\n\" +\n \"**Personal index semantics.** The personal index (`isPersonal: true` on the membership) is the user's \" +\n \"contact list — members of that index are the user's contacts. For another user, this tool only reveals the \" +\n \"indexes you already share with them.\\n\\n\" +\n \"**Shared-context pattern.** To find overlap with another user: (1) omit `userId` to read your own \" +\n \"memberships, (2) call this tool with the other person's actual `userId` to get the shared indexes, \" +\n \"(3) call read_intents for each shared network to see what each is looking for there, (4) call \" +\n \"read_user_profiles for the other party. That sequence gives you enough to decide whether to propose a \" +\n \"direct connection or an introduction.\",\n querySchema: z.object({\n networkId: z.string().optional().describe(\"Index UUID — lists all members of this index. Get from read_networks. In index-scoped chats, only the scoped index can be queried.\"),\n userId: z.string().optional().describe(\"User ID — lists that user's index memberships. Omit to get the current user's memberships. When combined with networkId, checks if this user is in that specific index.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || undefined;\n const userId = query.userId?.trim() || undefined;\n\n if (networkId && !UUID_REGEX.test(networkId)) {\n return error(\"Invalid index ID format. Use the exact UUID from read_networks.\");\n }\n\n // Mode 1: list members of an index\n if (networkId && !userId) {\n // Enforce strict scope: when chat is index-scoped, only allow querying that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only query members of this index.`\n );\n }\n\n const _readMembersGraphStart = Date.now();\n const _readMembersTraceEmitter = requestContext.getStore()?.traceEmitter;\n _readMembersTraceEmitter?.({ type: \"graph_start\", name: \"network_membership\" });\n const result = await graphs.networkMembership.invoke({\n userId: context.userId,\n networkId,\n operationMode: 'read' as const,\n });\n const _readMembersGraphMs = Date.now() - _readMembersGraphStart;\n _readMembersTraceEmitter?.({ type: \"graph_end\", name: \"network_membership\", durationMs: _readMembersGraphMs });\n\n if (result.error) {\n return error(result.error);\n }\n if (result.readResult) {\n return success({ ...result.readResult, _graphTimings: [{ name: 'network_membership', durationMs: _readMembersGraphMs, agents: result.agentTimings ?? [] }] });\n }\n return error(\"Failed to fetch index members.\");\n }\n\n // Mode 2: list a user's memberships (indexes they belong to)\n const targetUserId = userId || context.userId;\n\n // Use userDb for own memberships, but systemDb access is implicit through shared index scope\n let memberships: Awaited<ReturnType<typeof userDb.getNetworkMemberships>>;\n if (targetUserId !== context.userId) {\n // Cross-user access: systemDb will validate shared index membership\n const callerMemberships = await userDb.getNetworkMemberships();\n if (networkId) {\n // Strict scope enforcement: when chat is index-scoped, only allow querying that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only query membership in this community.`\n );\n }\n\n const callerInIndex = callerMemberships.some((m) => m.networkId === networkId);\n if (!callerInIndex) {\n return error(\n \"Unauthorized: you can only view another user's membership in an index you belong to. Provide your own userId or omit userId for your memberships.\",\n );\n }\n // Check if target user is in the index (systemDb validates scope)\n const isMember = await systemDb.isNetworkMember(networkId, targetUserId);\n if (isMember) {\n return success({ isMember: true, userId: targetUserId, networkId });\n }\n return success({ isMember: false, userId: targetUserId, networkId, message: \"User is not a member of this index.\" });\n } else {\n // Strict scope enforcement: when chat is index-scoped, only check the scoped index\n if (context.networkId) {\n const isMember = await systemDb.isNetworkMember(context.networkId, targetUserId);\n if (isMember) {\n return success({\n isMember: true,\n userId: targetUserId,\n networkId: context.networkId,\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `This chat is scoped to \"${context.indexName ?? 'this index'}\". Only membership in this community is shown.`,\n },\n });\n }\n return success({\n isMember: false,\n userId: targetUserId,\n networkId: context.networkId,\n message: \"User is not a member of this community.\",\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `This chat is scoped to \"${context.indexName ?? 'this index'}\". Only membership in this community was checked.`,\n },\n });\n }\n\n // Unscoped chat: show overlap with shared indexes (intersection of caller and target memberships)\n const sharedIndexes: typeof callerMemberships = [];\n for (const m of callerMemberships) {\n if (await systemDb.isNetworkMember(m.networkId, targetUserId)) {\n sharedIndexes.push(m);\n }\n }\n if (sharedIndexes.length === 0) {\n return error(\n \"Unauthorized: you can only view another user's memberships if you share at least one index, or request your own memberships.\",\n );\n }\n // Return only the indexes that are shared\n return success({\n userId: targetUserId,\n count: sharedIndexes.length,\n memberships: sharedIndexes.map((m) => ({\n networkId: m.networkId,\n networkTitle: m.networkTitle,\n })),\n note: \"Only showing shared indexes.\",\n });\n }\n } else {\n // Own memberships - use userDb\n memberships = await userDb.getNetworkMemberships();\n\n // NOTE: context.networkId here is the *focus* of the scoped chat — it filters\n // what we show, not what we can reach. indexScope is the reach; the bound\n // network is one element of it. See IND-306 for the equivalent in read_intents.\n // Strict scope enforcement: when chat is index-scoped, only return the scoped index membership\n if (context.networkId && !networkId) {\n memberships = memberships.filter((m) => m.networkId === context.networkId);\n }\n }\n\n // If both networkId and userId: filter to that specific membership\n if (networkId) {\n // Strict scope enforcement: when chat is index-scoped, only allow querying that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only query membership in this community.`\n );\n }\n\n const callerMemberships = await userDb.getNetworkMemberships();\n const callerInIndex =\n targetUserId === context.userId ||\n callerMemberships.some((m) => m.networkId === networkId);\n if (!callerInIndex) {\n return error(\n \"Unauthorized: you can only view membership in an index you belong to.\",\n );\n }\n const match = memberships.find((m) => m.networkId === networkId);\n if (!match) {\n return success({ isMember: false, userId: targetUserId, networkId, message: \"User is not a member of this index.\" });\n }\n return success({\n isMember: true,\n userId: targetUserId,\n networkId,\n networkTitle: match.networkTitle,\n permissions: match.permissions,\n joinedAt: match.joinedAt,\n });\n }\n\n // When scoped, add clear metadata so model knows results are limited\n if (context.networkId && targetUserId === context.userId) {\n return success({\n userId: targetUserId,\n count: memberships.length,\n memberships: memberships.map((m) => ({\n networkId: m.networkId,\n networkTitle: m.networkTitle,\n permissions: m.permissions,\n joinedAt: m.joinedAt,\n })),\n scopeRestriction: {\n isScoped: true,\n scopedToIndex: context.indexName ?? context.networkId,\n message: `Results are limited to \"${context.indexName ?? 'this index'}\" because this chat is scoped to that community. The user may belong to other communities not shown here.`,\n },\n });\n }\n\n return success({\n userId: targetUserId,\n count: memberships.length,\n memberships: memberships.map((m) => ({\n networkId: m.networkId,\n networkTitle: m.networkTitle,\n permissions: m.permissions,\n joinedAt: m.joinedAt,\n })),\n });\n },\n });\n\n const updateNetworkSettingsSchema = z.object({\n title: z.string().optional(),\n prompt: z.string().nullable().optional(),\n imageUrl: z.string().url().nullable().optional(),\n joinPolicy: z.enum(['anyone', 'invite_only']).optional(),\n allowGuestVibeCheck: z.boolean().optional(),\n }).strict();\n\n const updateNetwork = defineTool({\n name: \"update_network\",\n description:\n \"Updates settings of an existing index (community). Only the index owner can perform updates.\\n\\n\" +\n \"**Updatable fields:** title (display name), prompt (purpose description used for intent auto-assignment), \" +\n \"imageUrl (community avatar), joinPolicy ('anyone' for open or 'invite_only'), allowGuestVibeCheck (allow non-members to preview).\\n\\n\" +\n \"**When to use:** When an index owner wants to change their community's settings — e.g. update the purpose description, \" +\n \"change from invite-only to open, or update the community image.\\n\\n\" +\n \"**Important:** Changing the prompt affects how future intents are evaluated for auto-assignment to this index. \" +\n \"Existing intent-index links are not re-evaluated automatically.\\n\\n\" +\n \"**Returns:** Confirmation with the list of settings that were updated.\",\n querySchema: z.object({\n networkId: z.string().optional().describe(\"Index UUID to update. Get from read_networks. Defaults to the scoped index in index-scoped chats.\"),\n settings: updateNetworkSettingsSchema.describe(\"Object with fields to update. All fields are optional — only include the ones to change. title: display name. prompt: purpose description (used for intent auto-assignment). imageUrl: community image URL (null to remove). joinPolicy: 'anyone' or 'invite_only'. allowGuestVibeCheck: boolean.\"),\n }),\n handler: async ({ context, query }) => {\n const effectiveIndexId = (query.networkId?.trim() || context.networkId) ?? null;\n if (!effectiveIndexId || !UUID_REGEX.test(effectiveIndexId)) {\n return error(\"Valid networkId required.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow updating that index\n if (context.networkId && effectiveIndexId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only update this community's settings.`\n );\n }\n\n const _updateNetworkGraphStart = Date.now();\n const _updateNetworkTraceEmitter = requestContext.getStore()?.traceEmitter;\n _updateNetworkTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n networkId: effectiveIndexId,\n operationMode: 'update' as const,\n updateInput: query.settings,\n });\n const _updateNetworkGraphMs = Date.now() - _updateNetworkGraphStart;\n _updateNetworkTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _updateNetworkGraphMs });\n\n if (result.mutationResult && !result.mutationResult.success) {\n return error(result.mutationResult.error || \"Failed to update index.\");\n }\n return success({ message: \"Index updated.\", settings: Object.keys(query.settings), _graphTimings: [{ name: 'index', durationMs: _updateNetworkGraphMs, agents: result.agentTimings ?? [] }] });\n },\n });\n\n const createNetwork = defineTool({\n name: \"create_network\",\n description:\n \"Creates a new index (community/group). The authenticated user becomes the owner with full control over settings and membership.\\n\\n\" +\n \"**What is an index?** A shared space where members post intents (what they're looking for) and the system discovers opportunities \" +\n \"(complementary matches) between members. The index's prompt guides what kinds of intents belong.\\n\\n\" +\n \"**When to use:** When the user wants to create a new community — e.g. a professional network, interest group, or project team.\\n\\n\" +\n \"**Returns:** The new index's networkId (UUID) and title. Use the networkId to add members (create_network_membership), \" +\n \"link intents (create_intent_index), or run discovery (discover_opportunities with networkId).\",\n querySchema: z.object({\n title: z.string().describe(\"Display name of the index (e.g. 'AI Founders Berlin', 'Design Co-op'). Required.\"),\n prompt: z.string().optional().describe(\"Description of what this community is about (e.g. 'Early-stage AI/ML founders in Berlin looking for co-founders, advisors, and investors'). Used by the system to evaluate which intents belong in this index. Highly recommended for better auto-assignment.\"),\n imageUrl: z.string().url().optional().describe(\"URL for the community's avatar/image. Optional.\"),\n joinPolicy: z.enum(['anyone', 'invite_only']).optional().describe(\"'anyone' = open (any user can self-join), 'invite_only' = only the owner can add members. Defaults to 'invite_only'.\"),\n }),\n handler: async ({ context, query }) => {\n if (!query.title?.trim()) {\n return error(\"Title is required.\");\n }\n\n const _createNetworkGraphStart = Date.now();\n const _createNetworkTraceEmitter = requestContext.getStore()?.traceEmitter;\n _createNetworkTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n operationMode: 'create' as const,\n createInput: {\n title: query.title.trim(),\n prompt: query.prompt?.trim() || undefined,\n imageUrl: query.imageUrl || undefined,\n joinPolicy: query.joinPolicy,\n },\n });\n const _createNetworkGraphMs = Date.now() - _createNetworkGraphStart;\n _createNetworkTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _createNetworkGraphMs });\n\n if (result.mutationResult) {\n if (result.mutationResult.success) {\n return success({\n created: true,\n networkId: result.mutationResult.networkId,\n title: result.mutationResult.title,\n message: result.mutationResult.message,\n _graphTimings: [{ name: 'index', durationMs: _createNetworkGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(result.mutationResult.error || \"Failed to create index.\");\n }\n return error(\"Failed to create index.\");\n },\n });\n\n const deleteNetwork = defineTool({\n name: \"delete_network\",\n description:\n \"Permanently deletes an index (community). Only the owner can delete, and the index must have no other members \" +\n \"(remove all members first with delete_network_membership). Personal indexes cannot be deleted.\\n\\n\" +\n \"**When to use:** When the owner wants to disband a community. This is irreversible — all intent-index links to this index are removed.\\n\\n\" +\n \"**Prerequisites:** Must be the owner. Must be the sole remaining member (remove others first).\\n\\n\" +\n \"**Returns:** Confirmation that the index was deleted.\",\n querySchema: z.object({\n networkId: z.string().optional().describe(\"Index UUID to delete. Get from read_networks. Defaults to the scoped index in index-scoped chats. Cannot be a personal index.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || context.networkId;\n if (!networkId || !UUID_REGEX.test(networkId)) {\n return error(\"Valid networkId required.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow deleting that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only delete this community.`\n );\n }\n\n const _deleteNetworkGraphStart = Date.now();\n const _deleteNetworkTraceEmitter = requestContext.getStore()?.traceEmitter;\n _deleteNetworkTraceEmitter?.({ type: \"graph_start\", name: \"index\" });\n const result = await graphs.index.invoke({\n userId: context.userId,\n networkId,\n operationMode: 'delete' as const,\n });\n const _deleteNetworkGraphMs = Date.now() - _deleteNetworkGraphStart;\n _deleteNetworkTraceEmitter?.({ type: \"graph_end\", name: \"index\", durationMs: _deleteNetworkGraphMs });\n\n if (result.mutationResult && !result.mutationResult.success) {\n return error(result.mutationResult.error || \"Failed to delete index.\");\n }\n return success({ message: \"Network deleted.\", _graphTimings: [{ name: 'index', durationMs: _deleteNetworkGraphMs, agents: result.agentTimings ?? [] }] });\n },\n });\n\n const createNetworkMembership = defineTool({\n name: \"create_network_membership\",\n description:\n \"Adds a user as a member of an index (community). Membership enables the user to post intents in the index and be discovered \" +\n \"by other members through opportunity matching.\\n\\n\" +\n \"**Usage modes:**\\n\" +\n \"- Omit userId: self-join (only works for indexes with joinPolicy 'anyone').\\n\" +\n \"- With userId: add another user (only the index owner can do this for 'invite_only' indexes).\\n\\n\" +\n \"**When to use:** When the user wants to join an open community, or when an index owner wants to invite someone.\\n\\n\" +\n \"**Returns:** Confirmation that the member was added (or a note that they were already a member). \" +\n \"After joining, the user's existing intents with autoAssign=true may be evaluated against the new index.\",\n querySchema: z.object({\n userId: z.string().optional().describe(\"User ID to add as a member. Omit to join the index yourself. Get user IDs from read_user_profiles(query=name) or read_network_memberships.\"),\n networkId: z.string().optional().describe(\"Index UUID to add the member to. Get from read_networks. Defaults to the scoped index in index-scoped chats.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || context.networkId;\n const targetUserId = query.userId?.trim() || context.userId;\n if (!networkId || !UUID_REGEX.test(networkId)) {\n return error(\"Invalid index ID format. Use the exact UUID from read_networks.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow adding to that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only add members to this community.`\n );\n }\n\n const _createMembershipGraphStart = Date.now();\n const _createMembershipTraceEmitter = requestContext.getStore()?.traceEmitter;\n _createMembershipTraceEmitter?.({ type: \"graph_start\", name: \"network_membership\" });\n const result = await graphs.networkMembership.invoke({\n userId: context.userId,\n networkId,\n targetUserId,\n operationMode: 'create' as const,\n });\n const _createMembershipGraphMs = Date.now() - _createMembershipGraphStart;\n _createMembershipTraceEmitter?.({ type: \"graph_end\", name: \"network_membership\", durationMs: _createMembershipGraphMs });\n\n if (result.mutationResult) {\n if (result.mutationResult.success) {\n const alreadyMember = result.mutationResult.message?.includes(\"already\");\n return success({\n created: !alreadyMember,\n message: result.mutationResult.message,\n _graphTimings: [{ name: 'network_membership', durationMs: _createMembershipGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(result.mutationResult.error || \"Failed to add member.\");\n }\n return error(\"Failed to add member.\");\n },\n });\n\n const deleteNetworkMembership = defineTool({\n name: \"delete_network_membership\",\n description:\n \"Removes a user from an index (community). After removal, the user's intents are unlinked from this index \" +\n \"and they can no longer participate in opportunity discovery within it.\\n\\n\" +\n \"**Permissions:** Only the index owner can remove members. The owner themselves cannot be removed (delete the index instead).\\n\\n\" +\n \"**When to use:** When an index owner wants to remove a member from the community. \" +\n \"Use read_network_memberships(networkId) first to get the userId of the member to remove.\\n\\n\" +\n \"**Returns:** Confirmation that the member was removed.\",\n querySchema: z.object({\n userId: z.string().describe(\"User ID of the member to remove. Get from read_network_memberships(networkId). Cannot be the index owner.\"),\n networkId: z.string().optional().describe(\"Index UUID to remove the member from. Get from read_networks. Defaults to the scoped index in index-scoped chats.\"),\n }),\n handler: async ({ context, query }) => {\n const networkId = query.networkId?.trim() || context.networkId;\n const targetUserId = query.userId?.trim();\n\n if (!networkId || !UUID_REGEX.test(networkId)) {\n return error(\"Valid networkId required. Use the exact UUID from read_networks.\");\n }\n if (!targetUserId) {\n return error(\"userId is required.\");\n }\n\n // Strict scope enforcement: when chat is index-scoped, only allow that index\n if (context.networkId && networkId !== context.networkId) {\n return error(\n `This chat is scoped to ${context.indexName ?? 'this index'}. You can only manage members of this community.`\n );\n }\n\n const _deleteMembershipGraphStart = Date.now();\n const _deleteMembershipTraceEmitter = requestContext.getStore()?.traceEmitter;\n _deleteMembershipTraceEmitter?.({ type: \"graph_start\", name: \"network_membership\" });\n const result = await graphs.networkMembership.invoke({\n userId: context.userId,\n networkId,\n targetUserId,\n operationMode: 'delete' as const,\n });\n const _deleteMembershipGraphMs = Date.now() - _deleteMembershipGraphStart;\n _deleteMembershipTraceEmitter?.({ type: \"graph_end\", name: \"network_membership\", durationMs: _deleteMembershipGraphMs });\n\n if (result.mutationResult) {\n if (result.mutationResult.success) {\n return success({\n removed: true,\n message: result.mutationResult.message,\n _graphTimings: [{ name: 'network_membership', durationMs: _deleteMembershipGraphMs, agents: result.agentTimings ?? [] }],\n });\n }\n return error(result.mutationResult.error || \"Failed to remove member.\");\n }\n return error(\"Failed to remove member.\");\n },\n });\n\n return [readIndexes, readIndexMemberships, updateNetwork, createNetwork, deleteNetwork, createNetworkMembership, deleteNetworkMembership] as const;\n}\n"]}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { ChatContextDigest } from "../shared/schemas/chat-context.schema.js";
|
|
6
6
|
import type { DiscoveryNegotiationDigest } from "../shared/schemas/negotiation-digest.schema.js";
|
|
7
|
-
import type { SourceProfileData } from "./opportunity.state.js";
|
|
8
7
|
import type { DiscoveryQuestionInput, DiscoverySummary } from "./question.prompt.js";
|
|
9
8
|
export interface BuildDiscoveryQuestionInputArgs {
|
|
10
9
|
query: string;
|
|
11
|
-
|
|
10
|
+
/** The seeker's global user_context paragraph (profile-replacing identity text). */
|
|
11
|
+
userContext: string;
|
|
12
12
|
negotiationDigests: DiscoveryNegotiationDigest[];
|
|
13
13
|
summary: DiscoverySummary;
|
|
14
14
|
chatContext?: ChatContextDigest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-question.helper.d.ts","sourceRoot":"/","sources":["opportunity/discovery-question.helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AACjG,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"discovery-question.helper.d.ts","sourceRoot":"/","sources":["opportunity/discovery-question.helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AACjG,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,0BAA0B,EAAE,CAAC;IACjD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qGAAqG;AACrG,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,+BAA+B,GAAG,sBAAsB,CASzG"}
|
|
@@ -6,27 +6,11 @@
|
|
|
6
6
|
export function buildDiscoveryQuestionInput(args) {
|
|
7
7
|
return {
|
|
8
8
|
query: args.query,
|
|
9
|
-
|
|
9
|
+
userContext: args.userContext,
|
|
10
10
|
negotiationDigests: args.negotiationDigests,
|
|
11
11
|
summary: args.summary,
|
|
12
12
|
...(args.chatContext !== undefined ? { chatContext: args.chatContext } : {}),
|
|
13
13
|
now: args.now,
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
function extractSourceProfile(profile) {
|
|
17
|
-
if (!profile)
|
|
18
|
-
return {};
|
|
19
|
-
const out = {};
|
|
20
|
-
if (profile.identity?.name)
|
|
21
|
-
out.name = profile.identity.name;
|
|
22
|
-
if (profile.identity?.bio)
|
|
23
|
-
out.bio = profile.identity.bio;
|
|
24
|
-
if (profile.identity?.location)
|
|
25
|
-
out.location = profile.identity.location;
|
|
26
|
-
if (profile.attributes?.skills?.length)
|
|
27
|
-
out.skills = profile.attributes.skills;
|
|
28
|
-
if (profile.attributes?.interests?.length)
|
|
29
|
-
out.interests = profile.attributes.interests;
|
|
30
|
-
return out;
|
|
31
|
-
}
|
|
32
16
|
//# sourceMappingURL=discovery-question.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-question.helper.js","sourceRoot":"/","sources":["opportunity/discovery-question.helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,qGAAqG;AACrG,MAAM,UAAU,2BAA2B,CAAC,IAAqC;IAC/E,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,
|
|
1
|
+
{"version":3,"file":"discovery-question.helper.js","sourceRoot":"/","sources":["opportunity/discovery-question.helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,qGAAqG;AACrG,MAAM,UAAU,2BAA2B,CAAC,IAAqC;IAC/E,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Pure mapper from opportunity-graph outputs + optional chat digest to a\n * `DiscoveryQuestionInput`. No I/O. Side-effect-free.\n */\n\nimport type { ChatContextDigest } from \"../shared/schemas/chat-context.schema.js\";\nimport type { DiscoveryNegotiationDigest } from \"../shared/schemas/negotiation-digest.schema.js\";\nimport type { DiscoveryQuestionInput, DiscoverySummary } from \"./question.prompt.js\";\n\nexport interface BuildDiscoveryQuestionInputArgs {\n query: string;\n /** The seeker's global user_context paragraph (profile-replacing identity text). */\n userContext: string;\n negotiationDigests: DiscoveryNegotiationDigest[];\n summary: DiscoverySummary;\n chatContext?: ChatContextDigest;\n now: string;\n}\n\n/** @deprecated Use QuestionerAgent discovery preset instead. Will be removed in a future version. */\nexport function buildDiscoveryQuestionInput(args: BuildDiscoveryQuestionInputArgs): DiscoveryQuestionInput {\n return {\n query: args.query,\n userContext: args.userContext,\n negotiationDigests: args.negotiationDigests,\n summary: args.summary,\n ...(args.chatContext !== undefined ? { chatContext: args.chatContext } : {}),\n now: args.now,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opportunity.discover.d.ts","sourceRoot":"/","sources":["opportunity/opportunity.discover.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"opportunity.discover.d.ts","sourceRoot":"/","sources":["opportunity/opportunity.discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -463,6 +463,9 @@ export async function runDiscoverFromQuery(input) {
|
|
|
463
463
|
query: queryOrEmpty,
|
|
464
464
|
questionerEnqueue: input.questionerEnqueue,
|
|
465
465
|
userId: input.userId,
|
|
466
|
+
userContext: input.userId
|
|
467
|
+
? ((await input.database.getUserContext(input.userId, null))?.text ?? '')
|
|
468
|
+
: '',
|
|
466
469
|
});
|
|
467
470
|
return { negotiationDigests, questionPayload };
|
|
468
471
|
});
|
|
@@ -697,7 +700,7 @@ async function maybeBuildQuestions(args) {
|
|
|
697
700
|
};
|
|
698
701
|
const enqueueInput = buildDiscoveryQuestionInput({
|
|
699
702
|
query: args.query,
|
|
700
|
-
|
|
703
|
+
userContext: args.userContext ?? '',
|
|
701
704
|
negotiationDigests: args.negotiationDigests,
|
|
702
705
|
summary,
|
|
703
706
|
chatContext,
|
|
@@ -737,7 +740,7 @@ async function maybeBuildQuestions(args) {
|
|
|
737
740
|
};
|
|
738
741
|
const input = buildDiscoveryQuestionInput({
|
|
739
742
|
query: args.query,
|
|
740
|
-
|
|
743
|
+
userContext: args.userContext ?? '',
|
|
741
744
|
negotiationDigests,
|
|
742
745
|
summary,
|
|
743
746
|
chatContext,
|