@datatechsolutions/ui 2.11.80 → 2.11.82

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.
Files changed (57) hide show
  1. package/dist/astrlabe/contracts.d.mts +24 -1
  2. package/dist/astrlabe/contracts.d.ts +24 -1
  3. package/dist/astrlabe/index.d.mts +25 -84
  4. package/dist/astrlabe/index.d.ts +25 -84
  5. package/dist/astrlabe/index.js +175 -4570
  6. package/dist/astrlabe/index.js.map +1 -1
  7. package/dist/astrlabe/index.mjs +3 -4535
  8. package/dist/astrlabe/index.mjs.map +1 -1
  9. package/dist/astrlabe/workflow-canvas.d.mts +69 -5
  10. package/dist/astrlabe/workflow-canvas.d.ts +69 -5
  11. package/dist/chunk-6PBTB5ZX.js +165 -0
  12. package/dist/chunk-6PBTB5ZX.js.map +1 -0
  13. package/dist/chunk-HAZP5J67.mjs +4781 -0
  14. package/dist/chunk-HAZP5J67.mjs.map +1 -0
  15. package/dist/chunk-HZ4LOVHM.js +46 -0
  16. package/dist/chunk-HZ4LOVHM.js.map +1 -0
  17. package/dist/chunk-K4QJV3GC.js +4825 -0
  18. package/dist/chunk-K4QJV3GC.js.map +1 -0
  19. package/dist/chunk-UHHPBREK.mjs +135 -0
  20. package/dist/chunk-UHHPBREK.mjs.map +1 -0
  21. package/dist/chunk-ZJPNP2YW.mjs +44 -0
  22. package/dist/chunk-ZJPNP2YW.mjs.map +1 -0
  23. package/dist/{workflow-canvas-NSxfr5dy.d.ts → index-AioB90qq.d.mts} +2 -67
  24. package/dist/{workflow-canvas-D4928AfA.d.mts → index-D5ai0cGZ.d.ts} +2 -67
  25. package/dist/platform/index.d.mts +41 -0
  26. package/dist/platform/index.d.ts +41 -0
  27. package/dist/platform/index.js +237 -0
  28. package/dist/platform/index.js.map +1 -0
  29. package/dist/platform/index.mjs +109 -0
  30. package/dist/platform/index.mjs.map +1 -0
  31. package/dist/platform/pages/index.d.mts +272 -0
  32. package/dist/platform/pages/index.d.ts +272 -0
  33. package/dist/platform/pages/index.js +1793 -0
  34. package/dist/platform/pages/index.js.map +1 -0
  35. package/dist/platform/pages/index.mjs +1777 -0
  36. package/dist/platform/pages/index.mjs.map +1 -0
  37. package/dist/platform/rbac.d.mts +41 -0
  38. package/dist/platform/rbac.d.ts +41 -0
  39. package/dist/platform/rbac.js +13 -0
  40. package/dist/platform/rbac.js.map +1 -0
  41. package/dist/platform/rbac.mjs +4 -0
  42. package/dist/platform/rbac.mjs.map +1 -0
  43. package/dist/platform/utils/index.d.mts +32 -0
  44. package/dist/platform/utils/index.d.ts +32 -0
  45. package/dist/platform/utils/index.js +131 -0
  46. package/dist/platform/utils/index.js.map +1 -0
  47. package/dist/platform/utils/index.mjs +119 -0
  48. package/dist/platform/utils/index.mjs.map +1 -0
  49. package/dist/platform/windsock-admin-client.d.mts +57 -0
  50. package/dist/platform/windsock-admin-client.d.ts +57 -0
  51. package/dist/platform/windsock-admin-client.js +125 -0
  52. package/dist/platform/windsock-admin-client.js.map +1 -0
  53. package/dist/platform/windsock-admin-client.mjs +4 -0
  54. package/dist/platform/windsock-admin-client.mjs.map +1 -0
  55. package/dist/rule-form-F5jBOeqk.d.mts +79 -0
  56. package/dist/rule-form-F5jBOeqk.d.ts +79 -0
  57. package/package.json +28 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform/pages/users-page-view.tsx","../../../src/platform/pages/agents-models-page-view.tsx","../../../src/platform/pages/agents-config-page-view.tsx","../../../src/platform/pages/agents-prompts-page-view.tsx","../../../src/platform/pages/agents-tool-definitions-page-view.tsx","../../../src/platform/pages/rules-page-view.tsx","../../../src/platform/pages/datasource-modal.tsx","../../../src/platform/pages/datasources-page-view.tsx"],"names":["useState","jsxs","jsx","HeroSection","UserGroupIcon","CreateActionButton","EntityCard","InlineForm","FormSelect","Button","GlassModal","FormGrid","FormInput","CubeTransparentIcon","PageLoadingState","PageEmptyState","Badge","ManagementPageLayout","CpuChipIcon","FormTextarea","Fragment","useMemo","ChatBubbleLeftEllipsisIcon","WrenchScrewdriverIcon","AdjustmentsHorizontalIcon","defaultRuleForm","RuleForm","CircleStackIcon","ServerStackIcon","CloudIcon","ClockIcon","ShareIcon","KeyIcon","MagnifyingGlassIcon","ArrowLeftIcon","CheckCircleIcon","XCircleIcon"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\n} from '@ui/index'\nimport type { UserRole, ManagedUser, UsersPageViewProps } from '@datatechsolutions/shared-domain/common'\n\nconst ROLE_OPTIONS: Array<{ value: UserRole; label: string }> = [\n { value: 'admin', label: 'Admin' },\n { value: 'manager', label: 'Manager' },\n { value: 'analyst', label: 'Analyst' },\n { value: 'viewer', label: 'Viewer' },\n]\n\nexport function UsersPageView({ labels, users, onCreateUser, onUpdateRole }: UsersPageViewProps) {\n const [createOpen, setCreateOpen] = useState(false)\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<UserGroupIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.list}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {users.map((user: ManagedUser) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <UserGroupIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${\n user.active\n ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300'\n : 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300'\n }`}\n >\n {user.active ? labels.statusActive : labels.statusInactive}\n </span>\n )}\n footer={(\n <form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n onUpdateRole({ email: user.email, role })\n }}\n >\n <InlineForm>\n <FormSelect name=\"role\" options={ROLE_OPTIONS} defaultValue={user.role} />\n <Button type=\"submit\" outline size=\"sm\">{labels.save}</Button>\n </InlineForm>\n </form>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.create}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.list}\n submitLabel={labels.add}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!name || !email) return\n onCreateUser({ name, email, role })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.userNamePlaceholder} required />\n <FormInput name=\"email\" label={labels.email} placeholder={labels.userEmailPlaceholder} required type=\"email\" />\n <FormSelect name=\"role\" label={labels.role} options={ROLE_OPTIONS} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import {\n Badge,\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport { CubeTransparentIcon } from '@heroicons/react/24/outline'\nimport type { AgentModel } from '../../astrlabe/contracts'\n\nexport type AgentsModelsLabels = {\n title: string\n subtitle: string\n provider: string\n enabled: string\n disabled: string\n empty: string\n}\n\ntype Props = {\n labels: AgentsModelsLabels\n models: AgentModel[]\n loading: boolean\n}\n\nexport function AgentsModelsPageView({ labels, models, loading }: Props) {\n const hero = (\n <HeroSection\n icon={<CubeTransparentIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-700\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : models.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {models.map((model) => (\n <EntityCard\n key={model.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <CubeTransparentIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={model.name}\n subtitle={`${labels.provider}: ${model.provider}`}\n status={(\n <Badge color={model.enabled ? 'emerald' : 'zinc'}>\n {model.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n />\n ))}\n </div>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import { useState, type FormEvent } from 'react'\nimport { CpuChipIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport type { AgentModel } from '../../astrlabe/contracts'\nimport type { AgentWithPrompts } from '../../astrlabe'\n\nexport type AgentConfigFormInput = {\n agentId?: string\n name: string\n modelId: string\n systemPrompt: string\n maxTokens: number\n temperature: number\n outputSchema?: string\n}\n\nexport type AgentsConfigLabels = {\n title: string\n subtitle: string\n addAgent: string\n createTitle: string\n editTitle: string\n name: string\n model: string\n systemPrompt: string\n maxTokens: number | string\n temperature: string\n outputSchema: string\n outputSchemaPlaceholder: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n activeVersion: string\n empty: string\n}\n\ntype Props = {\n labels: AgentsConfigLabels\n agents: AgentWithPrompts[]\n models: AgentModel[]\n loading: boolean\n onCreate: (input: AgentConfigFormInput) => void\n onUpdate: (agentId: string, input: AgentConfigFormInput) => void\n onDelete: (agent: AgentWithPrompts) => void\n}\n\nexport function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }: Props) {\n const [editing, setEditing] = useState<AgentWithPrompts | null>(null)\n const [createOpen, setCreateOpen] = useState(false)\n\n const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }))\n\n const hero = (\n <HeroSection\n icon={<CpuChipIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addAgent}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addAgent}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : agents.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {agents.map((agent) => {\n const modelRecord = models.find((model) => model.id === String(agent.modelId ?? ''))\n return (\n <EntityCard\n key={String(agent.agentId ?? agent.id ?? agent.name)}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <CpuChipIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={String(agent.name ?? '')}\n subtitle={String(modelRecord?.name ?? agent.modelId ?? '')}\n status={agent.activePromptVersion > 0 ? (\n <Badge color=\"emerald\">v{agent.activePromptVersion}</Badge>\n ) : null}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(agent)}>\n {labels.edit}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(agent)\n }}\n >\n {labels.delete}\n </Button>\n </div>\n )}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {labels.activeVersion}: {agent.activePromptVersion} · Prompts: {agent.promptCount}\n </p>\n </EntityCard>\n )\n })}\n </div>\n )\n\n const renderForm = (initial: Partial<AgentConfigFormInput> & { title: string }, onSubmit: (input: AgentConfigFormInput) => void) => (\n <GlassModal\n open\n onClose={() => { setEditing(null); setCreateOpen(false) }}\n title={initial.title}\n maxWidth=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n onSubmit({\n agentId: initial.agentId,\n name: String(form.get('name') ?? '').trim(),\n modelId: String(form.get('modelId') ?? ''),\n systemPrompt: String(form.get('systemPrompt') ?? '').trim(),\n maxTokens: Number(form.get('maxTokens') ?? 2048),\n temperature: Number(form.get('temperature') ?? 0.2),\n outputSchema: String(form.get('outputSchema') ?? '').trim() || undefined,\n })\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} defaultValue={initial.name ?? ''} required />\n <FormSelect name=\"modelId\" label={labels.model} options={modelOptions} defaultValue={initial.modelId ?? modelOptions[0]?.value ?? ''} required />\n <FormInput name=\"maxTokens\" label={String(labels.maxTokens)} type=\"number\" defaultValue={String(initial.maxTokens ?? 2048)} />\n <FormInput name=\"temperature\" label={labels.temperature} type=\"number\" step={0.1} min={0} max={2} defaultValue={String(initial.temperature ?? 0.2)} />\n <FormTextarea name=\"systemPrompt\" label={labels.systemPrompt} defaultValue={initial.systemPrompt ?? ''} rows={4} />\n <FormTextarea name=\"outputSchema\" label={labels.outputSchema} placeholder={labels.outputSchemaPlaceholder} defaultValue={initial.outputSchema ?? ''} rows={4} />\n </FormGrid>\n </GlassModal>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && renderForm({ title: labels.createTitle }, (input) => {\n onCreate(input)\n setCreateOpen(false)\n })}\n {editing && renderForm(\n {\n title: labels.editTitle,\n agentId: String(editing.agentId ?? editing.id ?? ''),\n name: String(editing.name ?? ''),\n modelId: String(editing.modelId ?? ''),\n systemPrompt: String((editing as Record<string, unknown>).systemPrompt ?? ''),\n maxTokens: Number(editing.maxTokens ?? 2048),\n temperature: Number((editing as Record<string, unknown>).temperature ?? 0.2),\n outputSchema: String((editing as Record<string, unknown>).outputSchema ?? ''),\n },\n (input) => {\n onUpdate(String(editing.agentId ?? editing.id ?? ''), input)\n setEditing(null)\n },\n )}\n </>\n )\n}\n","import { useMemo, useState, type FormEvent } from 'react'\nimport { ChatBubbleLeftEllipsisIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport type { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow'\nimport type { AgentWithPrompts } from '../../astrlabe'\n\nexport type PromptFormInput = {\n agentId: string\n locale: string\n prompt: string\n systemPrompt?: string\n userTemplate?: string\n isActive: boolean\n reason?: string\n}\n\nexport type AgentsPromptsLabels = {\n title: string\n subtitle: string\n addPrompt: string\n createTitle: string\n editTitle: string\n agent: string\n locale: string\n version: string\n isActive: string\n prompt: string\n systemPrompt: string\n userTemplate: string\n reason: string\n save: string\n delete: string\n activate: string\n deleteConfirm: string\n empty: string\n}\n\ntype Props = {\n labels: AgentsPromptsLabels\n agents: AgentWithPrompts[]\n prompts: AgentPrompt[]\n loading: boolean\n onCreate: (input: PromptFormInput) => void\n onActivate: (prompt: AgentPrompt) => void\n onDelete: (prompt: AgentPrompt) => void\n}\n\nconst LOCALE_OPTIONS = [\n { value: 'en', label: 'English' },\n { value: 'pt-BR', label: 'Português (Brasil)' },\n { value: 'es', label: 'Español' },\n { value: 'fr', label: 'Français' },\n { value: 'de', label: 'Deutsch' },\n { value: 'it', label: 'Italiano' },\n]\n\nexport function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onActivate, onDelete }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n\n const agentOptions = useMemo(\n () => agents.map((agent) => ({\n value: String(agent.agentId ?? agent.id ?? ''),\n label: String(agent.name ?? agent.agentId ?? agent.id ?? ''),\n })),\n [agents],\n )\n\n const agentNameById = useMemo(() => {\n const map = new Map<string, string>()\n for (const agent of agents) {\n const id = String(agent.agentId ?? agent.id ?? '')\n if (id) map.set(id, String(agent.name ?? id))\n }\n return map\n }, [agents])\n\n const hero = (\n <HeroSection\n icon={<ChatBubbleLeftEllipsisIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-blue-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addPrompt}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addPrompt}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : prompts.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {prompts.map((prompt) => {\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`\n return (\n <EntityCard\n key={key}\n accentGradient=\"from-sky-500 to-blue-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400\">\n <ChatBubbleLeftEllipsisIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={agentName}\n subtitle={`${prompt.locale} · v${prompt.version}`}\n status={prompt.isActive ? <Badge color=\"emerald\">{labels.isActive}</Badge> : null}\n footer={(\n <div className=\"flex gap-2\">\n {!prompt.isActive && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onActivate(prompt)}>{labels.activate}</Button>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(prompt)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {prompt.prompt && (\n <p className=\"mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400\">{prompt.prompt}</p>\n )}\n </EntityCard>\n )\n })}\n </div>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.createTitle}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n const systemPrompt = String(form.get('systemPrompt') ?? '').trim()\n const userTemplate = String(form.get('userTemplate') ?? '').trim()\n const reason = String(form.get('reason') ?? '').trim()\n onCreate({\n agentId: String(form.get('agentId') ?? '').trim(),\n locale: String(form.get('locale') ?? 'en').trim(),\n prompt: String(form.get('prompt') ?? '').trim(),\n systemPrompt: systemPrompt || undefined,\n userTemplate: userTemplate || undefined,\n reason: reason || undefined,\n isActive: String(form.get('isActive') ?? 'true') === 'true',\n })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormSelect name=\"agentId\" label={labels.agent} options={agentOptions} required />\n <FormSelect name=\"locale\" label={labels.locale} options={LOCALE_OPTIONS} defaultValue=\"en\" />\n <FormSelect\n name=\"isActive\"\n label={labels.isActive}\n options={[{ value: 'true', label: labels.isActive }, { value: 'false', label: labels.isActive }]}\n defaultValue=\"true\"\n />\n <FormInput name=\"reason\" label={labels.reason} />\n <FormTextarea name=\"systemPrompt\" label={labels.systemPrompt} rows={3} />\n <FormTextarea name=\"userTemplate\" label={labels.userTemplate} rows={3} />\n <FormTextarea name=\"prompt\" label={labels.prompt} rows={6} required />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n","import { useState } from 'react'\nimport { WrenchScrewdriverIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport type { AgentTool } from '../../astrlabe/contracts'\n\nexport const TOOL_TYPES = [\n 'http',\n 'function',\n 'database_query',\n 'code_execution',\n 'api_call',\n] as const\n\nexport type ToolType = (typeof TOOL_TYPES)[number]\n\nexport type ToolParameter = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n description: string\n required: boolean\n}\n\n/**\n * Canonical form payload the page emits. The page wrapper turns this\n * into the backend POST/PATCH bodies — parameters go through\n * `parametersToJsonSchema` to produce `inputSchema`, and `handlerConfig`\n * stays as-is.\n */\nexport type ToolDefinitionFormInput = {\n agentToolId?: string\n name: string\n description?: string\n toolType: ToolType\n parameters: ToolParameter[]\n handlerConfig: Record<string, unknown>\n enabled: boolean\n icon?: string\n}\n\nexport type AgentsToolDefinitionsLabels = {\n title: string\n subtitle: string\n addTool: string\n createTitle: string\n editTitle: string\n name: string\n description: string\n category: string\n enabled: string\n disabled: string\n icon: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n empty: string\n}\n\nconst TOOL_TYPE_OPTIONS: Array<{ value: ToolType; label: string; description: string }> = [\n { value: 'http', label: 'HTTP', description: 'Call an HTTP endpoint with templated URL/body.' },\n { value: 'function', label: 'Function', description: 'Invoke a pre-registered server-side implementation.' },\n { value: 'database_query', label: 'Database query', description: 'Run a parameterized SELECT against a datasource.' },\n { value: 'code_execution', label: 'Code execution', description: 'Run sandboxed code (JS/Python) — experimental.' },\n { value: 'api_call', label: 'API call', description: 'Call a third-party API via stored credentials.' },\n]\n\nconst PARAMETER_TYPE_OPTIONS: Array<{ value: ToolParameter['type']; label: string }> = [\n { value: 'string', label: 'string' },\n { value: 'number', label: 'number' },\n { value: 'boolean', label: 'boolean' },\n { value: 'array', label: 'array' },\n { value: 'object', label: 'object' },\n]\n\ntype Props = {\n labels: AgentsToolDefinitionsLabels\n tools: AgentTool[]\n loading: boolean\n onCreate: (input: ToolDefinitionFormInput) => void\n onUpdate: (toolId: string, input: ToolDefinitionFormInput) => void\n onDelete: (tool: AgentTool) => void\n}\n\nexport function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpdate, onDelete }: Props) {\n const [editing, setEditing] = useState<AgentTool | null>(null)\n const [createOpen, setCreateOpen] = useState(false)\n\n const hero = (\n <HeroSection\n icon={<WrenchScrewdriverIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-amber-500 to-orange-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addTool}\n onClick={() => setCreateOpen(true)}\n accent=\"amber\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addTool}\n onClick={() => setCreateOpen(true)}\n accent=\"amber\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : tools.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {tools.map((tool) => (\n <EntityCard\n key={tool.agentToolId}\n accentGradient=\"from-amber-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400\">\n <WrenchScrewdriverIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={tool.name}\n subtitle={toolTypeLabel(tool)}\n status={(\n <Badge color={tool.enabled ? 'emerald' : 'zinc'}>\n {tool.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(tool)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(tool)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {tool.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{tool.description}</p>\n )}\n </EntityCard>\n ))}\n </div>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <ToolEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultForm()}\n onClose={() => setCreateOpen(false)}\n onSubmit={(input) => {\n onCreate(input)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ToolEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={toolToForm(editing)}\n onClose={() => setEditing(null)}\n onSubmit={(input) => {\n onUpdate(editing.agentToolId, input)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ──────────────────────────────────────────────────\n\nfunction ToolEditor({\n title,\n saveLabel,\n initial,\n onSubmit,\n onClose,\n}: {\n title: string\n saveLabel: string\n initial: ToolDefinitionFormInput\n onSubmit: (input: ToolDefinitionFormInput) => void\n onClose: () => void\n}) {\n const [value, setValue] = useState<ToolDefinitionFormInput>(initial)\n const [error, setError] = useState<string | null>(null)\n\n const handleSubmit = () => {\n if (!value.name.trim()) {\n setError('Name is required')\n return\n }\n // Validate parameter names — JSON Schema keys must not collide.\n const names = value.parameters.map((p) => p.name.trim())\n if (names.some((n) => n.length === 0)) {\n setError('Every parameter must have a name')\n return\n }\n if (new Set(names).size !== names.length) {\n setError('Parameter names must be unique')\n return\n }\n onSubmit(value)\n }\n\n const update = <K extends keyof ToolDefinitionFormInput>(key: K, next: ToolDefinitionFormInput[K]) => {\n setValue((v) => ({ ...v, [key]: next }))\n }\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"3xl\"\n showFormFooter\n submitLabel={saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n >\n <div className=\"space-y-5\">\n <FormGrid>\n <FormInput\n label=\"Name\"\n required\n value={value.name}\n onValueChange={(name) => update('name', name)}\n placeholder=\"get_station_prices\"\n />\n <FormSelect\n label=\"Tool type\"\n value={value.toolType}\n options={TOOL_TYPE_OPTIONS.map((o) => ({ value: o.value, label: o.label }))}\n onValueChange={(v) => update('toolType', v as ToolType)}\n hint={TOOL_TYPE_OPTIONS.find((o) => o.value === value.toolType)?.description}\n />\n <FormSelect\n label=\"Enabled\"\n value={value.enabled ? 'true' : 'false'}\n options={[{ value: 'true', label: 'Enabled' }, { value: 'false', label: 'Disabled' }]}\n onValueChange={(v) => update('enabled', v === 'true')}\n />\n <FormInput\n label=\"Icon (optional)\"\n value={value.icon ?? ''}\n onValueChange={(icon) => update('icon', icon)}\n placeholder=\"heroicons:wrench-screwdriver\"\n />\n </FormGrid>\n\n <FormTextarea\n label=\"Description\"\n rows={2}\n value={value.description ?? ''}\n onValueChange={(description) => update('description', description)}\n placeholder=\"One-sentence summary shown to the agent when it picks tools.\"\n />\n\n <ParametersEditor\n parameters={value.parameters}\n onChange={(parameters) => update('parameters', parameters)}\n />\n\n <HandlerConfigEditor\n toolType={value.toolType}\n config={value.handlerConfig}\n onChange={(handlerConfig) => update('handlerConfig', handlerConfig)}\n />\n\n {error && (\n <p className=\"rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300\">\n {error}\n </p>\n )}\n </div>\n </GlassModal>\n )\n}\n\n// ── Parameters editor — produces JSON Schema on save ──\n\nfunction ParametersEditor({\n parameters,\n onChange,\n}: {\n parameters: ToolParameter[]\n onChange: (next: ToolParameter[]) => void\n}) {\n const update = (index: number, patch: Partial<ToolParameter>) => {\n onChange(parameters.map((p, i) => (i === index ? { ...p, ...patch } : p)))\n }\n const remove = (index: number) => {\n onChange(parameters.filter((_, i) => i !== index))\n }\n const add = () => {\n onChange([...parameters, { name: '', type: 'string', description: '', required: false }])\n }\n\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Parameters</h3>\n <p className=\"mb-3 text-xs text-slate-500 dark:text-slate-400\">\n The agent gets these as a JSON Schema. Any parameter marked required must be supplied for the LLM to call the tool.\n </p>\n <div className=\"space-y-2\">\n {parameters.map((param, index) => (\n <div key={index} className=\"grid grid-cols-[1fr_160px_1fr_110px_auto] items-end gap-2\">\n <FormInput\n label=\"Name\"\n value={param.name}\n onValueChange={(name) => update(index, { name })}\n placeholder=\"station_id\"\n />\n <FormSelect\n label=\"Type\"\n value={param.type}\n options={PARAMETER_TYPE_OPTIONS}\n onValueChange={(t) => update(index, { type: t as ToolParameter['type'] })}\n />\n <FormInput\n label=\"Description\"\n value={param.description}\n onValueChange={(description) => update(index, { description })}\n />\n <label className=\"flex items-center gap-2 pb-2 text-xs text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n checked={param.required}\n onChange={(event) => update(index, { required: event.target.checked })}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n Required\n </label>\n <Button type=\"button\" plain onClick={() => remove(index)}>Remove</Button>\n </div>\n ))}\n <Button type=\"button\" outline onClick={add}>+ Add parameter</Button>\n </div>\n </section>\n )\n}\n\n// ── Handler config editor — per-tool-type UI ──\n\nfunction HandlerConfigEditor({\n toolType,\n config,\n onChange,\n}: {\n toolType: ToolType\n config: Record<string, unknown>\n onChange: (next: Record<string, unknown>) => void\n}) {\n const set = (key: string, value: unknown) => onChange({ ...config, [key]: value })\n\n if (toolType === 'http') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">HTTP handler</h3>\n <FormGrid>\n <FormSelect\n label=\"Method\"\n value={stringProp(config, 'method', 'GET')}\n options={['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((m) => ({ value: m, label: m }))}\n onValueChange={(m) => set('method', m)}\n />\n <FormInput\n label=\"URL template\"\n value={stringProp(config, 'url')}\n onValueChange={(u) => set('url', u)}\n placeholder=\"https://api.example.com/stations/{{ station_id }}\"\n />\n </FormGrid>\n <FormTextarea\n label=\"Headers (JSON)\"\n rows={3}\n value={jsonProp(config, 'headers')}\n onValueChange={(raw) => setFromJson(set, 'headers', raw)}\n placeholder='{ \"Authorization\": \"Bearer {{ apiKey }}\" }'\n />\n <FormTextarea\n label=\"Body template\"\n rows={3}\n value={stringProp(config, 'bodyTemplate')}\n onValueChange={(b) => set('bodyTemplate', b)}\n placeholder='{\"query\": \"{{ search }}\"}'\n />\n </section>\n )\n }\n\n if (toolType === 'function') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Function handler</h3>\n <FormInput\n label=\"Implementation key\"\n value={stringProp(config, 'implementationKey')}\n onValueChange={(k) => set('implementationKey', k)}\n placeholder=\"fuel.get_station_prices\"\n hint=\"Must match a pre-registered handler on the server side.\"\n />\n </section>\n )\n }\n\n if (toolType === 'database_query') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Database query handler</h3>\n <FormGrid>\n <FormInput\n label=\"Datasource ID\"\n value={stringProp(config, 'datasourceId')}\n onValueChange={(v) => set('datasourceId', v)}\n placeholder=\"UUID from /datasources\"\n />\n <FormInput\n label=\"Max rows\"\n type=\"number\"\n value={numberProp(config, 'maxRows', 100)}\n onValueChange={(v) => set('maxRows', Number(v) || 100)}\n />\n </FormGrid>\n <FormTextarea\n label=\"Query template\"\n rows={4}\n value={stringProp(config, 'queryTemplate')}\n onValueChange={(v) => set('queryTemplate', v)}\n placeholder={'SELECT id, current_price FROM current_prices WHERE station_id = {{ station_id }}'}\n />\n </section>\n )\n }\n\n if (toolType === 'code_execution') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Code execution handler</h3>\n <p className=\"mb-2 text-xs text-amber-600 dark:text-amber-400\">\n Experimental — sandbox is not yet enforced. Only enable for trusted tools.\n </p>\n <FormSelect\n label=\"Language\"\n value={stringProp(config, 'language', 'javascript')}\n options={[\n { value: 'javascript', label: 'JavaScript' },\n { value: 'python', label: 'Python' },\n ]}\n onValueChange={(v) => set('language', v)}\n />\n <FormTextarea\n label=\"Code\"\n rows={6}\n value={stringProp(config, 'code')}\n onValueChange={(v) => set('code', v)}\n placeholder={'// return value becomes the tool output\\nreturn { price: inputs.x * 1.08 }'}\n />\n </section>\n )\n }\n\n // api_call — generic: url + auth method\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">API call handler</h3>\n <FormGrid>\n <FormInput\n label=\"URL\"\n value={stringProp(config, 'url')}\n onValueChange={(v) => set('url', v)}\n />\n <FormSelect\n label=\"Auth\"\n value={stringProp(config, 'authType', 'bearer')}\n options={[\n { value: 'none', label: 'None' },\n { value: 'bearer', label: 'Bearer token' },\n { value: 'api_key', label: 'API key header' },\n { value: 'basic', label: 'Basic auth' },\n ]}\n onValueChange={(v) => set('authType', v)}\n />\n <FormInput\n label=\"Credential secret id\"\n value={stringProp(config, 'credentialRef')}\n onValueChange={(v) => set('credentialRef', v)}\n placeholder=\"UUID from vault\"\n hint=\"Leave blank if Auth is None.\"\n />\n </FormGrid>\n </section>\n )\n}\n\n// ── Translators + helpers ───────────────────────────────────────\n\n/**\n * Build a JSON Schema object from the parameter list. Mirrors the\n * format the backend validator (`validate_input_schema`) expects —\n * `{ type: 'object', properties, required }`.\n */\nexport function parametersToJsonSchema(params: ToolParameter[]): Record<string, unknown> {\n const properties: Record<string, unknown> = {}\n const required: string[] = []\n for (const param of params) {\n if (!param.name.trim()) continue\n properties[param.name] = {\n type: param.type,\n ...(param.description ? { description: param.description } : {}),\n }\n if (param.required) required.push(param.name)\n }\n const schema: Record<string, unknown> = { type: 'object', properties }\n if (required.length > 0) schema.required = required\n return schema\n}\n\n/**\n * Inverse of `parametersToJsonSchema` — hydrate the editor UI from an\n * existing schema so the Edit flow shows what was stored.\n */\nexport function jsonSchemaToParameters(schema: unknown): ToolParameter[] {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return []\n const root = schema as Record<string, unknown>\n const properties = root.properties\n if (!properties || typeof properties !== 'object' || Array.isArray(properties)) return []\n const required = Array.isArray(root.required) ? (root.required as unknown[]).filter((r): r is string => typeof r === 'string') : []\n const entries = Object.entries(properties as Record<string, unknown>)\n return entries.map(([name, raw]) => {\n const def = (raw ?? {}) as Record<string, unknown>\n const rawType = def.type\n const type = isParameterType(rawType) ? rawType : 'string'\n return {\n name,\n type,\n description: typeof def.description === 'string' ? def.description : '',\n required: required.includes(name),\n }\n })\n}\n\nfunction isParameterType(v: unknown): v is ToolParameter['type'] {\n return v === 'string' || v === 'number' || v === 'boolean' || v === 'array' || v === 'object'\n}\n\nfunction defaultForm(): ToolDefinitionFormInput {\n return {\n name: '',\n description: '',\n toolType: 'http',\n parameters: [],\n handlerConfig: { method: 'GET' },\n enabled: true,\n }\n}\n\nfunction toolToForm(tool: AgentTool): ToolDefinitionFormInput {\n const raw = tool as Record<string, unknown>\n // Parse the nested `implementationKey` JSON that the backend stores —\n // it holds `{organizationId, handlerConfig}` per the Rust handler.\n const implRaw = raw.implementationKey ?? raw.implementation_key\n let handlerConfig: Record<string, unknown> = {}\n if (typeof implRaw === 'string') {\n try {\n const parsed = JSON.parse(implRaw) as Record<string, unknown>\n if (parsed && typeof parsed === 'object') {\n const inner = parsed.handlerConfig ?? parsed.handler_config\n if (inner && typeof inner === 'object' && !Array.isArray(inner)) {\n handlerConfig = inner as Record<string, unknown>\n }\n }\n } catch {\n // Legacy rows that stored implementationKey as a plain string —\n // surface it under a single `implementationKey` handler field.\n handlerConfig = { implementationKey: implRaw }\n }\n }\n\n const toolTypeRaw = raw.toolType ?? raw.tool_type ?? raw.category\n const toolType: ToolType = (TOOL_TYPES as readonly string[]).includes(String(toolTypeRaw))\n ? (toolTypeRaw as ToolType)\n : 'function'\n\n const parameters = jsonSchemaToParameters(raw.parameters ?? raw.inputSchema ?? raw.input_schema)\n\n return {\n agentToolId: tool.agentToolId,\n name: tool.name,\n description: tool.description,\n toolType,\n parameters,\n handlerConfig,\n enabled: tool.enabled,\n icon: tool.icon,\n }\n}\n\nfunction toolTypeLabel(tool: AgentTool): string {\n const raw = tool as Record<string, unknown>\n const t = raw.toolType ?? raw.tool_type ?? tool.category\n const entry = TOOL_TYPE_OPTIONS.find((o) => o.value === t)\n return entry?.label ?? (typeof t === 'string' ? t : 'tool')\n}\n\nfunction stringProp(obj: Record<string, unknown>, key: string, fallback = ''): string {\n const value = obj[key]\n return typeof value === 'string' ? value : fallback\n}\n\nfunction numberProp(obj: Record<string, unknown>, key: string, fallback: number): string {\n const value = obj[key]\n return typeof value === 'number' && Number.isFinite(value) ? String(value) : String(fallback)\n}\n\nfunction jsonProp(obj: Record<string, unknown>, key: string): string {\n const value = obj[key]\n if (!value) return ''\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n}\n\nfunction setFromJson(\n set: (key: string, value: unknown) => void,\n key: string,\n raw: string,\n) {\n if (!raw.trim()) {\n set(key, undefined)\n return\n }\n try {\n set(key, JSON.parse(raw))\n } catch {\n // Keep the string around so the textarea's value round-trips; the\n // page wrapper refuses to submit if this is still invalid on save.\n set(key, raw)\n }\n}\n","import { useState } from 'react'\nimport { AdjustmentsHorizontalIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport {\n RuleForm,\n defaultRuleForm,\n type RuleFormValue,\n} from '../../astrlabe'\nimport type { AgentRule } from '../../astrlabe/contracts'\n\nexport type { RuleFormValue }\n\nexport type RulesLabels = {\n title: string\n subtitle: string\n addRule: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n empty: string\n enabled: string\n disabled: string\n order: string\n}\n\ntype Props = {\n labels: RulesLabels\n rules: AgentRule[]\n loading: boolean\n onCreate: (input: RuleFormValue) => void\n onUpdate: (ruleId: string, input: RuleFormValue) => void\n onDelete: (rule: AgentRule) => void\n}\n\nexport function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<AgentRule | null>(null)\n\n const hero = (\n <HeroSection\n icon={<AdjustmentsHorizontalIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-fuchsia-500 to-purple-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addRule}\n onClick={() => setCreateOpen(true)}\n accent=\"fuchsia\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addRule}\n onClick={() => setCreateOpen(true)}\n accent=\"fuchsia\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : rules.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {rules.map((rule) => (\n <EntityCard\n key={rule.ruleId}\n accentGradient=\"from-fuchsia-500 to-purple-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400\">\n <AdjustmentsHorizontalIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={rule.name}\n subtitle={`${labels.order}: ${rule.order ?? 0}`}\n status={(\n <Badge color={rule.enabled ? 'emerald' : 'zinc'}>\n {rule.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(rule)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(rule)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {rule.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{rule.description}</p>\n )}\n </EntityCard>\n ))}\n </div>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <RuleEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultRuleForm()}\n onClose={() => setCreateOpen(false)}\n onSubmit={(value) => {\n onCreate(value)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <RuleEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={ruleToFormValue(editing)}\n onClose={() => setEditing(null)}\n onSubmit={(value) => {\n onUpdate(editing.ruleId, value)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\nfunction RuleEditor({\n title,\n saveLabel,\n initial,\n onSubmit,\n onClose,\n}: {\n title: string\n saveLabel: string\n initial: RuleFormValue\n onSubmit: (value: RuleFormValue) => void\n onClose: () => void\n}) {\n const [value, setValue] = useState<RuleFormValue>(initial)\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"3xl\"\n showFormFooter\n submitLabel={saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n onSubmit(value)\n }}\n >\n <RuleForm value={value} onChange={setValue} />\n </GlassModal>\n )\n}\n\n/**\n * Convert an `AgentRule` wire payload (which may carry a legacy singular\n * `condition` + plural `actions[]` or the newer singular `action`) into\n * the canonical `RuleFormValue` shape the builder expects.\n */\nfunction ruleToFormValue(rule: AgentRule): RuleFormValue {\n const base = defaultRuleForm()\n const rawCondition = (rule.condition ?? rule.conditions) as RuleFormValue['condition'] | undefined\n const rawAction = pickAction(rule)\n return {\n ...base,\n ruleId: rule.ruleId,\n name: rule.name ?? '',\n description: rule.description ?? '',\n enabled: rule.enabled,\n priority: typeof rule.order === 'number' ? rule.order : typeof rule.priority === 'number' ? (rule.priority as number) : 0,\n condition: rawCondition && typeof rawCondition === 'object'\n ? (rawCondition as RuleFormValue['condition'])\n : base.condition,\n action: rawAction ?? base.action,\n status: typeof rule.status === 'string' ? (rule.status as RuleFormValue['status']) : base.status,\n validFrom: typeof rule.validFrom === 'string' ? rule.validFrom : base.validFrom,\n validUntil: typeof rule.validUntil === 'string' ? rule.validUntil : base.validUntil,\n tags: Array.isArray(rule.tags)\n ? (rule.tags as unknown[]).filter((tag): tag is string => typeof tag === 'string')\n : base.tags,\n }\n}\n\nfunction pickAction(rule: AgentRule): RuleFormValue['action'] | undefined {\n const singular = rule.action as Record<string, unknown> | undefined\n if (singular && typeof singular === 'object' && 'type' in singular) {\n return singular as RuleFormValue['action']\n }\n if (Array.isArray(rule.actions) && rule.actions.length > 0) {\n const first = rule.actions[0]\n if (first && typeof first === 'object' && 'type' in first) {\n return first as RuleFormValue['action']\n }\n }\n return undefined\n}\n","import { useState, type FormEvent, type ReactNode } from 'react'\nimport {\n CircleStackIcon,\n ServerStackIcon,\n CloudIcon,\n ClockIcon,\n ShareIcon,\n KeyIcon,\n MagnifyingGlassIcon,\n ArrowLeftIcon,\n CheckCircleIcon,\n XCircleIcon,\n} from '@heroicons/react/24/outline'\nimport {\n GlassModal,\n FormGrid,\n FormInput,\n FormSelect,\n Button,\n} from '@ui/index'\n\n/* ─── Dialect catalog ─── */\n\ntype DialectCategory = {\n id: string\n labelKey: string\n icon: React.ComponentType<{ className?: string }>\n gradient: string\n dialects: DialectOption[]\n}\n\ntype DialectOption = {\n value: string\n label: string\n defaultPort?: number\n /** 'standard' = host/port/db, 'connection-string' = single URL, 'cloud' = project/dataset/key */\n formType: 'standard' | 'connection-string' | 'cloud-bigquery' | 'cloud-snowflake' | 'cloud-key' | 'vector-key'\n}\n\nconst DIALECT_CATEGORIES: DialectCategory[] = [\n {\n id: 'relational',\n labelKey: 'categoryRelational',\n icon: CircleStackIcon,\n gradient: 'from-blue-500 to-indigo-600',\n dialects: [\n { value: 'postgres', label: 'PostgreSQL', defaultPort: 5432, formType: 'standard' },\n { value: 'mysql', label: 'MySQL', defaultPort: 3306, formType: 'standard' },\n { value: 'mariadb', label: 'MariaDB', defaultPort: 3306, formType: 'standard' },\n { value: 'mssql', label: 'SQL Server', defaultPort: 1433, formType: 'standard' },\n { value: 'oracle', label: 'Oracle', defaultPort: 1521, formType: 'standard' },\n { value: 'db2', label: 'IBM Db2', defaultPort: 50000, formType: 'standard' },\n { value: 'cockroachdb', label: 'CockroachDB', defaultPort: 26257, formType: 'standard' },\n { value: 'timescaledb', label: 'TimescaleDB', defaultPort: 5432, formType: 'standard' },\n { value: 'sqlite', label: 'SQLite', formType: 'connection-string' },\n { value: 'duckdb', label: 'DuckDB', formType: 'connection-string' },\n ],\n },\n {\n id: 'nosql',\n labelKey: 'categoryNoSql',\n icon: ServerStackIcon,\n gradient: 'from-emerald-500 to-teal-600',\n dialects: [\n { value: 'mongodb', label: 'MongoDB', defaultPort: 27017, formType: 'connection-string' },\n { value: 'cassandra', label: 'Cassandra', defaultPort: 9042, formType: 'standard' },\n { value: 'scylladb', label: 'ScyllaDB', defaultPort: 9042, formType: 'standard' },\n { value: 'dynamodb', label: 'DynamoDB', formType: 'cloud-key' },\n { value: 'cosmosdb', label: 'CosmosDB', formType: 'connection-string' },\n { value: 'arangodb', label: 'ArangoDB', defaultPort: 8529, formType: 'standard' },\n ],\n },\n {\n id: 'warehouse',\n labelKey: 'categoryWarehouse',\n icon: CloudIcon,\n gradient: 'from-purple-500 to-violet-600',\n dialects: [\n { value: 'bigquery', label: 'BigQuery', formType: 'cloud-bigquery' },\n { value: 'snowflake', label: 'Snowflake', formType: 'cloud-snowflake' },\n { value: 'clickhouse', label: 'ClickHouse', defaultPort: 8123, formType: 'standard' },\n ],\n },\n {\n id: 'timeseries',\n labelKey: 'categoryTimeSeries',\n icon: ClockIcon,\n gradient: 'from-sky-500 to-cyan-600',\n dialects: [\n { value: 'influxdb', label: 'InfluxDB', formType: 'cloud-key' },\n { value: 'timestream', label: 'Timestream', formType: 'cloud-key' },\n ],\n },\n {\n id: 'graph',\n labelKey: 'categoryGraph',\n icon: ShareIcon,\n gradient: 'from-pink-500 to-rose-600',\n dialects: [\n { value: 'neo4j', label: 'Neo4j', defaultPort: 7687, formType: 'standard' },\n { value: 'neptune', label: 'Neptune', formType: 'connection-string' },\n ],\n },\n {\n id: 'keyvalue',\n labelKey: 'categoryKeyValue',\n icon: KeyIcon,\n gradient: 'from-red-500 to-orange-600',\n dialects: [\n { value: 'redis', label: 'Redis', defaultPort: 6379, formType: 'standard' },\n ],\n },\n {\n id: 'search',\n labelKey: 'categorySearch',\n icon: MagnifyingGlassIcon,\n gradient: 'from-amber-500 to-yellow-600',\n dialects: [\n { value: 'elasticsearch', label: 'Elasticsearch', defaultPort: 9200, formType: 'standard' },\n { value: 'opensearch', label: 'OpenSearch', defaultPort: 9200, formType: 'standard' },\n { value: 'pinecone', label: 'Pinecone', formType: 'vector-key' },\n { value: 'qdrant', label: 'Qdrant', defaultPort: 6333, formType: 'standard' },\n { value: 'weaviate', label: 'Weaviate', defaultPort: 8080, formType: 'standard' },\n { value: 'milvus', label: 'Milvus', defaultPort: 19530, formType: 'standard' },\n { value: 'chromadb', label: 'ChromaDB', defaultPort: 8000, formType: 'standard' },\n ],\n },\n]\n\nfunction findDialect(value: string): DialectOption | undefined {\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === value)\n if (found) return found\n }\n return undefined\n}\n\nfunction findCategory(dialectValue: string): DialectCategory | undefined {\n return DIALECT_CATEGORIES.find((c) => c.dialects.some((d) => d.value === dialectValue))\n}\n\n/* ─── Types ─── */\n\nexport type DatasourceFormData = {\n name: string\n dialect: string\n host?: string\n port?: number\n database?: string\n username?: string\n password?: string\n schema?: string\n ssl?: boolean\n readOnly?: boolean\n connectionString?: string\n projectId?: string\n dataset?: string\n keyFile?: string\n account?: string\n warehouse?: string\n region?: string\n bucket?: string\n token?: string\n apiKey?: string\n environment?: string\n index?: string\n url?: string\n /** Whitelist of tables the engine is allowed to query. Empty/undef =\n * allow every table the credential can see. */\n allowedTables?: string[]\n /** Columns the engine MUST NOT surface to workflows. Applied at the\n * driver layer — trying to SELECT a blocked column still fails. */\n blockedColumns?: string[]\n /** Max concurrent connections in the org's cached pool (default 5). */\n maxPoolSize?: number\n /** Query/connect timeout in ms (default 5000). */\n timeoutMs?: number\n}\n\ntype Labels = Record<string, string>\n\nexport type DatasourceFormModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\n/* ─── Step 1: Category + dialect picker ─── */\n\nfunction DialectPicker({\n labels,\n onSelect,\n}: {\n labels: Labels\n onSelect: (dialect: string) => void\n}) {\n return (\n <div className=\"space-y-6\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{labels.stepSelectType}</p>\n {DIALECT_CATEGORIES.map((category) => (\n <div key={category.id}>\n <div className=\"mb-2 flex items-center gap-2\">\n <div className={`flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br ${category.gradient}`}>\n <category.icon className=\"h-4 w-4 text-white\" />\n </div>\n <span className=\"text-sm font-semibold text-gray-700 dark:text-gray-200\">\n {labels[category.labelKey] ?? category.id}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-3\">\n {category.dialects.map((dialect) => (\n <button\n key={dialect.value}\n type=\"button\"\n onClick={() => onSelect(dialect.value)}\n className=\"group flex items-center gap-2 rounded-xl border border-gray-200/60 bg-white/60 px-3 py-2.5 text-left text-sm font-medium text-gray-700 transition-all hover:border-amber-400/60 hover:bg-amber-50/50 hover:text-amber-700 active:scale-[0.97] dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:hover:border-amber-400/40 dark:hover:bg-amber-500/10 dark:hover:text-amber-300\"\n >\n <CircleStackIcon className=\"h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-amber-500 dark:text-gray-500\" />\n {dialect.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/* ─── Step 2: Connection form ─── */\n\nfunction ConnectionForm({\n dialect,\n labels,\n onBack,\n onSubmit,\n}: {\n dialect: DialectOption\n labels: Labels\n onBack: () => void\n onSubmit: (data: DatasourceFormData) => void\n}) {\n const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'failed'>('idle')\n const category = findCategory(dialect.value)\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault()\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const data: DatasourceFormData = {\n name: String(formData.get('name') ?? '').trim(),\n dialect: dialect.value,\n }\n\n // Collect all possible fields\n for (const key of ['host', 'database', 'username', 'password', 'schema', 'connectionString', 'projectId', 'dataset', 'keyFile', 'account', 'warehouse', 'region', 'bucket', 'token', 'apiKey', 'environment', 'index', 'url'] as const) {\n const val = String(formData.get(key) ?? '').trim()\n if (val) (data as Record<string, unknown>)[key] = val\n }\n\n const port = String(formData.get('port') ?? '').trim()\n if (port) data.port = Number(port)\n\n data.ssl = formData.get('ssl') === 'on'\n data.readOnly = formData.get('readOnly') === 'on'\n\n // Advanced — pool size, timeout, allowlist/blocklist\n const maxPoolSize = String(formData.get('maxPoolSize') ?? '').trim()\n if (maxPoolSize) {\n const parsed = Number(maxPoolSize)\n if (Number.isFinite(parsed) && parsed > 0) data.maxPoolSize = parsed\n }\n const timeoutMs = String(formData.get('timeoutMs') ?? '').trim()\n if (timeoutMs) {\n const parsed = Number(timeoutMs)\n if (Number.isFinite(parsed) && parsed > 0) data.timeoutMs = parsed\n }\n const allowedTables = splitList(String(formData.get('allowedTables') ?? ''))\n if (allowedTables.length > 0) data.allowedTables = allowedTables\n const blockedColumns = splitList(String(formData.get('blockedColumns') ?? ''))\n if (blockedColumns.length > 0) data.blockedColumns = blockedColumns\n\n onSubmit(data)\n }\n\n function handleTestConnection() {\n setTestStatus('testing')\n // Simulate test connection — real implementation would call API\n setTimeout(() => {\n setTestStatus('success')\n setTimeout(() => setTestStatus('idle'), 3000)\n }, 1500)\n }\n\n function renderFields(): ReactNode {\n switch (dialect.formType) {\n case 'standard':\n return (\n <>\n <FormInput name=\"host\" label={labels.fieldHost} placeholder={labels.fieldHostPlaceholder} required />\n <FormInput name=\"port\" label={labels.fieldPort} type=\"number\" defaultValue={dialect.defaultPort} />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'connection-string':\n return (\n <div className=\"col-span-full\">\n <FormInput name=\"connectionString\" label={labels.fieldConnectionString} placeholder={labels.fieldConnectionStringPlaceholder} required />\n </div>\n )\n\n case 'cloud-bigquery':\n return (\n <>\n <FormInput name=\"projectId\" label={labels.fieldProjectId} placeholder={labels.fieldProjectIdPlaceholder} required />\n <FormInput name=\"dataset\" label={labels.fieldDataset} placeholder={labels.fieldDatasetPlaceholder} required />\n <div className=\"col-span-full\">\n <FormInput name=\"keyFile\" label={labels.fieldKeyFile} placeholder={labels.fieldKeyFilePlaceholder} />\n </div>\n </>\n )\n\n case 'cloud-snowflake':\n return (\n <>\n <FormInput name=\"account\" label={labels.fieldAccount} placeholder={labels.fieldAccountPlaceholder} required />\n <FormInput name=\"warehouse\" label={labels.fieldWarehouse} placeholder={labels.fieldWarehousePlaceholder} required />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} required />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'cloud-key':\n return (\n <>\n <FormInput name=\"region\" label={labels.fieldRegion} placeholder={labels.fieldRegionPlaceholder} required />\n <FormInput name=\"token\" label={labels.fieldToken} type=\"password\" placeholder={labels.fieldTokenPlaceholder} required />\n <FormInput name=\"bucket\" label={labels.fieldBucket} placeholder={labels.fieldBucketPlaceholder} />\n </>\n )\n\n case 'vector-key':\n return (\n <>\n <FormInput name=\"apiKey\" label={labels.fieldApiKey} type=\"password\" placeholder={labels.fieldApiKeyPlaceholder} required />\n <FormInput name=\"environment\" label={labels.fieldEnvironment} placeholder={labels.fieldEnvironmentPlaceholder} required />\n <FormInput name=\"index\" label={labels.fieldIndex} placeholder={labels.fieldIndexPlaceholder} />\n </>\n )\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Back button + dialect badge */}\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-lg text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-white/10 dark:hover:text-gray-300\"\n >\n <ArrowLeftIcon className=\"h-4 w-4\" />\n </button>\n <div className=\"flex items-center gap-2\">\n <div className={`flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br ${category?.gradient ?? 'from-gray-400 to-gray-500'}`}>\n {category ? <category.icon className=\"h-4 w-4 text-white\" /> : <CircleStackIcon className=\"h-4 w-4 text-white\" />}\n </div>\n <div>\n <span className=\"text-sm font-semibold text-gray-900 dark:text-white\">{dialect.label}</span>\n <span className=\"ml-2 text-xs text-gray-400\">{labels[category?.labelKey ?? ''] ?? ''}</span>\n </div>\n </div>\n </div>\n\n {/* Name field — always present */}\n <FormInput name=\"name\" label={labels.fieldName} placeholder={labels.fieldNamePlaceholder} required />\n\n {/* Dynamic fields per dialect form type */}\n <FormGrid>\n {renderFields()}\n </FormGrid>\n\n {/* Toggles */}\n <div className=\"flex flex-wrap items-center gap-6 pt-2\">\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n name=\"ssl\"\n defaultChecked\n className=\"h-4 w-4 rounded border-gray-300 text-amber-600 focus:ring-amber-500 dark:border-gray-600 dark:bg-gray-800\"\n />\n {labels.fieldSsl}\n </label>\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n name=\"readOnly\"\n defaultChecked\n className=\"h-4 w-4 rounded border-gray-300 text-amber-600 focus:ring-amber-500 dark:border-gray-600 dark:bg-gray-800\"\n />\n {labels.fieldReadOnly}\n </label>\n </div>\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">{labels.fieldReadOnlyHelp}</p>\n\n {/* Advanced — pool, timeout, table/column governance. Collapsed by\n default because the defaults (pool=5, timeout=5s, no allow/block)\n are correct for almost every datasource. Shown when an admin\n needs to lock down a specific table or raise the timeout for\n a slow analytic warehouse. */}\n <details className=\"rounded-xl border border-gray-200/60 bg-white/40 p-3 dark:border-white/10 dark:bg-white/5\">\n <summary className=\"cursor-pointer text-sm font-medium text-gray-700 dark:text-gray-300\">\n {labels.advancedToggle ?? 'Governance & performance'}\n </summary>\n <div className=\"mt-3 space-y-3\">\n <FormGrid>\n <FormInput\n name=\"maxPoolSize\"\n label={labels.fieldMaxPoolSize ?? 'Max pool size'}\n type=\"number\"\n min={1}\n max={100}\n placeholder=\"5\"\n />\n <FormInput\n name=\"timeoutMs\"\n label={labels.fieldTimeoutMs ?? 'Timeout (ms)'}\n type=\"number\"\n min={100}\n placeholder=\"5000\"\n />\n </FormGrid>\n <FormInput\n name=\"allowedTables\"\n label={labels.fieldAllowedTables ?? 'Allowed tables (comma-separated)'}\n placeholder=\"stations, current_prices, competitor_prices\"\n />\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">\n {labels.fieldAllowedTablesHelp\n ?? 'Leave blank to allow every table the credential can see. Otherwise only the listed tables are queryable from workflows.'}\n </p>\n <FormInput\n name=\"blockedColumns\"\n label={labels.fieldBlockedColumns ?? 'Blocked columns (comma-separated)'}\n placeholder=\"customers.ssn, employees.salary\"\n />\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">\n {labels.fieldBlockedColumnsHelp\n ?? 'Columns the driver must never surface, even if referenced by a workflow. Use table.column notation for specificity.'}\n </p>\n </div>\n </details>\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 border-t border-gray-200/60 pt-5 dark:border-white/10\">\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"zinc\"\n onClick={handleTestConnection}\n disabled={testStatus === 'testing'}\n >\n {testStatus === 'testing' ? labels.testing : labels.testConnection}\n </Button>\n\n {testStatus === 'success' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-emerald-600 dark:text-emerald-400\">\n <CheckCircleIcon className=\"h-4 w-4\" />\n {labels.connectionSuccess}\n </span>\n )}\n {testStatus === 'failed' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-red-600 dark:text-red-400\">\n <XCircleIcon className=\"h-4 w-4\" />\n {labels.connectionFailed}\n </span>\n )}\n\n <div className=\"flex-1\" />\n\n <Button type=\"submit\" size=\"sm\" color=\"amber\">\n {labels.save}\n </Button>\n </div>\n </form>\n )\n}\n\n/* ─── Form Modal ─── */\n\nexport function DatasourceFormModal({ open, onClose, labels, onSave }: DatasourceFormModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\n/* ─── Modal (for /datasources page) ─── */\n\nexport type DatasourceModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\nexport function DatasourceModal({ open, onClose, labels, onSave }: DatasourceModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\nexport { DIALECT_CATEGORIES, findDialect, findCategory }\n\nfunction splitList(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n","import { useState } from 'react'\nimport { CircleStackIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n HeroSection,\n PageEmptyState,\n Badge,\n} from '@ui/index'\nimport type { DataSource } from '@datatechsolutions/shared-domain/common'\nimport { DatasourceModal, DIALECT_CATEGORIES, findCategory, type DatasourceFormData } from './datasource-modal'\n\n/* ─── Sample data for the landing preview ─── */\n\nconst SAMPLE_DATASOURCES: DataSource[] = [\n {\n id: 'ds_bigquery_analytics',\n organizationId: 'org_demo',\n name: 'BigQuery Analytics',\n dialect: 'bigquery',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-20T10:00:00Z',\n updatedAt: '2026-03-20T10:00:00Z',\n slug: 'bigquery-analytics',\n },\n {\n id: 'ds_postgres_prod',\n organizationId: 'org_demo',\n name: 'Production PostgreSQL',\n dialect: 'postgres',\n credentials: null,\n readOnly: true,\n maxPoolSize: 10,\n timeoutMs: 15000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-18T08:30:00Z',\n updatedAt: '2026-03-22T14:00:00Z',\n slug: 'production-postgresql',\n },\n {\n id: 'ds_snowflake_dw',\n organizationId: 'org_demo',\n name: 'Snowflake Data Warehouse',\n dialect: 'snowflake',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-15T09:00:00Z',\n updatedAt: '2026-03-21T11:00:00Z',\n slug: 'snowflake-data-warehouse',\n },\n {\n id: 'ds_mongodb_events',\n organizationId: 'org_demo',\n name: 'Event Store (MongoDB)',\n dialect: 'mongodb',\n credentials: null,\n readOnly: true,\n maxPoolSize: 5,\n timeoutMs: 10000,\n allowedTables: null,\n blockedColumns: null,\n enabled: false,\n createdAt: '2026-03-10T12:00:00Z',\n updatedAt: '2026-03-19T16:00:00Z',\n slug: 'event-store-mongodb',\n },\n {\n id: 'ds_redis_cache',\n organizationId: 'org_demo',\n name: 'Redis Cache Layer',\n dialect: 'redis',\n credentials: null,\n readOnly: false,\n maxPoolSize: 20,\n timeoutMs: 5000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-12T07:00:00Z',\n updatedAt: '2026-03-23T09:00:00Z',\n slug: 'redis-cache-layer',\n },\n {\n id: 'ds_pinecone_vectors',\n organizationId: 'org_demo',\n name: 'Pinecone Embeddings',\n dialect: 'pinecone',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 20000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-22T15:00:00Z',\n updatedAt: '2026-03-25T10:00:00Z',\n slug: 'pinecone-embeddings',\n },\n]\n\n/* ─── Helpers ─── */\n\nfunction getDialectLabel(dialect: string | null): string {\n if (!dialect) return 'Unknown'\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === dialect)\n if (found) return found.label\n }\n return dialect\n}\n\nfunction getDialectGradient(dialect: string | null): string {\n if (!dialect) return 'from-gray-400 to-gray-500'\n const category = findCategory(dialect)\n return category?.gradient ?? 'from-gray-400 to-gray-500'\n}\n\nfunction getDialectIcon(dialect: string | null) {\n if (!dialect) return CircleStackIcon\n const category = findCategory(dialect)\n return category?.icon ?? CircleStackIcon\n}\n\n// Map every supported dialect (and common aliases) to the brand SVG under\n// `/public/logos/datasources/`. When the dialect has an SVG the card shows\n// the real logo; when it does not we fall back to the gradient + Heroicon.\nconst DIALECT_LOGO: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n postgresql: '/logos/datasources/postgres.svg',\n mysql: '/logos/datasources/mysql.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n cockroachdb: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDialectLogoSrc(dialect: string | null): string | null {\n if (!dialect) return null\n return DIALECT_LOGO[dialect.toLowerCase()] ?? null\n}\n\n/* ─── Props ─── */\n\ntype Labels = Record<string, string>\n\nexport type DatasourcesPageViewProps = {\n labels: Labels\n datasources?: DataSource[]\n useSampleData?: boolean\n onCreate?: (data: DatasourceFormData) => void\n}\n\n/* ─── Component ─── */\n\nexport function DatasourcesPageView({\n labels,\n datasources: externalDatasources,\n useSampleData = false,\n onCreate,\n}: DatasourcesPageViewProps) {\n const [modalOpen, setModalOpen] = useState(false)\n const [localDatasources, setLocalDatasources] = useState<DataSource[]>(\n useSampleData ? SAMPLE_DATASOURCES : []\n )\n\n const datasources = externalDatasources ?? localDatasources\n const isEmpty = datasources.length === 0\n\n function handleCreate(data: DatasourceFormData) {\n if (onCreate) {\n onCreate(data)\n return\n }\n // Local state fallback (for sample/demo mode)\n const newDs: DataSource = {\n id: `ds_${Date.now()}`,\n organizationId: 'org_demo',\n name: data.name,\n dialect: data.dialect,\n credentials: null,\n readOnly: data.readOnly ?? true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n slug: data.name.toLowerCase().replace(/\\s+/g, '-'),\n }\n setLocalDatasources((previous) => [...previous, newDs])\n }\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-amber-500 to-orange-600\"\n toolbar={\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addDatasource}\n onClick={() => setModalOpen(true)}\n accent=\"amber\"\n />\n }\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addDatasource}\n onClick={() => setModalOpen(true)}\n accent=\"amber\"\n />\n\n {isEmpty ? (\n <PageEmptyState\n title={labels.emptyTitle}\n message={labels.emptyDescription}\n iconName=\"link\"\n customIcon={<CircleStackIcon className=\"h-10 w-10 text-amber-500 dark:text-amber-400\" />}\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {datasources.map((ds) => {\n const Icon = getDialectIcon(ds.dialect)\n const gradient = getDialectGradient(ds.dialect)\n const dialectLabel = getDialectLabel(ds.dialect)\n const logoSrc = getDialectLogoSrc(ds.dialect)\n\n // Prefer the brand SVG (`/logos/datasources/{dialect}.svg`) —\n // matches the node-palette chips inside the canvas. Fall back\n // to the gradient-boxed Heroicon when the dialect has no SVG\n // so a new/custom dialect still renders a card.\n const iconElement = logoSrc ? (\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-white shadow-sm ring-1 ring-black/5 dark:bg-white/10 dark:ring-white/10\">\n <img src={logoSrc} alt={dialectLabel} className=\"h-7 w-7 object-contain\" />\n </div>\n ) : (\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )\n\n return (\n <EntityCard\n key={ds.id}\n accentGradient={gradient}\n icon={iconElement}\n title={ds.name ?? ds.id}\n subtitle={dialectLabel}\n status={\n <Badge color={ds.enabled ? 'emerald' : 'zinc'}>\n {ds.enabled ? labels.enabled : labels.disabled}\n </Badge>\n }\n footer={\n <div className=\"flex items-center gap-2 text-xs text-gray-400 dark:text-gray-500\">\n {ds.readOnly && (\n <span className=\"rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-semibold text-blue-700 dark:bg-blue-900/30 dark:text-blue-300\">\n Read-only\n </span>\n )}\n {ds.timeoutMs && (\n <span>{ds.timeoutMs / 1000}s timeout</span>\n )}\n </div>\n }\n >\n <div className=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">\n <div>{labels.dialect}: {dialectLabel}</div>\n {ds.slug && <div className=\"truncate text-gray-400\">/{ds.slug}</div>}\n </div>\n </EntityCard>\n )\n })}\n </div>\n )}\n\n <DatasourceModal\n open={modalOpen}\n onClose={() => setModalOpen(false)}\n labels={labels}\n onSave={handleCreate}\n />\n </div>\n )\n}\n"]}