@indexnetwork/protocol 4.5.0-rc.325.1 → 4.5.0-rc.327.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/agent/tests/fakes.d.ts +1 -1
- package/dist/agent/tests/fakes.d.ts.map +1 -1
- package/dist/agent/tests/fakes.js +2 -2
- package/dist/agent/tests/fakes.js.map +1 -1
- package/dist/chat/chat.agent.d.ts +8 -2
- package/dist/chat/chat.agent.d.ts.map +1 -1
- package/dist/chat/chat.agent.js +26 -14
- package/dist/chat/chat.agent.js.map +1 -1
- package/dist/chat/chat.graph.d.ts +6 -1
- package/dist/chat/chat.graph.d.ts.map +1 -1
- package/dist/chat/chat.graph.js +7 -2
- package/dist/chat/chat.graph.js.map +1 -1
- package/dist/chat/chat.persona.d.ts +56 -0
- package/dist/chat/chat.persona.d.ts.map +1 -0
- package/dist/chat/chat.persona.js +26 -0
- package/dist/chat/chat.persona.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/negotiation/negotiation.graph.js +2 -2
- package/dist/negotiation/negotiation.graph.js.map +1 -1
- package/dist/opportunity/opportunity.graph.d.ts +1 -1
- package/dist/opportunity/opportunity.graph.js +8 -8
- package/dist/opportunity/opportunity.graph.js.map +1 -1
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +6 -5
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/agent-dispatcher.interface.js.map +1 -1
- package/dist/shared/interfaces/agent.interface.d.ts +3 -2
- package/dist/shared/interfaces/agent.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/agent.interface.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.tools.js","sourceRoot":"/","sources":["agent/agent.tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport type { DefineTool, ToolDeps } from '../shared/agent/tool.helpers.js';\nimport { error, success } from '../shared/agent/tool.helpers.js';\nimport { protocolLogger } from '../shared/observability/protocol.logger.js';\n\nconst logger = protocolLogger('ChatTools:Agent');\n\nconst AGENT_ACTIONS = [\n 'manage:profile',\n 'manage:intents',\n 'manage:networks',\n 'manage:contacts',\n 'manage:opportunities',\n 'manage:negotiations',\n] as const;\n\nfunction invalidActionMessage(action: string) {\n return `Invalid action: ${action}. Valid actions: ${AGENT_ACTIONS.join(', ')}`;\n}\n\nfunction isValidAction(action: string): action is (typeof AGENT_ACTIONS)[number] {\n return (AGENT_ACTIONS as readonly string[]).includes(action);\n}\n\nfunction requireAgentDatabase(deps: ToolDeps) {\n if (!deps.agentDatabase) {\n return null;\n }\n\n return deps.agentDatabase;\n}\n\nfunction ensureAgentScopedAccess(context: { agentId?: string }, requestedAgentId: string): string | null {\n if (context.agentId && context.agentId !== requestedAgentId) {\n return 'This agent can only manage its own registration.';\n }\n\n return null;\n}\n\nfunction sanitizeAgentForOutput<T extends { transports?: Array<{ channel: string; config: Record<string, unknown> }> }>(agent: T): T {\n return {\n ...agent,\n transports: agent.transports,\n };\n}\n\nfunction sanitizeAgentName(name: string): string | null {\n const cleanName = name.trim();\n return cleanName ? cleanName : null;\n}\n\nfunction normalizePermissions(permissions: string[] | undefined): string[] {\n return [...new Set((permissions ?? []).map((action) => action.trim()).filter(Boolean))];\n}\n\nexport function createAgentTools(defineTool: DefineTool, deps: ToolDeps) {\n const agentDb = requireAgentDatabase(deps);\n if (!agentDb) {\n return [];\n }\n\n const registerAgent = defineTool({\n name: 'register_agent',\n description:\n 'Register a new personal agent for the current user. Optionally configure initial permissions. ' +\n 'Use this when connecting an external agent to Index.',\n querySchema: z.object({\n name: z.string().min(1).describe('Display name for the agent.'),\n description: z.string().optional().describe('What the agent does.'),\n permissions: z.array(z.string()).optional().describe('Optional initial permission actions to grant.'),\n }),\n handler: async ({ context, query }) => {\n if (context.agentId) {\n return error(\n 'Agent registration must be done from a user session (web UI or personal API key), ' +\n 'not from within an existing agent context. To register a new agent, visit the Index web app.'\n );\n }\n\n try {\n const name = sanitizeAgentName(query.name);\n if (!name) {\n return error('Agent name is required.');\n }\n\n const permissions = normalizePermissions(query.permissions);\n for (const permission of permissions) {\n if (!isValidAction(permission)) {\n return error(invalidActionMessage(permission));\n }\n }\n\n const agent = await agentDb.createAgent({\n ownerId: context.userId,\n name,\n description: query.description?.trim() || undefined,\n type: 'personal',\n });\n\n try {\n if (permissions.length > 0) {\n await agentDb.grantPermission({\n agentId: agent.id,\n userId: context.userId,\n scope: 'global',\n actions: permissions,\n });\n }\n } catch (setupError) {\n try {\n await agentDb.deleteAgent(agent.id);\n } catch {\n // Best-effort cleanup to avoid leaving partially registered agents behind.\n }\n\n throw setupError;\n }\n\n const fullAgent = await agentDb.getAgentWithRelations(agent.id);\n return success({\n message: `Agent \"${agent.name}\" registered successfully.`,\n agent: sanitizeAgentForOutput(fullAgent ?? ({ ...agent, transports: [], permissions: [] })),\n });\n } catch (err) {\n logger.error('Failed to register agent', { err });\n return error('Failed to register agent. Please try again.');\n }\n },\n });\n\n const listAgents = defineTool({\n name: 'list_agents',\n description: 'List all agents the current user owns or has authorized.',\n querySchema: z.object({}),\n handler: async ({ context }) => {\n try {\n const agents = await agentDb.listAgentsForUser(context.userId);\n const filteredAgents = context.agentId\n ? agents.filter((agent) => agent.id === context.agentId)\n : agents;\n return success({\n agents: filteredAgents.map((agent) => sanitizeAgentForOutput(agent)),\n count: filteredAgents.length,\n });\n } catch (err) {\n logger.error('Failed to list agents', { err });\n return error('Failed to list agents. Please try again.');\n }\n },\n });\n\n const updateAgent = defineTool({\n name: 'update_agent',\n description: 'Update an agent name, description, or status.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID to update.'),\n name: z.string().optional().describe('Updated display name.'),\n description: z.string().optional().describe('Updated description.'),\n status: z.enum(['active', 'inactive']).optional().describe('Updated status.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n try {\n const agent = await agentDb.getAgent(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n\n if (agent.type === 'system') {\n return error('System agents cannot be modified');\n }\n\n const updates: { name?: string; description?: string | null; status?: 'active' | 'inactive' } = {};\n if (query.name !== undefined) {\n const name = query.name.trim();\n if (!name) {\n return error('Agent name is required');\n }\n updates.name = name;\n }\n if (query.description !== undefined) {\n updates.description = query.description.trim() || null;\n }\n if (query.status) {\n updates.status = query.status;\n }\n\n if (Object.keys(updates).length === 0) {\n return error('At least one field is required.');\n }\n\n const updated = await agentDb.updateAgent(query.agent_id, updates);\n if (!updated) {\n return error('Agent not found');\n }\n\n const fullAgent = await agentDb.getAgentWithRelations(query.agent_id);\n return success({\n message: 'Agent updated.',\n agent: sanitizeAgentForOutput(fullAgent ?? ({ ...updated, transports: [], permissions: [] })),\n });\n } catch (err) {\n logger.error('Failed to update agent', { err });\n return error('Failed to update agent. Please try again.');\n }\n },\n });\n\n const deleteAgent = defineTool({\n name: 'delete_agent',\n description: 'Soft-delete a personal agent and deactivate its transports.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID to delete.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n try {\n const agent = await agentDb.getAgent(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n if (agent.type === 'system') {\n return error('System agents cannot be deleted');\n }\n\n await agentDb.deleteAgent(query.agent_id);\n return success({ message: `Agent \"${agent.name}\" deleted.` });\n } catch (err) {\n logger.error('Failed to delete agent', { err });\n return error('Failed to delete agent. Please try again.');\n }\n },\n });\n\n const grantAgentPermission = defineTool({\n name: 'grant_agent_permission',\n description: 'Grant one or more permissions to an agent for the current user. ' +\n 'Valid actions: manage:profile, manage:intents, manage:networks, manage:contacts, manage:opportunities, manage:negotiations.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID to grant permissions to.'),\n actions: z.array(z.string()).min(1).describe('Permission actions to grant. Valid values: manage:profile, manage:intents, manage:networks, manage:contacts, manage:opportunities, manage:negotiations.'),\n scope: z.enum(['global', 'node', 'network']).optional().describe('Optional permission scope.'),\n scope_id: z.string().optional().describe('Scope target ID for node/network scopes.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n const actions = normalizePermissions(query.actions);\n if (actions.length === 0) {\n return error('At least one non-empty action is required.');\n }\n\n for (const action of actions) {\n if (!isValidAction(action)) {\n return error(invalidActionMessage(action));\n }\n }\n\n if ((query.scope === 'network' || query.scope === 'node') && !query.scope_id?.trim()) {\n return error(`scope_id is required for ${query.scope} permissions.`);\n }\n\n try {\n const agent = await agentDb.getAgent(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n\n const permission = await agentDb.grantPermission({\n agentId: query.agent_id,\n userId: context.userId,\n scope: query.scope,\n scopeId: query.scope === 'global' || query.scope === undefined ? undefined : query.scope_id?.trim(),\n actions,\n });\n\n return success({ message: 'Permission granted.', permission });\n } catch (err) {\n logger.error('Failed to grant permission', { err });\n return error('Failed to grant permission. Please try again.');\n }\n },\n });\n\n const revokeAgentPermission = defineTool({\n name: 'revoke_agent_permission',\n description: 'Revoke a specific permission from an agent.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID that owns the permission.'),\n permission_id: z.string().min(1).describe('The permission ID to revoke.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n try {\n const agent = await agentDb.getAgentWithRelations(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n\n const permission = agent.permissions.find((item) => item.id === query.permission_id);\n if (!permission) {\n return error('Permission not found');\n }\n\n await agentDb.revokePermission(query.permission_id);\n return success({ message: 'Permission revoked.' });\n } catch (err) {\n logger.error('Failed to revoke permission', { err });\n return error('Failed to revoke permission. Please try again.');\n }\n },\n });\n\n return [\n registerAgent,\n listAgents,\n updateAgent,\n deleteAgent,\n grantAgentPermission,\n revokeAgentPermission,\n ] as const;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent.tools.js","sourceRoot":"/","sources":["agent/agent.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAE5E,MAAM,MAAM,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAEjD,MAAM,aAAa,GAAG;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;CACb,CAAC;AAEX,SAAS,oBAAoB,CAAC,MAAc;IAC1C,OAAO,mBAAmB,MAAM,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,OAAQ,aAAmC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAc;IAC1C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA6B,EAAE,gBAAwB;IACtF,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAC5D,OAAO,kDAAkD,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAyF,KAAQ;IAC9H,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAiC;IAC7D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAsB,EAAE,IAAc;IACrE,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC;QAC/B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,gGAAgG;YAChG,sDAAsD;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACnE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;SACtG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,KAAK,CACV,oFAAoF;oBACpF,8FAA8F,CAC/F,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC1C,CAAC;gBAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC5D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACrC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC/B,OAAO,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;oBACtC,OAAO,EAAE,OAAO,CAAC,MAAM;oBACvB,IAAI;oBACJ,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,SAAS;oBACnD,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;gBAEH,IAAI,CAAC;oBACH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,OAAO,CAAC,eAAe,CAAC;4BAC5B,OAAO,EAAE,KAAK,CAAC,EAAE;4BACjB,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,KAAK,EAAE,QAAQ;4BACf,OAAO,EAAE,WAAW;yBACrB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACtC,CAAC;oBAAC,MAAM,CAAC;wBACP,2EAA2E;oBAC7E,CAAC;oBAED,MAAM,UAAU,CAAC;gBACnB,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChE,OAAO,OAAO,CAAC;oBACb,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,4BAA4B;oBACzD,KAAK,EAAE,sBAAsB,CAAC,SAAS,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC5F,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClD,OAAO,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,UAAU,CAAC;QAC5B,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/D,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO;oBACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC;oBACxD,CAAC,CAAC,MAAM,CAAC;gBACX,OAAO,OAAO,CAAC;oBACb,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;oBACpE,KAAK,EAAE,cAAc,CAAC,MAAM;iBAC7B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC/C,OAAO,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,UAAU,CAAC;QAC7B,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACnE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAC9E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/C,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClC,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAO,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,OAAO,GAAmF,EAAE,CAAC;gBACnG,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,KAAK,CAAC,wBAAwB,CAAC,CAAC;oBACzC,CAAC;oBACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACpC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;gBACzD,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAChC,CAAC;gBAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAClD,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnE,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClC,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtE,OAAO,OAAO,CAAC;oBACb,OAAO,EAAE,gBAAgB;oBACzB,KAAK,EAAE,sBAAsB,CAAC,SAAS,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC9F,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,UAAU,CAAC;QAC7B,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAChE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/C,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClC,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAO,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAClD,CAAC;gBAED,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC1C,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,UAAU,CAAC;QACtC,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,kEAAkE;YAC7E,6HAA6H;QAC/H,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yJAAyJ,CAAC;YACvM,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC9F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACrF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC7D,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,OAAO,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrF,OAAO,KAAK,CAAC,4BAA4B,KAAK,CAAC,KAAK,eAAe,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/C,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClC,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;oBAC/C,OAAO,EAAE,KAAK,CAAC,QAAQ;oBACvB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;oBACnG,OAAO;iBACR,CAAC,CAAC;gBAEH,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,OAAO,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,UAAU,CAAC;QACvC,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAC9E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SAC1E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAClE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/C,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClC,CAAC;gBAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC;gBACrF,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACvC,CAAC;gBAED,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,UAAU;QACV,WAAW;QACX,WAAW;QACX,oBAAoB;QACpB,qBAAqB;KACb,CAAC;AACb,CAAC","sourcesContent":["import { z } from 'zod';\n\nimport type { DefineTool, ToolDeps } from '../shared/agent/tool.helpers.js';\nimport { error, success } from '../shared/agent/tool.helpers.js';\nimport { protocolLogger } from '../shared/observability/protocol.logger.js';\n\nconst logger = protocolLogger('ChatTools:Agent');\n\nconst AGENT_ACTIONS = [\n 'manage:profile',\n 'manage:intents',\n 'manage:networks',\n 'manage:contacts',\n 'manage:opportunities',\n 'manage:negotiations',\n] as const;\n\nfunction invalidActionMessage(action: string) {\n return `Invalid action: ${action}. Valid actions: ${AGENT_ACTIONS.join(', ')}`;\n}\n\nfunction isValidAction(action: string): action is (typeof AGENT_ACTIONS)[number] {\n return (AGENT_ACTIONS as readonly string[]).includes(action);\n}\n\nfunction requireAgentDatabase(deps: ToolDeps) {\n if (!deps.agentDatabase) {\n return null;\n }\n\n return deps.agentDatabase;\n}\n\nfunction ensureAgentScopedAccess(context: { agentId?: string }, requestedAgentId: string): string | null {\n if (context.agentId && context.agentId !== requestedAgentId) {\n return 'This agent can only manage its own registration.';\n }\n\n return null;\n}\n\nfunction sanitizeAgentForOutput<T extends { transports?: Array<{ channel: string; config: Record<string, unknown> }> }>(agent: T): T {\n return {\n ...agent,\n transports: agent.transports,\n };\n}\n\nfunction sanitizeAgentName(name: string): string | null {\n const cleanName = name.trim();\n return cleanName ? cleanName : null;\n}\n\nfunction normalizePermissions(permissions: string[] | undefined): string[] {\n return [...new Set((permissions ?? []).map((action) => action.trim()).filter(Boolean))];\n}\n\nexport function createAgentTools(defineTool: DefineTool, deps: ToolDeps) {\n const agentDb = requireAgentDatabase(deps);\n if (!agentDb) {\n return [];\n }\n\n const registerAgent = defineTool({\n name: 'register_agent',\n description:\n 'Register a new personal agent for the current user. Optionally configure initial permissions. ' +\n 'Use this when connecting an external agent to Index.',\n querySchema: z.object({\n name: z.string().min(1).describe('Display name for the agent.'),\n description: z.string().optional().describe('What the agent does.'),\n permissions: z.array(z.string()).optional().describe('Optional initial permission actions to grant.'),\n }),\n handler: async ({ context, query }) => {\n if (context.agentId) {\n return error(\n 'Agent registration must be done from a user session (web UI or personal API key), ' +\n 'not from within an existing agent context. To register a new agent, visit the Index web app.'\n );\n }\n\n try {\n const name = sanitizeAgentName(query.name);\n if (!name) {\n return error('Agent name is required.');\n }\n\n const permissions = normalizePermissions(query.permissions);\n for (const permission of permissions) {\n if (!isValidAction(permission)) {\n return error(invalidActionMessage(permission));\n }\n }\n\n const agent = await agentDb.createAgent({\n ownerId: context.userId,\n name,\n description: query.description?.trim() || undefined,\n type: 'external',\n });\n\n try {\n if (permissions.length > 0) {\n await agentDb.grantPermission({\n agentId: agent.id,\n userId: context.userId,\n scope: 'global',\n actions: permissions,\n });\n }\n } catch (setupError) {\n try {\n await agentDb.deleteAgent(agent.id);\n } catch {\n // Best-effort cleanup to avoid leaving partially registered agents behind.\n }\n\n throw setupError;\n }\n\n const fullAgent = await agentDb.getAgentWithRelations(agent.id);\n return success({\n message: `Agent \"${agent.name}\" registered successfully.`,\n agent: sanitizeAgentForOutput(fullAgent ?? ({ ...agent, transports: [], permissions: [] })),\n });\n } catch (err) {\n logger.error('Failed to register agent', { err });\n return error('Failed to register agent. Please try again.');\n }\n },\n });\n\n const listAgents = defineTool({\n name: 'list_agents',\n description: 'List all agents the current user owns or has authorized.',\n querySchema: z.object({}),\n handler: async ({ context }) => {\n try {\n const agents = await agentDb.listAgentsForUser(context.userId);\n const filteredAgents = context.agentId\n ? agents.filter((agent) => agent.id === context.agentId)\n : agents;\n return success({\n agents: filteredAgents.map((agent) => sanitizeAgentForOutput(agent)),\n count: filteredAgents.length,\n });\n } catch (err) {\n logger.error('Failed to list agents', { err });\n return error('Failed to list agents. Please try again.');\n }\n },\n });\n\n const updateAgent = defineTool({\n name: 'update_agent',\n description: 'Update an agent name, description, or status.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID to update.'),\n name: z.string().optional().describe('Updated display name.'),\n description: z.string().optional().describe('Updated description.'),\n status: z.enum(['active', 'inactive']).optional().describe('Updated status.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n try {\n const agent = await agentDb.getAgent(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n\n if (agent.type === 'system') {\n return error('System agents cannot be modified');\n }\n\n const updates: { name?: string; description?: string | null; status?: 'active' | 'inactive' } = {};\n if (query.name !== undefined) {\n const name = query.name.trim();\n if (!name) {\n return error('Agent name is required');\n }\n updates.name = name;\n }\n if (query.description !== undefined) {\n updates.description = query.description.trim() || null;\n }\n if (query.status) {\n updates.status = query.status;\n }\n\n if (Object.keys(updates).length === 0) {\n return error('At least one field is required.');\n }\n\n const updated = await agentDb.updateAgent(query.agent_id, updates);\n if (!updated) {\n return error('Agent not found');\n }\n\n const fullAgent = await agentDb.getAgentWithRelations(query.agent_id);\n return success({\n message: 'Agent updated.',\n agent: sanitizeAgentForOutput(fullAgent ?? ({ ...updated, transports: [], permissions: [] })),\n });\n } catch (err) {\n logger.error('Failed to update agent', { err });\n return error('Failed to update agent. Please try again.');\n }\n },\n });\n\n const deleteAgent = defineTool({\n name: 'delete_agent',\n description: 'Soft-delete a personal agent and deactivate its transports.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID to delete.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n try {\n const agent = await agentDb.getAgent(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n if (agent.type === 'system') {\n return error('System agents cannot be deleted');\n }\n\n await agentDb.deleteAgent(query.agent_id);\n return success({ message: `Agent \"${agent.name}\" deleted.` });\n } catch (err) {\n logger.error('Failed to delete agent', { err });\n return error('Failed to delete agent. Please try again.');\n }\n },\n });\n\n const grantAgentPermission = defineTool({\n name: 'grant_agent_permission',\n description: 'Grant one or more permissions to an agent for the current user. ' +\n 'Valid actions: manage:profile, manage:intents, manage:networks, manage:contacts, manage:opportunities, manage:negotiations.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID to grant permissions to.'),\n actions: z.array(z.string()).min(1).describe('Permission actions to grant. Valid values: manage:profile, manage:intents, manage:networks, manage:contacts, manage:opportunities, manage:negotiations.'),\n scope: z.enum(['global', 'node', 'network']).optional().describe('Optional permission scope.'),\n scope_id: z.string().optional().describe('Scope target ID for node/network scopes.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n const actions = normalizePermissions(query.actions);\n if (actions.length === 0) {\n return error('At least one non-empty action is required.');\n }\n\n for (const action of actions) {\n if (!isValidAction(action)) {\n return error(invalidActionMessage(action));\n }\n }\n\n if ((query.scope === 'network' || query.scope === 'node') && !query.scope_id?.trim()) {\n return error(`scope_id is required for ${query.scope} permissions.`);\n }\n\n try {\n const agent = await agentDb.getAgent(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n\n const permission = await agentDb.grantPermission({\n agentId: query.agent_id,\n userId: context.userId,\n scope: query.scope,\n scopeId: query.scope === 'global' || query.scope === undefined ? undefined : query.scope_id?.trim(),\n actions,\n });\n\n return success({ message: 'Permission granted.', permission });\n } catch (err) {\n logger.error('Failed to grant permission', { err });\n return error('Failed to grant permission. Please try again.');\n }\n },\n });\n\n const revokeAgentPermission = defineTool({\n name: 'revoke_agent_permission',\n description: 'Revoke a specific permission from an agent.',\n querySchema: z.object({\n agent_id: z.string().min(1).describe('The agent ID that owns the permission.'),\n permission_id: z.string().min(1).describe('The permission ID to revoke.'),\n }),\n handler: async ({ context, query }) => {\n const scopeError = ensureAgentScopedAccess(context, query.agent_id);\n if (scopeError) {\n return error(scopeError);\n }\n\n try {\n const agent = await agentDb.getAgentWithRelations(query.agent_id);\n if (!agent || agent.ownerId !== context.userId) {\n return error('Agent not found');\n }\n\n const permission = agent.permissions.find((item) => item.id === query.permission_id);\n if (!permission) {\n return error('Permission not found');\n }\n\n await agentDb.revokePermission(query.permission_id);\n return success({ message: 'Permission revoked.' });\n } catch (err) {\n logger.error('Failed to revoke permission', { err });\n return error('Failed to revoke permission. Please try again.');\n }\n },\n });\n\n return [\n registerAgent,\n listAgents,\n updateAgent,\n deleteAgent,\n grantAgentPermission,\n revokeAgentPermission,\n ] as const;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakes.d.ts","sourceRoot":"/","sources":["agent/tests/fakes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,WAAW,EAAE,oBAAoB,EAAoF,MAAM,4CAA4C,CAAC;AAE5N,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"fakes.d.ts","sourceRoot":"/","sources":["agent/tests/fakes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,WAAW,EAAE,oBAAoB,EAAoF,MAAM,4CAA4C,CAAC;AAE5N,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACjE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAAC;CAChE;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAsL/C"}
|
|
@@ -45,7 +45,7 @@ export function createFakeAgentDb() {
|
|
|
45
45
|
ownerId: input.ownerId,
|
|
46
46
|
name: input.name,
|
|
47
47
|
description: input.description ?? null,
|
|
48
|
-
type: input.type ?? '
|
|
48
|
+
type: input.type ?? 'external',
|
|
49
49
|
status: input.status ?? 'active',
|
|
50
50
|
metadata: {},
|
|
51
51
|
createdAt: now,
|
|
@@ -61,7 +61,7 @@ export function createFakeAgentDb() {
|
|
|
61
61
|
ownerId: input.ownerId,
|
|
62
62
|
name: input.name,
|
|
63
63
|
description: input.description ?? null,
|
|
64
|
-
type: input.type
|
|
64
|
+
type: input.type,
|
|
65
65
|
status: 'active',
|
|
66
66
|
metadata: input.metadata ?? {},
|
|
67
67
|
createdAt: now,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakes.js","sourceRoot":"/","sources":["agent/tests/fakes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Minimal in-memory fake of the {@link AgentDatabase} interface used by agent\n * tool tests. Only the surface area exercised by the specs in this folder is\n * implemented — unused methods throw if called so tests fail loudly.\n */\n\nimport type { AgentDatabase, AgentPermissionRecord, AgentRecord, AgentTransportRecord, AgentWithRelations, CreateAgentInput, CreateTransportInput, GrantPermissionInput } from '../../shared/interfaces/agent.interface.js';\n\nexport interface SeedAgentInput {\n id: string;\n ownerId: string;\n name: string;\n type?: 'personal' | 'system';\n description?: string | null;\n status?: 'active' | 'inactive';\n}\n\nexport interface FakeAgentDb extends AgentDatabase {\n seedAgent(input: SeedAgentInput): Promise<AgentRecord>;\n getPermissionsForAgent(agentId: string): AgentPermissionRecord[];\n getTransportsForAgent(agentId: string): AgentTransportRecord[];\n}\n\nfunction nextId(prefix: string, counter: { value: number }): string {\n counter.value += 1;\n return `${prefix}-${counter.value}`;\n}\n\n/**\n * Creates an in-memory agent database fake for unit tests. Only the methods\n * exercised by the agent tool specs are implemented; the rest throw.\n */\nexport function createFakeAgentDb(): FakeAgentDb {\n const agents = new Map<string, AgentRecord>();\n const transports = new Map<string, AgentTransportRecord>();\n const permissions = new Map<string, AgentPermissionRecord>();\n const agentCounter = { value: 0 };\n const transportCounter = { value: 0 };\n const permissionCounter = { value: 0 };\n\n function buildRelations(agent: AgentRecord): AgentWithRelations {\n const agentTransports = [...transports.values()].filter((t) => t.agentId === agent.id);\n const agentPermissions = [...permissions.values()].filter((p) => p.agentId === agent.id);\n return {\n ...agent,\n transports: agentTransports,\n permissions: agentPermissions,\n };\n }\n\n const db: FakeAgentDb = {\n getPermissionsForAgent(agentId: string) {\n return [...permissions.values()]\n .filter((permission) => permission.agentId === agentId)\n .map((permission) => ({ ...permission, actions: [...permission.actions] }));\n },\n\n getTransportsForAgent(agentId: string) {\n return [...transports.values()]\n .filter((transport) => transport.agentId === agentId)\n .map((transport) => ({ ...transport }));\n },\n\n async seedAgent(input: SeedAgentInput) {\n const now = new Date();\n const agent: AgentRecord = {\n id: input.id,\n ownerId: input.ownerId,\n name: input.name,\n description: input.description ?? null,\n type: input.type ?? 'personal',\n status: input.status ?? 'active',\n metadata: {},\n createdAt: now,\n updatedAt: now,\n };\n agents.set(agent.id, agent);\n return agent;\n },\n\n async createAgent(input: CreateAgentInput) {\n const now = new Date();\n const agent: AgentRecord = {\n id: nextId('agent', agentCounter),\n ownerId: input.ownerId,\n name: input.name,\n description: input.description ?? null,\n type: input.type ?? 'personal',\n status: 'active',\n metadata: input.metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n agents.set(agent.id, agent);\n return agent;\n },\n\n async getAgent(agentId: string) {\n return agents.get(agentId) ?? null;\n },\n\n async getAgentWithRelations(agentId: string) {\n const agent = agents.get(agentId);\n if (!agent) return null;\n return buildRelations(agent);\n },\n\n async updateAgent(agentId, updates) {\n const existing = agents.get(agentId);\n if (!existing) return null;\n const updated: AgentRecord = {\n ...existing,\n ...('name' in updates && updates.name !== undefined ? { name: updates.name } : {}),\n ...('description' in updates && updates.description !== undefined ? { description: updates.description } : {}),\n ...('status' in updates && updates.status !== undefined ? { status: updates.status } : {}),\n ...('metadata' in updates && updates.metadata !== undefined ? { metadata: updates.metadata } : {}),\n updatedAt: new Date(),\n };\n agents.set(agentId, updated);\n return updated;\n },\n\n async deleteAgent(agentId: string) {\n agents.delete(agentId);\n for (const [id, transport] of transports) {\n if (transport.agentId === agentId) transports.delete(id);\n }\n for (const [id, permission] of permissions) {\n if (permission.agentId === agentId) permissions.delete(id);\n }\n },\n\n async listAgentsForUser(userId: string) {\n return [...agents.values()]\n .filter((agent) => agent.ownerId === userId)\n .map((agent) => buildRelations(agent));\n },\n\n async createTransport(input: CreateTransportInput) {\n const transport: AgentTransportRecord = {\n id: nextId('transport', transportCounter),\n agentId: input.agentId,\n channel: input.channel,\n config: input.config ?? {},\n priority: input.priority ?? 0,\n active: true,\n failureCount: 0,\n };\n transports.set(transport.id, transport);\n return transport;\n },\n\n async deleteTransport(transportId: string) {\n transports.delete(transportId);\n },\n\n async recordTransportFailure(transportId: string) {\n const transport = transports.get(transportId);\n if (transport) {\n transport.failureCount += 1;\n }\n },\n\n async recordTransportSuccess(transportId: string) {\n const transport = transports.get(transportId);\n if (transport) {\n transport.failureCount = 0;\n }\n },\n\n async grantPermission(input: GrantPermissionInput) {\n const permission: AgentPermissionRecord = {\n id: nextId('permission', permissionCounter),\n agentId: input.agentId,\n userId: input.userId,\n scope: input.scope ?? 'global',\n scopeId: input.scopeId ?? null,\n actions: [...input.actions],\n createdAt: new Date(),\n };\n permissions.set(permission.id, permission);\n return permission;\n },\n\n async revokePermission(permissionId: string) {\n permissions.delete(permissionId);\n },\n\n async hasPermission(agentId, userId, action, scope) {\n const requestedScope = scope?.type ?? 'global';\n const requestedScopeId = scope?.id ?? null;\n return [...permissions.values()].some(\n (permission) =>\n permission.agentId === agentId &&\n permission.userId === userId &&\n permission.scope === requestedScope &&\n (requestedScope === 'global' || permission.scopeId === requestedScopeId) &&\n permission.actions.includes(action),\n );\n },\n\n async findAuthorizedAgents() {\n throw new Error('findAuthorizedAgents is not implemented in the fake agent DB.');\n },\n\n getSystemAgentIds() {\n return {\n chatOrchestrator: '00000000-0000-0000-0000-000000000001',\n negotiator: '00000000-0000-0000-0000-000000000002',\n };\n },\n };\n\n return db;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fakes.js","sourceRoot":"/","sources":["agent/tests/fakes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,SAAS,MAAM,CAAC,MAAc,EAAE,OAA0B;IACxD,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACnB,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC7D,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAClC,MAAM,gBAAgB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACtC,MAAM,iBAAiB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAEvC,SAAS,cAAc,CAAC,KAAkB;QACxC,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,gBAAgB,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO;YACL,GAAG,KAAK;YACR,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,gBAAgB;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAgB;QACtB,sBAAsB,CAAC,OAAe;YACpC,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;iBAC7B,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC;iBACtD,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,qBAAqB,CAAC,OAAe;YACnC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC;iBACpD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,KAAqB;YACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAgB;gBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;gBACtC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,UAAU;gBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ;gBAChC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACf,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAuB;YACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAgB;gBACzB,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;gBACjC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;gBACtC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;gBAC9B,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACf,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,OAAe;YAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,qBAAqB,CAAC,OAAe;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC3B,MAAM,OAAO,GAAgB;gBAC3B,GAAG,QAAQ;gBACX,GAAG,CAAC,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,GAAG,CAAC,aAAa,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9G,GAAG,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1F,GAAG,CAAC,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClG,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;gBACzC,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO;oBAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC3C,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO;oBAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;YACpC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;iBACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;iBAC3C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,KAA2B;YAC/C,MAAM,SAAS,GAAyB;gBACtC,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBACzC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAC7B,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,CAAC;aAChB,CAAC;YACF,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,WAAmB;YACvC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,WAAmB;YAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,WAAmB;YAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,KAA2B;YAC/C,MAAM,UAAU,GAA0B;gBACxC,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC;gBAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,QAAQ;gBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;gBAC9B,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,YAAoB;YACzC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;YAChD,MAAM,cAAc,GAAG,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC;YAC/C,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;YAC3C,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACnC,CAAC,UAAU,EAAE,EAAE,CACb,UAAU,CAAC,OAAO,KAAK,OAAO;gBAC9B,UAAU,CAAC,MAAM,KAAK,MAAM;gBAC5B,UAAU,CAAC,KAAK,KAAK,cAAc;gBACnC,CAAC,cAAc,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,KAAK,gBAAgB,CAAC;gBACxE,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtC,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,oBAAoB;YACxB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,iBAAiB;YACf,OAAO;gBACL,gBAAgB,EAAE,sCAAsC;gBACxD,UAAU,EAAE,sCAAsC;aACnD,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["/**\n * Minimal in-memory fake of the {@link AgentDatabase} interface used by agent\n * tool tests. Only the surface area exercised by the specs in this folder is\n * implemented — unused methods throw if called so tests fail loudly.\n */\n\nimport type { AgentDatabase, AgentPermissionRecord, AgentRecord, AgentTransportRecord, AgentWithRelations, CreateAgentInput, CreateTransportInput, GrantPermissionInput } from '../../shared/interfaces/agent.interface.js';\n\nexport interface SeedAgentInput {\n id: string;\n ownerId: string;\n name: string;\n type?: 'personal' | 'external' | 'system';\n description?: string | null;\n status?: 'active' | 'inactive';\n}\n\nexport interface FakeAgentDb extends AgentDatabase {\n seedAgent(input: SeedAgentInput): Promise<AgentRecord>;\n getPermissionsForAgent(agentId: string): AgentPermissionRecord[];\n getTransportsForAgent(agentId: string): AgentTransportRecord[];\n}\n\nfunction nextId(prefix: string, counter: { value: number }): string {\n counter.value += 1;\n return `${prefix}-${counter.value}`;\n}\n\n/**\n * Creates an in-memory agent database fake for unit tests. Only the methods\n * exercised by the agent tool specs are implemented; the rest throw.\n */\nexport function createFakeAgentDb(): FakeAgentDb {\n const agents = new Map<string, AgentRecord>();\n const transports = new Map<string, AgentTransportRecord>();\n const permissions = new Map<string, AgentPermissionRecord>();\n const agentCounter = { value: 0 };\n const transportCounter = { value: 0 };\n const permissionCounter = { value: 0 };\n\n function buildRelations(agent: AgentRecord): AgentWithRelations {\n const agentTransports = [...transports.values()].filter((t) => t.agentId === agent.id);\n const agentPermissions = [...permissions.values()].filter((p) => p.agentId === agent.id);\n return {\n ...agent,\n transports: agentTransports,\n permissions: agentPermissions,\n };\n }\n\n const db: FakeAgentDb = {\n getPermissionsForAgent(agentId: string) {\n return [...permissions.values()]\n .filter((permission) => permission.agentId === agentId)\n .map((permission) => ({ ...permission, actions: [...permission.actions] }));\n },\n\n getTransportsForAgent(agentId: string) {\n return [...transports.values()]\n .filter((transport) => transport.agentId === agentId)\n .map((transport) => ({ ...transport }));\n },\n\n async seedAgent(input: SeedAgentInput) {\n const now = new Date();\n const agent: AgentRecord = {\n id: input.id,\n ownerId: input.ownerId,\n name: input.name,\n description: input.description ?? null,\n type: input.type ?? 'external',\n status: input.status ?? 'active',\n metadata: {},\n createdAt: now,\n updatedAt: now,\n };\n agents.set(agent.id, agent);\n return agent;\n },\n\n async createAgent(input: CreateAgentInput) {\n const now = new Date();\n const agent: AgentRecord = {\n id: nextId('agent', agentCounter),\n ownerId: input.ownerId,\n name: input.name,\n description: input.description ?? null,\n type: input.type,\n status: 'active',\n metadata: input.metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n agents.set(agent.id, agent);\n return agent;\n },\n\n async getAgent(agentId: string) {\n return agents.get(agentId) ?? null;\n },\n\n async getAgentWithRelations(agentId: string) {\n const agent = agents.get(agentId);\n if (!agent) return null;\n return buildRelations(agent);\n },\n\n async updateAgent(agentId, updates) {\n const existing = agents.get(agentId);\n if (!existing) return null;\n const updated: AgentRecord = {\n ...existing,\n ...('name' in updates && updates.name !== undefined ? { name: updates.name } : {}),\n ...('description' in updates && updates.description !== undefined ? { description: updates.description } : {}),\n ...('status' in updates && updates.status !== undefined ? { status: updates.status } : {}),\n ...('metadata' in updates && updates.metadata !== undefined ? { metadata: updates.metadata } : {}),\n updatedAt: new Date(),\n };\n agents.set(agentId, updated);\n return updated;\n },\n\n async deleteAgent(agentId: string) {\n agents.delete(agentId);\n for (const [id, transport] of transports) {\n if (transport.agentId === agentId) transports.delete(id);\n }\n for (const [id, permission] of permissions) {\n if (permission.agentId === agentId) permissions.delete(id);\n }\n },\n\n async listAgentsForUser(userId: string) {\n return [...agents.values()]\n .filter((agent) => agent.ownerId === userId)\n .map((agent) => buildRelations(agent));\n },\n\n async createTransport(input: CreateTransportInput) {\n const transport: AgentTransportRecord = {\n id: nextId('transport', transportCounter),\n agentId: input.agentId,\n channel: input.channel,\n config: input.config ?? {},\n priority: input.priority ?? 0,\n active: true,\n failureCount: 0,\n };\n transports.set(transport.id, transport);\n return transport;\n },\n\n async deleteTransport(transportId: string) {\n transports.delete(transportId);\n },\n\n async recordTransportFailure(transportId: string) {\n const transport = transports.get(transportId);\n if (transport) {\n transport.failureCount += 1;\n }\n },\n\n async recordTransportSuccess(transportId: string) {\n const transport = transports.get(transportId);\n if (transport) {\n transport.failureCount = 0;\n }\n },\n\n async grantPermission(input: GrantPermissionInput) {\n const permission: AgentPermissionRecord = {\n id: nextId('permission', permissionCounter),\n agentId: input.agentId,\n userId: input.userId,\n scope: input.scope ?? 'global',\n scopeId: input.scopeId ?? null,\n actions: [...input.actions],\n createdAt: new Date(),\n };\n permissions.set(permission.id, permission);\n return permission;\n },\n\n async revokePermission(permissionId: string) {\n permissions.delete(permissionId);\n },\n\n async hasPermission(agentId, userId, action, scope) {\n const requestedScope = scope?.type ?? 'global';\n const requestedScopeId = scope?.id ?? null;\n return [...permissions.values()].some(\n (permission) =>\n permission.agentId === agentId &&\n permission.userId === userId &&\n permission.scope === requestedScope &&\n (requestedScope === 'global' || permission.scopeId === requestedScopeId) &&\n permission.actions.includes(action),\n );\n },\n\n async findAuthorizedAgents() {\n throw new Error('findAuthorizedAgents is not implemented in the fake agent DB.');\n },\n\n getSystemAgentIds() {\n return {\n chatOrchestrator: '00000000-0000-0000-0000-000000000001',\n negotiator: '00000000-0000-0000-0000-000000000002',\n };\n },\n };\n\n return db;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseMessage } from "@langchain/core/messages";
|
|
2
|
-
import {
|
|
2
|
+
import type { ToolContext } from "../shared/agent/tool.factory.js";
|
|
3
|
+
import { type ChatPersonaConfig } from "./chat.persona.js";
|
|
3
4
|
import type { DebugMetaToolCall, DebugMetaLlm, DebugMetaOrchestratorNegotiations, DebugMetaDiscoveryQuestions } from "./chat-streaming.types.js";
|
|
4
5
|
import type { Question, QuestionStrategy } from "../shared/schemas/question.schema.js";
|
|
5
6
|
import type { Opportunity } from "../shared/interfaces/database.interface.js";
|
|
@@ -222,6 +223,7 @@ export interface AgentIterationResult {
|
|
|
222
223
|
*/
|
|
223
224
|
export declare class ChatAgent {
|
|
224
225
|
private resolvedContext;
|
|
226
|
+
private persona;
|
|
225
227
|
private model;
|
|
226
228
|
private tools;
|
|
227
229
|
private toolsByName;
|
|
@@ -236,8 +238,12 @@ export declare class ChatAgent {
|
|
|
236
238
|
/**
|
|
237
239
|
* Async factory: creates a ChatAgent with resolved user/index context.
|
|
238
240
|
* Resolves user/network identity from DB during tool initialization.
|
|
241
|
+
*
|
|
242
|
+
* @param context - Tool context (database, userId, scope, deps)
|
|
243
|
+
* @param persona - Persona config (prompt builder, toolset, loop behaviors).
|
|
244
|
+
* Defaults to the orchestrator persona.
|
|
239
245
|
*/
|
|
240
|
-
static create(context: ToolContext): Promise<ChatAgent>;
|
|
246
|
+
static create(context: ToolContext, persona?: ChatPersonaConfig): Promise<ChatAgent>;
|
|
241
247
|
/**
|
|
242
248
|
* Run a single iteration of the agent loop.
|
|
243
249
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.agent.d.ts","sourceRoot":"/","sources":["chat/chat.agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,WAAW,EAA8C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,
|
|
1
|
+
{"version":3,"file":"chat.agent.d.ts","sourceRoot":"/","sources":["chat/chat.agent.ts"],"names":[],"mappings":"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"}
|
package/dist/chat/chat.agent.js
CHANGED
|
@@ -8,10 +8,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import { AIMessage, SystemMessage, ToolMessage } from "@langchain/core/messages";
|
|
11
|
-
import { createChatTools } from "../shared/agent/tool.factory.js";
|
|
12
11
|
import { resolveChatContext } from "../shared/agent/tool.helpers.js";
|
|
13
12
|
import { scopeFromNetworkId } from "../shared/agent/tool.scope.js";
|
|
14
|
-
import { ITERATION_NUDGE
|
|
13
|
+
import { ITERATION_NUDGE } from "./chat.prompt.js";
|
|
14
|
+
import { ORCHESTRATOR_PERSONA } from "./chat.persona.js";
|
|
15
15
|
import { extractRecentToolCalls } from "./chat.prompt.modules.js";
|
|
16
16
|
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
17
17
|
import { createModel } from "../shared/agent/model.config.js";
|
|
@@ -70,8 +70,9 @@ export class ChatAgent {
|
|
|
70
70
|
/**
|
|
71
71
|
* Private constructor — use `ChatAgent.create()` instead.
|
|
72
72
|
*/
|
|
73
|
-
constructor(resolvedContext, tools, modelConfig) {
|
|
73
|
+
constructor(resolvedContext, persona, tools, modelConfig) {
|
|
74
74
|
this.resolvedContext = resolvedContext;
|
|
75
|
+
this.persona = persona;
|
|
75
76
|
this.model = createModel("chat", modelConfig);
|
|
76
77
|
// Store tools and index by name
|
|
77
78
|
this.tools = tools;
|
|
@@ -97,8 +98,12 @@ export class ChatAgent {
|
|
|
97
98
|
/**
|
|
98
99
|
* Async factory: creates a ChatAgent with resolved user/index context.
|
|
99
100
|
* Resolves user/network identity from DB during tool initialization.
|
|
101
|
+
*
|
|
102
|
+
* @param context - Tool context (database, userId, scope, deps)
|
|
103
|
+
* @param persona - Persona config (prompt builder, toolset, loop behaviors).
|
|
104
|
+
* Defaults to the orchestrator persona.
|
|
100
105
|
*/
|
|
101
|
-
static async create(context) {
|
|
106
|
+
static async create(context, persona = ORCHESTRATOR_PERSONA) {
|
|
102
107
|
const { networkId: legacyNetworkId } = context;
|
|
103
108
|
const explicitScope = context.scopeType && context.scopeId
|
|
104
109
|
? { scopeType: context.scopeType, scopeId: context.scopeId }
|
|
@@ -115,8 +120,8 @@ export class ChatAgent {
|
|
|
115
120
|
resolved.scopeType = explicitScope.scopeType;
|
|
116
121
|
resolved.scopeId = explicitScope.scopeId;
|
|
117
122
|
}
|
|
118
|
-
const tools = await
|
|
119
|
-
return new ChatAgent(resolved, tools, context.modelConfig);
|
|
123
|
+
const tools = await persona.createTools(context, resolved);
|
|
124
|
+
return new ChatAgent(resolved, persona, tools, context.modelConfig);
|
|
120
125
|
}
|
|
121
126
|
/**
|
|
122
127
|
* Run a single iteration of the agent loop.
|
|
@@ -131,7 +136,7 @@ export class ChatAgent {
|
|
|
131
136
|
currentMessage: ChatAgent.getCurrentUserMessage(messages),
|
|
132
137
|
ctx: this.resolvedContext,
|
|
133
138
|
};
|
|
134
|
-
const systemContent = buildSystemContent(this.resolvedContext, iterCtx);
|
|
139
|
+
const systemContent = this.persona.buildSystemContent(this.resolvedContext, iterCtx);
|
|
135
140
|
const fullMessages = [
|
|
136
141
|
new SystemMessage(systemContent),
|
|
137
142
|
...messages,
|
|
@@ -223,7 +228,7 @@ export class ChatAgent {
|
|
|
223
228
|
logger.verbose("Executing tool", { name: tc.name, args: tc.args });
|
|
224
229
|
let result = await tool.invoke(tc.args);
|
|
225
230
|
let resultStr = typeof result === "string" ? result : JSON.stringify(result);
|
|
226
|
-
if (tc.name === "discover_opportunities") {
|
|
231
|
+
if (tc.name === "discover_opportunities" && this.persona.loopBehaviors.createIntentCallback) {
|
|
227
232
|
const newResult = await this.handleCreateIntentCallback(resultStr, tc.args);
|
|
228
233
|
if (newResult !== null) {
|
|
229
234
|
resultStr = newResult;
|
|
@@ -394,8 +399,8 @@ export class ChatAgent {
|
|
|
394
399
|
*/
|
|
395
400
|
async normalizeToolResult(toolName, resultStr, toolArgs) {
|
|
396
401
|
let normalized = resultStr;
|
|
397
|
-
// Run create_intent callback for discover_opportunities results
|
|
398
|
-
if (toolName === "discover_opportunities") {
|
|
402
|
+
// Run create_intent callback for discover_opportunities results (orchestrator behavior)
|
|
403
|
+
if (toolName === "discover_opportunities" && this.persona.loopBehaviors.createIntentCallback) {
|
|
399
404
|
const callbackResult = await this.handleCreateIntentCallback(normalized, toolArgs);
|
|
400
405
|
if (callbackResult !== null) {
|
|
401
406
|
normalized = callbackResult;
|
|
@@ -575,7 +580,7 @@ export class ChatAgent {
|
|
|
575
580
|
currentMessage: ChatAgent.getCurrentUserMessage(messages),
|
|
576
581
|
ctx: this.resolvedContext,
|
|
577
582
|
};
|
|
578
|
-
const systemContent = buildSystemContent(this.resolvedContext, iterCtx);
|
|
583
|
+
const systemContent = this.persona.buildSystemContent(this.resolvedContext, iterCtx);
|
|
579
584
|
const fullMessages = [
|
|
580
585
|
new SystemMessage(systemContent),
|
|
581
586
|
...messages,
|
|
@@ -780,7 +785,11 @@ export class ChatAgent {
|
|
|
780
785
|
// directly instead of calling the corresponding tool. These blocks
|
|
781
786
|
// lack valid proposalIds / data and won't work in the frontend.
|
|
782
787
|
// Auto-invoke the correct tool directly instead of re-asking the LLM.
|
|
783
|
-
|
|
788
|
+
// Persona-gated: only personas with hallucinationRecovery enabled (orchestrator)
|
|
789
|
+
// run detection/auto-invoke — other personas never trigger this branch.
|
|
790
|
+
const hallucinatedBlock = this.persona.loopBehaviors.hallucinationRecovery
|
|
791
|
+
? this.detectHallucinatedBlock(iterationText, toolsDebug, iterCtx.currentMessage)
|
|
792
|
+
: null;
|
|
784
793
|
const priorAutoInvokes = hallucinatedBlock ? (hallucinationAutoInvokeCounts.get(hallucinatedBlock.type) ?? 0) : 0;
|
|
785
794
|
if (hallucinatedBlock && priorAutoInvokes < 2 && iterationCount < HARD_ITERATION_LIMIT - 1) {
|
|
786
795
|
hallucinationAutoInvokeCounts.set(hallucinatedBlock.type, priorAutoInvokes + 1);
|
|
@@ -938,8 +947,11 @@ export class ChatAgent {
|
|
|
938
947
|
}
|
|
939
948
|
// ── Final response already streamed ─────────────────────────────
|
|
940
949
|
// Defense-in-depth: strip any code blocks that require tool backing
|
|
941
|
-
// but slipped through without a successful tool call
|
|
942
|
-
|
|
950
|
+
// but slipped through without a successful tool call (persona-gated,
|
|
951
|
+
// same flag as detection since both police tool-backed block types).
|
|
952
|
+
const sanitizedText = this.persona.loopBehaviors.hallucinationRecovery
|
|
953
|
+
? this.stripUnbackedBlocks(iterationText, toolsDebug)
|
|
954
|
+
: iterationText;
|
|
943
955
|
if (sanitizedText !== iterationText) {
|
|
944
956
|
logger.warn("Streaming: stripped unbacked code blocks from final response", {
|
|
945
957
|
originalLength: iterationText.length,
|