@datatechsolutions/ui 3.9.0 → 3.10.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.
- package/dist/astrlabe/index.js +107 -107
- package/dist/astrlabe/index.mjs +3 -3
- package/dist/astrlabe/workflow-canvas.js +3 -3
- package/dist/astrlabe/workflow-canvas.mjs +2 -2
- package/dist/{chunk-ZDXEGSCF.js → chunk-2A45ZEK4.js} +45 -45
- package/dist/{chunk-ZDXEGSCF.js.map → chunk-2A45ZEK4.js.map} +1 -1
- package/dist/{chunk-T4IYOKHR.js → chunk-5AKTDJFR.js} +25 -25
- package/dist/{chunk-T4IYOKHR.js.map → chunk-5AKTDJFR.js.map} +1 -1
- package/dist/{chunk-ZQRUAXGP.mjs → chunk-5KI7FB3E.mjs} +188 -48
- package/dist/chunk-5KI7FB3E.mjs.map +1 -0
- package/dist/{chunk-GQWC4EKE.mjs → chunk-5U43K6G3.mjs} +4 -4
- package/dist/{chunk-GQWC4EKE.mjs.map → chunk-5U43K6G3.mjs.map} +1 -1
- package/dist/{chunk-PD3JLDA5.mjs → chunk-6UX2SRA2.mjs} +3 -3
- package/dist/{chunk-PD3JLDA5.mjs.map → chunk-6UX2SRA2.mjs.map} +1 -1
- package/dist/{chunk-2ZY3IQ2I.mjs → chunk-6ZYATZS3.mjs} +3 -3
- package/dist/{chunk-2ZY3IQ2I.mjs.map → chunk-6ZYATZS3.mjs.map} +1 -1
- package/dist/{chunk-AXBD6OAF.mjs → chunk-A256OE5E.mjs} +11 -11
- package/dist/{chunk-AXBD6OAF.mjs.map → chunk-A256OE5E.mjs.map} +1 -1
- package/dist/{chunk-DQIEVLA3.js → chunk-AMESLEIO.js} +35 -35
- package/dist/{chunk-DQIEVLA3.js.map → chunk-AMESLEIO.js.map} +1 -1
- package/dist/{chunk-6E2YH67A.js → chunk-B76RTA7D.js} +35 -35
- package/dist/{chunk-6E2YH67A.js.map → chunk-B76RTA7D.js.map} +1 -1
- package/dist/{chunk-OVQ4MKCV.mjs → chunk-BU4WMSK3.mjs} +3 -3
- package/dist/{chunk-OVQ4MKCV.mjs.map → chunk-BU4WMSK3.mjs.map} +1 -1
- package/dist/{chunk-WS3IJFPW.mjs → chunk-C4D3EI5L.mjs} +3 -3
- package/dist/{chunk-WS3IJFPW.mjs.map → chunk-C4D3EI5L.mjs.map} +1 -1
- package/dist/{chunk-EAIE4QGD.mjs → chunk-DA3H7ERQ.mjs} +20 -20
- package/dist/{chunk-EAIE4QGD.mjs.map → chunk-DA3H7ERQ.mjs.map} +1 -1
- package/dist/{chunk-U6VFS3RD.js → chunk-EC34PGUO.js} +142 -142
- package/dist/{chunk-U6VFS3RD.js.map → chunk-EC34PGUO.js.map} +1 -1
- package/dist/{chunk-6QJI5YOJ.mjs → chunk-FD376DZ6.mjs} +3 -3
- package/dist/{chunk-6QJI5YOJ.mjs.map → chunk-FD376DZ6.mjs.map} +1 -1
- package/dist/{chunk-ZQEMKEEH.mjs → chunk-FENA4YGN.mjs} +3 -3
- package/dist/{chunk-ZQEMKEEH.mjs.map → chunk-FENA4YGN.mjs.map} +1 -1
- package/dist/{chunk-R6GEJBFC.js → chunk-FIJMOTP4.js} +34 -34
- package/dist/{chunk-R6GEJBFC.js.map → chunk-FIJMOTP4.js.map} +1 -1
- package/dist/{chunk-BWUFLW5W.mjs → chunk-H7X3SXMB.mjs} +6 -6
- package/dist/{chunk-BWUFLW5W.mjs.map → chunk-H7X3SXMB.mjs.map} +1 -1
- package/dist/{chunk-OEZ7GAJY.mjs → chunk-HEXTU6W3.mjs} +6 -6
- package/dist/{chunk-OEZ7GAJY.mjs.map → chunk-HEXTU6W3.mjs.map} +1 -1
- package/dist/{chunk-2E7HYTS7.mjs → chunk-JB3U6ORY.mjs} +3 -3
- package/dist/{chunk-2E7HYTS7.mjs.map → chunk-JB3U6ORY.mjs.map} +1 -1
- package/dist/{chunk-A2RIX2RK.js → chunk-KHUWFL6W.js} +4 -4
- package/dist/{chunk-A2RIX2RK.js.map → chunk-KHUWFL6W.js.map} +1 -1
- package/dist/{chunk-CRBGZA6Y.js → chunk-L3R425GB.js} +13 -13
- package/dist/{chunk-CRBGZA6Y.js.map → chunk-L3R425GB.js.map} +1 -1
- package/dist/{chunk-MT66VKLS.js → chunk-LVR4SR65.js} +189 -47
- package/dist/chunk-LVR4SR65.js.map +1 -0
- package/dist/{chunk-UZIICTIY.js → chunk-MAOZWOA6.js} +55 -55
- package/dist/{chunk-UZIICTIY.js.map → chunk-MAOZWOA6.js.map} +1 -1
- package/dist/{chunk-WJENX6KB.js → chunk-MSMEECO6.js} +9 -9
- package/dist/{chunk-WJENX6KB.js.map → chunk-MSMEECO6.js.map} +1 -1
- package/dist/{chunk-SJ6SUS7H.mjs → chunk-NM37GLCL.mjs} +3 -3
- package/dist/{chunk-SJ6SUS7H.mjs.map → chunk-NM37GLCL.mjs.map} +1 -1
- package/dist/{chunk-CLTNCBSP.js → chunk-NSZN54HW.js} +4 -4
- package/dist/{chunk-CLTNCBSP.js.map → chunk-NSZN54HW.js.map} +1 -1
- package/dist/{chunk-7AM2SXEF.js → chunk-O4HH77A4.js} +85 -85
- package/dist/{chunk-7AM2SXEF.js.map → chunk-O4HH77A4.js.map} +1 -1
- package/dist/{chunk-RFUSH7WD.js → chunk-TSNKICPP.js} +10 -10
- package/dist/{chunk-RFUSH7WD.js.map → chunk-TSNKICPP.js.map} +1 -1
- package/dist/{chunk-ARLYOLSO.mjs → chunk-W6MBDTKF.mjs} +3 -3
- package/dist/{chunk-ARLYOLSO.mjs.map → chunk-W6MBDTKF.mjs.map} +1 -1
- package/dist/{chunk-IVKFXPLO.js → chunk-YSYEV2Z6.js} +28 -28
- package/dist/{chunk-IVKFXPLO.js.map → chunk-YSYEV2Z6.js.map} +1 -1
- package/dist/index.d.mts +108 -4
- package/dist/index.d.ts +108 -4
- package/dist/index.js +670 -662
- package/dist/index.mjs +1 -1
- package/dist/platform/admin/index.js +9 -9
- package/dist/platform/admin/index.mjs +3 -3
- package/dist/platform/agents-workspace.js +6 -6
- package/dist/platform/agents-workspace.mjs +5 -5
- package/dist/platform/app-shell.js +3 -3
- package/dist/platform/app-shell.mjs +2 -2
- package/dist/platform/auth/index.js +21 -21
- package/dist/platform/auth/index.mjs +3 -3
- package/dist/platform/billing/index.js +3 -3
- package/dist/platform/billing/index.mjs +2 -2
- package/dist/platform/impersonation/index.js +3 -3
- package/dist/platform/impersonation/index.mjs +2 -2
- package/dist/platform/index.d.mts +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +74 -74
- package/dist/platform/index.mjs +17 -17
- package/dist/platform/pages/index.d.mts +235 -3
- package/dist/platform/pages/index.d.ts +235 -3
- package/dist/platform/pages/index.js +1988 -281
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +1758 -53
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +6 -6
- package/dist/platform/settings/index.mjs +5 -5
- package/dist/platform/workflow-canvas-shell.js +4 -4
- package/dist/platform/workflow-canvas-shell.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-MT66VKLS.js.map +0 -1
- package/dist/chunk-ZQRUAXGP.mjs.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","../../../src/platform/pages/agent-new-wizard-page-view.tsx"],"names":["useState","jsx","HeroSection","CubeTransparentIcon","PageLoadingState","PageEmptyState","jsxs","Fragment","SearchBar","EntityCard","Badge","CpuChipIcon","CreateActionButton","Button","GlassModal","FormGrid","FormInput","FormSelect","FormTextarea","useMemo","ChatBubbleLeftEllipsisIcon","WrenchScrewdriverIcon","AdjustmentsHorizontalIcon","defaultRuleForm","RuleForm","DIALECT_CATEGORIES","findCategory","CircleStackIcon","DatasourceModal","useLink","SectionHeader","RectangleStackIcon","Text","Form","FormActionsRow","Table","TableHead","TableRow","TableHeader","TableBody","TableCell","InlineForm","WorkflowWorkspace","adaptWorkflowGraphToUi","ClockIcon","formatDurationMs","ExecutionTimelinePanel","LinkIcon","useEffect","KeyIcon","CopyableId","ArrowPathIcon","TrashIcon","LOCALE_OPTIONS","ListCard","ListCardItem","Avatar","SectionCard","Tabs","TabsList","TabsTrigger","TabsContent","PlusIcon","useCallback","PencilSquareIcon","StepTimeline"],"mappings":"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","file":"index.js","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"]}
|
|
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","../../../src/platform/pages/datasource-new-wizard-page-view.tsx","../../../src/platform/pages/rule-new-wizard-page-view.tsx"],"names":["useState","jsx","HeroSection","CubeTransparentIcon","PageLoadingState","PageEmptyState","jsxs","Fragment","SearchBar","EntityCard","Badge","CpuChipIcon","CreateActionButton","Button","GlassModal","FormGrid","FormInput","FormSelect","FormTextarea","useMemo","ChatBubbleLeftEllipsisIcon","WrenchScrewdriverIcon","AdjustmentsHorizontalIcon","defaultRuleForm","RuleForm","DIALECT_CATEGORIES","findCategory","CircleStackIcon","DatasourceModal","useLink","SectionHeader","RectangleStackIcon","Text","Form","FormActionsRow","Table","TableHead","TableRow","TableHeader","TableBody","TableCell","InlineForm","WorkflowWorkspace","adaptWorkflowGraphToUi","ClockIcon","formatDurationMs","ExecutionTimelinePanel","LinkIcon","useEffect","KeyIcon","CopyableId","ArrowPathIcon","TrashIcon","LOCALE_OPTIONS","ListCard","ListCardItem","Avatar","SectionCard","Tabs","TabsList","TabsTrigger","TabsContent","PlusIcon","formatValue","useCallback","FilterTileButton","PencilSquareIcon","StepTimeline","TOTAL_STEPS","findDialect","FormToggle","Spinner","StatusBadge","FormCheckbox","ReviewRow","RangeSliderField","hexToGlow","BellAlertIcon","GlobeAltIcon","PencilIcon","ArrowUpCircleIcon","SparklesIcon","defaultRuleCondition","defaultRuleAction","SegmentedControl","RuleConditionBuilder","description","RuleActionBuilder","DatePicker","TimePicker"],"mappings":"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","file":"index.js","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 /** When provided, the \"Add Rule\" CTA fires this callback instead of\n * opening the in-page modal. Used by the SPA to navigate to the\n * dedicated `/rules/new` wizard. */\n onAddClick?: () => void\n}\n\nexport function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete, onAddClick }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const openCreate = () => {\n if (onAddClick) onAddClick()\n else setCreateOpen(true)\n }\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={openCreate}\n accent=\"fuchsia\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addRule}\n onClick={openCreate}\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 /** When provided, the \"Add Data Source\" CTA fires this callback\n * instead of opening the in-page modal. Used by the SPA to navigate\n * to the dedicated `/datasources/new` wizard. */\n onAddClick?: () => void\n}\n\n/* ─── Component ─── */\n\nexport function DatasourcesPageView({\n labels,\n datasources: externalDatasources,\n useSampleData = false,\n onCreate,\n onAddClick,\n}: DatasourcesPageViewProps) {\n const [modalOpen, setModalOpen] = useState(false)\n const openCreate = () => {\n if (onAddClick) onAddClick()\n else setModalOpen(true)\n }\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={openCreate}\n accent=\"amber\"\n />\n }\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addDatasource}\n onClick={openCreate}\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 FilterTileButton,\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 tileColor: 'emerald' | 'sky' | 'amber' | 'rose' | 'violet' | 'slate' | 'indigo' | 'cyan'\n}\n\n// `tileColor` maps to a FilterTileButton color (the DS picker primitive\n// — single-select via aria-checked + isActive). The accent gradient is\n// kept for the modal hero icon + AccentBar, which still uses the same\n// from/to gradient vocabulary.\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', tileColor: 'emerald' },\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', tileColor: 'sky' },\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', tileColor: 'amber' },\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', tileColor: 'rose' },\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', tileColor: 'violet' },\n { id: 'custom', emoji: '✨', name: '', role: '', systemPrompt: '', temperature: 0.2, maxTokens: 2048, accent: 'from-slate-500 to-slate-700', tileColor: 'slate' },\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\n role=\"radiogroup\"\n aria-label={labels.presetTitle}\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\"\n >\n {AGENT_PRESETS.map((preset) => {\n const selected = preset.id === presetId\n return (\n <FilterTileButton\n key={preset.id}\n isActive={selected}\n color={preset.tileColor}\n icon={<span aria-hidden=\"true\" className=\"text-base leading-none\">{preset.emoji}</span>}\n label={preset.id === 'custom' ? labels.presetCustom : preset.name}\n count={preset.role || labels.presetCustomHint}\n onClick={() => applyPreset(preset)}\n />\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=\"w-full 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","import { useEffect, useState, useCallback, useMemo, type FormEvent, type ReactNode } from 'react'\nimport {\n CircleStackIcon,\n CheckCircleIcon,\n XCircleIcon,\n PencilSquareIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Button,\n FilterTileButton,\n FormGrid,\n FormInput,\n FormToggle,\n FormCheckbox,\n HeroSection,\n SectionCard,\n Spinner,\n StatusBadge,\n StepTimeline,\n type StepTimelineItem,\n type FilterTileColor,\n} from '@ui/index'\nimport {\n DIALECT_CATEGORIES,\n findDialect,\n findCategory,\n type DatasourceFormData,\n} from './datasource-modal'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Brand SVG lookup — kept in sync with `datasource-modal.tsx` and\n// `datasources-page-view.tsx` so the same logo shows everywhere.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst DIALECT_LOGO_SRC: 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 neptune: '/logos/datasources/neptune.svg',\n timestream: '/logos/datasources/timestream.svg',\n opensearch: '/logos/datasources/opensearch.svg',\n}\n\n// Category id → FilterTileButton color. Aligns with the `gradient` in\n// DIALECT_CATEGORIES so the wizard tiles look the same family as the\n// modal pickers + index cards.\nconst CATEGORY_COLOR: Record<string, FilterTileColor> = {\n relational: 'blue',\n nosql: 'emerald',\n warehouse: 'purple',\n timeseries: 'sky',\n graph: 'pink',\n keyvalue: 'red',\n search: 'amber',\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Labels\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type DatasourceNewWizardLabels = {\n pageTitle: string\n pageSubtitle: string\n wizardStepCounter: string\n wizardBack: string\n wizardNext: string\n wizardCancel: string\n wizardCreate: string\n wizardCancelConfirm: string\n\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\n wizardReviewEdit: string\n\n // Category labels — keyed by category id (same labelKeys the modal uses)\n categoryRelational: string\n categoryNoSql: string\n categoryWarehouse: string\n categoryTimeSeries: string\n categoryGraph: string\n categoryKeyValue: string\n categorySearch: string\n\n // Field labels (reuse the same i18n keys as the modal)\n fieldName: string\n fieldNamePlaceholder: string\n fieldHost: string\n fieldHostPlaceholder: string\n fieldPort: string\n fieldDatabase: string\n fieldDatabasePlaceholder: string\n fieldUsername: string\n fieldUsernamePlaceholder: string\n fieldPassword: string\n fieldPasswordPlaceholder: string\n fieldSchema: string\n fieldSchemaPlaceholder: string\n fieldSsl: string\n fieldReadOnly: string\n fieldReadOnlyHelp: string\n fieldConnectionString: string\n fieldConnectionStringPlaceholder: string\n fieldProjectId: string\n fieldProjectIdPlaceholder: string\n fieldDataset: string\n fieldDatasetPlaceholder: string\n fieldKeyFile: string\n fieldKeyFilePlaceholder: string\n fieldAccount: string\n fieldAccountPlaceholder: string\n fieldWarehouse: string\n fieldWarehousePlaceholder: string\n fieldRegion: string\n fieldRegionPlaceholder: string\n fieldBucket: string\n fieldBucketPlaceholder: string\n fieldToken: string\n fieldTokenPlaceholder: string\n fieldApiKey: string\n fieldApiKeyPlaceholder: string\n fieldEnvironment: string\n fieldEnvironmentPlaceholder: string\n fieldIndex: string\n fieldIndexPlaceholder: string\n\n testConnection: string\n testing: string\n connectionSuccess: string\n connectionFailed: string\n\n // Governance step\n governanceSectionTitle: string\n governanceSectionSubtitle: string\n fieldMaxPoolSize: string\n fieldMaxPoolSizeHint: string\n fieldTimeoutMs: string\n fieldTimeoutMsHint: string\n fieldAllowedTables: string\n fieldAllowedTablesHint: string\n fieldAllowedTablesPlaceholder: string\n fieldBlockedColumns: string\n fieldBlockedColumnsHint: string\n fieldBlockedColumnsPlaceholder: string\n fieldMaskPii: string\n fieldMaskPiiDescription: string\n\n // Review\n reviewCategoryLabel: string\n reviewDialectLabel: string\n reviewNameLabel: string\n reviewCredentialsLabel: string\n reviewCredentialsRedacted: string\n reviewSslLabel: string\n reviewReadOnlyLabel: string\n reviewPoolLabel: string\n reviewTimeoutLabel: string\n reviewAllowedTablesLabel: string\n reviewBlockedColumnsLabel: string\n reviewMaskPiiLabel: string\n reviewNoneValue: string\n reviewYes: string\n reviewNo: string\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type DatasourceNewWizardPageViewProps = {\n labels: DatasourceNewWizardLabels\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: DatasourceFormData) => Promise<void>\n /** Called when the user clicks Cancel (after the host's confirm dialog runs). */\n onCancel: () => void\n /** Optional async hook — wired to a real /datasources/test endpoint when one\n * exists. When omitted the wizard simulates success after 1.5s. */\n onTestConnection?: (input: DatasourceFormData) => Promise<boolean>\n}\n\nconst TOTAL_STEPS = 4\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Page-view\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function DatasourceNewWizardPageView({\n labels,\n initialStep,\n onStepChange,\n onSubmit,\n onCancel,\n onTestConnection,\n}: DatasourceNewWizardPageViewProps) {\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 drop\n // values. No localStorage persistence (matches agent wizard spec).\n const [dialect, setDialect] = useState<string>('')\n const [name, setName] = useState<string>('')\n const [host, setHost] = useState<string>('')\n const [port, setPort] = useState<string>('')\n const [database, setDatabase] = useState<string>('')\n const [username, setUsername] = useState<string>('')\n const [password, setPassword] = useState<string>('')\n const [schema, setSchema] = useState<string>('')\n const [connectionString, setConnectionString] = useState<string>('')\n const [projectId, setProjectId] = useState<string>('')\n const [dataset, setDataset] = useState<string>('')\n const [keyFile, setKeyFile] = useState<string>('')\n const [account, setAccount] = useState<string>('')\n const [warehouseField, setWarehouseField] = useState<string>('')\n const [region, setRegion] = useState<string>('')\n const [bucket, setBucket] = useState<string>('')\n const [token, setToken] = useState<string>('')\n const [apiKey, setApiKey] = useState<string>('')\n const [environment, setEnvironment] = useState<string>('')\n const [index, setIndex] = useState<string>('')\n const [ssl, setSsl] = useState<boolean>(true)\n const [readOnly, setReadOnly] = useState<boolean>(true)\n\n const [maxPoolSize, setMaxPoolSize] = useState<string>('5')\n const [timeoutMs, setTimeoutMs] = useState<string>('5000')\n const [allowedTables, setAllowedTables] = useState<string>('')\n const [blockedColumns, setBlockedColumns] = useState<string>('')\n const [maskPii, setMaskPii] = useState<boolean>(false)\n\n const [submitting, setSubmitting] = useState(false)\n const [touched, setTouched] = useState(false)\n const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'failed'>('idle')\n\n const dialectOption = useMemo(() => (dialect ? findDialect(dialect) : null), [dialect])\n const category = useMemo(() => (dialect ? findCategory(dialect) : null), [dialect])\n\n // Default port when dialect changes (only if user hasn't typed a custom port).\n useEffect(() => {\n if (dialectOption?.defaultPort && (port === '' || /^[0-9]+$/.test(port))) {\n setPort(String(dialectOption.defaultPort))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dialect])\n\n // Sync `?step=N` changes that originate outside the component.\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 function markTouched() {\n if (!touched) setTouched(true)\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 function canAdvance(from: number): boolean {\n if (from === 1) return Boolean(dialect)\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, dialect, 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 // Build the canonical wire payload (`DatasourceFormData`) from the\n // wizard state. Used by both Submit and Test Connection so they stay\n // in lock-step.\n function buildPayload(): DatasourceFormData {\n const payload: DatasourceFormData = {\n name: name.trim(),\n dialect,\n ssl,\n readOnly,\n }\n if (host.trim()) payload.host = host.trim()\n const portNum = Number(port)\n if (Number.isFinite(portNum) && portNum > 0) payload.port = portNum\n if (database.trim()) payload.database = database.trim()\n if (username.trim()) payload.username = username.trim()\n if (password) payload.password = password\n if (schema.trim()) payload.schema = schema.trim()\n if (connectionString.trim()) payload.connectionString = connectionString.trim()\n if (projectId.trim()) payload.projectId = projectId.trim()\n if (dataset.trim()) payload.dataset = dataset.trim()\n if (keyFile.trim()) payload.keyFile = keyFile.trim()\n if (account.trim()) payload.account = account.trim()\n if (warehouseField.trim()) payload.warehouse = warehouseField.trim()\n if (region.trim()) payload.region = region.trim()\n if (bucket.trim()) payload.bucket = bucket.trim()\n if (token) payload.token = token\n if (apiKey) payload.apiKey = apiKey\n if (environment.trim()) payload.environment = environment.trim()\n if (index.trim()) payload.index = index.trim()\n\n const pool = Number(maxPoolSize)\n if (Number.isFinite(pool) && pool > 0) payload.maxPoolSize = pool\n const timeout = Number(timeoutMs)\n if (Number.isFinite(timeout) && timeout > 0) payload.timeoutMs = timeout\n\n const allowed = splitList(allowedTables)\n if (allowed.length > 0) payload.allowedTables = allowed\n const blocked = splitList(blockedColumns)\n if (blocked.length > 0) payload.blockedColumns = blocked\n\n return payload\n }\n\n async function handleTestConnection() {\n setTestStatus('testing')\n try {\n const ok = onTestConnection\n ? await onTestConnection(buildPayload())\n : await simulateTest()\n setTestStatus(ok ? 'success' : 'failed')\n setTimeout(() => setTestStatus('idle'), 3500)\n } catch {\n setTestStatus('failed')\n setTimeout(() => setTestStatus('idle'), 3500)\n }\n }\n\n async function submit() {\n setSubmitting(true)\n try {\n // maskPii is a \"no-op flag for now\" per spec — DatasourceFormData\n // doesn't model it yet, so we cast through Record. The backend can\n // start honoring `maskPii` later without another wire change.\n const payload = {\n ...buildPayload(),\n ...(maskPii ? { maskPii: true } : {}),\n } as DatasourceFormData\n await onSubmit(payload)\n } finally {\n setSubmitting(false)\n }\n }\n\n // Keyboard shortcuts: Enter advances, Esc cancels.\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancelWithConfirm()\n return\n }\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, dialect, name, touched])\n\n // ── Step metadata ────────────────────────────────────────────────\n const stepTitles = [\n labels.wizardStep1Title,\n labels.wizardStep2Title,\n labels.wizardStep3Title,\n labels.wizardStep4Title,\n ]\n const stepSubtitles = [\n labels.wizardStep1Subtitle,\n labels.wizardStep2Subtitle,\n labels.wizardStep3Subtitle,\n labels.wizardStep4Subtitle,\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 const counter = labels.wizardStepCounter\n .replace('{current}', String(step))\n .replace('{total}', String(TOTAL_STEPS))\n\n const hero = (\n <HeroSection\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n label={counter}\n title={labels.pageTitle}\n subtitle={stepSubtitles[step - 1] ?? labels.pageSubtitle}\n gradient={category?.gradient ?? 'from-amber-500 to-orange-600'}\n />\n )\n\n // ── Step renderers ───────────────────────────────────────────────\n function renderStep1() {\n return (\n <div className=\"space-y-6\">\n {DIALECT_CATEGORIES.map((cat) => {\n const color = CATEGORY_COLOR[cat.id] ?? 'slate'\n const categoryLabel = (labels as unknown as Record<string, string>)[cat.labelKey] ?? cat.id\n return (\n <SectionCard\n key={cat.id}\n variant=\"glass\"\n header={{\n title: categoryLabel,\n icon: <cat.icon className=\"h-4 w-4\" />,\n gradient: cat.gradient,\n }}\n >\n <div\n role=\"radiogroup\"\n aria-label={categoryLabel}\n className=\"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-4\"\n >\n {cat.dialects.map((opt) => {\n const selected = opt.value === dialect\n const logoSrc = DIALECT_LOGO_SRC[opt.value.toLowerCase()]\n return (\n <FilterTileButton\n key={opt.value}\n isActive={selected}\n color={color}\n icon={\n logoSrc ? (\n <img src={logoSrc} alt={opt.label} className=\"h-5 w-5 object-contain\" />\n ) : (\n <CircleStackIcon className=\"h-5 w-5\" />\n )\n }\n label={opt.label}\n count={opt.formType.replace('-', ' ')}\n onClick={() => {\n setDialect(opt.value)\n markTouched()\n }}\n />\n )\n })}\n </div>\n </SectionCard>\n )\n })}\n </div>\n )\n }\n\n function renderConnectionFields(): ReactNode {\n if (!dialectOption) return null\n\n switch (dialectOption.formType) {\n case 'standard':\n return (\n <>\n <FormInput\n label={labels.fieldHost}\n value={host}\n onValueChange={(v) => { setHost(v); markTouched() }}\n placeholder={labels.fieldHostPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldPort}\n type=\"number\"\n value={port}\n onValueChange={(v) => { setPort(v); markTouched() }}\n />\n <FormInput\n label={labels.fieldDatabase}\n value={database}\n onValueChange={(v) => { setDatabase(v); markTouched() }}\n placeholder={labels.fieldDatabasePlaceholder}\n required\n />\n <FormInput\n label={labels.fieldUsername}\n value={username}\n onValueChange={(v) => { setUsername(v); markTouched() }}\n placeholder={labels.fieldUsernamePlaceholder}\n />\n <FormInput\n label={labels.fieldPassword}\n type=\"password\"\n value={password}\n onValueChange={(v) => { setPassword(v); markTouched() }}\n placeholder={labels.fieldPasswordPlaceholder}\n />\n <FormInput\n label={labels.fieldSchema}\n value={schema}\n onValueChange={(v) => { setSchema(v); markTouched() }}\n placeholder={labels.fieldSchemaPlaceholder}\n />\n </>\n )\n case 'connection-string':\n return (\n <div className=\"col-span-full\">\n <FormInput\n label={labels.fieldConnectionString}\n value={connectionString}\n onValueChange={(v) => { setConnectionString(v); markTouched() }}\n placeholder={labels.fieldConnectionStringPlaceholder}\n required\n />\n </div>\n )\n case 'cloud-bigquery':\n return (\n <>\n <FormInput\n label={labels.fieldProjectId}\n value={projectId}\n onValueChange={(v) => { setProjectId(v); markTouched() }}\n placeholder={labels.fieldProjectIdPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldDataset}\n value={dataset}\n onValueChange={(v) => { setDataset(v); markTouched() }}\n placeholder={labels.fieldDatasetPlaceholder}\n required\n />\n <div className=\"col-span-full\">\n <FormInput\n label={labels.fieldKeyFile}\n value={keyFile}\n onValueChange={(v) => { setKeyFile(v); markTouched() }}\n placeholder={labels.fieldKeyFilePlaceholder}\n />\n </div>\n </>\n )\n case 'cloud-snowflake':\n return (\n <>\n <FormInput\n label={labels.fieldAccount}\n value={account}\n onValueChange={(v) => { setAccount(v); markTouched() }}\n placeholder={labels.fieldAccountPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldWarehouse}\n value={warehouseField}\n onValueChange={(v) => { setWarehouseField(v); markTouched() }}\n placeholder={labels.fieldWarehousePlaceholder}\n required\n />\n <FormInput\n label={labels.fieldDatabase}\n value={database}\n onValueChange={(v) => { setDatabase(v); markTouched() }}\n placeholder={labels.fieldDatabasePlaceholder}\n required\n />\n <FormInput\n label={labels.fieldUsername}\n value={username}\n onValueChange={(v) => { setUsername(v); markTouched() }}\n placeholder={labels.fieldUsernamePlaceholder}\n required\n />\n <FormInput\n label={labels.fieldPassword}\n type=\"password\"\n value={password}\n onValueChange={(v) => { setPassword(v); markTouched() }}\n placeholder={labels.fieldPasswordPlaceholder}\n />\n <FormInput\n label={labels.fieldSchema}\n value={schema}\n onValueChange={(v) => { setSchema(v); markTouched() }}\n placeholder={labels.fieldSchemaPlaceholder}\n />\n </>\n )\n case 'cloud-key':\n return (\n <>\n <FormInput\n label={labels.fieldRegion}\n value={region}\n onValueChange={(v) => { setRegion(v); markTouched() }}\n placeholder={labels.fieldRegionPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldToken}\n type=\"password\"\n value={token}\n onValueChange={(v) => { setToken(v); markTouched() }}\n placeholder={labels.fieldTokenPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldBucket}\n value={bucket}\n onValueChange={(v) => { setBucket(v); markTouched() }}\n placeholder={labels.fieldBucketPlaceholder}\n />\n </>\n )\n case 'vector-key':\n return (\n <>\n <FormInput\n label={labels.fieldApiKey}\n type=\"password\"\n value={apiKey}\n onValueChange={(v) => { setApiKey(v); markTouched() }}\n placeholder={labels.fieldApiKeyPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldEnvironment}\n value={environment}\n onValueChange={(v) => { setEnvironment(v); markTouched() }}\n placeholder={labels.fieldEnvironmentPlaceholder}\n required\n />\n <FormInput\n label={labels.fieldIndex}\n value={index}\n onValueChange={(v) => { setIndex(v); markTouched() }}\n placeholder={labels.fieldIndexPlaceholder}\n />\n </>\n )\n }\n }\n\n function renderStep2() {\n if (!dialectOption) {\n // User landed here without picking a dialect (deep link to ?step=2).\n // Redirect them back to step 1 instead of rendering a blank form.\n return (\n <SectionCard variant=\"glass\" header={{ title: labels.wizardStep1Title }}>\n <p className=\"text-sm text-slate-700 dark:text-slate-200\">\n {labels.wizardStep1Subtitle}\n </p>\n <div className=\"mt-3\">\n <Button type=\"button\" outline onClick={() => goToStep(1)}>\n {labels.wizardBack}\n </Button>\n </div>\n </SectionCard>\n )\n }\n\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: dialectOption.label,\n subtitle: labels.wizardStep2Subtitle,\n icon: category?.icon ? <category.icon className=\"h-4 w-4\" /> : <CircleStackIcon className=\"h-4 w-4\" />,\n gradient: category?.gradient,\n }}\n >\n <div className=\"space-y-4\">\n <FormInput\n label={labels.fieldName}\n value={name}\n onValueChange={(v) => { setName(v); markTouched() }}\n placeholder={labels.fieldNamePlaceholder}\n required\n />\n\n <FormGrid>{renderConnectionFields()}</FormGrid>\n\n <div className=\"flex flex-wrap items-center gap-6 pt-1\">\n <FormToggle\n checked={ssl}\n onChange={(v) => { setSsl(v); markTouched() }}\n label={labels.fieldSsl}\n variant=\"inline\"\n />\n <FormToggle\n checked={readOnly}\n onChange={(v) => { setReadOnly(v); markTouched() }}\n label={labels.fieldReadOnly}\n variant=\"inline\"\n />\n </div>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{labels.fieldReadOnlyHelp}</p>\n\n <div className=\"flex flex-wrap items-center gap-3 border-t border-slate-200/60 pt-4 dark:border-white/10\">\n <Button\n type=\"button\"\n outline\n onClick={() => void handleTestConnection()}\n disabled={testStatus === 'testing'}\n >\n {testStatus === 'testing' ? (\n <span className=\"flex items-center gap-2\">\n <Spinner size=\"xs\" />\n {labels.testing}\n </span>\n ) : (\n labels.testConnection\n )}\n </Button>\n\n {testStatus === 'success' && (\n <StatusBadge status=\"success\" label={labels.connectionSuccess} />\n )}\n {testStatus === 'failed' && (\n <StatusBadge status=\"error\" label={labels.connectionFailed} />\n )}\n </div>\n </div>\n </SectionCard>\n )\n }\n\n function renderStep3() {\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.governanceSectionTitle,\n subtitle: labels.governanceSectionSubtitle,\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormInput\n label={labels.fieldMaxPoolSize}\n type=\"number\"\n min={1}\n max={100}\n value={maxPoolSize}\n onValueChange={(v) => { setMaxPoolSize(v); markTouched() }}\n hint={labels.fieldMaxPoolSizeHint}\n />\n <FormInput\n label={labels.fieldTimeoutMs}\n type=\"number\"\n min={100}\n value={timeoutMs}\n onValueChange={(v) => { setTimeoutMs(v); markTouched() }}\n hint={labels.fieldTimeoutMsHint}\n />\n </FormGrid>\n\n <FormInput\n label={labels.fieldAllowedTables}\n value={allowedTables}\n onValueChange={(v) => { setAllowedTables(v); markTouched() }}\n placeholder={labels.fieldAllowedTablesPlaceholder}\n hint={labels.fieldAllowedTablesHint}\n />\n\n <FormInput\n label={labels.fieldBlockedColumns}\n value={blockedColumns}\n onValueChange={(v) => { setBlockedColumns(v); markTouched() }}\n placeholder={labels.fieldBlockedColumnsPlaceholder}\n hint={labels.fieldBlockedColumnsHint}\n />\n\n <FormCheckbox\n checked={maskPii}\n onChange={(v) => { setMaskPii(v); markTouched() }}\n label={labels.fieldMaskPii}\n description={labels.fieldMaskPiiDescription}\n />\n </div>\n </SectionCard>\n )\n }\n\n function renderStep4() {\n const categoryLabel = category\n ? ((labels as unknown as Record<string, string>)[category.labelKey] ?? category.id)\n : labels.reviewNoneValue\n const dialectLabel = dialectOption?.label ?? labels.reviewNoneValue\n\n const allowed = splitList(allowedTables)\n const blocked = splitList(blockedColumns)\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 <dl className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <ReviewRow label={labels.reviewCategoryLabel} value={categoryLabel} />\n <ReviewRow label={labels.reviewDialectLabel} value={dialectLabel} />\n </dl>\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 <dl className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <ReviewRow label={labels.reviewNameLabel} value={name || labels.reviewNoneValue} />\n <ReviewRow label={labels.reviewCredentialsLabel} value={labels.reviewCredentialsRedacted} />\n <ReviewRow label={labels.reviewSslLabel} value={ssl ? labels.reviewYes : labels.reviewNo} />\n <ReviewRow label={labels.reviewReadOnlyLabel} value={readOnly ? labels.reviewYes : labels.reviewNo} />\n </dl>\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.reviewPoolLabel} value={maxPoolSize || labels.reviewNoneValue} />\n <ReviewRow label={labels.reviewTimeoutLabel} value={timeoutMs ? `${timeoutMs}ms` : labels.reviewNoneValue} />\n <ReviewRow\n label={labels.reviewAllowedTablesLabel}\n value={allowed.length > 0 ? allowed.join(', ') : labels.reviewNoneValue}\n />\n <ReviewRow\n label={labels.reviewBlockedColumnsLabel}\n value={blocked.length > 0 ? blocked.join(', ') : labels.reviewNoneValue}\n />\n <ReviewRow label={labels.reviewMaskPiiLabel} value={maskPii ? labels.reviewYes : labels.reviewNo} />\n </dl>\n </SectionCard>\n </div>\n )\n }\n\n const stepBody =\n step === 1 ? renderStep1() :\n step === 2 ? renderStep2() :\n step === 3 ? renderStep3() :\n renderStep4()\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=\"amber\" onClick={goNext} disabled={advanceDisabled || submitting}>\n {labels.wizardNext}\n </Button>\n ) : (\n <Button type=\"button\" color=\"amber\" onClick={() => void submit()} disabled={submitting || !dialect || !name.trim()}>\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) => goToStep(idx + 1)}\n />\n <div className=\"w-full 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\nfunction splitList(raw: string): string[] {\n return raw.split(',').map((s) => s.trim()).filter((s) => s.length > 0)\n}\n\n// Used when no real /datasources/test endpoint is wired in yet. Matches\n// the previous modal behavior (1.5s synthetic delay → success).\nasync function simulateTest(): Promise<boolean> {\n await new Promise((r) => setTimeout(r, 1500))\n return true\n}\n\n// Re-export for caller convenience\nexport type { DatasourceFormData }\nexport { CircleStackIcon }\n","import { useEffect, useState, useCallback, useMemo, type FormEvent } from 'react'\nimport {\n AdjustmentsHorizontalIcon,\n PencilSquareIcon,\n BellAlertIcon,\n GlobeAltIcon,\n PencilIcon,\n ArrowUpCircleIcon,\n SparklesIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Button,\n FilterTileButton,\n FormGrid,\n FormInput,\n FormTextarea,\n FormToggle,\n FormCheckbox,\n HeroSection,\n SectionCard,\n SegmentedControl,\n DatePicker,\n TimePicker,\n StepTimeline,\n type StepTimelineItem,\n type FilterTileColor,\n} from '@ui/index'\nimport {\n RuleConditionBuilder,\n RuleActionBuilder,\n defaultRuleCondition,\n defaultRuleAction,\n} from '../../astrlabe'\nimport type { RuleFormValue } from './rules-page-view'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Range slider — copied from agent-new-wizard-page-view so the wizard\n// stays visually consistent.\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-indigo-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// Action types — single-select tile grid. Maps to `RuleAction.type`\n// strings that the engine recognizes (see RuleActionBuilder).\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ActionTileSpec = {\n id: string\n color: FilterTileColor\n icon: React.ComponentType<{ className?: string }>\n /** Label key on the labels object — kept stringly so we can hand\n * 6 different languages to the wizard without ballooning props. */\n labelKey: string\n descriptionKey: string\n}\n\nconst ACTION_TILES: ActionTileSpec[] = [\n { id: 'notify', color: 'sky', icon: BellAlertIcon, labelKey: 'actionNotifyLabel', descriptionKey: 'actionNotifyDescription' },\n { id: 'call-webhook', color: 'indigo', icon: GlobeAltIcon, labelKey: 'actionWebhookLabel', descriptionKey: 'actionWebhookDescription' },\n { id: 'mutate', color: 'amber', icon: PencilIcon, labelKey: 'actionMutateLabel', descriptionKey: 'actionMutateDescription' },\n { id: 'escalate', color: 'rose', icon: ArrowUpCircleIcon, labelKey: 'actionEscalateLabel', descriptionKey: 'actionEscalateDescription' },\n { id: 'route-to-agent', color: 'violet', icon: SparklesIcon, labelKey: 'actionRouteLabel', descriptionKey: 'actionRouteDescription' },\n]\n\nconst WEEKDAYS: Array<{ id: string; labelKey: string }> = [\n { id: 'mon', labelKey: 'weekdayMon' },\n { id: 'tue', labelKey: 'weekdayTue' },\n { id: 'wed', labelKey: 'weekdayWed' },\n { id: 'thu', labelKey: 'weekdayThu' },\n { id: 'fri', labelKey: 'weekdayFri' },\n { id: 'sat', labelKey: 'weekdaySat' },\n { id: 'sun', labelKey: 'weekdaySun' },\n]\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Labels\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type RuleNewWizardLabels = {\n pageTitle: string\n pageSubtitle: string\n wizardStepCounter: string\n wizardBack: string\n wizardNext: string\n wizardCancel: string\n wizardCreate: string\n wizardCancelConfirm: string\n\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 wizardReviewEdit: string\n\n // Step 1\n nameLabel: string\n namePlaceholder: string\n descriptionLabel: string\n descriptionPlaceholder: string\n priorityLabel: string\n priorityLow: string\n priorityNormal: string\n priorityHigh: string\n priorityCritical: string\n enabledLabel: string\n\n // Step 2\n conditionSectionTitle: string\n conditionSectionSubtitle: string\n combinatorLabel: string\n combinatorAnd: string\n combinatorOr: string\n combinatorNot: string\n\n // Step 3\n actionSectionTitle: string\n actionSectionSubtitle: string\n actionNotifyLabel: string\n actionNotifyDescription: string\n actionWebhookLabel: string\n actionWebhookDescription: string\n actionMutateLabel: string\n actionMutateDescription: string\n actionEscalateLabel: string\n actionEscalateDescription: string\n actionRouteLabel: string\n actionRouteDescription: string\n actionConfigSubtitle: string\n\n // Step 4\n scheduleSectionTitle: string\n scheduleSectionSubtitle: string\n validFromLabel: string\n validFromDateLabel: string\n validFromTimeLabel: string\n validUntilLabel: string\n validUntilDateLabel: string\n validUntilTimeLabel: string\n noExpiryLabel: string\n noExpiryDescription: string\n\n statusLabel: string\n statusActive: string\n statusPaused: string\n statusArchived: string\n\n tagsLabel: string\n tagsPlaceholder: string\n tagsHint: string\n\n recurrenceLabel: string\n recurrenceOneOff: string\n recurrenceCron: string\n recurrenceRecurring: string\n cronExpressionLabel: string\n cronExpressionPlaceholder: string\n cronExpressionHint: string\n weekdaysLabel: string\n weekdayMon: string\n weekdayTue: string\n weekdayWed: string\n weekdayThu: string\n weekdayFri: string\n weekdaySat: string\n weekdaySun: string\n timeOfDayLabel: string\n\n // Review\n reviewNameLabel: string\n reviewDescriptionLabel: string\n reviewPriorityLabel: string\n reviewEnabledLabel: string\n reviewConditionLabel: string\n reviewActionLabel: string\n reviewValidFromLabel: string\n reviewValidUntilLabel: string\n reviewStatusLabel: string\n reviewTagsLabel: string\n reviewRecurrenceLabel: string\n reviewCombinatorLabel: string\n reviewNoneValue: string\n reviewYes: string\n reviewNo: string\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type RuleNewWizardPageViewProps = {\n labels: RuleNewWizardLabels\n initialStep?: number\n onStepChange?: (step: number) => void\n /** Called with the canonical `RuleFormValue` shape so the host can\n * forward straight to `createAgentRule`. */\n onSubmit: (input: RuleFormValue) => Promise<void>\n onCancel: () => void\n}\n\nconst TOTAL_STEPS = 5\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Page-view\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function RuleNewWizardPageView({\n labels,\n initialStep,\n onStepChange,\n onSubmit,\n onCancel,\n}: RuleNewWizardPageViewProps) {\n const clampedInitial = Math.min(TOTAL_STEPS, Math.max(1, initialStep ?? 1))\n const [step, setStep] = useState<number>(clampedInitial)\n\n // Identity / lifecycle\n const [name, setName] = useState<string>('')\n const [description, setDescription] = useState<string>('')\n const [priority, setPriority] = useState<number>(50)\n const [enabled, setEnabled] = useState<boolean>(true)\n const [status, setStatus] = useState<'active' | 'paused' | 'archived'>('active')\n const [tagsInput, setTagsInput] = useState<string>('')\n\n // Condition (visual builder) + top-level combinator\n const [combinator, setCombinator] = useState<'and' | 'or' | 'not'>('and')\n const [condition, setCondition] = useState<RuleFormValue['condition']>(defaultRuleCondition())\n\n // Action\n const [actionTileId, setActionTileId] = useState<string>('')\n const [action, setAction] = useState<RuleFormValue['action']>(defaultRuleAction())\n\n // Schedule\n const [validFromDate, setValidFromDate] = useState<Date | null>(null)\n const [validFromTime, setValidFromTime] = useState<{ hours: number; minutes: number } | null>(null)\n const [validUntilDate, setValidUntilDate] = useState<Date | null>(null)\n const [validUntilTime, setValidUntilTime] = useState<{ hours: number; minutes: number } | null>(null)\n const [noExpiry, setNoExpiry] = useState<boolean>(true)\n\n // Recurrence\n const [recurrence, setRecurrence] = useState<'one-off' | 'cron' | 'recurring'>('one-off')\n const [cronExpression, setCronExpression] = useState<string>('')\n const [weekdays, setWeekdays] = useState<string[]>([])\n const [recurringTime, setRecurringTime] = useState<{ hours: number; minutes: number } | null>(null)\n\n const [submitting, setSubmitting] = useState(false)\n const [touched, setTouched] = useState(false)\n\n function markTouched() {\n if (!touched) setTouched(true)\n }\n\n // Sync `?step=N`\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 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 function canAdvance(from: number): boolean {\n if (from === 1) return name.trim().length > 0\n if (from === 3) return actionTileId.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, actionTileId]) // 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 // Compose a single ISO timestamp from a date + time pair. Missing\n // time defaults to 00:00 so the user can drop just a date and still\n // get a valid `validFrom`.\n function combineDateTime(\n date: Date | null,\n time: { hours: number; minutes: number } | null,\n ): string | null {\n if (!date) return null\n const next = new Date(date)\n next.setHours(time?.hours ?? 0, time?.minutes ?? 0, 0, 0)\n return next.toISOString()\n }\n\n // Derive the parsed tags array from the comma-separated input.\n const tags = useMemo(\n () => tagsInput.split(',').map((t) => t.trim()).filter((t) => t.length > 0),\n [tagsInput],\n )\n\n // Build the final RuleFormValue payload for submit + review.\n function buildPayload(): RuleFormValue {\n const validFrom = combineDateTime(validFromDate, validFromTime)\n const validUntil = noExpiry ? null : combineDateTime(validUntilDate, validUntilTime)\n\n // Top-level NOT: wrap the user's condition in a single-operand\n // boolean expression with combinator='and' and prefix with a\n // synthetic NOT marker. The engine only knows and/or today, so we\n // store NOT as a `combinator: 'and'` with a `notFlag` param —\n // surfaced in the review JSON so it round-trips visibly. Until the\n // executor learns `not`, this is documented as a known limitation.\n const conditionWithCombinator: RuleFormValue['condition'] =\n combinator === 'not'\n ? {\n operator: 'boolean_expression',\n combinator: 'and',\n operands: [condition],\n // The engine ignores extra fields, so this is forward-compat.\n ...({ notFlag: true } as Record<string, unknown>),\n }\n : combinator === 'or'\n ? {\n operator: 'boolean_expression',\n combinator: 'or',\n operands: [condition],\n }\n : condition\n\n // Recurrence rides in action.params so we don't grow the wire\n // contract until the engine supports schedules first-class.\n const finalAction: RuleFormValue['action'] = {\n type: action.type,\n params: {\n ...(action.params ?? {}),\n actionVariant: actionTileId,\n recurrence,\n ...(recurrence === 'cron' && cronExpression\n ? { cronExpression }\n : {}),\n ...(recurrence === 'recurring'\n ? {\n weekdays,\n ...(recurringTime\n ? { timeOfDay: `${pad(recurringTime.hours)}:${pad(recurringTime.minutes)}` }\n : {}),\n }\n : {}),\n },\n }\n\n // The backend's `RuleStatus` enum is `draft | active | archived`.\n // The wizard surfaces `paused` as a UX-friendly label that maps to\n // `draft` on the wire — when the user re-edits a rule we show the\n // draft as paused so the round-trip stays sensible.\n const wireStatus: RuleFormValue['status'] =\n status === 'paused' ? 'draft' : status\n\n return {\n name: name.trim() || 'Untitled Rule',\n description: description.trim() || undefined,\n enabled,\n priority,\n status: wireStatus,\n validFrom,\n validUntil,\n tags,\n condition: conditionWithCombinator,\n action: finalAction,\n }\n }\n\n async function submit() {\n setSubmitting(true)\n try {\n await onSubmit(buildPayload())\n } finally {\n setSubmitting(false)\n }\n }\n\n // Keyboard shortcuts\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancelWithConfirm()\n return\n }\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, actionTileId, touched])\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 const counter = labels.wizardStepCounter\n .replace('{current}', String(step))\n .replace('{total}', String(TOTAL_STEPS))\n\n const hero = (\n <HeroSection\n icon={<AdjustmentsHorizontalIcon className=\"h-5 w-5\" />}\n label={counter}\n title={labels.pageTitle}\n subtitle={stepSubtitles[step - 1] ?? labels.pageSubtitle}\n gradient=\"from-fuchsia-500 to-purple-700\"\n />\n )\n\n // ── Step renderers ───────────────────────────────────────────────\n function renderStep1() {\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.wizardStep1Title,\n subtitle: labels.wizardStep1Subtitle,\n }}\n >\n <div className=\"space-y-4\">\n <FormInput\n label={labels.nameLabel}\n value={name}\n onValueChange={(v) => { setName(v); markTouched() }}\n placeholder={labels.namePlaceholder}\n required\n />\n <FormTextarea\n label={labels.descriptionLabel}\n value={description}\n onValueChange={(v) => { setDescription(v); markTouched() }}\n placeholder={labels.descriptionPlaceholder}\n rows={3}\n />\n\n <RangeSliderField\n sliderId=\"wizard-rule-priority\"\n label={labels.priorityLabel}\n value={priority}\n onChange={(v) => { setPriority(Math.round(v)); markTouched() }}\n min={0}\n max={100}\n step={1}\n trackGradient=\"linear-gradient(90deg, #10b981, #38bdf8 33%, #f59e0b 66%, #f43f5e)\"\n formatValue={(v) => String(Math.round(v))}\n zones={[\n { label: labels.priorityLow, max: 25, color: 'text-emerald-500', thumbColor: '#10b981' },\n { label: labels.priorityNormal, max: 50, color: 'text-sky-500', thumbColor: '#38bdf8' },\n { label: labels.priorityHigh, max: 75, color: 'text-amber-500', thumbColor: '#f59e0b' },\n { label: labels.priorityCritical, max: 100, color: 'text-rose-500', thumbColor: '#f43f5e' },\n ]}\n />\n\n <FormToggle\n checked={enabled}\n onChange={(v) => { setEnabled(v); markTouched() }}\n label={labels.enabledLabel}\n variant=\"card\"\n />\n </div>\n </SectionCard>\n )\n }\n\n function renderStep2() {\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.conditionSectionTitle,\n subtitle: labels.conditionSectionSubtitle,\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.combinatorLabel}\n </span>\n <SegmentedControl\n segments={[\n { value: 'and', label: labels.combinatorAnd },\n { value: 'or', label: labels.combinatorOr },\n { value: 'not', label: labels.combinatorNot },\n ]}\n value={combinator}\n onChange={(v) => { setCombinator(v as 'and' | 'or' | 'not'); markTouched() }}\n size=\"sm\"\n />\n </div>\n <RuleConditionBuilder\n value={condition}\n onChange={(next) => { setCondition(next); markTouched() }}\n />\n </div>\n </SectionCard>\n )\n }\n\n function renderStep3() {\n const selectedTile = ACTION_TILES.find((t) => t.id === actionTileId) ?? null\n return (\n <SectionCard\n variant=\"glass\"\n header={{\n title: labels.actionSectionTitle,\n subtitle: labels.actionSectionSubtitle,\n }}\n >\n <div className=\"space-y-5\">\n <div\n role=\"radiogroup\"\n aria-label={labels.actionSectionTitle}\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\"\n >\n {ACTION_TILES.map((tile) => {\n const Icon = tile.icon\n const selected = tile.id === actionTileId\n const label = (labels as unknown as Record<string, string>)[tile.labelKey] ?? tile.id\n const description = (labels as unknown as Record<string, string>)[tile.descriptionKey] ?? ''\n return (\n <FilterTileButton\n key={tile.id}\n isActive={selected}\n color={tile.color}\n icon={<Icon className=\"h-5 w-5\" />}\n label={label}\n count={description}\n onClick={() => {\n setActionTileId(tile.id)\n markTouched()\n }}\n />\n )\n })}\n </div>\n\n {selectedTile && (\n <SectionCard\n variant=\"glass\"\n header={{\n title: (labels as unknown as Record<string, string>)[selectedTile.labelKey] ?? selectedTile.id,\n subtitle: labels.actionConfigSubtitle,\n }}\n >\n <RuleActionBuilder\n value={action}\n onChange={(next) => { setAction(next); markTouched() }}\n />\n </SectionCard>\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.scheduleSectionTitle,\n subtitle: labels.scheduleSectionSubtitle,\n }}\n >\n <div className=\"space-y-5\">\n {/* Valid from / until pairs */}\n <FormGrid>\n <div className=\"space-y-2\">\n <span className=\"block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.validFromLabel}\n </span>\n <div className=\"flex flex-wrap items-center gap-2\">\n <DatePicker\n value={validFromDate}\n onChange={(d) => { setValidFromDate(d); markTouched() }}\n placeholder={labels.validFromDateLabel}\n />\n <TimePicker\n value={validFromTime}\n onChange={(t) => { setValidFromTime(t); markTouched() }}\n placeholder={labels.validFromTimeLabel}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <span className=\"block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.validUntilLabel}\n </span>\n <div className=\"flex flex-wrap items-center gap-2\">\n <DatePicker\n value={validUntilDate}\n onChange={(d) => { setValidUntilDate(d); markTouched() }}\n placeholder={labels.validUntilDateLabel}\n />\n <TimePicker\n value={validUntilTime}\n onChange={(t) => { setValidUntilTime(t); markTouched() }}\n placeholder={labels.validUntilTimeLabel}\n />\n </div>\n </div>\n </FormGrid>\n\n <FormCheckbox\n checked={noExpiry}\n onChange={(v) => { setNoExpiry(v); markTouched() }}\n label={labels.noExpiryLabel}\n description={labels.noExpiryDescription}\n />\n\n {/* Status */}\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.statusLabel}\n </span>\n <SegmentedControl\n segments={[\n { value: 'active', label: labels.statusActive },\n { value: 'paused', label: labels.statusPaused },\n { value: 'archived', label: labels.statusArchived },\n ]}\n value={status}\n onChange={(v) => { setStatus(v as 'active' | 'paused' | 'archived'); markTouched() }}\n size=\"sm\"\n />\n </div>\n\n {/* Tags — comma-separated free-text. ChipPicker requires\n * a fixed item list (no allowCustom), so we stay with a\n * text input until the picker grows custom-tag support. */}\n <FormInput\n label={labels.tagsLabel}\n value={tagsInput}\n onValueChange={(v) => { setTagsInput(v); markTouched() }}\n placeholder={labels.tagsPlaceholder}\n hint={labels.tagsHint}\n />\n\n {/* Recurrence */}\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.recurrenceLabel}\n </span>\n <SegmentedControl\n segments={[\n { value: 'one-off', label: labels.recurrenceOneOff },\n { value: 'cron', label: labels.recurrenceCron },\n { value: 'recurring', label: labels.recurrenceRecurring },\n ]}\n value={recurrence}\n onChange={(v) => { setRecurrence(v as 'one-off' | 'cron' | 'recurring'); markTouched() }}\n size=\"sm\"\n />\n </div>\n\n {recurrence === 'cron' && (\n <FormInput\n label={labels.cronExpressionLabel}\n value={cronExpression}\n onValueChange={(v) => { setCronExpression(v); markTouched() }}\n placeholder={labels.cronExpressionPlaceholder}\n hint={labels.cronExpressionHint}\n />\n )}\n\n {recurrence === 'recurring' && (\n <div className=\"space-y-3\">\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.weekdaysLabel}\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {WEEKDAYS.map((d) => {\n const selected = weekdays.includes(d.id)\n const label = (labels as unknown as Record<string, string>)[d.labelKey] ?? d.id\n return (\n <button\n key={d.id}\n type=\"button\"\n aria-pressed={selected}\n onClick={() => {\n setWeekdays((current) =>\n current.includes(d.id)\n ? current.filter((id) => id !== d.id)\n : [...current, d.id],\n )\n markTouched()\n }}\n className={[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-full px-3 text-xs font-semibold transition',\n selected\n ? 'bg-fuchsia-500 text-white shadow ring-2 ring-fuchsia-300/70'\n : 'liquid-surface text-slate-700 dark:text-slate-300 hover:bg-fuchsia-500/10',\n ].join(' ')}\n >\n {label}\n </button>\n )\n })}\n </div>\n </div>\n <div>\n <span className=\"mb-2 block text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-400\">\n {labels.timeOfDayLabel}\n </span>\n <TimePicker\n value={recurringTime}\n onChange={(t) => { setRecurringTime(t); markTouched() }}\n placeholder={labels.timeOfDayLabel}\n />\n </div>\n </div>\n )}\n </div>\n </SectionCard>\n </div>\n )\n }\n\n function renderStep5() {\n const payload = buildPayload()\n const conditionSentence = humanReadableCondition(payload.condition, labels)\n const actionSentence = humanReadableAction(payload.action, labels, ACTION_TILES, actionTileId)\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 <dl className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <ReviewRow label={labels.reviewNameLabel} value={payload.name} />\n <ReviewRow label={labels.reviewPriorityLabel} value={String(payload.priority)} />\n <ReviewRow label={labels.reviewEnabledLabel} value={payload.enabled ? labels.reviewYes : labels.reviewNo} />\n <ReviewRow\n label={labels.reviewDescriptionLabel}\n value={payload.description ?? labels.reviewNoneValue}\n />\n </dl>\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 <p className=\"mb-2 text-sm text-slate-700 dark:text-slate-200\">{conditionSentence}</p>\n <ReviewRow label={labels.reviewCombinatorLabel} value={combinator.toUpperCase()} />\n <pre className=\"mt-3 max-h-48 overflow-auto 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 {JSON.stringify(payload.condition, null, 2)}\n </pre>\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 <p className=\"mb-2 text-sm text-slate-700 dark:text-slate-200\">{actionSentence}</p>\n <pre className=\"mt-3 max-h-48 overflow-auto 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 {JSON.stringify(payload.action, null, 2)}\n </pre>\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-1 gap-2 sm:grid-cols-2\">\n <ReviewRow\n label={labels.reviewValidFromLabel}\n value={payload.validFrom ?? labels.reviewNoneValue}\n />\n <ReviewRow\n label={labels.reviewValidUntilLabel}\n value={payload.validUntil ?? (noExpiry ? labels.noExpiryLabel : labels.reviewNoneValue)}\n />\n <ReviewRow label={labels.reviewStatusLabel} value={payload.status ?? 'active'} />\n <ReviewRow\n label={labels.reviewTagsLabel}\n value={(payload.tags && payload.tags.length > 0) ? payload.tags.join(', ') : labels.reviewNoneValue}\n />\n <ReviewRow label={labels.reviewRecurrenceLabel} value={recurrence} />\n </dl>\n </SectionCard>\n </div>\n )\n }\n\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=\"fuchsia\" onClick={goNext} disabled={advanceDisabled || submitting}>\n {labels.wizardNext}\n </Button>\n ) : (\n <Button\n type=\"button\"\n color=\"fuchsia\"\n onClick={() => void submit()}\n disabled={submitting || !name.trim() || !actionTileId}\n >\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) => goToStep(idx + 1)}\n />\n <div className=\"w-full 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 whitespace-pre-wrap break-words text-xs font-semibold text-gray-900 dark:text-white\">{value}</dd>\n </div>\n )\n}\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0')\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Sentence-form renderers — these stay deliberately plain so the\n// reviewer can read a single line and decide if the rule is correct\n// without parsing JSON.\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction humanReadableCondition(\n cond: RuleFormValue['condition'],\n labels: RuleNewWizardLabels,\n): string {\n if (!cond) return labels.reviewNoneValue\n if (cond.operator === 'boolean_expression' && Array.isArray(cond.operands)) {\n const inner = cond.operands.map((o) => humanReadableCondition(o, labels)).join(` ${cond.combinator?.toUpperCase() ?? 'AND'} `)\n return `(${inner})`\n }\n const field = cond.field ?? '?'\n switch (cond.operator) {\n case 'truthy': return `${field} is set`\n case 'eq': return `${field} = ${formatValue(cond.value)}`\n case 'neq': return `${field} ≠ ${formatValue(cond.value)}`\n case 'gt': return `${field} > ${formatValue(cond.value)}`\n case 'gte': return `${field} ≥ ${formatValue(cond.value)}`\n case 'lt': return `${field} < ${formatValue(cond.value)}`\n case 'lte': return `${field} ≤ ${formatValue(cond.value)}`\n case 'contains': return `${field} contains \"${formatValue(cond.value)}\"`\n case 'regex_match': return `${field} matches /${cond.pattern ?? ''}/`\n case 'threshold': return `${field} ${cond.comparison ?? 'gte'} ${formatValue(cond.value)}`\n case 'time_window': return `${field} within time-window(${(cond.windows ?? []).length})`\n default: return `${cond.operator}(${field})`\n }\n}\n\nfunction formatValue(v: unknown): string {\n if (v === null || v === undefined) return ''\n return String(v)\n}\n\nfunction humanReadableAction(\n action: RuleFormValue['action'],\n labels: RuleNewWizardLabels,\n tiles: ActionTileSpec[],\n actionTileId: string,\n): string {\n const tile = tiles.find((t) => t.id === actionTileId)\n const tileLabel = tile\n ? ((labels as unknown as Record<string, string>)[tile.labelKey] ?? tile.id)\n : action.type\n const paramSummary = action.params\n ? Object.entries(action.params).slice(0, 3).map(([k, v]) => `${k}=${String(v)}`).join(', ')\n : ''\n return paramSummary\n ? `${tileLabel} — ${paramSummary}`\n : tileLabel\n}\n\n// Re-export so consumers don't have to dig for the type\nexport type { RuleFormValue }\nexport { AdjustmentsHorizontalIcon }\n"]}
|