@greatapps/greatagents-ui 0.3.0 → 0.3.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/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/index.ts","../src/lib/index.ts","../src/hooks/types.ts","../src/hooks/use-agents.ts","../src/hooks/use-tools.ts","../src/hooks/use-objectives.ts","../src/hooks/use-agent-tools.ts","../src/hooks/use-conversations.ts","../src/hooks/use-settings.ts","../src/hooks/use-contacts.ts","../src/components/agents/agents-table.tsx","../src/components/agents/agent-form-dialog.tsx","../src/components/agents/agent-edit-form.tsx","../src/components/agents/agent-tools-list.tsx","../src/components/agents/agent-objectives-list.tsx","../src/components/ui/sortable.tsx","../src/lib/compose-refs.ts","../src/components/agents/agent-prompt-editor.tsx","../src/components/conversations/agent-conversations-table.tsx","../src/components/conversations/conversation-view.tsx","../src/components/conversations/agent-conversations-panel.tsx","../src/components/agents/agent-tabs.tsx","../src/components/tools/tools-table.tsx","../src/components/tools/tool-form-dialog.tsx","../src/components/tools/tool-credentials-form.tsx","../src/pages/agents-page.tsx","../src/pages/agent-detail-page.tsx","../src/pages/tools-page.tsx","../src/pages/credentials-page.tsx"],"sourcesContent":["import type {\n ApiResponse,\n Agent,\n AgentTool,\n AvailabilityResult,\n CalendarStatus,\n ContactUser,\n Conversation,\n GagentsContact,\n Objective,\n PromptVersion,\n Tool,\n ToolCredential,\n} from \"../types\";\n\nexport interface GagentsClientConfig {\n baseUrl: string;\n token: string;\n language?: string;\n idWl?: number;\n}\n\nexport function createGagentsClient(config: GagentsClientConfig) {\n const { baseUrl, token, language = \"pt-br\", idWl = 1 } = config;\n\n function buildUrl(idAccount: number, path: string): string {\n return `${baseUrl}/v1/${language}/${idWl}/accounts/${idAccount}/${path}`;\n }\n\n async function request<T>(\n method: string,\n idAccount: number,\n path: string,\n body?: unknown,\n params?: Record<string, string>,\n ): Promise<ApiResponse<T>> {\n const url = new URL(buildUrl(idAccount, path));\n if (params) {\n Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n let message = `HTTP ${res.status}: ${res.statusText}`;\n try {\n const errorBody = await res.json();\n message = errorBody.message || message;\n } catch {\n /* ignore parse errors */\n }\n throw new Error(message);\n }\n\n const json: ApiResponse<T> = await res.json();\n\n // For mutations, treat API-level failures as errors so TanStack Query\n // fires onError instead of onSuccess (API returns HTTP 200 even on failure)\n if (method !== \"GET\" && json.status === 0) {\n throw new Error(json.message || \"Operação falhou\");\n }\n\n return json;\n }\n\n return {\n // --- Agents ---\n listAgents: (idAccount: number, params?: Record<string, string>) =>\n request<Agent[]>(\"GET\", idAccount, \"agents\", undefined, params),\n\n getAgent: (idAccount: number, id: number) =>\n request<Agent>(\"GET\", idAccount, `agents/${id}`),\n\n createAgent: (\n idAccount: number,\n body: Pick<Agent, \"title\"> &\n Partial<Pick<Agent, \"photo\" | \"delay_typing\" | \"waiting_time\">>,\n ) => request<Agent>(\"POST\", idAccount, \"agents\", body),\n\n updateAgent: (\n idAccount: number,\n id: number,\n body: Partial<\n Pick<Agent, \"title\" | \"photo\" | \"delay_typing\" | \"waiting_time\" | \"active\">\n > & { prompt?: string; change_notes?: string },\n ) => request<Agent>(\"PUT\", idAccount, `agents/${id}`, body),\n\n deleteAgent: (idAccount: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `agents/${id}`),\n\n // --- Tools ---\n listTools: (idAccount: number, params?: Record<string, string>) =>\n request<Tool[]>(\"GET\", idAccount, \"tools\", undefined, params),\n\n getTool: (idAccount: number, id: number) =>\n request<Tool>(\"GET\", idAccount, `tools/${id}`),\n\n createTool: (\n idAccount: number,\n body: Pick<Tool, \"name\" | \"type\"> &\n Partial<Pick<Tool, \"slug\" | \"description\" | \"auth_config\" | \"function_definitions\">>,\n ) => request<Tool>(\"POST\", idAccount, \"tools\", body),\n\n updateTool: (\n idAccount: number,\n id: number,\n body: Partial<\n Pick<Tool, \"name\" | \"slug\" | \"type\" | \"description\" | \"auth_config\" | \"function_definitions\">\n >,\n ) => request<Tool>(\"PUT\", idAccount, `tools/${id}`, body),\n\n deleteTool: (idAccount: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `tools/${id}`),\n\n // --- Agent Tools ---\n listAgentTools: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<AgentTool[]>(\"GET\", idAccount, `agents/${idAgent}/tools`, undefined, params),\n\n addAgentTool: (\n idAccount: number,\n idAgent: number,\n body: Pick<AgentTool, \"id_tool\"> &\n Partial<Pick<AgentTool, \"enabled\" | \"custom_instructions\" | \"parameter_mappings\" | \"id_tool_credential\">>,\n ) => request<AgentTool>(\"POST\", idAccount, `agents/${idAgent}/tools`, body),\n\n updateAgentTool: (\n idAccount: number,\n idAgent: number,\n id: number,\n body: Partial<\n Pick<AgentTool, \"enabled\" | \"custom_instructions\" | \"parameter_mappings\" | \"id_tool_credential\">\n >,\n ) => request<AgentTool>(\"PUT\", idAccount, `agents/${idAgent}/tools/${id}`, body),\n\n removeAgentTool: (idAccount: number, idAgent: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `agents/${idAgent}/tools/${id}`),\n\n // --- Objectives ---\n listObjectives: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<Objective[]>(\"GET\", idAccount, `agents/${idAgent}/objectives`, undefined, params),\n\n getObjective: (idAccount: number, idAgent: number, id: number) =>\n request<Objective>(\"GET\", idAccount, `agents/${idAgent}/objectives/${id}`),\n\n createObjective: (\n idAccount: number,\n idAgent: number,\n body: Pick<Objective, \"title\"> &\n Partial<Pick<Objective, \"slug\" | \"prompt\" | \"order\" | \"active\">>,\n ) => request<Objective>(\"POST\", idAccount, `agents/${idAgent}/objectives`, body),\n\n updateObjective: (\n idAccount: number,\n idAgent: number,\n id: number,\n body: Partial<Pick<Objective, \"title\" | \"slug\" | \"prompt\" | \"order\" | \"active\">>,\n ) => request<Objective>(\"PUT\", idAccount, `agents/${idAgent}/objectives/${id}`, body),\n\n deleteObjective: (idAccount: number, idAgent: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `agents/${idAgent}/objectives/${id}`),\n\n // --- Conversations ---\n listConversations: (idAccount: number, params?: Record<string, string>) =>\n request<Conversation[]>(\"GET\", idAccount, \"conversations\", undefined, params),\n\n listAgentConversations: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<Conversation[]>(\"GET\", idAccount, `agents/${idAgent}/conversations`, undefined, params),\n\n getConversation: (idAccount: number, id: number) =>\n request<Conversation>(\"GET\", idAccount, `conversations/${id}`),\n\n // --- Prompt Versions ---\n listPromptVersions: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<PromptVersion[]>(\"GET\", idAccount, `agents/${idAgent}/prompt-versions`, undefined, params),\n\n // --- Tool Credentials ---\n listToolCredentials: (idAccount: number, params?: Record<string, string>) =>\n request<ToolCredential[]>(\"GET\", idAccount, \"tool-credentials\", undefined, params),\n\n createToolCredential: (\n idAccount: number,\n body: Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\"> &\n Partial<Pick<ToolCredential, \"expires_at\">>,\n ) => request<ToolCredential>(\"POST\", idAccount, \"tool-credentials\", body),\n\n updateToolCredential: (\n idAccount: number,\n id: number,\n body: Partial<\n Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\" | \"expires_at\" | \"status\">\n >,\n ) => request<ToolCredential>(\"PUT\", idAccount, `tool-credentials/${id}`, body),\n\n deleteToolCredential: (idAccount: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `tool-credentials/${id}`),\n\n // --- Contact Users ---\n listContactUsers: (idAccount: number, params?: Record<string, string>) =>\n request<ContactUser[]>(\"GET\", idAccount, \"contact-users\", undefined, params),\n\n getContactUser: (idAccount: number, id: number) =>\n request<ContactUser>(\"GET\", idAccount, `contact-users/${id}`),\n\n // --- Contacts ---\n listGagentsContacts: (idAccount: number, params?: Record<string, string>) =>\n request<GagentsContact[]>(\"GET\", idAccount, \"contacts\", undefined, params),\n\n // --- Calendar Integration ---\n initiateCalendarConnect: (\n idAccount: number,\n body: { external_reference: string; provider?: string },\n ) => request<{ auth_url: string }>(\"POST\", idAccount, \"calendar/connect\", body),\n\n getCalendarStatus: (\n idAccount: number,\n externalReference: string,\n provider = \"google-calendar\",\n ) =>\n request<CalendarStatus>(\n \"GET\",\n idAccount,\n `calendar/status/${encodeURIComponent(externalReference)}`,\n undefined,\n { provider },\n ),\n\n checkCalendarAvailability: (\n idAccount: number,\n body: { id_professional: number; start_time: string; end_time: string },\n ) => request<AvailabilityResult>(\"POST\", idAccount, \"calendar/availability\", body),\n\n disconnectCalendar: (\n idAccount: number,\n externalReference: string,\n provider = \"google-calendar\",\n ) =>\n request<void>(\n \"DELETE\",\n idAccount,\n `calendar/disconnect/${encodeURIComponent(externalReference)}`,\n undefined,\n { provider },\n ),\n };\n}\n\nexport type GagentsClient = ReturnType<typeof createGagentsClient>;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { useMemo } from \"react\";\nimport { createGagentsClient } from \"../client\";\n\n// ---------------------------------------------------------------------------\n// Hook Configuration\n// ---------------------------------------------------------------------------\n\nexport interface GagentsHookConfig {\n accountId: number;\n token: string;\n baseUrl: string;\n language?: string;\n idWl?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helper — memoized client from config\n// ---------------------------------------------------------------------------\n\nexport function useGagentsClient(config: GagentsHookConfig) {\n return useMemo(\n () =>\n createGagentsClient({\n baseUrl: config.baseUrl,\n token: config.token,\n language: config.language,\n idWl: config.idWl,\n }),\n [config.baseUrl, config.token, config.language, config.idWl],\n );\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useAgents(config: GagentsHookConfig, params?: Record<string, string>) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"agents\", config.accountId, params],\n queryFn: () => client.listAgents(config.accountId, params),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useAgent(config: GagentsHookConfig, id: number | null) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"agent\", config.accountId, id],\n queryFn: () => client.getAgent(config.accountId, id!),\n enabled: !!config.token && !!config.accountId && !!id,\n select: (res) => {\n const d = res.data;\n return Array.isArray(d) ? d[0] : d;\n },\n });\n}\n\nexport function useCreateAgent(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (body: {\n title: string;\n prompt?: string;\n photo?: string;\n delay_typing?: number;\n waiting_time?: number;\n }) => client.createAgent(config.accountId, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agents\"] });\n },\n });\n}\n\nexport function useUpdateAgent(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n id,\n body,\n }: {\n id: number;\n body: {\n title?: string;\n prompt?: string;\n photo?: string;\n delay_typing?: number;\n waiting_time?: number;\n active?: boolean;\n };\n }) => client.updateAgent(config.accountId, id, body),\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agents\"] });\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"agent\", config.accountId, variables.id],\n });\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"prompt-versions\", config.accountId, variables.id],\n });\n },\n });\n}\n\nexport function useDeleteAgent(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (id: number) => client.deleteAgent(config.accountId, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agents\"] });\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useTools(config: GagentsHookConfig, params?: Record<string, string>) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"tools\", config.accountId, params],\n queryFn: () => client.listTools(config.accountId, params),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useTool(config: GagentsHookConfig, id: number | null) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"tool\", config.accountId, id],\n queryFn: () => client.getTool(config.accountId, id!),\n enabled: !!config.token && !!config.accountId && !!id,\n select: (res) => {\n const d = res.data;\n return Array.isArray(d) ? d[0] : d;\n },\n });\n}\n\nexport function useCreateTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (body: {\n name: string;\n slug: string;\n type: string;\n description?: string;\n function_definitions?: string;\n }) => client.createTool(config.accountId, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tools\"] });\n },\n });\n}\n\nexport function useUpdateTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n id,\n body,\n }: {\n id: number;\n body: {\n name?: string;\n type?: string;\n description?: string;\n function_definitions?: string;\n };\n }) => client.updateTool(config.accountId, id, body),\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tools\"] });\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"tool\", config.accountId, variables.id],\n });\n },\n });\n}\n\nexport function useDeleteTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (id: number) => client.deleteTool(config.accountId, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tools\"] });\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useObjectives(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"objectives\", config.accountId, idAgent],\n queryFn: () => client.listObjectives(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useCreateObjective(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n body,\n }: {\n idAgent: number;\n body: {\n title: string;\n slug?: string;\n prompt?: string | null;\n order?: number;\n active?: boolean;\n };\n }) => client.createObjective(config.accountId, idAgent, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"objectives\"] });\n },\n });\n}\n\nexport function useUpdateObjective(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n id,\n body,\n }: {\n idAgent: number;\n id: number;\n body: Partial<{\n title: string;\n slug: string;\n prompt: string | null;\n order: number;\n active: boolean;\n }>;\n }) => client.updateObjective(config.accountId, idAgent, id, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"objectives\"] });\n },\n });\n}\n\nexport function useDeleteObjective(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({ idAgent, id }: { idAgent: number; id: number }) =>\n client.deleteObjective(config.accountId, idAgent, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"objectives\"] });\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useAgentTools(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"agent-tools\", config.accountId, idAgent],\n queryFn: () => client.listAgentTools(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useAddAgentTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n body,\n }: {\n idAgent: number;\n body: { id_tool: number; enabled?: boolean };\n }) => client.addAgentTool(config.accountId, idAgent, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agent-tools\"] });\n },\n });\n}\n\nexport function useRemoveAgentTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({ idAgent, id }: { idAgent: number; id: number }) =>\n client.removeAgentTool(config.accountId, idAgent, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agent-tools\"] });\n },\n });\n}\n\nexport function useUpdateAgentTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n id,\n body,\n }: {\n idAgent: number;\n id: number;\n body: Partial<{\n enabled: boolean;\n custom_instructions: string | null;\n parameter_mappings: string | null;\n id_tool_credential: number | null;\n }>;\n }) => client.updateAgentTool(config.accountId, idAgent, id, body),\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"agent-tools\", config.accountId, variables.idAgent],\n });\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useConversations(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"conversations\", config.accountId],\n queryFn: () => client.listConversations(config.accountId),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useAgentConversations(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"conversations\", config.accountId, \"agent\", idAgent],\n queryFn: () => client.listAgentConversations(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useConversation(config: GagentsHookConfig, id: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"conversations\", config.accountId, id],\n queryFn: () => client.getConversation(config.accountId, id),\n enabled: !!config.token && !!config.accountId && !!id,\n select: (res) => {\n const d = res.data;\n return Array.isArray(d) ? d[0] : d;\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { ToolCredential } from \"../types\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\n// --- Prompt Versions (read-only) ---\n\nexport function usePromptVersions(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"prompt-versions\", config.accountId, idAgent],\n queryFn: () => client.listPromptVersions(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\n// --- Tool Credentials (CRUD) ---\n\nexport function useToolCredentials(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"tool-credentials\", config.accountId],\n queryFn: () => client.listToolCredentials(config.accountId),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useCreateToolCredential(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (\n body: Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\"> &\n Partial<Pick<ToolCredential, \"expires_at\">>,\n ) => client.createToolCredential(config.accountId, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tool-credentials\"] });\n },\n });\n}\n\nexport function useUpdateToolCredential(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n id,\n body,\n }: {\n id: number;\n body: Partial<\n Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\" | \"expires_at\" | \"status\">\n >;\n }) => client.updateToolCredential(config.accountId, id, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tool-credentials\"] });\n },\n });\n}\n\nexport function useDeleteToolCredential(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (id: number) => client.deleteToolCredential(config.accountId, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tool-credentials\"] });\n },\n });\n}\n\n// --- Contact Users (read-only) ---\n\nexport function useContactUsers(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"contact-users\", config.accountId],\n queryFn: () => client.listContactUsers(config.accountId),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useGagentsContacts(config: GagentsHookConfig, params?: Record<string, string>) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"contacts\", config.accountId, params],\n queryFn: () => client.listGagentsContacts(config.accountId, params),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n","import { useMemo, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { useAgents, useDeleteAgent } from \"../../hooks\";\nimport type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { DataTable } from \"@greatapps/greatauth-ui\";\nimport {\n Input,\n Badge,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Pencil, Trash2, Search } from \"lucide-react\";\nimport { EntityAvatar } from \"@greatapps/greatauth-ui\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\n\nfunction useColumns(\n onEdit: (agent: Agent) => void,\n onDelete: (id: number) => void,\n): ColumnDef<Agent>[] {\n return [\n {\n accessorKey: \"title\",\n header: \"Nome\",\n cell: ({ row }) => (\n <div className=\"flex items-center gap-2\">\n <EntityAvatar photo={row.original.photo} name={row.original.title} size=\"sm\" />\n <span className=\"font-medium\">{row.original.title}</span>\n </div>\n ),\n sortingFn: (rowA, rowB) =>\n rowA.original.title\n .toLowerCase()\n .localeCompare(rowB.original.title.toLowerCase()),\n },\n {\n accessorKey: \"active\",\n header: \"Status\",\n cell: ({ row }) =>\n row.original.active ? (\n <Badge variant=\"default\">Ativo</Badge>\n ) : (\n <Badge variant=\"secondary\">Inativo</Badge>\n ),\n },\n {\n accessorKey: \"datetime_add\",\n header: \"Criado em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {format(new Date(row.original.datetime_add), \"dd/MM/yyyy\", {\n locale: ptBR,\n })}\n </span>\n ),\n },\n {\n id: \"actions\",\n size: 80,\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onEdit(row.original)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Editar</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => onDelete(row.original.id)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Excluir</TooltipContent>\n </Tooltip>\n </div>\n ),\n },\n ];\n}\n\nexport function AgentsTable({ config, onNavigateToAgent }: { config: GagentsHookConfig; onNavigateToAgent?: (agentId: number) => void }) {\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n\n const queryParams = useMemo(() => {\n const params: Record<string, string> = {\n limit: \"15\",\n page: String(page),\n };\n if (search) {\n params.search = search;\n }\n return params;\n }, [search, page]);\n\n const { data, isLoading } = useAgents(config, queryParams);\n const deleteAgent = useDeleteAgent(config);\n const [deleteId, setDeleteId] = useState<number | null>(null);\n\n const agents = data?.data || [];\n const total = data?.total || 0;\n\n const columns = useColumns(\n (agent) => onNavigateToAgent?.(agent.id),\n (id) => setDeleteId(id),\n );\n\n function handleDelete() {\n if (!deleteId) return;\n deleteAgent.mutate(deleteId, {\n onSuccess: () => {\n toast.success(\"Agente excluído\");\n setDeleteId(null);\n },\n onError: () => toast.error(\"Erro ao excluir agente\"),\n });\n }\n\n function handleSearchChange(value: string) {\n setSearch(value);\n setPage(1);\n }\n\n return (\n <>\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Buscar agentes...\"\n value={search}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n\n <DataTable\n columns={columns}\n data={agents}\n isLoading={isLoading}\n emptyMessage=\"Nenhum agente encontrado\"\n total={total}\n page={page}\n onPageChange={setPage}\n pageSize={15}\n />\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!deleteId}\n onOpenChange={(open) => !open && setDeleteId(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Excluir agente?</AlertDialogTitle>\n <AlertDialogDescription>\n Esta ação não pode ser desfeita. O agente será removido\n permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel variant=\"outline\" size=\"default\">\n Cancelar\n </AlertDialogCancel>\n <AlertDialogAction\n variant=\"default\"\n size=\"default\"\n onClick={handleDelete}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Excluir\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useCreateAgent, useUpdateAgent } from \"../../hooks\";\nimport type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Button,\n Input,\n\n Label,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentFormDialogProps {\n config: GagentsHookConfig;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n agent?: Agent;\n}\n\nexport function AgentFormDialog({\n config,\n open,\n onOpenChange,\n agent,\n}: AgentFormDialogProps) {\n const isEditing = !!agent;\n const createAgent = useCreateAgent(config);\n const updateAgent = useUpdateAgent(config);\n\n const [title, setTitle] = useState(\"\");\n const [photo, setPhoto] = useState(\"\");\n const [delayTyping, setDelayTyping] = useState(\"\");\n const [waitingTime, setWaitingTime] = useState(\"\");\n\n /* eslint-disable react-hooks/set-state-in-effect -- form state sync from props */\n useEffect(() => {\n if (agent) {\n setTitle(agent.title);\n setPhoto(agent.photo || \"\");\n setDelayTyping(agent.delay_typing != null ? String(agent.delay_typing) : \"\");\n setWaitingTime(agent.waiting_time != null ? String(agent.waiting_time) : \"\");\n } else {\n setTitle(\"\");\n setPhoto(\"\");\n setDelayTyping(\"\");\n setWaitingTime(\"\");\n }\n }, [agent, open]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n const isPending = createAgent.isPending || updateAgent.isPending;\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n if (!title.trim()) return;\n\n const body: Record<string, unknown> = {\n title: title.trim(),\n };\n if (photo.trim()) body.photo = photo.trim();\n if (delayTyping.trim()) body.delay_typing = Number(delayTyping);\n if (waitingTime.trim()) body.waiting_time = Number(waitingTime);\n\n try {\n if (isEditing) {\n await updateAgent.mutateAsync({ id: agent.id, body });\n toast.success(\"Agente atualizado\");\n } else {\n await createAgent.mutateAsync(\n body as { title: string; prompt?: string; photo?: string; delay_typing?: number; waiting_time?: number },\n );\n toast.success(\"Agente criado\");\n }\n onOpenChange(false);\n } catch {\n toast.error(isEditing ? \"Erro ao atualizar agente\" : \"Erro ao criar agente\");\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n {isEditing ? \"Editar Agente\" : \"Novo Agente\"}\n </DialogTitle>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-photo\">Foto (URL)</Label>\n <Input\n id=\"agent-photo\"\n value={photo}\n onChange={(e) => setPhoto(e.target.value)}\n placeholder=\"https://exemplo.com/foto.jpg\"\n disabled={isPending}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-title\">Nome do Agente *</Label>\n <Input\n id=\"agent-title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Ex: Assistente de Agendamento\"\n required\n disabled={isPending}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-delay\">Delay de Digitação (ms)</Label>\n <Input\n id=\"agent-delay\"\n type=\"number\"\n value={delayTyping}\n onChange={(e) => setDelayTyping(e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n disabled={isPending}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-waiting\">Tempo de Espera (ms)</Label>\n <Input\n id=\"agent-waiting\"\n type=\"number\"\n value={waitingTime}\n onChange={(e) => setWaitingTime(e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n disabled={isPending}\n />\n </div>\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isPending}\n >\n Cancelar\n </Button>\n <Button type=\"submit\" disabled={isPending || !title.trim()}>\n {isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : null}\n {isEditing ? \"Salvar\" : \"Criar\"}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useUpdateAgent } from \"../../hooks\";\nimport type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Button,\n Input,\n Label,\n Switch,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { ImageCropUpload } from \"@greatapps/greatauth-ui\";\n\ninterface AgentEditFormProps {\n config: GagentsHookConfig;\n agent: Agent;\n idAccount: string | number | null;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\ninterface FormState {\n title: string;\n photo: string;\n active: boolean;\n delayTyping: string;\n waitingTime: string;\n titleError: boolean;\n}\n\nfunction msToSeconds(ms: number | null): string {\n if (ms == null || ms === 0) return \"\";\n return String(Math.round(ms / 1000));\n}\n\nfunction secondsToMs(seconds: string): number | undefined {\n const val = parseFloat(seconds);\n if (isNaN(val) || val <= 0) return undefined;\n return Math.round(val * 1000);\n}\n\nfunction agentToFormState(agent: Agent): FormState {\n return {\n title: agent.title,\n photo: agent.photo || \"\",\n active: agent.active,\n delayTyping: msToSeconds(agent.delay_typing),\n waitingTime: msToSeconds(agent.waiting_time),\n titleError: false,\n };\n}\n\nexport function AgentEditForm({ config, agent, idAccount, open, onOpenChange }: AgentEditFormProps) {\n const updateAgent = useUpdateAgent(config);\n const [form, setForm] = useState<FormState>(() => agentToFormState(agent));\n\n useEffect(() => {\n setForm(agentToFormState(agent));\n }, [agent]);\n\n function updateField<K extends keyof FormState>(key: K, value: FormState[K]) {\n setForm((prev) => ({ ...prev, [key]: value }));\n }\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n\n if (!form.title.trim()) {\n updateField(\"titleError\", true);\n return;\n }\n\n const body: Record<string, unknown> = {\n title: form.title.trim(),\n active: form.active,\n };\n if (form.photo.trim()) body.photo = form.photo.trim();\n else body.photo = \"\";\n\n const delayMs = secondsToMs(form.delayTyping);\n if (delayMs !== undefined) body.delay_typing = delayMs;\n else body.delay_typing = 0;\n\n const waitingMs = secondsToMs(form.waitingTime);\n if (waitingMs !== undefined) body.waiting_time = waitingMs;\n else body.waiting_time = 0;\n\n try {\n await updateAgent.mutateAsync({ id: agent.id, body });\n toast.success(\"Agente atualizado\");\n onOpenChange?.(false);\n } catch {\n toast.error(\"Erro ao atualizar agente\");\n }\n }\n\n const formContent = (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"flex justify-center\">\n <ImageCropUpload\n value={form.photo || null}\n onChange={(url) => updateField(\"photo\", url)}\n onRemove={() => updateField(\"photo\", \"\")}\n entityType=\"agents\"\n entityId={agent.id}\n idAccount={typeof idAccount === \"string\" ? Number(idAccount) : (idAccount ?? 0)}\n name={form.title || null}\n disabled={updateAgent.isPending}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"edit-title\">Nome do Agente *</Label>\n <Input\n id=\"edit-title\"\n value={form.title}\n onChange={(e) => {\n setForm((prev) => ({\n ...prev,\n title: e.target.value,\n titleError: e.target.value.trim() ? false : prev.titleError,\n }));\n }}\n placeholder=\"Ex: Assistente de Agendamento\"\n disabled={updateAgent.isPending}\n />\n {form.titleError && (\n <p className=\"text-sm text-destructive\">Nome é obrigatório</p>\n )}\n </div>\n\n <div className=\"flex items-center gap-3\">\n <Switch\n id=\"edit-active\"\n checked={form.active}\n onCheckedChange={(checked) => updateField(\"active\", checked)}\n disabled={updateAgent.isPending}\n />\n <Label htmlFor=\"edit-active\" className=\"cursor-pointer\">\n {form.active ? \"Ativo\" : \"Inativo\"}\n </Label>\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"edit-delay\">Delay de Digitação (s)</Label>\n <Input\n id=\"edit-delay\"\n type=\"number\"\n value={form.delayTyping}\n onChange={(e) => updateField(\"delayTyping\", e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n step=\"0.5\"\n disabled={updateAgent.isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Tempo de simulação de digitação\n </p>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"edit-waiting\">Tempo de Espera (s)</Label>\n <Input\n id=\"edit-waiting\"\n type=\"number\"\n value={form.waitingTime}\n onChange={(e) => updateField(\"waitingTime\", e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n step=\"0.5\"\n disabled={updateAgent.isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Espera por mensagens agrupadas\n </p>\n </div>\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n disabled={updateAgent.isPending}\n >\n Cancelar\n </Button>\n <Button type=\"submit\" disabled={updateAgent.isPending}>\n {updateAgent.isPending && (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n )}\n Salvar\n </Button>\n </DialogFooter>\n </form>\n );\n\n if (open !== undefined && onOpenChange) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Editar Agente</DialogTitle>\n </DialogHeader>\n {formContent}\n </DialogContent>\n </Dialog>\n );\n }\n\n return <div className=\"max-w-lg pt-4\">{formContent}</div>;\n}\n","import { useState } from \"react\";\nimport type { Agent, AgentTool, Tool, ToolCredential } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n useAgentTools,\n useAddAgentTool,\n useRemoveAgentTool,\n useUpdateAgentTool,\n} from \"../../hooks\";\nimport { useTools } from \"../../hooks\";\nimport { useToolCredentials } from \"../../hooks\";\nimport {\n Switch,\n Badge,\n Button,\n Skeleton,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Input,\n Textarea,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@greatapps/greatauth-ui/ui\";\nimport {\n Trash2,\n Plus,\n Wrench,\n Settings2,\n} from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentToolsListProps {\n agent: Agent;\n config: GagentsHookConfig;\n}\n\nexport function AgentToolsList({ agent, config }: AgentToolsListProps) {\n const { data: agentToolsData, isLoading } = useAgentTools(config, agent.id);\n const { data: allToolsData } = useTools(config);\n const addMutation = useAddAgentTool(config);\n const removeMutation = useRemoveAgentTool(config);\n const updateMutation = useUpdateAgentTool(config);\n\n const [removeTarget, setRemoveTarget] = useState<AgentTool | null>(null);\n const [addOpen, setAddOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [configTarget, setConfigTarget] = useState<AgentTool | null>(null);\n const [configInstructions, setConfigInstructions] = useState(\"\");\n const [configCredentialId, setConfigCredentialId] = useState<string>(\"\");\n\n const { data: credentialsData } = useToolCredentials(config);\n const allCredentials: ToolCredential[] = credentialsData?.data || [];\n\n const agentTools = agentToolsData?.data || [];\n const allTools = allToolsData?.data || [];\n const assignedToolIds = new Set(agentTools.map((at) => at.id_tool));\n const availableTools = allTools.filter((t) => !assignedToolIds.has(t.id));\n const filteredAvailable = availableTools.filter((t) =>\n t.name.toLowerCase().includes(search.toLowerCase()),\n );\n\n function getToolInfo(idTool: number): Tool | undefined {\n return allTools.find((t) => t.id === idTool);\n }\n\n async function handleToggleEnabled(agentTool: AgentTool, checked: boolean) {\n try {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: agentTool.id,\n body: { enabled: checked },\n });\n toast.success(checked ? \"Ferramenta ativada\" : \"Ferramenta desativada\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao alterar estado da ferramenta\",\n );\n }\n }\n\n async function handleAdd(tool: Tool) {\n try {\n await addMutation.mutateAsync({\n idAgent: agent.id,\n body: { id_tool: tool.id },\n });\n toast.success(\"Ferramenta adicionada\");\n setAddOpen(false);\n setSearch(\"\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao adicionar ferramenta\",\n );\n }\n }\n\n async function handleRemove() {\n if (!removeTarget) return;\n try {\n await removeMutation.mutateAsync({\n idAgent: agent.id,\n id: removeTarget.id,\n });\n toast.success(\"Ferramenta removida\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao remover ferramenta\",\n );\n } finally {\n setRemoveTarget(null);\n }\n }\n\n function openConfig(agentTool: AgentTool) {\n setConfigTarget(agentTool);\n setConfigInstructions(agentTool.custom_instructions || \"\");\n setConfigCredentialId(agentTool.id_tool_credential ? String(agentTool.id_tool_credential) : \"\");\n }\n\n async function handleSaveConfig() {\n if (!configTarget) return;\n try {\n const newCredentialId = configCredentialId ? parseInt(configCredentialId, 10) : null;\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: configTarget.id,\n body: {\n custom_instructions: configInstructions.trim() || null,\n id_tool_credential: newCredentialId,\n },\n });\n toast.success(\"Configuração atualizada\");\n setConfigTarget(null);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao atualizar configuração\",\n );\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n {agentTools.length} ferramenta{agentTools.length !== 1 ? \"s\" : \"\"} associada{agentTools.length !== 1 ? \"s\" : \"\"}\n </h3>\n <Popover open={addOpen} onOpenChange={setAddOpen}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" disabled={availableTools.length === 0}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Adicionar Ferramenta\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-72 p-0\" align=\"end\">\n <div className=\"p-2\">\n <Input\n placeholder=\"Buscar ferramenta...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-8\"\n />\n </div>\n <div className=\"max-h-48 overflow-y-auto\">\n {filteredAvailable.length === 0 ? (\n <p className=\"p-3 text-center text-sm text-muted-foreground\">\n Nenhuma ferramenta disponível\n </p>\n ) : (\n filteredAvailable.map((tool) => (\n <button\n key={tool.id}\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-3 py-2 text-left text-sm hover:bg-accent\"\n onClick={() => handleAdd(tool)}\n disabled={addMutation.isPending}\n >\n <Wrench className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"flex-1 font-medium\">{tool.name}</span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {tool.type}\n </Badge>\n </button>\n ))\n )}\n </div>\n </PopoverContent>\n </Popover>\n </div>\n\n {agentTools.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <Wrench className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma ferramenta associada. Clique em 'Adicionar Ferramenta' para começar.\n </p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {agentTools.map((agentTool) => {\n const tool = getToolInfo(agentTool.id_tool);\n return (\n <div\n key={agentTool.id}\n className=\"flex items-center gap-3 rounded-lg border bg-card p-3\"\n >\n <div className=\"flex flex-1 flex-col gap-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-medium\">\n {tool?.name || `Ferramenta #${agentTool.id_tool}`}\n </span>\n {tool?.type && (\n <Badge variant=\"secondary\" className=\"shrink-0 text-xs\">\n {tool.type}\n </Badge>\n )}\n </div>\n {agentTool.custom_instructions && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {agentTool.custom_instructions}\n </p>\n )}\n </div>\n\n <Switch\n checked={agentTool.enabled}\n onCheckedChange={(checked) =>\n handleToggleEnabled(agentTool, checked)\n }\n disabled={updateMutation.isPending}\n />\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={() => openConfig(agentTool)}\n title=\"Configurar instruções\"\n >\n <Settings2 className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-destructive\"\n onClick={() => setRemoveTarget(agentTool)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Config dialog for custom_instructions */}\n <Dialog\n open={!!configTarget}\n onOpenChange={(open) => !open && setConfigTarget(null)}\n >\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n Instruções da Ferramenta\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n {configTarget && getToolInfo(configTarget.id_tool)?.type !== \"none\" && (\n <div className=\"space-y-2\">\n <Label>Credencial</Label>\n <Select\n value={configCredentialId || undefined}\n onValueChange={(val) => setConfigCredentialId(val === \"__none__\" ? \"\" : val)}\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Selecione uma credencial (opcional)\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">Nenhuma (automático)</SelectItem>\n {allCredentials\n .filter((c) => configTarget && c.id_tool === configTarget.id_tool && c.status === \"active\")\n .map((c) => (\n <SelectItem key={c.id} value={String(c.id)}>\n {c.label || `Credencial #${c.id}`}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n Vincule uma credencial específica a esta ferramenta neste agente.\n </p>\n </div>\n )}\n <div className=\"space-y-2\">\n <Label>Instruções Personalizadas</Label>\n <Textarea\n value={configInstructions}\n onChange={(e) => setConfigInstructions(e.target.value)}\n placeholder=\"Instruções sobre como e quando o agente deve usar esta ferramenta...\"\n rows={6}\n />\n <p className=\"text-xs text-muted-foreground\">\n Este texto é adicionado ao prompt do agente para orientar o uso da ferramenta.\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setConfigTarget(null)}\n >\n Cancelar\n </Button>\n <Button\n onClick={handleSaveConfig}\n disabled={updateMutation.isPending}\n >\n Salvar\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Remove confirmation */}\n <AlertDialog\n open={!!removeTarget}\n onOpenChange={(open) => !open && setRemoveTarget(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remover ferramenta?</AlertDialogTitle>\n <AlertDialogDescription>\n A ferramenta será desassociada deste agente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancelar</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleRemove}\n disabled={removeMutation.isPending}\n >\n Remover\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { Agent, Objective } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n useObjectives,\n useCreateObjective,\n useUpdateObjective,\n useDeleteObjective,\n} from \"../../hooks\";\nimport {\n Input,\n Button,\n Switch,\n Skeleton,\n Textarea,\n Label,\n Badge,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@greatapps/greatauth-ui/ui\";\nimport {\n Sortable,\n SortableContent,\n SortableItem,\n SortableItemHandle,\n SortableOverlay,\n} from \"../ui/sortable\";\nimport { Trash2, Target, Pencil, Plus, GripVertical } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentObjectivesListProps {\n agent: Agent;\n config: GagentsHookConfig;\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\ninterface ObjectiveFormState {\n title: string;\n slug: string;\n prompt: string;\n}\n\nconst EMPTY_FORM: ObjectiveFormState = { title: \"\", slug: \"\", prompt: \"\" };\n\nexport function AgentObjectivesList({ agent, config }: AgentObjectivesListProps) {\n const { data: objectivesData, isLoading } = useObjectives(config, agent.id);\n const createMutation = useCreateObjective(config);\n const updateMutation = useUpdateObjective(config);\n const deleteMutation = useDeleteObjective(config);\n\n const [formOpen, setFormOpen] = useState(false);\n const [editTarget, setEditTarget] = useState<Objective | null>(null);\n const [form, setForm] = useState<ObjectiveFormState>(EMPTY_FORM);\n const [slugManual, setSlugManual] = useState(false);\n const [removeTarget, setRemoveTarget] = useState<Objective | null>(null);\n\n const objectives = objectivesData?.data || [];\n const sortedObjectives = [...objectives].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n\n async function handleReorder(newItems: Objective[]) {\n const updates = newItems\n .map((item, index) => ({ ...item, order: index + 1 }))\n .filter((item, index) => sortedObjectives[index]?.id !== item.id);\n\n try {\n for (const item of updates) {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: item.id,\n body: { order: item.order },\n });\n }\n toast.success(\"Ordem atualizada\");\n } catch {\n toast.error(\"Erro ao reordenar objetivos\");\n }\n }\n\n function openCreate() {\n setEditTarget(null);\n setForm(EMPTY_FORM);\n setSlugManual(false);\n setFormOpen(true);\n }\n\n function openEdit(objective: Objective) {\n setEditTarget(objective);\n setForm({\n title: objective.title,\n slug: objective.slug || \"\",\n prompt: objective.prompt || \"\",\n });\n setSlugManual(true);\n setFormOpen(true);\n }\n\n async function handleSubmit() {\n if (!form.title.trim()) return;\n\n const effectiveSlug = form.slug.trim() || slugify(form.title);\n const nextOrder =\n sortedObjectives.length > 0\n ? Math.max(...sortedObjectives.map((o) => o.order)) + 1\n : 1;\n\n try {\n if (editTarget) {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: editTarget.id,\n body: {\n title: form.title.trim(),\n slug: effectiveSlug,\n prompt: form.prompt.trim() || null,\n },\n });\n toast.success(\"Objetivo atualizado\");\n } else {\n await createMutation.mutateAsync({\n idAgent: agent.id,\n body: {\n title: form.title.trim(),\n slug: effectiveSlug,\n prompt: form.prompt.trim() || null,\n order: nextOrder,\n },\n });\n toast.success(\"Objetivo criado\");\n }\n setFormOpen(false);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : editTarget\n ? \"Erro ao atualizar objetivo\"\n : \"Erro ao criar objetivo\",\n );\n }\n }\n\n async function handleToggleActive(objective: Objective, checked: boolean) {\n try {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: objective.id,\n body: { active: checked },\n });\n toast.success(checked ? \"Objetivo ativado\" : \"Objetivo desativado\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao alterar estado do objetivo\",\n );\n }\n }\n\n async function handleRemove() {\n if (!removeTarget) return;\n try {\n await deleteMutation.mutateAsync({\n idAgent: agent.id,\n id: removeTarget.id,\n });\n toast.success(\"Objetivo removido\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao remover o objetivo\",\n );\n } finally {\n setRemoveTarget(null);\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n {sortedObjectives.length} objetivo{sortedObjectives.length !== 1 ? \"s\" : \"\"} definido{sortedObjectives.length !== 1 ? \"s\" : \"\"}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n Objetivos são modos de conversa que o agente ativa automaticamente conforme a intenção do utilizador.\n </p>\n </div>\n <Button onClick={openCreate} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Novo Objetivo\n </Button>\n </div>\n\n {sortedObjectives.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <Target className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhum objetivo definido. Adicione objetivos para orientar o agente em diferentes contextos.\n </p>\n </div>\n ) : (\n <Sortable\n value={sortedObjectives}\n onValueChange={handleReorder}\n getItemValue={(item) => item.id}\n >\n <SortableContent className=\"space-y-2\">\n {sortedObjectives.map((objective) => (\n <SortableItem\n key={objective.id}\n value={objective.id}\n className=\"flex items-center gap-3 rounded-lg border bg-card p-3\"\n >\n <SortableItemHandle className=\"shrink-0 text-muted-foreground hover:text-foreground\">\n <GripVertical className=\"h-5 w-5\" />\n </SortableItemHandle>\n\n <div className=\"flex flex-1 flex-col gap-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-medium\">\n {objective.title}\n </span>\n {objective.slug && (\n <Badge variant=\"secondary\" className=\"shrink-0 text-xs font-mono\">\n {objective.slug}\n </Badge>\n )}\n </div>\n {objective.prompt && (\n <p className=\"line-clamp-2 text-xs text-muted-foreground\">\n {objective.prompt}\n </p>\n )}\n </div>\n\n <Switch\n checked={objective.active}\n onCheckedChange={(checked) =>\n handleToggleActive(objective, checked)\n }\n disabled={updateMutation.isPending}\n />\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={() => openEdit(objective)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-destructive\"\n onClick={() => setRemoveTarget(objective)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </SortableItem>\n ))}\n </SortableContent>\n <SortableOverlay>\n {({ value }) => {\n const obj = sortedObjectives.find((o) => o.id === value);\n return (\n <div className=\"flex items-center gap-3 rounded-lg border bg-card p-3 shadow-lg\">\n <GripVertical className=\"h-5 w-5 text-muted-foreground\" />\n <span className=\"font-medium\">{obj?.title}</span>\n </div>\n );\n }}\n </SortableOverlay>\n </Sortable>\n )}\n\n {/* Create/Edit Dialog */}\n <Dialog open={formOpen} onOpenChange={setFormOpen}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n {editTarget ? \"Editar Objetivo\" : \"Novo Objetivo\"}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label>Título *</Label>\n <Input\n value={form.title}\n onChange={(e) => {\n const title = e.target.value;\n setForm((f) => ({\n ...f,\n title,\n ...(!slugManual ? { slug: slugify(title) } : {}),\n }));\n }}\n placeholder=\"Ex: Agendar Consulta\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label>Slug (identificador) *</Label>\n <Input\n value={form.slug}\n onChange={(e) => {\n setSlugManual(true);\n setForm((f) => ({ ...f, slug: e.target.value }));\n }}\n placeholder=\"Ex: agendar-consulta\"\n className=\"font-mono\"\n />\n <p className=\"text-xs text-muted-foreground\">\n Gerado automaticamente. Usado pelo agente para identificar o objetivo.\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Instruções do Objetivo</Label>\n <Textarea\n value={form.prompt}\n onChange={(e) =>\n setForm((f) => ({ ...f, prompt: e.target.value }))\n }\n placeholder=\"Instruções detalhadas que o agente seguirá quando este objetivo for ativado. Ex: passos para agendar consulta, perguntas a fazer, validações necessárias...\"\n rows={8}\n />\n <p className=\"text-xs text-muted-foreground\">\n Estas instruções são carregadas automaticamente quando o agente detecta que o utilizador precisa deste objetivo.\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setFormOpen(false)}\n >\n Cancelar\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={\n !form.title.trim() ||\n createMutation.isPending ||\n updateMutation.isPending\n }\n >\n {editTarget ? \"Salvar\" : \"Criar\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!removeTarget}\n onOpenChange={(open) => !open && setRemoveTarget(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remover objetivo?</AlertDialogTitle>\n <AlertDialogDescription>\n O objetivo será removido permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancelar</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleRemove}\n disabled={deleteMutation.isPending}\n >\n Remover\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","import {\n type Announcements,\n closestCenter,\n closestCorners,\n DndContext,\n type DndContextProps,\n type DragEndEvent,\n type DraggableAttributes,\n type DraggableSyntheticListeners,\n DragOverlay,\n type DragStartEvent,\n type DropAnimation,\n defaultDropAnimationSideEffects,\n KeyboardSensor,\n MouseSensor,\n type ScreenReaderInstructions,\n TouchSensor,\n type UniqueIdentifier,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n restrictToHorizontalAxis,\n restrictToParentElement,\n restrictToVerticalAxis,\n} from \"@dnd-kit/modifiers\";\nimport {\n arrayMove,\n horizontalListSortingStrategy,\n SortableContext,\n type SortableContextProps,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { useComposedRefs } from \"../../lib/compose-refs\";\nimport { cn } from \"../../lib\";\n\nconst orientationConfig = {\n vertical: {\n modifiers: [restrictToVerticalAxis, restrictToParentElement],\n strategy: verticalListSortingStrategy,\n collisionDetection: closestCenter,\n },\n horizontal: {\n modifiers: [restrictToHorizontalAxis, restrictToParentElement],\n strategy: horizontalListSortingStrategy,\n collisionDetection: closestCenter,\n },\n mixed: {\n modifiers: [restrictToParentElement],\n strategy: undefined,\n collisionDetection: closestCorners,\n },\n};\n\nconst ROOT_NAME = \"Sortable\";\nconst CONTENT_NAME = \"SortableContent\";\nconst ITEM_NAME = \"SortableItem\";\nconst ITEM_HANDLE_NAME = \"SortableItemHandle\";\nconst OVERLAY_NAME = \"SortableOverlay\";\n\ninterface SortableRootContextValue<T> {\n id: string;\n items: UniqueIdentifier[];\n modifiers: DndContextProps[\"modifiers\"];\n strategy: SortableContextProps[\"strategy\"];\n activeId: UniqueIdentifier | null;\n setActiveId: (id: UniqueIdentifier | null) => void;\n getItemValue: (item: T) => UniqueIdentifier;\n flatCursor: boolean;\n}\n\nconst SortableRootContext =\n React.createContext<SortableRootContextValue<unknown> | null>(null);\n\nfunction useSortableContext(consumerName: string) {\n const context = React.useContext(SortableRootContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface GetItemValue<T> {\n /**\n * Callback that returns a unique identifier for each sortable item. Required for array of objects.\n * @example getItemValue={(item) => item.id}\n */\n getItemValue: (item: T) => UniqueIdentifier;\n}\n\ntype SortableProps<T> = DndContextProps &\n (T extends object ? GetItemValue<T> : Partial<GetItemValue<T>>) & {\n value: T[];\n onValueChange?: (items: T[]) => void;\n onMove?: (\n event: DragEndEvent & { activeIndex: number; overIndex: number },\n ) => void;\n strategy?: SortableContextProps[\"strategy\"];\n orientation?: \"vertical\" | \"horizontal\" | \"mixed\";\n flatCursor?: boolean;\n };\n\nfunction Sortable<T>(props: SortableProps<T>) {\n const {\n value,\n onValueChange,\n collisionDetection,\n modifiers,\n strategy,\n onMove,\n orientation = \"vertical\",\n flatCursor = false,\n getItemValue: getItemValueProp,\n accessibility,\n ...sortableProps\n } = props;\n\n const id = React.useId();\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null);\n\n const sensors = useSensors(\n useSensor(MouseSensor),\n useSensor(TouchSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n const config = React.useMemo(\n () => orientationConfig[orientation],\n [orientation],\n );\n\n const getItemValue = React.useCallback(\n (item: T): UniqueIdentifier => {\n if (typeof item === \"object\" && !getItemValueProp) {\n throw new Error(\n \"`getItemValue` is required when using array of objects\",\n );\n }\n return getItemValueProp\n ? getItemValueProp(item)\n : (item as UniqueIdentifier);\n },\n [getItemValueProp],\n );\n\n const items = React.useMemo(() => {\n return value.map((item) => getItemValue(item));\n }, [value, getItemValue]);\n\n /* eslint-disable react-hooks/preserve-manual-memoization, react-hooks/exhaustive-deps -- shadcn sortable: intentional dependency on specific props */\n const onDragStart = React.useCallback(\n (event: DragStartEvent) => {\n sortableProps.onDragStart?.(event);\n\n if (event.activatorEvent.defaultPrevented) return;\n\n setActiveId(event.active.id);\n },\n [sortableProps.onDragStart],\n );\n\n const onDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n sortableProps.onDragEnd?.(event);\n\n if (event.activatorEvent.defaultPrevented) return;\n\n const { active, over } = event;\n if (over && active.id !== over?.id) {\n const activeIndex = value.findIndex(\n (item) => getItemValue(item) === active.id,\n );\n const overIndex = value.findIndex(\n (item) => getItemValue(item) === over.id,\n );\n\n if (onMove) {\n onMove({ ...event, activeIndex, overIndex });\n } else {\n onValueChange?.(arrayMove(value, activeIndex, overIndex));\n }\n }\n setActiveId(null);\n },\n [value, onValueChange, onMove, getItemValue, sortableProps.onDragEnd],\n );\n\n const onDragCancel = React.useCallback(\n (event: DragEndEvent) => {\n sortableProps.onDragCancel?.(event);\n\n if (event.activatorEvent.defaultPrevented) return;\n\n setActiveId(null);\n },\n [sortableProps.onDragCancel],\n );\n /* eslint-enable react-hooks/preserve-manual-memoization, react-hooks/exhaustive-deps */\n\n const announcements: Announcements = React.useMemo(\n () => ({\n onDragStart({ active }) {\n const activeValue = active.id.toString();\n return `Grabbed sortable item \"${activeValue}\". Current position is ${active.data.current?.sortable.index + 1} of ${value.length}. Use arrow keys to move, space to drop.`;\n },\n onDragOver({ active, over }) {\n if (over) {\n const overIndex = over.data.current?.sortable.index ?? 0;\n const activeIndex = active.data.current?.sortable.index ?? 0;\n const moveDirection = overIndex > activeIndex ? \"down\" : \"up\";\n const activeValue = active.id.toString();\n return `Sortable item \"${activeValue}\" moved ${moveDirection} to position ${overIndex + 1} of ${value.length}.`;\n }\n return \"Sortable item is no longer over a droppable area. Press escape to cancel.\";\n },\n onDragEnd({ active, over }) {\n const activeValue = active.id.toString();\n if (over) {\n const overIndex = over.data.current?.sortable.index ?? 0;\n return `Sortable item \"${activeValue}\" dropped at position ${overIndex + 1} of ${value.length}.`;\n }\n return `Sortable item \"${activeValue}\" dropped. No changes were made.`;\n },\n onDragCancel({ active }) {\n const activeIndex = active.data.current?.sortable.index ?? 0;\n const activeValue = active.id.toString();\n return `Sorting cancelled. Sortable item \"${activeValue}\" returned to position ${activeIndex + 1} of ${value.length}.`;\n },\n onDragMove({ active, over }) {\n if (over) {\n const overIndex = over.data.current?.sortable.index ?? 0;\n const activeIndex = active.data.current?.sortable.index ?? 0;\n const moveDirection = overIndex > activeIndex ? \"down\" : \"up\";\n const activeValue = active.id.toString();\n return `Sortable item \"${activeValue}\" is moving ${moveDirection} to position ${overIndex + 1} of ${value.length}.`;\n }\n return \"Sortable item is no longer over a droppable area. Press escape to cancel.\";\n },\n }),\n [value],\n );\n\n const screenReaderInstructions: ScreenReaderInstructions = React.useMemo(\n () => ({\n draggable: `\n To pick up a sortable item, press space or enter.\n While dragging, use the ${orientation === \"vertical\" ? \"up and down\" : orientation === \"horizontal\" ? \"left and right\" : \"arrow\"} keys to move the item.\n Press space or enter again to drop the item in its new position, or press escape to cancel.\n `,\n }),\n [orientation],\n );\n\n const contextValue = React.useMemo(\n () => ({\n id,\n items,\n modifiers: modifiers ?? config.modifiers,\n strategy: strategy ?? config.strategy,\n activeId,\n setActiveId,\n getItemValue,\n flatCursor,\n }),\n [\n id,\n items,\n modifiers,\n strategy,\n config.modifiers,\n config.strategy,\n activeId,\n getItemValue,\n flatCursor,\n ],\n );\n\n return (\n <SortableRootContext.Provider\n value={contextValue as SortableRootContextValue<unknown>}\n >\n <DndContext\n collisionDetection={collisionDetection ?? config.collisionDetection}\n modifiers={modifiers ?? config.modifiers}\n sensors={sensors}\n {...sortableProps}\n id={id}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onDragCancel={onDragCancel}\n accessibility={{\n announcements,\n screenReaderInstructions,\n ...accessibility,\n }}\n />\n </SortableRootContext.Provider>\n );\n}\n\nconst SortableContentContext = React.createContext<boolean>(false);\n\ninterface SortableContentProps extends React.ComponentProps<\"div\"> {\n strategy?: SortableContextProps[\"strategy\"];\n children: React.ReactNode;\n asChild?: boolean;\n withoutSlot?: boolean;\n}\n\nfunction SortableContent(props: SortableContentProps) {\n const {\n strategy: strategyProp,\n asChild,\n withoutSlot,\n children,\n ref,\n ...contentProps\n } = props;\n\n const context = useSortableContext(CONTENT_NAME);\n\n const ContentPrimitive = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <SortableContentContext.Provider value={true}>\n <SortableContext\n items={context.items}\n strategy={strategyProp ?? context.strategy}\n >\n {withoutSlot ? (\n children\n ) : (\n <ContentPrimitive\n data-slot=\"sortable-content\"\n {...contentProps}\n ref={ref}\n >\n {children}\n </ContentPrimitive>\n )}\n </SortableContext>\n </SortableContentContext.Provider>\n );\n}\n\ninterface SortableItemContextValue {\n id: string;\n attributes: DraggableAttributes;\n listeners: DraggableSyntheticListeners | undefined;\n setActivatorNodeRef: (node: HTMLElement | null) => void;\n isDragging?: boolean;\n disabled?: boolean;\n}\n\nconst SortableItemContext =\n React.createContext<SortableItemContextValue | null>(null);\n\nfunction useSortableItemContext(consumerName: string) {\n const context = React.useContext(SortableItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface SortableItemProps extends React.ComponentProps<\"div\"> {\n value: UniqueIdentifier;\n asHandle?: boolean;\n asChild?: boolean;\n disabled?: boolean;\n}\n\nfunction SortableItem(props: SortableItemProps) {\n const {\n value,\n style,\n asHandle,\n asChild,\n disabled,\n className,\n ref,\n ...itemProps\n } = props;\n\n const inSortableContent = React.useContext(SortableContentContext);\n const inSortableOverlay = React.useContext(SortableOverlayContext);\n\n if (!inSortableContent && !inSortableOverlay) {\n throw new Error(\n `\\`${ITEM_NAME}\\` must be used within \\`${CONTENT_NAME}\\` or \\`${OVERLAY_NAME}\\``,\n );\n }\n\n if (value === \"\") {\n throw new Error(`\\`${ITEM_NAME}\\` value cannot be an empty string`);\n }\n\n const context = useSortableContext(ITEM_NAME);\n const id = React.useId();\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: value, disabled });\n\n const composedRef = useComposedRefs(ref, (node) => {\n if (disabled) return;\n setNodeRef(node);\n if (asHandle) setActivatorNodeRef(node);\n });\n\n const composedStyle = React.useMemo<React.CSSProperties>(() => {\n return {\n transform: CSS.Translate.toString(transform),\n transition,\n ...style,\n };\n }, [transform, transition, style]);\n\n const itemContext = React.useMemo<SortableItemContextValue>(\n () => ({\n id,\n attributes,\n listeners,\n setActivatorNodeRef,\n isDragging,\n disabled,\n }),\n [id, attributes, listeners, setActivatorNodeRef, isDragging, disabled],\n );\n\n const ItemPrimitive = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <SortableItemContext.Provider value={itemContext}>\n <ItemPrimitive\n id={id}\n data-disabled={disabled}\n data-dragging={isDragging ? \"\" : undefined}\n data-slot=\"sortable-item\"\n {...itemProps}\n {...(asHandle && !disabled ? attributes : {})}\n {...(asHandle && !disabled ? listeners : {})}\n ref={composedRef}\n style={composedStyle}\n className={cn(\n \"focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1\",\n {\n \"touch-none select-none\": asHandle,\n \"cursor-default\": context.flatCursor,\n \"data-dragging:cursor-grabbing\": !context.flatCursor,\n \"cursor-grab\": !isDragging && asHandle && !context.flatCursor,\n \"opacity-50\": isDragging,\n \"pointer-events-none opacity-50\": disabled,\n },\n className,\n )}\n />\n </SortableItemContext.Provider>\n );\n}\n\ninterface SortableItemHandleProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction SortableItemHandle(props: SortableItemHandleProps) {\n const { asChild, disabled, className, ref, ...itemHandleProps } = props;\n\n const context = useSortableContext(ITEM_HANDLE_NAME);\n const itemContext = useSortableItemContext(ITEM_HANDLE_NAME);\n\n const isDisabled = disabled ?? itemContext.disabled;\n\n const composedRef = useComposedRefs(ref, (node) => {\n if (!isDisabled) return;\n itemContext.setActivatorNodeRef(node);\n });\n\n const HandlePrimitive = asChild ? SlotPrimitive.Slot : \"button\";\n\n return (\n <HandlePrimitive\n type=\"button\"\n aria-controls={itemContext.id}\n data-disabled={isDisabled}\n data-dragging={itemContext.isDragging ? \"\" : undefined}\n data-slot=\"sortable-item-handle\"\n {...itemHandleProps}\n {...(isDisabled ? {} : itemContext.attributes)}\n {...(isDisabled ? {} : itemContext.listeners)}\n ref={composedRef}\n className={cn(\n \"select-none disabled:pointer-events-none disabled:opacity-50\",\n context.flatCursor\n ? \"cursor-default\"\n : \"cursor-grab data-dragging:cursor-grabbing\",\n className,\n )}\n disabled={isDisabled}\n />\n );\n}\n\nconst SortableOverlayContext = React.createContext(false);\n\nconst dropAnimation: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: \"0.4\",\n },\n },\n }),\n};\n\ninterface SortableOverlayProps\n extends Omit<React.ComponentProps<typeof DragOverlay>, \"children\"> {\n container?: Element | DocumentFragment | null;\n children?:\n | ((params: { value: UniqueIdentifier }) => React.ReactNode)\n | React.ReactNode;\n}\n\nfunction SortableOverlay(props: SortableOverlayProps) {\n const { container: containerProp, children, ...overlayProps } = props;\n\n const context = useSortableContext(OVERLAY_NAME);\n\n const [mounted, setMounted] = React.useState(false);\n\n React.useLayoutEffect(() => setMounted(true), []);\n\n const container =\n containerProp ?? (mounted ? globalThis.document?.body : null);\n\n if (!container) return null;\n\n return ReactDOM.createPortal(\n <DragOverlay\n dropAnimation={dropAnimation}\n modifiers={context.modifiers}\n className={cn(!context.flatCursor && \"cursor-grabbing\")}\n {...overlayProps}\n >\n <SortableOverlayContext.Provider value={true}>\n {context.activeId\n ? typeof children === \"function\"\n ? children({ value: context.activeId })\n : children\n : null}\n </SortableOverlayContext.Provider>\n </DragOverlay>,\n container,\n );\n}\n\nexport {\n Sortable,\n SortableContent,\n SortableItem,\n SortableItemHandle,\n SortableOverlay,\n //\n type SortableProps,\n};\n","import * as React from \"react\";\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === \"function\") {\n return ref(value);\n }\n if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import { useState, useRef, useCallback, useEffect } from \"react\";\nimport type { Agent, PromptVersion, Objective, AgentTool, Tool } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { usePromptVersions } from \"../../hooks\";\nimport { useUpdateAgent } from \"../../hooks\";\nimport { useAgentTools } from \"../../hooks\";\nimport { useObjectives } from \"../../hooks\";\nimport { useTools } from \"../../hooks\";\nimport { Button, Input, Skeleton, Badge } from \"@greatapps/greatauth-ui/ui\";\nimport { FileText, Loader2, ChevronDown, ChevronUp, RotateCcw } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentPromptEditorProps {\n config: GagentsHookConfig;\n agent: Agent;\n}\n\nfunction formatDate(dateStr: string): string {\n const date = new Date(dateStr);\n return date.toLocaleDateString(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction computeDiff(\n oldText: string,\n newText: string,\n): { type: \"added\" | \"removed\" | \"equal\"; line: string }[] {\n const oldLines = oldText.split(\"\\n\");\n const newLines = newText.split(\"\\n\");\n const result: { type: \"added\" | \"removed\" | \"equal\"; line: string }[] = [];\n const maxLen = Math.max(oldLines.length, newLines.length);\n\n for (let i = 0; i < maxLen; i++) {\n const oldLine = i < oldLines.length ? oldLines[i] : undefined;\n const newLine = i < newLines.length ? newLines[i] : undefined;\n\n if (oldLine === newLine) {\n result.push({ type: \"equal\", line: newLine! });\n } else {\n if (oldLine !== undefined) {\n result.push({ type: \"removed\", line: oldLine });\n }\n if (newLine !== undefined) {\n result.push({ type: \"added\", line: newLine });\n }\n }\n }\n\n return result;\n}\n\nfunction buildPreview(\n promptText: string,\n objectives: Objective[],\n agentTools: AgentTool[],\n allTools: Tool[],\n): string {\n let preview = promptText;\n\n const activeObjectives = objectives.filter((o) => o.active);\n if (activeObjectives.length > 0) {\n preview += \"\\n\\n[SKILLS DISPONÍVEIS]\\n\";\n for (const obj of activeObjectives) {\n preview += `- ${obj.title}`;\n if (obj.prompt) preview += `: ${obj.prompt}`;\n preview += \"\\n\";\n }\n }\n\n const enabledAgentTools = agentTools.filter((at) => at.enabled);\n if (enabledAgentTools.length > 0) {\n const toolMap = new Map(allTools.map((t) => [t.id, t]));\n preview += \"\\n[TOOLS DISPONÍVEIS]\\n\";\n for (const at of enabledAgentTools) {\n const tool = toolMap.get(at.id_tool);\n const name = tool?.name || `Tool #${at.id_tool}`;\n const desc = tool?.description ? `: ${tool.description}` : \"\";\n preview += `- ${name}${desc}`;\n if (at.custom_instructions) {\n preview += `\\n Instruções: ${at.custom_instructions}`;\n }\n preview += \"\\n\";\n }\n }\n\n return preview;\n}\n\nexport function AgentPromptEditor({ config, agent }: AgentPromptEditorProps) {\n const { data: versionsData, isLoading } = usePromptVersions(config, agent.id);\n const updateAgent = useUpdateAgent(config);\n const { data: objectivesData } = useObjectives(config, agent.id);\n const { data: agentToolsData } = useAgentTools(config, agent.id);\n const { data: toolsData } = useTools(config);\n\n const versions = (versionsData?.data || []) as PromptVersion[];\n const sortedVersions = [...versions].sort(\n (a, b) => new Date(b.datetime_add).getTime() - new Date(a.datetime_add).getTime(),\n );\n const currentVersion = sortedVersions.find((v) => v.is_current) || sortedVersions[0] || null;\n const currentPromptContent = currentVersion?.prompt_content ?? \"\";\n\n const [trackedAgentId, setTrackedAgentId] = useState(agent.id);\n const [promptText, setPromptText] = useState(currentPromptContent);\n const [promptInitialized, setPromptInitialized] = useState(false);\n const [changeNotes, setChangeNotes] = useState(\"\");\n const [showPreview, setShowPreview] = useState(false);\n const [compareVersionId, setCompareVersionId] = useState<number | null>(null);\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // Initialize prompt text from current version when data loads\n if (!promptInitialized && currentPromptContent && !isLoading) {\n setPromptText(currentPromptContent);\n setPromptInitialized(true);\n }\n\n // Reset prompt text when agent changes\n if (trackedAgentId !== agent.id) {\n setTrackedAgentId(agent.id);\n setPromptText(currentPromptContent);\n setPromptInitialized(!!currentPromptContent);\n setCompareVersionId(null);\n }\n\n // Auto-resize textarea\n const autoResize = useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.max(300, el.scrollHeight)}px`;\n }, []);\n\n useEffect(() => {\n autoResize();\n }, [promptText, autoResize]);\n\n // Tab key support\n function handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n if (e.key === \"Tab\") {\n e.preventDefault();\n const el = e.currentTarget;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n const value = el.value;\n const newValue = value.substring(0, start) + \" \" + value.substring(end);\n setPromptText(newValue);\n // Restore cursor position after React re-render\n requestAnimationFrame(() => {\n el.selectionStart = el.selectionEnd = start + 2;\n });\n }\n }\n\n const compareVersion = sortedVersions.find((v) => v.id === compareVersionId);\n\n // Diff: always compare selected older version against current\n const diffLines =\n currentVersion && compareVersion && compareVersion.id !== currentVersion.id\n ? computeDiff(compareVersion.prompt_content ?? \"\", currentVersion.prompt_content ?? \"\")\n : null;\n\n async function handleSave() {\n const body: Record<string, unknown> = {\n prompt: promptText.trim(),\n };\n if (changeNotes.trim()) {\n body.change_notes = changeNotes.trim();\n }\n\n try {\n await updateAgent.mutateAsync({ id: agent.id, body });\n setChangeNotes(\"\");\n toast.success(\"Prompt salvo com sucesso\");\n } catch {\n toast.error(\"Erro ao salvar prompt\");\n }\n }\n\n function handleRestore(version: PromptVersion) {\n setPromptText(version.prompt_content ?? \"\");\n setChangeNotes(`Restaurado da v${version.version_number}`);\n toast.info(\"Prompt restaurado no editor. Clique em Salvar para confirmar.\");\n }\n\n const charCount = promptText.length;\n const tokenEstimate = Math.ceil(charCount / 4);\n\n const objectives = objectivesData?.data || [];\n const agentTools = agentToolsData?.data || [];\n const allTools = toolsData?.data || [];\n const previewText = buildPreview(promptText, objectives, agentTools, allTools);\n\n if (isLoading) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4 p-4 lg:flex-row\">\n {/* Editor section */}\n <div className=\"min-w-0 flex-1 space-y-4\">\n {/* Textarea */}\n <div className=\"space-y-2\">\n <textarea\n ref={textareaRef}\n value={promptText}\n onChange={(e) => setPromptText(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Escreva o prompt do sistema aqui...\"\n disabled={updateAgent.isPending}\n className=\"w-full resize-none rounded-lg border bg-background p-3 font-mono text-sm leading-relaxed focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50\"\n style={{ minHeight: \"300px\" }}\n />\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{charCount.toLocaleString(\"pt-BR\")} caracteres</span>\n <span>·</span>\n <span>~{tokenEstimate.toLocaleString(\"pt-BR\")} tokens</span>\n </div>\n </div>\n\n {/* Save row */}\n <div className=\"flex items-center gap-3\">\n <Input\n value={changeNotes}\n onChange={(e) => setChangeNotes(e.target.value)}\n placeholder=\"O que mudou? (opcional)\"\n disabled={updateAgent.isPending}\n className=\"flex-1\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSave();\n }\n }}\n />\n <Button\n onClick={handleSave}\n disabled={updateAgent.isPending || !promptText.trim()}\n >\n {updateAgent.isPending && (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n )}\n Salvar\n </Button>\n </div>\n\n {/* Preview section */}\n <div className=\"rounded-lg border\">\n <button\n type=\"button\"\n onClick={() => setShowPreview((prev) => !prev)}\n className=\"flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>Preview do prompt final</span>\n {showPreview ? (\n <ChevronUp className=\"h-4 w-4\" />\n ) : (\n <ChevronDown className=\"h-4 w-4\" />\n )}\n </button>\n {showPreview && (\n <div className=\"border-t px-4 py-3\">\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap font-mono text-sm leading-relaxed\">\n {previewText.split(\"\\n\").map((line, i) => {\n const isSection =\n line.startsWith(\"[SKILLS DISPONÍVEIS]\") ||\n line.startsWith(\"[TOOLS DISPONÍVEIS]\");\n return (\n <span\n key={i}\n className={isSection ? \"font-semibold text-muted-foreground\" : \"\"}\n >\n {line}\n {\"\\n\"}\n </span>\n );\n })}\n </pre>\n </div>\n )}\n </div>\n\n {/* Diff panel (when comparing) */}\n {diffLines && compareVersion && currentVersion && (\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n Diferenças: v{compareVersion.version_number} → v{currentVersion.version_number} (actual)\n </h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCompareVersionId(null)}\n className=\"text-xs\"\n >\n Fechar\n </Button>\n </div>\n <div className=\"max-h-64 overflow-auto rounded-lg border font-mono text-sm\">\n {diffLines.map((line, i) => (\n <div\n key={i}\n className={`whitespace-pre-wrap px-3 py-0.5 ${\n line.type === \"added\"\n ? \"bg-green-500/10 text-green-700 dark:text-green-400\"\n : line.type === \"removed\"\n ? \"bg-red-500/10 text-red-700 dark:text-red-400\"\n : \"\"\n }`}\n >\n <span className=\"mr-2 inline-block w-4 select-none text-muted-foreground\">\n {line.type === \"added\" ? \"+\" : line.type === \"removed\" ? \"-\" : \" \"}\n </span>\n {line.line || \" \"}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Timeline section (right) */}\n <div className=\"w-full space-y-2 lg:w-80 lg:shrink-0\">\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n Histórico de Versões\n </h3>\n {sortedVersions.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <FileText className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma versão encontrada. Salve o prompt para criar a primeira versão.\n </p>\n </div>\n ) : (\n <div className=\"space-y-1\">\n {sortedVersions.map((version, idx) => {\n const isCurrent = idx === 0;\n const isComparing = version.id === compareVersionId;\n return (\n <div\n key={version.id}\n className={`rounded-lg border p-3 transition-colors ${\n isCurrent\n ? \"border-primary bg-primary/5\"\n : isComparing\n ? \"border-muted-foreground/30 bg-muted/50\"\n : \"\"\n }`}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-medium\">\n v{version.version_number}\n </span>\n {isCurrent && (\n <Badge variant=\"default\" className=\"text-[10px] px-1.5 py-0\">\n Actual\n </Badge>\n )}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {formatDate(version.datetime_add)}\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{(version.prompt_content ?? \"\").length} chars</span>\n <span>·</span>\n <span className=\"truncate font-mono\">\n {(version.prompt_hash ?? \"\").slice(0, 8)}\n </span>\n </div>\n {version.change_notes && (\n <div className=\"mt-1.5 text-xs italic text-muted-foreground\">\n {version.change_notes}\n </div>\n )}\n {!isCurrent && (\n <div className=\"mt-2 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => setCompareVersionId(isComparing ? null : version.id)}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground\"\n >\n <FileText className=\"h-3 w-3\" />\n {isComparing ? \"Ocultar diff\" : \"Comparar\"}\n </button>\n <button\n type=\"button\"\n onClick={() => handleRestore(version)}\n className=\"flex items-center gap-1 text-xs text-primary hover:underline\"\n >\n <RotateCcw className=\"h-3 w-3\" />\n Restaurar\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { Conversation } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Skeleton,\n Badge,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { MessageCircle, ExternalLink } from \"lucide-react\";\nimport { ConversationView } from \"./conversation-view\";\n\ninterface AgentConversationsTableProps {\n conversations: Conversation[];\n isLoading: boolean;\n contactsMap?: Map<number, string>;\n objectivesMap?: Map<number, string>;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nfunction formatRelativeDate(dateStr: string | null): string {\n if (!dateStr) return \"—\";\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 1) return \"agora\";\n if (diffMin < 60) return `${diffMin}m atrás`;\n const diffHours = Math.floor(diffMin / 60);\n if (diffHours < 24) return `${diffHours}h atrás`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays}d atrás`;\n return date.toLocaleDateString(\"pt-BR\");\n}\n\nexport function AgentConversationsTable({\n conversations,\n isLoading,\n contactsMap,\n objectivesMap,\n config,\n renderChatLink,\n}: AgentConversationsTableProps) {\n const [selectedId, setSelectedId] = useState<number | null>(null);\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-12 w-full\" />\n ))}\n </div>\n );\n }\n\n if (conversations.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <MessageCircle className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma conversa encontrada.\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n <TableHead>Contato</TableHead>\n <TableHead>Objetivo</TableHead>\n <TableHead className=\"text-right\">Mensagens</TableHead>\n <TableHead className=\"text-right\">Tokens</TableHead>\n <TableHead>Criado em</TableHead>\n <TableHead>Atualizado em</TableHead>\n <TableHead className=\"w-10\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {conversations.map((conversation) => (\n <TableRow\n key={conversation.id}\n className=\"cursor-pointer\"\n onClick={() =>\n setSelectedId(\n selectedId === conversation.id ? null : conversation.id,\n )\n }\n data-state={selectedId === conversation.id ? \"selected\" : undefined}\n >\n <TableCell className=\"font-mono text-xs\">\n {conversation.id}\n </TableCell>\n <TableCell>\n {contactsMap?.get(conversation.id_contact) ?? conversation.id_contact}\n </TableCell>\n <TableCell>\n {conversation.id_objective && objectivesMap?.get(conversation.id_objective) ? (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {objectivesMap.get(conversation.id_objective)}\n </Badge>\n ) : (\n <span className=\"text-xs text-muted-foreground\">—</span>\n )}\n </TableCell>\n <TableCell className=\"text-right\">\n {conversation.message_count ?? \"—\"}\n </TableCell>\n <TableCell className=\"text-right\">\n {conversation.usage_tokens ?? \"—\"}\n </TableCell>\n <TableCell>\n {new Date(conversation.datetime_add).toLocaleDateString(\"pt-BR\")}\n </TableCell>\n <TableCell>\n {formatRelativeDate(conversation.datetime_alt)}\n </TableCell>\n <TableCell>\n {conversation.id_external ? (\n renderChatLink ? (\n <span onClick={(e) => e.stopPropagation()}>\n {renderChatLink(conversation.id_external)}\n </span>\n ) : (\n <a\n href={`/gchat/inbox/${conversation.id_external}`}\n title=\"Ver no Chat\"\n onClick={(e) => e.stopPropagation()}\n className=\"inline-flex items-center justify-center rounded-md p-1.5 text-muted-foreground hover:text-foreground hover:bg-accent transition-colors\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n </a>\n )\n ) : null}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n {selectedId && (\n <ConversationView\n conversationId={selectedId}\n onClose={() => setSelectedId(null)}\n contactsMap={contactsMap}\n config={config}\n renderChatLink={renderChatLink}\n />\n )}\n </div>\n );\n}\n","import { useConversation } from \"../../hooks\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { Skeleton, Button } from \"@greatapps/greatauth-ui/ui\";\nimport { X, MessageSquare } from \"lucide-react\";\n\ninterface ConversationViewProps {\n conversationId: number;\n onClose: () => void;\n contactsMap?: Map<number, string>;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nfunction formatDateTime(dateStr: string | null): string {\n if (!dateStr) return \"—\";\n return new Date(dateStr).toLocaleString(\"pt-BR\");\n}\n\nexport function ConversationView({\n conversationId,\n onClose,\n contactsMap,\n config,\n renderChatLink,\n}: ConversationViewProps) {\n const { data: conversation, isLoading } = useConversation(config, conversationId);\n\n if (isLoading) {\n return (\n <div className=\"rounded-lg border bg-card p-4 space-y-3\">\n <Skeleton className=\"h-6 w-48\" />\n <div className=\"grid grid-cols-2 gap-3\">\n {Array.from({ length: 6 }).map((_, i) => (\n <Skeleton key={i} className=\"h-10 w-full\" />\n ))}\n </div>\n </div>\n );\n }\n\n if (!conversation) {\n return (\n <div className=\"rounded-lg border bg-card p-4\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n Conversa não encontrada.\n </p>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rounded-lg border bg-card p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">Detalhes da conversa #{conversation.id}</h3>\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {conversation.id_external ? (\n renderChatLink ? (\n renderChatLink(conversation.id_external)\n ) : (\n <Button variant=\"outline\" size=\"sm\" asChild>\n <a href={`/gchat/inbox/${conversation.id_external}`}>\n <MessageSquare className=\"mr-2 h-4 w-4\" />\n Ver no Chat\n </a>\n </Button>\n )\n ) : null}\n\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-3 text-sm\">\n <div>\n <span className=\"text-muted-foreground\">Thread ID</span>\n <p className=\"font-mono text-xs mt-0.5\">\n {conversation.openai_thread_id || \"—\"}\n </p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Contato</span>\n <p className=\"mt-0.5\">\n {contactsMap?.get(conversation.id_contact) ?? conversation.id_contact}\n </p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Agente</span>\n <p className=\"mt-0.5\">{conversation.id_agent ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Mensagens</span>\n <p className=\"mt-0.5\">{conversation.message_count ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Tokens</span>\n <p className=\"mt-0.5\">{conversation.usage_tokens ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Rotações de Thread</span>\n <p className=\"mt-0.5\">{conversation.rotation_count ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Criado em</span>\n <p className=\"mt-0.5\">\n {formatDateTime(conversation.datetime_add)}\n </p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Atualizado em</span>\n <p className=\"mt-0.5\">\n {formatDateTime(conversation.datetime_alt)}\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { useAgentConversations, useGagentsContacts, useObjectives } from \"../../hooks\";\nimport { AgentConversationsTable } from \"./agent-conversations-table\";\n\ninterface AgentConversationsPanelProps {\n agent: Agent;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nexport function AgentConversationsPanel({\n agent,\n config,\n renderChatLink,\n}: AgentConversationsPanelProps) {\n const { data: conversationsData, isLoading } = useAgentConversations(\n config,\n agent.id,\n );\n const { data: contactsData } = useGagentsContacts(config);\n const { data: objectivesData } = useObjectives(config, agent.id);\n\n const conversations = conversationsData?.data || [];\n const contactsMap = new Map(\n (contactsData?.data || []).map((c) => [c.id, c.name]),\n );\n const objectivesMap = new Map(\n (objectivesData?.data || []).map((o) => [o.id, o.title]),\n );\n\n return (\n <div className=\"p-4\">\n <AgentConversationsTable\n conversations={conversations}\n isLoading={isLoading}\n contactsMap={contactsMap}\n objectivesMap={objectivesMap}\n config={config}\n renderChatLink={renderChatLink}\n />\n </div>\n );\n}\n","import type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { AgentToolsList } from \"./agent-tools-list\";\nimport { AgentObjectivesList } from \"./agent-objectives-list\";\nimport { AgentPromptEditor } from \"./agent-prompt-editor\";\nimport { AgentConversationsPanel } from \"../conversations/agent-conversations-panel\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Wrench, Target, FileText, MessageCircle } from \"lucide-react\";\n\ninterface AgentTabsProps {\n agent: Agent;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nexport function AgentTabs({ agent, config, renderChatLink }: AgentTabsProps) {\n return (\n <Tabs defaultValue=\"prompt\">\n <TabsList>\n <TabsTrigger value=\"prompt\" className=\"flex items-center gap-1.5\">\n <FileText className=\"h-3.5 w-3.5\" />\n Prompt\n </TabsTrigger>\n <TabsTrigger value=\"objetivos\" className=\"flex items-center gap-1.5\">\n <Target className=\"h-3.5 w-3.5\" />\n Objetivos\n </TabsTrigger>\n <TabsTrigger value=\"ferramentas\" className=\"flex items-center gap-1.5\">\n <Wrench className=\"h-3.5 w-3.5\" />\n Ferramentas\n </TabsTrigger>\n <TabsTrigger value=\"conversas\" className=\"flex items-center gap-1.5\">\n <MessageCircle className=\"h-3.5 w-3.5\" />\n Conversas\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"prompt\" className=\"mt-4\">\n <AgentPromptEditor agent={agent} config={config} />\n </TabsContent>\n\n <TabsContent value=\"objetivos\" className=\"mt-4\">\n <AgentObjectivesList agent={agent} config={config} />\n </TabsContent>\n\n <TabsContent value=\"ferramentas\" className=\"mt-4\">\n <AgentToolsList agent={agent} config={config} />\n </TabsContent>\n\n <TabsContent value=\"conversas\" className=\"mt-4\">\n <AgentConversationsPanel\n agent={agent}\n config={config}\n renderChatLink={renderChatLink}\n />\n </TabsContent>\n </Tabs>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { useTools, useDeleteTool } from \"../../hooks\";\nimport type { Tool } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { DataTable } from \"@greatapps/greatauth-ui\";\nimport {\n Input,\n Badge,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Pencil, Trash2, Search } from \"lucide-react\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\n\ninterface ToolsTableProps {\n onEdit: (tool: Tool) => void;\n config: GagentsHookConfig;\n}\n\nfunction useColumns(\n onEdit: (tool: Tool) => void,\n onDelete: (id: number) => void,\n): ColumnDef<Tool>[] {\n return [\n {\n accessorKey: \"name\",\n header: \"Nome\",\n cell: ({ row }) => (\n <span className=\"font-medium\">{row.original.name}</span>\n ),\n sortingFn: (rowA, rowB) =>\n rowA.original.name\n .toLowerCase()\n .localeCompare(rowB.original.name.toLowerCase()),\n },\n {\n accessorKey: \"slug\",\n header: \"Slug\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm font-mono\">\n {row.original.slug || \"\\u2014\"}\n </span>\n ),\n },\n {\n accessorKey: \"type\",\n header: \"Tipo\",\n cell: ({ row }) => (\n <Badge variant=\"secondary\">{row.original.type}</Badge>\n ),\n },\n {\n accessorKey: \"description\",\n header: \"Descrição\",\n cell: ({ row }) => {\n const desc = row.original.description;\n if (!desc) return <span className=\"text-muted-foreground text-sm\">{\"\\u2014\"}</span>;\n return (\n <span className=\"text-muted-foreground text-sm\">\n {desc.length > 50 ? `${desc.slice(0, 50)}...` : desc}\n </span>\n );\n },\n },\n {\n accessorKey: \"datetime_add\",\n header: \"Criado em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {format(new Date(row.original.datetime_add), \"dd/MM/yyyy\", {\n locale: ptBR,\n })}\n </span>\n ),\n },\n {\n id: \"actions\",\n size: 80,\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onEdit(row.original)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Editar</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => onDelete(row.original.id)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Excluir</TooltipContent>\n </Tooltip>\n </div>\n ),\n },\n ];\n}\n\nexport function ToolsTable({ onEdit, config }: ToolsTableProps) {\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n\n const queryParams = useMemo(() => {\n const params: Record<string, string> = {\n limit: \"15\",\n page: String(page),\n };\n if (search) {\n params.search = search;\n }\n return params;\n }, [search, page]);\n\n const { data, isLoading } = useTools(config, queryParams);\n const deleteTool = useDeleteTool(config);\n const [deleteId, setDeleteId] = useState<number | null>(null);\n\n const tools = data?.data || [];\n const total = data?.total || 0;\n\n const columns = useColumns(\n (tool) => onEdit(tool),\n (id) => setDeleteId(id),\n );\n\n function handleDelete() {\n if (!deleteId) return;\n deleteTool.mutate(deleteId, {\n onSuccess: () => {\n toast.success(\"Ferramenta excluída\");\n setDeleteId(null);\n },\n onError: () => toast.error(\"Erro ao excluir ferramenta\"),\n });\n }\n\n function handleSearchChange(value: string) {\n setSearch(value);\n setPage(1);\n }\n\n return (\n <>\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Buscar ferramentas...\"\n value={search}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n\n <DataTable\n columns={columns}\n data={tools}\n isLoading={isLoading}\n emptyMessage=\"Nenhuma ferramenta encontrada\"\n total={total}\n page={page}\n onPageChange={setPage}\n pageSize={15}\n />\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!deleteId}\n onOpenChange={(open) => !open && setDeleteId(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Excluir ferramenta?</AlertDialogTitle>\n <AlertDialogDescription>\n Esta ação não pode ser desfeita. A ferramenta será removida\n permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel variant=\"outline\" size=\"default\">\n Cancelar\n </AlertDialogCancel>\n <AlertDialogAction\n variant=\"default\"\n size=\"default\"\n onClick={handleDelete}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Excluir\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","import { useState } from \"react\";\nimport { useCreateTool, useUpdateTool } from \"../../hooks\";\nimport type { Tool } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Button,\n Input,\n Textarea,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\nconst TOOL_AUTH_TYPES = [\n { value: \"none\", label: \"Nenhuma\" },\n { value: \"api_key\", label: \"API Key\" },\n { value: \"oauth2\", label: \"OAuth 2.0\" },\n] as const;\n\ninterface ToolFormDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n tool?: Tool;\n config: GagentsHookConfig;\n}\n\ninterface FormState {\n name: string;\n slug: string;\n type: string;\n description: string;\n functionDefinitions: string;\n nameError: boolean;\n slugError: boolean;\n typeError: boolean;\n jsonError: boolean;\n}\n\nfunction toolToFormState(tool?: Tool): FormState {\n return {\n name: tool?.name || \"\",\n slug: tool?.slug || \"\",\n type: tool?.type || \"none\",\n description: tool?.description || \"\",\n functionDefinitions: tool?.function_definitions\n ? formatJson(tool.function_definitions)\n : \"\",\n nameError: false,\n slugError: false,\n typeError: false,\n jsonError: false,\n };\n}\n\nfunction formatJson(str: string): string {\n try {\n return JSON.stringify(JSON.parse(str), null, 2);\n } catch {\n return str;\n }\n}\n\nfunction slugify(name: string): string {\n return name\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction isValidJson(str: string): boolean {\n if (!str.trim()) return true;\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function ToolFormDialog({\n open,\n onOpenChange,\n tool,\n config,\n}: ToolFormDialogProps) {\n const isEditing = !!tool;\n const createTool = useCreateTool(config);\n const updateTool = useUpdateTool(config);\n const [form, setForm] = useState<FormState>(() => toolToFormState(tool));\n const [slugManuallyEdited, setSlugManuallyEdited] = useState(false);\n\n // Reset form when dialog opens or tool changes\n const [lastResetKey, setLastResetKey] = useState(\n () => `${tool?.id}-${open}`,\n );\n const resetKey = `${tool?.id}-${open}`;\n if (resetKey !== lastResetKey) {\n setLastResetKey(resetKey);\n setForm(toolToFormState(open ? tool : undefined));\n setSlugManuallyEdited(false);\n }\n\n const isPending = createTool.isPending || updateTool.isPending;\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n\n let hasError = false;\n\n if (!form.name.trim()) {\n setForm((prev) => ({ ...prev, nameError: true }));\n hasError = true;\n }\n const effectiveSlug = form.slug.trim() || slugify(form.name);\n if (!effectiveSlug) {\n setForm((prev) => ({ ...prev, slugError: true }));\n hasError = true;\n }\n if (!form.type) {\n setForm((prev) => ({ ...prev, typeError: true }));\n hasError = true;\n }\n if (!isValidJson(form.functionDefinitions)) {\n setForm((prev) => ({ ...prev, jsonError: true }));\n hasError = true;\n }\n\n if (hasError) return;\n\n const body: Record<string, unknown> = {\n name: form.name.trim(),\n slug: effectiveSlug,\n type: form.type,\n };\n\n if (form.description.trim()) body.description = form.description.trim();\n else body.description = \"\";\n\n // JSONB critical rule: function_definitions must be sent as string\n if (form.functionDefinitions.trim()) {\n const parsed = JSON.parse(form.functionDefinitions.trim());\n body.function_definitions = JSON.stringify(parsed);\n } else {\n body.function_definitions = \"\";\n }\n\n try {\n if (isEditing) {\n await updateTool.mutateAsync({ id: tool.id, body });\n toast.success(\"Ferramenta atualizada\");\n } else {\n await createTool.mutateAsync(\n body as { name: string; slug: string; type: string; description?: string; function_definitions?: string },\n );\n toast.success(\"Ferramenta criada\");\n }\n onOpenChange(false);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : isEditing ? \"Erro ao atualizar ferramenta\" : \"Erro ao criar ferramenta\",\n );\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n {isEditing ? \"Editar Ferramenta\" : \"Nova Ferramenta\"}\n </DialogTitle>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-name\">Nome *</Label>\n <Input\n id=\"tool-name\"\n value={form.name}\n onChange={(e) => {\n const name = e.target.value;\n setForm((prev) => ({\n ...prev,\n name,\n nameError: name.trim() ? false : prev.nameError,\n ...(!slugManuallyEdited && !isEditing\n ? { slug: slugify(name), slugError: false }\n : {}),\n }));\n }}\n placeholder=\"Ex: Google Calendar\"\n disabled={isPending}\n />\n {form.nameError && (\n <p className=\"text-sm text-destructive\">Nome é obrigatório</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-slug\">Slug (identificador único) *</Label>\n <Input\n id=\"tool-slug\"\n value={form.slug}\n onChange={(e) => {\n setSlugManuallyEdited(true);\n setForm((prev) => ({\n ...prev,\n slug: e.target.value,\n slugError: e.target.value.trim() ? false : prev.slugError,\n }));\n }}\n placeholder=\"Ex: google-calendar\"\n disabled={isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Gerado automaticamente a partir do nome. Usado internamente para identificar a ferramenta.\n </p>\n {form.slugError && (\n <p className=\"text-sm text-destructive\">Slug é obrigatório</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-type\">Tipo de Autenticação *</Label>\n <Select\n value={form.type}\n onValueChange={(value) => {\n setForm((prev) => ({\n ...prev,\n type: value,\n typeError: false,\n }));\n }}\n disabled={isPending}\n >\n <SelectTrigger id=\"tool-type\">\n <SelectValue placeholder=\"Selecione o tipo\" />\n </SelectTrigger>\n <SelectContent>\n {TOOL_AUTH_TYPES.map((t) => (\n <SelectItem key={t.value} value={t.value}>\n {t.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n Define se a ferramenta requer credenciais para funcionar.\n </p>\n {form.typeError && (\n <p className=\"text-sm text-destructive\">Tipo é obrigatório</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-description\">Descrição</Label>\n <Textarea\n id=\"tool-description\"\n value={form.description}\n onChange={(e) =>\n setForm((prev) => ({ ...prev, description: e.target.value }))\n }\n placeholder=\"Descrição da ferramenta...\"\n rows={3}\n disabled={isPending}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-function-defs\">\n Definições de Função (JSON)\n </Label>\n <Textarea\n id=\"tool-function-defs\"\n value={form.functionDefinitions}\n onChange={(e) => {\n setForm((prev) => ({\n ...prev,\n functionDefinitions: e.target.value,\n jsonError: false,\n }));\n }}\n placeholder={`[\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"nome_da_funcao\",\n \"description\": \"O que a função faz\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": { ... },\n \"required\": [...]\n }\n }\n }\n]`}\n rows={10}\n className=\"font-mono text-sm\"\n disabled={isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Array de definições no formato OpenAI Function Calling.\n </p>\n {form.jsonError && (\n <p className=\"text-sm text-destructive\">JSON inválido</p>\n )}\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isPending}\n >\n Cancelar\n </Button>\n <Button type=\"submit\" disabled={isPending}>\n {isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : null}\n {isEditing ? \"Salvar\" : \"Criar\"}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport type { Tool, ToolCredential } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n useCreateToolCredential,\n useUpdateToolCredential,\n useDeleteToolCredential,\n} from \"../../hooks\";\nimport { useTools } from \"../../hooks\";\nimport { DataTable } from \"@greatapps/greatauth-ui\";\nimport {\n Input,\n Button,\n Badge,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Trash2, Pencil, Link, Search } from \"lucide-react\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\n\ninterface ToolCredentialsFormProps {\n credentials: ToolCredential[];\n isLoading: boolean;\n config: GagentsHookConfig;\n gagentsApiUrl: string;\n createOpen?: boolean;\n onCreateOpenChange?: (open: boolean) => void;\n}\n\nfunction formatDate(dateStr: string | null): string {\n if (!dateStr) return \"Sem expiração\";\n return format(new Date(dateStr), \"dd/MM/yyyy\", { locale: ptBR });\n}\n\nfunction useColumns(\n tools: Tool[],\n onEdit: (cred: ToolCredential) => void,\n onConnect: (cred: ToolCredential) => void,\n onRemove: (cred: ToolCredential) => void,\n): ColumnDef<ToolCredential>[] {\n function getToolName(idTool: number | null): string {\n if (!idTool) return \"\\u2014\";\n const tool = tools.find((t) => t.id === idTool);\n return tool?.name || `Ferramenta #${idTool}`;\n }\n\n function getToolType(idTool: number | null): string | null {\n if (!idTool) return null;\n const tool = tools.find((t) => t.id === idTool);\n return tool?.type || null;\n }\n\n return [\n {\n accessorKey: \"label\",\n header: \"Label\",\n cell: ({ row }) => (\n <span className=\"font-medium\">{row.original.label || \"\\u2014\"}</span>\n ),\n },\n {\n accessorKey: \"id_tool\",\n header: \"Ferramenta\",\n cell: ({ row }) => (\n <span className=\"text-sm\">{getToolName(row.original.id_tool)}</span>\n ),\n },\n {\n accessorKey: \"status\",\n header: \"Status\",\n cell: ({ row }) => (\n <Badge\n variant={row.original.status === \"active\" ? \"default\" : \"destructive\"}\n >\n {row.original.status === \"active\" ? \"Ativo\" : \"Expirado\"}\n </Badge>\n ),\n },\n {\n accessorKey: \"expires_at\",\n header: \"Expira em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {formatDate(row.original.expires_at)}\n </span>\n ),\n },\n {\n accessorKey: \"datetime_add\",\n header: \"Criado em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {formatDate(row.original.datetime_add)}\n </span>\n ),\n },\n {\n id: \"actions\",\n header: \"Ações\",\n size: 100,\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1\">\n {getToolType(row.original.id_tool) === \"oauth2\" && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n disabled\n >\n <Link className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Em breve</TooltipContent>\n </Tooltip>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onEdit(row.original)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Editar</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => onRemove(row.original)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Remover</TooltipContent>\n </Tooltip>\n </div>\n ),\n },\n ];\n}\n\nexport function ToolCredentialsForm({\n credentials,\n isLoading,\n config,\n gagentsApiUrl,\n createOpen: externalCreateOpen,\n onCreateOpenChange,\n}: ToolCredentialsFormProps) {\n const createMutation = useCreateToolCredential(config);\n const updateMutation = useUpdateToolCredential(config);\n const deleteMutation = useDeleteToolCredential(config);\n const { data: toolsData } = useTools(config);\n const tools: Tool[] = toolsData?.data || [];\n\n const [search, setSearch] = useState(\"\");\n const [internalCreateOpen, setInternalCreateOpen] = useState(false);\n const showCreateDialog = externalCreateOpen ?? internalCreateOpen;\n const setShowCreateDialog = onCreateOpenChange ?? setInternalCreateOpen;\n const [createForm, setCreateForm] = useState({\n id_tool: \"\",\n label: \"\",\n credentials_encrypted: \"\",\n expires_at: \"\",\n });\n\n const [editTarget, setEditTarget] = useState<ToolCredential | null>(null);\n const [editForm, setEditForm] = useState({\n id_tool: \"\",\n label: \"\",\n credentials_encrypted: \"\",\n expires_at: \"\",\n status: \"\" as \"active\" | \"expired\" | \"\",\n });\n\n const [removeTarget, setRemoveTarget] = useState<ToolCredential | null>(null);\n\n const filteredCredentials = useMemo(() => {\n if (!search) return credentials;\n const term = search.toLowerCase();\n return credentials.filter((cred) => {\n const toolName = tools.find((t) => t.id === cred.id_tool)?.name || \"\";\n return (\n (cred.label || \"\").toLowerCase().includes(term) ||\n toolName.toLowerCase().includes(term)\n );\n });\n }, [credentials, search, tools]);\n\n const columns = useColumns(\n tools,\n (cred) => startEdit(cred),\n (cred) => handleConnect(cred),\n (cred) => setRemoveTarget(cred),\n );\n\n async function handleCreate() {\n const idTool = parseInt(createForm.id_tool, 10);\n if (!idTool || !createForm.label.trim() || !createForm.credentials_encrypted.trim()) return;\n\n try {\n const result = await createMutation.mutateAsync({\n id_tool: idTool,\n label: createForm.label.trim(),\n credentials_encrypted: createForm.credentials_encrypted.trim(),\n ...(createForm.expires_at ? { expires_at: createForm.expires_at } : {}),\n });\n if (result.status === 1) {\n toast.success(\"Credencial criada\");\n setShowCreateDialog(false);\n setCreateForm({ id_tool: \"\", label: \"\", credentials_encrypted: \"\", expires_at: \"\" });\n } else {\n toast.error(result.message || \"Erro ao criar credencial\");\n }\n } catch {\n toast.error(\"Erro ao criar credencial\");\n }\n }\n\n function startEdit(cred: ToolCredential) {\n setEditTarget(cred);\n setEditForm({\n id_tool: cred.id_tool ? String(cred.id_tool) : \"\",\n label: cred.label || \"\",\n credentials_encrypted: \"\",\n expires_at: cred.expires_at || \"\",\n status: cred.status,\n });\n }\n\n async function handleSaveEdit() {\n if (!editTarget) return;\n const body: Record<string, unknown> = {};\n const newIdTool = editForm.id_tool ? parseInt(editForm.id_tool, 10) : null;\n if (newIdTool && newIdTool !== editTarget.id_tool) {\n body.id_tool = newIdTool;\n }\n if (editForm.label.trim() && editForm.label.trim() !== (editTarget.label || \"\")) {\n body.label = editForm.label.trim();\n }\n if (editForm.credentials_encrypted.trim()) {\n body.credentials_encrypted = editForm.credentials_encrypted.trim();\n }\n if (editForm.expires_at !== (editTarget.expires_at || \"\")) {\n body.expires_at = editForm.expires_at || null;\n }\n if (editForm.status && editForm.status !== editTarget.status) {\n body.status = editForm.status;\n }\n\n if (Object.keys(body).length === 0) {\n setEditTarget(null);\n return;\n }\n\n try {\n const result = await updateMutation.mutateAsync({\n id: editTarget.id,\n body: body as Parameters<typeof updateMutation.mutateAsync>[0][\"body\"],\n });\n if (result.status === 1) {\n toast.success(\"Credencial atualizada\");\n setEditTarget(null);\n } else {\n toast.error(result.message || \"Erro ao atualizar credencial\");\n }\n } catch {\n toast.error(\"Erro ao atualizar credencial\");\n }\n }\n\n async function handleRemove() {\n if (!removeTarget) return;\n try {\n const result = await deleteMutation.mutateAsync(removeTarget.id);\n if (result.status === 1) {\n toast.success(\"Credencial removida\");\n } else {\n toast.error(result.message || \"Erro ao remover credencial\");\n }\n } catch {\n toast.error(\"Erro ao remover credencial\");\n } finally {\n setRemoveTarget(null);\n }\n }\n\n function handleConnect(cred: ToolCredential) {\n if (!config.accountId || !config.token) return;\n const language = config.language ?? \"pt-br\";\n const idWl = config.idWl ?? 1;\n const url = `${gagentsApiUrl}/v1/${language}/${idWl}/accounts/${config.accountId}/oauth/connect?id_tool=${cred.id_tool}`;\n window.open(url, \"_blank\");\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Buscar credenciais...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n\n <DataTable\n columns={columns}\n data={filteredCredentials}\n isLoading={isLoading}\n emptyMessage=\"Nenhuma credencial encontrada\"\n />\n\n {/* Create Dialog */}\n <Dialog open={showCreateDialog} onOpenChange={setShowCreateDialog}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Nova Credencial</DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Ferramenta *\n </label>\n <Select\n value={createForm.id_tool}\n onValueChange={(val) =>\n setCreateForm((f) => ({ ...f, id_tool: val }))\n }\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Selecione a ferramenta\" />\n </SelectTrigger>\n <SelectContent>\n {tools.map((tool) => (\n <SelectItem key={tool.id} value={String(tool.id)}>\n {tool.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Label *\n </label>\n <Input\n value={createForm.label}\n onChange={(e) =>\n setCreateForm((f) => ({ ...f, label: e.target.value }))\n }\n placeholder=\"Ex: Google Calendar - Clínica São Paulo\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Credencial *\n </label>\n <Input\n type=\"password\"\n value={createForm.credentials_encrypted}\n onChange={(e) =>\n setCreateForm((f) => ({\n ...f,\n credentials_encrypted: e.target.value,\n }))\n }\n placeholder=\"Credencial encriptada\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Data de Expiração (opcional)\n </label>\n <Input\n type=\"date\"\n value={createForm.expires_at}\n onChange={(e) =>\n setCreateForm((f) => ({ ...f, expires_at: e.target.value }))\n }\n />\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setShowCreateDialog(false)}\n >\n Cancelar\n </Button>\n <Button\n onClick={handleCreate}\n disabled={\n !createForm.id_tool ||\n !createForm.label.trim() ||\n !createForm.credentials_encrypted.trim() ||\n createMutation.isPending\n }\n >\n Criar\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Edit Dialog */}\n <Dialog\n open={!!editTarget}\n onOpenChange={(open) => !open && setEditTarget(null)}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Editar Credencial</DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Ferramenta *\n </label>\n <Select\n value={editForm.id_tool}\n onValueChange={(val) =>\n setEditForm((f) => ({ ...f, id_tool: val }))\n }\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Selecione a ferramenta\" />\n </SelectTrigger>\n <SelectContent>\n {tools.map((tool) => (\n <SelectItem key={tool.id} value={String(tool.id)}>\n {tool.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Label\n </label>\n <Input\n value={editForm.label}\n onChange={(e) =>\n setEditForm((f) => ({ ...f, label: e.target.value }))\n }\n placeholder=\"Label da credencial\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Nova Credencial (vazio = manter atual)\n </label>\n <Input\n type=\"password\"\n value={editForm.credentials_encrypted}\n onChange={(e) =>\n setEditForm((f) => ({\n ...f,\n credentials_encrypted: e.target.value,\n }))\n }\n placeholder=\"Nova credencial\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Data de Expiração\n </label>\n <Input\n type=\"date\"\n value={editForm.expires_at}\n onChange={(e) =>\n setEditForm((f) => ({ ...f, expires_at: e.target.value }))\n }\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">Status</label>\n <Select\n value={editForm.status || undefined}\n onValueChange={(val) =>\n setEditForm((f) => ({\n ...f,\n status: val as \"active\" | \"expired\",\n }))\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"active\">Ativo</SelectItem>\n <SelectItem value=\"expired\">Expirado</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setEditTarget(null)}>\n Cancelar\n </Button>\n <Button\n onClick={handleSaveEdit}\n disabled={updateMutation.isPending}\n >\n Salvar\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!removeTarget}\n onOpenChange={(open) => !open && setRemoveTarget(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remover credencial?</AlertDialogTitle>\n <AlertDialogDescription>\n A credencial será removida permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancelar</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleRemove}\n disabled={deleteMutation.isPending}\n >\n Remover\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { AgentsTable } from \"../components/agents/agents-table\";\nimport { AgentFormDialog } from \"../components/agents/agent-form-dialog\";\nimport { Button } from \"@greatapps/greatauth-ui/ui\";\nimport { Plus } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\n\nexport interface AgentsPageProps {\n config: GagentsHookConfig;\n onNavigateToAgent?: (agentId: number) => void;\n title?: string;\n subtitle?: string;\n}\n\nexport function AgentsPage({\n config,\n onNavigateToAgent,\n title = \"Agentes AI\",\n subtitle = \"Gerencie seus agentes de atendimento inteligente\",\n}: AgentsPageProps) {\n const [createOpen, setCreateOpen] = useState(false);\n\n return (\n <div className=\"flex flex-col gap-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold\">{title}</h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <Button onClick={() => setCreateOpen(true)} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Novo Agente\n </Button>\n </div>\n\n <AgentsTable config={config} onNavigateToAgent={onNavigateToAgent} />\n\n <AgentFormDialog\n config={config}\n open={createOpen}\n onOpenChange={setCreateOpen}\n />\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useAgent } from \"../hooks\";\nimport { AgentTabs } from \"../components/agents/agent-tabs\";\nimport { AgentEditForm } from \"../components/agents/agent-edit-form\";\nimport { Badge, Button, Skeleton } from \"@greatapps/greatauth-ui/ui\";\nimport { EntityAvatar } from \"@greatapps/greatauth-ui\";\nimport { ArrowLeft, Pencil } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\n\nexport interface AgentDetailPageProps {\n config: GagentsHookConfig;\n agentId: number;\n onBack?: () => void;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nexport function AgentDetailPage({\n config,\n agentId,\n onBack,\n renderChatLink,\n}: AgentDetailPageProps) {\n const { data: agent, isLoading } = useAgent(config, agentId);\n const [editOpen, setEditOpen] = useState(false);\n\n if (isLoading) {\n return (\n <div className=\"flex flex-col gap-4 p-4\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-8 w-48\" />\n <Skeleton className=\"h-10 w-full\" />\n <Skeleton className=\"h-64 w-full\" />\n </div>\n );\n }\n\n if (!agent) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-2 p-8\">\n <p className=\"text-muted-foreground\">Agente não encontrado</p>\n {onBack && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onBack}>\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n Voltar para agentes\n </Button>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-6 p-4\">\n <div className=\"rounded-lg border p-4 md:p-6\">\n <div className=\"flex flex-col gap-4 md:flex-row md:items-start md:gap-6\">\n <div className=\"flex items-start gap-3 flex-1\">\n {onBack && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 mt-1\"\n onClick={onBack}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n )}\n\n <EntityAvatar photo={agent.photo} name={agent.title} size=\"xl\" />\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h1 className=\"text-xl font-semibold\">{agent.title}</h1>\n <Badge\n variant={agent.active ? \"default\" : \"destructive\"}\n className=\"text-xs\"\n >\n {agent.active ? \"Ativo\" : \"Inativo\"}\n </Badge>\n </div>\n </div>\n </div>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"shrink-0 self-start\"\n onClick={() => setEditOpen(true)}\n >\n <Pencil className=\"mr-2 h-4 w-4\" />\n Editar\n </Button>\n </div>\n </div>\n\n <AgentTabs\n agent={agent}\n config={config}\n renderChatLink={renderChatLink}\n />\n\n {editOpen && (\n <AgentEditForm\n agent={agent}\n config={config}\n idAccount={config.accountId}\n open={editOpen}\n onOpenChange={setEditOpen}\n />\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { ToolsTable } from \"../components/tools/tools-table\";\nimport { ToolFormDialog } from \"../components/tools/tool-form-dialog\";\nimport { Button } from \"@greatapps/greatauth-ui/ui\";\nimport { Plus } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\nimport type { Tool } from \"../types\";\n\nexport interface ToolsPageProps {\n config: GagentsHookConfig;\n title?: string;\n subtitle?: string;\n}\n\nexport function ToolsPage({\n config,\n title = \"Ferramentas\",\n subtitle = \"Gerencie as ferramentas disponíveis para seus agentes\",\n}: ToolsPageProps) {\n const [createOpen, setCreateOpen] = useState(false);\n const [editTool, setEditTool] = useState<Tool | undefined>(undefined);\n\n return (\n <div className=\"flex flex-col gap-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold\">{title}</h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <Button onClick={() => setCreateOpen(true)} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Nova Ferramenta\n </Button>\n </div>\n\n <ToolsTable config={config} onEdit={(tool) => setEditTool(tool)} />\n\n <ToolFormDialog\n config={config}\n open={createOpen}\n onOpenChange={setCreateOpen}\n />\n\n <ToolFormDialog\n config={config}\n open={!!editTool}\n onOpenChange={(open) => !open && setEditTool(undefined)}\n tool={editTool}\n />\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useToolCredentials } from \"../hooks\";\nimport { ToolCredentialsForm } from \"../components/tools/tool-credentials-form\";\nimport { Button } from \"@greatapps/greatauth-ui/ui\";\nimport { Plus } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\n\nexport interface CredentialsPageProps {\n config: GagentsHookConfig;\n gagentsApiUrl: string;\n title?: string;\n subtitle?: string;\n}\n\nexport function CredentialsPage({\n config,\n gagentsApiUrl,\n title = \"Credenciais\",\n subtitle = \"Gerencie as credenciais de autenticação das ferramentas\",\n}: CredentialsPageProps) {\n const { data: credentialsData, isLoading: credentialsLoading } =\n useToolCredentials(config);\n const [createOpen, setCreateOpen] = useState(false);\n\n const credentials = credentialsData?.data || [];\n\n return (\n <div className=\"flex flex-col gap-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold\">{title}</h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <Button onClick={() => setCreateOpen(true)} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Nova Credencial\n </Button>\n </div>\n\n <ToolCredentialsForm\n config={config}\n gagentsApiUrl={gagentsApiUrl}\n credentials={credentials}\n isLoading={credentialsLoading}\n createOpen={createOpen}\n onCreateOpenChange={setCreateOpen}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useQuery","useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useQuery","useMemo","useMemo","useState","Button","Input","toast","jsx","jsxs","useState","useEffect","useState","Button","Input","Label","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","Loader2","toast","jsx","jsxs","useState","useEffect","useState","Switch","Badge","Button","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","Input","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","Label","Trash2","toast","jsx","jsxs","useState","useState","Input","Button","Switch","Skeleton","Textarea","Label","Badge","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","React","jsx","Trash2","Pencil","Plus","toast","jsx","jsxs","useState","Skeleton","Button","Badge","Switch","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Input","Textarea","DialogFooter","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","useState","useCallback","useEffect","Button","Input","Skeleton","Badge","Loader2","toast","jsx","jsxs","useState","useCallback","useEffect","useState","Skeleton","Badge","Skeleton","Button","jsx","jsxs","jsx","jsxs","useState","Skeleton","Badge","jsx","Wrench","Target","FileText","MessageCircle","jsx","jsxs","useMemo","useState","DataTable","Input","Badge","Tooltip","TooltipTrigger","TooltipContent","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","Button","Pencil","Trash2","Search","format","ptBR","toast","Fragment","jsx","jsxs","useColumns","useState","useMemo","useState","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","Button","Input","Textarea","Label","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","Loader2","toast","jsx","jsxs","slugify","useState","useMemo","useState","DataTable","Input","Button","Badge","Tooltip","TooltipTrigger","TooltipContent","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","Trash2","Pencil","Search","format","ptBR","toast","jsx","jsxs","formatDate","useColumns","useState","useMemo","useState","Button","Plus","jsx","jsxs","useState","useState","Badge","Button","Skeleton","EntityAvatar","Pencil","jsx","jsxs","useState","useState","Button","Plus","jsx","jsxs","useState","useState","Button","Plus","jsx","jsxs","useState"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/index.ts","../src/lib/index.ts","../src/hooks/types.ts","../src/hooks/use-agents.ts","../src/hooks/use-tools.ts","../src/hooks/use-objectives.ts","../src/hooks/use-agent-tools.ts","../src/hooks/use-conversations.ts","../src/hooks/use-settings.ts","../src/hooks/use-contacts.ts","../src/components/agents/agents-table.tsx","../src/components/agents/agent-form-dialog.tsx","../src/components/agents/agent-edit-form.tsx","../src/components/agents/agent-tools-list.tsx","../src/components/agents/agent-objectives-list.tsx","../src/components/ui/sortable.tsx","../src/lib/compose-refs.ts","../src/components/agents/agent-prompt-editor.tsx","../src/components/conversations/agent-conversations-table.tsx","../src/components/conversations/conversation-view.tsx","../src/components/conversations/agent-conversations-panel.tsx","../src/components/agents/agent-tabs.tsx","../src/components/tools/tools-table.tsx","../src/components/tools/tool-form-dialog.tsx","../src/components/tools/tool-credentials-form.tsx","../src/pages/agents-page.tsx","../src/pages/agent-detail-page.tsx","../src/pages/tools-page.tsx","../src/pages/credentials-page.tsx"],"sourcesContent":["import type {\n ApiResponse,\n Agent,\n AgentTool,\n AvailabilityResult,\n CalendarStatus,\n ContactUser,\n Conversation,\n GagentsContact,\n Objective,\n PromptVersion,\n Tool,\n ToolCredential,\n} from \"../types\";\n\nexport interface GagentsClientConfig {\n baseUrl: string;\n token: string;\n language?: string;\n idWl?: number;\n}\n\nexport function createGagentsClient(config: GagentsClientConfig) {\n const { baseUrl, token, language = \"pt-br\", idWl = 1 } = config;\n\n function buildUrl(idAccount: number, path: string): string {\n return `${baseUrl}/v1/${language}/${idWl}/accounts/${idAccount}/${path}`;\n }\n\n async function request<T>(\n method: string,\n idAccount: number,\n path: string,\n body?: unknown,\n params?: Record<string, string>,\n ): Promise<ApiResponse<T>> {\n const url = new URL(buildUrl(idAccount, path));\n if (params) {\n Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n let message = `HTTP ${res.status}: ${res.statusText}`;\n try {\n const errorBody = await res.json();\n message = errorBody.message || message;\n } catch {\n /* ignore parse errors */\n }\n throw new Error(message);\n }\n\n const json: ApiResponse<T> = await res.json();\n\n // For mutations, treat API-level failures as errors so TanStack Query\n // fires onError instead of onSuccess (API returns HTTP 200 even on failure)\n if (method !== \"GET\" && json.status === 0) {\n throw new Error(json.message || \"Operação falhou\");\n }\n\n return json;\n }\n\n return {\n // --- Agents ---\n listAgents: (idAccount: number, params?: Record<string, string>) =>\n request<Agent[]>(\"GET\", idAccount, \"agents\", undefined, params),\n\n getAgent: (idAccount: number, id: number) =>\n request<Agent>(\"GET\", idAccount, `agents/${id}`),\n\n createAgent: (\n idAccount: number,\n body: Pick<Agent, \"title\"> &\n Partial<Pick<Agent, \"photo\" | \"delay_typing\" | \"waiting_time\">>,\n ) => request<Agent>(\"POST\", idAccount, \"agents\", body),\n\n updateAgent: (\n idAccount: number,\n id: number,\n body: Partial<\n Pick<Agent, \"title\" | \"photo\" | \"delay_typing\" | \"waiting_time\" | \"active\">\n > & { prompt?: string; change_notes?: string },\n ) => request<Agent>(\"PUT\", idAccount, `agents/${id}`, body),\n\n deleteAgent: (idAccount: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `agents/${id}`),\n\n // --- Tools ---\n listTools: (idAccount: number, params?: Record<string, string>) =>\n request<Tool[]>(\"GET\", idAccount, \"tools\", undefined, params),\n\n getTool: (idAccount: number, id: number) =>\n request<Tool>(\"GET\", idAccount, `tools/${id}`),\n\n createTool: (\n idAccount: number,\n body: Pick<Tool, \"name\" | \"type\"> &\n Partial<Pick<Tool, \"slug\" | \"description\" | \"auth_config\" | \"function_definitions\">>,\n ) => request<Tool>(\"POST\", idAccount, \"tools\", body),\n\n updateTool: (\n idAccount: number,\n id: number,\n body: Partial<\n Pick<Tool, \"name\" | \"slug\" | \"type\" | \"description\" | \"auth_config\" | \"function_definitions\">\n >,\n ) => request<Tool>(\"PUT\", idAccount, `tools/${id}`, body),\n\n deleteTool: (idAccount: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `tools/${id}`),\n\n // --- Agent Tools ---\n listAgentTools: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<AgentTool[]>(\"GET\", idAccount, `agents/${idAgent}/tools`, undefined, params),\n\n addAgentTool: (\n idAccount: number,\n idAgent: number,\n body: Pick<AgentTool, \"id_tool\"> &\n Partial<Pick<AgentTool, \"enabled\" | \"custom_instructions\" | \"parameter_mappings\" | \"id_tool_credential\">>,\n ) => request<AgentTool>(\"POST\", idAccount, `agents/${idAgent}/tools`, body),\n\n updateAgentTool: (\n idAccount: number,\n idAgent: number,\n id: number,\n body: Partial<\n Pick<AgentTool, \"enabled\" | \"custom_instructions\" | \"parameter_mappings\" | \"id_tool_credential\">\n >,\n ) => request<AgentTool>(\"PUT\", idAccount, `agents/${idAgent}/tools/${id}`, body),\n\n removeAgentTool: (idAccount: number, idAgent: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `agents/${idAgent}/tools/${id}`),\n\n // --- Objectives ---\n listObjectives: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<Objective[]>(\"GET\", idAccount, `agents/${idAgent}/objectives`, undefined, params),\n\n getObjective: (idAccount: number, idAgent: number, id: number) =>\n request<Objective>(\"GET\", idAccount, `agents/${idAgent}/objectives/${id}`),\n\n createObjective: (\n idAccount: number,\n idAgent: number,\n body: Pick<Objective, \"title\"> &\n Partial<Pick<Objective, \"slug\" | \"prompt\" | \"order\" | \"active\">>,\n ) => request<Objective>(\"POST\", idAccount, `agents/${idAgent}/objectives`, body),\n\n updateObjective: (\n idAccount: number,\n idAgent: number,\n id: number,\n body: Partial<Pick<Objective, \"title\" | \"slug\" | \"prompt\" | \"order\" | \"active\">>,\n ) => request<Objective>(\"PUT\", idAccount, `agents/${idAgent}/objectives/${id}`, body),\n\n deleteObjective: (idAccount: number, idAgent: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `agents/${idAgent}/objectives/${id}`),\n\n // --- Conversations ---\n listConversations: (idAccount: number, params?: Record<string, string>) =>\n request<Conversation[]>(\"GET\", idAccount, \"conversations\", undefined, params),\n\n listAgentConversations: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<Conversation[]>(\"GET\", idAccount, `agents/${idAgent}/conversations`, undefined, params),\n\n getConversation: (idAccount: number, id: number) =>\n request<Conversation>(\"GET\", idAccount, `conversations/${id}`),\n\n // --- Prompt Versions ---\n listPromptVersions: (idAccount: number, idAgent: number, params?: Record<string, string>) =>\n request<PromptVersion[]>(\"GET\", idAccount, `agents/${idAgent}/prompt-versions`, undefined, params),\n\n // --- Tool Credentials ---\n listToolCredentials: (idAccount: number, params?: Record<string, string>) =>\n request<ToolCredential[]>(\"GET\", idAccount, \"tool-credentials\", undefined, params),\n\n createToolCredential: (\n idAccount: number,\n body: Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\"> &\n Partial<Pick<ToolCredential, \"expires_at\">>,\n ) => request<ToolCredential>(\"POST\", idAccount, \"tool-credentials\", body),\n\n updateToolCredential: (\n idAccount: number,\n id: number,\n body: Partial<\n Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\" | \"expires_at\" | \"status\">\n >,\n ) => request<ToolCredential>(\"PUT\", idAccount, `tool-credentials/${id}`, body),\n\n deleteToolCredential: (idAccount: number, id: number) =>\n request<void>(\"DELETE\", idAccount, `tool-credentials/${id}`),\n\n // --- Contact Users ---\n listContactUsers: (idAccount: number, params?: Record<string, string>) =>\n request<ContactUser[]>(\"GET\", idAccount, \"contact-users\", undefined, params),\n\n getContactUser: (idAccount: number, id: number) =>\n request<ContactUser>(\"GET\", idAccount, `contact-users/${id}`),\n\n // --- Contacts ---\n listGagentsContacts: (idAccount: number, params?: Record<string, string>) =>\n request<GagentsContact[]>(\"GET\", idAccount, \"contacts\", undefined, params),\n\n // --- Calendar Integration ---\n initiateCalendarConnect: (\n idAccount: number,\n body: { external_reference: string; provider?: string },\n ) => request<{ auth_url: string }>(\"POST\", idAccount, \"calendar/connect\", body),\n\n getCalendarStatus: (\n idAccount: number,\n externalReference: string,\n provider = \"google-calendar\",\n ) =>\n request<CalendarStatus>(\n \"GET\",\n idAccount,\n `calendar/status/${encodeURIComponent(externalReference)}`,\n undefined,\n { provider },\n ),\n\n checkCalendarAvailability: (\n idAccount: number,\n body: { id_professional: number; start_time: string; end_time: string },\n ) => request<AvailabilityResult>(\"POST\", idAccount, \"calendar/availability\", body),\n\n disconnectCalendar: (\n idAccount: number,\n externalReference: string,\n provider = \"google-calendar\",\n ) =>\n request<void>(\n \"DELETE\",\n idAccount,\n `calendar/disconnect/${encodeURIComponent(externalReference)}`,\n undefined,\n { provider },\n ),\n };\n}\n\nexport type GagentsClient = ReturnType<typeof createGagentsClient>;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { useMemo } from \"react\";\nimport { createGagentsClient } from \"../client\";\n\n// ---------------------------------------------------------------------------\n// Hook Configuration\n// ---------------------------------------------------------------------------\n\nexport interface GagentsHookConfig {\n accountId: number;\n token: string;\n baseUrl: string;\n language?: string;\n idWl?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helper — memoized client from config\n// ---------------------------------------------------------------------------\n\nexport function useGagentsClient(config: GagentsHookConfig) {\n return useMemo(\n () =>\n createGagentsClient({\n baseUrl: config.baseUrl,\n token: config.token,\n language: config.language,\n idWl: config.idWl,\n }),\n [config.baseUrl, config.token, config.language, config.idWl],\n );\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useAgents(config: GagentsHookConfig, params?: Record<string, string>) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"agents\", config.accountId, params],\n queryFn: () => client.listAgents(config.accountId, params),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useAgent(config: GagentsHookConfig, id: number | null) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"agent\", config.accountId, id],\n queryFn: () => client.getAgent(config.accountId, id!),\n enabled: !!config.token && !!config.accountId && !!id,\n select: (res) => {\n const d = res.data;\n return Array.isArray(d) ? d[0] : d;\n },\n });\n}\n\nexport function useCreateAgent(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (body: {\n title: string;\n prompt?: string;\n photo?: string;\n delay_typing?: number;\n waiting_time?: number;\n }) => client.createAgent(config.accountId, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agents\"] });\n },\n });\n}\n\nexport function useUpdateAgent(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n id,\n body,\n }: {\n id: number;\n body: {\n title?: string;\n prompt?: string;\n photo?: string;\n delay_typing?: number;\n waiting_time?: number;\n active?: boolean;\n };\n }) => client.updateAgent(config.accountId, id, body),\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agents\"] });\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"agent\", config.accountId, variables.id],\n });\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"prompt-versions\", config.accountId, variables.id],\n });\n },\n });\n}\n\nexport function useDeleteAgent(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (id: number) => client.deleteAgent(config.accountId, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agents\"] });\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useTools(config: GagentsHookConfig, params?: Record<string, string>) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"tools\", config.accountId, params],\n queryFn: () => client.listTools(config.accountId, params),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useTool(config: GagentsHookConfig, id: number | null) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"tool\", config.accountId, id],\n queryFn: () => client.getTool(config.accountId, id!),\n enabled: !!config.token && !!config.accountId && !!id,\n select: (res) => {\n const d = res.data;\n return Array.isArray(d) ? d[0] : d;\n },\n });\n}\n\nexport function useCreateTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (body: {\n name: string;\n slug: string;\n type: string;\n description?: string;\n function_definitions?: string;\n }) => client.createTool(config.accountId, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tools\"] });\n },\n });\n}\n\nexport function useUpdateTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n id,\n body,\n }: {\n id: number;\n body: {\n name?: string;\n type?: string;\n description?: string;\n function_definitions?: string;\n };\n }) => client.updateTool(config.accountId, id, body),\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tools\"] });\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"tool\", config.accountId, variables.id],\n });\n },\n });\n}\n\nexport function useDeleteTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (id: number) => client.deleteTool(config.accountId, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tools\"] });\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useObjectives(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"objectives\", config.accountId, idAgent],\n queryFn: () => client.listObjectives(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useCreateObjective(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n body,\n }: {\n idAgent: number;\n body: {\n title: string;\n slug?: string;\n prompt?: string | null;\n order?: number;\n active?: boolean;\n };\n }) => client.createObjective(config.accountId, idAgent, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"objectives\"] });\n },\n });\n}\n\nexport function useUpdateObjective(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n id,\n body,\n }: {\n idAgent: number;\n id: number;\n body: Partial<{\n title: string;\n slug: string;\n prompt: string | null;\n order: number;\n active: boolean;\n }>;\n }) => client.updateObjective(config.accountId, idAgent, id, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"objectives\"] });\n },\n });\n}\n\nexport function useDeleteObjective(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({ idAgent, id }: { idAgent: number; id: number }) =>\n client.deleteObjective(config.accountId, idAgent, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"objectives\"] });\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useAgentTools(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"agent-tools\", config.accountId, idAgent],\n queryFn: () => client.listAgentTools(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useAddAgentTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n body,\n }: {\n idAgent: number;\n body: { id_tool: number; enabled?: boolean };\n }) => client.addAgentTool(config.accountId, idAgent, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agent-tools\"] });\n },\n });\n}\n\nexport function useRemoveAgentTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({ idAgent, id }: { idAgent: number; id: number }) =>\n client.removeAgentTool(config.accountId, idAgent, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"agent-tools\"] });\n },\n });\n}\n\nexport function useUpdateAgentTool(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n idAgent,\n id,\n body,\n }: {\n idAgent: number;\n id: number;\n body: Partial<{\n enabled: boolean;\n custom_instructions: string | null;\n parameter_mappings: string | null;\n id_tool_credential: number | null;\n }>;\n }) => client.updateAgentTool(config.accountId, idAgent, id, body),\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({\n queryKey: [\"greatagents\", \"agent-tools\", config.accountId, variables.idAgent],\n });\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useConversations(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"conversations\", config.accountId],\n queryFn: () => client.listConversations(config.accountId),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useAgentConversations(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"conversations\", config.accountId, \"agent\", idAgent],\n queryFn: () => client.listAgentConversations(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useConversation(config: GagentsHookConfig, id: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"conversations\", config.accountId, id],\n queryFn: () => client.getConversation(config.accountId, id),\n enabled: !!config.token && !!config.accountId && !!id,\n select: (res) => {\n const d = res.data;\n return Array.isArray(d) ? d[0] : d;\n },\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { ToolCredential } from \"../types\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\n// --- Prompt Versions (read-only) ---\n\nexport function usePromptVersions(config: GagentsHookConfig, idAgent: number) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"prompt-versions\", config.accountId, idAgent],\n queryFn: () => client.listPromptVersions(config.accountId, idAgent),\n enabled: !!config.token && !!config.accountId && !!idAgent,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\n// --- Tool Credentials (CRUD) ---\n\nexport function useToolCredentials(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"tool-credentials\", config.accountId],\n queryFn: () => client.listToolCredentials(config.accountId),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n\nexport function useCreateToolCredential(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (\n body: Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\"> &\n Partial<Pick<ToolCredential, \"expires_at\">>,\n ) => client.createToolCredential(config.accountId, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tool-credentials\"] });\n },\n });\n}\n\nexport function useUpdateToolCredential(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: ({\n id,\n body,\n }: {\n id: number;\n body: Partial<\n Pick<ToolCredential, \"id_tool\" | \"label\" | \"credentials_encrypted\" | \"expires_at\" | \"status\">\n >;\n }) => client.updateToolCredential(config.accountId, id, body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tool-credentials\"] });\n },\n });\n}\n\nexport function useDeleteToolCredential(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (id: number) => client.deleteToolCredential(config.accountId, id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"greatagents\", \"tool-credentials\"] });\n },\n });\n}\n\n// --- Contact Users (read-only) ---\n\nexport function useContactUsers(config: GagentsHookConfig) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"contact-users\", config.accountId],\n queryFn: () => client.listContactUsers(config.accountId),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { GagentsHookConfig } from \"./types\";\nimport { useGagentsClient } from \"./types\";\n\nexport function useGagentsContacts(config: GagentsHookConfig, params?: Record<string, string>) {\n const client = useGagentsClient(config);\n\n return useQuery({\n queryKey: [\"greatagents\", \"contacts\", config.accountId, params],\n queryFn: () => client.listGagentsContacts(config.accountId, params),\n enabled: !!config.token && !!config.accountId,\n select: (res) => ({ data: res.data || [], total: res.total || 0 }),\n });\n}\n","import { useMemo, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { useAgents, useDeleteAgent } from \"../../hooks\";\nimport type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { DataTable } from \"@greatapps/greatauth-ui\";\nimport {\n Input,\n Badge,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Pencil, Trash2, Search } from \"lucide-react\";\nimport { EntityAvatar } from \"@greatapps/greatauth-ui\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\n\nfunction useColumns(\n onEdit: (agent: Agent) => void,\n onDelete: (id: number) => void,\n): ColumnDef<Agent>[] {\n return [\n {\n accessorKey: \"title\",\n header: \"Nome\",\n cell: ({ row }) => (\n <div className=\"flex items-center gap-2\">\n <EntityAvatar photo={row.original.photo} name={row.original.title} size=\"sm\" />\n <span className=\"font-medium\">{row.original.title}</span>\n </div>\n ),\n sortingFn: (rowA, rowB) =>\n rowA.original.title\n .toLowerCase()\n .localeCompare(rowB.original.title.toLowerCase()),\n },\n {\n accessorKey: \"active\",\n header: \"Status\",\n cell: ({ row }) =>\n row.original.active ? (\n <Badge variant=\"default\">Ativo</Badge>\n ) : (\n <Badge variant=\"secondary\">Inativo</Badge>\n ),\n },\n {\n accessorKey: \"datetime_add\",\n header: \"Criado em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {format(new Date(row.original.datetime_add), \"dd/MM/yyyy\", {\n locale: ptBR,\n })}\n </span>\n ),\n },\n {\n id: \"actions\",\n size: 80,\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onEdit(row.original)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Editar</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => onDelete(row.original.id)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Excluir</TooltipContent>\n </Tooltip>\n </div>\n ),\n },\n ];\n}\n\nexport function AgentsTable({ config, onNavigateToAgent }: { config: GagentsHookConfig; onNavigateToAgent?: (agentId: number) => void }) {\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n\n const queryParams = useMemo(() => {\n const params: Record<string, string> = {\n limit: \"15\",\n page: String(page),\n };\n if (search) {\n params.search = search;\n }\n return params;\n }, [search, page]);\n\n const { data, isLoading } = useAgents(config, queryParams);\n const deleteAgent = useDeleteAgent(config);\n const [deleteId, setDeleteId] = useState<number | null>(null);\n\n const agents = data?.data || [];\n const total = data?.total || 0;\n\n const columns = useColumns(\n (agent) => onNavigateToAgent?.(agent.id),\n (id) => setDeleteId(id),\n );\n\n function handleDelete() {\n if (!deleteId) return;\n deleteAgent.mutate(deleteId, {\n onSuccess: () => {\n toast.success(\"Agente excluído\");\n setDeleteId(null);\n },\n onError: () => toast.error(\"Erro ao excluir agente\"),\n });\n }\n\n function handleSearchChange(value: string) {\n setSearch(value);\n setPage(1);\n }\n\n return (\n <>\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Buscar agentes...\"\n value={search}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n\n <DataTable\n columns={columns}\n data={agents}\n isLoading={isLoading}\n emptyMessage=\"Nenhum agente encontrado\"\n total={total}\n page={page}\n onPageChange={setPage}\n pageSize={15}\n />\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!deleteId}\n onOpenChange={(open) => !open && setDeleteId(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Excluir agente?</AlertDialogTitle>\n <AlertDialogDescription>\n Esta ação não pode ser desfeita. O agente será removido\n permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel variant=\"outline\" size=\"default\">\n Cancelar\n </AlertDialogCancel>\n <AlertDialogAction\n variant=\"default\"\n size=\"default\"\n onClick={handleDelete}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Excluir\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useCreateAgent, useUpdateAgent } from \"../../hooks\";\nimport type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Button,\n Input,\n\n Label,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentFormDialogProps {\n config: GagentsHookConfig;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n agent?: Agent;\n}\n\nexport function AgentFormDialog({\n config,\n open,\n onOpenChange,\n agent,\n}: AgentFormDialogProps) {\n const isEditing = !!agent;\n const createAgent = useCreateAgent(config);\n const updateAgent = useUpdateAgent(config);\n\n const [title, setTitle] = useState(\"\");\n const [photo, setPhoto] = useState(\"\");\n const [delayTyping, setDelayTyping] = useState(\"\");\n const [waitingTime, setWaitingTime] = useState(\"\");\n\n /* eslint-disable react-hooks/set-state-in-effect -- form state sync from props */\n useEffect(() => {\n if (agent) {\n setTitle(agent.title);\n setPhoto(agent.photo || \"\");\n setDelayTyping(agent.delay_typing != null ? String(agent.delay_typing) : \"\");\n setWaitingTime(agent.waiting_time != null ? String(agent.waiting_time) : \"\");\n } else {\n setTitle(\"\");\n setPhoto(\"\");\n setDelayTyping(\"\");\n setWaitingTime(\"\");\n }\n }, [agent, open]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n const isPending = createAgent.isPending || updateAgent.isPending;\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n if (!title.trim()) return;\n\n const body: Record<string, unknown> = {\n title: title.trim(),\n };\n if (photo.trim()) body.photo = photo.trim();\n if (delayTyping.trim()) body.delay_typing = Number(delayTyping);\n if (waitingTime.trim()) body.waiting_time = Number(waitingTime);\n\n try {\n if (isEditing) {\n await updateAgent.mutateAsync({ id: agent.id, body });\n toast.success(\"Agente atualizado\");\n } else {\n await createAgent.mutateAsync(\n body as { title: string; prompt?: string; photo?: string; delay_typing?: number; waiting_time?: number },\n );\n toast.success(\"Agente criado\");\n }\n onOpenChange(false);\n } catch {\n toast.error(isEditing ? \"Erro ao atualizar agente\" : \"Erro ao criar agente\");\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n {isEditing ? \"Editar Agente\" : \"Novo Agente\"}\n </DialogTitle>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-photo\">Foto (URL)</Label>\n <Input\n id=\"agent-photo\"\n value={photo}\n onChange={(e) => setPhoto(e.target.value)}\n placeholder=\"https://exemplo.com/foto.jpg\"\n disabled={isPending}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-title\">Nome do Agente *</Label>\n <Input\n id=\"agent-title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Ex: Assistente de Agendamento\"\n required\n disabled={isPending}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-delay\">Delay de Digitação (ms)</Label>\n <Input\n id=\"agent-delay\"\n type=\"number\"\n value={delayTyping}\n onChange={(e) => setDelayTyping(e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n disabled={isPending}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"agent-waiting\">Tempo de Espera (ms)</Label>\n <Input\n id=\"agent-waiting\"\n type=\"number\"\n value={waitingTime}\n onChange={(e) => setWaitingTime(e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n disabled={isPending}\n />\n </div>\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isPending}\n >\n Cancelar\n </Button>\n <Button type=\"submit\" disabled={isPending || !title.trim()}>\n {isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : null}\n {isEditing ? \"Salvar\" : \"Criar\"}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useUpdateAgent } from \"../../hooks\";\nimport type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Button,\n Input,\n Label,\n Switch,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { ImageCropUpload } from \"@greatapps/greatauth-ui\";\n\ninterface AgentEditFormProps {\n config: GagentsHookConfig;\n agent: Agent;\n idAccount: string | number | null;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\ninterface FormState {\n title: string;\n photo: string;\n active: boolean;\n delayTyping: string;\n waitingTime: string;\n titleError: boolean;\n}\n\nfunction msToSeconds(ms: number | null): string {\n if (ms == null || ms === 0) return \"\";\n return String(Math.round(ms / 1000));\n}\n\nfunction secondsToMs(seconds: string): number | undefined {\n const val = parseFloat(seconds);\n if (isNaN(val) || val <= 0) return undefined;\n return Math.round(val * 1000);\n}\n\nfunction agentToFormState(agent: Agent): FormState {\n return {\n title: agent.title,\n photo: agent.photo || \"\",\n active: agent.active,\n delayTyping: msToSeconds(agent.delay_typing),\n waitingTime: msToSeconds(agent.waiting_time),\n titleError: false,\n };\n}\n\nexport function AgentEditForm({ config, agent, idAccount, open, onOpenChange }: AgentEditFormProps) {\n const updateAgent = useUpdateAgent(config);\n const [form, setForm] = useState<FormState>(() => agentToFormState(agent));\n\n useEffect(() => {\n setForm(agentToFormState(agent));\n }, [agent]);\n\n function updateField<K extends keyof FormState>(key: K, value: FormState[K]) {\n setForm((prev) => ({ ...prev, [key]: value }));\n }\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n\n if (!form.title.trim()) {\n updateField(\"titleError\", true);\n return;\n }\n\n const body: Record<string, unknown> = {\n title: form.title.trim(),\n active: form.active,\n };\n if (form.photo.trim()) body.photo = form.photo.trim();\n else body.photo = \"\";\n\n const delayMs = secondsToMs(form.delayTyping);\n if (delayMs !== undefined) body.delay_typing = delayMs;\n else body.delay_typing = 0;\n\n const waitingMs = secondsToMs(form.waitingTime);\n if (waitingMs !== undefined) body.waiting_time = waitingMs;\n else body.waiting_time = 0;\n\n try {\n await updateAgent.mutateAsync({ id: agent.id, body });\n toast.success(\"Agente atualizado\");\n onOpenChange?.(false);\n } catch {\n toast.error(\"Erro ao atualizar agente\");\n }\n }\n\n const formContent = (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"flex justify-center\">\n <ImageCropUpload\n value={form.photo || null}\n onChange={(url) => updateField(\"photo\", url)}\n onRemove={() => updateField(\"photo\", \"\")}\n entityType=\"agents\"\n entityId={agent.id}\n idAccount={typeof idAccount === \"string\" ? Number(idAccount) : (idAccount ?? 0)}\n name={form.title || null}\n disabled={updateAgent.isPending}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"edit-title\">Nome do Agente *</Label>\n <Input\n id=\"edit-title\"\n value={form.title}\n onChange={(e) => {\n setForm((prev) => ({\n ...prev,\n title: e.target.value,\n titleError: e.target.value.trim() ? false : prev.titleError,\n }));\n }}\n placeholder=\"Ex: Assistente de Agendamento\"\n disabled={updateAgent.isPending}\n />\n {form.titleError && (\n <p className=\"text-sm text-destructive\">Nome é obrigatório</p>\n )}\n </div>\n\n <div className=\"flex items-center gap-3\">\n <Switch\n id=\"edit-active\"\n checked={form.active}\n onCheckedChange={(checked) => updateField(\"active\", checked)}\n disabled={updateAgent.isPending}\n />\n <Label htmlFor=\"edit-active\" className=\"cursor-pointer\">\n {form.active ? \"Ativo\" : \"Inativo\"}\n </Label>\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"edit-delay\">Delay de Digitação (s)</Label>\n <Input\n id=\"edit-delay\"\n type=\"number\"\n value={form.delayTyping}\n onChange={(e) => updateField(\"delayTyping\", e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n step=\"0.5\"\n disabled={updateAgent.isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Tempo de simulação de digitação\n </p>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"edit-waiting\">Tempo de Espera (s)</Label>\n <Input\n id=\"edit-waiting\"\n type=\"number\"\n value={form.waitingTime}\n onChange={(e) => updateField(\"waitingTime\", e.target.value)}\n placeholder=\"0\"\n min=\"0\"\n step=\"0.5\"\n disabled={updateAgent.isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Espera por mensagens agrupadas\n </p>\n </div>\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n disabled={updateAgent.isPending}\n >\n Cancelar\n </Button>\n <Button type=\"submit\" disabled={updateAgent.isPending}>\n {updateAgent.isPending && (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n )}\n Salvar\n </Button>\n </DialogFooter>\n </form>\n );\n\n if (open !== undefined && onOpenChange) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Editar Agente</DialogTitle>\n </DialogHeader>\n {formContent}\n </DialogContent>\n </Dialog>\n );\n }\n\n return <div className=\"max-w-lg pt-4\">{formContent}</div>;\n}\n","import { useState } from \"react\";\nimport type { Agent, AgentTool, Tool, ToolCredential } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n useAgentTools,\n useAddAgentTool,\n useRemoveAgentTool,\n useUpdateAgentTool,\n} from \"../../hooks\";\nimport { useTools } from \"../../hooks\";\nimport { useToolCredentials } from \"../../hooks\";\nimport {\n Switch,\n Badge,\n Button,\n Skeleton,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Input,\n Textarea,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@greatapps/greatauth-ui/ui\";\nimport {\n Trash2,\n Plus,\n Wrench,\n Settings2,\n} from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentToolsListProps {\n agent: Agent;\n config: GagentsHookConfig;\n}\n\nexport function AgentToolsList({ agent, config }: AgentToolsListProps) {\n const { data: agentToolsData, isLoading } = useAgentTools(config, agent.id);\n const { data: allToolsData } = useTools(config);\n const addMutation = useAddAgentTool(config);\n const removeMutation = useRemoveAgentTool(config);\n const updateMutation = useUpdateAgentTool(config);\n\n const [removeTarget, setRemoveTarget] = useState<AgentTool | null>(null);\n const [addOpen, setAddOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [configTarget, setConfigTarget] = useState<AgentTool | null>(null);\n const [configInstructions, setConfigInstructions] = useState(\"\");\n const [configCredentialId, setConfigCredentialId] = useState<string>(\"\");\n\n const { data: credentialsData } = useToolCredentials(config);\n const allCredentials: ToolCredential[] = credentialsData?.data || [];\n\n const agentTools = agentToolsData?.data || [];\n const allTools = allToolsData?.data || [];\n const assignedToolIds = new Set(agentTools.map((at) => at.id_tool));\n const availableTools = allTools.filter((t) => !assignedToolIds.has(t.id));\n const filteredAvailable = availableTools.filter((t) =>\n t.name.toLowerCase().includes(search.toLowerCase()),\n );\n\n function getToolInfo(idTool: number): Tool | undefined {\n return allTools.find((t) => t.id === idTool);\n }\n\n async function handleToggleEnabled(agentTool: AgentTool, checked: boolean) {\n try {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: agentTool.id,\n body: { enabled: checked },\n });\n toast.success(checked ? \"Ferramenta ativada\" : \"Ferramenta desativada\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao alterar estado da ferramenta\",\n );\n }\n }\n\n async function handleAdd(tool: Tool) {\n try {\n await addMutation.mutateAsync({\n idAgent: agent.id,\n body: { id_tool: tool.id },\n });\n toast.success(\"Ferramenta adicionada\");\n setAddOpen(false);\n setSearch(\"\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao adicionar ferramenta\",\n );\n }\n }\n\n async function handleRemove() {\n if (!removeTarget) return;\n try {\n await removeMutation.mutateAsync({\n idAgent: agent.id,\n id: removeTarget.id,\n });\n toast.success(\"Ferramenta removida\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao remover ferramenta\",\n );\n } finally {\n setRemoveTarget(null);\n }\n }\n\n function openConfig(agentTool: AgentTool) {\n setConfigTarget(agentTool);\n setConfigInstructions(agentTool.custom_instructions || \"\");\n setConfigCredentialId(agentTool.id_tool_credential ? String(agentTool.id_tool_credential) : \"\");\n }\n\n async function handleSaveConfig() {\n if (!configTarget) return;\n try {\n const newCredentialId = configCredentialId ? parseInt(configCredentialId, 10) : null;\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: configTarget.id,\n body: {\n custom_instructions: configInstructions.trim() || null,\n id_tool_credential: newCredentialId,\n },\n });\n toast.success(\"Configuração atualizada\");\n setConfigTarget(null);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao atualizar configuração\",\n );\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n {agentTools.length} ferramenta{agentTools.length !== 1 ? \"s\" : \"\"} associada{agentTools.length !== 1 ? \"s\" : \"\"}\n </h3>\n <Popover open={addOpen} onOpenChange={setAddOpen}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" disabled={availableTools.length === 0}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Adicionar Ferramenta\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-72 p-0\" align=\"end\">\n <div className=\"p-2\">\n <Input\n placeholder=\"Buscar ferramenta...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-8\"\n />\n </div>\n <div className=\"max-h-48 overflow-y-auto\">\n {filteredAvailable.length === 0 ? (\n <p className=\"p-3 text-center text-sm text-muted-foreground\">\n Nenhuma ferramenta disponível\n </p>\n ) : (\n filteredAvailable.map((tool) => (\n <button\n key={tool.id}\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-3 py-2 text-left text-sm hover:bg-accent\"\n onClick={() => handleAdd(tool)}\n disabled={addMutation.isPending}\n >\n <Wrench className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"flex-1 font-medium\">{tool.name}</span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {tool.type}\n </Badge>\n </button>\n ))\n )}\n </div>\n </PopoverContent>\n </Popover>\n </div>\n\n {agentTools.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <Wrench className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma ferramenta associada. Clique em 'Adicionar Ferramenta' para começar.\n </p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {agentTools.map((agentTool) => {\n const tool = getToolInfo(agentTool.id_tool);\n return (\n <div\n key={agentTool.id}\n className=\"flex items-center gap-3 rounded-lg border bg-card p-3\"\n >\n <div className=\"flex flex-1 flex-col gap-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-medium\">\n {tool?.name || `Ferramenta #${agentTool.id_tool}`}\n </span>\n {tool?.type && (\n <Badge variant=\"secondary\" className=\"shrink-0 text-xs\">\n {tool.type}\n </Badge>\n )}\n </div>\n {agentTool.custom_instructions && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {agentTool.custom_instructions}\n </p>\n )}\n </div>\n\n <Switch\n checked={agentTool.enabled}\n onCheckedChange={(checked) =>\n handleToggleEnabled(agentTool, checked)\n }\n disabled={updateMutation.isPending}\n />\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={() => openConfig(agentTool)}\n title=\"Configurar instruções\"\n >\n <Settings2 className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-destructive\"\n onClick={() => setRemoveTarget(agentTool)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Config dialog for custom_instructions */}\n <Dialog\n open={!!configTarget}\n onOpenChange={(open) => !open && setConfigTarget(null)}\n >\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n Instruções da Ferramenta\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n {configTarget && getToolInfo(configTarget.id_tool)?.type !== \"none\" && (\n <div className=\"space-y-2\">\n <Label>Credencial</Label>\n <Select\n value={configCredentialId || undefined}\n onValueChange={(val) => setConfigCredentialId(val === \"__none__\" ? \"\" : val)}\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Selecione uma credencial (opcional)\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">Nenhuma (automático)</SelectItem>\n {allCredentials\n .filter((c) => configTarget && c.id_tool === configTarget.id_tool && c.status === \"active\")\n .map((c) => (\n <SelectItem key={c.id} value={String(c.id)}>\n {c.label || `Credencial #${c.id}`}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n Vincule uma credencial específica a esta ferramenta neste agente.\n </p>\n </div>\n )}\n <div className=\"space-y-2\">\n <Label>Instruções Personalizadas</Label>\n <Textarea\n value={configInstructions}\n onChange={(e) => setConfigInstructions(e.target.value)}\n placeholder=\"Instruções sobre como e quando o agente deve usar esta ferramenta...\"\n rows={6}\n />\n <p className=\"text-xs text-muted-foreground\">\n Este texto é adicionado ao prompt do agente para orientar o uso da ferramenta.\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setConfigTarget(null)}\n >\n Cancelar\n </Button>\n <Button\n onClick={handleSaveConfig}\n disabled={updateMutation.isPending}\n >\n Salvar\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Remove confirmation */}\n <AlertDialog\n open={!!removeTarget}\n onOpenChange={(open) => !open && setRemoveTarget(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remover ferramenta?</AlertDialogTitle>\n <AlertDialogDescription>\n A ferramenta será desassociada deste agente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancelar</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleRemove}\n disabled={removeMutation.isPending}\n >\n Remover\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { Agent, Objective } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n useObjectives,\n useCreateObjective,\n useUpdateObjective,\n useDeleteObjective,\n} from \"../../hooks\";\nimport {\n Input,\n Button,\n Switch,\n Skeleton,\n Textarea,\n Label,\n Badge,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@greatapps/greatauth-ui/ui\";\nimport {\n Sortable,\n SortableContent,\n SortableItem,\n SortableItemHandle,\n SortableOverlay,\n} from \"../ui/sortable\";\nimport { Trash2, Target, Pencil, Plus, GripVertical } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentObjectivesListProps {\n agent: Agent;\n config: GagentsHookConfig;\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\ninterface ObjectiveFormState {\n title: string;\n slug: string;\n prompt: string;\n}\n\nconst EMPTY_FORM: ObjectiveFormState = { title: \"\", slug: \"\", prompt: \"\" };\n\nexport function AgentObjectivesList({ agent, config }: AgentObjectivesListProps) {\n const { data: objectivesData, isLoading } = useObjectives(config, agent.id);\n const createMutation = useCreateObjective(config);\n const updateMutation = useUpdateObjective(config);\n const deleteMutation = useDeleteObjective(config);\n\n const [formOpen, setFormOpen] = useState(false);\n const [editTarget, setEditTarget] = useState<Objective | null>(null);\n const [form, setForm] = useState<ObjectiveFormState>(EMPTY_FORM);\n const [slugManual, setSlugManual] = useState(false);\n const [removeTarget, setRemoveTarget] = useState<Objective | null>(null);\n\n const objectives = objectivesData?.data || [];\n const sortedObjectives = [...objectives].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n\n async function handleReorder(newItems: Objective[]) {\n const updates = newItems\n .map((item, index) => ({ ...item, order: index + 1 }))\n .filter((item, index) => sortedObjectives[index]?.id !== item.id);\n\n try {\n for (const item of updates) {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: item.id,\n body: { order: item.order },\n });\n }\n toast.success(\"Ordem atualizada\");\n } catch {\n toast.error(\"Erro ao reordenar objetivos\");\n }\n }\n\n function openCreate() {\n setEditTarget(null);\n setForm(EMPTY_FORM);\n setSlugManual(false);\n setFormOpen(true);\n }\n\n function openEdit(objective: Objective) {\n setEditTarget(objective);\n setForm({\n title: objective.title,\n slug: objective.slug || \"\",\n prompt: objective.prompt || \"\",\n });\n setSlugManual(true);\n setFormOpen(true);\n }\n\n async function handleSubmit() {\n if (!form.title.trim()) return;\n\n const effectiveSlug = form.slug.trim() || slugify(form.title);\n const nextOrder =\n sortedObjectives.length > 0\n ? Math.max(...sortedObjectives.map((o) => o.order)) + 1\n : 1;\n\n try {\n if (editTarget) {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: editTarget.id,\n body: {\n title: form.title.trim(),\n slug: effectiveSlug,\n prompt: form.prompt.trim() || null,\n },\n });\n toast.success(\"Objetivo atualizado\");\n } else {\n await createMutation.mutateAsync({\n idAgent: agent.id,\n body: {\n title: form.title.trim(),\n slug: effectiveSlug,\n prompt: form.prompt.trim() || null,\n order: nextOrder,\n },\n });\n toast.success(\"Objetivo criado\");\n }\n setFormOpen(false);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : editTarget\n ? \"Erro ao atualizar objetivo\"\n : \"Erro ao criar objetivo\",\n );\n }\n }\n\n async function handleToggleActive(objective: Objective, checked: boolean) {\n try {\n await updateMutation.mutateAsync({\n idAgent: agent.id,\n id: objective.id,\n body: { active: checked },\n });\n toast.success(checked ? \"Objetivo ativado\" : \"Objetivo desativado\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao alterar estado do objetivo\",\n );\n }\n }\n\n async function handleRemove() {\n if (!removeTarget) return;\n try {\n await deleteMutation.mutateAsync({\n idAgent: agent.id,\n id: removeTarget.id,\n });\n toast.success(\"Objetivo removido\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Erro ao remover o objetivo\",\n );\n } finally {\n setRemoveTarget(null);\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n {sortedObjectives.length} objetivo{sortedObjectives.length !== 1 ? \"s\" : \"\"} definido{sortedObjectives.length !== 1 ? \"s\" : \"\"}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n Objetivos são modos de conversa que o agente ativa automaticamente conforme a intenção do utilizador.\n </p>\n </div>\n <Button onClick={openCreate} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Novo Objetivo\n </Button>\n </div>\n\n {sortedObjectives.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <Target className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhum objetivo definido. Adicione objetivos para orientar o agente em diferentes contextos.\n </p>\n </div>\n ) : (\n <Sortable\n value={sortedObjectives}\n onValueChange={handleReorder}\n getItemValue={(item) => item.id}\n >\n <SortableContent className=\"space-y-2\">\n {sortedObjectives.map((objective) => (\n <SortableItem\n key={objective.id}\n value={objective.id}\n className=\"flex items-center gap-3 rounded-lg border bg-card p-3\"\n >\n <SortableItemHandle className=\"shrink-0 text-muted-foreground hover:text-foreground\">\n <GripVertical className=\"h-5 w-5\" />\n </SortableItemHandle>\n\n <div className=\"flex flex-1 flex-col gap-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-medium\">\n {objective.title}\n </span>\n {objective.slug && (\n <Badge variant=\"secondary\" className=\"shrink-0 text-xs font-mono\">\n {objective.slug}\n </Badge>\n )}\n </div>\n {objective.prompt && (\n <p className=\"line-clamp-2 text-xs text-muted-foreground\">\n {objective.prompt}\n </p>\n )}\n </div>\n\n <Switch\n checked={objective.active}\n onCheckedChange={(checked) =>\n handleToggleActive(objective, checked)\n }\n disabled={updateMutation.isPending}\n />\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={() => openEdit(objective)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 text-muted-foreground hover:text-destructive\"\n onClick={() => setRemoveTarget(objective)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </SortableItem>\n ))}\n </SortableContent>\n <SortableOverlay>\n {({ value }) => {\n const obj = sortedObjectives.find((o) => o.id === value);\n return (\n <div className=\"flex items-center gap-3 rounded-lg border bg-card p-3 shadow-lg\">\n <GripVertical className=\"h-5 w-5 text-muted-foreground\" />\n <span className=\"font-medium\">{obj?.title}</span>\n </div>\n );\n }}\n </SortableOverlay>\n </Sortable>\n )}\n\n {/* Create/Edit Dialog */}\n <Dialog open={formOpen} onOpenChange={setFormOpen}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n {editTarget ? \"Editar Objetivo\" : \"Novo Objetivo\"}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label>Título *</Label>\n <Input\n value={form.title}\n onChange={(e) => {\n const title = e.target.value;\n setForm((f) => ({\n ...f,\n title,\n ...(!slugManual ? { slug: slugify(title) } : {}),\n }));\n }}\n placeholder=\"Ex: Agendar Consulta\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label>Slug (identificador) *</Label>\n <Input\n value={form.slug}\n onChange={(e) => {\n setSlugManual(true);\n setForm((f) => ({ ...f, slug: e.target.value }));\n }}\n placeholder=\"Ex: agendar-consulta\"\n className=\"font-mono\"\n />\n <p className=\"text-xs text-muted-foreground\">\n Gerado automaticamente. Usado pelo agente para identificar o objetivo.\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Instruções do Objetivo</Label>\n <Textarea\n value={form.prompt}\n onChange={(e) =>\n setForm((f) => ({ ...f, prompt: e.target.value }))\n }\n placeholder=\"Instruções detalhadas que o agente seguirá quando este objetivo for ativado. Ex: passos para agendar consulta, perguntas a fazer, validações necessárias...\"\n rows={8}\n />\n <p className=\"text-xs text-muted-foreground\">\n Estas instruções são carregadas automaticamente quando o agente detecta que o utilizador precisa deste objetivo.\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setFormOpen(false)}\n >\n Cancelar\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={\n !form.title.trim() ||\n createMutation.isPending ||\n updateMutation.isPending\n }\n >\n {editTarget ? \"Salvar\" : \"Criar\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!removeTarget}\n onOpenChange={(open) => !open && setRemoveTarget(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remover objetivo?</AlertDialogTitle>\n <AlertDialogDescription>\n O objetivo será removido permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancelar</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleRemove}\n disabled={deleteMutation.isPending}\n >\n Remover\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","import {\n type Announcements,\n closestCenter,\n closestCorners,\n DndContext,\n type DndContextProps,\n type DragEndEvent,\n type DraggableAttributes,\n type DraggableSyntheticListeners,\n DragOverlay,\n type DragStartEvent,\n type DropAnimation,\n defaultDropAnimationSideEffects,\n KeyboardSensor,\n MouseSensor,\n type ScreenReaderInstructions,\n TouchSensor,\n type UniqueIdentifier,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n restrictToHorizontalAxis,\n restrictToParentElement,\n restrictToVerticalAxis,\n} from \"@dnd-kit/modifiers\";\nimport {\n arrayMove,\n horizontalListSortingStrategy,\n SortableContext,\n type SortableContextProps,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { useComposedRefs } from \"../../lib/compose-refs\";\nimport { cn } from \"../../lib\";\n\nconst orientationConfig = {\n vertical: {\n modifiers: [restrictToVerticalAxis, restrictToParentElement],\n strategy: verticalListSortingStrategy,\n collisionDetection: closestCenter,\n },\n horizontal: {\n modifiers: [restrictToHorizontalAxis, restrictToParentElement],\n strategy: horizontalListSortingStrategy,\n collisionDetection: closestCenter,\n },\n mixed: {\n modifiers: [restrictToParentElement],\n strategy: undefined,\n collisionDetection: closestCorners,\n },\n};\n\nconst ROOT_NAME = \"Sortable\";\nconst CONTENT_NAME = \"SortableContent\";\nconst ITEM_NAME = \"SortableItem\";\nconst ITEM_HANDLE_NAME = \"SortableItemHandle\";\nconst OVERLAY_NAME = \"SortableOverlay\";\n\ninterface SortableRootContextValue<T> {\n id: string;\n items: UniqueIdentifier[];\n modifiers: DndContextProps[\"modifiers\"];\n strategy: SortableContextProps[\"strategy\"];\n activeId: UniqueIdentifier | null;\n setActiveId: (id: UniqueIdentifier | null) => void;\n getItemValue: (item: T) => UniqueIdentifier;\n flatCursor: boolean;\n}\n\nconst SortableRootContext =\n React.createContext<SortableRootContextValue<unknown> | null>(null);\n\nfunction useSortableContext(consumerName: string) {\n const context = React.useContext(SortableRootContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface GetItemValue<T> {\n /**\n * Callback that returns a unique identifier for each sortable item. Required for array of objects.\n * @example getItemValue={(item) => item.id}\n */\n getItemValue: (item: T) => UniqueIdentifier;\n}\n\ntype SortableProps<T> = DndContextProps &\n (T extends object ? GetItemValue<T> : Partial<GetItemValue<T>>) & {\n value: T[];\n onValueChange?: (items: T[]) => void;\n onMove?: (\n event: DragEndEvent & { activeIndex: number; overIndex: number },\n ) => void;\n strategy?: SortableContextProps[\"strategy\"];\n orientation?: \"vertical\" | \"horizontal\" | \"mixed\";\n flatCursor?: boolean;\n };\n\nfunction Sortable<T>(props: SortableProps<T>) {\n const {\n value,\n onValueChange,\n collisionDetection,\n modifiers,\n strategy,\n onMove,\n orientation = \"vertical\",\n flatCursor = false,\n getItemValue: getItemValueProp,\n accessibility,\n ...sortableProps\n } = props;\n\n const id = React.useId();\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null);\n\n const sensors = useSensors(\n useSensor(MouseSensor),\n useSensor(TouchSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n const config = React.useMemo(\n () => orientationConfig[orientation],\n [orientation],\n );\n\n const getItemValue = React.useCallback(\n (item: T): UniqueIdentifier => {\n if (typeof item === \"object\" && !getItemValueProp) {\n throw new Error(\n \"`getItemValue` is required when using array of objects\",\n );\n }\n return getItemValueProp\n ? getItemValueProp(item)\n : (item as UniqueIdentifier);\n },\n [getItemValueProp],\n );\n\n const items = React.useMemo(() => {\n return value.map((item) => getItemValue(item));\n }, [value, getItemValue]);\n\n /* eslint-disable react-hooks/preserve-manual-memoization, react-hooks/exhaustive-deps -- shadcn sortable: intentional dependency on specific props */\n const onDragStart = React.useCallback(\n (event: DragStartEvent) => {\n sortableProps.onDragStart?.(event);\n\n if (event.activatorEvent.defaultPrevented) return;\n\n setActiveId(event.active.id);\n },\n [sortableProps.onDragStart],\n );\n\n const onDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n sortableProps.onDragEnd?.(event);\n\n if (event.activatorEvent.defaultPrevented) return;\n\n const { active, over } = event;\n if (over && active.id !== over?.id) {\n const activeIndex = value.findIndex(\n (item) => getItemValue(item) === active.id,\n );\n const overIndex = value.findIndex(\n (item) => getItemValue(item) === over.id,\n );\n\n if (onMove) {\n onMove({ ...event, activeIndex, overIndex });\n } else {\n onValueChange?.(arrayMove(value, activeIndex, overIndex));\n }\n }\n setActiveId(null);\n },\n [value, onValueChange, onMove, getItemValue, sortableProps.onDragEnd],\n );\n\n const onDragCancel = React.useCallback(\n (event: DragEndEvent) => {\n sortableProps.onDragCancel?.(event);\n\n if (event.activatorEvent.defaultPrevented) return;\n\n setActiveId(null);\n },\n [sortableProps.onDragCancel],\n );\n /* eslint-enable react-hooks/preserve-manual-memoization, react-hooks/exhaustive-deps */\n\n const announcements: Announcements = React.useMemo(\n () => ({\n onDragStart({ active }) {\n const activeValue = active.id.toString();\n return `Grabbed sortable item \"${activeValue}\". Current position is ${active.data.current?.sortable.index + 1} of ${value.length}. Use arrow keys to move, space to drop.`;\n },\n onDragOver({ active, over }) {\n if (over) {\n const overIndex = over.data.current?.sortable.index ?? 0;\n const activeIndex = active.data.current?.sortable.index ?? 0;\n const moveDirection = overIndex > activeIndex ? \"down\" : \"up\";\n const activeValue = active.id.toString();\n return `Sortable item \"${activeValue}\" moved ${moveDirection} to position ${overIndex + 1} of ${value.length}.`;\n }\n return \"Sortable item is no longer over a droppable area. Press escape to cancel.\";\n },\n onDragEnd({ active, over }) {\n const activeValue = active.id.toString();\n if (over) {\n const overIndex = over.data.current?.sortable.index ?? 0;\n return `Sortable item \"${activeValue}\" dropped at position ${overIndex + 1} of ${value.length}.`;\n }\n return `Sortable item \"${activeValue}\" dropped. No changes were made.`;\n },\n onDragCancel({ active }) {\n const activeIndex = active.data.current?.sortable.index ?? 0;\n const activeValue = active.id.toString();\n return `Sorting cancelled. Sortable item \"${activeValue}\" returned to position ${activeIndex + 1} of ${value.length}.`;\n },\n onDragMove({ active, over }) {\n if (over) {\n const overIndex = over.data.current?.sortable.index ?? 0;\n const activeIndex = active.data.current?.sortable.index ?? 0;\n const moveDirection = overIndex > activeIndex ? \"down\" : \"up\";\n const activeValue = active.id.toString();\n return `Sortable item \"${activeValue}\" is moving ${moveDirection} to position ${overIndex + 1} of ${value.length}.`;\n }\n return \"Sortable item is no longer over a droppable area. Press escape to cancel.\";\n },\n }),\n [value],\n );\n\n const screenReaderInstructions: ScreenReaderInstructions = React.useMemo(\n () => ({\n draggable: `\n To pick up a sortable item, press space or enter.\n While dragging, use the ${orientation === \"vertical\" ? \"up and down\" : orientation === \"horizontal\" ? \"left and right\" : \"arrow\"} keys to move the item.\n Press space or enter again to drop the item in its new position, or press escape to cancel.\n `,\n }),\n [orientation],\n );\n\n const contextValue = React.useMemo(\n () => ({\n id,\n items,\n modifiers: modifiers ?? config.modifiers,\n strategy: strategy ?? config.strategy,\n activeId,\n setActiveId,\n getItemValue,\n flatCursor,\n }),\n [\n id,\n items,\n modifiers,\n strategy,\n config.modifiers,\n config.strategy,\n activeId,\n getItemValue,\n flatCursor,\n ],\n );\n\n return (\n <SortableRootContext.Provider\n value={contextValue as SortableRootContextValue<unknown>}\n >\n <DndContext\n collisionDetection={collisionDetection ?? config.collisionDetection}\n modifiers={modifiers ?? config.modifiers}\n sensors={sensors}\n {...sortableProps}\n id={id}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onDragCancel={onDragCancel}\n accessibility={{\n announcements,\n screenReaderInstructions,\n ...accessibility,\n }}\n />\n </SortableRootContext.Provider>\n );\n}\n\nconst SortableContentContext = React.createContext<boolean>(false);\n\ninterface SortableContentProps extends React.ComponentProps<\"div\"> {\n strategy?: SortableContextProps[\"strategy\"];\n children: React.ReactNode;\n asChild?: boolean;\n withoutSlot?: boolean;\n}\n\nfunction SortableContent(props: SortableContentProps) {\n const {\n strategy: strategyProp,\n asChild,\n withoutSlot,\n children,\n ref,\n ...contentProps\n } = props;\n\n const context = useSortableContext(CONTENT_NAME);\n\n const ContentPrimitive = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <SortableContentContext.Provider value={true}>\n <SortableContext\n items={context.items}\n strategy={strategyProp ?? context.strategy}\n >\n {withoutSlot ? (\n children\n ) : (\n <ContentPrimitive\n data-slot=\"sortable-content\"\n {...contentProps}\n ref={ref}\n >\n {children}\n </ContentPrimitive>\n )}\n </SortableContext>\n </SortableContentContext.Provider>\n );\n}\n\ninterface SortableItemContextValue {\n id: string;\n attributes: DraggableAttributes;\n listeners: DraggableSyntheticListeners | undefined;\n setActivatorNodeRef: (node: HTMLElement | null) => void;\n isDragging?: boolean;\n disabled?: boolean;\n}\n\nconst SortableItemContext =\n React.createContext<SortableItemContextValue | null>(null);\n\nfunction useSortableItemContext(consumerName: string) {\n const context = React.useContext(SortableItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface SortableItemProps extends React.ComponentProps<\"div\"> {\n value: UniqueIdentifier;\n asHandle?: boolean;\n asChild?: boolean;\n disabled?: boolean;\n}\n\nfunction SortableItem(props: SortableItemProps) {\n const {\n value,\n style,\n asHandle,\n asChild,\n disabled,\n className,\n ref,\n ...itemProps\n } = props;\n\n const inSortableContent = React.useContext(SortableContentContext);\n const inSortableOverlay = React.useContext(SortableOverlayContext);\n\n if (!inSortableContent && !inSortableOverlay) {\n throw new Error(\n `\\`${ITEM_NAME}\\` must be used within \\`${CONTENT_NAME}\\` or \\`${OVERLAY_NAME}\\``,\n );\n }\n\n if (value === \"\") {\n throw new Error(`\\`${ITEM_NAME}\\` value cannot be an empty string`);\n }\n\n const context = useSortableContext(ITEM_NAME);\n const id = React.useId();\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: value, disabled });\n\n const composedRef = useComposedRefs(ref, (node) => {\n if (disabled) return;\n setNodeRef(node);\n if (asHandle) setActivatorNodeRef(node);\n });\n\n const composedStyle = React.useMemo<React.CSSProperties>(() => {\n return {\n transform: CSS.Translate.toString(transform),\n transition,\n ...style,\n };\n }, [transform, transition, style]);\n\n const itemContext = React.useMemo<SortableItemContextValue>(\n () => ({\n id,\n attributes,\n listeners,\n setActivatorNodeRef,\n isDragging,\n disabled,\n }),\n [id, attributes, listeners, setActivatorNodeRef, isDragging, disabled],\n );\n\n const ItemPrimitive = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <SortableItemContext.Provider value={itemContext}>\n <ItemPrimitive\n id={id}\n data-disabled={disabled}\n data-dragging={isDragging ? \"\" : undefined}\n data-slot=\"sortable-item\"\n {...itemProps}\n {...(asHandle && !disabled ? attributes : {})}\n {...(asHandle && !disabled ? listeners : {})}\n ref={composedRef}\n style={composedStyle}\n className={cn(\n \"focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1\",\n {\n \"touch-none select-none\": asHandle,\n \"cursor-default\": context.flatCursor,\n \"data-dragging:cursor-grabbing\": !context.flatCursor,\n \"cursor-grab\": !isDragging && asHandle && !context.flatCursor,\n \"opacity-50\": isDragging,\n \"pointer-events-none opacity-50\": disabled,\n },\n className,\n )}\n />\n </SortableItemContext.Provider>\n );\n}\n\ninterface SortableItemHandleProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction SortableItemHandle(props: SortableItemHandleProps) {\n const { asChild, disabled, className, ref, ...itemHandleProps } = props;\n\n const context = useSortableContext(ITEM_HANDLE_NAME);\n const itemContext = useSortableItemContext(ITEM_HANDLE_NAME);\n\n const isDisabled = disabled ?? itemContext.disabled;\n\n const composedRef = useComposedRefs(ref, (node) => {\n if (!isDisabled) return;\n itemContext.setActivatorNodeRef(node);\n });\n\n const HandlePrimitive = asChild ? SlotPrimitive.Slot : \"button\";\n\n return (\n <HandlePrimitive\n type=\"button\"\n aria-controls={itemContext.id}\n data-disabled={isDisabled}\n data-dragging={itemContext.isDragging ? \"\" : undefined}\n data-slot=\"sortable-item-handle\"\n {...itemHandleProps}\n {...(isDisabled ? {} : itemContext.attributes)}\n {...(isDisabled ? {} : itemContext.listeners)}\n ref={composedRef}\n className={cn(\n \"select-none disabled:pointer-events-none disabled:opacity-50\",\n context.flatCursor\n ? \"cursor-default\"\n : \"cursor-grab data-dragging:cursor-grabbing\",\n className,\n )}\n disabled={isDisabled}\n />\n );\n}\n\nconst SortableOverlayContext = React.createContext(false);\n\nconst dropAnimation: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: \"0.4\",\n },\n },\n }),\n};\n\ninterface SortableOverlayProps\n extends Omit<React.ComponentProps<typeof DragOverlay>, \"children\"> {\n container?: Element | DocumentFragment | null;\n children?:\n | ((params: { value: UniqueIdentifier }) => React.ReactNode)\n | React.ReactNode;\n}\n\nfunction SortableOverlay(props: SortableOverlayProps) {\n const { container: containerProp, children, ...overlayProps } = props;\n\n const context = useSortableContext(OVERLAY_NAME);\n\n const [mounted, setMounted] = React.useState(false);\n\n React.useLayoutEffect(() => setMounted(true), []);\n\n const container =\n containerProp ?? (mounted ? globalThis.document?.body : null);\n\n if (!container) return null;\n\n return ReactDOM.createPortal(\n <DragOverlay\n dropAnimation={dropAnimation}\n modifiers={context.modifiers}\n className={cn(!context.flatCursor && \"cursor-grabbing\")}\n {...overlayProps}\n >\n <SortableOverlayContext.Provider value={true}>\n {context.activeId\n ? typeof children === \"function\"\n ? children({ value: context.activeId })\n : children\n : null}\n </SortableOverlayContext.Provider>\n </DragOverlay>,\n container,\n );\n}\n\nexport {\n Sortable,\n SortableContent,\n SortableItem,\n SortableItemHandle,\n SortableOverlay,\n //\n type SortableProps,\n};\n","import * as React from \"react\";\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === \"function\") {\n return ref(value);\n }\n if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import { useState, useRef, useCallback, useEffect } from \"react\";\nimport type { Agent, PromptVersion, Objective, AgentTool, Tool } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { usePromptVersions } from \"../../hooks\";\nimport { useUpdateAgent } from \"../../hooks\";\nimport { useAgentTools } from \"../../hooks\";\nimport { useObjectives } from \"../../hooks\";\nimport { useTools } from \"../../hooks\";\nimport { Button, Input, Skeleton, Badge } from \"@greatapps/greatauth-ui/ui\";\nimport { FileText, Loader2, ChevronDown, ChevronUp, RotateCcw } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\ninterface AgentPromptEditorProps {\n config: GagentsHookConfig;\n agent: Agent;\n}\n\nfunction formatDate(dateStr: string): string {\n const date = new Date(dateStr);\n return date.toLocaleDateString(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction computeDiff(\n oldText: string,\n newText: string,\n): { type: \"added\" | \"removed\" | \"equal\"; line: string }[] {\n const oldLines = oldText.split(\"\\n\");\n const newLines = newText.split(\"\\n\");\n const result: { type: \"added\" | \"removed\" | \"equal\"; line: string }[] = [];\n const maxLen = Math.max(oldLines.length, newLines.length);\n\n for (let i = 0; i < maxLen; i++) {\n const oldLine = i < oldLines.length ? oldLines[i] : undefined;\n const newLine = i < newLines.length ? newLines[i] : undefined;\n\n if (oldLine === newLine) {\n result.push({ type: \"equal\", line: newLine! });\n } else {\n if (oldLine !== undefined) {\n result.push({ type: \"removed\", line: oldLine });\n }\n if (newLine !== undefined) {\n result.push({ type: \"added\", line: newLine });\n }\n }\n }\n\n return result;\n}\n\nfunction buildPreview(\n promptText: string,\n objectives: Objective[],\n agentTools: AgentTool[],\n allTools: Tool[],\n): string {\n let preview = promptText;\n\n const activeObjectives = objectives.filter((o) => o.active);\n if (activeObjectives.length > 0) {\n preview += \"\\n\\n[SKILLS DISPONÍVEIS]\\n\";\n for (const obj of activeObjectives) {\n preview += `- ${obj.title}`;\n if (obj.prompt) preview += `: ${obj.prompt}`;\n preview += \"\\n\";\n }\n }\n\n const enabledAgentTools = agentTools.filter((at) => at.enabled);\n if (enabledAgentTools.length > 0) {\n const toolMap = new Map(allTools.map((t) => [t.id, t]));\n preview += \"\\n[TOOLS DISPONÍVEIS]\\n\";\n for (const at of enabledAgentTools) {\n const tool = toolMap.get(at.id_tool);\n const name = tool?.name || `Tool #${at.id_tool}`;\n const desc = tool?.description ? `: ${tool.description}` : \"\";\n preview += `- ${name}${desc}`;\n if (at.custom_instructions) {\n preview += `\\n Instruções: ${at.custom_instructions}`;\n }\n preview += \"\\n\";\n }\n }\n\n return preview;\n}\n\nexport function AgentPromptEditor({ config, agent }: AgentPromptEditorProps) {\n const { data: versionsData, isLoading } = usePromptVersions(config, agent.id);\n const updateAgent = useUpdateAgent(config);\n const { data: objectivesData } = useObjectives(config, agent.id);\n const { data: agentToolsData } = useAgentTools(config, agent.id);\n const { data: toolsData } = useTools(config);\n\n const versions = (versionsData?.data || []) as PromptVersion[];\n const sortedVersions = [...versions].sort(\n (a, b) => new Date(b.datetime_add).getTime() - new Date(a.datetime_add).getTime(),\n );\n const currentVersion = sortedVersions.find((v) => v.is_current) || sortedVersions[0] || null;\n const currentPromptContent = currentVersion?.prompt_content ?? \"\";\n\n const [trackedAgentId, setTrackedAgentId] = useState(agent.id);\n const [promptText, setPromptText] = useState(currentPromptContent);\n const [promptInitialized, setPromptInitialized] = useState(false);\n const [changeNotes, setChangeNotes] = useState(\"\");\n const [showPreview, setShowPreview] = useState(false);\n const [compareVersionId, setCompareVersionId] = useState<number | null>(null);\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // Initialize prompt text from current version when data loads\n if (!promptInitialized && currentPromptContent && !isLoading) {\n setPromptText(currentPromptContent);\n setPromptInitialized(true);\n }\n\n // Reset prompt text when agent changes\n if (trackedAgentId !== agent.id) {\n setTrackedAgentId(agent.id);\n setPromptText(currentPromptContent);\n setPromptInitialized(!!currentPromptContent);\n setCompareVersionId(null);\n }\n\n // Auto-resize textarea\n const autoResize = useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.max(300, el.scrollHeight)}px`;\n }, []);\n\n useEffect(() => {\n autoResize();\n }, [promptText, autoResize]);\n\n // Tab key support\n function handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n if (e.key === \"Tab\") {\n e.preventDefault();\n const el = e.currentTarget;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n const value = el.value;\n const newValue = value.substring(0, start) + \" \" + value.substring(end);\n setPromptText(newValue);\n // Restore cursor position after React re-render\n requestAnimationFrame(() => {\n el.selectionStart = el.selectionEnd = start + 2;\n });\n }\n }\n\n const compareVersion = sortedVersions.find((v) => v.id === compareVersionId);\n\n // Diff: always compare selected older version against current\n const diffLines =\n currentVersion && compareVersion && compareVersion.id !== currentVersion.id\n ? computeDiff(compareVersion.prompt_content ?? \"\", currentVersion.prompt_content ?? \"\")\n : null;\n\n async function handleSave() {\n const body: Record<string, unknown> = {\n prompt: promptText.trim(),\n };\n if (changeNotes.trim()) {\n body.change_notes = changeNotes.trim();\n }\n\n try {\n await updateAgent.mutateAsync({ id: agent.id, body });\n setChangeNotes(\"\");\n toast.success(\"Prompt salvo com sucesso\");\n } catch {\n toast.error(\"Erro ao salvar prompt\");\n }\n }\n\n function handleRestore(version: PromptVersion) {\n setPromptText(version.prompt_content ?? \"\");\n setChangeNotes(`Restaurado da v${version.version_number}`);\n toast.info(\"Prompt restaurado no editor. Clique em Salvar para confirmar.\");\n }\n\n const charCount = promptText.length;\n const tokenEstimate = Math.ceil(charCount / 4);\n\n const objectives = objectivesData?.data || [];\n const agentTools = agentToolsData?.data || [];\n const allTools = toolsData?.data || [];\n const previewText = buildPreview(promptText, objectives, agentTools, allTools);\n\n if (isLoading) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4 p-4 lg:flex-row\">\n {/* Editor section */}\n <div className=\"min-w-0 flex-1 space-y-4\">\n {/* Textarea */}\n <div className=\"space-y-2\">\n <textarea\n ref={textareaRef}\n value={promptText}\n onChange={(e) => setPromptText(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Escreva o prompt do sistema aqui...\"\n disabled={updateAgent.isPending}\n className=\"w-full resize-none rounded-lg border bg-background p-3 font-mono text-sm leading-relaxed focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50\"\n style={{ minHeight: \"300px\" }}\n />\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{charCount.toLocaleString(\"pt-BR\")} caracteres</span>\n <span>·</span>\n <span>~{tokenEstimate.toLocaleString(\"pt-BR\")} tokens</span>\n </div>\n </div>\n\n {/* Save row */}\n <div className=\"flex items-center gap-3\">\n <Input\n value={changeNotes}\n onChange={(e) => setChangeNotes(e.target.value)}\n placeholder=\"O que mudou? (opcional)\"\n disabled={updateAgent.isPending}\n className=\"flex-1\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSave();\n }\n }}\n />\n <Button\n onClick={handleSave}\n disabled={updateAgent.isPending || !promptText.trim()}\n >\n {updateAgent.isPending && (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n )}\n Salvar\n </Button>\n </div>\n\n {/* Preview section */}\n <div className=\"rounded-lg border\">\n <button\n type=\"button\"\n onClick={() => setShowPreview((prev) => !prev)}\n className=\"flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>Preview do prompt final</span>\n {showPreview ? (\n <ChevronUp className=\"h-4 w-4\" />\n ) : (\n <ChevronDown className=\"h-4 w-4\" />\n )}\n </button>\n {showPreview && (\n <div className=\"border-t px-4 py-3\">\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap font-mono text-sm leading-relaxed\">\n {previewText.split(\"\\n\").map((line, i) => {\n const isSection =\n line.startsWith(\"[SKILLS DISPONÍVEIS]\") ||\n line.startsWith(\"[TOOLS DISPONÍVEIS]\");\n return (\n <span\n key={i}\n className={isSection ? \"font-semibold text-muted-foreground\" : \"\"}\n >\n {line}\n {\"\\n\"}\n </span>\n );\n })}\n </pre>\n </div>\n )}\n </div>\n\n {/* Diff panel (when comparing) */}\n {diffLines && compareVersion && currentVersion && (\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n Diferenças: v{compareVersion.version_number} → v{currentVersion.version_number} (actual)\n </h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCompareVersionId(null)}\n className=\"text-xs\"\n >\n Fechar\n </Button>\n </div>\n <div className=\"max-h-64 overflow-auto rounded-lg border font-mono text-sm\">\n {diffLines.map((line, i) => (\n <div\n key={i}\n className={`whitespace-pre-wrap px-3 py-0.5 ${\n line.type === \"added\"\n ? \"bg-green-500/10 text-green-700 dark:text-green-400\"\n : line.type === \"removed\"\n ? \"bg-red-500/10 text-red-700 dark:text-red-400\"\n : \"\"\n }`}\n >\n <span className=\"mr-2 inline-block w-4 select-none text-muted-foreground\">\n {line.type === \"added\" ? \"+\" : line.type === \"removed\" ? \"-\" : \" \"}\n </span>\n {line.line || \" \"}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Timeline section (right) */}\n <div className=\"w-full space-y-2 lg:w-80 lg:shrink-0\">\n <h3 className=\"text-sm font-medium text-muted-foreground\">\n Histórico de Versões\n </h3>\n {sortedVersions.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <FileText className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma versão encontrada. Salve o prompt para criar a primeira versão.\n </p>\n </div>\n ) : (\n <div className=\"space-y-1\">\n {sortedVersions.map((version, idx) => {\n const isCurrent = idx === 0;\n const isComparing = version.id === compareVersionId;\n return (\n <div\n key={version.id}\n className={`rounded-lg border p-3 transition-colors ${\n isCurrent\n ? \"border-primary bg-primary/5\"\n : isComparing\n ? \"border-muted-foreground/30 bg-muted/50\"\n : \"\"\n }`}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-medium\">\n v{version.version_number}\n </span>\n {isCurrent && (\n <Badge variant=\"default\" className=\"text-[10px] px-1.5 py-0\">\n Actual\n </Badge>\n )}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {formatDate(version.datetime_add)}\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{(version.prompt_content ?? \"\").length} chars</span>\n <span>·</span>\n <span className=\"truncate font-mono\">\n {(version.prompt_hash ?? \"\").slice(0, 8)}\n </span>\n </div>\n {version.change_notes && (\n <div className=\"mt-1.5 text-xs italic text-muted-foreground\">\n {version.change_notes}\n </div>\n )}\n {!isCurrent && (\n <div className=\"mt-2 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => setCompareVersionId(isComparing ? null : version.id)}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground\"\n >\n <FileText className=\"h-3 w-3\" />\n {isComparing ? \"Ocultar diff\" : \"Comparar\"}\n </button>\n <button\n type=\"button\"\n onClick={() => handleRestore(version)}\n className=\"flex items-center gap-1 text-xs text-primary hover:underline\"\n >\n <RotateCcw className=\"h-3 w-3\" />\n Restaurar\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { Conversation } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Skeleton,\n Badge,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { MessageCircle, ExternalLink } from \"lucide-react\";\nimport { ConversationView } from \"./conversation-view\";\n\ninterface AgentConversationsTableProps {\n conversations: Conversation[];\n isLoading: boolean;\n contactsMap?: Map<number, string>;\n objectivesMap?: Map<number, string>;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nfunction formatRelativeDate(dateStr: string | null): string {\n if (!dateStr) return \"—\";\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 1) return \"agora\";\n if (diffMin < 60) return `${diffMin}m atrás`;\n const diffHours = Math.floor(diffMin / 60);\n if (diffHours < 24) return `${diffHours}h atrás`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays}d atrás`;\n return date.toLocaleDateString(\"pt-BR\");\n}\n\nexport function AgentConversationsTable({\n conversations,\n isLoading,\n contactsMap,\n objectivesMap,\n config,\n renderChatLink,\n}: AgentConversationsTableProps) {\n const [selectedId, setSelectedId] = useState<number | null>(null);\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"h-12 w-full\" />\n ))}\n </div>\n );\n }\n\n if (conversations.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center\">\n <MessageCircle className=\"mb-2 h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma conversa encontrada.\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n <TableHead>Contato</TableHead>\n <TableHead>Objetivo</TableHead>\n <TableHead className=\"text-right\">Mensagens</TableHead>\n <TableHead className=\"text-right\">Tokens</TableHead>\n <TableHead>Criado em</TableHead>\n <TableHead>Atualizado em</TableHead>\n <TableHead className=\"w-10\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {conversations.map((conversation) => (\n <TableRow\n key={conversation.id}\n className=\"cursor-pointer\"\n onClick={() =>\n setSelectedId(\n selectedId === conversation.id ? null : conversation.id,\n )\n }\n data-state={selectedId === conversation.id ? \"selected\" : undefined}\n >\n <TableCell className=\"font-mono text-xs\">\n {conversation.id}\n </TableCell>\n <TableCell>\n {contactsMap?.get(conversation.id_contact) ?? conversation.id_contact}\n </TableCell>\n <TableCell>\n {conversation.id_objective && objectivesMap?.get(conversation.id_objective) ? (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {objectivesMap.get(conversation.id_objective)}\n </Badge>\n ) : (\n <span className=\"text-xs text-muted-foreground\">—</span>\n )}\n </TableCell>\n <TableCell className=\"text-right\">\n {conversation.message_count ?? \"—\"}\n </TableCell>\n <TableCell className=\"text-right\">\n {conversation.usage_tokens ?? \"—\"}\n </TableCell>\n <TableCell>\n {new Date(conversation.datetime_add).toLocaleDateString(\"pt-BR\")}\n </TableCell>\n <TableCell>\n {formatRelativeDate(conversation.datetime_alt)}\n </TableCell>\n <TableCell>\n {conversation.id_external ? (\n renderChatLink ? (\n <span onClick={(e) => e.stopPropagation()}>\n {renderChatLink(conversation.id_external)}\n </span>\n ) : (\n <a\n href={`/gchat/inbox/${conversation.id_external}`}\n title=\"Ver no Chat\"\n onClick={(e) => e.stopPropagation()}\n className=\"inline-flex items-center justify-center rounded-md p-1.5 text-muted-foreground hover:text-foreground hover:bg-accent transition-colors\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n </a>\n )\n ) : null}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n {selectedId && (\n <ConversationView\n conversationId={selectedId}\n onClose={() => setSelectedId(null)}\n contactsMap={contactsMap}\n config={config}\n renderChatLink={renderChatLink}\n />\n )}\n </div>\n );\n}\n","import { useConversation } from \"../../hooks\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { Skeleton, Button } from \"@greatapps/greatauth-ui/ui\";\nimport { X, MessageSquare } from \"lucide-react\";\n\ninterface ConversationViewProps {\n conversationId: number;\n onClose: () => void;\n contactsMap?: Map<number, string>;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nfunction formatDateTime(dateStr: string | null): string {\n if (!dateStr) return \"—\";\n return new Date(dateStr).toLocaleString(\"pt-BR\");\n}\n\nexport function ConversationView({\n conversationId,\n onClose,\n contactsMap,\n config,\n renderChatLink,\n}: ConversationViewProps) {\n const { data: conversation, isLoading } = useConversation(config, conversationId);\n\n if (isLoading) {\n return (\n <div className=\"rounded-lg border bg-card p-4 space-y-3\">\n <Skeleton className=\"h-6 w-48\" />\n <div className=\"grid grid-cols-2 gap-3\">\n {Array.from({ length: 6 }).map((_, i) => (\n <Skeleton key={i} className=\"h-10 w-full\" />\n ))}\n </div>\n </div>\n );\n }\n\n if (!conversation) {\n return (\n <div className=\"rounded-lg border bg-card p-4\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n Conversa não encontrada.\n </p>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rounded-lg border bg-card p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">Detalhes da conversa #{conversation.id}</h3>\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {conversation.id_external ? (\n renderChatLink ? (\n renderChatLink(conversation.id_external)\n ) : (\n <Button variant=\"outline\" size=\"sm\" asChild>\n <a href={`/gchat/inbox/${conversation.id_external}`}>\n <MessageSquare className=\"mr-2 h-4 w-4\" />\n Ver no Chat\n </a>\n </Button>\n )\n ) : null}\n\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-3 text-sm\">\n <div>\n <span className=\"text-muted-foreground\">Thread ID</span>\n <p className=\"font-mono text-xs mt-0.5\">\n {conversation.openai_thread_id || \"—\"}\n </p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Contato</span>\n <p className=\"mt-0.5\">\n {contactsMap?.get(conversation.id_contact) ?? conversation.id_contact}\n </p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Agente</span>\n <p className=\"mt-0.5\">{conversation.id_agent ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Mensagens</span>\n <p className=\"mt-0.5\">{conversation.message_count ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Tokens</span>\n <p className=\"mt-0.5\">{conversation.usage_tokens ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Rotações de Thread</span>\n <p className=\"mt-0.5\">{conversation.rotation_count ?? \"—\"}</p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Criado em</span>\n <p className=\"mt-0.5\">\n {formatDateTime(conversation.datetime_add)}\n </p>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Atualizado em</span>\n <p className=\"mt-0.5\">\n {formatDateTime(conversation.datetime_alt)}\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { useAgentConversations, useGagentsContacts, useObjectives } from \"../../hooks\";\nimport { AgentConversationsTable } from \"./agent-conversations-table\";\n\ninterface AgentConversationsPanelProps {\n agent: Agent;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nexport function AgentConversationsPanel({\n agent,\n config,\n renderChatLink,\n}: AgentConversationsPanelProps) {\n const { data: conversationsData, isLoading } = useAgentConversations(\n config,\n agent.id,\n );\n const { data: contactsData } = useGagentsContacts(config);\n const { data: objectivesData } = useObjectives(config, agent.id);\n\n const conversations = conversationsData?.data || [];\n const contactsMap = new Map(\n (contactsData?.data || []).map((c) => [c.id, c.name]),\n );\n const objectivesMap = new Map(\n (objectivesData?.data || []).map((o) => [o.id, o.title]),\n );\n\n return (\n <div className=\"p-4\">\n <AgentConversationsTable\n conversations={conversations}\n isLoading={isLoading}\n contactsMap={contactsMap}\n objectivesMap={objectivesMap}\n config={config}\n renderChatLink={renderChatLink}\n />\n </div>\n );\n}\n","import type { Agent } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { AgentToolsList } from \"./agent-tools-list\";\nimport { AgentObjectivesList } from \"./agent-objectives-list\";\nimport { AgentPromptEditor } from \"./agent-prompt-editor\";\nimport { AgentConversationsPanel } from \"../conversations/agent-conversations-panel\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Wrench, Target, FileText, MessageCircle } from \"lucide-react\";\n\ninterface AgentTabsProps {\n agent: Agent;\n config: GagentsHookConfig;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nexport function AgentTabs({ agent, config, renderChatLink }: AgentTabsProps) {\n return (\n <Tabs defaultValue=\"prompt\">\n <TabsList>\n <TabsTrigger value=\"prompt\" className=\"flex items-center gap-1.5\">\n <FileText className=\"h-3.5 w-3.5\" />\n Prompt\n </TabsTrigger>\n <TabsTrigger value=\"objetivos\" className=\"flex items-center gap-1.5\">\n <Target className=\"h-3.5 w-3.5\" />\n Objetivos\n </TabsTrigger>\n <TabsTrigger value=\"ferramentas\" className=\"flex items-center gap-1.5\">\n <Wrench className=\"h-3.5 w-3.5\" />\n Ferramentas\n </TabsTrigger>\n <TabsTrigger value=\"conversas\" className=\"flex items-center gap-1.5\">\n <MessageCircle className=\"h-3.5 w-3.5\" />\n Conversas\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"prompt\" className=\"mt-4\">\n <AgentPromptEditor agent={agent} config={config} />\n </TabsContent>\n\n <TabsContent value=\"objetivos\" className=\"mt-4\">\n <AgentObjectivesList agent={agent} config={config} />\n </TabsContent>\n\n <TabsContent value=\"ferramentas\" className=\"mt-4\">\n <AgentToolsList agent={agent} config={config} />\n </TabsContent>\n\n <TabsContent value=\"conversas\" className=\"mt-4\">\n <AgentConversationsPanel\n agent={agent}\n config={config}\n renderChatLink={renderChatLink}\n />\n </TabsContent>\n </Tabs>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { useTools, useDeleteTool } from \"../../hooks\";\nimport type { Tool } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport { DataTable } from \"@greatapps/greatauth-ui\";\nimport {\n Input,\n Badge,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Pencil, Trash2, Search } from \"lucide-react\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\n\ninterface ToolsTableProps {\n onEdit: (tool: Tool) => void;\n config: GagentsHookConfig;\n}\n\nfunction useColumns(\n onEdit: (tool: Tool) => void,\n onDelete: (id: number) => void,\n): ColumnDef<Tool>[] {\n return [\n {\n accessorKey: \"name\",\n header: \"Nome\",\n cell: ({ row }) => (\n <span className=\"font-medium\">{row.original.name}</span>\n ),\n sortingFn: (rowA, rowB) =>\n rowA.original.name\n .toLowerCase()\n .localeCompare(rowB.original.name.toLowerCase()),\n },\n {\n accessorKey: \"slug\",\n header: \"Slug\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm font-mono\">\n {row.original.slug || \"\\u2014\"}\n </span>\n ),\n },\n {\n accessorKey: \"type\",\n header: \"Tipo\",\n cell: ({ row }) => (\n <Badge variant=\"secondary\">{row.original.type}</Badge>\n ),\n },\n {\n accessorKey: \"description\",\n header: \"Descrição\",\n cell: ({ row }) => {\n const desc = row.original.description;\n if (!desc) return <span className=\"text-muted-foreground text-sm\">{\"\\u2014\"}</span>;\n return (\n <span className=\"text-muted-foreground text-sm\">\n {desc.length > 50 ? `${desc.slice(0, 50)}...` : desc}\n </span>\n );\n },\n },\n {\n accessorKey: \"datetime_add\",\n header: \"Criado em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {format(new Date(row.original.datetime_add), \"dd/MM/yyyy\", {\n locale: ptBR,\n })}\n </span>\n ),\n },\n {\n id: \"actions\",\n size: 80,\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onEdit(row.original)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Editar</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => onDelete(row.original.id)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Excluir</TooltipContent>\n </Tooltip>\n </div>\n ),\n },\n ];\n}\n\nexport function ToolsTable({ onEdit, config }: ToolsTableProps) {\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n\n const queryParams = useMemo(() => {\n const params: Record<string, string> = {\n limit: \"15\",\n page: String(page),\n };\n if (search) {\n params.search = search;\n }\n return params;\n }, [search, page]);\n\n const { data, isLoading } = useTools(config, queryParams);\n const deleteTool = useDeleteTool(config);\n const [deleteId, setDeleteId] = useState<number | null>(null);\n\n const tools = data?.data || [];\n const total = data?.total || 0;\n\n const columns = useColumns(\n (tool) => onEdit(tool),\n (id) => setDeleteId(id),\n );\n\n function handleDelete() {\n if (!deleteId) return;\n deleteTool.mutate(deleteId, {\n onSuccess: () => {\n toast.success(\"Ferramenta excluída\");\n setDeleteId(null);\n },\n onError: () => toast.error(\"Erro ao excluir ferramenta\"),\n });\n }\n\n function handleSearchChange(value: string) {\n setSearch(value);\n setPage(1);\n }\n\n return (\n <>\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Buscar ferramentas...\"\n value={search}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n\n <DataTable\n columns={columns}\n data={tools}\n isLoading={isLoading}\n emptyMessage=\"Nenhuma ferramenta encontrada\"\n total={total}\n page={page}\n onPageChange={setPage}\n pageSize={15}\n />\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!deleteId}\n onOpenChange={(open) => !open && setDeleteId(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Excluir ferramenta?</AlertDialogTitle>\n <AlertDialogDescription>\n Esta ação não pode ser desfeita. A ferramenta será removida\n permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel variant=\"outline\" size=\"default\">\n Cancelar\n </AlertDialogCancel>\n <AlertDialogAction\n variant=\"default\"\n size=\"default\"\n onClick={handleDelete}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Excluir\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","import { useState } from \"react\";\nimport { useCreateTool, useUpdateTool } from \"../../hooks\";\nimport type { Tool } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Button,\n Input,\n Textarea,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\n\nconst TOOL_AUTH_TYPES = [\n { value: \"none\", label: \"Nenhuma\" },\n { value: \"api_key\", label: \"API Key\" },\n { value: \"oauth2\", label: \"OAuth 2.0\" },\n] as const;\n\ninterface ToolFormDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n tool?: Tool;\n config: GagentsHookConfig;\n}\n\ninterface FormState {\n name: string;\n slug: string;\n type: string;\n description: string;\n functionDefinitions: string;\n nameError: boolean;\n slugError: boolean;\n typeError: boolean;\n jsonError: boolean;\n}\n\nfunction toolToFormState(tool?: Tool): FormState {\n return {\n name: tool?.name || \"\",\n slug: tool?.slug || \"\",\n type: tool?.type || \"none\",\n description: tool?.description || \"\",\n functionDefinitions: tool?.function_definitions\n ? formatJson(tool.function_definitions)\n : \"\",\n nameError: false,\n slugError: false,\n typeError: false,\n jsonError: false,\n };\n}\n\nfunction formatJson(str: string): string {\n try {\n return JSON.stringify(JSON.parse(str), null, 2);\n } catch {\n return str;\n }\n}\n\nfunction slugify(name: string): string {\n return name\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction isValidJson(str: string): boolean {\n if (!str.trim()) return true;\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function ToolFormDialog({\n open,\n onOpenChange,\n tool,\n config,\n}: ToolFormDialogProps) {\n const isEditing = !!tool;\n const createTool = useCreateTool(config);\n const updateTool = useUpdateTool(config);\n const [form, setForm] = useState<FormState>(() => toolToFormState(tool));\n const [slugManuallyEdited, setSlugManuallyEdited] = useState(false);\n\n // Reset form when dialog opens or tool changes\n const [lastResetKey, setLastResetKey] = useState(\n () => `${tool?.id}-${open}`,\n );\n const resetKey = `${tool?.id}-${open}`;\n if (resetKey !== lastResetKey) {\n setLastResetKey(resetKey);\n setForm(toolToFormState(open ? tool : undefined));\n setSlugManuallyEdited(false);\n }\n\n const isPending = createTool.isPending || updateTool.isPending;\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n\n let hasError = false;\n\n if (!form.name.trim()) {\n setForm((prev) => ({ ...prev, nameError: true }));\n hasError = true;\n }\n const effectiveSlug = form.slug.trim() || slugify(form.name);\n if (!effectiveSlug) {\n setForm((prev) => ({ ...prev, slugError: true }));\n hasError = true;\n }\n if (!form.type) {\n setForm((prev) => ({ ...prev, typeError: true }));\n hasError = true;\n }\n if (!isValidJson(form.functionDefinitions)) {\n setForm((prev) => ({ ...prev, jsonError: true }));\n hasError = true;\n }\n\n if (hasError) return;\n\n const body: Record<string, unknown> = {\n name: form.name.trim(),\n slug: effectiveSlug,\n type: form.type,\n };\n\n if (form.description.trim()) body.description = form.description.trim();\n else body.description = \"\";\n\n // JSONB critical rule: function_definitions must be sent as string\n if (form.functionDefinitions.trim()) {\n const parsed = JSON.parse(form.functionDefinitions.trim());\n body.function_definitions = JSON.stringify(parsed);\n } else {\n body.function_definitions = \"\";\n }\n\n try {\n if (isEditing) {\n await updateTool.mutateAsync({ id: tool.id, body });\n toast.success(\"Ferramenta atualizada\");\n } else {\n await createTool.mutateAsync(\n body as { name: string; slug: string; type: string; description?: string; function_definitions?: string },\n );\n toast.success(\"Ferramenta criada\");\n }\n onOpenChange(false);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : isEditing ? \"Erro ao atualizar ferramenta\" : \"Erro ao criar ferramenta\",\n );\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>\n {isEditing ? \"Editar Ferramenta\" : \"Nova Ferramenta\"}\n </DialogTitle>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-name\">Nome *</Label>\n <Input\n id=\"tool-name\"\n value={form.name}\n onChange={(e) => {\n const name = e.target.value;\n setForm((prev) => ({\n ...prev,\n name,\n nameError: name.trim() ? false : prev.nameError,\n ...(!slugManuallyEdited && !isEditing\n ? { slug: slugify(name), slugError: false }\n : {}),\n }));\n }}\n placeholder=\"Ex: Google Calendar\"\n disabled={isPending}\n />\n {form.nameError && (\n <p className=\"text-sm text-destructive\">Nome é obrigatório</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-slug\">Slug (identificador único) *</Label>\n <Input\n id=\"tool-slug\"\n value={form.slug}\n onChange={(e) => {\n setSlugManuallyEdited(true);\n setForm((prev) => ({\n ...prev,\n slug: e.target.value,\n slugError: e.target.value.trim() ? false : prev.slugError,\n }));\n }}\n placeholder=\"Ex: google-calendar\"\n disabled={isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Gerado automaticamente a partir do nome. Usado internamente para identificar a ferramenta.\n </p>\n {form.slugError && (\n <p className=\"text-sm text-destructive\">Slug é obrigatório</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-type\">Tipo de Autenticação *</Label>\n <Select\n value={form.type}\n onValueChange={(value) => {\n setForm((prev) => ({\n ...prev,\n type: value,\n typeError: false,\n }));\n }}\n disabled={isPending}\n >\n <SelectTrigger id=\"tool-type\">\n <SelectValue placeholder=\"Selecione o tipo\" />\n </SelectTrigger>\n <SelectContent>\n {TOOL_AUTH_TYPES.map((t) => (\n <SelectItem key={t.value} value={t.value}>\n {t.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n Define se a ferramenta requer credenciais para funcionar.\n </p>\n {form.typeError && (\n <p className=\"text-sm text-destructive\">Tipo é obrigatório</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-description\">Descrição</Label>\n <Textarea\n id=\"tool-description\"\n value={form.description}\n onChange={(e) =>\n setForm((prev) => ({ ...prev, description: e.target.value }))\n }\n placeholder=\"Descrição da ferramenta...\"\n rows={3}\n disabled={isPending}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tool-function-defs\">\n Definições de Função (JSON)\n </Label>\n <Textarea\n id=\"tool-function-defs\"\n value={form.functionDefinitions}\n onChange={(e) => {\n setForm((prev) => ({\n ...prev,\n functionDefinitions: e.target.value,\n jsonError: false,\n }));\n }}\n placeholder={`[\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"nome_da_funcao\",\n \"description\": \"O que a função faz\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": { ... },\n \"required\": [...]\n }\n }\n }\n]`}\n rows={10}\n className=\"font-mono text-sm\"\n disabled={isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n Array de definições no formato OpenAI Function Calling.\n </p>\n {form.jsonError && (\n <p className=\"text-sm text-destructive\">JSON inválido</p>\n )}\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isPending}\n >\n Cancelar\n </Button>\n <Button type=\"submit\" disabled={isPending}>\n {isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : null}\n {isEditing ? \"Salvar\" : \"Criar\"}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport type { Tool, ToolCredential } from \"../../types\";\nimport type { GagentsHookConfig } from \"../../hooks/types\";\nimport {\n useCreateToolCredential,\n useUpdateToolCredential,\n useDeleteToolCredential,\n} from \"../../hooks\";\nimport { useTools } from \"../../hooks\";\nimport { DataTable } from \"@greatapps/greatauth-ui\";\nimport {\n Input,\n Button,\n Badge,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@greatapps/greatauth-ui/ui\";\nimport { Trash2, Pencil, Link, Search } from \"lucide-react\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\n\ninterface ToolCredentialsFormProps {\n credentials: ToolCredential[];\n isLoading: boolean;\n config: GagentsHookConfig;\n gagentsApiUrl: string;\n createOpen?: boolean;\n onCreateOpenChange?: (open: boolean) => void;\n}\n\nfunction formatDate(dateStr: string | null): string {\n if (!dateStr) return \"Sem expiração\";\n return format(new Date(dateStr), \"dd/MM/yyyy\", { locale: ptBR });\n}\n\nfunction useColumns(\n tools: Tool[],\n onEdit: (cred: ToolCredential) => void,\n onConnect: (cred: ToolCredential) => void,\n onRemove: (cred: ToolCredential) => void,\n): ColumnDef<ToolCredential>[] {\n function getToolName(idTool: number | null): string {\n if (!idTool) return \"\\u2014\";\n const tool = tools.find((t) => t.id === idTool);\n return tool?.name || `Ferramenta #${idTool}`;\n }\n\n function getToolType(idTool: number | null): string | null {\n if (!idTool) return null;\n const tool = tools.find((t) => t.id === idTool);\n return tool?.type || null;\n }\n\n return [\n {\n accessorKey: \"label\",\n header: \"Label\",\n cell: ({ row }) => (\n <span className=\"font-medium\">{row.original.label || \"\\u2014\"}</span>\n ),\n },\n {\n accessorKey: \"id_tool\",\n header: \"Ferramenta\",\n cell: ({ row }) => (\n <span className=\"text-sm\">{getToolName(row.original.id_tool)}</span>\n ),\n },\n {\n accessorKey: \"status\",\n header: \"Status\",\n cell: ({ row }) => (\n <Badge\n variant={row.original.status === \"active\" ? \"default\" : \"destructive\"}\n >\n {row.original.status === \"active\" ? \"Ativo\" : \"Expirado\"}\n </Badge>\n ),\n },\n {\n accessorKey: \"expires_at\",\n header: \"Expira em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {formatDate(row.original.expires_at)}\n </span>\n ),\n },\n {\n accessorKey: \"datetime_add\",\n header: \"Criado em\",\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-sm\">\n {formatDate(row.original.datetime_add)}\n </span>\n ),\n },\n {\n id: \"actions\",\n header: \"Ações\",\n size: 100,\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1\">\n {getToolType(row.original.id_tool) === \"oauth2\" && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n disabled\n >\n <Link className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Em breve</TooltipContent>\n </Tooltip>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onEdit(row.original)}\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Editar</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => onRemove(row.original)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Remover</TooltipContent>\n </Tooltip>\n </div>\n ),\n },\n ];\n}\n\nexport function ToolCredentialsForm({\n credentials,\n isLoading,\n config,\n gagentsApiUrl,\n createOpen: externalCreateOpen,\n onCreateOpenChange,\n}: ToolCredentialsFormProps) {\n const createMutation = useCreateToolCredential(config);\n const updateMutation = useUpdateToolCredential(config);\n const deleteMutation = useDeleteToolCredential(config);\n const { data: toolsData } = useTools(config);\n const tools: Tool[] = toolsData?.data || [];\n\n const [search, setSearch] = useState(\"\");\n const [internalCreateOpen, setInternalCreateOpen] = useState(false);\n const showCreateDialog = externalCreateOpen ?? internalCreateOpen;\n const setShowCreateDialog = onCreateOpenChange ?? setInternalCreateOpen;\n const [createForm, setCreateForm] = useState({\n id_tool: \"\",\n label: \"\",\n credentials_encrypted: \"\",\n expires_at: \"\",\n });\n\n const [editTarget, setEditTarget] = useState<ToolCredential | null>(null);\n const [editForm, setEditForm] = useState({\n id_tool: \"\",\n label: \"\",\n credentials_encrypted: \"\",\n expires_at: \"\",\n status: \"\" as \"active\" | \"expired\" | \"\",\n });\n\n const [removeTarget, setRemoveTarget] = useState<ToolCredential | null>(null);\n\n const filteredCredentials = useMemo(() => {\n if (!search) return credentials;\n const term = search.toLowerCase();\n return credentials.filter((cred) => {\n const toolName = tools.find((t) => t.id === cred.id_tool)?.name || \"\";\n return (\n (cred.label || \"\").toLowerCase().includes(term) ||\n toolName.toLowerCase().includes(term)\n );\n });\n }, [credentials, search, tools]);\n\n const columns = useColumns(\n tools,\n (cred) => startEdit(cred),\n (cred) => handleConnect(cred),\n (cred) => setRemoveTarget(cred),\n );\n\n async function handleCreate() {\n const idTool = parseInt(createForm.id_tool, 10);\n if (!idTool || !createForm.label.trim() || !createForm.credentials_encrypted.trim()) return;\n\n try {\n const result = await createMutation.mutateAsync({\n id_tool: idTool,\n label: createForm.label.trim(),\n credentials_encrypted: createForm.credentials_encrypted.trim(),\n ...(createForm.expires_at ? { expires_at: createForm.expires_at } : {}),\n });\n if (result.status === 1) {\n toast.success(\"Credencial criada\");\n setShowCreateDialog(false);\n setCreateForm({ id_tool: \"\", label: \"\", credentials_encrypted: \"\", expires_at: \"\" });\n } else {\n toast.error(result.message || \"Erro ao criar credencial\");\n }\n } catch {\n toast.error(\"Erro ao criar credencial\");\n }\n }\n\n function startEdit(cred: ToolCredential) {\n setEditTarget(cred);\n setEditForm({\n id_tool: cred.id_tool ? String(cred.id_tool) : \"\",\n label: cred.label || \"\",\n credentials_encrypted: \"\",\n expires_at: cred.expires_at || \"\",\n status: cred.status,\n });\n }\n\n async function handleSaveEdit() {\n if (!editTarget) return;\n const body: Record<string, unknown> = {};\n const newIdTool = editForm.id_tool ? parseInt(editForm.id_tool, 10) : null;\n if (newIdTool && newIdTool !== editTarget.id_tool) {\n body.id_tool = newIdTool;\n }\n if (editForm.label.trim() && editForm.label.trim() !== (editTarget.label || \"\")) {\n body.label = editForm.label.trim();\n }\n if (editForm.credentials_encrypted.trim()) {\n body.credentials_encrypted = editForm.credentials_encrypted.trim();\n }\n if (editForm.expires_at !== (editTarget.expires_at || \"\")) {\n body.expires_at = editForm.expires_at || null;\n }\n if (editForm.status && editForm.status !== editTarget.status) {\n body.status = editForm.status;\n }\n\n if (Object.keys(body).length === 0) {\n setEditTarget(null);\n return;\n }\n\n try {\n const result = await updateMutation.mutateAsync({\n id: editTarget.id,\n body: body as Parameters<typeof updateMutation.mutateAsync>[0][\"body\"],\n });\n if (result.status === 1) {\n toast.success(\"Credencial atualizada\");\n setEditTarget(null);\n } else {\n toast.error(result.message || \"Erro ao atualizar credencial\");\n }\n } catch {\n toast.error(\"Erro ao atualizar credencial\");\n }\n }\n\n async function handleRemove() {\n if (!removeTarget) return;\n try {\n const result = await deleteMutation.mutateAsync(removeTarget.id);\n if (result.status === 1) {\n toast.success(\"Credencial removida\");\n } else {\n toast.error(result.message || \"Erro ao remover credencial\");\n }\n } catch {\n toast.error(\"Erro ao remover credencial\");\n } finally {\n setRemoveTarget(null);\n }\n }\n\n function handleConnect(cred: ToolCredential) {\n if (!config.accountId || !config.token) return;\n const language = config.language ?? \"pt-br\";\n const idWl = config.idWl ?? 1;\n const url = `${gagentsApiUrl}/v1/${language}/${idWl}/accounts/${config.accountId}/oauth/connect?id_tool=${cred.id_tool}`;\n window.open(url, \"_blank\");\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Buscar credenciais...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n\n <DataTable\n columns={columns}\n data={filteredCredentials}\n isLoading={isLoading}\n emptyMessage=\"Nenhuma credencial encontrada\"\n />\n\n {/* Create Dialog */}\n <Dialog open={showCreateDialog} onOpenChange={setShowCreateDialog}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Nova Credencial</DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Ferramenta *\n </label>\n <Select\n value={createForm.id_tool}\n onValueChange={(val) =>\n setCreateForm((f) => ({ ...f, id_tool: val }))\n }\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Selecione a ferramenta\" />\n </SelectTrigger>\n <SelectContent>\n {tools.map((tool) => (\n <SelectItem key={tool.id} value={String(tool.id)}>\n {tool.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Label *\n </label>\n <Input\n value={createForm.label}\n onChange={(e) =>\n setCreateForm((f) => ({ ...f, label: e.target.value }))\n }\n placeholder=\"Ex: Google Calendar - Clínica São Paulo\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Credencial *\n </label>\n <Input\n type=\"password\"\n value={createForm.credentials_encrypted}\n onChange={(e) =>\n setCreateForm((f) => ({\n ...f,\n credentials_encrypted: e.target.value,\n }))\n }\n placeholder=\"Credencial encriptada\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Data de Expiração (opcional)\n </label>\n <Input\n type=\"date\"\n value={createForm.expires_at}\n onChange={(e) =>\n setCreateForm((f) => ({ ...f, expires_at: e.target.value }))\n }\n />\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setShowCreateDialog(false)}\n >\n Cancelar\n </Button>\n <Button\n onClick={handleCreate}\n disabled={\n !createForm.id_tool ||\n !createForm.label.trim() ||\n !createForm.credentials_encrypted.trim() ||\n createMutation.isPending\n }\n >\n Criar\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Edit Dialog */}\n <Dialog\n open={!!editTarget}\n onOpenChange={(open) => !open && setEditTarget(null)}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Editar Credencial</DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Ferramenta *\n </label>\n <Select\n value={editForm.id_tool}\n onValueChange={(val) =>\n setEditForm((f) => ({ ...f, id_tool: val }))\n }\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Selecione a ferramenta\" />\n </SelectTrigger>\n <SelectContent>\n {tools.map((tool) => (\n <SelectItem key={tool.id} value={String(tool.id)}>\n {tool.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Label\n </label>\n <Input\n value={editForm.label}\n onChange={(e) =>\n setEditForm((f) => ({ ...f, label: e.target.value }))\n }\n placeholder=\"Label da credencial\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Nova Credencial (vazio = manter atual)\n </label>\n <Input\n type=\"password\"\n value={editForm.credentials_encrypted}\n onChange={(e) =>\n setEditForm((f) => ({\n ...f,\n credentials_encrypted: e.target.value,\n }))\n }\n placeholder=\"Nova credencial\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">\n Data de Expiração\n </label>\n <Input\n type=\"date\"\n value={editForm.expires_at}\n onChange={(e) =>\n setEditForm((f) => ({ ...f, expires_at: e.target.value }))\n }\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium\">Status</label>\n <Select\n value={editForm.status || undefined}\n onValueChange={(val) =>\n setEditForm((f) => ({\n ...f,\n status: val as \"active\" | \"expired\",\n }))\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"active\">Ativo</SelectItem>\n <SelectItem value=\"expired\">Expirado</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setEditTarget(null)}>\n Cancelar\n </Button>\n <Button\n onClick={handleSaveEdit}\n disabled={updateMutation.isPending}\n >\n Salvar\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete confirmation */}\n <AlertDialog\n open={!!removeTarget}\n onOpenChange={(open) => !open && setRemoveTarget(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remover credencial?</AlertDialogTitle>\n <AlertDialogDescription>\n A credencial será removida permanentemente.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancelar</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleRemove}\n disabled={deleteMutation.isPending}\n >\n Remover\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { AgentsTable } from \"../components/agents/agents-table\";\nimport { AgentFormDialog } from \"../components/agents/agent-form-dialog\";\nimport { Button } from \"@greatapps/greatauth-ui/ui\";\nimport { Plus } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\n\nexport interface AgentsPageProps {\n config: GagentsHookConfig;\n onNavigateToAgent?: (agentId: number) => void;\n title?: string;\n subtitle?: string;\n}\n\nexport function AgentsPage({\n config,\n onNavigateToAgent,\n title = \"Agentes AI\",\n subtitle = \"Gerencie seus agentes de atendimento inteligente\",\n}: AgentsPageProps) {\n const [createOpen, setCreateOpen] = useState(false);\n\n return (\n <div className=\"flex flex-col gap-4 p-4 md:p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold\">{title}</h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <Button onClick={() => setCreateOpen(true)} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Novo Agente\n </Button>\n </div>\n\n <AgentsTable config={config} onNavigateToAgent={onNavigateToAgent} />\n\n <AgentFormDialog\n config={config}\n open={createOpen}\n onOpenChange={setCreateOpen}\n />\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useAgent } from \"../hooks\";\nimport { AgentTabs } from \"../components/agents/agent-tabs\";\nimport { AgentEditForm } from \"../components/agents/agent-edit-form\";\nimport { Badge, Button, Skeleton } from \"@greatapps/greatauth-ui/ui\";\nimport { EntityAvatar } from \"@greatapps/greatauth-ui\";\nimport { ArrowLeft, Pencil } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\n\nexport interface AgentDetailPageProps {\n config: GagentsHookConfig;\n agentId: number;\n onBack?: () => void;\n renderChatLink?: (inboxId: number) => React.ReactNode;\n}\n\nexport function AgentDetailPage({\n config,\n agentId,\n onBack,\n renderChatLink,\n}: AgentDetailPageProps) {\n const { data: agent, isLoading } = useAgent(config, agentId);\n const [editOpen, setEditOpen] = useState(false);\n\n if (isLoading) {\n return (\n <div className=\"flex flex-col gap-4 p-4\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-8 w-48\" />\n <Skeleton className=\"h-10 w-full\" />\n <Skeleton className=\"h-64 w-full\" />\n </div>\n );\n }\n\n if (!agent) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-2 p-8\">\n <p className=\"text-muted-foreground\">Agente não encontrado</p>\n {onBack && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onBack}>\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n Voltar para agentes\n </Button>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-6 p-4\">\n <div className=\"rounded-lg border p-4 md:p-6\">\n <div className=\"flex flex-col gap-4 md:flex-row md:items-start md:gap-6\">\n <div className=\"flex items-start gap-3 flex-1\">\n {onBack && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 mt-1\"\n onClick={onBack}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n )}\n\n <EntityAvatar photo={agent.photo} name={agent.title} size=\"xl\" />\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h1 className=\"text-xl font-semibold\">{agent.title}</h1>\n <Badge\n variant={agent.active ? \"default\" : \"destructive\"}\n className=\"text-xs\"\n >\n {agent.active ? \"Ativo\" : \"Inativo\"}\n </Badge>\n </div>\n </div>\n </div>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"shrink-0 self-start\"\n onClick={() => setEditOpen(true)}\n >\n <Pencil className=\"mr-2 h-4 w-4\" />\n Editar\n </Button>\n </div>\n </div>\n\n <AgentTabs\n agent={agent}\n config={config}\n renderChatLink={renderChatLink}\n />\n\n {editOpen && (\n <AgentEditForm\n agent={agent}\n config={config}\n idAccount={config.accountId}\n open={editOpen}\n onOpenChange={setEditOpen}\n />\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { ToolsTable } from \"../components/tools/tools-table\";\nimport { ToolFormDialog } from \"../components/tools/tool-form-dialog\";\nimport { Button } from \"@greatapps/greatauth-ui/ui\";\nimport { Plus } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\nimport type { Tool } from \"../types\";\n\nexport interface ToolsPageProps {\n config: GagentsHookConfig;\n title?: string;\n subtitle?: string;\n}\n\nexport function ToolsPage({\n config,\n title = \"Ferramentas\",\n subtitle = \"Gerencie as ferramentas disponíveis para seus agentes\",\n}: ToolsPageProps) {\n const [createOpen, setCreateOpen] = useState(false);\n const [editTool, setEditTool] = useState<Tool | undefined>(undefined);\n\n return (\n <div className=\"flex flex-col gap-4 p-4 md:p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold\">{title}</h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <Button onClick={() => setCreateOpen(true)} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Nova Ferramenta\n </Button>\n </div>\n\n <ToolsTable config={config} onEdit={(tool) => setEditTool(tool)} />\n\n <ToolFormDialog\n config={config}\n open={createOpen}\n onOpenChange={setCreateOpen}\n />\n\n <ToolFormDialog\n config={config}\n open={!!editTool}\n onOpenChange={(open) => !open && setEditTool(undefined)}\n tool={editTool}\n />\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useToolCredentials } from \"../hooks\";\nimport { ToolCredentialsForm } from \"../components/tools/tool-credentials-form\";\nimport { Button } from \"@greatapps/greatauth-ui/ui\";\nimport { Plus } from \"lucide-react\";\nimport type { GagentsHookConfig } from \"../hooks/types\";\n\nexport interface CredentialsPageProps {\n config: GagentsHookConfig;\n gagentsApiUrl: string;\n title?: string;\n subtitle?: string;\n}\n\nexport function CredentialsPage({\n config,\n gagentsApiUrl,\n title = \"Credenciais\",\n subtitle = \"Gerencie as credenciais de autenticação das ferramentas\",\n}: CredentialsPageProps) {\n const { data: credentialsData, isLoading: credentialsLoading } =\n useToolCredentials(config);\n const [createOpen, setCreateOpen] = useState(false);\n\n const credentials = credentialsData?.data || [];\n\n return (\n <div className=\"flex flex-col gap-4 p-4 md:p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold\">{title}</h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <Button onClick={() => setCreateOpen(true)} size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Nova Credencial\n </Button>\n </div>\n\n <ToolCredentialsForm\n config={config}\n gagentsApiUrl={gagentsApiUrl}\n credentials={credentials}\n isLoading={credentialsLoading}\n createOpen={createOpen}\n onCreateOpenChange={setCreateOpen}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useQuery","useQuery","useMutation","useQueryClient","useQuery","useQueryClient","useMutation","useQuery","useQuery","useMemo","useMemo","useState","Button","Input","toast","jsx","jsxs","useState","useEffect","useState","Button","Input","Label","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","Loader2","toast","jsx","jsxs","useState","useEffect","useState","Switch","Badge","Button","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","Input","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","Label","Trash2","toast","jsx","jsxs","useState","useState","Input","Button","Switch","Skeleton","Textarea","Label","Badge","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","React","jsx","Trash2","Pencil","Plus","toast","jsx","jsxs","useState","Skeleton","Button","Badge","Switch","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Input","Textarea","DialogFooter","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","useState","useCallback","useEffect","Button","Input","Skeleton","Badge","Loader2","toast","jsx","jsxs","useState","useCallback","useEffect","useState","Skeleton","Badge","Skeleton","Button","jsx","jsxs","jsx","jsxs","useState","Skeleton","Badge","jsx","Wrench","Target","FileText","MessageCircle","jsx","jsxs","useMemo","useState","DataTable","Input","Badge","Tooltip","TooltipTrigger","TooltipContent","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","Button","Pencil","Trash2","Search","format","ptBR","toast","Fragment","jsx","jsxs","useColumns","useState","useMemo","useState","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","Button","Input","Textarea","Label","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","Loader2","toast","jsx","jsxs","slugify","useState","useMemo","useState","DataTable","Input","Button","Badge","Tooltip","TooltipTrigger","TooltipContent","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogTitle","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","Trash2","Pencil","Search","format","ptBR","toast","jsx","jsxs","formatDate","useColumns","useState","useMemo","useState","Button","Plus","jsx","jsxs","useState","useState","Badge","Button","Skeleton","EntityAvatar","Pencil","jsx","jsxs","useState","useState","Button","Plus","jsx","jsxs","useState","useState","Button","Plus","jsx","jsxs","useState"]}
|