@datatechsolutions/ui 3.8.0 → 3.9.0

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 (97) hide show
  1. package/dist/astrlabe/index.js +107 -107
  2. package/dist/astrlabe/index.mjs +3 -3
  3. package/dist/astrlabe/workflow-canvas.js +3 -3
  4. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  5. package/dist/{chunk-KKXI7CPF.mjs → chunk-2E7HYTS7.mjs} +3 -3
  6. package/dist/{chunk-KKXI7CPF.mjs.map → chunk-2E7HYTS7.mjs.map} +1 -1
  7. package/dist/{chunk-EWYAM4WJ.mjs → chunk-2ZY3IQ2I.mjs} +3 -3
  8. package/dist/{chunk-EWYAM4WJ.mjs.map → chunk-2ZY3IQ2I.mjs.map} +1 -1
  9. package/dist/{chunk-VPFVW7ZF.js → chunk-6E2YH67A.js} +35 -35
  10. package/dist/{chunk-VPFVW7ZF.js.map → chunk-6E2YH67A.js.map} +1 -1
  11. package/dist/{chunk-A4A3SQTV.mjs → chunk-6QJI5YOJ.mjs} +3 -3
  12. package/dist/{chunk-A4A3SQTV.mjs.map → chunk-6QJI5YOJ.mjs.map} +1 -1
  13. package/dist/{chunk-3X3IYDG6.js → chunk-7AM2SXEF.js} +68 -68
  14. package/dist/{chunk-3X3IYDG6.js.map → chunk-7AM2SXEF.js.map} +1 -1
  15. package/dist/{chunk-H37VDL7Y.js → chunk-A2RIX2RK.js} +4 -4
  16. package/dist/{chunk-H37VDL7Y.js.map → chunk-A2RIX2RK.js.map} +1 -1
  17. package/dist/{chunk-32DHEVOH.mjs → chunk-ARLYOLSO.mjs} +3 -3
  18. package/dist/{chunk-32DHEVOH.mjs.map → chunk-ARLYOLSO.mjs.map} +1 -1
  19. package/dist/{chunk-5YVOLHSW.mjs → chunk-AXBD6OAF.mjs} +4 -4
  20. package/dist/{chunk-5YVOLHSW.mjs.map → chunk-AXBD6OAF.mjs.map} +1 -1
  21. package/dist/{chunk-ZP37M2QK.mjs → chunk-BWUFLW5W.mjs} +6 -6
  22. package/dist/{chunk-ZP37M2QK.mjs.map → chunk-BWUFLW5W.mjs.map} +1 -1
  23. package/dist/{chunk-HBOORO52.js → chunk-CLTNCBSP.js} +4 -4
  24. package/dist/{chunk-HBOORO52.js.map → chunk-CLTNCBSP.js.map} +1 -1
  25. package/dist/{chunk-F35GFICG.js → chunk-CRBGZA6Y.js} +13 -13
  26. package/dist/{chunk-F35GFICG.js.map → chunk-CRBGZA6Y.js.map} +1 -1
  27. package/dist/{chunk-7JZFNKJD.js → chunk-DQIEVLA3.js} +35 -35
  28. package/dist/{chunk-7JZFNKJD.js.map → chunk-DQIEVLA3.js.map} +1 -1
  29. package/dist/{chunk-57E4TCB2.mjs → chunk-EAIE4QGD.mjs} +3 -3
  30. package/dist/{chunk-57E4TCB2.mjs.map → chunk-EAIE4QGD.mjs.map} +1 -1
  31. package/dist/{chunk-5W6LMDXV.mjs → chunk-GQWC4EKE.mjs} +4 -4
  32. package/dist/{chunk-5W6LMDXV.mjs.map → chunk-GQWC4EKE.mjs.map} +1 -1
  33. package/dist/{chunk-FKUIVS6I.js → chunk-IVKFXPLO.js} +28 -28
  34. package/dist/{chunk-FKUIVS6I.js.map → chunk-IVKFXPLO.js.map} +1 -1
  35. package/dist/{chunk-FNA66TT4.js → chunk-MT66VKLS.js} +163 -219
  36. package/dist/chunk-MT66VKLS.js.map +1 -0
  37. package/dist/{chunk-74BU2EBZ.mjs → chunk-OEZ7GAJY.mjs} +6 -6
  38. package/dist/{chunk-74BU2EBZ.mjs.map → chunk-OEZ7GAJY.mjs.map} +1 -1
  39. package/dist/{chunk-CZZOCKEA.mjs → chunk-OVQ4MKCV.mjs} +3 -3
  40. package/dist/{chunk-CZZOCKEA.mjs.map → chunk-OVQ4MKCV.mjs.map} +1 -1
  41. package/dist/{chunk-WDBVIU7W.mjs → chunk-PD3JLDA5.mjs} +3 -3
  42. package/dist/{chunk-WDBVIU7W.mjs.map → chunk-PD3JLDA5.mjs.map} +1 -1
  43. package/dist/{chunk-TJPPZU77.js → chunk-R6GEJBFC.js} +34 -34
  44. package/dist/{chunk-TJPPZU77.js.map → chunk-R6GEJBFC.js.map} +1 -1
  45. package/dist/{chunk-Q4QORAMH.js → chunk-RFUSH7WD.js} +10 -10
  46. package/dist/{chunk-Q4QORAMH.js.map → chunk-RFUSH7WD.js.map} +1 -1
  47. package/dist/{chunk-VS6PTRQ7.mjs → chunk-SJ6SUS7H.mjs} +3 -3
  48. package/dist/{chunk-VS6PTRQ7.mjs.map → chunk-SJ6SUS7H.mjs.map} +1 -1
  49. package/dist/{chunk-E57RZXOR.js → chunk-T4IYOKHR.js} +25 -25
  50. package/dist/{chunk-E57RZXOR.js.map → chunk-T4IYOKHR.js.map} +1 -1
  51. package/dist/{chunk-3H5CFLVK.js → chunk-U6VFS3RD.js} +135 -135
  52. package/dist/{chunk-3H5CFLVK.js.map → chunk-U6VFS3RD.js.map} +1 -1
  53. package/dist/{chunk-RCHTRG7R.js → chunk-UZIICTIY.js} +55 -55
  54. package/dist/{chunk-RCHTRG7R.js.map → chunk-UZIICTIY.js.map} +1 -1
  55. package/dist/{chunk-TCP45Q4B.js → chunk-WJENX6KB.js} +9 -9
  56. package/dist/{chunk-TCP45Q4B.js.map → chunk-WJENX6KB.js.map} +1 -1
  57. package/dist/{chunk-PYNXIDG3.mjs → chunk-WS3IJFPW.mjs} +3 -3
  58. package/dist/{chunk-PYNXIDG3.mjs.map → chunk-WS3IJFPW.mjs.map} +1 -1
  59. package/dist/{chunk-Q7HRCCFT.js → chunk-ZDXEGSCF.js} +45 -45
  60. package/dist/{chunk-Q7HRCCFT.js.map → chunk-ZDXEGSCF.js.map} +1 -1
  61. package/dist/{chunk-PCUINUIC.mjs → chunk-ZQEMKEEH.mjs} +3 -3
  62. package/dist/{chunk-PCUINUIC.mjs.map → chunk-ZQEMKEEH.mjs.map} +1 -1
  63. package/dist/{chunk-E6C7MFHJ.mjs → chunk-ZQRUAXGP.mjs} +164 -218
  64. package/dist/chunk-ZQRUAXGP.mjs.map +1 -0
  65. package/dist/index.d.mts +43 -42
  66. package/dist/index.d.ts +43 -42
  67. package/dist/index.js +662 -670
  68. package/dist/index.mjs +1 -1
  69. package/dist/platform/admin/index.js +9 -9
  70. package/dist/platform/admin/index.mjs +3 -3
  71. package/dist/platform/agents-workspace.js +6 -6
  72. package/dist/platform/agents-workspace.mjs +5 -5
  73. package/dist/platform/app-shell.js +3 -3
  74. package/dist/platform/app-shell.mjs +2 -2
  75. package/dist/platform/auth/index.js +21 -21
  76. package/dist/platform/auth/index.mjs +3 -3
  77. package/dist/platform/billing/index.js +3 -3
  78. package/dist/platform/billing/index.mjs +2 -2
  79. package/dist/platform/impersonation/index.js +3 -3
  80. package/dist/platform/impersonation/index.mjs +2 -2
  81. package/dist/platform/index.d.mts +1 -1
  82. package/dist/platform/index.d.ts +1 -1
  83. package/dist/platform/index.js +74 -74
  84. package/dist/platform/index.mjs +17 -17
  85. package/dist/platform/pages/index.d.mts +93 -4
  86. package/dist/platform/pages/index.d.ts +93 -4
  87. package/dist/platform/pages/index.js +1009 -575
  88. package/dist/platform/pages/index.js.map +1 -1
  89. package/dist/platform/pages/index.mjs +805 -372
  90. package/dist/platform/pages/index.mjs.map +1 -1
  91. package/dist/platform/settings/index.js +6 -6
  92. package/dist/platform/settings/index.mjs +5 -5
  93. package/dist/platform/workflow-canvas-shell.js +4 -4
  94. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  95. package/package.json +1 -1
  96. package/dist/chunk-E6C7MFHJ.mjs.map +0 -1
  97. package/dist/chunk-FNA66TT4.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../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/datasources-page-view.tsx","../../../src/platform/pages/dashboard-page-view.tsx","../../../src/platform/pages/agents-index-page-view.tsx","../../../src/platform/pages/workflows-page-view.tsx","../../../src/platform/pages/workflow-runs-page-view.tsx","../../../src/platform/pages/run-timeline-page-view.tsx","../../../src/platform/pages/connections-page-view.tsx","../../../src/platform/pages/credentials-page-view.tsx","../../../src/platform/pages/agents-workspace-page-view.tsx"],"names":["useState","jsx","jsxs","Fragment","CpuChipIcon","WrenchScrewdriverIcon","CubeTransparentIcon","ChatBubbleLeftEllipsisIcon","useMemo","ClockIcon","LOCALE_OPTIONS","useEffect","TrashIcon","LinkIcon"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useState } from 'react'\nimport {\n Badge,\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\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 searchPlaceholder?: 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 [searchTerm, setSearchTerm] = useState('')\n\n const allModels = models\n const filteredModels = searchTerm.trim()\n ? allModels.filter((model) => model.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allModels\n const isEmpty = allModels.length === 0\n\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredModels.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\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 SearchBar,\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 // Identity\n role?: string\n description?: string\n avatar?: string\n // Model\n modelId: string\n connectionId?: string\n framework?: string\n // Prompts\n systemPrompt: string\n userPrompt?: string\n // Decoding params\n maxTokens: number\n temperature: number\n topP?: number\n topK?: number\n // Metadata\n difficulty?: string\n tags?: string[]\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\n\n const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }))\n\n const allAgents = agents\n const filteredAgents = searchTerm.trim()\n ? allAgents.filter((agent) => String(agent.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allAgents\n const isEmpty = allAgents.length === 0\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={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\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 ) : isEmpty ? (\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 {filteredAgents.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 SearchBar,\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\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 allPrompts = prompts\n const filteredPrompts = searchTerm.trim()\n ? allPrompts.filter((prompt) => {\n const term = searchTerm.trim().toLowerCase()\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const promptText = prompt.prompt ?? ''\n return (\n agentName.toLowerCase().includes(term) ||\n promptText.toLowerCase().includes(term)\n )\n })\n : allPrompts\n const isEmpty = allPrompts.length === 0\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredPrompts.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\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 SearchBar,\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\n\n const allTools = tools\n const filteredTools = searchTerm.trim()\n ? allTools.filter((tool) => tool.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTools\n const isEmpty = allTools.length === 0\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredTools.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\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-slate-700 dark:text-slate-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-slate-300 text-indigo-600 focus:ring-2 focus:ring-indigo-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]\"\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=\"catalog.get_product_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 SearchBar,\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\n\n const allRules = rules\n const filteredRules = searchTerm.trim()\n ? allRules.filter((rule) => (rule.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allRules\n const isEmpty = allRules.length === 0\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRules.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\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 } from 'react'\nimport { CircleStackIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n HeroSection,\n PageEmptyState,\n Badge,\n SearchBar,\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 // AWS managed services (icepanel.io / official AWS Architecture Icons)\n neptune: '/logos/datasources/neptune.svg',\n timestream: '/logos/datasources/timestream.svg',\n opensearch: '/logos/datasources/opensearch.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 [searchTerm, setSearchTerm] = useState('')\n const [localDatasources, setLocalDatasources] = useState<DataSource[]>(\n useSampleData ? SAMPLE_DATASOURCES : []\n )\n\n const allDatasources = externalDatasources ?? localDatasources\n const datasources = searchTerm.trim()\n ? allDatasources.filter((ds) => (ds.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allDatasources\n const isEmpty = allDatasources.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 <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\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=\"liquid-surface flex h-11 w-11 items-center justify-center rounded-lg\">\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-slate-500 dark:text-slate-400\">\n {ds.readOnly && (\n <Badge color=\"blue\" size=\"xs\">Read-only</Badge>\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-slate-500 dark:text-slate-400\">\n <div>{labels.dialect}: {dialectLabel}</div>\n {ds.slug && <div className=\"truncate text-slate-400 dark:text-slate-500\">/{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","import type { ReactNode } from 'react'\nimport { ManagementPageLayout } from '@ui/index'\nimport type { AnalyticsSummary } from '../workflow-api-client'\n\nexport type DashboardLabels = {\n title: string\n subtitle: string\n totalRuns: string\n successRate: string\n avgDuration: string\n runsByStatus: string\n perWorkflow: string\n noData: string\n runs: string\n}\n\ntype Props = {\n labels: DashboardLabels\n summary: AnalyticsSummary | null\n loading: boolean\n /**\n * App-branded logo node rendered in the dashboard hero. Each app passes\n * its own logo (typically a pair of light/dark <img> tags toggled via\n * Tailwind `dark:` classes) so this view stays brand-agnostic.\n */\n appLogo: ReactNode\n}\n\n/**\n * Platform dashboard — a centered hero with the app's logo + subtitle.\n * Metrics and workflow tables live on dedicated pages (Analytics /\n * Workflow Runs); this view intentionally renders only the landing chrome.\n *\n * `summary` and `loading` are kept on the prop type so the page that\n * mounts this view doesn't have to change, but we intentionally don't\n * render them here.\n */\nexport function DashboardPageView({ labels, appLogo }: Props) {\n const hero = (\n <div className=\"w-full text-center\">\n <div className=\"flex justify-center mb-6\">{appLogo}</div>\n <p className=\"mt-3 text-base text-slate-600 dark:text-slate-300\">\n {labels.subtitle}\n </p>\n </div>\n )\n\n return <ManagementPageLayout hero={hero} content={null} />\n}\n","import { useState } from 'react'\nimport {\n CpuChipIcon,\n WrenchScrewdriverIcon,\n CubeTransparentIcon,\n ChatBubbleLeftEllipsisIcon,\n} from '@heroicons/react/24/outline'\nimport {\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n SearchBar,\n} from '@ui/index'\nimport { useLink } from '@ui/lib/router-context'\n\nexport type AgentsIndexLabels = {\n title: string\n subtitle: string\n configTitle: string\n configSubtitle: string\n toolDefinitionsTitle: string\n toolDefinitionsSubtitle: string\n modelsTitle: string\n modelsSubtitle: string\n promptsTitle: string\n promptsSubtitle: string\n searchPlaceholder?: string\n}\n\ntype Tile = {\n id: string\n title: string\n subtitle: string\n href: string\n gradient: string\n icon: typeof CpuChipIcon\n}\n\nexport function AgentsIndexPageView({ labels }: { labels: AgentsIndexLabels }) {\n const Link = useLink()\n const [searchTerm, setSearchTerm] = useState('')\n\n const allTiles: Tile[] = [\n { id: 'config', title: labels.configTitle, subtitle: labels.configSubtitle, href: '/agents/config', gradient: 'from-violet-500 to-indigo-700', icon: CpuChipIcon },\n { id: 'tools', title: labels.toolDefinitionsTitle, subtitle: labels.toolDefinitionsSubtitle, href: '/agents/tool-definitions', gradient: 'from-amber-500 to-orange-700', icon: WrenchScrewdriverIcon },\n { id: 'models', title: labels.modelsTitle, subtitle: labels.modelsSubtitle, href: '/agents/models', gradient: 'from-emerald-500 to-teal-700', icon: CubeTransparentIcon },\n { id: 'prompts', title: labels.promptsTitle, subtitle: labels.promptsSubtitle, href: '/agents/prompts', gradient: 'from-sky-500 to-blue-700', icon: ChatBubbleLeftEllipsisIcon },\n ]\n\n const filteredTiles = searchTerm.trim()\n ? allTiles.filter((tile) => tile.title.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTiles\n const isEmpty = allTiles.length === 0\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 />\n )\n\n const content = (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredTiles.map((tile) => {\n const Icon = tile.icon\n return (\n <Link key={tile.id} href={tile.href} className=\"block focus:outline-none\">\n <EntityCard\n accentGradient={tile.gradient}\n icon={(\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )}\n title={tile.title}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{tile.subtitle}</p>\n </EntityCard>\n </Link>\n )\n })}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import { RectangleStackIcon } from '@heroicons/react/24/outline'\nimport { Badge, Button, Form, FormActionsRow, FormGrid, FormInput, FormTextarea, InlineForm, SectionHeader, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Text } from '@ui/index'\nimport type { WorkflowsPageViewProps, WorkflowGraph } from '@datatechsolutions/shared-domain/common'\nimport { WorkflowWorkspace } from '../workflow-workspace'\nimport { adaptWorkflowGraphToUi } from '../utils/workflow-graph-adapter'\n\nexport function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }: WorkflowsPageViewProps) {\n const selectedWorkflow = workflows[0] ?? null\n\n return (\n <div className=\"space-y-6\">\n <SectionHeader\n icon={<RectangleStackIcon className=\"h-5 w-5 text-white\" />}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n />\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.add}</Text>\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const name = String(formData.get('name') ?? '').trim()\n const description = String(formData.get('description') ?? '').trim()\n if (!name) return\n onCreate({ name, description })\n event.currentTarget.reset()\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.workflowName} placeholder={labels.workflowNamePlaceholder} required />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.workflowDescriptionPlaceholder} rows={3} />\n <FormActionsRow>\n <Button type=\"submit\">{labels.create}</Button>\n </FormActionsRow>\n </FormGrid>\n </Form>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.registry}</Text>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>{labels.name}</TableHeader>\n <TableHeader>{labels.description}</TableHeader>\n <TableHeader>{labels.version}</TableHeader>\n <TableHeader>{labels.status}</TableHeader>\n <TableHeader>{labels.actions}</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {workflows.map((workflow) => (\n <TableRow key={workflow.id}>\n <TableCell>{workflow.name}</TableCell>\n <TableCell>{workflow.description}</TableCell>\n <TableCell>{String(workflow.version)}</TableCell>\n <TableCell>\n <Badge>{workflow.isDraft ? labels.statusDraft : labels.statusPublished}</Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex flex-col gap-2\">\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n onUpdateMeta({\n workflowId: workflow.id,\n name: workflow.name ?? '',\n description: workflow.description ?? '',\n })\n }}\n >\n <InlineForm>\n <Button type=\"submit\" outline>{labels.saveMeta}</Button>\n </InlineForm>\n </Form>\n <Button type=\"button\" color=\"sky\" onClick={() => onPublish(workflow.id)}>\n {labels.publish}\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.workspace}</Text>\n {selectedWorkflow ? (\n <div className=\"min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden\">\n <WorkflowWorkspace graph={adaptWorkflowGraphToUi(selectedWorkflow.graph as WorkflowGraph) as unknown as WorkflowGraph} />\n </div>\n ) : (\n <Text>{labels.empty}</Text>\n )}\n </section>\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n EntityCard,\n FormSelect,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { WorkflowRun } from '@ui/astrlabe/contracts'\nimport { formatDurationMs } from '../utils/format-duration'\n\nexport type WorkflowRunsLabels = {\n title: string\n subtitle: string\n status: string\n duration: string\n triggeredBy: string\n startedAt: string\n cancel: string\n replay: string\n view: string\n statusPending: string\n statusRunning: string\n statusCompleted: string\n statusFailed: string\n statusCancelled: string\n filterAll: string\n filterStatus: string\n empty: string\n timeline?: string\n searchPlaceholder?: string\n}\n\nconst BADGE_COLOR: Record<string, 'emerald' | 'rose' | 'amber' | 'sky' | 'zinc'> = {\n completed: 'emerald',\n failed: 'rose',\n running: 'sky',\n pending: 'amber',\n cancelled: 'zinc',\n}\n\ntype Props = {\n labels: WorkflowRunsLabels\n runs: WorkflowRun[]\n loading: boolean\n onCancel: (run: WorkflowRun) => void\n onReplay: (run: WorkflowRun) => void\n onView?: (run: WorkflowRun) => void\n onViewTimeline?: (run: WorkflowRun) => void\n}\n\nexport function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onView, onViewTimeline }: Props) {\n const [statusFilter, setStatusFilter] = useState<string>('all')\n const [searchTerm, setSearchTerm] = useState('')\n\n const statusOptions = useMemo(() => ([\n { value: 'all', label: labels.filterAll },\n { value: 'pending', label: labels.statusPending },\n { value: 'running', label: labels.statusRunning },\n { value: 'completed', label: labels.statusCompleted },\n { value: 'failed', label: labels.statusFailed },\n { value: 'cancelled', label: labels.statusCancelled },\n ]), [labels])\n\n const statusLabelFor = (status: string) => {\n switch (status) {\n case 'pending': return labels.statusPending\n case 'running': return labels.statusRunning\n case 'completed': return labels.statusCompleted\n case 'failed': return labels.statusFailed\n case 'cancelled': return labels.statusCancelled\n default: return status\n }\n }\n\n const allRuns = runs\n const term = searchTerm.trim().toLowerCase()\n const filteredRuns = allRuns.filter((run) => {\n if (statusFilter !== 'all' && run.status !== statusFilter) return false\n if (term && !run.id.toLowerCase().includes(term) && !run.workflowId.toLowerCase().includes(term)) {\n return false\n }\n return true\n })\n const isEmpty = allRuns.length === 0\n\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-indigo-500 to-sky-700\"\n toolbar={(\n <div className=\"w-full sm:w-48\">\n <FormSelect\n name=\"statusFilter\"\n label={labels.filterStatus}\n options={statusOptions}\n value={statusFilter}\n onValueChange={setStatusFilter}\n />\n </div>\n )}\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : filteredRuns.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRuns.map((run) => (\n <EntityCard\n key={run.id}\n accentGradient=\"from-indigo-500 to-sky-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400\">\n <ClockIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={run.id.slice(0, 8)}\n subtitle={`${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`}\n status={(\n <Badge color={BADGE_COLOR[run.status] ?? 'zinc'}>\n {statusLabelFor(run.status)}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n {onView && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onView(run)}>{labels.view}</Button>\n )}\n {onViewTimeline && labels.timeline && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onViewTimeline(run)}>{labels.timeline}</Button>\n )}\n <Button type=\"button\" size=\"sm\" outline onClick={() => onReplay(run)}>{labels.replay}</Button>\n {run.status === 'running' && (\n <Button type=\"button\" size=\"sm\" color=\"rose\" onClick={() => onCancel(run)}>{labels.cancel}</Button>\n )}\n </div>\n )}\n >\n <dl className=\"mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.duration}</dt>\n <dd className=\"text-right\">{formatDurationMs(run.totalDurationMs)}</dd>\n <dt>{labels.triggeredBy}</dt>\n <dd className=\"text-right truncate\">{run.triggeredBy || '—'}</dd>\n </dl>\n {run.error && (\n <p className=\"mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400\">{run.error}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import {\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport {\n ExecutionTimelinePanel,\n type ExecutionTimelineEntry,\n type ExecutionTimelineLabels,\n} from '@ui/astrlabe'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport type { RunTimelineEntry } from '../workflow-api-client'\n\nexport type RunTimelineLabels = ExecutionTimelineLabels & {\n title: string\n subtitle: string\n}\n\ntype Props = {\n labels: RunTimelineLabels\n entries: RunTimelineEntry[]\n loading: boolean\n runId: string\n}\n\n/**\n * Astrlabe-shaped wrapper around the shared `ExecutionTimelinePanel`\n * (#68). Adds the page chrome (HeroSection + ManagementPageLayout) so\n * the runs page renders consistently with the rest of the platform.\n * Other apps (kori-erp) can drop `ExecutionTimelinePanel` directly\n * inside their own card layouts without taking on this page wrapper.\n */\nexport function RunTimelinePageView({ labels, entries, loading, runId }: Props) {\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={`${labels.subtitle} — ${runId.slice(0, 8)}`}\n gradient=\"from-indigo-500 to-violet-700\"\n />\n )\n\n if (loading) {\n return <ManagementPageLayout hero={hero} content={<PageLoadingState />} />\n }\n if (entries.length === 0) {\n return (\n <ManagementPageLayout\n hero={hero}\n content={<PageEmptyState title={labels.empty ?? ''} message=\"\" iconName=\"folder-open\" />}\n />\n )\n }\n\n return (\n <ManagementPageLayout\n hero={hero}\n content={(\n <ExecutionTimelinePanel\n entries={entries as ExecutionTimelineEntry[]}\n labels={labels}\n />\n )}\n />\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { LinkIcon } 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 SearchBar,\n} from '@ui/index'\nimport type { ModelProviderType } from '@ui/astrlabe/contracts'\nimport type { ModelProviderConnection } from '../workflow-api-client'\n\nexport type CreateConnectionInput = {\n providerSlug: string\n name: string\n region?: string\n endpoint?: string\n credentialRef?: string\n apiKeyRef?: string\n modelFilter?: string[]\n config?: Record<string, unknown>\n}\n\nexport type UpdateConnectionInput = Partial<Omit<CreateConnectionInput, 'providerSlug'>> & {\n enabled?: boolean\n}\n\n/**\n * Presets per provider — used by the form to surface the fields each\n * provider actually cares about (region for Bedrock/Vertex, endpoint\n * for Ollama/custom, neither for Anthropic/OpenAI hosted APIs).\n * The shape intentionally mirrors `ModelProviderType` in\n * `ui/astrlabe/contracts.ts` so new providers added to the enum\n * automatically get a default row via the fallback map.\n */\nconst PROVIDER_PRESETS: Record<ModelProviderType, {\n label: string\n description: string\n needsRegion?: boolean\n needsEndpoint?: boolean\n defaultRegion?: string\n exampleModels?: string[]\n}> = {\n anthropic_api: {\n label: 'Anthropic API',\n description: 'Claude Opus, Sonnet, Haiku via api.anthropic.com',\n exampleModels: ['claude-opus-4-7', 'claude-sonnet-4-6'],\n },\n openai_api: {\n label: 'OpenAI API',\n description: 'GPT-4o, o3, o4-mini via api.openai.com',\n exampleModels: ['gpt-4o', 'gpt-4o-mini'],\n },\n aws_bedrock: {\n label: 'AWS Bedrock',\n description: 'Anthropic / Meta / Mistral / Nova served through Bedrock',\n needsRegion: true,\n defaultRegion: 'us-east-1',\n exampleModels: ['amazon.nova-lite-v1:0', 'anthropic.claude-3-5-sonnet-20241022-v2:0'],\n },\n google_vertex: {\n label: 'Google Vertex AI',\n description: 'Gemini + third-party models on Vertex',\n needsRegion: true,\n defaultRegion: 'us-central1',\n exampleModels: ['gemini-2.0-flash-exp', 'gemini-1.5-pro'],\n },\n azure_openai: {\n label: 'Azure OpenAI',\n description: 'OpenAI deployments hosted on Azure',\n needsRegion: true,\n needsEndpoint: true,\n defaultRegion: 'eastus',\n },\n groq: {\n label: 'Groq',\n description: 'Low-latency Llama / Mixtral inference via api.groq.com',\n },\n mistral: {\n label: 'Mistral API',\n description: 'mistral.ai hosted open-weight + commercial models',\n },\n huggingface: {\n label: 'Hugging Face',\n description: 'Inference endpoints + serverless inference API',\n needsEndpoint: true,\n },\n ollama: {\n label: 'Ollama',\n description: 'Self-hosted Ollama server — provide the base URL',\n needsEndpoint: true,\n },\n custom: {\n label: 'Custom / OpenAI-compatible',\n description: 'Any OpenAI-API-compatible HTTP endpoint',\n needsEndpoint: true,\n },\n}\n\nconst PROVIDER_OPTIONS = (Object.keys(PROVIDER_PRESETS) as ModelProviderType[]).map((slug) => ({\n value: slug,\n label: PROVIDER_PRESETS[slug].label,\n}))\n\nexport type ConnectionFormValue = {\n providerSlug: ModelProviderType\n name: string\n region: string\n endpoint: string\n /** Plaintext — only present when the user is entering a NEW key. On\n * save we push this to `/organizations/{id}/secrets` and replace\n * with the returned UUID before calling the connections API. */\n apiKey: string\n /** Vault secret UUID — displayed as \"••• (set)\" in the UI. */\n credentialRef: string\n modelFilter: string\n configJson: string\n}\n\nexport type ConnectionsLabels = {\n title: string\n subtitle: string\n add: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n enable: string\n disable: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype CreateSecret = (name: string, value: string) => Promise<{ id: string }>\n\ntype Props = {\n labels: ConnectionsLabels\n connections: ModelProviderConnection[]\n loading: boolean\n onCreate: (input: CreateConnectionInput) => Promise<void>\n onUpdate: (id: string, input: UpdateConnectionInput) => Promise<void>\n onDelete: (connection: ModelProviderConnection) => Promise<void>\n /** Takes a secret name + plaintext value, stores it in the vault and\n * returns the UUID the connections API should reference. */\n onCreateSecret: CreateSecret\n /**\n * Prefix for auto-generated secret names when the user enters a new\n * API key. Final shape is `${prefix}-${providerSlug}-${timestamp}`.\n * Defaults to `'platform'` so consumers that don't override land on a\n * sensible namespace.\n */\n secretNamePrefix?: string\n}\n\nexport function ConnectionsPageView({\n labels,\n connections,\n loading,\n onCreate,\n onUpdate,\n onDelete,\n onCreateSecret,\n secretNamePrefix = 'platform',\n}: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<ModelProviderConnection | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allConnections = connections\n const filteredConnections = searchTerm.trim()\n ? allConnections.filter((conn) => conn.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allConnections\n const isEmpty = allConnections.length === 0\n\n const hero = (\n <HeroSection\n icon={<LinkIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredConnections.map((conn) => (\n <EntityCard\n key={conn.id}\n accentGradient=\"from-sky-500 to-indigo-600\"\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 <LinkIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={conn.name}\n subtitle={providerLabel(conn.providerSlug)}\n status={(\n <div className=\"flex gap-1\">\n <Badge color={conn.enabled ? 'emerald' : 'zinc'}>\n {conn.enabled ? labels.enable : labels.disable}\n </Badge>\n {conn.credentialRef ? (\n <Badge color=\"indigo\">Secret set</Badge>\n ) : (\n <Badge color=\"amber\">No secret</Badge>\n )}\n </div>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(conn)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={async () => {\n if (window.confirm(labels.deleteConfirm)) await onDelete(conn)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n <dl className=\"mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400\">\n {conn.region && <Row label=\"Region\" value={conn.region} />}\n {conn.endpoint && <Row label=\"Endpoint\" value={conn.endpoint} />}\n {conn.modelFilter && conn.modelFilter.length > 0 && (\n <Row label=\"Models\" value={conn.modelFilter.join(', ')} />\n )}\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <ConnectionEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultConnectionFormValue()}\n mode=\"create\"\n onClose={() => setCreateOpen(false)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onCreate(wire as CreateConnectionInput)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ConnectionEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={modelToFormValue(editing)}\n mode=\"edit\"\n onClose={() => setEditing(null)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onUpdate(editing.id, wire as UpdateConnectionInput)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ────────────────────────────────────────────────\n\nfunction ConnectionEditor({\n title,\n saveLabel,\n initial,\n mode,\n onClose,\n onSubmit,\n onCreateSecret,\n secretNamePrefix,\n}: {\n title: string\n saveLabel: string\n initial: ConnectionFormValue\n mode: 'create' | 'edit'\n onClose: () => void\n onSubmit: (wire: CreateConnectionInput | UpdateConnectionInput) => Promise<void>\n onCreateSecret: CreateSecret\n secretNamePrefix: string\n}) {\n const [value, setValue] = useState<ConnectionFormValue>(initial)\n const [submitting, setSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const preset = PROVIDER_PRESETS[value.providerSlug]\n\n const handleSubmit = async () => {\n setError(null)\n setSubmitting(true)\n try {\n // Track whether the user actually rotated the API key so the\n // PATCH can omit `credentialRef` when nothing changed (the\n // backend leaves the existing value alone). For create, we\n // always send whatever was produced.\n let credentialRef = value.credentialRef\n let credentialRefRotated = false\n if (value.apiKey.trim().length > 0) {\n // Push the plaintext key to the vault and replace with the\n // returned UUID. The connections API never sees the raw key.\n const secret = await onCreateSecret(`${secretNamePrefix}-${value.providerSlug}-${Date.now()}`, value.apiKey.trim())\n credentialRef = secret.id\n credentialRefRotated = true\n }\n\n const modelFilter = parseCsv(value.modelFilter)\n let config: Record<string, unknown> | undefined\n const trimmed = value.configJson.trim()\n if (trimmed.length > 0) {\n try {\n const parsed = JSON.parse(trimmed) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('config must be a JSON object')\n }\n config = parsed as Record<string, unknown>\n } catch (e) {\n throw new Error(`Invalid config JSON: ${(e as Error).message}`)\n }\n }\n\n if (mode === 'create') {\n const wire: CreateConnectionInput = {\n providerSlug: value.providerSlug,\n name: value.name.trim(),\n ...(value.region.trim() && { region: value.region.trim() }),\n ...(value.endpoint.trim() && { endpoint: value.endpoint.trim() }),\n ...(credentialRef && { credentialRef }),\n ...(modelFilter.length > 0 && { modelFilter }),\n ...(config && { config }),\n }\n await onSubmit(wire)\n } else {\n const wire: UpdateConnectionInput = {\n name: value.name.trim() || undefined,\n region: value.region.trim() || undefined,\n endpoint: value.endpoint.trim() || undefined,\n // Only thread `credentialRef` when the user actually rotated\n // the key. Omitting it tells the backend to keep the\n // existing pointer intact.\n ...(credentialRefRotated && credentialRef ? { credentialRef } : {}),\n ...(modelFilter.length > 0 ? { modelFilter } : {}),\n ...(config && { config }),\n }\n await onSubmit(wire)\n }\n } catch (e) {\n setError((e as Error).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n // When the user swaps providers during creation, pre-fill a sensible\n // default region so Bedrock / Vertex don't silently submit blank.\n useEffect(() => {\n if (mode === 'create' && preset.needsRegion && !value.region && preset.defaultRegion) {\n setValue((v) => ({ ...v, region: preset.defaultRegion ?? '' }))\n }\n }, [mode, preset, value.region])\n\n const placeholderModels = useMemo(() => {\n return preset.exampleModels?.join(', ') ?? ''\n }, [preset])\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={submitting ? '…' : saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n void handleSubmit()\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormSelect\n label=\"Provider\"\n value={value.providerSlug}\n options={PROVIDER_OPTIONS}\n onValueChange={(slug) => setValue((v) => ({ ...v, providerSlug: slug as ModelProviderType }))}\n disabled={mode === 'edit'}\n hint={preset.description}\n />\n <FormInput\n label=\"Display name\"\n required\n value={value.name}\n onValueChange={(name) => setValue((v) => ({ ...v, name }))}\n placeholder=\"Production Bedrock, Claude dev, …\"\n />\n {preset.needsRegion && (\n <FormInput\n label=\"Region\"\n value={value.region}\n onValueChange={(region) => setValue((v) => ({ ...v, region }))}\n placeholder={preset.defaultRegion}\n />\n )}\n {preset.needsEndpoint && (\n <FormInput\n label=\"Endpoint URL\"\n value={value.endpoint}\n onValueChange={(endpoint) => setValue((v) => ({ ...v, endpoint }))}\n placeholder=\"https://...\"\n />\n )}\n </FormGrid>\n\n <FormInput\n label={value.credentialRef ? 'Rotate API key (leave blank to keep current)' : 'API key'}\n type=\"password\"\n value={value.apiKey}\n onValueChange={(apiKey) => setValue((v) => ({ ...v, apiKey }))}\n placeholder={value.credentialRef ? '••• stored in vault' : 'sk-...'}\n hint={value.credentialRef\n ? `Stored secret: ${value.credentialRef.slice(0, 8)}…`\n : 'Plaintext — pushed to windsock vault on save, never persisted here.'}\n />\n\n <FormInput\n label=\"Model filter (comma-separated, optional)\"\n value={value.modelFilter}\n onValueChange={(modelFilter) => setValue((v) => ({ ...v, modelFilter }))}\n placeholder={placeholderModels}\n hint=\"Leave blank to allow all models the provider exposes.\"\n />\n\n <details className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 text-sm dark:border-slate-700 dark:bg-slate-900/40\">\n <summary className=\"cursor-pointer font-medium text-slate-700 dark:text-slate-200\">\n Advanced config (JSON)\n </summary>\n <div className=\"mt-3\">\n <FormTextarea\n rows={4}\n value={value.configJson}\n onValueChange={(configJson) => setValue((v) => ({ ...v, configJson }))}\n placeholder={'{\\n \"temperature\": 0.2\\n}'}\n hint=\"Free-form JSON passed to the runtime provider — e.g. Bedrock guardrail ids, Azure deployment overrides.\"\n />\n </div>\n </details>\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// ── Helpers ────────────────────────────────────────────────────\n\nfunction Row({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex gap-1 truncate\">\n <dt className=\"font-medium\">{label}:</dt>\n <dd className=\"truncate\">{value}</dd>\n </div>\n )\n}\n\nfunction providerLabel(slug?: string): string {\n if (!slug) return 'Unknown provider'\n const key = slug as ModelProviderType\n return PROVIDER_PRESETS[key]?.label ?? slug\n}\n\nfunction parseCsv(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n\nfunction defaultConnectionFormValue(): ConnectionFormValue {\n return {\n providerSlug: 'anthropic_api',\n name: '',\n region: '',\n endpoint: '',\n apiKey: '',\n credentialRef: '',\n modelFilter: '',\n configJson: '',\n }\n}\n\nfunction modelToFormValue(conn: ModelProviderConnection): ConnectionFormValue {\n return {\n providerSlug: (conn.providerSlug as ModelProviderType) ?? 'custom',\n name: conn.name,\n region: conn.region ?? '',\n endpoint: conn.endpoint ?? '',\n apiKey: '',\n credentialRef: conn.credentialRef ?? '',\n modelFilter: (conn.modelFilter ?? []).join(', '),\n configJson: conn.config ? JSON.stringify(conn.config, null, 2) : '',\n }\n}\n","import { useState, type FormEvent } from 'react'\nimport { KeyIcon, TrashIcon, ArrowPathIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CopyableId,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { SecretSummary } from '../windsock-admin-client'\n\nexport type CredentialFormInput = {\n name: string\n value: string\n secretType: string\n description?: string\n}\n\nexport type CredentialsPageViewLabels = {\n title: string\n subtitle: string\n addCredential: string\n createTitle: string\n name: string\n namePlaceholder: string\n value: string\n valuePlaceholder: string\n type: string\n typeGeneric: string\n typeApiKey: string\n typeOAuth: string\n typePassword: string\n description: string\n descriptionPlaceholder: string\n save: string\n rotate: string\n disable: string\n disableConfirm: string\n expiresAt: string\n createdAt: string\n neverExpires: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: CredentialsPageViewLabels\n credentials: SecretSummary[]\n loading: boolean\n onCreate: (input: CredentialFormInput) => void\n onRotate: (secret: SecretSummary, newValue: string) => void\n onDisable: (secret: SecretSummary) => void\n}\n\nexport function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate, onDisable }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [rotateFor, setRotateFor] = useState<SecretSummary | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allCredentials = credentials\n const filteredCredentials = searchTerm.trim()\n ? allCredentials.filter((secret) => secret.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allCredentials\n const isEmpty = allCredentials.length === 0\n\n const typeOptions = [\n { value: 'generic', label: labels.typeGeneric },\n { value: 'api_key', label: labels.typeApiKey },\n { value: 'oauth', label: labels.typeOAuth },\n { value: 'password', label: labels.typePassword },\n ]\n\n const hero = (\n <HeroSection\n icon={<KeyIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-rose-500 to-orange-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredCredentials.map((secret) => (\n <EntityCard\n key={secret.secretId}\n accentGradient=\"from-rose-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400\">\n <KeyIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={secret.name}\n subtitle={secret.secretType}\n status={(\n <Badge color={secret.disabled ? 'zinc' : 'emerald'}>\n {secret.disabled ? labels.disable : 'Active'}\n </Badge>\n )}\n footer={(\n <div className=\"flex items-center justify-between gap-2\">\n <CopyableId id={secret.secretId} />\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setRotateFor(secret)}>\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.rotate}\n </Button>\n {!secret.disabled && (\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.disableConfirm)) onDisable(secret)\n }}\n >\n <TrashIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.disable}\n </Button>\n )}\n </div>\n </div>\n )}\n >\n {secret.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{secret.description}</p>\n )}\n <dl className=\"mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.createdAt}</dt>\n <dd className=\"text-right\">{new Date(secret.createdAt).toLocaleDateString()}</dd>\n <dt>{labels.expiresAt}</dt>\n <dd className=\"text-right\">{secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires}</dd>\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\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=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const value = String(formData.get('value') ?? '')\n const secretType = String(formData.get('secretType') ?? 'generic')\n const description = String(formData.get('description') ?? '').trim() || undefined\n if (!name || !value) return\n onCreate({ name, value, secretType, description })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.namePlaceholder} required />\n <FormSelect name=\"secretType\" label={labels.type} options={typeOptions} defaultValue=\"generic\" />\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.descriptionPlaceholder} rows={2} />\n </FormGrid>\n </GlassModal>\n\n <GlassModal\n open={rotateFor !== null}\n onClose={() => setRotateFor(null)}\n title={`${labels.rotate}: ${rotateFor?.name ?? ''}`}\n maxWidth=\"md\"\n showFormFooter\n submitLabel={labels.rotate}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const value = String(formData.get('value') ?? '')\n if (!value || !rotateFor) return\n onRotate(rotateFor, value)\n setRotateFor(null)\n }}\n >\n <FormGrid>\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n","import { useEffect, useMemo, useState, type FormEvent } from 'react'\nimport {\n CpuChipIcon,\n ChatBubbleLeftEllipsisIcon,\n WrenchScrewdriverIcon,\n CubeTransparentIcon,\n PlusIcon,\n TrashIcon,\n LinkIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Avatar,\n Badge,\n Button,\n CreateActionButton,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ListCard,\n ListCardItem,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n SectionCard,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@ui/index'\nimport type { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow'\nimport type { AgentModel, AgentTool, ModelProviderType } from '../../astrlabe/contracts'\nimport type { AgentWithPrompts } from '../../astrlabe'\nimport type { ModelProviderConnection } from '../workflow-api-client'\nimport type { AgentConfigFormInput } from './agents-config-page-view'\nimport type { PromptFormInput } from './agents-prompts-page-view'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Labels\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * All copy the workspace renders. Caller-supplied so the consuming app\n * stays in control of its i18n catalog. Every key must be supplied — no\n * silent fallbacks — so we catch missing translations at type-check time.\n */\nexport type AgentsWorkspaceLabels = {\n // Hero / page chrome\n title: string\n subtitle: string\n addAgent: string\n searchPlaceholder: string\n empty: string\n emptyMessage: string\n noSelection: string\n noSelectionMessage: string\n\n // Tabs\n generalTab: string\n promptTab: string\n toolsTab: string\n modelTab: string\n\n // Geral (general) tab\n generalSection: string\n name: string\n description: string\n role: string\n rolePlaceholder: string\n status: string\n statusDraft: string\n statusActive: string\n statusArchived: string\n maxTokens: string\n temperature: string\n save: string\n saving: string\n deleteAgent: string\n deleteConfirm: string\n\n // Prompt tab\n promptSection: string\n promptCurrent: string\n promptVersions: string\n promptVersionsEmpty: string\n addPrompt: string\n activate: string\n activated: string\n promptLocale: string\n promptIsActive: string\n promptText: string\n promptReason: string\n promptSystemPrompt: string\n promptUserTemplate: string\n\n // Tools tab\n toolsSection: string\n toolsAttached: string\n toolsAvailable: string\n toolsEmpty: string\n attachTool: string\n detachTool: string\n\n // Model tab\n modelSection: string\n model: string\n connection: string\n connectionEmpty: string\n modelEmpty: string\n\n // Create dialog (richer version inspired by the landing-page gallery)\n createAgentTitle: string\n createAgentEyebrow?: string\n presetTitle?: string\n presetSubtitle?: string\n presetCustom?: string\n presetCustomHint?: string\n identitySection?: string\n identitySubtitle?: string\n avatarLabel?: string\n namePlaceholder?: string\n behaviorSection?: string\n behaviorSubtitle?: string\n promptPlaceholder?: string\n // Connection + framework\n connectionLabel?: string\n connectionPickPrompt?: string\n connectionInline?: string\n frameworkLabel?: string\n frameworkAnthropic?: string\n frameworkLangChain?: string\n frameworkCrewAI?: string\n frameworkGoogleADK?: string\n frameworkOpenAI?: string\n // User prompt template\n userPromptLabel?: string\n userPromptPlaceholder?: string\n // Decoding extras\n topPLabel?: string\n topKLabel?: string\n // Metadata section\n metadataSection?: string\n metadataSubtitle?: string\n difficultyLabel?: string\n difficultyBeginner?: string\n difficultyIntermediate?: string\n difficultyAdvanced?: string\n difficultyExpert?: string\n tagsLabel?: string\n tagsPlaceholder?: string\n outputSchemaLabel?: string\n outputSchemaPlaceholder?: string\n descriptionLabel?: string\n descriptionPlaceholder?: string\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type AgentsWorkspacePageViewProps = {\n labels: AgentsWorkspaceLabels\n agents: AgentWithPrompts[]\n models: AgentModel[]\n tools: AgentTool[]\n connections: ModelProviderConnection[]\n loading?: boolean\n /**\n * Per-agent prompt rows (system-prompt history). The page itself does\n * not own loading them — the caller resolves them per agent and feeds\n * the slice corresponding to the currently selected agent via this\n * map keyed by agentId. The view falls back to `[]` for unknown ids.\n */\n promptsByAgent?: Record<string, AgentPrompt[]>\n onSelectAgent?: (agentId: string | null) => void\n onCreateAgent: (input: AgentConfigFormInput) => Promise<void>\n onUpdateAgent: (id: string, input: AgentConfigFormInput) => Promise<void>\n onDeleteAgent: (id: string) => Promise<void>\n onCreatePrompt: (agentId: string, input: PromptFormInput) => Promise<void>\n onActivatePrompt: (agentId: string, promptId: string) => Promise<void>\n onAttachTool: (agentId: string, toolId: string) => Promise<void>\n onDetachTool: (agentId: string, toolId: string) => Promise<void>\n onUpdateModel: (agentId: string, modelId: string, connectionId: string) => Promise<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\n// ─────────────────────────────────────────────────────────────────────────────\n// Page-view\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function AgentsWorkspacePageView({\n labels,\n agents,\n models,\n tools,\n connections,\n loading,\n promptsByAgent = {},\n onSelectAgent,\n onCreateAgent,\n onUpdateAgent,\n onDeleteAgent,\n onCreatePrompt,\n onActivatePrompt,\n onAttachTool,\n onDetachTool,\n onUpdateModel,\n}: AgentsWorkspacePageViewProps) {\n const [searchTerm, setSearchTerm] = useState('')\n const [createOpen, setCreateOpen] = useState(false)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n\n // Auto-select the first agent when the list resolves so the right\n // pane is never empty unless the user explicitly emptied it.\n useEffect(() => {\n if (!selectedId && agents.length > 0) {\n const first = String(agents[0].agentId ?? agents[0].id ?? '')\n if (first) {\n setSelectedId(first)\n onSelectAgent?.(first)\n }\n }\n }, [agents, selectedId, onSelectAgent])\n\n const filteredAgents = useMemo(() => {\n const term = searchTerm.trim().toLowerCase()\n if (!term) return agents\n return agents.filter((a) => String(a.name ?? '').toLowerCase().includes(term))\n }, [agents, searchTerm])\n\n const selectedAgent = useMemo(() => {\n if (!selectedId) return null\n return (\n agents.find((a) => String(a.agentId ?? a.id ?? '') === selectedId) ?? null\n )\n }, [agents, selectedId])\n\n const isEmpty = agents.length === 0\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 actions={(\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 ) : isEmpty ? (\n <PageEmptyState\n title={labels.empty}\n message={labels.emptyMessage}\n iconName=\"folder-open\"\n />\n ) : (\n <div className=\"space-y-4\">\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder}\n />\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-[20rem_minmax(0,1fr)]\">\n {/* Sidebar — list of agents */}\n <div className=\"lg:sticky lg:top-4\">\n <ListCard variant=\"glass\">\n {filteredAgents.map((agent) => {\n const id = String(agent.agentId ?? agent.id ?? '')\n const active = id === selectedId\n const initials = deriveInitials(String(agent.name ?? id))\n const modelName =\n models.find((m) => m.id === String(agent.modelId ?? ''))?.name ??\n String(agent.modelId ?? '')\n return (\n <ListCardItem\n key={id}\n leading={<Avatar tone={active ? 'violet' : 'slate'} initials={initials} />}\n trailing={agent.activePromptVersion > 0 ? (\n <Badge color=\"emerald\">v{agent.activePromptVersion}</Badge>\n ) : (\n <Badge color=\"zinc\">draft</Badge>\n )}\n pressable\n onPress={() => {\n setSelectedId(id)\n onSelectAgent?.(id)\n }}\n className={active ? 'bg-violet-500/5 dark:bg-violet-400/10' : ''}\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {String(agent.name ?? id)}\n </p>\n {modelName && (\n <p className=\"truncate text-xs text-slate-500 dark:text-slate-400\">\n {modelName}\n </p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n </div>\n\n {/* Detail — tabs for the selected agent */}\n <div>\n {selectedAgent ? (\n <AgentDetail\n key={String(selectedAgent.agentId ?? selectedAgent.id ?? '')}\n agent={selectedAgent}\n labels={labels}\n models={models}\n tools={tools}\n connections={connections}\n prompts={promptsByAgent[String(selectedAgent.agentId ?? selectedAgent.id ?? '')] ?? []}\n onUpdateAgent={onUpdateAgent}\n onDeleteAgent={onDeleteAgent}\n onCreatePrompt={onCreatePrompt}\n onActivatePrompt={onActivatePrompt}\n onAttachTool={onAttachTool}\n onDetachTool={onDetachTool}\n onUpdateModel={onUpdateModel}\n onCleared={() => {\n setSelectedId(null)\n onSelectAgent?.(null)\n }}\n />\n ) : (\n <SectionCard\n header={{\n icon: <CpuChipIcon className=\"h-4 w-4\" />,\n title: labels.noSelection,\n subtitle: labels.noSelectionMessage,\n }}\n >\n <PageEmptyState\n title={labels.noSelection}\n message={labels.noSelectionMessage}\n iconName=\"folder-open\"\n />\n </SectionCard>\n )}\n </div>\n </div>\n </div>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <CreateAgentDialog\n labels={labels}\n models={models}\n connections={connections}\n onClose={() => setCreateOpen(false)}\n onSubmit={async (input) => {\n await onCreateAgent(input)\n setCreateOpen(false)\n }}\n />\n )}\n </>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Detail pane — tabs for the selected agent\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype AgentDetailProps = {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n models: AgentModel[]\n tools: AgentTool[]\n connections: ModelProviderConnection[]\n prompts: AgentPrompt[]\n onUpdateAgent: (id: string, input: AgentConfigFormInput) => Promise<void>\n onDeleteAgent: (id: string) => Promise<void>\n onCreatePrompt: (agentId: string, input: PromptFormInput) => Promise<void>\n onActivatePrompt: (agentId: string, promptId: string) => Promise<void>\n onAttachTool: (agentId: string, toolId: string) => Promise<void>\n onDetachTool: (agentId: string, toolId: string) => Promise<void>\n onUpdateModel: (agentId: string, modelId: string, connectionId: string) => Promise<void>\n onCleared: () => void\n}\n\nfunction AgentDetail({\n agent,\n labels,\n models,\n tools,\n connections,\n prompts,\n onUpdateAgent,\n onDeleteAgent,\n onCreatePrompt,\n onActivatePrompt,\n onAttachTool,\n onDetachTool,\n onUpdateModel,\n onCleared,\n}: AgentDetailProps) {\n const agentId = String(agent.agentId ?? agent.id ?? '')\n\n return (\n <SectionCard\n header={{\n icon: <CpuChipIcon className=\"h-4 w-4\" />,\n title: String(agent.name ?? agentId),\n subtitle: String(agent.description ?? ''),\n }}\n actions={(\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={async () => {\n if (window.confirm(labels.deleteConfirm)) {\n await onDeleteAgent(agentId)\n onCleared()\n }\n }}\n >\n <TrashIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.deleteAgent}</span>\n </Button>\n )}\n >\n <Tabs defaultValue=\"general\" className=\"w-full\">\n <TabsList className=\"bg-white/40 dark:bg-white/[0.06]\">\n <TabsTrigger value=\"general\">{labels.generalTab}</TabsTrigger>\n <TabsTrigger value=\"prompt\">{labels.promptTab}</TabsTrigger>\n <TabsTrigger value=\"tools\">{labels.toolsTab}</TabsTrigger>\n <TabsTrigger value=\"model\">{labels.modelTab}</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\" className=\"space-y-4 pt-4\">\n <GeneralTab agent={agent} labels={labels} onSubmit={(input) => onUpdateAgent(agentId, input)} />\n </TabsContent>\n\n <TabsContent value=\"prompt\" className=\"space-y-4 pt-4\">\n <PromptTab\n agent={agent}\n labels={labels}\n prompts={prompts}\n onCreate={(input) => onCreatePrompt(agentId, input)}\n onActivate={(promptId) => onActivatePrompt(agentId, promptId)}\n />\n </TabsContent>\n\n <TabsContent value=\"tools\" className=\"space-y-4 pt-4\">\n <ToolsTab\n agent={agent}\n labels={labels}\n tools={tools}\n onAttach={(toolId) => onAttachTool(agentId, toolId)}\n onDetach={(toolId) => onDetachTool(agentId, toolId)}\n />\n </TabsContent>\n\n <TabsContent value=\"model\" className=\"space-y-4 pt-4\">\n <ModelTab\n agent={agent}\n labels={labels}\n models={models}\n connections={connections}\n onSubmit={(modelId, connectionId) => onUpdateModel(agentId, modelId, connectionId)}\n />\n </TabsContent>\n </Tabs>\n </SectionCard>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Geral tab\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction GeneralTab({\n agent,\n labels,\n onSubmit,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n onSubmit: (input: AgentConfigFormInput) => Promise<void>\n}) {\n const [submitting, setSubmitting] = useState(false)\n\n const initial: AgentConfigFormInput = {\n agentId: String(agent.agentId ?? agent.id ?? ''),\n name: String(agent.name ?? ''),\n modelId: String(agent.modelId ?? ''),\n systemPrompt: String((agent as Record<string, unknown>).systemPrompt ?? ''),\n maxTokens: Number(agent.maxTokens ?? 2048),\n temperature: Number((agent as Record<string, unknown>).temperature ?? 0.2),\n }\n const initialDescription = String(agent.description ?? '')\n const initialRole = String(agent.role ?? '')\n const initialStatus = String(agent.status ?? 'draft')\n\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <CpuChipIcon className=\"h-4 w-4\" />,\n title: labels.generalSection,\n }}\n >\n <form\n onSubmit={async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n setSubmitting(true)\n try {\n const form = new FormData(event.currentTarget)\n await onSubmit({\n agentId: initial.agentId,\n name: String(form.get('name') ?? '').trim() || initial.name,\n modelId: String(form.get('modelId') ?? initial.modelId),\n systemPrompt: initial.systemPrompt,\n maxTokens: Number(form.get('maxTokens') ?? initial.maxTokens),\n temperature: Number(form.get('temperature') ?? initial.temperature),\n })\n } finally {\n setSubmitting(false)\n }\n }}\n className=\"space-y-4\"\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} defaultValue={initial.name} required />\n <FormSelect\n name=\"status\"\n label={labels.status}\n defaultValue={initialStatus}\n options={[\n { value: 'draft', label: labels.statusDraft },\n { value: 'active', label: labels.statusActive },\n { value: 'archived', label: labels.statusArchived },\n ]}\n />\n <FormInput name=\"role\" label={labels.role} placeholder={labels.rolePlaceholder} defaultValue={initialRole} />\n <FormInput\n name=\"maxTokens\"\n label={labels.maxTokens}\n type=\"number\"\n defaultValue={String(initial.maxTokens)}\n />\n <FormInput\n name=\"temperature\"\n label={labels.temperature}\n type=\"number\"\n step={0.1}\n min={0}\n max={2}\n defaultValue={String(initial.temperature)}\n />\n </FormGrid>\n <FormTextarea name=\"description\" label={labels.description} defaultValue={initialDescription} rows={3} />\n <div className=\"flex justify-end\">\n <Button type=\"submit\" color=\"indigo\" disabled={submitting}>\n {submitting ? labels.saving : labels.save}\n </Button>\n </div>\n </form>\n </SectionCard>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Prompt tab\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction PromptTab({\n agent,\n labels,\n prompts,\n onCreate,\n onActivate,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n prompts: AgentPrompt[]\n onCreate: (input: PromptFormInput) => Promise<void>\n onActivate: (promptId: string) => Promise<void>\n}) {\n const [addOpen, setAddOpen] = useState(false)\n const agentId = String(agent.agentId ?? agent.id ?? '')\n const currentSystem = String((agent as Record<string, unknown>).systemPrompt ?? '')\n\n return (\n <div className=\"space-y-4\">\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <ChatBubbleLeftEllipsisIcon className=\"h-4 w-4\" />,\n title: labels.promptSection,\n subtitle: labels.promptCurrent,\n }}\n >\n <pre className=\"whitespace-pre-wrap rounded-lg border border-slate-200/70 bg-slate-50/60 p-3 text-xs text-slate-700 dark:border-slate-700 dark:bg-slate-900/40 dark:text-slate-200\">\n {currentSystem || '—'}\n </pre>\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <ChatBubbleLeftEllipsisIcon className=\"h-4 w-4\" />,\n title: labels.promptVersions,\n }}\n actions={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => setAddOpen(true)}>\n <PlusIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.addPrompt}</span>\n </Button>\n )}\n >\n {prompts.length === 0 ? (\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{labels.promptVersionsEmpty}</p>\n ) : (\n <ListCard>\n {prompts.map((prompt) => {\n const id = `${prompt.agentId}:${prompt.locale}:${prompt.version}`\n return (\n <ListCardItem\n key={id}\n leading={<Badge color={prompt.isActive ? 'emerald' : 'zinc'}>v{prompt.version}</Badge>}\n trailing={\n prompt.isActive ? (\n <Badge color=\"emerald\">{labels.activated}</Badge>\n ) : (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onActivate(id)}>\n {labels.activate}\n </Button>\n )\n }\n >\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200\">\n {prompt.locale}\n </p>\n {prompt.prompt && (\n <p className=\"mt-1 line-clamp-2 text-xs text-slate-500 dark:text-slate-400\">\n {prompt.prompt}\n </p>\n )}\n </ListCardItem>\n )\n })}\n </ListCard>\n )}\n </SectionCard>\n\n {addOpen && (\n <GlassModal\n open\n onClose={() => setAddOpen(false)}\n title={labels.addPrompt}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={async (event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n await onCreate({\n agentId,\n locale: String(form.get('locale') ?? 'en'),\n prompt: String(form.get('prompt') ?? '').trim(),\n systemPrompt: String(form.get('systemPrompt') ?? '').trim() || undefined,\n userTemplate: String(form.get('userTemplate') ?? '').trim() || undefined,\n reason: String(form.get('reason') ?? '').trim() || undefined,\n isActive: String(form.get('isActive') ?? 'true') === 'true',\n })\n setAddOpen(false)\n }}\n >\n <FormGrid>\n <FormSelect name=\"locale\" label={labels.promptLocale} options={LOCALE_OPTIONS} defaultValue=\"en\" />\n <FormSelect\n name=\"isActive\"\n label={labels.promptIsActive}\n options={[\n { value: 'true', label: labels.promptIsActive },\n { value: 'false', label: '—' },\n ]}\n defaultValue=\"true\"\n />\n <FormInput name=\"reason\" label={labels.promptReason} />\n <FormTextarea name=\"systemPrompt\" label={labels.promptSystemPrompt} rows={3} />\n <FormTextarea name=\"userTemplate\" label={labels.promptUserTemplate} rows={3} />\n <FormTextarea name=\"prompt\" label={labels.promptText} rows={6} required />\n </FormGrid>\n </GlassModal>\n )}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tools tab\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction ToolsTab({\n agent,\n labels,\n tools,\n onAttach,\n onDetach,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n tools: AgentTool[]\n onAttach: (toolId: string) => Promise<void>\n onDetach: (toolId: string) => Promise<void>\n}) {\n // The canonical attached-tool list is `enabledToolIds` (mirrors\n // `AgentPersistPayload`). Older seeds may serialise it as `toolIds`,\n // so we read both — write-back always uses `enabledToolIds`.\n const raw = agent as Record<string, unknown>\n const attached = useMemo(() => {\n const ids = (raw.enabledToolIds ?? raw.toolIds) as unknown\n return Array.isArray(ids) ? ids.filter((id): id is string => typeof id === 'string') : []\n }, [raw])\n const attachedSet = useMemo(() => new Set(attached), [attached])\n\n const attachedTools = tools.filter((tool) => attachedSet.has(tool.agentToolId))\n const availableTools = tools.filter((tool) => !attachedSet.has(tool.agentToolId))\n\n return (\n <div className=\"space-y-4\">\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <WrenchScrewdriverIcon className=\"h-4 w-4\" />,\n title: labels.toolsAttached,\n }}\n >\n {attachedTools.length === 0 ? (\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{labels.toolsEmpty}</p>\n ) : (\n <ListCard>\n {attachedTools.map((tool) => (\n <ListCardItem\n key={tool.agentToolId}\n leading={(\n <div className=\"flex h-9 w-9 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-5 w-5\" />\n </div>\n )}\n trailing={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => onDetach(tool.agentToolId)}>\n {labels.detachTool}\n </Button>\n )}\n >\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200\">{tool.name}</p>\n {tool.description && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-slate-500 dark:text-slate-400\">\n {tool.description}\n </p>\n )}\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <WrenchScrewdriverIcon className=\"h-4 w-4\" />,\n title: labels.toolsAvailable,\n }}\n >\n {availableTools.length === 0 ? (\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{labels.toolsEmpty}</p>\n ) : (\n <ListCard>\n {availableTools.map((tool) => (\n <ListCardItem\n key={tool.agentToolId}\n leading={(\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-slate-500/10 text-slate-600 dark:bg-slate-500/20 dark:text-slate-300\">\n <WrenchScrewdriverIcon className=\"h-5 w-5\" />\n </div>\n )}\n trailing={(\n <Button type=\"button\" size=\"sm\" color=\"indigo\" onClick={() => onAttach(tool.agentToolId)}>\n <PlusIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.attachTool}</span>\n </Button>\n )}\n >\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200\">{tool.name}</p>\n {tool.description && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-slate-500 dark:text-slate-400\">\n {tool.description}\n </p>\n )}\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </SectionCard>\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Model tab — picks the model + connection\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction ModelTab({\n agent,\n labels,\n models,\n connections,\n onSubmit,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n models: AgentModel[]\n connections: ModelProviderConnection[]\n onSubmit: (modelId: string, connectionId: string) => Promise<void>\n}) {\n const initialModelId = String(agent.modelId ?? '')\n const initialConnectionId = String(agent.connectionId ?? '')\n const [modelId, setModelId] = useState(initialModelId)\n const [connectionId, setConnectionId] = useState(initialConnectionId)\n const [submitting, setSubmitting] = useState(false)\n\n const selectedModel = models.find((m) => m.id === modelId) ?? null\n\n // Narrow the connection list to ones that match the chosen model's\n // provider when possible — the wire schema has `provider` (a free\n // string slug) on the model and `providerSlug` on the connection.\n // We surface every connection if no match exists so the user can\n // still pick a custom binding.\n const matchingConnections = useMemo(() => {\n if (!selectedModel) return connections\n const slug = selectedModel.provider as ModelProviderType | undefined\n if (!slug) return connections\n const matches = connections.filter(\n (c) => (c.providerSlug ?? '') === slug || (c.providerSlug ?? '').startsWith(String(slug)),\n )\n return matches.length > 0 ? matches : connections\n }, [selectedModel, connections])\n\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <CubeTransparentIcon className=\"h-4 w-4\" />,\n title: labels.modelSection,\n }}\n >\n <form\n onSubmit={async (event) => {\n event.preventDefault()\n setSubmitting(true)\n try {\n await onSubmit(modelId, connectionId)\n } finally {\n setSubmitting(false)\n }\n }}\n className=\"space-y-4\"\n >\n <FormGrid>\n <FormSelect\n label={labels.model}\n value={modelId}\n onValueChange={setModelId}\n options={models.length > 0\n ? models.map((m) => ({ value: m.id, label: `${m.name} (${m.provider})` }))\n : [{ value: '', label: labels.modelEmpty }]}\n />\n <FormSelect\n label={labels.connection}\n value={connectionId}\n onValueChange={setConnectionId}\n options={matchingConnections.length > 0\n ? matchingConnections.map((c) => ({\n value: c.id,\n label: `${c.name}${c.providerSlug ? ' · ' + c.providerSlug : ''}`,\n }))\n : [{ value: '', label: labels.connectionEmpty }]}\n icon={<LinkIcon className=\"h-4 w-4\" />}\n />\n </FormGrid>\n <div className=\"flex justify-end\">\n <Button type=\"submit\" color=\"indigo\" disabled={submitting || !modelId}>\n {submitting ? labels.saving : labels.save}\n </Button>\n </div>\n </form>\n </SectionCard>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Create-agent dialog\n// ─────────────────────────────────────────────────────────────────────────────\n\n// Presets mirror the landing-page agent gallery so a new user sees the\n// same vocabulary that sold them the product — sales, support, finance,\n// security, data, market, pricing, onboarding. Picking a preset\n// pre-fills name, role, avatar emoji, and a starter systemPrompt.\ntype AgentPreset = {\n id: string\n emoji: string\n name: string\n role: string\n systemPrompt: string\n temperature: number\n maxTokens: number\n accent: string\n framework?: string\n}\n\nconst AGENT_PRESETS: AgentPreset[] = [\n { id: 'sales', emoji: '💼', name: 'Sales Specialist', role: 'Lead qualification & CRM', systemPrompt: 'You are a sales assistant. Help qualify leads, manage CRM entries, and schedule follow-ups. Always be professional and proactive.', temperature: 0.7, maxTokens: 2048, accent: 'from-emerald-500 to-teal-600', framework: 'anthropic' },\n { id: 'support', emoji: '🎧', name: 'Customer Support', role: 'Ticket resolution & escalation', systemPrompt: 'You are a customer support agent. Resolve tickets, answer questions, and escalate complex issues. Prioritize customer satisfaction.', temperature: 0.3, maxTokens: 2048, accent: 'from-sky-500 to-indigo-600', framework: 'crewai' },\n { id: 'finance', emoji: '📊', name: 'Financial Analyst', role: 'Revenue, margins, reports', systemPrompt: 'You are a financial analyst. Analyze revenue, calculate margins, generate performance reports, and identify trends. Use data-driven insights for recommendations.', temperature: 0.4, maxTokens: 4096, accent: 'from-amber-500 to-orange-600', framework: 'langchain' },\n { id: 'security', emoji: '🛡️', name: 'Security Analyst', role: 'Threat monitoring & compliance', systemPrompt: 'You are a security analyst. Monitor for threats, audit data access, ensure compliance with privacy regulations, and manage incident response.', temperature: 0.3, maxTokens: 2048, accent: 'from-rose-500 to-red-600', framework: 'anthropic' },\n { id: 'data', emoji: '🔬', name: 'Data Analyst', role: 'Pattern detection & cleaning', systemPrompt: 'You are a data analyst. Process raw data inputs, identify patterns, clean datasets, and prepare structured analysis for downstream agents.', temperature: 0.5, maxTokens: 4096, accent: 'from-violet-500 to-purple-600', framework: 'google-adk' },\n { id: 'custom', emoji: '✨', name: '', role: '', systemPrompt: '', temperature: 0.2, maxTokens: 2048, accent: 'from-slate-500 to-slate-700' },\n]\n\nconst DIFFICULTY_OPTIONS: ReadonlyArray<{ id: 'beginner' | 'intermediate' | 'advanced' | 'expert'; emoji: string; accent: string }> = [\n { id: 'beginner', emoji: '🌱', accent: 'from-emerald-500 to-teal-600' },\n { id: 'intermediate', emoji: '⚡', accent: 'from-sky-500 to-indigo-600' },\n { id: 'advanced', emoji: '🚀', accent: 'from-amber-500 to-orange-600' },\n { id: 'expert', emoji: '🧠', accent: 'from-rose-500 to-purple-600' },\n]\n\nconst EMOJI_PALETTE = ['💼', '🎧', '📊', '🛡️', '🔬', '✨', '🤖', '⚡', '🎯', '🚀', '🧠', '🦾', '📡', '🔮', '🌐', '🗂️']\n\nfunction CreateAgentDialog({\n labels,\n models,\n connections,\n onClose,\n onSubmit,\n}: {\n labels: AgentsWorkspaceLabels\n models: AgentModel[]\n connections: ModelProviderConnection[]\n onClose: () => void\n onSubmit: (input: AgentConfigFormInput) => Promise<void>\n}) {\n const [presetId, setPresetId] = useState<string>('custom')\n const [emoji, setEmoji] = useState<string>('✨')\n const [name, setName] = useState<string>('')\n const [role, setRole] = useState<string>('')\n const [description, setDescription] = useState<string>('')\n const [systemPrompt, setSystemPrompt] = useState<string>('')\n const [userPrompt, setUserPrompt] = useState<string>('')\n const [temperature, setTemperature] = useState<number>(0.2)\n const [maxTokens, setMaxTokens] = useState<number>(2048)\n const [topP, setTopP] = useState<number>(1.0)\n const [topK, setTopK] = useState<number>(0)\n const [connectionId, setConnectionId] = useState<string>('')\n const [framework, setFramework] = useState<string>('')\n const [difficulty, setDifficulty] = useState<string>('intermediate')\n const [tagsInput, setTagsInput] = useState<string>('')\n const [outputSchema, setOutputSchema] = useState<string>('')\n const [modelId, setModelId] = useState<string>(models[0]?.id ?? '')\n\n const activePreset = AGENT_PRESETS.find((p) => p.id === presetId) ?? AGENT_PRESETS[AGENT_PRESETS.length - 1]\n\n // Narrow models to the chosen connection's provider when present\n // (mirrors the ModelTab logic so the user can't pick mismatches).\n const matchingModels = useMemo(() => {\n if (!connectionId) return models\n const conn = connections.find((c) => c.id === connectionId)\n const slug = conn?.providerSlug\n if (!slug) return models\n const matches = models.filter(\n (m) => (m.provider ?? '') === slug || String(m.provider ?? '').startsWith(slug),\n )\n return matches.length > 0 ? matches : models\n }, [models, connections, connectionId])\n\n const modelOptions = matchingModels.map((m) => ({ value: m.id, label: `${m.name} (${m.provider})` }))\n\n const connectionOptions = useMemo(() => {\n const inline = { value: '', label: labels.connectionInline ?? 'Inline model (no connection)' }\n return [\n inline,\n ...connections.map((c) => ({\n value: c.id,\n label: `${c.name}${c.providerSlug ? ' · ' + c.providerSlug : ''}`,\n })),\n ]\n }, [connections, labels.connectionInline])\n\n const frameworkOptions = useMemo(() => [\n { value: '', label: labels.connectionInline ?? '—' },\n { value: 'anthropic', label: labels.frameworkAnthropic ?? 'Anthropic' },\n { value: 'langchain', label: labels.frameworkLangChain ?? 'LangChain' },\n { value: 'crewai', label: labels.frameworkCrewAI ?? 'CrewAI' },\n { value: 'google-adk', label: labels.frameworkGoogleADK ?? 'Google ADK' },\n { value: 'openai', label: labels.frameworkOpenAI ?? 'OpenAI' },\n ], [labels])\n\n function applyPreset(preset: AgentPreset) {\n setPresetId(preset.id)\n setEmoji(preset.emoji)\n if (preset.id !== 'custom') {\n setName(preset.name)\n setRole(preset.role)\n setSystemPrompt(preset.systemPrompt)\n setTemperature(preset.temperature)\n setMaxTokens(preset.maxTokens)\n if (preset.framework) setFramework(preset.framework)\n }\n }\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={labels.createAgentTitle}\n label={labels.createAgentEyebrow ?? 'NEW AGENT'}\n icon={\n <div\n className={`flex h-full w-full items-center justify-center rounded-lg bg-gradient-to-br ${activePreset.accent} text-lg shadow-sm`}\n aria-hidden=\"true\"\n >\n {emoji}\n </div>\n }\n maxWidth=\"2xl\"\n gradient={activePreset.accent}\n showFormFooter\n submitLabel={labels.save}\n onSubmit={async (event: FormEvent) => {\n event.preventDefault()\n const parsedTags = tagsInput\n .split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n await onSubmit({\n name: name.trim() || activePreset.name || 'Untitled Agent',\n role: role.trim() || undefined,\n description: description.trim() || undefined,\n avatar: emoji,\n modelId,\n connectionId: connectionId || undefined,\n framework: framework || undefined,\n systemPrompt,\n userPrompt: userPrompt.trim() || undefined,\n maxTokens,\n temperature,\n topP,\n topK,\n difficulty: difficulty || undefined,\n tags: parsedTags.length > 0 ? parsedTags : undefined,\n outputSchema: outputSchema.trim() || undefined,\n })\n }}\n >\n <div className=\"space-y-5\">\n {/* Preset picker — landing-page gallery in miniature */}\n <SectionCard\n variant=\"glass\"\n padded={false}\n header={{\n title: labels.presetTitle ?? 'Start from a template',\n subtitle: labels.presetSubtitle ?? 'Pick a role or build a custom agent',\n }}\n >\n <div className=\"grid grid-cols-2 gap-2 px-4 pb-4 sm:grid-cols-3\">\n {AGENT_PRESETS.map((preset) => {\n const selected = preset.id === presetId\n return (\n <button\n key={preset.id}\n type=\"button\"\n onClick={() => applyPreset(preset)}\n className={[\n 'liquid-surface group flex items-center gap-3 rounded-xl px-3 py-2.5 text-left transition-all',\n selected\n ? 'ring-2 ring-indigo-500/70 ring-offset-1 ring-offset-transparent'\n : 'hover:border-indigo-400/40 focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n ].join(' ')}\n >\n <span\n aria-hidden=\"true\"\n className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br ${preset.accent} text-base shadow-sm`}\n >\n {preset.emoji}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-slate-900 dark:text-white\">\n {preset.id === 'custom' ? (labels.presetCustom ?? 'Custom') : preset.name}\n </span>\n <span className=\"block truncate text-xs text-slate-500 dark:text-slate-400\">\n {preset.role || (labels.presetCustomHint ?? 'Start from scratch')}\n </span>\n </span>\n </button>\n )\n })}\n </div>\n </SectionCard>\n\n {/* Identity — avatar + name + role + description */}\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.identitySection ?? 'Identity',\n subtitle: labels.identitySubtitle ?? 'How your agent shows up across workflows',\n }}\n >\n <div className=\"space-y-4\">\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.avatarLabel ?? 'Avatar'}\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {EMOJI_PALETTE.map((e) => (\n <button\n key={e}\n type=\"button\"\n onClick={() => setEmoji(e)}\n aria-pressed={emoji === e}\n className={[\n 'flex h-9 w-9 items-center justify-center rounded-lg text-base transition-all',\n emoji === e\n ? `bg-gradient-to-br ${activePreset.accent} shadow-sm ring-2 ring-indigo-500/70 ring-offset-1 ring-offset-transparent`\n : 'liquid-surface hover:border-indigo-400/40 focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n ].join(' ')}\n >\n {e}\n </button>\n ))}\n </div>\n </div>\n <FormGrid>\n <FormInput\n label={labels.name}\n value={name}\n onValueChange={setName}\n required\n placeholder={labels.namePlaceholder ?? 'Sales Specialist'}\n />\n <FormInput\n label={labels.role}\n value={role}\n onValueChange={setRole}\n placeholder={labels.rolePlaceholder}\n />\n </FormGrid>\n <FormTextarea\n label={labels.descriptionLabel ?? labels.description}\n value={description}\n onValueChange={setDescription}\n rows={2}\n placeholder={labels.descriptionPlaceholder ?? 'A short summary of what this agent does.'}\n />\n </div>\n </SectionCard>\n\n {/* Model — connection + framework + model + output schema */}\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.modelSection ?? 'Model and connection',\n subtitle: labels.connectionPickPrompt ?? 'Pick the provider connection or use an inline model',\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormSelect\n label={labels.connectionLabel ?? labels.connection}\n value={connectionId}\n onValueChange={setConnectionId}\n options={connectionOptions}\n icon={<LinkIcon className=\"h-4 w-4\" />}\n />\n <FormSelect\n label={labels.frameworkLabel ?? 'Framework'}\n value={framework}\n onValueChange={setFramework}\n options={frameworkOptions}\n />\n <FormSelect\n label={labels.model}\n value={modelId}\n onValueChange={setModelId}\n options={modelOptions.length > 0 ? modelOptions : [{ value: '', label: labels.modelEmpty }]}\n />\n </FormGrid>\n <FormTextarea\n label={labels.outputSchemaLabel ?? 'Output schema (JSON)'}\n value={outputSchema}\n onValueChange={setOutputSchema}\n rows={4}\n placeholder={labels.outputSchemaPlaceholder ?? '{\\n \"type\": \"object\",\\n \"properties\": { \"summary\": { \"type\": \"string\" } }\\n}'}\n />\n </div>\n </SectionCard>\n\n {/* Behavior — system prompt + user prompt + decoding params */}\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.behaviorSection ?? 'Behavior',\n subtitle: labels.behaviorSubtitle ?? 'System prompt shapes how the agent thinks',\n }}\n >\n <div className=\"space-y-4\">\n <FormTextarea\n label={labels.promptSystemPrompt ?? 'System prompt'}\n value={systemPrompt}\n onValueChange={setSystemPrompt}\n rows={5}\n placeholder={labels.promptPlaceholder ?? 'You are a helpful assistant…'}\n />\n <FormTextarea\n label={labels.userPromptLabel ?? 'User prompt template'}\n value={userPrompt}\n onValueChange={setUserPrompt}\n rows={4}\n placeholder={labels.userPromptPlaceholder ?? 'Analyze {{ nodeId.path }} and produce a summary.'}\n />\n <FormGrid>\n <FormInput\n label={`${labels.temperature} (${temperature.toFixed(2)})`}\n type=\"number\"\n value={String(temperature)}\n onValueChange={(v) => setTemperature(Number(v) || 0)}\n step={0.1}\n min={0}\n max={2}\n />\n <FormInput\n label={labels.maxTokens}\n type=\"number\"\n value={String(maxTokens)}\n onValueChange={(v) => setMaxTokens(Number(v) || 0)}\n min={1}\n max={32_000}\n />\n <FormInput\n label={`${labels.topPLabel ?? 'Top-P'} (${topP.toFixed(2)})`}\n type=\"number\"\n value={String(topP)}\n onValueChange={(v) => setTopP(Number(v) || 0)}\n step={0.05}\n min={0}\n max={1}\n />\n <FormInput\n label={labels.topKLabel ?? 'Top-K'}\n type=\"number\"\n value={String(topK)}\n onValueChange={(v) => setTopK(Math.max(0, Math.floor(Number(v) || 0)))}\n step={1}\n min={0}\n max={500}\n />\n </FormGrid>\n </div>\n </SectionCard>\n\n {/* Metadata — difficulty + tags */}\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.metadataSection ?? 'Metadata',\n subtitle: labels.metadataSubtitle ?? 'Difficulty tier and free-form tags',\n }}\n >\n <div className=\"space-y-4\">\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.difficultyLabel ?? 'Difficulty'}\n </span>\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-4\">\n {DIFFICULTY_OPTIONS.map((opt) => {\n const selected = difficulty === opt.id\n const label =\n opt.id === 'beginner' ? (labels.difficultyBeginner ?? 'Beginner') :\n opt.id === 'intermediate' ? (labels.difficultyIntermediate ?? 'Intermediate') :\n opt.id === 'advanced' ? (labels.difficultyAdvanced ?? 'Advanced') :\n (labels.difficultyExpert ?? 'Expert')\n return (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => setDifficulty(opt.id)}\n aria-pressed={selected}\n className={[\n 'liquid-surface flex items-center gap-2 rounded-xl px-3 py-2 text-left transition-all',\n selected\n ? 'ring-2 ring-indigo-500/70 ring-offset-1 ring-offset-transparent'\n : 'hover:border-indigo-400/40 focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n ].join(' ')}\n >\n <span\n aria-hidden=\"true\"\n className={`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br ${opt.accent} text-base shadow-sm`}\n >\n {opt.emoji}\n </span>\n <span className=\"text-sm font-semibold text-slate-900 dark:text-white\">\n {label}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n <FormInput\n label={labels.tagsLabel ?? 'Tags'}\n value={tagsInput}\n onValueChange={setTagsInput}\n placeholder={labels.tagsPlaceholder ?? 'comma, separated, tags'}\n />\n </div>\n </SectionCard>\n </div>\n </GlassModal>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction deriveInitials(name: string): string {\n const trimmed = name.trim()\n if (!trimmed) return '?'\n const parts = trimmed.split(/\\s+/)\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n"]}
1
+ {"version":3,"sources":["../../../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/datasources-page-view.tsx","../../../src/platform/pages/dashboard-page-view.tsx","../../../src/platform/pages/agents-index-page-view.tsx","../../../src/platform/pages/workflows-page-view.tsx","../../../src/platform/pages/workflow-runs-page-view.tsx","../../../src/platform/pages/run-timeline-page-view.tsx","../../../src/platform/pages/connections-page-view.tsx","../../../src/platform/pages/credentials-page-view.tsx","../../../src/platform/pages/agents-workspace-page-view.tsx","../../../src/platform/pages/agent-new-wizard-page-view.tsx"],"names":["useState","jsx","jsxs","Fragment","CpuChipIcon","WrenchScrewdriverIcon","CubeTransparentIcon","ChatBubbleLeftEllipsisIcon","useMemo","ClockIcon","LOCALE_OPTIONS","useEffect","TrashIcon","LinkIcon"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useState } from 'react'\nimport {\n Badge,\n EntityCard,\n HeroSection,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\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 searchPlaceholder?: 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 [searchTerm, setSearchTerm] = useState('')\n\n const allModels = models\n const filteredModels = searchTerm.trim()\n ? allModels.filter((model) => model.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allModels\n const isEmpty = allModels.length === 0\n\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredModels.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\n return (\n <div className=\"space-y-4\">\n {hero}\n {content}\n </div>\n )\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 PageEmptyState,\n PageLoadingState,\n SearchBar,\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 // Identity\n role?: string\n description?: string\n avatar?: string\n // Model\n modelId: string\n connectionId?: string\n framework?: string\n // Prompts\n systemPrompt: string\n userPrompt?: string\n // Decoding params\n maxTokens: number\n temperature: number\n topP?: number\n topK?: number\n // Metadata\n difficulty?: string\n tags?: string[]\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\n\n const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }))\n\n const allAgents = agents\n const filteredAgents = searchTerm.trim()\n ? allAgents.filter((agent) => String(agent.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allAgents\n const isEmpty = allAgents.length === 0\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={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\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 ) : isEmpty ? (\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 {filteredAgents.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 <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\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 PageEmptyState,\n PageLoadingState,\n SearchBar,\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\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 allPrompts = prompts\n const filteredPrompts = searchTerm.trim()\n ? allPrompts.filter((prompt) => {\n const term = searchTerm.trim().toLowerCase()\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const promptText = prompt.prompt ?? ''\n return (\n agentName.toLowerCase().includes(term) ||\n promptText.toLowerCase().includes(term)\n )\n })\n : allPrompts\n const isEmpty = allPrompts.length === 0\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredPrompts.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\n return (\n <>\n <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\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 PageEmptyState,\n PageLoadingState,\n SearchBar,\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\n\n const allTools = tools\n const filteredTools = searchTerm.trim()\n ? allTools.filter((tool) => tool.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTools\n const isEmpty = allTools.length === 0\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredTools.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\n return (\n <>\n <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\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-slate-700 dark:text-slate-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-slate-300 text-indigo-600 focus:ring-2 focus:ring-indigo-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]\"\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=\"catalog.get_product_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 PageEmptyState,\n PageLoadingState,\n SearchBar,\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 searchPlaceholder?: 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 const [searchTerm, setSearchTerm] = useState('')\n\n const allRules = rules\n const filteredRules = searchTerm.trim()\n ? allRules.filter((rule) => (rule.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allRules\n const isEmpty = allRules.length === 0\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 ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRules.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\n return (\n <>\n <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\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 } from 'react'\nimport { CircleStackIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n HeroSection,\n PageEmptyState,\n Badge,\n SearchBar,\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 // AWS managed services (icepanel.io / official AWS Architecture Icons)\n neptune: '/logos/datasources/neptune.svg',\n timestream: '/logos/datasources/timestream.svg',\n opensearch: '/logos/datasources/opensearch.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 [searchTerm, setSearchTerm] = useState('')\n const [localDatasources, setLocalDatasources] = useState<DataSource[]>(\n useSampleData ? SAMPLE_DATASOURCES : []\n )\n\n const allDatasources = externalDatasources ?? localDatasources\n const datasources = searchTerm.trim()\n ? allDatasources.filter((ds) => (ds.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allDatasources\n const isEmpty = allDatasources.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 <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\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=\"liquid-surface flex h-11 w-11 items-center justify-center rounded-lg\">\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-slate-500 dark:text-slate-400\">\n {ds.readOnly && (\n <Badge color=\"blue\" size=\"xs\">Read-only</Badge>\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-slate-500 dark:text-slate-400\">\n <div>{labels.dialect}: {dialectLabel}</div>\n {ds.slug && <div className=\"truncate text-slate-400 dark:text-slate-500\">/{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","import type { ReactNode } from 'react'\nimport type { AnalyticsSummary } from '../workflow-api-client'\n\nexport type DashboardLabels = {\n title: string\n subtitle: string\n totalRuns: string\n successRate: string\n avgDuration: string\n runsByStatus: string\n perWorkflow: string\n noData: string\n runs: string\n}\n\ntype Props = {\n labels: DashboardLabels\n summary: AnalyticsSummary | null\n loading: boolean\n /**\n * App-branded logo node rendered in the dashboard hero. Each app passes\n * its own logo (typically a pair of light/dark <img> tags toggled via\n * Tailwind `dark:` classes) so this view stays brand-agnostic.\n */\n appLogo: ReactNode\n}\n\n/**\n * Platform dashboard — a centered hero with the app's logo + subtitle.\n * Metrics and workflow tables live on dedicated pages (Analytics /\n * Workflow Runs); this view intentionally renders only the landing chrome.\n *\n * `summary` and `loading` are kept on the prop type so the page that\n * mounts this view doesn't have to change, but we intentionally don't\n * render them here.\n */\nexport function DashboardPageView({ labels, appLogo }: Props) {\n const hero = (\n <div className=\"w-full text-center\">\n <div className=\"flex justify-center mb-6\">{appLogo}</div>\n <p className=\"mt-3 text-base text-slate-600 dark:text-slate-300\">\n {labels.subtitle}\n </p>\n </div>\n )\n\n return (\n <div className=\"space-y-4\">\n {hero}\n </div>\n )\n}\n","import { useState } from 'react'\nimport {\n CpuChipIcon,\n WrenchScrewdriverIcon,\n CubeTransparentIcon,\n ChatBubbleLeftEllipsisIcon,\n} from '@heroicons/react/24/outline'\nimport {\n EntityCard,\n HeroSection,\n SearchBar,\n} from '@ui/index'\nimport { useLink } from '@ui/lib/router-context'\n\nexport type AgentsIndexLabels = {\n title: string\n subtitle: string\n configTitle: string\n configSubtitle: string\n toolDefinitionsTitle: string\n toolDefinitionsSubtitle: string\n modelsTitle: string\n modelsSubtitle: string\n promptsTitle: string\n promptsSubtitle: string\n searchPlaceholder?: string\n}\n\ntype Tile = {\n id: string\n title: string\n subtitle: string\n href: string\n gradient: string\n icon: typeof CpuChipIcon\n}\n\nexport function AgentsIndexPageView({ labels }: { labels: AgentsIndexLabels }) {\n const Link = useLink()\n const [searchTerm, setSearchTerm] = useState('')\n\n const allTiles: Tile[] = [\n { id: 'config', title: labels.configTitle, subtitle: labels.configSubtitle, href: '/agents/config', gradient: 'from-violet-500 to-indigo-700', icon: CpuChipIcon },\n { id: 'tools', title: labels.toolDefinitionsTitle, subtitle: labels.toolDefinitionsSubtitle, href: '/agents/tool-definitions', gradient: 'from-amber-500 to-orange-700', icon: WrenchScrewdriverIcon },\n { id: 'models', title: labels.modelsTitle, subtitle: labels.modelsSubtitle, href: '/agents/models', gradient: 'from-emerald-500 to-teal-700', icon: CubeTransparentIcon },\n { id: 'prompts', title: labels.promptsTitle, subtitle: labels.promptsSubtitle, href: '/agents/prompts', gradient: 'from-sky-500 to-blue-700', icon: ChatBubbleLeftEllipsisIcon },\n ]\n\n const filteredTiles = searchTerm.trim()\n ? allTiles.filter((tile) => tile.title.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTiles\n const isEmpty = allTiles.length === 0\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 />\n )\n\n const content = (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredTiles.map((tile) => {\n const Icon = tile.icon\n return (\n <Link key={tile.id} href={tile.href} className=\"block focus:outline-none\">\n <EntityCard\n accentGradient={tile.gradient}\n icon={(\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )}\n title={tile.title}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{tile.subtitle}</p>\n </EntityCard>\n </Link>\n )\n })}\n </div>\n </>\n )\n\n return (\n <div className=\"space-y-4\">\n {hero}\n {content}\n </div>\n )\n}\n","import { RectangleStackIcon } from '@heroicons/react/24/outline'\nimport { Badge, Button, Form, FormActionsRow, FormGrid, FormInput, FormTextarea, InlineForm, SectionHeader, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Text } from '@ui/index'\nimport type { WorkflowsPageViewProps, WorkflowGraph } from '@datatechsolutions/shared-domain/common'\nimport { WorkflowWorkspace } from '../workflow-workspace'\nimport { adaptWorkflowGraphToUi } from '../utils/workflow-graph-adapter'\n\nexport function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }: WorkflowsPageViewProps) {\n const selectedWorkflow = workflows[0] ?? null\n\n return (\n <div className=\"space-y-6\">\n <SectionHeader\n icon={<RectangleStackIcon className=\"h-5 w-5 text-white\" />}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n />\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.add}</Text>\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const name = String(formData.get('name') ?? '').trim()\n const description = String(formData.get('description') ?? '').trim()\n if (!name) return\n onCreate({ name, description })\n event.currentTarget.reset()\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.workflowName} placeholder={labels.workflowNamePlaceholder} required />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.workflowDescriptionPlaceholder} rows={3} />\n <FormActionsRow>\n <Button type=\"submit\">{labels.create}</Button>\n </FormActionsRow>\n </FormGrid>\n </Form>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.registry}</Text>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>{labels.name}</TableHeader>\n <TableHeader>{labels.description}</TableHeader>\n <TableHeader>{labels.version}</TableHeader>\n <TableHeader>{labels.status}</TableHeader>\n <TableHeader>{labels.actions}</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {workflows.map((workflow) => (\n <TableRow key={workflow.id}>\n <TableCell>{workflow.name}</TableCell>\n <TableCell>{workflow.description}</TableCell>\n <TableCell>{String(workflow.version)}</TableCell>\n <TableCell>\n <Badge>{workflow.isDraft ? labels.statusDraft : labels.statusPublished}</Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex flex-col gap-2\">\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n onUpdateMeta({\n workflowId: workflow.id,\n name: workflow.name ?? '',\n description: workflow.description ?? '',\n })\n }}\n >\n <InlineForm>\n <Button type=\"submit\" outline>{labels.saveMeta}</Button>\n </InlineForm>\n </Form>\n <Button type=\"button\" color=\"sky\" onClick={() => onPublish(workflow.id)}>\n {labels.publish}\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.workspace}</Text>\n {selectedWorkflow ? (\n <div className=\"min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden\">\n <WorkflowWorkspace graph={adaptWorkflowGraphToUi(selectedWorkflow.graph as WorkflowGraph) as unknown as WorkflowGraph} />\n </div>\n ) : (\n <Text>{labels.empty}</Text>\n )}\n </section>\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n EntityCard,\n FormSelect,\n HeroSection,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { WorkflowRun } from '@ui/astrlabe/contracts'\nimport { formatDurationMs } from '../utils/format-duration'\n\nexport type WorkflowRunsLabels = {\n title: string\n subtitle: string\n status: string\n duration: string\n triggeredBy: string\n startedAt: string\n cancel: string\n replay: string\n view: string\n statusPending: string\n statusRunning: string\n statusCompleted: string\n statusFailed: string\n statusCancelled: string\n filterAll: string\n filterStatus: string\n empty: string\n timeline?: string\n searchPlaceholder?: string\n}\n\nconst BADGE_COLOR: Record<string, 'emerald' | 'rose' | 'amber' | 'sky' | 'zinc'> = {\n completed: 'emerald',\n failed: 'rose',\n running: 'sky',\n pending: 'amber',\n cancelled: 'zinc',\n}\n\ntype Props = {\n labels: WorkflowRunsLabels\n runs: WorkflowRun[]\n loading: boolean\n onCancel: (run: WorkflowRun) => void\n onReplay: (run: WorkflowRun) => void\n onView?: (run: WorkflowRun) => void\n onViewTimeline?: (run: WorkflowRun) => void\n}\n\nexport function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onView, onViewTimeline }: Props) {\n const [statusFilter, setStatusFilter] = useState<string>('all')\n const [searchTerm, setSearchTerm] = useState('')\n\n const statusOptions = useMemo(() => ([\n { value: 'all', label: labels.filterAll },\n { value: 'pending', label: labels.statusPending },\n { value: 'running', label: labels.statusRunning },\n { value: 'completed', label: labels.statusCompleted },\n { value: 'failed', label: labels.statusFailed },\n { value: 'cancelled', label: labels.statusCancelled },\n ]), [labels])\n\n const statusLabelFor = (status: string) => {\n switch (status) {\n case 'pending': return labels.statusPending\n case 'running': return labels.statusRunning\n case 'completed': return labels.statusCompleted\n case 'failed': return labels.statusFailed\n case 'cancelled': return labels.statusCancelled\n default: return status\n }\n }\n\n const allRuns = runs\n const term = searchTerm.trim().toLowerCase()\n const filteredRuns = allRuns.filter((run) => {\n if (statusFilter !== 'all' && run.status !== statusFilter) return false\n if (term && !run.id.toLowerCase().includes(term) && !run.workflowId.toLowerCase().includes(term)) {\n return false\n }\n return true\n })\n const isEmpty = allRuns.length === 0\n\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-indigo-500 to-sky-700\"\n toolbar={(\n <div className=\"w-full sm:w-48\">\n <FormSelect\n name=\"statusFilter\"\n label={labels.filterStatus}\n options={statusOptions}\n value={statusFilter}\n onValueChange={setStatusFilter}\n />\n </div>\n )}\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : filteredRuns.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRuns.map((run) => (\n <EntityCard\n key={run.id}\n accentGradient=\"from-indigo-500 to-sky-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400\">\n <ClockIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={run.id.slice(0, 8)}\n subtitle={`${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`}\n status={(\n <Badge color={BADGE_COLOR[run.status] ?? 'zinc'}>\n {statusLabelFor(run.status)}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n {onView && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onView(run)}>{labels.view}</Button>\n )}\n {onViewTimeline && labels.timeline && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onViewTimeline(run)}>{labels.timeline}</Button>\n )}\n <Button type=\"button\" size=\"sm\" outline onClick={() => onReplay(run)}>{labels.replay}</Button>\n {run.status === 'running' && (\n <Button type=\"button\" size=\"sm\" color=\"rose\" onClick={() => onCancel(run)}>{labels.cancel}</Button>\n )}\n </div>\n )}\n >\n <dl className=\"mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.duration}</dt>\n <dd className=\"text-right\">{formatDurationMs(run.totalDurationMs)}</dd>\n <dt>{labels.triggeredBy}</dt>\n <dd className=\"text-right truncate\">{run.triggeredBy || '—'}</dd>\n </dl>\n {run.error && (\n <p className=\"mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400\">{run.error}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <div className=\"space-y-4\">\n {hero}\n {content}\n </div>\n )\n}\n","import {\n HeroSection,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport {\n ExecutionTimelinePanel,\n type ExecutionTimelineEntry,\n type ExecutionTimelineLabels,\n} from '@ui/astrlabe'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport type { RunTimelineEntry } from '../workflow-api-client'\n\nexport type RunTimelineLabels = ExecutionTimelineLabels & {\n title: string\n subtitle: string\n}\n\ntype Props = {\n labels: RunTimelineLabels\n entries: RunTimelineEntry[]\n loading: boolean\n runId: string\n}\n\n/**\n * Astrlabe-shaped wrapper around the shared `ExecutionTimelinePanel`\n * (#68). Adds the page chrome (HeroSection + management page wrapper) so\n * the runs page renders consistently with the rest of the platform.\n * Other apps (kori-erp) can drop `ExecutionTimelinePanel` directly\n * inside their own card layouts without taking on this page wrapper.\n */\nexport function RunTimelinePageView({ labels, entries, loading, runId }: Props) {\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={`${labels.subtitle} — ${runId.slice(0, 8)}`}\n gradient=\"from-indigo-500 to-violet-700\"\n />\n )\n\n if (loading) {\n return (\n <div className=\"space-y-4\">\n {hero}\n <PageLoadingState />\n </div>\n )\n }\n if (entries.length === 0) {\n return (\n <div className=\"space-y-4\">\n {hero}\n <PageEmptyState title={labels.empty ?? ''} message=\"\" iconName=\"folder-open\" />\n </div>\n )\n }\n\n return (\n <div className=\"space-y-4\">\n {hero}\n <ExecutionTimelinePanel\n entries={entries as ExecutionTimelineEntry[]}\n labels={labels}\n />\n </div>\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { LinkIcon } 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 PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { ModelProviderType } from '@ui/astrlabe/contracts'\nimport type { ModelProviderConnection } from '../workflow-api-client'\n\nexport type CreateConnectionInput = {\n providerSlug: string\n name: string\n region?: string\n endpoint?: string\n credentialRef?: string\n apiKeyRef?: string\n modelFilter?: string[]\n config?: Record<string, unknown>\n}\n\nexport type UpdateConnectionInput = Partial<Omit<CreateConnectionInput, 'providerSlug'>> & {\n enabled?: boolean\n}\n\n/**\n * Presets per provider — used by the form to surface the fields each\n * provider actually cares about (region for Bedrock/Vertex, endpoint\n * for Ollama/custom, neither for Anthropic/OpenAI hosted APIs).\n * The shape intentionally mirrors `ModelProviderType` in\n * `ui/astrlabe/contracts.ts` so new providers added to the enum\n * automatically get a default row via the fallback map.\n */\nconst PROVIDER_PRESETS: Record<ModelProviderType, {\n label: string\n description: string\n needsRegion?: boolean\n needsEndpoint?: boolean\n defaultRegion?: string\n exampleModels?: string[]\n}> = {\n anthropic_api: {\n label: 'Anthropic API',\n description: 'Claude Opus, Sonnet, Haiku via api.anthropic.com',\n exampleModels: ['claude-opus-4-7', 'claude-sonnet-4-6'],\n },\n openai_api: {\n label: 'OpenAI API',\n description: 'GPT-4o, o3, o4-mini via api.openai.com',\n exampleModels: ['gpt-4o', 'gpt-4o-mini'],\n },\n aws_bedrock: {\n label: 'AWS Bedrock',\n description: 'Anthropic / Meta / Mistral / Nova served through Bedrock',\n needsRegion: true,\n defaultRegion: 'us-east-1',\n exampleModels: ['amazon.nova-lite-v1:0', 'anthropic.claude-3-5-sonnet-20241022-v2:0'],\n },\n google_vertex: {\n label: 'Google Vertex AI',\n description: 'Gemini + third-party models on Vertex',\n needsRegion: true,\n defaultRegion: 'us-central1',\n exampleModels: ['gemini-2.0-flash-exp', 'gemini-1.5-pro'],\n },\n azure_openai: {\n label: 'Azure OpenAI',\n description: 'OpenAI deployments hosted on Azure',\n needsRegion: true,\n needsEndpoint: true,\n defaultRegion: 'eastus',\n },\n groq: {\n label: 'Groq',\n description: 'Low-latency Llama / Mixtral inference via api.groq.com',\n },\n mistral: {\n label: 'Mistral API',\n description: 'mistral.ai hosted open-weight + commercial models',\n },\n huggingface: {\n label: 'Hugging Face',\n description: 'Inference endpoints + serverless inference API',\n needsEndpoint: true,\n },\n ollama: {\n label: 'Ollama',\n description: 'Self-hosted Ollama server — provide the base URL',\n needsEndpoint: true,\n },\n custom: {\n label: 'Custom / OpenAI-compatible',\n description: 'Any OpenAI-API-compatible HTTP endpoint',\n needsEndpoint: true,\n },\n}\n\nconst PROVIDER_OPTIONS = (Object.keys(PROVIDER_PRESETS) as ModelProviderType[]).map((slug) => ({\n value: slug,\n label: PROVIDER_PRESETS[slug].label,\n}))\n\nexport type ConnectionFormValue = {\n providerSlug: ModelProviderType\n name: string\n region: string\n endpoint: string\n /** Plaintext — only present when the user is entering a NEW key. On\n * save we push this to `/organizations/{id}/secrets` and replace\n * with the returned UUID before calling the connections API. */\n apiKey: string\n /** Vault secret UUID — displayed as \"••• (set)\" in the UI. */\n credentialRef: string\n modelFilter: string\n configJson: string\n}\n\nexport type ConnectionsLabels = {\n title: string\n subtitle: string\n add: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n enable: string\n disable: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype CreateSecret = (name: string, value: string) => Promise<{ id: string }>\n\ntype Props = {\n labels: ConnectionsLabels\n connections: ModelProviderConnection[]\n loading: boolean\n onCreate: (input: CreateConnectionInput) => Promise<void>\n onUpdate: (id: string, input: UpdateConnectionInput) => Promise<void>\n onDelete: (connection: ModelProviderConnection) => Promise<void>\n /** Takes a secret name + plaintext value, stores it in the vault and\n * returns the UUID the connections API should reference. */\n onCreateSecret: CreateSecret\n /**\n * Prefix for auto-generated secret names when the user enters a new\n * API key. Final shape is `${prefix}-${providerSlug}-${timestamp}`.\n * Defaults to `'platform'` so consumers that don't override land on a\n * sensible namespace.\n */\n secretNamePrefix?: string\n}\n\nexport function ConnectionsPageView({\n labels,\n connections,\n loading,\n onCreate,\n onUpdate,\n onDelete,\n onCreateSecret,\n secretNamePrefix = 'platform',\n}: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<ModelProviderConnection | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allConnections = connections\n const filteredConnections = searchTerm.trim()\n ? allConnections.filter((conn) => conn.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allConnections\n const isEmpty = allConnections.length === 0\n\n const hero = (\n <HeroSection\n icon={<LinkIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredConnections.map((conn) => (\n <EntityCard\n key={conn.id}\n accentGradient=\"from-sky-500 to-indigo-600\"\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 <LinkIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={conn.name}\n subtitle={providerLabel(conn.providerSlug)}\n status={(\n <div className=\"flex gap-1\">\n <Badge color={conn.enabled ? 'emerald' : 'zinc'}>\n {conn.enabled ? labels.enable : labels.disable}\n </Badge>\n {conn.credentialRef ? (\n <Badge color=\"indigo\">Secret set</Badge>\n ) : (\n <Badge color=\"amber\">No secret</Badge>\n )}\n </div>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(conn)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={async () => {\n if (window.confirm(labels.deleteConfirm)) await onDelete(conn)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n <dl className=\"mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400\">\n {conn.region && <Row label=\"Region\" value={conn.region} />}\n {conn.endpoint && <Row label=\"Endpoint\" value={conn.endpoint} />}\n {conn.modelFilter && conn.modelFilter.length > 0 && (\n <Row label=\"Models\" value={conn.modelFilter.join(', ')} />\n )}\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\n {createOpen && (\n <ConnectionEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultConnectionFormValue()}\n mode=\"create\"\n onClose={() => setCreateOpen(false)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onCreate(wire as CreateConnectionInput)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ConnectionEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={modelToFormValue(editing)}\n mode=\"edit\"\n onClose={() => setEditing(null)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onUpdate(editing.id, wire as UpdateConnectionInput)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ────────────────────────────────────────────────\n\nfunction ConnectionEditor({\n title,\n saveLabel,\n initial,\n mode,\n onClose,\n onSubmit,\n onCreateSecret,\n secretNamePrefix,\n}: {\n title: string\n saveLabel: string\n initial: ConnectionFormValue\n mode: 'create' | 'edit'\n onClose: () => void\n onSubmit: (wire: CreateConnectionInput | UpdateConnectionInput) => Promise<void>\n onCreateSecret: CreateSecret\n secretNamePrefix: string\n}) {\n const [value, setValue] = useState<ConnectionFormValue>(initial)\n const [submitting, setSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const preset = PROVIDER_PRESETS[value.providerSlug]\n\n const handleSubmit = async () => {\n setError(null)\n setSubmitting(true)\n try {\n // Track whether the user actually rotated the API key so the\n // PATCH can omit `credentialRef` when nothing changed (the\n // backend leaves the existing value alone). For create, we\n // always send whatever was produced.\n let credentialRef = value.credentialRef\n let credentialRefRotated = false\n if (value.apiKey.trim().length > 0) {\n // Push the plaintext key to the vault and replace with the\n // returned UUID. The connections API never sees the raw key.\n const secret = await onCreateSecret(`${secretNamePrefix}-${value.providerSlug}-${Date.now()}`, value.apiKey.trim())\n credentialRef = secret.id\n credentialRefRotated = true\n }\n\n const modelFilter = parseCsv(value.modelFilter)\n let config: Record<string, unknown> | undefined\n const trimmed = value.configJson.trim()\n if (trimmed.length > 0) {\n try {\n const parsed = JSON.parse(trimmed) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('config must be a JSON object')\n }\n config = parsed as Record<string, unknown>\n } catch (e) {\n throw new Error(`Invalid config JSON: ${(e as Error).message}`)\n }\n }\n\n if (mode === 'create') {\n const wire: CreateConnectionInput = {\n providerSlug: value.providerSlug,\n name: value.name.trim(),\n ...(value.region.trim() && { region: value.region.trim() }),\n ...(value.endpoint.trim() && { endpoint: value.endpoint.trim() }),\n ...(credentialRef && { credentialRef }),\n ...(modelFilter.length > 0 && { modelFilter }),\n ...(config && { config }),\n }\n await onSubmit(wire)\n } else {\n const wire: UpdateConnectionInput = {\n name: value.name.trim() || undefined,\n region: value.region.trim() || undefined,\n endpoint: value.endpoint.trim() || undefined,\n // Only thread `credentialRef` when the user actually rotated\n // the key. Omitting it tells the backend to keep the\n // existing pointer intact.\n ...(credentialRefRotated && credentialRef ? { credentialRef } : {}),\n ...(modelFilter.length > 0 ? { modelFilter } : {}),\n ...(config && { config }),\n }\n await onSubmit(wire)\n }\n } catch (e) {\n setError((e as Error).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n // When the user swaps providers during creation, pre-fill a sensible\n // default region so Bedrock / Vertex don't silently submit blank.\n useEffect(() => {\n if (mode === 'create' && preset.needsRegion && !value.region && preset.defaultRegion) {\n setValue((v) => ({ ...v, region: preset.defaultRegion ?? '' }))\n }\n }, [mode, preset, value.region])\n\n const placeholderModels = useMemo(() => {\n return preset.exampleModels?.join(', ') ?? ''\n }, [preset])\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={submitting ? '…' : saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n void handleSubmit()\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormSelect\n label=\"Provider\"\n value={value.providerSlug}\n options={PROVIDER_OPTIONS}\n onValueChange={(slug) => setValue((v) => ({ ...v, providerSlug: slug as ModelProviderType }))}\n disabled={mode === 'edit'}\n hint={preset.description}\n />\n <FormInput\n label=\"Display name\"\n required\n value={value.name}\n onValueChange={(name) => setValue((v) => ({ ...v, name }))}\n placeholder=\"Production Bedrock, Claude dev, …\"\n />\n {preset.needsRegion && (\n <FormInput\n label=\"Region\"\n value={value.region}\n onValueChange={(region) => setValue((v) => ({ ...v, region }))}\n placeholder={preset.defaultRegion}\n />\n )}\n {preset.needsEndpoint && (\n <FormInput\n label=\"Endpoint URL\"\n value={value.endpoint}\n onValueChange={(endpoint) => setValue((v) => ({ ...v, endpoint }))}\n placeholder=\"https://...\"\n />\n )}\n </FormGrid>\n\n <FormInput\n label={value.credentialRef ? 'Rotate API key (leave blank to keep current)' : 'API key'}\n type=\"password\"\n value={value.apiKey}\n onValueChange={(apiKey) => setValue((v) => ({ ...v, apiKey }))}\n placeholder={value.credentialRef ? '••• stored in vault' : 'sk-...'}\n hint={value.credentialRef\n ? `Stored secret: ${value.credentialRef.slice(0, 8)}…`\n : 'Plaintext — pushed to windsock vault on save, never persisted here.'}\n />\n\n <FormInput\n label=\"Model filter (comma-separated, optional)\"\n value={value.modelFilter}\n onValueChange={(modelFilter) => setValue((v) => ({ ...v, modelFilter }))}\n placeholder={placeholderModels}\n hint=\"Leave blank to allow all models the provider exposes.\"\n />\n\n <details className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 text-sm dark:border-slate-700 dark:bg-slate-900/40\">\n <summary className=\"cursor-pointer font-medium text-slate-700 dark:text-slate-200\">\n Advanced config (JSON)\n </summary>\n <div className=\"mt-3\">\n <FormTextarea\n rows={4}\n value={value.configJson}\n onValueChange={(configJson) => setValue((v) => ({ ...v, configJson }))}\n placeholder={'{\\n \"temperature\": 0.2\\n}'}\n hint=\"Free-form JSON passed to the runtime provider — e.g. Bedrock guardrail ids, Azure deployment overrides.\"\n />\n </div>\n </details>\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// ── Helpers ────────────────────────────────────────────────────\n\nfunction Row({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex gap-1 truncate\">\n <dt className=\"font-medium\">{label}:</dt>\n <dd className=\"truncate\">{value}</dd>\n </div>\n )\n}\n\nfunction providerLabel(slug?: string): string {\n if (!slug) return 'Unknown provider'\n const key = slug as ModelProviderType\n return PROVIDER_PRESETS[key]?.label ?? slug\n}\n\nfunction parseCsv(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n\nfunction defaultConnectionFormValue(): ConnectionFormValue {\n return {\n providerSlug: 'anthropic_api',\n name: '',\n region: '',\n endpoint: '',\n apiKey: '',\n credentialRef: '',\n modelFilter: '',\n configJson: '',\n }\n}\n\nfunction modelToFormValue(conn: ModelProviderConnection): ConnectionFormValue {\n return {\n providerSlug: (conn.providerSlug as ModelProviderType) ?? 'custom',\n name: conn.name,\n region: conn.region ?? '',\n endpoint: conn.endpoint ?? '',\n apiKey: '',\n credentialRef: conn.credentialRef ?? '',\n modelFilter: (conn.modelFilter ?? []).join(', '),\n configJson: conn.config ? JSON.stringify(conn.config, null, 2) : '',\n }\n}\n","import { useState, type FormEvent } from 'react'\nimport { KeyIcon, TrashIcon, ArrowPathIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CopyableId,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { SecretSummary } from '../windsock-admin-client'\n\nexport type CredentialFormInput = {\n name: string\n value: string\n secretType: string\n description?: string\n}\n\nexport type CredentialsPageViewLabels = {\n title: string\n subtitle: string\n addCredential: string\n createTitle: string\n name: string\n namePlaceholder: string\n value: string\n valuePlaceholder: string\n type: string\n typeGeneric: string\n typeApiKey: string\n typeOAuth: string\n typePassword: string\n description: string\n descriptionPlaceholder: string\n save: string\n rotate: string\n disable: string\n disableConfirm: string\n expiresAt: string\n createdAt: string\n neverExpires: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: CredentialsPageViewLabels\n credentials: SecretSummary[]\n loading: boolean\n onCreate: (input: CredentialFormInput) => void\n onRotate: (secret: SecretSummary, newValue: string) => void\n onDisable: (secret: SecretSummary) => void\n}\n\nexport function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate, onDisable }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [rotateFor, setRotateFor] = useState<SecretSummary | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allCredentials = credentials\n const filteredCredentials = searchTerm.trim()\n ? allCredentials.filter((secret) => secret.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allCredentials\n const isEmpty = allCredentials.length === 0\n\n const typeOptions = [\n { value: 'generic', label: labels.typeGeneric },\n { value: 'api_key', label: labels.typeApiKey },\n { value: 'oauth', label: labels.typeOAuth },\n { value: 'password', label: labels.typePassword },\n ]\n\n const hero = (\n <HeroSection\n icon={<KeyIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-rose-500 to-orange-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredCredentials.map((secret) => (\n <EntityCard\n key={secret.secretId}\n accentGradient=\"from-rose-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400\">\n <KeyIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={secret.name}\n subtitle={secret.secretType}\n status={(\n <Badge color={secret.disabled ? 'zinc' : 'emerald'}>\n {secret.disabled ? labels.disable : 'Active'}\n </Badge>\n )}\n footer={(\n <div className=\"flex items-center justify-between gap-2\">\n <CopyableId id={secret.secretId} />\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setRotateFor(secret)}>\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.rotate}\n </Button>\n {!secret.disabled && (\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.disableConfirm)) onDisable(secret)\n }}\n >\n <TrashIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.disable}\n </Button>\n )}\n </div>\n </div>\n )}\n >\n {secret.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{secret.description}</p>\n )}\n <dl className=\"mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.createdAt}</dt>\n <dd className=\"text-right\">{new Date(secret.createdAt).toLocaleDateString()}</dd>\n <dt>{labels.expiresAt}</dt>\n <dd className=\"text-right\">{secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires}</dd>\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.createTitle}\n maxWidth=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const value = String(formData.get('value') ?? '')\n const secretType = String(formData.get('secretType') ?? 'generic')\n const description = String(formData.get('description') ?? '').trim() || undefined\n if (!name || !value) return\n onCreate({ name, value, secretType, description })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.namePlaceholder} required />\n <FormSelect name=\"secretType\" label={labels.type} options={typeOptions} defaultValue=\"generic\" />\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.descriptionPlaceholder} rows={2} />\n </FormGrid>\n </GlassModal>\n\n <GlassModal\n open={rotateFor !== null}\n onClose={() => setRotateFor(null)}\n title={`${labels.rotate}: ${rotateFor?.name ?? ''}`}\n maxWidth=\"md\"\n showFormFooter\n submitLabel={labels.rotate}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const value = String(formData.get('value') ?? '')\n if (!value || !rotateFor) return\n onRotate(rotateFor, value)\n setRotateFor(null)\n }}\n >\n <FormGrid>\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n","import { useEffect, useMemo, useState, type FormEvent } from 'react'\nimport {\n CpuChipIcon,\n ChatBubbleLeftEllipsisIcon,\n WrenchScrewdriverIcon,\n CubeTransparentIcon,\n PlusIcon,\n TrashIcon,\n LinkIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Avatar,\n Badge,\n Button,\n CreateActionButton,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ListCard,\n ListCardItem,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n SectionCard,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@ui/index'\n// NOTE: The legacy `CreateAgentDialog` modal that used to live in this file\n// has been replaced by a standalone `/agents/new` wizard page so users can\n// reach it via deep-link and don't lose state on accidental dismissals. See\n// `agent-new-wizard-page-view.tsx`.\nimport type { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow'\nimport type { AgentModel, AgentTool, ModelProviderType } from '../../astrlabe/contracts'\nimport type { AgentWithPrompts } from '../../astrlabe'\nimport type { ModelProviderConnection } from '../workflow-api-client'\nimport type { AgentConfigFormInput } from './agents-config-page-view'\nimport type { PromptFormInput } from './agents-prompts-page-view'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Labels\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * All copy the workspace renders. Caller-supplied so the consuming app\n * stays in control of its i18n catalog. Every key must be supplied — no\n * silent fallbacks — so we catch missing translations at type-check time.\n */\nexport type AgentsWorkspaceLabels = {\n // Hero / page chrome\n title: string\n subtitle: string\n addAgent: string\n searchPlaceholder: string\n empty: string\n emptyMessage: string\n noSelection: string\n noSelectionMessage: string\n\n // Tabs\n generalTab: string\n promptTab: string\n toolsTab: string\n modelTab: string\n\n // Geral (general) tab\n generalSection: string\n name: string\n description: string\n role: string\n rolePlaceholder: string\n status: string\n statusDraft: string\n statusActive: string\n statusArchived: string\n maxTokens: string\n temperature: string\n save: string\n saving: string\n deleteAgent: string\n deleteConfirm: string\n\n // Prompt tab\n promptSection: string\n promptCurrent: string\n promptVersions: string\n promptVersionsEmpty: string\n addPrompt: string\n activate: string\n activated: string\n promptLocale: string\n promptIsActive: string\n promptText: string\n promptReason: string\n promptSystemPrompt: string\n promptUserTemplate: string\n\n // Tools tab\n toolsSection: string\n toolsAttached: string\n toolsAvailable: string\n toolsEmpty: string\n attachTool: string\n detachTool: string\n\n // Model tab\n modelSection: string\n model: string\n connection: string\n connectionEmpty: string\n modelEmpty: string\n\n // Create dialog (richer version inspired by the landing-page gallery)\n createAgentTitle: string\n createAgentEyebrow?: string\n presetTitle?: string\n presetSubtitle?: string\n presetCustom?: string\n presetCustomHint?: string\n identitySection?: string\n identitySubtitle?: string\n avatarLabel?: string\n namePlaceholder?: string\n behaviorSection?: string\n behaviorSubtitle?: string\n promptPlaceholder?: string\n // Connection + framework\n connectionLabel?: string\n connectionPickPrompt?: string\n connectionInline?: string\n frameworkLabel?: string\n frameworkAnthropic?: string\n frameworkLangChain?: string\n frameworkCrewAI?: string\n frameworkGoogleADK?: string\n frameworkOpenAI?: string\n // User prompt template\n userPromptLabel?: string\n userPromptPlaceholder?: string\n // Decoding extras\n topPLabel?: string\n topKLabel?: string\n // Metadata section\n metadataSection?: string\n metadataSubtitle?: string\n difficultyLabel?: string\n difficultyBeginner?: string\n difficultyIntermediate?: string\n difficultyAdvanced?: string\n difficultyExpert?: string\n tagsLabel?: string\n tagsPlaceholder?: string\n outputSchemaLabel?: string\n outputSchemaPlaceholder?: string\n descriptionLabel?: string\n descriptionPlaceholder?: string\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type AgentsWorkspacePageViewProps = {\n labels: AgentsWorkspaceLabels\n agents: AgentWithPrompts[]\n models: AgentModel[]\n tools: AgentTool[]\n connections: ModelProviderConnection[]\n loading?: boolean\n /**\n * Per-agent prompt rows (system-prompt history). The page itself does\n * not own loading them — the caller resolves them per agent and feeds\n * the slice corresponding to the currently selected agent via this\n * map keyed by agentId. The view falls back to `[]` for unknown ids.\n */\n promptsByAgent?: Record<string, AgentPrompt[]>\n onSelectAgent?: (agentId: string | null) => void\n /**\n * Fires when the user clicks \"New agent\". The host page navigates to\n * the standalone `/agents/new` wizard — the workspace itself no\n * longer owns the create flow.\n */\n onNewAgent: () => void\n onUpdateAgent: (id: string, input: AgentConfigFormInput) => Promise<void>\n onDeleteAgent: (id: string) => Promise<void>\n onCreatePrompt: (agentId: string, input: PromptFormInput) => Promise<void>\n onActivatePrompt: (agentId: string, promptId: string) => Promise<void>\n onAttachTool: (agentId: string, toolId: string) => Promise<void>\n onDetachTool: (agentId: string, toolId: string) => Promise<void>\n onUpdateModel: (agentId: string, modelId: string, connectionId: string) => Promise<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\n// ─────────────────────────────────────────────────────────────────────────────\n// Page-view\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function AgentsWorkspacePageView({\n labels,\n agents,\n models,\n tools,\n connections,\n loading,\n promptsByAgent = {},\n onSelectAgent,\n onNewAgent,\n onUpdateAgent,\n onDeleteAgent,\n onCreatePrompt,\n onActivatePrompt,\n onAttachTool,\n onDetachTool,\n onUpdateModel,\n}: AgentsWorkspacePageViewProps) {\n const [searchTerm, setSearchTerm] = useState('')\n const [selectedId, setSelectedId] = useState<string | null>(null)\n\n // Auto-select the first agent when the list resolves so the right\n // pane is never empty unless the user explicitly emptied it.\n useEffect(() => {\n if (!selectedId && agents.length > 0) {\n const first = String(agents[0].agentId ?? agents[0].id ?? '')\n if (first) {\n setSelectedId(first)\n onSelectAgent?.(first)\n }\n }\n }, [agents, selectedId, onSelectAgent])\n\n const filteredAgents = useMemo(() => {\n const term = searchTerm.trim().toLowerCase()\n if (!term) return agents\n return agents.filter((a) => String(a.name ?? '').toLowerCase().includes(term))\n }, [agents, searchTerm])\n\n const selectedAgent = useMemo(() => {\n if (!selectedId) return null\n return (\n agents.find((a) => String(a.agentId ?? a.id ?? '') === selectedId) ?? null\n )\n }, [agents, selectedId])\n\n const isEmpty = agents.length === 0\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 actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addAgent}\n onClick={onNewAgent}\n accent=\"violet\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addAgent}\n onClick={onNewAgent}\n accent=\"violet\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState\n title={labels.empty}\n message={labels.emptyMessage}\n iconName=\"folder-open\"\n />\n ) : (\n <div className=\"space-y-4\">\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder}\n />\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-[20rem_minmax(0,1fr)]\">\n {/* Sidebar — list of agents */}\n <div className=\"lg:sticky lg:top-4\">\n <ListCard variant=\"glass\">\n {filteredAgents.map((agent) => {\n const id = String(agent.agentId ?? agent.id ?? '')\n const active = id === selectedId\n const initials = deriveInitials(String(agent.name ?? id))\n const modelName =\n models.find((m) => m.id === String(agent.modelId ?? ''))?.name ??\n String(agent.modelId ?? '')\n return (\n <ListCardItem\n key={id}\n leading={<Avatar tone={active ? 'violet' : 'slate'} initials={initials} />}\n trailing={agent.activePromptVersion > 0 ? (\n <Badge color=\"emerald\">v{agent.activePromptVersion}</Badge>\n ) : (\n <Badge color=\"zinc\">draft</Badge>\n )}\n pressable\n onPress={() => {\n setSelectedId(id)\n onSelectAgent?.(id)\n }}\n className={active ? 'bg-violet-500/5 dark:bg-violet-400/10' : ''}\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {String(agent.name ?? id)}\n </p>\n {modelName && (\n <p className=\"truncate text-xs text-slate-500 dark:text-slate-400\">\n {modelName}\n </p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n </div>\n\n {/* Detail — tabs for the selected agent */}\n <div>\n {selectedAgent ? (\n <AgentDetail\n key={String(selectedAgent.agentId ?? selectedAgent.id ?? '')}\n agent={selectedAgent}\n labels={labels}\n models={models}\n tools={tools}\n connections={connections}\n prompts={promptsByAgent[String(selectedAgent.agentId ?? selectedAgent.id ?? '')] ?? []}\n onUpdateAgent={onUpdateAgent}\n onDeleteAgent={onDeleteAgent}\n onCreatePrompt={onCreatePrompt}\n onActivatePrompt={onActivatePrompt}\n onAttachTool={onAttachTool}\n onDetachTool={onDetachTool}\n onUpdateModel={onUpdateModel}\n onCleared={() => {\n setSelectedId(null)\n onSelectAgent?.(null)\n }}\n />\n ) : (\n <SectionCard\n header={{\n icon: <CpuChipIcon className=\"h-4 w-4\" />,\n title: labels.noSelection,\n subtitle: labels.noSelectionMessage,\n }}\n >\n <PageEmptyState\n title={labels.noSelection}\n message={labels.noSelectionMessage}\n iconName=\"folder-open\"\n />\n </SectionCard>\n )}\n </div>\n </div>\n </div>\n )\n\n return (\n <div className=\"space-y-4\">\n {hero}\n {content}\n {mobileAction}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Detail pane — tabs for the selected agent\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype AgentDetailProps = {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n models: AgentModel[]\n tools: AgentTool[]\n connections: ModelProviderConnection[]\n prompts: AgentPrompt[]\n onUpdateAgent: (id: string, input: AgentConfigFormInput) => Promise<void>\n onDeleteAgent: (id: string) => Promise<void>\n onCreatePrompt: (agentId: string, input: PromptFormInput) => Promise<void>\n onActivatePrompt: (agentId: string, promptId: string) => Promise<void>\n onAttachTool: (agentId: string, toolId: string) => Promise<void>\n onDetachTool: (agentId: string, toolId: string) => Promise<void>\n onUpdateModel: (agentId: string, modelId: string, connectionId: string) => Promise<void>\n onCleared: () => void\n}\n\nfunction AgentDetail({\n agent,\n labels,\n models,\n tools,\n connections,\n prompts,\n onUpdateAgent,\n onDeleteAgent,\n onCreatePrompt,\n onActivatePrompt,\n onAttachTool,\n onDetachTool,\n onUpdateModel,\n onCleared,\n}: AgentDetailProps) {\n const agentId = String(agent.agentId ?? agent.id ?? '')\n\n return (\n <SectionCard\n header={{\n icon: <CpuChipIcon className=\"h-4 w-4\" />,\n title: String(agent.name ?? agentId),\n subtitle: String(agent.description ?? ''),\n }}\n actions={(\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={async () => {\n if (window.confirm(labels.deleteConfirm)) {\n await onDeleteAgent(agentId)\n onCleared()\n }\n }}\n >\n <TrashIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.deleteAgent}</span>\n </Button>\n )}\n >\n <Tabs defaultValue=\"general\" className=\"w-full\">\n <TabsList className=\"bg-white/40 dark:bg-white/[0.06]\">\n <TabsTrigger value=\"general\">{labels.generalTab}</TabsTrigger>\n <TabsTrigger value=\"prompt\">{labels.promptTab}</TabsTrigger>\n <TabsTrigger value=\"tools\">{labels.toolsTab}</TabsTrigger>\n <TabsTrigger value=\"model\">{labels.modelTab}</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\" className=\"space-y-4 pt-4\">\n <GeneralTab agent={agent} labels={labels} onSubmit={(input) => onUpdateAgent(agentId, input)} />\n </TabsContent>\n\n <TabsContent value=\"prompt\" className=\"space-y-4 pt-4\">\n <PromptTab\n agent={agent}\n labels={labels}\n prompts={prompts}\n onCreate={(input) => onCreatePrompt(agentId, input)}\n onActivate={(promptId) => onActivatePrompt(agentId, promptId)}\n />\n </TabsContent>\n\n <TabsContent value=\"tools\" className=\"space-y-4 pt-4\">\n <ToolsTab\n agent={agent}\n labels={labels}\n tools={tools}\n onAttach={(toolId) => onAttachTool(agentId, toolId)}\n onDetach={(toolId) => onDetachTool(agentId, toolId)}\n />\n </TabsContent>\n\n <TabsContent value=\"model\" className=\"space-y-4 pt-4\">\n <ModelTab\n agent={agent}\n labels={labels}\n models={models}\n connections={connections}\n onSubmit={(modelId, connectionId) => onUpdateModel(agentId, modelId, connectionId)}\n />\n </TabsContent>\n </Tabs>\n </SectionCard>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Geral tab\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction GeneralTab({\n agent,\n labels,\n onSubmit,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n onSubmit: (input: AgentConfigFormInput) => Promise<void>\n}) {\n const [submitting, setSubmitting] = useState(false)\n\n const initial: AgentConfigFormInput = {\n agentId: String(agent.agentId ?? agent.id ?? ''),\n name: String(agent.name ?? ''),\n modelId: String(agent.modelId ?? ''),\n systemPrompt: String((agent as Record<string, unknown>).systemPrompt ?? ''),\n maxTokens: Number(agent.maxTokens ?? 2048),\n temperature: Number((agent as Record<string, unknown>).temperature ?? 0.2),\n }\n const initialDescription = String(agent.description ?? '')\n const initialRole = String(agent.role ?? '')\n const initialStatus = String(agent.status ?? 'draft')\n\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <CpuChipIcon className=\"h-4 w-4\" />,\n title: labels.generalSection,\n }}\n >\n <form\n onSubmit={async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n setSubmitting(true)\n try {\n const form = new FormData(event.currentTarget)\n await onSubmit({\n agentId: initial.agentId,\n name: String(form.get('name') ?? '').trim() || initial.name,\n modelId: String(form.get('modelId') ?? initial.modelId),\n systemPrompt: initial.systemPrompt,\n maxTokens: Number(form.get('maxTokens') ?? initial.maxTokens),\n temperature: Number(form.get('temperature') ?? initial.temperature),\n })\n } finally {\n setSubmitting(false)\n }\n }}\n className=\"space-y-4\"\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} defaultValue={initial.name} required />\n <FormSelect\n name=\"status\"\n label={labels.status}\n defaultValue={initialStatus}\n options={[\n { value: 'draft', label: labels.statusDraft },\n { value: 'active', label: labels.statusActive },\n { value: 'archived', label: labels.statusArchived },\n ]}\n />\n <FormInput name=\"role\" label={labels.role} placeholder={labels.rolePlaceholder} defaultValue={initialRole} />\n <FormInput\n name=\"maxTokens\"\n label={labels.maxTokens}\n type=\"number\"\n defaultValue={String(initial.maxTokens)}\n />\n <FormInput\n name=\"temperature\"\n label={labels.temperature}\n type=\"number\"\n step={0.1}\n min={0}\n max={2}\n defaultValue={String(initial.temperature)}\n />\n </FormGrid>\n <FormTextarea name=\"description\" label={labels.description} defaultValue={initialDescription} rows={3} />\n <div className=\"flex justify-end\">\n <Button type=\"submit\" color=\"indigo\" disabled={submitting}>\n {submitting ? labels.saving : labels.save}\n </Button>\n </div>\n </form>\n </SectionCard>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Prompt tab\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction PromptTab({\n agent,\n labels,\n prompts,\n onCreate,\n onActivate,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n prompts: AgentPrompt[]\n onCreate: (input: PromptFormInput) => Promise<void>\n onActivate: (promptId: string) => Promise<void>\n}) {\n const [addOpen, setAddOpen] = useState(false)\n const agentId = String(agent.agentId ?? agent.id ?? '')\n const currentSystem = String((agent as Record<string, unknown>).systemPrompt ?? '')\n\n return (\n <div className=\"space-y-4\">\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <ChatBubbleLeftEllipsisIcon className=\"h-4 w-4\" />,\n title: labels.promptSection,\n subtitle: labels.promptCurrent,\n }}\n >\n <pre className=\"whitespace-pre-wrap rounded-lg border border-slate-200/70 bg-slate-50/60 p-3 text-xs text-slate-700 dark:border-slate-700 dark:bg-slate-900/40 dark:text-slate-200\">\n {currentSystem || '—'}\n </pre>\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <ChatBubbleLeftEllipsisIcon className=\"h-4 w-4\" />,\n title: labels.promptVersions,\n }}\n actions={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => setAddOpen(true)}>\n <PlusIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.addPrompt}</span>\n </Button>\n )}\n >\n {prompts.length === 0 ? (\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{labels.promptVersionsEmpty}</p>\n ) : (\n <ListCard>\n {prompts.map((prompt) => {\n const id = `${prompt.agentId}:${prompt.locale}:${prompt.version}`\n return (\n <ListCardItem\n key={id}\n leading={<Badge color={prompt.isActive ? 'emerald' : 'zinc'}>v{prompt.version}</Badge>}\n trailing={\n prompt.isActive ? (\n <Badge color=\"emerald\">{labels.activated}</Badge>\n ) : (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onActivate(id)}>\n {labels.activate}\n </Button>\n )\n }\n >\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200\">\n {prompt.locale}\n </p>\n {prompt.prompt && (\n <p className=\"mt-1 line-clamp-2 text-xs text-slate-500 dark:text-slate-400\">\n {prompt.prompt}\n </p>\n )}\n </ListCardItem>\n )\n })}\n </ListCard>\n )}\n </SectionCard>\n\n {addOpen && (\n <GlassModal\n open\n onClose={() => setAddOpen(false)}\n title={labels.addPrompt}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={async (event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n await onCreate({\n agentId,\n locale: String(form.get('locale') ?? 'en'),\n prompt: String(form.get('prompt') ?? '').trim(),\n systemPrompt: String(form.get('systemPrompt') ?? '').trim() || undefined,\n userTemplate: String(form.get('userTemplate') ?? '').trim() || undefined,\n reason: String(form.get('reason') ?? '').trim() || undefined,\n isActive: String(form.get('isActive') ?? 'true') === 'true',\n })\n setAddOpen(false)\n }}\n >\n <FormGrid>\n <FormSelect name=\"locale\" label={labels.promptLocale} options={LOCALE_OPTIONS} defaultValue=\"en\" />\n <FormSelect\n name=\"isActive\"\n label={labels.promptIsActive}\n options={[\n { value: 'true', label: labels.promptIsActive },\n { value: 'false', label: '—' },\n ]}\n defaultValue=\"true\"\n />\n <FormInput name=\"reason\" label={labels.promptReason} />\n <FormTextarea name=\"systemPrompt\" label={labels.promptSystemPrompt} rows={3} />\n <FormTextarea name=\"userTemplate\" label={labels.promptUserTemplate} rows={3} />\n <FormTextarea name=\"prompt\" label={labels.promptText} rows={6} required />\n </FormGrid>\n </GlassModal>\n )}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tools tab\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction ToolsTab({\n agent,\n labels,\n tools,\n onAttach,\n onDetach,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n tools: AgentTool[]\n onAttach: (toolId: string) => Promise<void>\n onDetach: (toolId: string) => Promise<void>\n}) {\n // The canonical attached-tool list is `enabledToolIds` (mirrors\n // `AgentPersistPayload`). Older seeds may serialise it as `toolIds`,\n // so we read both — write-back always uses `enabledToolIds`.\n const raw = agent as Record<string, unknown>\n const attached = useMemo(() => {\n const ids = (raw.enabledToolIds ?? raw.toolIds) as unknown\n return Array.isArray(ids) ? ids.filter((id): id is string => typeof id === 'string') : []\n }, [raw])\n const attachedSet = useMemo(() => new Set(attached), [attached])\n\n const attachedTools = tools.filter((tool) => attachedSet.has(tool.agentToolId))\n const availableTools = tools.filter((tool) => !attachedSet.has(tool.agentToolId))\n\n return (\n <div className=\"space-y-4\">\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <WrenchScrewdriverIcon className=\"h-4 w-4\" />,\n title: labels.toolsAttached,\n }}\n >\n {attachedTools.length === 0 ? (\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{labels.toolsEmpty}</p>\n ) : (\n <ListCard>\n {attachedTools.map((tool) => (\n <ListCardItem\n key={tool.agentToolId}\n leading={(\n <div className=\"flex h-9 w-9 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-5 w-5\" />\n </div>\n )}\n trailing={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => onDetach(tool.agentToolId)}>\n {labels.detachTool}\n </Button>\n )}\n >\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200\">{tool.name}</p>\n {tool.description && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-slate-500 dark:text-slate-400\">\n {tool.description}\n </p>\n )}\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <WrenchScrewdriverIcon className=\"h-4 w-4\" />,\n title: labels.toolsAvailable,\n }}\n >\n {availableTools.length === 0 ? (\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{labels.toolsEmpty}</p>\n ) : (\n <ListCard>\n {availableTools.map((tool) => (\n <ListCardItem\n key={tool.agentToolId}\n leading={(\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-slate-500/10 text-slate-600 dark:bg-slate-500/20 dark:text-slate-300\">\n <WrenchScrewdriverIcon className=\"h-5 w-5\" />\n </div>\n )}\n trailing={(\n <Button type=\"button\" size=\"sm\" color=\"indigo\" onClick={() => onAttach(tool.agentToolId)}>\n <PlusIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.attachTool}</span>\n </Button>\n )}\n >\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200\">{tool.name}</p>\n {tool.description && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-slate-500 dark:text-slate-400\">\n {tool.description}\n </p>\n )}\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </SectionCard>\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Model tab — picks the model + connection\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction ModelTab({\n agent,\n labels,\n models,\n connections,\n onSubmit,\n}: {\n agent: AgentWithPrompts\n labels: AgentsWorkspaceLabels\n models: AgentModel[]\n connections: ModelProviderConnection[]\n onSubmit: (modelId: string, connectionId: string) => Promise<void>\n}) {\n const initialModelId = String(agent.modelId ?? '')\n const initialConnectionId = String(agent.connectionId ?? '')\n const [modelId, setModelId] = useState(initialModelId)\n const [connectionId, setConnectionId] = useState(initialConnectionId)\n const [submitting, setSubmitting] = useState(false)\n\n const selectedModel = models.find((m) => m.id === modelId) ?? null\n\n // Narrow the connection list to ones that match the chosen model's\n // provider when possible — the wire schema has `provider` (a free\n // string slug) on the model and `providerSlug` on the connection.\n // We surface every connection if no match exists so the user can\n // still pick a custom binding.\n const matchingConnections = useMemo(() => {\n if (!selectedModel) return connections\n const slug = selectedModel.provider as ModelProviderType | undefined\n if (!slug) return connections\n const matches = connections.filter(\n (c) => (c.providerSlug ?? '') === slug || (c.providerSlug ?? '').startsWith(String(slug)),\n )\n return matches.length > 0 ? matches : connections\n }, [selectedModel, connections])\n\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n icon: <CubeTransparentIcon className=\"h-4 w-4\" />,\n title: labels.modelSection,\n }}\n >\n <form\n onSubmit={async (event) => {\n event.preventDefault()\n setSubmitting(true)\n try {\n await onSubmit(modelId, connectionId)\n } finally {\n setSubmitting(false)\n }\n }}\n className=\"space-y-4\"\n >\n <FormGrid>\n <FormSelect\n label={labels.model}\n value={modelId}\n onValueChange={setModelId}\n options={models.length > 0\n ? models.map((m) => ({ value: m.id, label: `${m.name} (${m.provider})` }))\n : [{ value: '', label: labels.modelEmpty }]}\n />\n <FormSelect\n label={labels.connection}\n value={connectionId}\n onValueChange={setConnectionId}\n options={matchingConnections.length > 0\n ? matchingConnections.map((c) => ({\n value: c.id,\n label: `${c.name}${c.providerSlug ? ' · ' + c.providerSlug : ''}`,\n }))\n : [{ value: '', label: labels.connectionEmpty }]}\n icon={<LinkIcon className=\"h-4 w-4\" />}\n />\n </FormGrid>\n <div className=\"flex justify-end\">\n <Button type=\"submit\" color=\"indigo\" disabled={submitting || !modelId}>\n {submitting ? labels.saving : labels.save}\n </Button>\n </div>\n </form>\n </SectionCard>\n )\n}\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction deriveInitials(name: string): string {\n const trimmed = name.trim()\n if (!trimmed) return '?'\n const parts = trimmed.split(/\\s+/)\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n","import { useEffect, useMemo, useState, useCallback, type FormEvent } from 'react'\nimport {\n CpuChipIcon,\n LinkIcon,\n PencilSquareIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Button,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n HeroSection,\n SectionCard,\n StepTimeline,\n type StepTimelineItem,\n} from '@ui/index'\nimport type { AgentModel, AgentTool } from '../../astrlabe/contracts'\nimport type { ModelProviderConnection } from '../workflow-api-client'\nimport type { AgentConfigFormInput } from './agents-config-page-view'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shared constants — mirror the presets that previously lived in the modal so\n// new users see the same vocabulary across the funnel (landing → workspace →\n// wizard).\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype AgentPreset = {\n id: string\n emoji: string\n name: string\n role: string\n systemPrompt: string\n temperature: number\n maxTokens: number\n accent: string\n framework?: string\n}\n\nconst AGENT_PRESETS: AgentPreset[] = [\n { id: 'sales', emoji: '💼', name: 'Sales Specialist', role: 'Lead qualification & CRM', systemPrompt: 'You are a sales assistant. Help qualify leads, manage CRM entries, and schedule follow-ups. Always be professional and proactive.', temperature: 0.7, maxTokens: 2048, accent: 'from-emerald-500 to-teal-600', framework: 'anthropic' },\n { id: 'support', emoji: '🎧', name: 'Customer Support', role: 'Ticket resolution & escalation', systemPrompt: 'You are a customer support agent. Resolve tickets, answer questions, and escalate complex issues. Prioritize customer satisfaction.', temperature: 0.3, maxTokens: 2048, accent: 'from-sky-500 to-indigo-600', framework: 'crewai' },\n { id: 'finance', emoji: '📊', name: 'Financial Analyst', role: 'Revenue, margins, reports', systemPrompt: 'You are a financial analyst. Analyze revenue, calculate margins, generate performance reports, and identify trends. Use data-driven insights for recommendations.', temperature: 0.4, maxTokens: 4096, accent: 'from-amber-500 to-orange-600', framework: 'langchain' },\n { id: 'security', emoji: '🛡️', name: 'Security Analyst', role: 'Threat monitoring & compliance', systemPrompt: 'You are a security analyst. Monitor for threats, audit data access, ensure compliance with privacy regulations, and manage incident response.', temperature: 0.3, maxTokens: 2048, accent: 'from-rose-500 to-red-600', framework: 'anthropic' },\n { id: 'data', emoji: '🔬', name: 'Data Analyst', role: 'Pattern detection & cleaning', systemPrompt: 'You are a data analyst. Process raw data inputs, identify patterns, clean datasets, and prepare structured analysis for downstream agents.', temperature: 0.5, maxTokens: 4096, accent: 'from-violet-500 to-purple-600', framework: 'google-adk' },\n { id: 'custom', emoji: '✨', name: '', role: '', systemPrompt: '', temperature: 0.2, maxTokens: 2048, accent: 'from-slate-500 to-slate-700' },\n]\n\nconst DIFFICULTY_OPTIONS: ReadonlyArray<{ id: 'beginner' | 'intermediate' | 'advanced' | 'expert'; emoji: string; accent: string }> = [\n { id: 'beginner', emoji: '🌱', accent: 'from-emerald-500 to-teal-600' },\n { id: 'intermediate', emoji: '⚡', accent: 'from-sky-500 to-indigo-600' },\n { id: 'advanced', emoji: '🚀', accent: 'from-amber-500 to-orange-600' },\n { id: 'expert', emoji: '🧠', accent: 'from-rose-500 to-purple-600' },\n]\n\nconst EMOJI_PALETTE = ['💼', '🎧', '📊', '🛡️', '🔬', '✨', '🤖', '⚡', '🎯', '🚀', '🧠', '🦾', '📡', '🔮', '🌐', '🗂️']\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Range slider — visual control ported verbatim from the modal version so the\n// new wizard stays pixel-identical to the surface it replaces.\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ZoneSpec = { label: string; max: number; color: string; thumbColor: string }\n\nfunction RangeSliderField({\n sliderId,\n label,\n value,\n onChange,\n min,\n max,\n step,\n zones,\n trackGradient,\n formatValue,\n ariaLabel,\n}: {\n sliderId: string\n label: string\n value: number\n onChange: (v: number) => void\n min: number\n max: number\n step: number\n zones?: ZoneSpec[]\n trackGradient?: string\n formatValue?: (v: number) => string\n ariaLabel?: string\n}) {\n const percent = ((value - min) / (max - min)) * 100\n const activeZone = zones?.find((z) => value <= z.max) ?? zones?.[zones.length - 1]\n const thumbColor = activeZone?.thumbColor ?? '#6366f1'\n const glow = hexToGlow(thumbColor)\n const displayValue = formatValue ? formatValue(value) : value.toString()\n const ariaText = activeZone ? `${displayValue} — ${activeZone.label}` : displayValue\n\n return (\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <label htmlFor={sliderId} className=\"text-xs font-medium text-gray-500 dark:text-gray-400\">{label}</label>\n <span className=\"text-sm font-bold tabular-nums text-gray-900 dark:text-white\">{displayValue}</span>\n </div>\n <div className=\"relative\">\n <div className=\"absolute inset-x-0 top-1/2 h-2 -translate-y-1/2 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700\">\n <div\n className=\"h-full rounded-full transition-all duration-300 ease-out motion-reduce:transition-none\"\n style={{\n width: `${Math.max(0, Math.min(100, percent))}%`,\n background: trackGradient ?? `linear-gradient(90deg, ${thumbColor}, ${thumbColor})`,\n }}\n />\n </div>\n <input\n id={sliderId}\n data-slider-id={sliderId}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(parseFloat(e.target.value))}\n aria-label={ariaLabel ?? label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={ariaText}\n className=\"relative z-10 h-5 w-full cursor-pointer appearance-none bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 [&::-webkit-slider-thumb]:h-5 [&::-webkit-slider-thumb]:w-5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white [&::-webkit-slider-thumb]:shadow-lg dark:[&::-webkit-slider-thumb]:border-gray-900\"\n />\n <style>{`[data-slider-id=\"${sliderId}\"]::-webkit-slider-thumb { background: ${thumbColor}; box-shadow: 0 0 8px ${glow}; } [data-slider-id=\"${sliderId}\"]::-moz-range-thumb { background: ${thumbColor}; border: 2px solid white; box-shadow: 0 0 8px ${glow}; }`}</style>\n </div>\n {zones && zones.length > 0 && (\n <div className=\"mt-1 flex items-center justify-between\">\n {zones.map((z) => {\n const isActive = z.label === activeZone?.label\n return (\n <span\n key={z.label}\n className={`text-[10px] font-medium transition-colors motion-reduce:transition-none ${isActive ? z.color : 'text-gray-400 dark:text-gray-500'}`}\n >\n {z.label}\n </span>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nfunction hexToGlow(hex: string): string {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex)\n if (!m) return 'rgba(99,102,241,0.5)'\n const int = parseInt(m[1], 16)\n const r = (int >> 16) & 0xff\n const g = (int >> 8) & 0xff\n const b = int & 0xff\n return `rgba(${r},${g},${b},0.5)`\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Labels\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type AgentNewWizardLabels = {\n // Hero / chrome\n pageTitle: string\n // Step counter & navigation\n wizardStepCounter: string // e.g. \"Step {current} of {total}\"\n wizardBack: string\n wizardNext: string\n wizardCancel: string\n wizardCreate: string\n wizardCancelConfirm: string\n\n // Step titles / subtitles\n wizardStep1Title: string\n wizardStep1Subtitle: string\n wizardStep2Title: string\n wizardStep2Subtitle: string\n wizardStep3Title: string\n wizardStep3Subtitle: string\n wizardStep4Title: string\n wizardStep4Subtitle: string\n wizardStep5Title: string\n wizardStep5Subtitle: string\n\n wizardReviewTitle: string\n wizardReviewEdit: string\n\n // Reused labels from the prior modal\n presetTitle: string\n presetSubtitle: string\n presetCustom: string\n presetCustomHint: string\n identitySection: string\n identitySubtitle: string\n avatarLabel: string\n namePlaceholder: string\n behaviorSection: string\n behaviorSubtitle: string\n promptPlaceholder: string\n connectionLabel: string\n connectionPickPrompt: string\n connectionInline: string\n frameworkLabel: string\n frameworkAnthropic: string\n frameworkLangChain: string\n frameworkCrewAI: string\n frameworkGoogleADK: string\n frameworkOpenAI: string\n userPromptLabel: string\n userPromptPlaceholder: string\n topPLabel: string\n topKLabel: string\n metadataSection: string\n metadataSubtitle: string\n difficultyLabel: string\n difficultyBeginner: string\n difficultyIntermediate: string\n difficultyAdvanced: string\n difficultyExpert: string\n tagsLabel: string\n tagsPlaceholder: string\n outputSchemaLabel: string\n outputSchemaPlaceholder: string\n descriptionLabel: string\n descriptionPlaceholder: string\n\n // Reused field labels\n name: string\n role: string\n rolePlaceholder: string\n modelSection: string\n model: string\n modelEmpty: string\n temperature: string\n maxTokens: string\n promptSystemPrompt: string\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type AgentNewWizardPageViewProps = {\n labels: AgentNewWizardLabels\n models: AgentModel[]\n connections: ModelProviderConnection[]\n /** Available tools — not edited here but accepted so callers can stay consistent. */\n tools?: AgentTool[]\n /** Reads `?step=N` so refresh restores the active step; defaults to 1. */\n initialStep?: number\n /** Fires when the user navigates between steps so the host can update the URL. */\n onStepChange?: (step: number) => void\n /** Called when the user submits the final form. */\n onSubmit: (input: AgentConfigFormInput) => Promise<void>\n /** Called when the user clicks Cancel (after the host's confirm dialog runs). */\n onCancel: () => void\n}\n\nconst TOTAL_STEPS = 5\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Page-view\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function AgentNewWizardPageView({\n labels,\n models,\n connections,\n initialStep,\n onStepChange,\n onSubmit,\n onCancel,\n}: AgentNewWizardPageViewProps) {\n // Step state — clamped to [1, TOTAL_STEPS]. Driven by `?step=` on the\n // host so the URL stays the source of truth for which step is active.\n const clampedInitial = Math.min(TOTAL_STEPS, Math.max(1, initialStep ?? 1))\n const [step, setStep] = useState<number>(clampedInitial)\n\n // Form state — owned here so navigating between steps doesn't lose\n // anything. The host page deliberately does NOT persist this to\n // localStorage (per spec).\n const [presetId, setPresetId] = useState<string>('custom')\n const [emoji, setEmoji] = useState<string>('✨')\n const [name, setName] = useState<string>('')\n const [role, setRole] = useState<string>('')\n const [description, setDescription] = useState<string>('')\n const [systemPrompt, setSystemPrompt] = useState<string>('')\n const [userPrompt, setUserPrompt] = useState<string>('')\n const [temperature, setTemperature] = useState<number>(0.2)\n const [maxTokens, setMaxTokens] = useState<number>(2048)\n const [topP, setTopP] = useState<number>(1.0)\n const [topK, setTopK] = useState<number>(0)\n const [connectionId, setConnectionId] = useState<string>('')\n const [framework, setFramework] = useState<string>('')\n const [difficulty, setDifficulty] = useState<string>('intermediate')\n const [tagsInput, setTagsInput] = useState<string>('')\n const [outputSchema, setOutputSchema] = useState<string>('')\n const [modelId, setModelId] = useState<string>(models[0]?.id ?? '')\n const [submitting, setSubmitting] = useState(false)\n const [touched, setTouched] = useState(false)\n\n const activePreset = AGENT_PRESETS.find((p) => p.id === presetId) ?? AGENT_PRESETS[AGENT_PRESETS.length - 1]\n\n // Sync `?step=N` changes that originate outside the component (back/\n // forward buttons, deep-link refresh). When `initialStep` changes the\n // wizard re-applies it.\n useEffect(() => {\n const next = Math.min(TOTAL_STEPS, Math.max(1, initialStep ?? 1))\n if (next !== step) setStep(next)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialStep])\n\n // If the model list resolves after first render, default to the first\n // model so the review step never shows \"—\".\n useEffect(() => {\n if (!modelId && models.length > 0) setModelId(models[0].id)\n }, [models, modelId])\n\n // ── Derived options ──────────────────────────────────────────────\n const matchingModels = useMemo(() => {\n if (!connectionId) return models\n const conn = connections.find((c) => c.id === connectionId)\n const slug = conn?.providerSlug\n if (!slug) return models\n const matches = models.filter(\n (m) => (m.provider ?? '') === slug || String(m.provider ?? '').startsWith(slug),\n )\n return matches.length > 0 ? matches : models\n }, [models, connections, connectionId])\n\n const modelOptions = matchingModels.map((m) => ({ value: m.id, label: `${m.name} (${m.provider})` }))\n\n const connectionOptions = useMemo(() => {\n const inline = { value: '', label: labels.connectionInline }\n return [\n inline,\n ...connections.map((c) => ({\n value: c.id,\n label: `${c.name}${c.providerSlug ? ' · ' + c.providerSlug : ''}`,\n })),\n ]\n }, [connections, labels.connectionInline])\n\n const frameworkOptions = useMemo(() => [\n { value: '', label: labels.connectionInline },\n { value: 'anthropic', label: labels.frameworkAnthropic },\n { value: 'langchain', label: labels.frameworkLangChain },\n { value: 'crewai', label: labels.frameworkCrewAI },\n { value: 'google-adk', label: labels.frameworkGoogleADK },\n { value: 'openai', label: labels.frameworkOpenAI },\n ], [labels])\n\n // ── Step metadata ────────────────────────────────────────────────\n const stepTitles = [\n labels.wizardStep1Title,\n labels.wizardStep2Title,\n labels.wizardStep3Title,\n labels.wizardStep4Title,\n labels.wizardStep5Title,\n ]\n const stepSubtitles = [\n labels.wizardStep1Subtitle,\n labels.wizardStep2Subtitle,\n labels.wizardStep3Subtitle,\n labels.wizardStep4Subtitle,\n labels.wizardStep5Subtitle,\n ]\n\n const timelineSteps: StepTimelineItem[] = stepTitles.map((title, idx) => ({\n id: String(idx + 1),\n name: title,\n description: stepSubtitles[idx],\n status: idx + 1 < step ? 'complete' : idx + 1 === step ? 'current' : 'upcoming',\n }))\n\n // ── Helpers ──────────────────────────────────────────────────────\n function markTouched() {\n if (!touched) setTouched(true)\n }\n\n function applyPreset(preset: AgentPreset) {\n setPresetId(preset.id)\n setEmoji(preset.emoji)\n if (preset.id !== 'custom') {\n setName(preset.name)\n setRole(preset.role)\n setSystemPrompt(preset.systemPrompt)\n setTemperature(preset.temperature)\n setMaxTokens(preset.maxTokens)\n if (preset.framework) setFramework(preset.framework)\n }\n markTouched()\n }\n\n const goToStep = useCallback((next: number) => {\n const clamped = Math.min(TOTAL_STEPS, Math.max(1, next))\n setStep(clamped)\n onStepChange?.(clamped)\n }, [onStepChange])\n\n // Required-field validation. Only the Identity step really blocks\n // progression — everything else has a sensible default — but the\n // wizard still needs `name` before the user reaches Review.\n function canAdvance(from: number): boolean {\n if (from <= 1) return true\n if (from === 2) return name.trim().length > 0\n return true\n }\n\n const goNext = useCallback(() => {\n if (!canAdvance(step)) return\n if (step < TOTAL_STEPS) goToStep(step + 1)\n }, [step, name]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const goBack = useCallback(() => {\n if (step > 1) goToStep(step - 1)\n }, [step, goToStep])\n\n const cancelWithConfirm = useCallback(() => {\n if (touched && !window.confirm(labels.wizardCancelConfirm)) return\n onCancel()\n }, [touched, labels.wizardCancelConfirm, onCancel])\n\n // Keyboard shortcuts: Enter advances when valid, Esc cancels with\n // confirm. We attach to the wizard wrapper rather than the window so\n // we don't fight with form-input default behaviors when the focus is\n // already inside a textarea (Enter still inserts a newline there).\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancelWithConfirm()\n return\n }\n // Enter — only when not in a textarea / select / form input.\n if (e.key === 'Enter') {\n const target = e.target as HTMLElement | null\n const tag = target?.tagName?.toLowerCase()\n if (tag === 'textarea' || tag === 'select' || tag === 'input' || tag === 'button') return\n e.preventDefault()\n if (step < TOTAL_STEPS) goNext()\n else void submit()\n }\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [step, name, touched])\n\n async function submit() {\n setSubmitting(true)\n try {\n const parsedTags = tagsInput\n .split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n await onSubmit({\n name: name.trim() || activePreset.name || 'Untitled Agent',\n role: role.trim() || undefined,\n description: description.trim() || undefined,\n avatar: emoji,\n modelId,\n connectionId: connectionId || undefined,\n framework: framework || undefined,\n systemPrompt,\n userPrompt: userPrompt.trim() || undefined,\n maxTokens,\n temperature,\n topP,\n topK,\n difficulty: difficulty || undefined,\n tags: parsedTags.length > 0 ? parsedTags : undefined,\n outputSchema: outputSchema.trim() || undefined,\n })\n } finally {\n setSubmitting(false)\n }\n }\n\n // ── Hero ─────────────────────────────────────────────────────────\n const counter = labels.wizardStepCounter\n .replace('{current}', String(step))\n .replace('{total}', String(TOTAL_STEPS))\n\n const hero = (\n <HeroSection\n icon={\n <div\n className={`flex h-full w-full items-center justify-center rounded-lg bg-gradient-to-br ${activePreset.accent} text-lg shadow-sm`}\n aria-hidden=\"true\"\n >\n {emoji}\n </div>\n }\n label={counter}\n title={labels.pageTitle}\n subtitle={stepSubtitles[step - 1]}\n gradient={activePreset.accent}\n />\n )\n\n // ── Step body renderers ──────────────────────────────────────────\n function renderStep1() {\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.presetTitle,\n subtitle: labels.presetSubtitle,\n }}\n >\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2 lg:grid-cols-3\">\n {AGENT_PRESETS.map((preset) => {\n const selected = preset.id === presetId\n return (\n <button\n key={preset.id}\n type=\"button\"\n onClick={() => applyPreset(preset)}\n className={[\n 'liquid-surface group flex items-center gap-3 rounded-xl px-3 py-2.5 text-left transition-all',\n selected\n ? 'ring-2 ring-indigo-500/70 ring-offset-1 ring-offset-transparent'\n : 'hover:border-indigo-400/40 focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n ].join(' ')}\n >\n <span\n aria-hidden=\"true\"\n className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br ${preset.accent} text-base shadow-sm`}\n >\n {preset.emoji}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-slate-900 dark:text-white\">\n {preset.id === 'custom' ? labels.presetCustom : preset.name}\n </span>\n <span className=\"block truncate text-xs text-slate-500 dark:text-slate-400\">\n {preset.role || labels.presetCustomHint}\n </span>\n </span>\n </button>\n )\n })}\n </div>\n </SectionCard>\n )\n }\n\n function renderStep2() {\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.identitySection,\n subtitle: labels.identitySubtitle,\n }}\n >\n <div className=\"space-y-4\">\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.avatarLabel}\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {EMOJI_PALETTE.map((e) => (\n <button\n key={e}\n type=\"button\"\n onClick={() => { setEmoji(e); markTouched() }}\n aria-pressed={emoji === e}\n className={[\n 'flex h-9 w-9 items-center justify-center rounded-lg text-base transition-all',\n emoji === e\n ? `bg-gradient-to-br ${activePreset.accent} shadow-sm ring-2 ring-indigo-500/70 ring-offset-1 ring-offset-transparent`\n : 'liquid-surface hover:border-indigo-400/40 focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n ].join(' ')}\n >\n {e}\n </button>\n ))}\n </div>\n </div>\n <FormGrid>\n <FormInput\n label={labels.name}\n value={name}\n onValueChange={(v) => { setName(v); markTouched() }}\n required\n placeholder={labels.namePlaceholder}\n />\n <FormInput\n label={labels.role}\n value={role}\n onValueChange={(v) => { setRole(v); markTouched() }}\n placeholder={labels.rolePlaceholder}\n />\n </FormGrid>\n <FormTextarea\n label={labels.descriptionLabel}\n value={description}\n onValueChange={(v) => { setDescription(v); markTouched() }}\n rows={3}\n placeholder={labels.descriptionPlaceholder}\n />\n </div>\n </SectionCard>\n )\n }\n\n function renderStep3() {\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.modelSection,\n subtitle: labels.connectionPickPrompt,\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormSelect\n label={labels.connectionLabel}\n value={connectionId}\n onValueChange={(v) => { setConnectionId(v); markTouched() }}\n options={connectionOptions}\n icon={<LinkIcon className=\"h-4 w-4\" />}\n />\n <FormSelect\n label={labels.frameworkLabel}\n value={framework}\n onValueChange={(v) => { setFramework(v); markTouched() }}\n options={frameworkOptions}\n />\n <FormSelect\n label={labels.model}\n value={modelId}\n onValueChange={(v) => { setModelId(v); markTouched() }}\n options={modelOptions.length > 0 ? modelOptions : [{ value: '', label: labels.modelEmpty }]}\n />\n </FormGrid>\n <FormTextarea\n label={labels.outputSchemaLabel}\n value={outputSchema}\n onValueChange={(v) => { setOutputSchema(v); markTouched() }}\n rows={5}\n placeholder={labels.outputSchemaPlaceholder}\n />\n </div>\n </SectionCard>\n )\n }\n\n function renderStep4() {\n return (\n <div className=\"space-y-4\">\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.behaviorSection,\n subtitle: labels.behaviorSubtitle,\n }}\n >\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-1 flex items-center justify-between\">\n <label htmlFor=\"wizard-system-prompt\" className=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n {labels.promptSystemPrompt}\n </label>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">{systemPrompt.length} chars</span>\n </div>\n <textarea\n id=\"wizard-system-prompt\"\n value={systemPrompt}\n onChange={(e) => { setSystemPrompt(e.target.value); markTouched() }}\n rows={8}\n className=\"w-full resize-y rounded-lg border border-gray-200/50 bg-gray-50/50 px-3 py-2.5 font-mono text-xs leading-relaxed text-gray-700 outline-none transition-colors placeholder:text-gray-400 focus:border-indigo-300/50 focus:ring-1 focus:ring-indigo-300/30 motion-reduce:transition-none dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-indigo-500/30 dark:focus:ring-indigo-500/20\"\n placeholder={labels.promptPlaceholder}\n />\n </div>\n\n <div>\n <div className=\"mb-1 flex items-center justify-between\">\n <label htmlFor=\"wizard-user-prompt\" className=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n {labels.userPromptLabel}\n </label>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">{userPrompt.length} chars</span>\n </div>\n <textarea\n id=\"wizard-user-prompt\"\n value={userPrompt}\n onChange={(e) => { setUserPrompt(e.target.value); markTouched() }}\n rows={5}\n className=\"w-full resize-y rounded-lg border border-gray-200/50 bg-gray-50/50 px-3 py-2.5 font-mono text-xs leading-relaxed text-gray-700 outline-none transition-colors placeholder:text-gray-400 focus:border-indigo-300/50 focus:ring-1 focus:ring-indigo-300/30 motion-reduce:transition-none dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-indigo-500/30 dark:focus:ring-indigo-500/20\"\n placeholder={labels.userPromptPlaceholder}\n />\n </div>\n\n <RangeSliderField\n sliderId=\"wizard-temperature\"\n label={labels.temperature}\n value={temperature}\n onChange={(v) => { setTemperature(v); markTouched() }}\n min={0}\n max={1}\n step={0.05}\n trackGradient=\"linear-gradient(90deg, #3b82f6, #8b5cf6 50%, #ec4899)\"\n formatValue={(v) => v.toFixed(2)}\n zones={[\n { label: 'Precise', max: 0.3, color: 'text-blue-500', thumbColor: '#3b82f6' },\n { label: 'Balanced', max: 0.7, color: 'text-purple-500', thumbColor: '#8b5cf6' },\n { label: 'Creative', max: 1.0, color: 'text-pink-500', thumbColor: '#ec4899' },\n ]}\n />\n\n <RangeSliderField\n sliderId=\"wizard-top-p\"\n label={labels.topPLabel}\n value={topP}\n onChange={(v) => { setTopP(v); markTouched() }}\n min={0}\n max={1}\n step={0.05}\n trackGradient=\"linear-gradient(90deg, #6366f1, #8b5cf6)\"\n formatValue={(v) => v.toFixed(2)}\n zones={[\n { label: 'Top-P', max: 1.0, color: 'text-violet-500', thumbColor: '#8b5cf6' },\n ]}\n />\n\n <RangeSliderField\n sliderId=\"wizard-top-k\"\n label={labels.topKLabel}\n value={topK}\n onChange={(v) => { setTopK(Math.max(0, Math.floor(v))); markTouched() }}\n min={0}\n max={500}\n step={1}\n trackGradient=\"linear-gradient(90deg, #10b981, #14b8a6)\"\n formatValue={(v) => v.toString()}\n zones={[\n { label: 'Top-K', max: 500, color: 'text-emerald-500', thumbColor: '#10b981' },\n ]}\n />\n\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <label htmlFor=\"wizard-max-tokens\" className=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n {labels.maxTokens}\n </label>\n <span className=\"text-sm font-bold tabular-nums text-gray-900 dark:text-white\">\n {maxTokens.toLocaleString()}\n </span>\n </div>\n <input\n id=\"wizard-max-tokens\"\n type=\"number\"\n value={maxTokens}\n onChange={(e) => { setMaxTokens(Math.max(1, Math.floor(Number(e.target.value) || 0))); markTouched() }}\n min={1}\n max={32000}\n step={1}\n className=\"w-full rounded-lg border border-gray-200/50 bg-gray-50/50 px-3 py-2.5 text-sm tabular-nums text-gray-700 outline-none transition-colors focus:border-indigo-300/50 focus:ring-1 focus:ring-indigo-300/30 motion-reduce:transition-none dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:focus:border-indigo-500/30 dark:focus:ring-indigo-500/20\"\n />\n </div>\n\n <div className=\"overflow-hidden rounded-lg border border-gray-200/30 dark:border-white/10\">\n <div className=\"grid grid-cols-3 gap-px bg-gray-200/30 dark:bg-white/10\">\n <div className=\"bg-white/60 px-3 py-2 dark:bg-gray-900/60\">\n <p className=\"text-[9px] uppercase tracking-wider text-gray-400 dark:text-gray-500\">{labels.model}</p>\n <p className=\"truncate text-xs font-semibold text-gray-900 dark:text-white\">\n {matchingModels.find((m) => m.id === modelId)?.name ?? labels.modelEmpty}\n </p>\n </div>\n <div className=\"bg-white/60 px-3 py-2 dark:bg-gray-900/60\">\n <p className=\"text-[9px] uppercase tracking-wider text-gray-400 dark:text-gray-500\">{labels.maxTokens}</p>\n <p className=\"text-xs font-semibold text-gray-900 dark:text-white\">{maxTokens.toLocaleString()}</p>\n </div>\n <div className=\"bg-white/60 px-3 py-2 dark:bg-gray-900/60\">\n <p className=\"text-[9px] uppercase tracking-wider text-gray-400 dark:text-gray-500\">{labels.temperature}</p>\n <p className={`text-xs font-semibold ${temperature <= 0.3 ? 'text-blue-500' : temperature <= 0.7 ? 'text-purple-500' : 'text-pink-500'}`}>\n {temperature.toFixed(2)} · {temperature <= 0.3 ? 'Precise' : temperature <= 0.7 ? 'Balanced' : 'Creative'}\n </p>\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.metadataSection,\n subtitle: labels.metadataSubtitle,\n }}\n >\n <div className=\"space-y-4\">\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.difficultyLabel}\n </span>\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-4\">\n {DIFFICULTY_OPTIONS.map((opt) => {\n const selected = difficulty === opt.id\n const label =\n opt.id === 'beginner' ? labels.difficultyBeginner :\n opt.id === 'intermediate' ? labels.difficultyIntermediate :\n opt.id === 'advanced' ? labels.difficultyAdvanced :\n labels.difficultyExpert\n return (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => { setDifficulty(opt.id); markTouched() }}\n aria-pressed={selected}\n className={[\n 'liquid-surface flex items-center gap-2 rounded-xl px-3 py-2 text-left transition-all',\n selected\n ? 'ring-2 ring-indigo-500/70 ring-offset-1 ring-offset-transparent'\n : 'hover:border-indigo-400/40 focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n ].join(' ')}\n >\n <span\n aria-hidden=\"true\"\n className={`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br ${opt.accent} text-base shadow-sm`}\n >\n {opt.emoji}\n </span>\n <span className=\"text-sm font-semibold text-slate-900 dark:text-white\">\n {label}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n <FormInput\n label={labels.tagsLabel}\n value={tagsInput}\n onValueChange={(v) => { setTagsInput(v); markTouched() }}\n placeholder={labels.tagsPlaceholder}\n />\n </div>\n </SectionCard>\n </div>\n )\n }\n\n function renderStep5() {\n // Review — read-only summary. Each section has an Edit button that\n // jumps back to its source step so the user can correct without\n // losing the rest of the form.\n const modelLabel = models.find((m) => m.id === modelId)?.name ?? labels.modelEmpty\n const connectionLabel =\n connectionId\n ? connections.find((c) => c.id === connectionId)?.name ?? labels.connectionInline\n : labels.connectionInline\n\n return (\n <div className=\"space-y-4\">\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.wizardStep1Title,\n subtitle: labels.wizardStep1Subtitle,\n }}\n actions={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => goToStep(1)}>\n <PencilSquareIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.wizardReviewEdit}</span>\n </Button>\n )}\n >\n <p className=\"text-sm text-slate-700 dark:text-slate-200\">\n {presetId === 'custom'\n ? labels.presetCustom\n : (AGENT_PRESETS.find((p) => p.id === presetId)?.name ?? labels.presetCustom)}\n </p>\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.wizardStep2Title,\n subtitle: labels.wizardStep2Subtitle,\n }}\n actions={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => goToStep(2)}>\n <PencilSquareIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.wizardReviewEdit}</span>\n </Button>\n )}\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={`flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br ${activePreset.accent} text-lg shadow-sm`}\n >\n {emoji}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-slate-900 dark:text-white\">\n {name || labels.namePlaceholder}\n </p>\n {role && <p className=\"truncate text-xs text-slate-500 dark:text-slate-400\">{role}</p>}\n {description && (\n <p className=\"mt-1 text-xs text-slate-600 dark:text-slate-300\">{description}</p>\n )}\n </div>\n </div>\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.wizardStep3Title,\n subtitle: labels.wizardStep3Subtitle,\n }}\n actions={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => goToStep(3)}>\n <PencilSquareIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.wizardReviewEdit}</span>\n </Button>\n )}\n >\n <dl className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <ReviewRow label={labels.connectionLabel} value={connectionLabel} />\n <ReviewRow label={labels.frameworkLabel} value={framework || '—'} />\n <ReviewRow label={labels.model} value={modelLabel} />\n {outputSchema.trim() && (\n <ReviewRow label={labels.outputSchemaLabel} value={outputSchema.trim().slice(0, 60) + (outputSchema.length > 60 ? '…' : '')} />\n )}\n </dl>\n </SectionCard>\n\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.wizardStep4Title,\n subtitle: labels.wizardStep4Subtitle,\n }}\n actions={(\n <Button type=\"button\" size=\"sm\" outline onClick={() => goToStep(4)}>\n <PencilSquareIcon className=\"h-4 w-4\" />\n <span className=\"ml-1.5\">{labels.wizardReviewEdit}</span>\n </Button>\n )}\n >\n <dl className=\"grid grid-cols-2 gap-2 sm:grid-cols-4\">\n <ReviewRow label={labels.temperature} value={temperature.toFixed(2)} />\n <ReviewRow label={labels.topPLabel} value={topP.toFixed(2)} />\n <ReviewRow label={labels.topKLabel} value={String(topK)} />\n <ReviewRow label={labels.maxTokens} value={maxTokens.toLocaleString()} />\n </dl>\n {systemPrompt && (\n <div className=\"mt-3\">\n <p className=\"text-[10px] uppercase tracking-wider text-gray-400 dark:text-gray-500\">\n {labels.promptSystemPrompt}\n </p>\n <pre className=\"mt-1 line-clamp-4 whitespace-pre-wrap rounded-lg border border-slate-200/70 bg-slate-50/60 p-2 text-xs text-slate-700 dark:border-slate-700 dark:bg-slate-900/40 dark:text-slate-200\">\n {systemPrompt}\n </pre>\n </div>\n )}\n </SectionCard>\n </div>\n )\n }\n\n // ── Compose ──────────────────────────────────────────────────────\n const stepBody =\n step === 1 ? renderStep1() :\n step === 2 ? renderStep2() :\n step === 3 ? renderStep3() :\n step === 4 ? renderStep4() :\n renderStep5()\n\n const advanceDisabled = !canAdvance(step)\n\n const footer = (\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-t border-slate-200/60 pt-4 dark:border-white/10\">\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" outline onClick={goBack} disabled={step === 1 || submitting}>\n {labels.wizardBack}\n </Button>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" outline onClick={cancelWithConfirm} disabled={submitting}>\n {labels.wizardCancel}\n </Button>\n {step < TOTAL_STEPS ? (\n <Button type=\"button\" color=\"indigo\" onClick={goNext} disabled={advanceDisabled || submitting}>\n {labels.wizardNext}\n </Button>\n ) : (\n <Button type=\"button\" color=\"indigo\" onClick={() => void submit()} disabled={submitting}>\n {submitting ? labels.wizardCreate + '…' : labels.wizardCreate}\n </Button>\n )}\n </div>\n </div>\n )\n\n const content = (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n if (step < TOTAL_STEPS) goNext()\n else void submit()\n }}\n className=\"space-y-5\"\n >\n <StepTimeline\n steps={timelineSteps}\n progressLabel={labels.pageTitle}\n onStepClick={(idx) => {\n // Only allow jumping to completed or current steps; upcoming\n // are disabled by StepTimeline itself.\n goToStep(idx + 1)\n }}\n />\n\n <div className=\"mx-auto max-w-3xl space-y-5\">\n {stepBody}\n {footer}\n </div>\n </form>\n )\n\n return (\n <div className=\"space-y-4\">\n {hero}\n {content}\n </div>\n )\n}\n\nfunction ReviewRow({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"rounded-lg border border-slate-200/60 bg-white/40 px-3 py-2 dark:border-white/10 dark:bg-white/[0.04]\">\n <dt className=\"text-[10px] uppercase tracking-wider text-gray-400 dark:text-gray-500\">{label}</dt>\n <dd className=\"mt-0.5 truncate text-xs font-semibold text-gray-900 dark:text-white\">{value}</dd>\n </div>\n )\n}\n\n// Re-export the icon used in the review step so consumers don't need\n// to import it directly.\nexport { CpuChipIcon }\n"]}