@datatechsolutions/ui 3.6.1 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/astrlabe/graph-node.js +8 -5
  2. package/dist/astrlabe/graph-node.mjs +4 -1
  3. package/dist/astrlabe/index.js +115 -114
  4. package/dist/astrlabe/index.mjs +7 -6
  5. package/dist/astrlabe/workflow-canvas.js +7 -6
  6. package/dist/astrlabe/workflow-canvas.mjs +6 -5
  7. package/dist/{chunk-3Z66NXEB.mjs → chunk-2OPBUVTQ.mjs} +3 -3
  8. package/dist/{chunk-3Z66NXEB.mjs.map → chunk-2OPBUVTQ.mjs.map} +1 -1
  9. package/dist/{chunk-4JDJRGAB.mjs → chunk-34XRH2FX.mjs} +5 -4
  10. package/dist/chunk-34XRH2FX.mjs.map +1 -0
  11. package/dist/{chunk-KEWRLEYV.js → chunk-3JZGRXSG.js} +4 -4
  12. package/dist/{chunk-KEWRLEYV.js.map → chunk-3JZGRXSG.js.map} +1 -1
  13. package/dist/{chunk-JQYDJ75Q.mjs → chunk-3VYD7QL2.mjs} +3 -3
  14. package/dist/{chunk-JQYDJ75Q.mjs.map → chunk-3VYD7QL2.mjs.map} +1 -1
  15. package/dist/{chunk-MRRFDIUQ.mjs → chunk-4JRMXHPU.mjs} +5 -4
  16. package/dist/chunk-4JRMXHPU.mjs.map +1 -0
  17. package/dist/{chunk-4OFG6POC.mjs → chunk-5LCWQKGQ.mjs} +207 -1128
  18. package/dist/chunk-5LCWQKGQ.mjs.map +1 -0
  19. package/dist/{chunk-W5YCZOXO.js → chunk-7YK4WXHO.js} +79 -78
  20. package/dist/chunk-7YK4WXHO.js.map +1 -0
  21. package/dist/{chunk-YOJIPZ72.js → chunk-BBLBSDPN.js} +9 -9
  22. package/dist/{chunk-YOJIPZ72.js.map → chunk-BBLBSDPN.js.map} +1 -1
  23. package/dist/chunk-BHOT22QL.js +998 -0
  24. package/dist/chunk-BHOT22QL.js.map +1 -0
  25. package/dist/{chunk-MQNXKBFP.mjs → chunk-C4AJWDFB.mjs} +7 -6
  26. package/dist/chunk-C4AJWDFB.mjs.map +1 -0
  27. package/dist/{chunk-UOABOFKO.mjs → chunk-CBFK4W4C.mjs} +3 -3
  28. package/dist/{chunk-UOABOFKO.mjs.map → chunk-CBFK4W4C.mjs.map} +1 -1
  29. package/dist/{chunk-P5F257N3.js → chunk-CVZXZK2X.js} +35 -34
  30. package/dist/chunk-CVZXZK2X.js.map +1 -0
  31. package/dist/{chunk-IHHGT3LP.mjs → chunk-CYAAL3BY.mjs} +6 -5
  32. package/dist/chunk-CYAAL3BY.mjs.map +1 -0
  33. package/dist/{chunk-LVK7VXW7.js → chunk-DMPBNWJB.js} +37 -36
  34. package/dist/chunk-DMPBNWJB.js.map +1 -0
  35. package/dist/{chunk-ESLKQJQS.mjs → chunk-DXLATMGD.mjs} +6 -5
  36. package/dist/chunk-DXLATMGD.mjs.map +1 -0
  37. package/dist/{chunk-P4YYEM4B.js → chunk-EZQ2D47U.js} +7 -10
  38. package/dist/chunk-EZQ2D47U.js.map +1 -0
  39. package/dist/{chunk-6ZMTJSQF.js → chunk-FUHNEP3Y.js} +164 -163
  40. package/dist/chunk-FUHNEP3Y.js.map +1 -0
  41. package/dist/{chunk-YTE6WCBX.js → chunk-JHN2OUWG.js} +64 -63
  42. package/dist/chunk-JHN2OUWG.js.map +1 -0
  43. package/dist/{chunk-AMYQSPQC.js → chunk-JLECJI7S.js} +18 -17
  44. package/dist/chunk-JLECJI7S.js.map +1 -0
  45. package/dist/{chunk-DRORQGN2.js → chunk-KMNWPC64.js} +40 -39
  46. package/dist/chunk-KMNWPC64.js.map +1 -0
  47. package/dist/{chunk-VUAGVZJM.mjs → chunk-NJ6HH4QP.mjs} +6 -5
  48. package/dist/chunk-NJ6HH4QP.mjs.map +1 -0
  49. package/dist/{chunk-OZNTQROP.mjs → chunk-PLTLRL2V.mjs} +7 -10
  50. package/dist/chunk-PLTLRL2V.mjs.map +1 -0
  51. package/dist/{chunk-5ZAZ2C7A.mjs → chunk-PMMP76MV.mjs} +7 -6
  52. package/dist/chunk-PMMP76MV.mjs.map +1 -0
  53. package/dist/{chunk-NJZIE4EH.js → chunk-QF6WL7XU.js} +6 -5
  54. package/dist/chunk-QF6WL7XU.js.map +1 -0
  55. package/dist/{chunk-QRNFTG6A.js → chunk-QGLGQXJE.js} +4 -4
  56. package/dist/{chunk-QRNFTG6A.js.map → chunk-QGLGQXJE.js.map} +1 -1
  57. package/dist/{chunk-GCYYGSHU.js → chunk-R4EKPXX3.js} +564 -1525
  58. package/dist/chunk-R4EKPXX3.js.map +1 -0
  59. package/dist/{chunk-SQZGQOKU.js → chunk-RWYG7QHP.js} +119 -132
  60. package/dist/chunk-RWYG7QHP.js.map +1 -0
  61. package/dist/{chunk-WBEZATIB.js → chunk-RZ3NDH5S.js} +13 -13
  62. package/dist/{chunk-WBEZATIB.js.map → chunk-RZ3NDH5S.js.map} +1 -1
  63. package/dist/{chunk-HGWVJ3VB.mjs → chunk-SJVKID3E.mjs} +4 -3
  64. package/dist/chunk-SJVKID3E.mjs.map +1 -0
  65. package/dist/{chunk-7LILNZMR.mjs → chunk-TJEZL72T.mjs} +4 -3
  66. package/dist/chunk-TJEZL72T.mjs.map +1 -0
  67. package/dist/{chunk-MUOTTGCX.js → chunk-UDYEUTJC.js} +31 -30
  68. package/dist/chunk-UDYEUTJC.js.map +1 -0
  69. package/dist/{chunk-UGJZ3M4Q.js → chunk-VDLMWOQM.js} +55 -54
  70. package/dist/chunk-VDLMWOQM.js.map +1 -0
  71. package/dist/{chunk-KDFBN2L2.mjs → chunk-VZIUQE7B.mjs} +24 -37
  72. package/dist/chunk-VZIUQE7B.mjs.map +1 -0
  73. package/dist/chunk-WR55H7DH.mjs +934 -0
  74. package/dist/chunk-WR55H7DH.mjs.map +1 -0
  75. package/dist/{chunk-ZYVDDSAC.mjs → chunk-YRXDETBK.mjs} +6 -6
  76. package/dist/{chunk-ZYVDDSAC.mjs.map → chunk-YRXDETBK.mjs.map} +1 -1
  77. package/dist/{chunk-VDLAZR7S.mjs → chunk-ZYRL3WER.mjs} +5 -4
  78. package/dist/chunk-ZYRL3WER.mjs.map +1 -0
  79. package/dist/index.js +826 -825
  80. package/dist/index.mjs +4 -3
  81. package/dist/platform/admin/index.js +13 -12
  82. package/dist/platform/admin/index.mjs +7 -6
  83. package/dist/platform/agents-workspace.js +10 -9
  84. package/dist/platform/agents-workspace.mjs +9 -8
  85. package/dist/platform/app-shell.js +6 -5
  86. package/dist/platform/app-shell.mjs +5 -4
  87. package/dist/platform/auth/index.js +30 -29
  88. package/dist/platform/auth/index.mjs +7 -6
  89. package/dist/platform/billing/index.js +6 -5
  90. package/dist/platform/billing/index.mjs +5 -4
  91. package/dist/platform/impersonation/index.js +6 -5
  92. package/dist/platform/impersonation/index.mjs +5 -4
  93. package/dist/platform/index.js +87 -93
  94. package/dist/platform/index.js.map +1 -1
  95. package/dist/platform/index.mjs +23 -29
  96. package/dist/platform/index.mjs.map +1 -1
  97. package/dist/platform/pages/index.js +210 -209
  98. package/dist/platform/pages/index.js.map +1 -1
  99. package/dist/platform/pages/index.mjs +11 -10
  100. package/dist/platform/pages/index.mjs.map +1 -1
  101. package/dist/platform/settings/index.js +10 -9
  102. package/dist/platform/settings/index.mjs +9 -8
  103. package/dist/platform/workflow-canvas-shell.js +8 -7
  104. package/dist/platform/workflow-canvas-shell.mjs +7 -6
  105. package/package.json +1 -1
  106. package/dist/chunk-4JDJRGAB.mjs.map +0 -1
  107. package/dist/chunk-4OFG6POC.mjs.map +0 -1
  108. package/dist/chunk-5ZAZ2C7A.mjs.map +0 -1
  109. package/dist/chunk-6ZMTJSQF.js.map +0 -1
  110. package/dist/chunk-7LILNZMR.mjs.map +0 -1
  111. package/dist/chunk-AMYQSPQC.js.map +0 -1
  112. package/dist/chunk-DRORQGN2.js.map +0 -1
  113. package/dist/chunk-ESLKQJQS.mjs.map +0 -1
  114. package/dist/chunk-GCYYGSHU.js.map +0 -1
  115. package/dist/chunk-HGWVJ3VB.mjs.map +0 -1
  116. package/dist/chunk-IHHGT3LP.mjs.map +0 -1
  117. package/dist/chunk-KDFBN2L2.mjs.map +0 -1
  118. package/dist/chunk-LVK7VXW7.js.map +0 -1
  119. package/dist/chunk-MQNXKBFP.mjs.map +0 -1
  120. package/dist/chunk-MRRFDIUQ.mjs.map +0 -1
  121. package/dist/chunk-MUOTTGCX.js.map +0 -1
  122. package/dist/chunk-NJZIE4EH.js.map +0 -1
  123. package/dist/chunk-OZNTQROP.mjs.map +0 -1
  124. package/dist/chunk-P4YYEM4B.js.map +0 -1
  125. package/dist/chunk-P5F257N3.js.map +0 -1
  126. package/dist/chunk-SQZGQOKU.js.map +0 -1
  127. package/dist/chunk-UGJZ3M4Q.js.map +0 -1
  128. package/dist/chunk-VDLAZR7S.mjs.map +0 -1
  129. package/dist/chunk-VUAGVZJM.mjs.map +0 -1
  130. package/dist/chunk-W5YCZOXO.js.map +0 -1
  131. package/dist/chunk-YTE6WCBX.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/platform/pages/agents-models-page-view.tsx","../../../src/platform/pages/agents-config-page-view.tsx","../../../src/platform/pages/agents-prompts-page-view.tsx","../../../src/platform/pages/agents-tool-definitions-page-view.tsx","../../../src/platform/pages/rules-page-view.tsx","../../../src/platform/pages/datasources-page-view.tsx","../../../src/platform/pages/dashboard-page-view.tsx","../../../src/platform/pages/agents-index-page-view.tsx","../../../src/platform/pages/workflows-page-view.tsx","../../../src/platform/pages/workflow-runs-page-view.tsx","../../../src/platform/pages/run-timeline-page-view.tsx","../../../src/platform/pages/connections-page-view.tsx","../../../src/platform/pages/credentials-page-view.tsx"],"names":["useState","jsx","HeroSection","CubeTransparentIcon","PageLoadingState","PageEmptyState","jsxs","Fragment","SearchBar","EntityCard","Badge","ManagementPageLayout","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"],"mappings":"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","file":"index.js","sourcesContent":["import { useState } from 'react'\nimport {\n Badge,\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport { CubeTransparentIcon } from '@heroicons/react/24/outline'\nimport type { AgentModel } from '../../astrlabe/contracts'\n\nexport type AgentsModelsLabels = {\n title: string\n subtitle: string\n provider: string\n enabled: string\n disabled: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: AgentsModelsLabels\n models: AgentModel[]\n loading: boolean\n}\n\nexport function AgentsModelsPageView({ labels, models, loading }: Props) {\n const [searchTerm, setSearchTerm] = useState('')\n\n const allModels = models\n const filteredModels = searchTerm.trim()\n ? allModels.filter((model) => model.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allModels\n const isEmpty = allModels.length === 0\n\n const hero = (\n <HeroSection\n icon={<CubeTransparentIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-700\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredModels.map((model) => (\n <EntityCard\n key={model.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <CubeTransparentIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={model.name}\n subtitle={`${labels.provider}: ${model.provider}`}\n status={(\n <Badge color={model.enabled ? 'emerald' : 'zinc'}>\n {model.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n />\n ))}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import { useState, type FormEvent } from 'react'\nimport { CpuChipIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { AgentModel } from '../../astrlabe/contracts'\nimport type { AgentWithPrompts } from '../../astrlabe'\n\nexport type AgentConfigFormInput = {\n agentId?: string\n name: string\n modelId: string\n systemPrompt: string\n maxTokens: number\n temperature: number\n outputSchema?: string\n}\n\nexport type AgentsConfigLabels = {\n title: string\n subtitle: string\n addAgent: string\n createTitle: string\n editTitle: string\n name: string\n model: string\n systemPrompt: string\n maxTokens: number | string\n temperature: string\n outputSchema: string\n outputSchemaPlaceholder: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n activeVersion: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: AgentsConfigLabels\n agents: AgentWithPrompts[]\n models: AgentModel[]\n loading: boolean\n onCreate: (input: AgentConfigFormInput) => void\n onUpdate: (agentId: string, input: AgentConfigFormInput) => void\n onDelete: (agent: AgentWithPrompts) => void\n}\n\nexport function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }: Props) {\n const [editing, setEditing] = useState<AgentWithPrompts | null>(null)\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }))\n\n const allAgents = agents\n const filteredAgents = searchTerm.trim()\n ? allAgents.filter((agent) => String(agent.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allAgents\n const isEmpty = allAgents.length === 0\n\n const hero = (\n <HeroSection\n icon={<CpuChipIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-700\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addAgent}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addAgent}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredAgents.map((agent) => {\n const modelRecord = models.find((model) => model.id === String(agent.modelId ?? ''))\n return (\n <EntityCard\n key={String(agent.agentId ?? agent.id ?? agent.name)}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <CpuChipIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={String(agent.name ?? '')}\n subtitle={String(modelRecord?.name ?? agent.modelId ?? '')}\n status={agent.activePromptVersion > 0 ? (\n <Badge color=\"emerald\">v{agent.activePromptVersion}</Badge>\n ) : null}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(agent)}>\n {labels.edit}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(agent)\n }}\n >\n {labels.delete}\n </Button>\n </div>\n )}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {labels.activeVersion}: {agent.activePromptVersion} · Prompts: {agent.promptCount}\n </p>\n </EntityCard>\n )\n })}\n </div>\n )\n\n const renderForm = (initial: Partial<AgentConfigFormInput> & { title: string }, onSubmit: (input: AgentConfigFormInput) => void) => (\n <GlassModal\n open\n onClose={() => { setEditing(null); setCreateOpen(false) }}\n title={initial.title}\n maxWidth=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n onSubmit({\n agentId: initial.agentId,\n name: String(form.get('name') ?? '').trim(),\n modelId: String(form.get('modelId') ?? ''),\n systemPrompt: String(form.get('systemPrompt') ?? '').trim(),\n maxTokens: Number(form.get('maxTokens') ?? 2048),\n temperature: Number(form.get('temperature') ?? 0.2),\n outputSchema: String(form.get('outputSchema') ?? '').trim() || undefined,\n })\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} defaultValue={initial.name ?? ''} required />\n <FormSelect name=\"modelId\" label={labels.model} options={modelOptions} defaultValue={initial.modelId ?? modelOptions[0]?.value ?? ''} required />\n <FormInput name=\"maxTokens\" label={String(labels.maxTokens)} type=\"number\" defaultValue={String(initial.maxTokens ?? 2048)} />\n <FormInput name=\"temperature\" label={labels.temperature} type=\"number\" step={0.1} min={0} max={2} defaultValue={String(initial.temperature ?? 0.2)} />\n <FormTextarea name=\"systemPrompt\" label={labels.systemPrompt} defaultValue={initial.systemPrompt ?? ''} rows={4} />\n <FormTextarea name=\"outputSchema\" label={labels.outputSchema} placeholder={labels.outputSchemaPlaceholder} defaultValue={initial.outputSchema ?? ''} rows={4} />\n </FormGrid>\n </GlassModal>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && renderForm({ title: labels.createTitle }, (input) => {\n onCreate(input)\n setCreateOpen(false)\n })}\n {editing && renderForm(\n {\n title: labels.editTitle,\n agentId: String(editing.agentId ?? editing.id ?? ''),\n name: String(editing.name ?? ''),\n modelId: String(editing.modelId ?? ''),\n systemPrompt: String((editing as Record<string, unknown>).systemPrompt ?? ''),\n maxTokens: Number(editing.maxTokens ?? 2048),\n temperature: Number((editing as Record<string, unknown>).temperature ?? 0.2),\n outputSchema: String((editing as Record<string, unknown>).outputSchema ?? ''),\n },\n (input) => {\n onUpdate(String(editing.agentId ?? editing.id ?? ''), input)\n setEditing(null)\n },\n )}\n </>\n )\n}\n","import { useMemo, useState, type FormEvent } from 'react'\nimport { ChatBubbleLeftEllipsisIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow'\nimport type { AgentWithPrompts } from '../../astrlabe'\n\nexport type PromptFormInput = {\n agentId: string\n locale: string\n prompt: string\n systemPrompt?: string\n userTemplate?: string\n isActive: boolean\n reason?: string\n}\n\nexport type AgentsPromptsLabels = {\n title: string\n subtitle: string\n addPrompt: string\n createTitle: string\n editTitle: string\n agent: string\n locale: string\n version: string\n isActive: string\n prompt: string\n systemPrompt: string\n userTemplate: string\n reason: string\n save: string\n delete: string\n activate: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: AgentsPromptsLabels\n agents: AgentWithPrompts[]\n prompts: AgentPrompt[]\n loading: boolean\n onCreate: (input: PromptFormInput) => void\n onActivate: (prompt: AgentPrompt) => void\n onDelete: (prompt: AgentPrompt) => void\n}\n\nconst LOCALE_OPTIONS = [\n { value: 'en', label: 'English' },\n { value: 'pt-BR', label: 'Português (Brasil)' },\n { value: 'es', label: 'Español' },\n { value: 'fr', label: 'Français' },\n { value: 'de', label: 'Deutsch' },\n { value: 'it', label: 'Italiano' },\n]\n\nexport function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onActivate, onDelete }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const agentOptions = useMemo(\n () => agents.map((agent) => ({\n value: String(agent.agentId ?? agent.id ?? ''),\n label: String(agent.name ?? agent.agentId ?? agent.id ?? ''),\n })),\n [agents],\n )\n\n const agentNameById = useMemo(() => {\n const map = new Map<string, string>()\n for (const agent of agents) {\n const id = String(agent.agentId ?? agent.id ?? '')\n if (id) map.set(id, String(agent.name ?? id))\n }\n return map\n }, [agents])\n\n const allPrompts = prompts\n const filteredPrompts = searchTerm.trim()\n ? allPrompts.filter((prompt) => {\n const term = searchTerm.trim().toLowerCase()\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const promptText = prompt.prompt ?? ''\n return (\n agentName.toLowerCase().includes(term) ||\n promptText.toLowerCase().includes(term)\n )\n })\n : allPrompts\n const isEmpty = allPrompts.length === 0\n\n const hero = (\n <HeroSection\n icon={<ChatBubbleLeftEllipsisIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-blue-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addPrompt}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addPrompt}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredPrompts.map((prompt) => {\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`\n return (\n <EntityCard\n key={key}\n accentGradient=\"from-sky-500 to-blue-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400\">\n <ChatBubbleLeftEllipsisIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={agentName}\n subtitle={`${prompt.locale} · v${prompt.version}`}\n status={prompt.isActive ? <Badge color=\"emerald\">{labels.isActive}</Badge> : null}\n footer={(\n <div className=\"flex gap-2\">\n {!prompt.isActive && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onActivate(prompt)}>{labels.activate}</Button>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(prompt)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {prompt.prompt && (\n <p className=\"mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400\">{prompt.prompt}</p>\n )}\n </EntityCard>\n )\n })}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.createTitle}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n const systemPrompt = String(form.get('systemPrompt') ?? '').trim()\n const userTemplate = String(form.get('userTemplate') ?? '').trim()\n const reason = String(form.get('reason') ?? '').trim()\n onCreate({\n agentId: String(form.get('agentId') ?? '').trim(),\n locale: String(form.get('locale') ?? 'en').trim(),\n prompt: String(form.get('prompt') ?? '').trim(),\n systemPrompt: systemPrompt || undefined,\n userTemplate: userTemplate || undefined,\n reason: reason || undefined,\n isActive: String(form.get('isActive') ?? 'true') === 'true',\n })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormSelect name=\"agentId\" label={labels.agent} options={agentOptions} required />\n <FormSelect name=\"locale\" label={labels.locale} options={LOCALE_OPTIONS} defaultValue=\"en\" />\n <FormSelect\n name=\"isActive\"\n label={labels.isActive}\n options={[{ value: 'true', label: labels.isActive }, { value: 'false', label: labels.isActive }]}\n defaultValue=\"true\"\n />\n <FormInput name=\"reason\" label={labels.reason} />\n <FormTextarea name=\"systemPrompt\" label={labels.systemPrompt} rows={3} />\n <FormTextarea name=\"userTemplate\" label={labels.userTemplate} rows={3} />\n <FormTextarea name=\"prompt\" label={labels.prompt} rows={6} required />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n","import { useState } from 'react'\nimport { WrenchScrewdriverIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { AgentTool } from '../../astrlabe/contracts'\n\nexport const TOOL_TYPES = [\n 'http',\n 'function',\n 'database_query',\n 'code_execution',\n 'api_call',\n] as const\n\nexport type ToolType = (typeof TOOL_TYPES)[number]\n\nexport type ToolParameter = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n description: string\n required: boolean\n}\n\n/**\n * Canonical form payload the page emits. The page wrapper turns this\n * into the backend POST/PATCH bodies — parameters go through\n * `parametersToJsonSchema` to produce `inputSchema`, and `handlerConfig`\n * stays as-is.\n */\nexport type ToolDefinitionFormInput = {\n agentToolId?: string\n name: string\n description?: string\n toolType: ToolType\n parameters: ToolParameter[]\n handlerConfig: Record<string, unknown>\n enabled: boolean\n icon?: string\n}\n\nexport type AgentsToolDefinitionsLabels = {\n title: string\n subtitle: string\n addTool: string\n createTitle: string\n editTitle: string\n name: string\n description: string\n category: string\n enabled: string\n disabled: string\n icon: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\nconst TOOL_TYPE_OPTIONS: Array<{ value: ToolType; label: string; description: string }> = [\n { value: 'http', label: 'HTTP', description: 'Call an HTTP endpoint with templated URL/body.' },\n { value: 'function', label: 'Function', description: 'Invoke a pre-registered server-side implementation.' },\n { value: 'database_query', label: 'Database query', description: 'Run a parameterized SELECT against a datasource.' },\n { value: 'code_execution', label: 'Code execution', description: 'Run sandboxed code (JS/Python) — experimental.' },\n { value: 'api_call', label: 'API call', description: 'Call a third-party API via stored credentials.' },\n]\n\nconst PARAMETER_TYPE_OPTIONS: Array<{ value: ToolParameter['type']; label: string }> = [\n { value: 'string', label: 'string' },\n { value: 'number', label: 'number' },\n { value: 'boolean', label: 'boolean' },\n { value: 'array', label: 'array' },\n { value: 'object', label: 'object' },\n]\n\ntype Props = {\n labels: AgentsToolDefinitionsLabels\n tools: AgentTool[]\n loading: boolean\n onCreate: (input: ToolDefinitionFormInput) => void\n onUpdate: (toolId: string, input: ToolDefinitionFormInput) => void\n onDelete: (tool: AgentTool) => void\n}\n\nexport function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpdate, onDelete }: Props) {\n const [editing, setEditing] = useState<AgentTool | null>(null)\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allTools = tools\n const filteredTools = searchTerm.trim()\n ? allTools.filter((tool) => tool.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTools\n const isEmpty = allTools.length === 0\n\n const hero = (\n <HeroSection\n icon={<WrenchScrewdriverIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-amber-500 to-orange-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addTool}\n onClick={() => setCreateOpen(true)}\n accent=\"amber\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addTool}\n onClick={() => setCreateOpen(true)}\n accent=\"amber\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredTools.map((tool) => (\n <EntityCard\n key={tool.agentToolId}\n accentGradient=\"from-amber-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400\">\n <WrenchScrewdriverIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={tool.name}\n subtitle={toolTypeLabel(tool)}\n status={(\n <Badge color={tool.enabled ? 'emerald' : 'zinc'}>\n {tool.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(tool)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(tool)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {tool.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{tool.description}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <ToolEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultForm()}\n onClose={() => setCreateOpen(false)}\n onSubmit={(input) => {\n onCreate(input)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ToolEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={toolToForm(editing)}\n onClose={() => setEditing(null)}\n onSubmit={(input) => {\n onUpdate(editing.agentToolId, input)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ──────────────────────────────────────────────────\n\nfunction ToolEditor({\n title,\n saveLabel,\n initial,\n onSubmit,\n onClose,\n}: {\n title: string\n saveLabel: string\n initial: ToolDefinitionFormInput\n onSubmit: (input: ToolDefinitionFormInput) => void\n onClose: () => void\n}) {\n const [value, setValue] = useState<ToolDefinitionFormInput>(initial)\n const [error, setError] = useState<string | null>(null)\n\n const handleSubmit = () => {\n if (!value.name.trim()) {\n setError('Name is required')\n return\n }\n // Validate parameter names — JSON Schema keys must not collide.\n const names = value.parameters.map((p) => p.name.trim())\n if (names.some((n) => n.length === 0)) {\n setError('Every parameter must have a name')\n return\n }\n if (new Set(names).size !== names.length) {\n setError('Parameter names must be unique')\n return\n }\n onSubmit(value)\n }\n\n const update = <K extends keyof ToolDefinitionFormInput>(key: K, next: ToolDefinitionFormInput[K]) => {\n setValue((v) => ({ ...v, [key]: next }))\n }\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"3xl\"\n showFormFooter\n submitLabel={saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n >\n <div className=\"space-y-5\">\n <FormGrid>\n <FormInput\n label=\"Name\"\n required\n value={value.name}\n onValueChange={(name) => update('name', name)}\n placeholder=\"get_station_prices\"\n />\n <FormSelect\n label=\"Tool type\"\n value={value.toolType}\n options={TOOL_TYPE_OPTIONS.map((o) => ({ value: o.value, label: o.label }))}\n onValueChange={(v) => update('toolType', v as ToolType)}\n hint={TOOL_TYPE_OPTIONS.find((o) => o.value === value.toolType)?.description}\n />\n <FormSelect\n label=\"Enabled\"\n value={value.enabled ? 'true' : 'false'}\n options={[{ value: 'true', label: 'Enabled' }, { value: 'false', label: 'Disabled' }]}\n onValueChange={(v) => update('enabled', v === 'true')}\n />\n <FormInput\n label=\"Icon (optional)\"\n value={value.icon ?? ''}\n onValueChange={(icon) => update('icon', icon)}\n placeholder=\"heroicons:wrench-screwdriver\"\n />\n </FormGrid>\n\n <FormTextarea\n label=\"Description\"\n rows={2}\n value={value.description ?? ''}\n onValueChange={(description) => update('description', description)}\n placeholder=\"One-sentence summary shown to the agent when it picks tools.\"\n />\n\n <ParametersEditor\n parameters={value.parameters}\n onChange={(parameters) => update('parameters', parameters)}\n />\n\n <HandlerConfigEditor\n toolType={value.toolType}\n config={value.handlerConfig}\n onChange={(handlerConfig) => update('handlerConfig', handlerConfig)}\n />\n\n {error && (\n <p className=\"rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300\">\n {error}\n </p>\n )}\n </div>\n </GlassModal>\n )\n}\n\n// ── Parameters editor — produces JSON Schema on save ──\n\nfunction ParametersEditor({\n parameters,\n onChange,\n}: {\n parameters: ToolParameter[]\n onChange: (next: ToolParameter[]) => void\n}) {\n const update = (index: number, patch: Partial<ToolParameter>) => {\n onChange(parameters.map((p, i) => (i === index ? { ...p, ...patch } : p)))\n }\n const remove = (index: number) => {\n onChange(parameters.filter((_, i) => i !== index))\n }\n const add = () => {\n onChange([...parameters, { name: '', type: 'string', description: '', required: false }])\n }\n\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Parameters</h3>\n <p className=\"mb-3 text-xs text-slate-500 dark:text-slate-400\">\n The agent gets these as a JSON Schema. Any parameter marked required must be supplied for the LLM to call the tool.\n </p>\n <div className=\"space-y-2\">\n {parameters.map((param, index) => (\n <div key={index} className=\"grid grid-cols-[1fr_160px_1fr_110px_auto] items-end gap-2\">\n <FormInput\n label=\"Name\"\n value={param.name}\n onValueChange={(name) => update(index, { name })}\n placeholder=\"station_id\"\n />\n <FormSelect\n label=\"Type\"\n value={param.type}\n options={PARAMETER_TYPE_OPTIONS}\n onValueChange={(t) => update(index, { type: t as ToolParameter['type'] })}\n />\n <FormInput\n label=\"Description\"\n value={param.description}\n onValueChange={(description) => update(index, { description })}\n />\n <label className=\"flex items-center gap-2 pb-2 text-xs text-slate-700 dark:text-slate-300\">\n <input\n type=\"checkbox\"\n checked={param.required}\n onChange={(event) => update(index, { required: event.target.checked })}\n className=\"h-4 w-4 rounded border-slate-300 text-indigo-600 focus:ring-2 focus:ring-indigo-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]\"\n />\n Required\n </label>\n <Button type=\"button\" plain onClick={() => remove(index)}>Remove</Button>\n </div>\n ))}\n <Button type=\"button\" outline onClick={add}>+ Add parameter</Button>\n </div>\n </section>\n )\n}\n\n// ── Handler config editor — per-tool-type UI ──\n\nfunction HandlerConfigEditor({\n toolType,\n config,\n onChange,\n}: {\n toolType: ToolType\n config: Record<string, unknown>\n onChange: (next: Record<string, unknown>) => void\n}) {\n const set = (key: string, value: unknown) => onChange({ ...config, [key]: value })\n\n if (toolType === 'http') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">HTTP handler</h3>\n <FormGrid>\n <FormSelect\n label=\"Method\"\n value={stringProp(config, 'method', 'GET')}\n options={['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((m) => ({ value: m, label: m }))}\n onValueChange={(m) => set('method', m)}\n />\n <FormInput\n label=\"URL template\"\n value={stringProp(config, 'url')}\n onValueChange={(u) => set('url', u)}\n placeholder=\"https://api.example.com/stations/{{ station_id }}\"\n />\n </FormGrid>\n <FormTextarea\n label=\"Headers (JSON)\"\n rows={3}\n value={jsonProp(config, 'headers')}\n onValueChange={(raw) => setFromJson(set, 'headers', raw)}\n placeholder='{ \"Authorization\": \"Bearer {{ apiKey }}\" }'\n />\n <FormTextarea\n label=\"Body template\"\n rows={3}\n value={stringProp(config, 'bodyTemplate')}\n onValueChange={(b) => set('bodyTemplate', b)}\n placeholder='{\"query\": \"{{ search }}\"}'\n />\n </section>\n )\n }\n\n if (toolType === 'function') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Function handler</h3>\n <FormInput\n label=\"Implementation key\"\n value={stringProp(config, 'implementationKey')}\n onValueChange={(k) => set('implementationKey', k)}\n placeholder=\"catalog.get_product_prices\"\n hint=\"Must match a pre-registered handler on the server side.\"\n />\n </section>\n )\n }\n\n if (toolType === 'database_query') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Database query handler</h3>\n <FormGrid>\n <FormInput\n label=\"Datasource ID\"\n value={stringProp(config, 'datasourceId')}\n onValueChange={(v) => set('datasourceId', v)}\n placeholder=\"UUID from /datasources\"\n />\n <FormInput\n label=\"Max rows\"\n type=\"number\"\n value={numberProp(config, 'maxRows', 100)}\n onValueChange={(v) => set('maxRows', Number(v) || 100)}\n />\n </FormGrid>\n <FormTextarea\n label=\"Query template\"\n rows={4}\n value={stringProp(config, 'queryTemplate')}\n onValueChange={(v) => set('queryTemplate', v)}\n placeholder={'SELECT id, current_price FROM current_prices WHERE station_id = {{ station_id }}'}\n />\n </section>\n )\n }\n\n if (toolType === 'code_execution') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Code execution handler</h3>\n <p className=\"mb-2 text-xs text-amber-600 dark:text-amber-400\">\n Experimental — sandbox is not yet enforced. Only enable for trusted tools.\n </p>\n <FormSelect\n label=\"Language\"\n value={stringProp(config, 'language', 'javascript')}\n options={[\n { value: 'javascript', label: 'JavaScript' },\n { value: 'python', label: 'Python' },\n ]}\n onValueChange={(v) => set('language', v)}\n />\n <FormTextarea\n label=\"Code\"\n rows={6}\n value={stringProp(config, 'code')}\n onValueChange={(v) => set('code', v)}\n placeholder={'// return value becomes the tool output\\nreturn { price: inputs.x * 1.08 }'}\n />\n </section>\n )\n }\n\n // api_call — generic: url + auth method\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">API call handler</h3>\n <FormGrid>\n <FormInput\n label=\"URL\"\n value={stringProp(config, 'url')}\n onValueChange={(v) => set('url', v)}\n />\n <FormSelect\n label=\"Auth\"\n value={stringProp(config, 'authType', 'bearer')}\n options={[\n { value: 'none', label: 'None' },\n { value: 'bearer', label: 'Bearer token' },\n { value: 'api_key', label: 'API key header' },\n { value: 'basic', label: 'Basic auth' },\n ]}\n onValueChange={(v) => set('authType', v)}\n />\n <FormInput\n label=\"Credential secret id\"\n value={stringProp(config, 'credentialRef')}\n onValueChange={(v) => set('credentialRef', v)}\n placeholder=\"UUID from vault\"\n hint=\"Leave blank if Auth is None.\"\n />\n </FormGrid>\n </section>\n )\n}\n\n// ── Translators + helpers ───────────────────────────────────────\n\n/**\n * Build a JSON Schema object from the parameter list. Mirrors the\n * format the backend validator (`validate_input_schema`) expects —\n * `{ type: 'object', properties, required }`.\n */\nexport function parametersToJsonSchema(params: ToolParameter[]): Record<string, unknown> {\n const properties: Record<string, unknown> = {}\n const required: string[] = []\n for (const param of params) {\n if (!param.name.trim()) continue\n properties[param.name] = {\n type: param.type,\n ...(param.description ? { description: param.description } : {}),\n }\n if (param.required) required.push(param.name)\n }\n const schema: Record<string, unknown> = { type: 'object', properties }\n if (required.length > 0) schema.required = required\n return schema\n}\n\n/**\n * Inverse of `parametersToJsonSchema` — hydrate the editor UI from an\n * existing schema so the Edit flow shows what was stored.\n */\nexport function jsonSchemaToParameters(schema: unknown): ToolParameter[] {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return []\n const root = schema as Record<string, unknown>\n const properties = root.properties\n if (!properties || typeof properties !== 'object' || Array.isArray(properties)) return []\n const required = Array.isArray(root.required) ? (root.required as unknown[]).filter((r): r is string => typeof r === 'string') : []\n const entries = Object.entries(properties as Record<string, unknown>)\n return entries.map(([name, raw]) => {\n const def = (raw ?? {}) as Record<string, unknown>\n const rawType = def.type\n const type = isParameterType(rawType) ? rawType : 'string'\n return {\n name,\n type,\n description: typeof def.description === 'string' ? def.description : '',\n required: required.includes(name),\n }\n })\n}\n\nfunction isParameterType(v: unknown): v is ToolParameter['type'] {\n return v === 'string' || v === 'number' || v === 'boolean' || v === 'array' || v === 'object'\n}\n\nfunction defaultForm(): ToolDefinitionFormInput {\n return {\n name: '',\n description: '',\n toolType: 'http',\n parameters: [],\n handlerConfig: { method: 'GET' },\n enabled: true,\n }\n}\n\nfunction toolToForm(tool: AgentTool): ToolDefinitionFormInput {\n const raw = tool as Record<string, unknown>\n // Parse the nested `implementationKey` JSON that the backend stores —\n // it holds `{organizationId, handlerConfig}` per the Rust handler.\n const implRaw = raw.implementationKey ?? raw.implementation_key\n let handlerConfig: Record<string, unknown> = {}\n if (typeof implRaw === 'string') {\n try {\n const parsed = JSON.parse(implRaw) as Record<string, unknown>\n if (parsed && typeof parsed === 'object') {\n const inner = parsed.handlerConfig ?? parsed.handler_config\n if (inner && typeof inner === 'object' && !Array.isArray(inner)) {\n handlerConfig = inner as Record<string, unknown>\n }\n }\n } catch {\n // Legacy rows that stored implementationKey as a plain string —\n // surface it under a single `implementationKey` handler field.\n handlerConfig = { implementationKey: implRaw }\n }\n }\n\n const toolTypeRaw = raw.toolType ?? raw.tool_type ?? raw.category\n const toolType: ToolType = (TOOL_TYPES as readonly string[]).includes(String(toolTypeRaw))\n ? (toolTypeRaw as ToolType)\n : 'function'\n\n const parameters = jsonSchemaToParameters(raw.parameters ?? raw.inputSchema ?? raw.input_schema)\n\n return {\n agentToolId: tool.agentToolId,\n name: tool.name,\n description: tool.description,\n toolType,\n parameters,\n handlerConfig,\n enabled: tool.enabled,\n icon: tool.icon,\n }\n}\n\nfunction toolTypeLabel(tool: AgentTool): string {\n const raw = tool as Record<string, unknown>\n const t = raw.toolType ?? raw.tool_type ?? tool.category\n const entry = TOOL_TYPE_OPTIONS.find((o) => o.value === t)\n return entry?.label ?? (typeof t === 'string' ? t : 'tool')\n}\n\nfunction stringProp(obj: Record<string, unknown>, key: string, fallback = ''): string {\n const value = obj[key]\n return typeof value === 'string' ? value : fallback\n}\n\nfunction numberProp(obj: Record<string, unknown>, key: string, fallback: number): string {\n const value = obj[key]\n return typeof value === 'number' && Number.isFinite(value) ? String(value) : String(fallback)\n}\n\nfunction jsonProp(obj: Record<string, unknown>, key: string): string {\n const value = obj[key]\n if (!value) return ''\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n}\n\nfunction setFromJson(\n set: (key: string, value: unknown) => void,\n key: string,\n raw: string,\n) {\n if (!raw.trim()) {\n set(key, undefined)\n return\n }\n try {\n set(key, JSON.parse(raw))\n } catch {\n // Keep the string around so the textarea's value round-trips; the\n // page wrapper refuses to submit if this is still invalid on save.\n set(key, raw)\n }\n}\n","import { useState } from 'react'\nimport { AdjustmentsHorizontalIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport {\n RuleForm,\n defaultRuleForm,\n type RuleFormValue,\n} from '../../astrlabe'\nimport type { AgentRule } from '../../astrlabe/contracts'\n\nexport type { RuleFormValue }\n\nexport type RulesLabels = {\n title: string\n subtitle: string\n addRule: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n empty: string\n enabled: string\n disabled: string\n order: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: RulesLabels\n rules: AgentRule[]\n loading: boolean\n onCreate: (input: RuleFormValue) => void\n onUpdate: (ruleId: string, input: RuleFormValue) => void\n onDelete: (rule: AgentRule) => void\n}\n\nexport function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<AgentRule | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allRules = rules\n const filteredRules = searchTerm.trim()\n ? allRules.filter((rule) => (rule.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allRules\n const isEmpty = allRules.length === 0\n\n const hero = (\n <HeroSection\n icon={<AdjustmentsHorizontalIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-fuchsia-500 to-purple-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addRule}\n onClick={() => setCreateOpen(true)}\n accent=\"fuchsia\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addRule}\n onClick={() => setCreateOpen(true)}\n accent=\"fuchsia\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRules.map((rule) => (\n <EntityCard\n key={rule.ruleId}\n accentGradient=\"from-fuchsia-500 to-purple-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400\">\n <AdjustmentsHorizontalIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={rule.name}\n subtitle={`${labels.order}: ${rule.order ?? 0}`}\n status={(\n <Badge color={rule.enabled ? 'emerald' : 'zinc'}>\n {rule.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(rule)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(rule)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {rule.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{rule.description}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <RuleEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultRuleForm()}\n onClose={() => setCreateOpen(false)}\n onSubmit={(value) => {\n onCreate(value)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <RuleEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={ruleToFormValue(editing)}\n onClose={() => setEditing(null)}\n onSubmit={(value) => {\n onUpdate(editing.ruleId, value)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\nfunction RuleEditor({\n title,\n saveLabel,\n initial,\n onSubmit,\n onClose,\n}: {\n title: string\n saveLabel: string\n initial: RuleFormValue\n onSubmit: (value: RuleFormValue) => void\n onClose: () => void\n}) {\n const [value, setValue] = useState<RuleFormValue>(initial)\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"3xl\"\n showFormFooter\n submitLabel={saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n onSubmit(value)\n }}\n >\n <RuleForm value={value} onChange={setValue} />\n </GlassModal>\n )\n}\n\n/**\n * Convert an `AgentRule` wire payload (which may carry a legacy singular\n * `condition` + plural `actions[]` or the newer singular `action`) into\n * the canonical `RuleFormValue` shape the builder expects.\n */\nfunction ruleToFormValue(rule: AgentRule): RuleFormValue {\n const base = defaultRuleForm()\n const rawCondition = (rule.condition ?? rule.conditions) as RuleFormValue['condition'] | undefined\n const rawAction = pickAction(rule)\n return {\n ...base,\n ruleId: rule.ruleId,\n name: rule.name ?? '',\n description: rule.description ?? '',\n enabled: rule.enabled,\n priority: typeof rule.order === 'number' ? rule.order : typeof rule.priority === 'number' ? (rule.priority as number) : 0,\n condition: rawCondition && typeof rawCondition === 'object'\n ? (rawCondition as RuleFormValue['condition'])\n : base.condition,\n action: rawAction ?? base.action,\n status: typeof rule.status === 'string' ? (rule.status as RuleFormValue['status']) : base.status,\n validFrom: typeof rule.validFrom === 'string' ? rule.validFrom : base.validFrom,\n validUntil: typeof rule.validUntil === 'string' ? rule.validUntil : base.validUntil,\n tags: Array.isArray(rule.tags)\n ? (rule.tags as unknown[]).filter((tag): tag is string => typeof tag === 'string')\n : base.tags,\n }\n}\n\nfunction pickAction(rule: AgentRule): RuleFormValue['action'] | undefined {\n const singular = rule.action as Record<string, unknown> | undefined\n if (singular && typeof singular === 'object' && 'type' in singular) {\n return singular as RuleFormValue['action']\n }\n if (Array.isArray(rule.actions) && rule.actions.length > 0) {\n const first = rule.actions[0]\n if (first && typeof first === 'object' && 'type' in first) {\n return first as RuleFormValue['action']\n }\n }\n return undefined\n}\n","import { useState } from 'react'\nimport { CircleStackIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n HeroSection,\n PageEmptyState,\n Badge,\n SearchBar,\n} from '@ui/index'\nimport type { DataSource } from '@datatechsolutions/shared-domain/common'\nimport { DatasourceModal, DIALECT_CATEGORIES, findCategory, type DatasourceFormData } from './datasource-modal'\n\n/* ─── Sample data for the landing preview ─── */\n\nconst SAMPLE_DATASOURCES: DataSource[] = [\n {\n id: 'ds_bigquery_analytics',\n organizationId: 'org_demo',\n name: 'BigQuery Analytics',\n dialect: 'bigquery',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-20T10:00:00Z',\n updatedAt: '2026-03-20T10:00:00Z',\n slug: 'bigquery-analytics',\n },\n {\n id: 'ds_postgres_prod',\n organizationId: 'org_demo',\n name: 'Production PostgreSQL',\n dialect: 'postgres',\n credentials: null,\n readOnly: true,\n maxPoolSize: 10,\n timeoutMs: 15000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-18T08:30:00Z',\n updatedAt: '2026-03-22T14:00:00Z',\n slug: 'production-postgresql',\n },\n {\n id: 'ds_snowflake_dw',\n organizationId: 'org_demo',\n name: 'Snowflake Data Warehouse',\n dialect: 'snowflake',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-15T09:00:00Z',\n updatedAt: '2026-03-21T11:00:00Z',\n slug: 'snowflake-data-warehouse',\n },\n {\n id: 'ds_mongodb_events',\n organizationId: 'org_demo',\n name: 'Event Store (MongoDB)',\n dialect: 'mongodb',\n credentials: null,\n readOnly: true,\n maxPoolSize: 5,\n timeoutMs: 10000,\n allowedTables: null,\n blockedColumns: null,\n enabled: false,\n createdAt: '2026-03-10T12:00:00Z',\n updatedAt: '2026-03-19T16:00:00Z',\n slug: 'event-store-mongodb',\n },\n {\n id: 'ds_redis_cache',\n organizationId: 'org_demo',\n name: 'Redis Cache Layer',\n dialect: 'redis',\n credentials: null,\n readOnly: false,\n maxPoolSize: 20,\n timeoutMs: 5000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-12T07:00:00Z',\n updatedAt: '2026-03-23T09:00:00Z',\n slug: 'redis-cache-layer',\n },\n {\n id: 'ds_pinecone_vectors',\n organizationId: 'org_demo',\n name: 'Pinecone Embeddings',\n dialect: 'pinecone',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 20000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-22T15:00:00Z',\n updatedAt: '2026-03-25T10:00:00Z',\n slug: 'pinecone-embeddings',\n },\n]\n\n/* ─── Helpers ─── */\n\nfunction getDialectLabel(dialect: string | null): string {\n if (!dialect) return 'Unknown'\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === dialect)\n if (found) return found.label\n }\n return dialect\n}\n\nfunction getDialectGradient(dialect: string | null): string {\n if (!dialect) return 'from-gray-400 to-gray-500'\n const category = findCategory(dialect)\n return category?.gradient ?? 'from-gray-400 to-gray-500'\n}\n\nfunction getDialectIcon(dialect: string | null) {\n if (!dialect) return CircleStackIcon\n const category = findCategory(dialect)\n return category?.icon ?? CircleStackIcon\n}\n\n// Map every supported dialect (and common aliases) to the brand SVG under\n// `/public/logos/datasources/`. When the dialect has an SVG the card shows\n// the real logo; when it does not we fall back to the gradient + Heroicon.\nconst DIALECT_LOGO: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n postgresql: '/logos/datasources/postgres.svg',\n mysql: '/logos/datasources/mysql.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n cockroachdb: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDialectLogoSrc(dialect: string | null): string | null {\n if (!dialect) return null\n return DIALECT_LOGO[dialect.toLowerCase()] ?? null\n}\n\n/* ─── Props ─── */\n\ntype Labels = Record<string, string>\n\nexport type DatasourcesPageViewProps = {\n labels: Labels\n datasources?: DataSource[]\n useSampleData?: boolean\n onCreate?: (data: DatasourceFormData) => void\n}\n\n/* ─── Component ─── */\n\nexport function DatasourcesPageView({\n labels,\n datasources: externalDatasources,\n useSampleData = false,\n onCreate,\n}: DatasourcesPageViewProps) {\n const [modalOpen, setModalOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const [localDatasources, setLocalDatasources] = useState<DataSource[]>(\n useSampleData ? SAMPLE_DATASOURCES : []\n )\n\n const allDatasources = externalDatasources ?? localDatasources\n const datasources = searchTerm.trim()\n ? allDatasources.filter((ds) => (ds.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allDatasources\n const isEmpty = allDatasources.length === 0\n\n function handleCreate(data: DatasourceFormData) {\n if (onCreate) {\n onCreate(data)\n return\n }\n // Local state fallback (for sample/demo mode)\n const newDs: DataSource = {\n id: `ds_${Date.now()}`,\n organizationId: 'org_demo',\n name: data.name,\n dialect: data.dialect,\n credentials: null,\n readOnly: data.readOnly ?? true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n slug: data.name.toLowerCase().replace(/\\s+/g, '-'),\n }\n setLocalDatasources((previous) => [...previous, newDs])\n }\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-amber-500 to-orange-600\"\n toolbar={\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addDatasource}\n onClick={() => setModalOpen(true)}\n accent=\"amber\"\n />\n }\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addDatasource}\n onClick={() => setModalOpen(true)}\n accent=\"amber\"\n />\n\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n\n {isEmpty ? (\n <PageEmptyState\n title={labels.emptyTitle}\n message={labels.emptyDescription}\n iconName=\"link\"\n customIcon={<CircleStackIcon className=\"h-10 w-10 text-amber-500 dark:text-amber-400\" />}\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {datasources.map((ds) => {\n const Icon = getDialectIcon(ds.dialect)\n const gradient = getDialectGradient(ds.dialect)\n const dialectLabel = getDialectLabel(ds.dialect)\n const logoSrc = getDialectLogoSrc(ds.dialect)\n\n // Prefer the brand SVG (`/logos/datasources/{dialect}.svg`) —\n // matches the node-palette chips inside the canvas. Fall back\n // to the gradient-boxed Heroicon when the dialect has no SVG\n // so a new/custom dialect still renders a card.\n const iconElement = logoSrc ? (\n <div className=\"liquid-surface flex h-11 w-11 items-center justify-center rounded-lg\">\n <img src={logoSrc} alt={dialectLabel} className=\"h-7 w-7 object-contain\" />\n </div>\n ) : (\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )\n\n return (\n <EntityCard\n key={ds.id}\n accentGradient={gradient}\n icon={iconElement}\n title={ds.name ?? ds.id}\n subtitle={dialectLabel}\n status={\n <Badge color={ds.enabled ? 'emerald' : 'zinc'}>\n {ds.enabled ? labels.enabled : labels.disabled}\n </Badge>\n }\n footer={\n <div className=\"flex items-center gap-2 text-xs text-slate-500 dark:text-slate-400\">\n {ds.readOnly && (\n <Badge color=\"blue\" size=\"xs\">Read-only</Badge>\n )}\n {ds.timeoutMs && (\n <span>{ds.timeoutMs / 1000}s timeout</span>\n )}\n </div>\n }\n >\n <div className=\"mt-2 text-xs text-slate-500 dark:text-slate-400\">\n <div>{labels.dialect}: {dialectLabel}</div>\n {ds.slug && <div className=\"truncate text-slate-400 dark:text-slate-500\">/{ds.slug}</div>}\n </div>\n </EntityCard>\n )\n })}\n </div>\n )}\n\n <DatasourceModal\n open={modalOpen}\n onClose={() => setModalOpen(false)}\n labels={labels}\n onSave={handleCreate}\n />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ManagementPageLayout } from '@ui/index'\nimport type { AnalyticsSummary } from '../workflow-api-client'\n\nexport type DashboardLabels = {\n title: string\n subtitle: string\n totalRuns: string\n successRate: string\n avgDuration: string\n runsByStatus: string\n perWorkflow: string\n noData: string\n runs: string\n}\n\ntype Props = {\n labels: DashboardLabels\n summary: AnalyticsSummary | null\n loading: boolean\n /**\n * App-branded logo node rendered in the dashboard hero. Each app passes\n * its own logo (typically a pair of light/dark <img> tags toggled via\n * Tailwind `dark:` classes) so this view stays brand-agnostic.\n */\n appLogo: ReactNode\n}\n\n/**\n * Platform dashboard — a centered hero with the app's logo + subtitle.\n * Metrics and workflow tables live on dedicated pages (Analytics /\n * Workflow Runs); this view intentionally renders only the landing chrome.\n *\n * `summary` and `loading` are kept on the prop type so the page that\n * mounts this view doesn't have to change, but we intentionally don't\n * render them here.\n */\nexport function DashboardPageView({ labels, appLogo }: Props) {\n const hero = (\n <div className=\"w-full text-center\">\n <div className=\"flex justify-center mb-6\">{appLogo}</div>\n <p className=\"mt-3 text-base text-slate-600 dark:text-slate-300\">\n {labels.subtitle}\n </p>\n </div>\n )\n\n return <ManagementPageLayout hero={hero} content={null} />\n}\n","import { useState } from 'react'\nimport {\n CpuChipIcon,\n WrenchScrewdriverIcon,\n CubeTransparentIcon,\n ChatBubbleLeftEllipsisIcon,\n} from '@heroicons/react/24/outline'\nimport {\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n SearchBar,\n} from '@ui/index'\nimport { useLink } from '@ui/lib/router-context'\n\nexport type AgentsIndexLabels = {\n title: string\n subtitle: string\n configTitle: string\n configSubtitle: string\n toolDefinitionsTitle: string\n toolDefinitionsSubtitle: string\n modelsTitle: string\n modelsSubtitle: string\n promptsTitle: string\n promptsSubtitle: string\n searchPlaceholder?: string\n}\n\ntype Tile = {\n id: string\n title: string\n subtitle: string\n href: string\n gradient: string\n icon: typeof CpuChipIcon\n}\n\nexport function AgentsIndexPageView({ labels }: { labels: AgentsIndexLabels }) {\n const Link = useLink()\n const [searchTerm, setSearchTerm] = useState('')\n\n const allTiles: Tile[] = [\n { id: 'config', title: labels.configTitle, subtitle: labels.configSubtitle, href: '/agents/config', gradient: 'from-violet-500 to-indigo-700', icon: CpuChipIcon },\n { id: 'tools', title: labels.toolDefinitionsTitle, subtitle: labels.toolDefinitionsSubtitle, href: '/agents/tool-definitions', gradient: 'from-amber-500 to-orange-700', icon: WrenchScrewdriverIcon },\n { id: 'models', title: labels.modelsTitle, subtitle: labels.modelsSubtitle, href: '/agents/models', gradient: 'from-emerald-500 to-teal-700', icon: CubeTransparentIcon },\n { id: 'prompts', title: labels.promptsTitle, subtitle: labels.promptsSubtitle, href: '/agents/prompts', gradient: 'from-sky-500 to-blue-700', icon: ChatBubbleLeftEllipsisIcon },\n ]\n\n const filteredTiles = searchTerm.trim()\n ? allTiles.filter((tile) => tile.title.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTiles\n const isEmpty = allTiles.length === 0\n\n const hero = (\n <HeroSection\n icon={<CpuChipIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-700\"\n />\n )\n\n const content = (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredTiles.map((tile) => {\n const Icon = tile.icon\n return (\n <Link key={tile.id} href={tile.href} className=\"block focus:outline-none\">\n <EntityCard\n accentGradient={tile.gradient}\n icon={(\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )}\n title={tile.title}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{tile.subtitle}</p>\n </EntityCard>\n </Link>\n )\n })}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import { RectangleStackIcon } from '@heroicons/react/24/outline'\nimport { Badge, Button, Form, FormActionsRow, FormGrid, FormInput, FormTextarea, InlineForm, SectionHeader, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Text } from '@ui/index'\nimport type { WorkflowsPageViewProps, WorkflowGraph } from '@datatechsolutions/shared-domain/common'\nimport { WorkflowWorkspace } from '../workflow-workspace'\nimport { adaptWorkflowGraphToUi } from '../utils/workflow-graph-adapter'\n\nexport function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }: WorkflowsPageViewProps) {\n const selectedWorkflow = workflows[0] ?? null\n\n return (\n <div className=\"space-y-6\">\n <SectionHeader\n icon={<RectangleStackIcon className=\"h-5 w-5 text-white\" />}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n />\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.add}</Text>\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const name = String(formData.get('name') ?? '').trim()\n const description = String(formData.get('description') ?? '').trim()\n if (!name) return\n onCreate({ name, description })\n event.currentTarget.reset()\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.workflowName} placeholder={labels.workflowNamePlaceholder} required />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.workflowDescriptionPlaceholder} rows={3} />\n <FormActionsRow>\n <Button type=\"submit\">{labels.create}</Button>\n </FormActionsRow>\n </FormGrid>\n </Form>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.registry}</Text>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>{labels.name}</TableHeader>\n <TableHeader>{labels.description}</TableHeader>\n <TableHeader>{labels.version}</TableHeader>\n <TableHeader>{labels.status}</TableHeader>\n <TableHeader>{labels.actions}</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {workflows.map((workflow) => (\n <TableRow key={workflow.id}>\n <TableCell>{workflow.name}</TableCell>\n <TableCell>{workflow.description}</TableCell>\n <TableCell>{String(workflow.version)}</TableCell>\n <TableCell>\n <Badge>{workflow.isDraft ? labels.statusDraft : labels.statusPublished}</Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex flex-col gap-2\">\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n onUpdateMeta({\n workflowId: workflow.id,\n name: workflow.name ?? '',\n description: workflow.description ?? '',\n })\n }}\n >\n <InlineForm>\n <Button type=\"submit\" outline>{labels.saveMeta}</Button>\n </InlineForm>\n </Form>\n <Button type=\"button\" color=\"sky\" onClick={() => onPublish(workflow.id)}>\n {labels.publish}\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.workspace}</Text>\n {selectedWorkflow ? (\n <div className=\"min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden\">\n <WorkflowWorkspace graph={adaptWorkflowGraphToUi(selectedWorkflow.graph as WorkflowGraph) as unknown as WorkflowGraph} />\n </div>\n ) : (\n <Text>{labels.empty}</Text>\n )}\n </section>\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n EntityCard,\n FormSelect,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { WorkflowRun } from '@ui/astrlabe/contracts'\nimport { formatDurationMs } from '../utils/format-duration'\n\nexport type WorkflowRunsLabels = {\n title: string\n subtitle: string\n status: string\n duration: string\n triggeredBy: string\n startedAt: string\n cancel: string\n replay: string\n view: string\n statusPending: string\n statusRunning: string\n statusCompleted: string\n statusFailed: string\n statusCancelled: string\n filterAll: string\n filterStatus: string\n empty: string\n timeline?: string\n searchPlaceholder?: string\n}\n\nconst BADGE_COLOR: Record<string, 'emerald' | 'rose' | 'amber' | 'sky' | 'zinc'> = {\n completed: 'emerald',\n failed: 'rose',\n running: 'sky',\n pending: 'amber',\n cancelled: 'zinc',\n}\n\ntype Props = {\n labels: WorkflowRunsLabels\n runs: WorkflowRun[]\n loading: boolean\n onCancel: (run: WorkflowRun) => void\n onReplay: (run: WorkflowRun) => void\n onView?: (run: WorkflowRun) => void\n onViewTimeline?: (run: WorkflowRun) => void\n}\n\nexport function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onView, onViewTimeline }: Props) {\n const [statusFilter, setStatusFilter] = useState<string>('all')\n const [searchTerm, setSearchTerm] = useState('')\n\n const statusOptions = useMemo(() => ([\n { value: 'all', label: labels.filterAll },\n { value: 'pending', label: labels.statusPending },\n { value: 'running', label: labels.statusRunning },\n { value: 'completed', label: labels.statusCompleted },\n { value: 'failed', label: labels.statusFailed },\n { value: 'cancelled', label: labels.statusCancelled },\n ]), [labels])\n\n const statusLabelFor = (status: string) => {\n switch (status) {\n case 'pending': return labels.statusPending\n case 'running': return labels.statusRunning\n case 'completed': return labels.statusCompleted\n case 'failed': return labels.statusFailed\n case 'cancelled': return labels.statusCancelled\n default: return status\n }\n }\n\n const allRuns = runs\n const term = searchTerm.trim().toLowerCase()\n const filteredRuns = allRuns.filter((run) => {\n if (statusFilter !== 'all' && run.status !== statusFilter) return false\n if (term && !run.id.toLowerCase().includes(term) && !run.workflowId.toLowerCase().includes(term)) {\n return false\n }\n return true\n })\n const isEmpty = allRuns.length === 0\n\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-indigo-500 to-sky-700\"\n toolbar={(\n <div className=\"w-full sm:w-48\">\n <FormSelect\n name=\"statusFilter\"\n label={labels.filterStatus}\n options={statusOptions}\n value={statusFilter}\n onValueChange={setStatusFilter}\n />\n </div>\n )}\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : filteredRuns.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRuns.map((run) => (\n <EntityCard\n key={run.id}\n accentGradient=\"from-indigo-500 to-sky-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400\">\n <ClockIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={run.id.slice(0, 8)}\n subtitle={`${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`}\n status={(\n <Badge color={BADGE_COLOR[run.status] ?? 'zinc'}>\n {statusLabelFor(run.status)}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n {onView && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onView(run)}>{labels.view}</Button>\n )}\n {onViewTimeline && labels.timeline && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onViewTimeline(run)}>{labels.timeline}</Button>\n )}\n <Button type=\"button\" size=\"sm\" outline onClick={() => onReplay(run)}>{labels.replay}</Button>\n {run.status === 'running' && (\n <Button type=\"button\" size=\"sm\" color=\"rose\" onClick={() => onCancel(run)}>{labels.cancel}</Button>\n )}\n </div>\n )}\n >\n <dl className=\"mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.duration}</dt>\n <dd className=\"text-right\">{formatDurationMs(run.totalDurationMs)}</dd>\n <dt>{labels.triggeredBy}</dt>\n <dd className=\"text-right truncate\">{run.triggeredBy || '—'}</dd>\n </dl>\n {run.error && (\n <p className=\"mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400\">{run.error}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import {\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport {\n ExecutionTimelinePanel,\n type ExecutionTimelineEntry,\n type ExecutionTimelineLabels,\n} from '@ui/astrlabe'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport type { RunTimelineEntry } from '../workflow-api-client'\n\nexport type RunTimelineLabels = ExecutionTimelineLabels & {\n title: string\n subtitle: string\n}\n\ntype Props = {\n labels: RunTimelineLabels\n entries: RunTimelineEntry[]\n loading: boolean\n runId: string\n}\n\n/**\n * Astrlabe-shaped wrapper around the shared `ExecutionTimelinePanel`\n * (#68). Adds the page chrome (HeroSection + ManagementPageLayout) so\n * the runs page renders consistently with the rest of the platform.\n * Other apps (kori-erp) can drop `ExecutionTimelinePanel` directly\n * inside their own card layouts without taking on this page wrapper.\n */\nexport function RunTimelinePageView({ labels, entries, loading, runId }: Props) {\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={`${labels.subtitle} — ${runId.slice(0, 8)}`}\n gradient=\"from-indigo-500 to-violet-700\"\n />\n )\n\n if (loading) {\n return <ManagementPageLayout hero={hero} content={<PageLoadingState />} />\n }\n if (entries.length === 0) {\n return (\n <ManagementPageLayout\n hero={hero}\n content={<PageEmptyState title={labels.empty ?? ''} message=\"\" iconName=\"folder-open\" />}\n />\n )\n }\n\n return (\n <ManagementPageLayout\n hero={hero}\n content={(\n <ExecutionTimelinePanel\n entries={entries as ExecutionTimelineEntry[]}\n labels={labels}\n />\n )}\n />\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { LinkIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { ModelProviderType } from '@ui/astrlabe/contracts'\nimport type { ModelProviderConnection } from '../workflow-api-client'\n\nexport type CreateConnectionInput = {\n providerSlug: string\n name: string\n region?: string\n endpoint?: string\n credentialRef?: string\n apiKeyRef?: string\n modelFilter?: string[]\n config?: Record<string, unknown>\n}\n\nexport type UpdateConnectionInput = Partial<Omit<CreateConnectionInput, 'providerSlug'>> & {\n enabled?: boolean\n}\n\n/**\n * Presets per provider — used by the form to surface the fields each\n * provider actually cares about (region for Bedrock/Vertex, endpoint\n * for Ollama/custom, neither for Anthropic/OpenAI hosted APIs).\n * The shape intentionally mirrors `ModelProviderType` in\n * `ui/astrlabe/contracts.ts` so new providers added to the enum\n * automatically get a default row via the fallback map.\n */\nconst PROVIDER_PRESETS: Record<ModelProviderType, {\n label: string\n description: string\n needsRegion?: boolean\n needsEndpoint?: boolean\n defaultRegion?: string\n exampleModels?: string[]\n}> = {\n anthropic_api: {\n label: 'Anthropic API',\n description: 'Claude Opus, Sonnet, Haiku via api.anthropic.com',\n exampleModels: ['claude-opus-4-7', 'claude-sonnet-4-6'],\n },\n openai_api: {\n label: 'OpenAI API',\n description: 'GPT-4o, o3, o4-mini via api.openai.com',\n exampleModels: ['gpt-4o', 'gpt-4o-mini'],\n },\n aws_bedrock: {\n label: 'AWS Bedrock',\n description: 'Anthropic / Meta / Mistral / Nova served through Bedrock',\n needsRegion: true,\n defaultRegion: 'us-east-1',\n exampleModels: ['amazon.nova-lite-v1:0', 'anthropic.claude-3-5-sonnet-20241022-v2:0'],\n },\n google_vertex: {\n label: 'Google Vertex AI',\n description: 'Gemini + third-party models on Vertex',\n needsRegion: true,\n defaultRegion: 'us-central1',\n exampleModels: ['gemini-2.0-flash-exp', 'gemini-1.5-pro'],\n },\n azure_openai: {\n label: 'Azure OpenAI',\n description: 'OpenAI deployments hosted on Azure',\n needsRegion: true,\n needsEndpoint: true,\n defaultRegion: 'eastus',\n },\n groq: {\n label: 'Groq',\n description: 'Low-latency Llama / Mixtral inference via api.groq.com',\n },\n mistral: {\n label: 'Mistral API',\n description: 'mistral.ai hosted open-weight + commercial models',\n },\n huggingface: {\n label: 'Hugging Face',\n description: 'Inference endpoints + serverless inference API',\n needsEndpoint: true,\n },\n ollama: {\n label: 'Ollama',\n description: 'Self-hosted Ollama server — provide the base URL',\n needsEndpoint: true,\n },\n custom: {\n label: 'Custom / OpenAI-compatible',\n description: 'Any OpenAI-API-compatible HTTP endpoint',\n needsEndpoint: true,\n },\n}\n\nconst PROVIDER_OPTIONS = (Object.keys(PROVIDER_PRESETS) as ModelProviderType[]).map((slug) => ({\n value: slug,\n label: PROVIDER_PRESETS[slug].label,\n}))\n\nexport type ConnectionFormValue = {\n providerSlug: ModelProviderType\n name: string\n region: string\n endpoint: string\n /** Plaintext — only present when the user is entering a NEW key. On\n * save we push this to `/organizations/{id}/secrets` and replace\n * with the returned UUID before calling the connections API. */\n apiKey: string\n /** Vault secret UUID — displayed as \"••• (set)\" in the UI. */\n credentialRef: string\n modelFilter: string\n configJson: string\n}\n\nexport type ConnectionsLabels = {\n title: string\n subtitle: string\n add: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n enable: string\n disable: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype CreateSecret = (name: string, value: string) => Promise<{ id: string }>\n\ntype Props = {\n labels: ConnectionsLabels\n connections: ModelProviderConnection[]\n loading: boolean\n onCreate: (input: CreateConnectionInput) => Promise<void>\n onUpdate: (id: string, input: UpdateConnectionInput) => Promise<void>\n onDelete: (connection: ModelProviderConnection) => Promise<void>\n /** Takes a secret name + plaintext value, stores it in the vault and\n * returns the UUID the connections API should reference. */\n onCreateSecret: CreateSecret\n /**\n * Prefix for auto-generated secret names when the user enters a new\n * API key. Final shape is `${prefix}-${providerSlug}-${timestamp}`.\n * Defaults to `'platform'` so consumers that don't override land on a\n * sensible namespace.\n */\n secretNamePrefix?: string\n}\n\nexport function ConnectionsPageView({\n labels,\n connections,\n loading,\n onCreate,\n onUpdate,\n onDelete,\n onCreateSecret,\n secretNamePrefix = 'platform',\n}: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<ModelProviderConnection | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allConnections = connections\n const filteredConnections = searchTerm.trim()\n ? allConnections.filter((conn) => conn.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allConnections\n const isEmpty = allConnections.length === 0\n\n const hero = (\n <HeroSection\n icon={<LinkIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredConnections.map((conn) => (\n <EntityCard\n key={conn.id}\n accentGradient=\"from-sky-500 to-indigo-600\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400\">\n <LinkIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={conn.name}\n subtitle={providerLabel(conn.providerSlug)}\n status={(\n <div className=\"flex gap-1\">\n <Badge color={conn.enabled ? 'emerald' : 'zinc'}>\n {conn.enabled ? labels.enable : labels.disable}\n </Badge>\n {conn.credentialRef ? (\n <Badge color=\"indigo\">Secret set</Badge>\n ) : (\n <Badge color=\"amber\">No secret</Badge>\n )}\n </div>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(conn)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={async () => {\n if (window.confirm(labels.deleteConfirm)) await onDelete(conn)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n <dl className=\"mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400\">\n {conn.region && <Row label=\"Region\" value={conn.region} />}\n {conn.endpoint && <Row label=\"Endpoint\" value={conn.endpoint} />}\n {conn.modelFilter && conn.modelFilter.length > 0 && (\n <Row label=\"Models\" value={conn.modelFilter.join(', ')} />\n )}\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <ConnectionEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultConnectionFormValue()}\n mode=\"create\"\n onClose={() => setCreateOpen(false)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onCreate(wire as CreateConnectionInput)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ConnectionEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={modelToFormValue(editing)}\n mode=\"edit\"\n onClose={() => setEditing(null)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onUpdate(editing.id, wire as UpdateConnectionInput)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ────────────────────────────────────────────────\n\nfunction ConnectionEditor({\n title,\n saveLabel,\n initial,\n mode,\n onClose,\n onSubmit,\n onCreateSecret,\n secretNamePrefix,\n}: {\n title: string\n saveLabel: string\n initial: ConnectionFormValue\n mode: 'create' | 'edit'\n onClose: () => void\n onSubmit: (wire: CreateConnectionInput | UpdateConnectionInput) => Promise<void>\n onCreateSecret: CreateSecret\n secretNamePrefix: string\n}) {\n const [value, setValue] = useState<ConnectionFormValue>(initial)\n const [submitting, setSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const preset = PROVIDER_PRESETS[value.providerSlug]\n\n const handleSubmit = async () => {\n setError(null)\n setSubmitting(true)\n try {\n // Track whether the user actually rotated the API key so the\n // PATCH can omit `credentialRef` when nothing changed (the\n // backend leaves the existing value alone). For create, we\n // always send whatever was produced.\n let credentialRef = value.credentialRef\n let credentialRefRotated = false\n if (value.apiKey.trim().length > 0) {\n // Push the plaintext key to the vault and replace with the\n // returned UUID. The connections API never sees the raw key.\n const secret = await onCreateSecret(`${secretNamePrefix}-${value.providerSlug}-${Date.now()}`, value.apiKey.trim())\n credentialRef = secret.id\n credentialRefRotated = true\n }\n\n const modelFilter = parseCsv(value.modelFilter)\n let config: Record<string, unknown> | undefined\n const trimmed = value.configJson.trim()\n if (trimmed.length > 0) {\n try {\n const parsed = JSON.parse(trimmed) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('config must be a JSON object')\n }\n config = parsed as Record<string, unknown>\n } catch (e) {\n throw new Error(`Invalid config JSON: ${(e as Error).message}`)\n }\n }\n\n if (mode === 'create') {\n const wire: CreateConnectionInput = {\n providerSlug: value.providerSlug,\n name: value.name.trim(),\n ...(value.region.trim() && { region: value.region.trim() }),\n ...(value.endpoint.trim() && { endpoint: value.endpoint.trim() }),\n ...(credentialRef && { credentialRef }),\n ...(modelFilter.length > 0 && { modelFilter }),\n ...(config && { config }),\n }\n await onSubmit(wire)\n } else {\n const wire: UpdateConnectionInput = {\n name: value.name.trim() || undefined,\n region: value.region.trim() || undefined,\n endpoint: value.endpoint.trim() || undefined,\n // Only thread `credentialRef` when the user actually rotated\n // the key. Omitting it tells the backend to keep the\n // existing pointer intact.\n ...(credentialRefRotated && credentialRef ? { credentialRef } : {}),\n ...(modelFilter.length > 0 ? { modelFilter } : {}),\n ...(config && { config }),\n }\n await onSubmit(wire)\n }\n } catch (e) {\n setError((e as Error).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n // When the user swaps providers during creation, pre-fill a sensible\n // default region so Bedrock / Vertex don't silently submit blank.\n useEffect(() => {\n if (mode === 'create' && preset.needsRegion && !value.region && preset.defaultRegion) {\n setValue((v) => ({ ...v, region: preset.defaultRegion ?? '' }))\n }\n }, [mode, preset, value.region])\n\n const placeholderModels = useMemo(() => {\n return preset.exampleModels?.join(', ') ?? ''\n }, [preset])\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={submitting ? '…' : saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n void handleSubmit()\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormSelect\n label=\"Provider\"\n value={value.providerSlug}\n options={PROVIDER_OPTIONS}\n onValueChange={(slug) => setValue((v) => ({ ...v, providerSlug: slug as ModelProviderType }))}\n disabled={mode === 'edit'}\n hint={preset.description}\n />\n <FormInput\n label=\"Display name\"\n required\n value={value.name}\n onValueChange={(name) => setValue((v) => ({ ...v, name }))}\n placeholder=\"Production Bedrock, Claude dev, …\"\n />\n {preset.needsRegion && (\n <FormInput\n label=\"Region\"\n value={value.region}\n onValueChange={(region) => setValue((v) => ({ ...v, region }))}\n placeholder={preset.defaultRegion}\n />\n )}\n {preset.needsEndpoint && (\n <FormInput\n label=\"Endpoint URL\"\n value={value.endpoint}\n onValueChange={(endpoint) => setValue((v) => ({ ...v, endpoint }))}\n placeholder=\"https://...\"\n />\n )}\n </FormGrid>\n\n <FormInput\n label={value.credentialRef ? 'Rotate API key (leave blank to keep current)' : 'API key'}\n type=\"password\"\n value={value.apiKey}\n onValueChange={(apiKey) => setValue((v) => ({ ...v, apiKey }))}\n placeholder={value.credentialRef ? '••• stored in vault' : 'sk-...'}\n hint={value.credentialRef\n ? `Stored secret: ${value.credentialRef.slice(0, 8)}…`\n : 'Plaintext — pushed to windsock vault on save, never persisted here.'}\n />\n\n <FormInput\n label=\"Model filter (comma-separated, optional)\"\n value={value.modelFilter}\n onValueChange={(modelFilter) => setValue((v) => ({ ...v, modelFilter }))}\n placeholder={placeholderModels}\n hint=\"Leave blank to allow all models the provider exposes.\"\n />\n\n <details className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 text-sm dark:border-slate-700 dark:bg-slate-900/40\">\n <summary className=\"cursor-pointer font-medium text-slate-700 dark:text-slate-200\">\n Advanced config (JSON)\n </summary>\n <div className=\"mt-3\">\n <FormTextarea\n rows={4}\n value={value.configJson}\n onValueChange={(configJson) => setValue((v) => ({ ...v, configJson }))}\n placeholder={'{\\n \"temperature\": 0.2\\n}'}\n hint=\"Free-form JSON passed to the runtime provider — e.g. Bedrock guardrail ids, Azure deployment overrides.\"\n />\n </div>\n </details>\n\n {error && (\n <p className=\"rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300\">\n {error}\n </p>\n )}\n </div>\n </GlassModal>\n )\n}\n\n// ── Helpers ────────────────────────────────────────────────────\n\nfunction Row({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex gap-1 truncate\">\n <dt className=\"font-medium\">{label}:</dt>\n <dd className=\"truncate\">{value}</dd>\n </div>\n )\n}\n\nfunction providerLabel(slug?: string): string {\n if (!slug) return 'Unknown provider'\n const key = slug as ModelProviderType\n return PROVIDER_PRESETS[key]?.label ?? slug\n}\n\nfunction parseCsv(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n\nfunction defaultConnectionFormValue(): ConnectionFormValue {\n return {\n providerSlug: 'anthropic_api',\n name: '',\n region: '',\n endpoint: '',\n apiKey: '',\n credentialRef: '',\n modelFilter: '',\n configJson: '',\n }\n}\n\nfunction modelToFormValue(conn: ModelProviderConnection): ConnectionFormValue {\n return {\n providerSlug: (conn.providerSlug as ModelProviderType) ?? 'custom',\n name: conn.name,\n region: conn.region ?? '',\n endpoint: conn.endpoint ?? '',\n apiKey: '',\n credentialRef: conn.credentialRef ?? '',\n modelFilter: (conn.modelFilter ?? []).join(', '),\n configJson: conn.config ? JSON.stringify(conn.config, null, 2) : '',\n }\n}\n","import { useState, type FormEvent } from 'react'\nimport { KeyIcon, TrashIcon, ArrowPathIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CopyableId,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { SecretSummary } from '../windsock-admin-client'\n\nexport type CredentialFormInput = {\n name: string\n value: string\n secretType: string\n description?: string\n}\n\nexport type CredentialsPageViewLabels = {\n title: string\n subtitle: string\n addCredential: string\n createTitle: string\n name: string\n namePlaceholder: string\n value: string\n valuePlaceholder: string\n type: string\n typeGeneric: string\n typeApiKey: string\n typeOAuth: string\n typePassword: string\n description: string\n descriptionPlaceholder: string\n save: string\n rotate: string\n disable: string\n disableConfirm: string\n expiresAt: string\n createdAt: string\n neverExpires: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: CredentialsPageViewLabels\n credentials: SecretSummary[]\n loading: boolean\n onCreate: (input: CredentialFormInput) => void\n onRotate: (secret: SecretSummary, newValue: string) => void\n onDisable: (secret: SecretSummary) => void\n}\n\nexport function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate, onDisable }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [rotateFor, setRotateFor] = useState<SecretSummary | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allCredentials = credentials\n const filteredCredentials = searchTerm.trim()\n ? allCredentials.filter((secret) => secret.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allCredentials\n const isEmpty = allCredentials.length === 0\n\n const typeOptions = [\n { value: 'generic', label: labels.typeGeneric },\n { value: 'api_key', label: labels.typeApiKey },\n { value: 'oauth', label: labels.typeOAuth },\n { value: 'password', label: labels.typePassword },\n ]\n\n const hero = (\n <HeroSection\n icon={<KeyIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-rose-500 to-orange-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredCredentials.map((secret) => (\n <EntityCard\n key={secret.secretId}\n accentGradient=\"from-rose-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400\">\n <KeyIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={secret.name}\n subtitle={secret.secretType}\n status={(\n <Badge color={secret.disabled ? 'zinc' : 'emerald'}>\n {secret.disabled ? labels.disable : 'Active'}\n </Badge>\n )}\n footer={(\n <div className=\"flex items-center justify-between gap-2\">\n <CopyableId id={secret.secretId} />\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setRotateFor(secret)}>\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.rotate}\n </Button>\n {!secret.disabled && (\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.disableConfirm)) onDisable(secret)\n }}\n >\n <TrashIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.disable}\n </Button>\n )}\n </div>\n </div>\n )}\n >\n {secret.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{secret.description}</p>\n )}\n <dl className=\"mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.createdAt}</dt>\n <dd className=\"text-right\">{new Date(secret.createdAt).toLocaleDateString()}</dd>\n <dt>{labels.expiresAt}</dt>\n <dd className=\"text-right\">{secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires}</dd>\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.createTitle}\n maxWidth=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const value = String(formData.get('value') ?? '')\n const secretType = String(formData.get('secretType') ?? 'generic')\n const description = String(formData.get('description') ?? '').trim() || undefined\n if (!name || !value) return\n onCreate({ name, value, secretType, description })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.namePlaceholder} required />\n <FormSelect name=\"secretType\" label={labels.type} options={typeOptions} defaultValue=\"generic\" />\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.descriptionPlaceholder} rows={2} />\n </FormGrid>\n </GlassModal>\n\n <GlassModal\n open={rotateFor !== null}\n onClose={() => setRotateFor(null)}\n title={`${labels.rotate}: ${rotateFor?.name ?? ''}`}\n maxWidth=\"md\"\n showFormFooter\n submitLabel={labels.rotate}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const value = String(formData.get('value') ?? '')\n if (!value || !rotateFor) return\n onRotate(rotateFor, value)\n setRotateFor(null)\n }}\n >\n <FormGrid>\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n"]}
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"],"names":["useState","jsx","HeroSection","CubeTransparentIcon","PageLoadingState","PageEmptyState","jsxs","Fragment","SearchBar","EntityCard","Badge","ManagementPageLayout","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"],"mappings":"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","file":"index.js","sourcesContent":["import { useState } from 'react'\nimport {\n Badge,\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport { CubeTransparentIcon } from '@heroicons/react/24/outline'\nimport type { AgentModel } from '../../astrlabe/contracts'\n\nexport type AgentsModelsLabels = {\n title: string\n subtitle: string\n provider: string\n enabled: string\n disabled: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: AgentsModelsLabels\n models: AgentModel[]\n loading: boolean\n}\n\nexport function AgentsModelsPageView({ labels, models, loading }: Props) {\n const [searchTerm, setSearchTerm] = useState('')\n\n const allModels = models\n const filteredModels = searchTerm.trim()\n ? allModels.filter((model) => model.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allModels\n const isEmpty = allModels.length === 0\n\n const hero = (\n <HeroSection\n icon={<CubeTransparentIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-700\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredModels.map((model) => (\n <EntityCard\n key={model.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <CubeTransparentIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={model.name}\n subtitle={`${labels.provider}: ${model.provider}`}\n status={(\n <Badge color={model.enabled ? 'emerald' : 'zinc'}>\n {model.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n />\n ))}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import { useState, type FormEvent } from 'react'\nimport { CpuChipIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { AgentModel } from '../../astrlabe/contracts'\nimport type { AgentWithPrompts } from '../../astrlabe'\n\nexport type AgentConfigFormInput = {\n agentId?: string\n name: string\n modelId: string\n systemPrompt: string\n maxTokens: number\n temperature: number\n outputSchema?: string\n}\n\nexport type AgentsConfigLabels = {\n title: string\n subtitle: string\n addAgent: string\n createTitle: string\n editTitle: string\n name: string\n model: string\n systemPrompt: string\n maxTokens: number | string\n temperature: string\n outputSchema: string\n outputSchemaPlaceholder: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n activeVersion: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: AgentsConfigLabels\n agents: AgentWithPrompts[]\n models: AgentModel[]\n loading: boolean\n onCreate: (input: AgentConfigFormInput) => void\n onUpdate: (agentId: string, input: AgentConfigFormInput) => void\n onDelete: (agent: AgentWithPrompts) => void\n}\n\nexport function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }: Props) {\n const [editing, setEditing] = useState<AgentWithPrompts | null>(null)\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }))\n\n const allAgents = agents\n const filteredAgents = searchTerm.trim()\n ? allAgents.filter((agent) => String(agent.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allAgents\n const isEmpty = allAgents.length === 0\n\n const hero = (\n <HeroSection\n icon={<CpuChipIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-700\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addAgent}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addAgent}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredAgents.map((agent) => {\n const modelRecord = models.find((model) => model.id === String(agent.modelId ?? ''))\n return (\n <EntityCard\n key={String(agent.agentId ?? agent.id ?? agent.name)}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <CpuChipIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={String(agent.name ?? '')}\n subtitle={String(modelRecord?.name ?? agent.modelId ?? '')}\n status={agent.activePromptVersion > 0 ? (\n <Badge color=\"emerald\">v{agent.activePromptVersion}</Badge>\n ) : null}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(agent)}>\n {labels.edit}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(agent)\n }}\n >\n {labels.delete}\n </Button>\n </div>\n )}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {labels.activeVersion}: {agent.activePromptVersion} · Prompts: {agent.promptCount}\n </p>\n </EntityCard>\n )\n })}\n </div>\n )\n\n const renderForm = (initial: Partial<AgentConfigFormInput> & { title: string }, onSubmit: (input: AgentConfigFormInput) => void) => (\n <GlassModal\n open\n onClose={() => { setEditing(null); setCreateOpen(false) }}\n title={initial.title}\n maxWidth=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n onSubmit({\n agentId: initial.agentId,\n name: String(form.get('name') ?? '').trim(),\n modelId: String(form.get('modelId') ?? ''),\n systemPrompt: String(form.get('systemPrompt') ?? '').trim(),\n maxTokens: Number(form.get('maxTokens') ?? 2048),\n temperature: Number(form.get('temperature') ?? 0.2),\n outputSchema: String(form.get('outputSchema') ?? '').trim() || undefined,\n })\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} defaultValue={initial.name ?? ''} required />\n <FormSelect name=\"modelId\" label={labels.model} options={modelOptions} defaultValue={initial.modelId ?? modelOptions[0]?.value ?? ''} required />\n <FormInput name=\"maxTokens\" label={String(labels.maxTokens)} type=\"number\" defaultValue={String(initial.maxTokens ?? 2048)} />\n <FormInput name=\"temperature\" label={labels.temperature} type=\"number\" step={0.1} min={0} max={2} defaultValue={String(initial.temperature ?? 0.2)} />\n <FormTextarea name=\"systemPrompt\" label={labels.systemPrompt} defaultValue={initial.systemPrompt ?? ''} rows={4} />\n <FormTextarea name=\"outputSchema\" label={labels.outputSchema} placeholder={labels.outputSchemaPlaceholder} defaultValue={initial.outputSchema ?? ''} rows={4} />\n </FormGrid>\n </GlassModal>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && renderForm({ title: labels.createTitle }, (input) => {\n onCreate(input)\n setCreateOpen(false)\n })}\n {editing && renderForm(\n {\n title: labels.editTitle,\n agentId: String(editing.agentId ?? editing.id ?? ''),\n name: String(editing.name ?? ''),\n modelId: String(editing.modelId ?? ''),\n systemPrompt: String((editing as Record<string, unknown>).systemPrompt ?? ''),\n maxTokens: Number(editing.maxTokens ?? 2048),\n temperature: Number((editing as Record<string, unknown>).temperature ?? 0.2),\n outputSchema: String((editing as Record<string, unknown>).outputSchema ?? ''),\n },\n (input) => {\n onUpdate(String(editing.agentId ?? editing.id ?? ''), input)\n setEditing(null)\n },\n )}\n </>\n )\n}\n","import { useMemo, useState, type FormEvent } from 'react'\nimport { ChatBubbleLeftEllipsisIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow'\nimport type { AgentWithPrompts } from '../../astrlabe'\n\nexport type PromptFormInput = {\n agentId: string\n locale: string\n prompt: string\n systemPrompt?: string\n userTemplate?: string\n isActive: boolean\n reason?: string\n}\n\nexport type AgentsPromptsLabels = {\n title: string\n subtitle: string\n addPrompt: string\n createTitle: string\n editTitle: string\n agent: string\n locale: string\n version: string\n isActive: string\n prompt: string\n systemPrompt: string\n userTemplate: string\n reason: string\n save: string\n delete: string\n activate: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: AgentsPromptsLabels\n agents: AgentWithPrompts[]\n prompts: AgentPrompt[]\n loading: boolean\n onCreate: (input: PromptFormInput) => void\n onActivate: (prompt: AgentPrompt) => void\n onDelete: (prompt: AgentPrompt) => void\n}\n\nconst LOCALE_OPTIONS = [\n { value: 'en', label: 'English' },\n { value: 'pt-BR', label: 'Português (Brasil)' },\n { value: 'es', label: 'Español' },\n { value: 'fr', label: 'Français' },\n { value: 'de', label: 'Deutsch' },\n { value: 'it', label: 'Italiano' },\n]\n\nexport function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onActivate, onDelete }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const agentOptions = useMemo(\n () => agents.map((agent) => ({\n value: String(agent.agentId ?? agent.id ?? ''),\n label: String(agent.name ?? agent.agentId ?? agent.id ?? ''),\n })),\n [agents],\n )\n\n const agentNameById = useMemo(() => {\n const map = new Map<string, string>()\n for (const agent of agents) {\n const id = String(agent.agentId ?? agent.id ?? '')\n if (id) map.set(id, String(agent.name ?? id))\n }\n return map\n }, [agents])\n\n const allPrompts = prompts\n const filteredPrompts = searchTerm.trim()\n ? allPrompts.filter((prompt) => {\n const term = searchTerm.trim().toLowerCase()\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const promptText = prompt.prompt ?? ''\n return (\n agentName.toLowerCase().includes(term) ||\n promptText.toLowerCase().includes(term)\n )\n })\n : allPrompts\n const isEmpty = allPrompts.length === 0\n\n const hero = (\n <HeroSection\n icon={<ChatBubbleLeftEllipsisIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-blue-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addPrompt}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addPrompt}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredPrompts.map((prompt) => {\n const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId\n const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`\n return (\n <EntityCard\n key={key}\n accentGradient=\"from-sky-500 to-blue-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400\">\n <ChatBubbleLeftEllipsisIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={agentName}\n subtitle={`${prompt.locale} · v${prompt.version}`}\n status={prompt.isActive ? <Badge color=\"emerald\">{labels.isActive}</Badge> : null}\n footer={(\n <div className=\"flex gap-2\">\n {!prompt.isActive && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onActivate(prompt)}>{labels.activate}</Button>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(prompt)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {prompt.prompt && (\n <p className=\"mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400\">{prompt.prompt}</p>\n )}\n </EntityCard>\n )\n })}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.createTitle}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const form = new FormData(event.currentTarget as HTMLFormElement)\n const systemPrompt = String(form.get('systemPrompt') ?? '').trim()\n const userTemplate = String(form.get('userTemplate') ?? '').trim()\n const reason = String(form.get('reason') ?? '').trim()\n onCreate({\n agentId: String(form.get('agentId') ?? '').trim(),\n locale: String(form.get('locale') ?? 'en').trim(),\n prompt: String(form.get('prompt') ?? '').trim(),\n systemPrompt: systemPrompt || undefined,\n userTemplate: userTemplate || undefined,\n reason: reason || undefined,\n isActive: String(form.get('isActive') ?? 'true') === 'true',\n })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormSelect name=\"agentId\" label={labels.agent} options={agentOptions} required />\n <FormSelect name=\"locale\" label={labels.locale} options={LOCALE_OPTIONS} defaultValue=\"en\" />\n <FormSelect\n name=\"isActive\"\n label={labels.isActive}\n options={[{ value: 'true', label: labels.isActive }, { value: 'false', label: labels.isActive }]}\n defaultValue=\"true\"\n />\n <FormInput name=\"reason\" label={labels.reason} />\n <FormTextarea name=\"systemPrompt\" label={labels.systemPrompt} rows={3} />\n <FormTextarea name=\"userTemplate\" label={labels.userTemplate} rows={3} />\n <FormTextarea name=\"prompt\" label={labels.prompt} rows={6} required />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n","import { useState } from 'react'\nimport { WrenchScrewdriverIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { AgentTool } from '../../astrlabe/contracts'\n\nexport const TOOL_TYPES = [\n 'http',\n 'function',\n 'database_query',\n 'code_execution',\n 'api_call',\n] as const\n\nexport type ToolType = (typeof TOOL_TYPES)[number]\n\nexport type ToolParameter = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n description: string\n required: boolean\n}\n\n/**\n * Canonical form payload the page emits. The page wrapper turns this\n * into the backend POST/PATCH bodies — parameters go through\n * `parametersToJsonSchema` to produce `inputSchema`, and `handlerConfig`\n * stays as-is.\n */\nexport type ToolDefinitionFormInput = {\n agentToolId?: string\n name: string\n description?: string\n toolType: ToolType\n parameters: ToolParameter[]\n handlerConfig: Record<string, unknown>\n enabled: boolean\n icon?: string\n}\n\nexport type AgentsToolDefinitionsLabels = {\n title: string\n subtitle: string\n addTool: string\n createTitle: string\n editTitle: string\n name: string\n description: string\n category: string\n enabled: string\n disabled: string\n icon: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\nconst TOOL_TYPE_OPTIONS: Array<{ value: ToolType; label: string; description: string }> = [\n { value: 'http', label: 'HTTP', description: 'Call an HTTP endpoint with templated URL/body.' },\n { value: 'function', label: 'Function', description: 'Invoke a pre-registered server-side implementation.' },\n { value: 'database_query', label: 'Database query', description: 'Run a parameterized SELECT against a datasource.' },\n { value: 'code_execution', label: 'Code execution', description: 'Run sandboxed code (JS/Python) — experimental.' },\n { value: 'api_call', label: 'API call', description: 'Call a third-party API via stored credentials.' },\n]\n\nconst PARAMETER_TYPE_OPTIONS: Array<{ value: ToolParameter['type']; label: string }> = [\n { value: 'string', label: 'string' },\n { value: 'number', label: 'number' },\n { value: 'boolean', label: 'boolean' },\n { value: 'array', label: 'array' },\n { value: 'object', label: 'object' },\n]\n\ntype Props = {\n labels: AgentsToolDefinitionsLabels\n tools: AgentTool[]\n loading: boolean\n onCreate: (input: ToolDefinitionFormInput) => void\n onUpdate: (toolId: string, input: ToolDefinitionFormInput) => void\n onDelete: (tool: AgentTool) => void\n}\n\nexport function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpdate, onDelete }: Props) {\n const [editing, setEditing] = useState<AgentTool | null>(null)\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allTools = tools\n const filteredTools = searchTerm.trim()\n ? allTools.filter((tool) => tool.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTools\n const isEmpty = allTools.length === 0\n\n const hero = (\n <HeroSection\n icon={<WrenchScrewdriverIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-amber-500 to-orange-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addTool}\n onClick={() => setCreateOpen(true)}\n accent=\"amber\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addTool}\n onClick={() => setCreateOpen(true)}\n accent=\"amber\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredTools.map((tool) => (\n <EntityCard\n key={tool.agentToolId}\n accentGradient=\"from-amber-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400\">\n <WrenchScrewdriverIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={tool.name}\n subtitle={toolTypeLabel(tool)}\n status={(\n <Badge color={tool.enabled ? 'emerald' : 'zinc'}>\n {tool.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(tool)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(tool)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {tool.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{tool.description}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <ToolEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultForm()}\n onClose={() => setCreateOpen(false)}\n onSubmit={(input) => {\n onCreate(input)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ToolEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={toolToForm(editing)}\n onClose={() => setEditing(null)}\n onSubmit={(input) => {\n onUpdate(editing.agentToolId, input)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ──────────────────────────────────────────────────\n\nfunction ToolEditor({\n title,\n saveLabel,\n initial,\n onSubmit,\n onClose,\n}: {\n title: string\n saveLabel: string\n initial: ToolDefinitionFormInput\n onSubmit: (input: ToolDefinitionFormInput) => void\n onClose: () => void\n}) {\n const [value, setValue] = useState<ToolDefinitionFormInput>(initial)\n const [error, setError] = useState<string | null>(null)\n\n const handleSubmit = () => {\n if (!value.name.trim()) {\n setError('Name is required')\n return\n }\n // Validate parameter names — JSON Schema keys must not collide.\n const names = value.parameters.map((p) => p.name.trim())\n if (names.some((n) => n.length === 0)) {\n setError('Every parameter must have a name')\n return\n }\n if (new Set(names).size !== names.length) {\n setError('Parameter names must be unique')\n return\n }\n onSubmit(value)\n }\n\n const update = <K extends keyof ToolDefinitionFormInput>(key: K, next: ToolDefinitionFormInput[K]) => {\n setValue((v) => ({ ...v, [key]: next }))\n }\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"3xl\"\n showFormFooter\n submitLabel={saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n >\n <div className=\"space-y-5\">\n <FormGrid>\n <FormInput\n label=\"Name\"\n required\n value={value.name}\n onValueChange={(name) => update('name', name)}\n placeholder=\"get_station_prices\"\n />\n <FormSelect\n label=\"Tool type\"\n value={value.toolType}\n options={TOOL_TYPE_OPTIONS.map((o) => ({ value: o.value, label: o.label }))}\n onValueChange={(v) => update('toolType', v as ToolType)}\n hint={TOOL_TYPE_OPTIONS.find((o) => o.value === value.toolType)?.description}\n />\n <FormSelect\n label=\"Enabled\"\n value={value.enabled ? 'true' : 'false'}\n options={[{ value: 'true', label: 'Enabled' }, { value: 'false', label: 'Disabled' }]}\n onValueChange={(v) => update('enabled', v === 'true')}\n />\n <FormInput\n label=\"Icon (optional)\"\n value={value.icon ?? ''}\n onValueChange={(icon) => update('icon', icon)}\n placeholder=\"heroicons:wrench-screwdriver\"\n />\n </FormGrid>\n\n <FormTextarea\n label=\"Description\"\n rows={2}\n value={value.description ?? ''}\n onValueChange={(description) => update('description', description)}\n placeholder=\"One-sentence summary shown to the agent when it picks tools.\"\n />\n\n <ParametersEditor\n parameters={value.parameters}\n onChange={(parameters) => update('parameters', parameters)}\n />\n\n <HandlerConfigEditor\n toolType={value.toolType}\n config={value.handlerConfig}\n onChange={(handlerConfig) => update('handlerConfig', handlerConfig)}\n />\n\n {error && (\n <p className=\"rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300\">\n {error}\n </p>\n )}\n </div>\n </GlassModal>\n )\n}\n\n// ── Parameters editor — produces JSON Schema on save ──\n\nfunction ParametersEditor({\n parameters,\n onChange,\n}: {\n parameters: ToolParameter[]\n onChange: (next: ToolParameter[]) => void\n}) {\n const update = (index: number, patch: Partial<ToolParameter>) => {\n onChange(parameters.map((p, i) => (i === index ? { ...p, ...patch } : p)))\n }\n const remove = (index: number) => {\n onChange(parameters.filter((_, i) => i !== index))\n }\n const add = () => {\n onChange([...parameters, { name: '', type: 'string', description: '', required: false }])\n }\n\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Parameters</h3>\n <p className=\"mb-3 text-xs text-slate-500 dark:text-slate-400\">\n The agent gets these as a JSON Schema. Any parameter marked required must be supplied for the LLM to call the tool.\n </p>\n <div className=\"space-y-2\">\n {parameters.map((param, index) => (\n <div key={index} className=\"grid grid-cols-[1fr_160px_1fr_110px_auto] items-end gap-2\">\n <FormInput\n label=\"Name\"\n value={param.name}\n onValueChange={(name) => update(index, { name })}\n placeholder=\"station_id\"\n />\n <FormSelect\n label=\"Type\"\n value={param.type}\n options={PARAMETER_TYPE_OPTIONS}\n onValueChange={(t) => update(index, { type: t as ToolParameter['type'] })}\n />\n <FormInput\n label=\"Description\"\n value={param.description}\n onValueChange={(description) => update(index, { description })}\n />\n <label className=\"flex items-center gap-2 pb-2 text-xs text-slate-700 dark:text-slate-300\">\n <input\n type=\"checkbox\"\n checked={param.required}\n onChange={(event) => update(index, { required: event.target.checked })}\n className=\"h-4 w-4 rounded border-slate-300 text-indigo-600 focus:ring-2 focus:ring-indigo-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]\"\n />\n Required\n </label>\n <Button type=\"button\" plain onClick={() => remove(index)}>Remove</Button>\n </div>\n ))}\n <Button type=\"button\" outline onClick={add}>+ Add parameter</Button>\n </div>\n </section>\n )\n}\n\n// ── Handler config editor — per-tool-type UI ──\n\nfunction HandlerConfigEditor({\n toolType,\n config,\n onChange,\n}: {\n toolType: ToolType\n config: Record<string, unknown>\n onChange: (next: Record<string, unknown>) => void\n}) {\n const set = (key: string, value: unknown) => onChange({ ...config, [key]: value })\n\n if (toolType === 'http') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">HTTP handler</h3>\n <FormGrid>\n <FormSelect\n label=\"Method\"\n value={stringProp(config, 'method', 'GET')}\n options={['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((m) => ({ value: m, label: m }))}\n onValueChange={(m) => set('method', m)}\n />\n <FormInput\n label=\"URL template\"\n value={stringProp(config, 'url')}\n onValueChange={(u) => set('url', u)}\n placeholder=\"https://api.example.com/stations/{{ station_id }}\"\n />\n </FormGrid>\n <FormTextarea\n label=\"Headers (JSON)\"\n rows={3}\n value={jsonProp(config, 'headers')}\n onValueChange={(raw) => setFromJson(set, 'headers', raw)}\n placeholder='{ \"Authorization\": \"Bearer {{ apiKey }}\" }'\n />\n <FormTextarea\n label=\"Body template\"\n rows={3}\n value={stringProp(config, 'bodyTemplate')}\n onValueChange={(b) => set('bodyTemplate', b)}\n placeholder='{\"query\": \"{{ search }}\"}'\n />\n </section>\n )\n }\n\n if (toolType === 'function') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Function handler</h3>\n <FormInput\n label=\"Implementation key\"\n value={stringProp(config, 'implementationKey')}\n onValueChange={(k) => set('implementationKey', k)}\n placeholder=\"catalog.get_product_prices\"\n hint=\"Must match a pre-registered handler on the server side.\"\n />\n </section>\n )\n }\n\n if (toolType === 'database_query') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Database query handler</h3>\n <FormGrid>\n <FormInput\n label=\"Datasource ID\"\n value={stringProp(config, 'datasourceId')}\n onValueChange={(v) => set('datasourceId', v)}\n placeholder=\"UUID from /datasources\"\n />\n <FormInput\n label=\"Max rows\"\n type=\"number\"\n value={numberProp(config, 'maxRows', 100)}\n onValueChange={(v) => set('maxRows', Number(v) || 100)}\n />\n </FormGrid>\n <FormTextarea\n label=\"Query template\"\n rows={4}\n value={stringProp(config, 'queryTemplate')}\n onValueChange={(v) => set('queryTemplate', v)}\n placeholder={'SELECT id, current_price FROM current_prices WHERE station_id = {{ station_id }}'}\n />\n </section>\n )\n }\n\n if (toolType === 'code_execution') {\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">Code execution handler</h3>\n <p className=\"mb-2 text-xs text-amber-600 dark:text-amber-400\">\n Experimental — sandbox is not yet enforced. Only enable for trusted tools.\n </p>\n <FormSelect\n label=\"Language\"\n value={stringProp(config, 'language', 'javascript')}\n options={[\n { value: 'javascript', label: 'JavaScript' },\n { value: 'python', label: 'Python' },\n ]}\n onValueChange={(v) => set('language', v)}\n />\n <FormTextarea\n label=\"Code\"\n rows={6}\n value={stringProp(config, 'code')}\n onValueChange={(v) => set('code', v)}\n placeholder={'// return value becomes the tool output\\nreturn { price: inputs.x * 1.08 }'}\n />\n </section>\n )\n }\n\n // api_call — generic: url + auth method\n return (\n <section className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40\">\n <h3 className=\"mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200\">API call handler</h3>\n <FormGrid>\n <FormInput\n label=\"URL\"\n value={stringProp(config, 'url')}\n onValueChange={(v) => set('url', v)}\n />\n <FormSelect\n label=\"Auth\"\n value={stringProp(config, 'authType', 'bearer')}\n options={[\n { value: 'none', label: 'None' },\n { value: 'bearer', label: 'Bearer token' },\n { value: 'api_key', label: 'API key header' },\n { value: 'basic', label: 'Basic auth' },\n ]}\n onValueChange={(v) => set('authType', v)}\n />\n <FormInput\n label=\"Credential secret id\"\n value={stringProp(config, 'credentialRef')}\n onValueChange={(v) => set('credentialRef', v)}\n placeholder=\"UUID from vault\"\n hint=\"Leave blank if Auth is None.\"\n />\n </FormGrid>\n </section>\n )\n}\n\n// ── Translators + helpers ───────────────────────────────────────\n\n/**\n * Build a JSON Schema object from the parameter list. Mirrors the\n * format the backend validator (`validate_input_schema`) expects —\n * `{ type: 'object', properties, required }`.\n */\nexport function parametersToJsonSchema(params: ToolParameter[]): Record<string, unknown> {\n const properties: Record<string, unknown> = {}\n const required: string[] = []\n for (const param of params) {\n if (!param.name.trim()) continue\n properties[param.name] = {\n type: param.type,\n ...(param.description ? { description: param.description } : {}),\n }\n if (param.required) required.push(param.name)\n }\n const schema: Record<string, unknown> = { type: 'object', properties }\n if (required.length > 0) schema.required = required\n return schema\n}\n\n/**\n * Inverse of `parametersToJsonSchema` — hydrate the editor UI from an\n * existing schema so the Edit flow shows what was stored.\n */\nexport function jsonSchemaToParameters(schema: unknown): ToolParameter[] {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return []\n const root = schema as Record<string, unknown>\n const properties = root.properties\n if (!properties || typeof properties !== 'object' || Array.isArray(properties)) return []\n const required = Array.isArray(root.required) ? (root.required as unknown[]).filter((r): r is string => typeof r === 'string') : []\n const entries = Object.entries(properties as Record<string, unknown>)\n return entries.map(([name, raw]) => {\n const def = (raw ?? {}) as Record<string, unknown>\n const rawType = def.type\n const type = isParameterType(rawType) ? rawType : 'string'\n return {\n name,\n type,\n description: typeof def.description === 'string' ? def.description : '',\n required: required.includes(name),\n }\n })\n}\n\nfunction isParameterType(v: unknown): v is ToolParameter['type'] {\n return v === 'string' || v === 'number' || v === 'boolean' || v === 'array' || v === 'object'\n}\n\nfunction defaultForm(): ToolDefinitionFormInput {\n return {\n name: '',\n description: '',\n toolType: 'http',\n parameters: [],\n handlerConfig: { method: 'GET' },\n enabled: true,\n }\n}\n\nfunction toolToForm(tool: AgentTool): ToolDefinitionFormInput {\n const raw = tool as Record<string, unknown>\n // Parse the nested `implementationKey` JSON that the backend stores —\n // it holds `{organizationId, handlerConfig}` per the Rust handler.\n const implRaw = raw.implementationKey ?? raw.implementation_key\n let handlerConfig: Record<string, unknown> = {}\n if (typeof implRaw === 'string') {\n try {\n const parsed = JSON.parse(implRaw) as Record<string, unknown>\n if (parsed && typeof parsed === 'object') {\n const inner = parsed.handlerConfig ?? parsed.handler_config\n if (inner && typeof inner === 'object' && !Array.isArray(inner)) {\n handlerConfig = inner as Record<string, unknown>\n }\n }\n } catch {\n // Legacy rows that stored implementationKey as a plain string —\n // surface it under a single `implementationKey` handler field.\n handlerConfig = { implementationKey: implRaw }\n }\n }\n\n const toolTypeRaw = raw.toolType ?? raw.tool_type ?? raw.category\n const toolType: ToolType = (TOOL_TYPES as readonly string[]).includes(String(toolTypeRaw))\n ? (toolTypeRaw as ToolType)\n : 'function'\n\n const parameters = jsonSchemaToParameters(raw.parameters ?? raw.inputSchema ?? raw.input_schema)\n\n return {\n agentToolId: tool.agentToolId,\n name: tool.name,\n description: tool.description,\n toolType,\n parameters,\n handlerConfig,\n enabled: tool.enabled,\n icon: tool.icon,\n }\n}\n\nfunction toolTypeLabel(tool: AgentTool): string {\n const raw = tool as Record<string, unknown>\n const t = raw.toolType ?? raw.tool_type ?? tool.category\n const entry = TOOL_TYPE_OPTIONS.find((o) => o.value === t)\n return entry?.label ?? (typeof t === 'string' ? t : 'tool')\n}\n\nfunction stringProp(obj: Record<string, unknown>, key: string, fallback = ''): string {\n const value = obj[key]\n return typeof value === 'string' ? value : fallback\n}\n\nfunction numberProp(obj: Record<string, unknown>, key: string, fallback: number): string {\n const value = obj[key]\n return typeof value === 'number' && Number.isFinite(value) ? String(value) : String(fallback)\n}\n\nfunction jsonProp(obj: Record<string, unknown>, key: string): string {\n const value = obj[key]\n if (!value) return ''\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n}\n\nfunction setFromJson(\n set: (key: string, value: unknown) => void,\n key: string,\n raw: string,\n) {\n if (!raw.trim()) {\n set(key, undefined)\n return\n }\n try {\n set(key, JSON.parse(raw))\n } catch {\n // Keep the string around so the textarea's value round-trips; the\n // page wrapper refuses to submit if this is still invalid on save.\n set(key, raw)\n }\n}\n","import { useState } from 'react'\nimport { AdjustmentsHorizontalIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport {\n RuleForm,\n defaultRuleForm,\n type RuleFormValue,\n} from '../../astrlabe'\nimport type { AgentRule } from '../../astrlabe/contracts'\n\nexport type { RuleFormValue }\n\nexport type RulesLabels = {\n title: string\n subtitle: string\n addRule: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n deleteConfirm: string\n empty: string\n enabled: string\n disabled: string\n order: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: RulesLabels\n rules: AgentRule[]\n loading: boolean\n onCreate: (input: RuleFormValue) => void\n onUpdate: (ruleId: string, input: RuleFormValue) => void\n onDelete: (rule: AgentRule) => void\n}\n\nexport function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<AgentRule | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allRules = rules\n const filteredRules = searchTerm.trim()\n ? allRules.filter((rule) => (rule.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allRules\n const isEmpty = allRules.length === 0\n\n const hero = (\n <HeroSection\n icon={<AdjustmentsHorizontalIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-fuchsia-500 to-purple-700\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addRule}\n onClick={() => setCreateOpen(true)}\n accent=\"fuchsia\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addRule}\n onClick={() => setCreateOpen(true)}\n accent=\"fuchsia\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRules.map((rule) => (\n <EntityCard\n key={rule.ruleId}\n accentGradient=\"from-fuchsia-500 to-purple-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400\">\n <AdjustmentsHorizontalIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={rule.name}\n subtitle={`${labels.order}: ${rule.order ?? 0}`}\n status={(\n <Badge color={rule.enabled ? 'emerald' : 'zinc'}>\n {rule.enabled ? labels.enabled : labels.disabled}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(rule)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.deleteConfirm)) onDelete(rule)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n {rule.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{rule.description}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <RuleEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultRuleForm()}\n onClose={() => setCreateOpen(false)}\n onSubmit={(value) => {\n onCreate(value)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <RuleEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={ruleToFormValue(editing)}\n onClose={() => setEditing(null)}\n onSubmit={(value) => {\n onUpdate(editing.ruleId, value)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\nfunction RuleEditor({\n title,\n saveLabel,\n initial,\n onSubmit,\n onClose,\n}: {\n title: string\n saveLabel: string\n initial: RuleFormValue\n onSubmit: (value: RuleFormValue) => void\n onClose: () => void\n}) {\n const [value, setValue] = useState<RuleFormValue>(initial)\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"3xl\"\n showFormFooter\n submitLabel={saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n onSubmit(value)\n }}\n >\n <RuleForm value={value} onChange={setValue} />\n </GlassModal>\n )\n}\n\n/**\n * Convert an `AgentRule` wire payload (which may carry a legacy singular\n * `condition` + plural `actions[]` or the newer singular `action`) into\n * the canonical `RuleFormValue` shape the builder expects.\n */\nfunction ruleToFormValue(rule: AgentRule): RuleFormValue {\n const base = defaultRuleForm()\n const rawCondition = (rule.condition ?? rule.conditions) as RuleFormValue['condition'] | undefined\n const rawAction = pickAction(rule)\n return {\n ...base,\n ruleId: rule.ruleId,\n name: rule.name ?? '',\n description: rule.description ?? '',\n enabled: rule.enabled,\n priority: typeof rule.order === 'number' ? rule.order : typeof rule.priority === 'number' ? (rule.priority as number) : 0,\n condition: rawCondition && typeof rawCondition === 'object'\n ? (rawCondition as RuleFormValue['condition'])\n : base.condition,\n action: rawAction ?? base.action,\n status: typeof rule.status === 'string' ? (rule.status as RuleFormValue['status']) : base.status,\n validFrom: typeof rule.validFrom === 'string' ? rule.validFrom : base.validFrom,\n validUntil: typeof rule.validUntil === 'string' ? rule.validUntil : base.validUntil,\n tags: Array.isArray(rule.tags)\n ? (rule.tags as unknown[]).filter((tag): tag is string => typeof tag === 'string')\n : base.tags,\n }\n}\n\nfunction pickAction(rule: AgentRule): RuleFormValue['action'] | undefined {\n const singular = rule.action as Record<string, unknown> | undefined\n if (singular && typeof singular === 'object' && 'type' in singular) {\n return singular as RuleFormValue['action']\n }\n if (Array.isArray(rule.actions) && rule.actions.length > 0) {\n const first = rule.actions[0]\n if (first && typeof first === 'object' && 'type' in first) {\n return first as RuleFormValue['action']\n }\n }\n return undefined\n}\n","import { useState } from 'react'\nimport { CircleStackIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n HeroSection,\n PageEmptyState,\n Badge,\n SearchBar,\n} from '@ui/index'\nimport type { DataSource } from '@datatechsolutions/shared-domain/common'\nimport { DatasourceModal, DIALECT_CATEGORIES, findCategory, type DatasourceFormData } from './datasource-modal'\n\n/* ─── Sample data for the landing preview ─── */\n\nconst SAMPLE_DATASOURCES: DataSource[] = [\n {\n id: 'ds_bigquery_analytics',\n organizationId: 'org_demo',\n name: 'BigQuery Analytics',\n dialect: 'bigquery',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-20T10:00:00Z',\n updatedAt: '2026-03-20T10:00:00Z',\n slug: 'bigquery-analytics',\n },\n {\n id: 'ds_postgres_prod',\n organizationId: 'org_demo',\n name: 'Production PostgreSQL',\n dialect: 'postgres',\n credentials: null,\n readOnly: true,\n maxPoolSize: 10,\n timeoutMs: 15000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-18T08:30:00Z',\n updatedAt: '2026-03-22T14:00:00Z',\n slug: 'production-postgresql',\n },\n {\n id: 'ds_snowflake_dw',\n organizationId: 'org_demo',\n name: 'Snowflake Data Warehouse',\n dialect: 'snowflake',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-15T09:00:00Z',\n updatedAt: '2026-03-21T11:00:00Z',\n slug: 'snowflake-data-warehouse',\n },\n {\n id: 'ds_mongodb_events',\n organizationId: 'org_demo',\n name: 'Event Store (MongoDB)',\n dialect: 'mongodb',\n credentials: null,\n readOnly: true,\n maxPoolSize: 5,\n timeoutMs: 10000,\n allowedTables: null,\n blockedColumns: null,\n enabled: false,\n createdAt: '2026-03-10T12:00:00Z',\n updatedAt: '2026-03-19T16:00:00Z',\n slug: 'event-store-mongodb',\n },\n {\n id: 'ds_redis_cache',\n organizationId: 'org_demo',\n name: 'Redis Cache Layer',\n dialect: 'redis',\n credentials: null,\n readOnly: false,\n maxPoolSize: 20,\n timeoutMs: 5000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-12T07:00:00Z',\n updatedAt: '2026-03-23T09:00:00Z',\n slug: 'redis-cache-layer',\n },\n {\n id: 'ds_pinecone_vectors',\n organizationId: 'org_demo',\n name: 'Pinecone Embeddings',\n dialect: 'pinecone',\n credentials: null,\n readOnly: true,\n maxPoolSize: null,\n timeoutMs: 20000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: '2026-03-22T15:00:00Z',\n updatedAt: '2026-03-25T10:00:00Z',\n slug: 'pinecone-embeddings',\n },\n]\n\n/* ─── Helpers ─── */\n\nfunction getDialectLabel(dialect: string | null): string {\n if (!dialect) return 'Unknown'\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === dialect)\n if (found) return found.label\n }\n return dialect\n}\n\nfunction getDialectGradient(dialect: string | null): string {\n if (!dialect) return 'from-gray-400 to-gray-500'\n const category = findCategory(dialect)\n return category?.gradient ?? 'from-gray-400 to-gray-500'\n}\n\nfunction getDialectIcon(dialect: string | null) {\n if (!dialect) return CircleStackIcon\n const category = findCategory(dialect)\n return category?.icon ?? CircleStackIcon\n}\n\n// Map every supported dialect (and common aliases) to the brand SVG under\n// `/public/logos/datasources/`. When the dialect has an SVG the card shows\n// the real logo; when it does not we fall back to the gradient + Heroicon.\nconst DIALECT_LOGO: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n postgresql: '/logos/datasources/postgres.svg',\n mysql: '/logos/datasources/mysql.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n cockroachdb: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDialectLogoSrc(dialect: string | null): string | null {\n if (!dialect) return null\n return DIALECT_LOGO[dialect.toLowerCase()] ?? null\n}\n\n/* ─── Props ─── */\n\ntype Labels = Record<string, string>\n\nexport type DatasourcesPageViewProps = {\n labels: Labels\n datasources?: DataSource[]\n useSampleData?: boolean\n onCreate?: (data: DatasourceFormData) => void\n}\n\n/* ─── Component ─── */\n\nexport function DatasourcesPageView({\n labels,\n datasources: externalDatasources,\n useSampleData = false,\n onCreate,\n}: DatasourcesPageViewProps) {\n const [modalOpen, setModalOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const [localDatasources, setLocalDatasources] = useState<DataSource[]>(\n useSampleData ? SAMPLE_DATASOURCES : []\n )\n\n const allDatasources = externalDatasources ?? localDatasources\n const datasources = searchTerm.trim()\n ? allDatasources.filter((ds) => (ds.name ?? '').toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allDatasources\n const isEmpty = allDatasources.length === 0\n\n function handleCreate(data: DatasourceFormData) {\n if (onCreate) {\n onCreate(data)\n return\n }\n // Local state fallback (for sample/demo mode)\n const newDs: DataSource = {\n id: `ds_${Date.now()}`,\n organizationId: 'org_demo',\n name: data.name,\n dialect: data.dialect,\n credentials: null,\n readOnly: data.readOnly ?? true,\n maxPoolSize: null,\n timeoutMs: 30000,\n allowedTables: null,\n blockedColumns: null,\n enabled: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n slug: data.name.toLowerCase().replace(/\\s+/g, '-'),\n }\n setLocalDatasources((previous) => [...previous, newDs])\n }\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-amber-500 to-orange-600\"\n toolbar={\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addDatasource}\n onClick={() => setModalOpen(true)}\n accent=\"amber\"\n />\n }\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addDatasource}\n onClick={() => setModalOpen(true)}\n accent=\"amber\"\n />\n\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n\n {isEmpty ? (\n <PageEmptyState\n title={labels.emptyTitle}\n message={labels.emptyDescription}\n iconName=\"link\"\n customIcon={<CircleStackIcon className=\"h-10 w-10 text-amber-500 dark:text-amber-400\" />}\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {datasources.map((ds) => {\n const Icon = getDialectIcon(ds.dialect)\n const gradient = getDialectGradient(ds.dialect)\n const dialectLabel = getDialectLabel(ds.dialect)\n const logoSrc = getDialectLogoSrc(ds.dialect)\n\n // Prefer the brand SVG (`/logos/datasources/{dialect}.svg`) —\n // matches the node-palette chips inside the canvas. Fall back\n // to the gradient-boxed Heroicon when the dialect has no SVG\n // so a new/custom dialect still renders a card.\n const iconElement = logoSrc ? (\n <div className=\"liquid-surface flex h-11 w-11 items-center justify-center rounded-lg\">\n <img src={logoSrc} alt={dialectLabel} className=\"h-7 w-7 object-contain\" />\n </div>\n ) : (\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )\n\n return (\n <EntityCard\n key={ds.id}\n accentGradient={gradient}\n icon={iconElement}\n title={ds.name ?? ds.id}\n subtitle={dialectLabel}\n status={\n <Badge color={ds.enabled ? 'emerald' : 'zinc'}>\n {ds.enabled ? labels.enabled : labels.disabled}\n </Badge>\n }\n footer={\n <div className=\"flex items-center gap-2 text-xs text-slate-500 dark:text-slate-400\">\n {ds.readOnly && (\n <Badge color=\"blue\" size=\"xs\">Read-only</Badge>\n )}\n {ds.timeoutMs && (\n <span>{ds.timeoutMs / 1000}s timeout</span>\n )}\n </div>\n }\n >\n <div className=\"mt-2 text-xs text-slate-500 dark:text-slate-400\">\n <div>{labels.dialect}: {dialectLabel}</div>\n {ds.slug && <div className=\"truncate text-slate-400 dark:text-slate-500\">/{ds.slug}</div>}\n </div>\n </EntityCard>\n )\n })}\n </div>\n )}\n\n <DatasourceModal\n open={modalOpen}\n onClose={() => setModalOpen(false)}\n labels={labels}\n onSave={handleCreate}\n />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ManagementPageLayout } from '@ui/index'\nimport type { AnalyticsSummary } from '../workflow-api-client'\n\nexport type DashboardLabels = {\n title: string\n subtitle: string\n totalRuns: string\n successRate: string\n avgDuration: string\n runsByStatus: string\n perWorkflow: string\n noData: string\n runs: string\n}\n\ntype Props = {\n labels: DashboardLabels\n summary: AnalyticsSummary | null\n loading: boolean\n /**\n * App-branded logo node rendered in the dashboard hero. Each app passes\n * its own logo (typically a pair of light/dark <img> tags toggled via\n * Tailwind `dark:` classes) so this view stays brand-agnostic.\n */\n appLogo: ReactNode\n}\n\n/**\n * Platform dashboard — a centered hero with the app's logo + subtitle.\n * Metrics and workflow tables live on dedicated pages (Analytics /\n * Workflow Runs); this view intentionally renders only the landing chrome.\n *\n * `summary` and `loading` are kept on the prop type so the page that\n * mounts this view doesn't have to change, but we intentionally don't\n * render them here.\n */\nexport function DashboardPageView({ labels, appLogo }: Props) {\n const hero = (\n <div className=\"w-full text-center\">\n <div className=\"flex justify-center mb-6\">{appLogo}</div>\n <p className=\"mt-3 text-base text-slate-600 dark:text-slate-300\">\n {labels.subtitle}\n </p>\n </div>\n )\n\n return <ManagementPageLayout hero={hero} content={null} />\n}\n","import { useState } from 'react'\nimport {\n CpuChipIcon,\n WrenchScrewdriverIcon,\n CubeTransparentIcon,\n ChatBubbleLeftEllipsisIcon,\n} from '@heroicons/react/24/outline'\nimport {\n EntityCard,\n HeroSection,\n ManagementPageLayout,\n SearchBar,\n} from '@ui/index'\nimport { useLink } from '@ui/lib/router-context'\n\nexport type AgentsIndexLabels = {\n title: string\n subtitle: string\n configTitle: string\n configSubtitle: string\n toolDefinitionsTitle: string\n toolDefinitionsSubtitle: string\n modelsTitle: string\n modelsSubtitle: string\n promptsTitle: string\n promptsSubtitle: string\n searchPlaceholder?: string\n}\n\ntype Tile = {\n id: string\n title: string\n subtitle: string\n href: string\n gradient: string\n icon: typeof CpuChipIcon\n}\n\nexport function AgentsIndexPageView({ labels }: { labels: AgentsIndexLabels }) {\n const Link = useLink()\n const [searchTerm, setSearchTerm] = useState('')\n\n const allTiles: Tile[] = [\n { id: 'config', title: labels.configTitle, subtitle: labels.configSubtitle, href: '/agents/config', gradient: 'from-violet-500 to-indigo-700', icon: CpuChipIcon },\n { id: 'tools', title: labels.toolDefinitionsTitle, subtitle: labels.toolDefinitionsSubtitle, href: '/agents/tool-definitions', gradient: 'from-amber-500 to-orange-700', icon: WrenchScrewdriverIcon },\n { id: 'models', title: labels.modelsTitle, subtitle: labels.modelsSubtitle, href: '/agents/models', gradient: 'from-emerald-500 to-teal-700', icon: CubeTransparentIcon },\n { id: 'prompts', title: labels.promptsTitle, subtitle: labels.promptsSubtitle, href: '/agents/prompts', gradient: 'from-sky-500 to-blue-700', icon: ChatBubbleLeftEllipsisIcon },\n ]\n\n const filteredTiles = searchTerm.trim()\n ? allTiles.filter((tile) => tile.title.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allTiles\n const isEmpty = allTiles.length === 0\n\n const hero = (\n <HeroSection\n icon={<CpuChipIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-700\"\n />\n )\n\n const content = (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredTiles.map((tile) => {\n const Icon = tile.icon\n return (\n <Link key={tile.id} href={tile.href} className=\"block focus:outline-none\">\n <EntityCard\n accentGradient={tile.gradient}\n icon={(\n <div className={`flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n )}\n title={tile.title}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{tile.subtitle}</p>\n </EntityCard>\n </Link>\n )\n })}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import { RectangleStackIcon } from '@heroicons/react/24/outline'\nimport { Badge, Button, Form, FormActionsRow, FormGrid, FormInput, FormTextarea, InlineForm, SectionHeader, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Text } from '@ui/index'\nimport type { WorkflowsPageViewProps, WorkflowGraph } from '@datatechsolutions/shared-domain/common'\nimport { WorkflowWorkspace } from '../workflow-workspace'\nimport { adaptWorkflowGraphToUi } from '../utils/workflow-graph-adapter'\n\nexport function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }: WorkflowsPageViewProps) {\n const selectedWorkflow = workflows[0] ?? null\n\n return (\n <div className=\"space-y-6\">\n <SectionHeader\n icon={<RectangleStackIcon className=\"h-5 w-5 text-white\" />}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n />\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.add}</Text>\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const name = String(formData.get('name') ?? '').trim()\n const description = String(formData.get('description') ?? '').trim()\n if (!name) return\n onCreate({ name, description })\n event.currentTarget.reset()\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.workflowName} placeholder={labels.workflowNamePlaceholder} required />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.workflowDescriptionPlaceholder} rows={3} />\n <FormActionsRow>\n <Button type=\"submit\">{labels.create}</Button>\n </FormActionsRow>\n </FormGrid>\n </Form>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.registry}</Text>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>{labels.name}</TableHeader>\n <TableHeader>{labels.description}</TableHeader>\n <TableHeader>{labels.version}</TableHeader>\n <TableHeader>{labels.status}</TableHeader>\n <TableHeader>{labels.actions}</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {workflows.map((workflow) => (\n <TableRow key={workflow.id}>\n <TableCell>{workflow.name}</TableCell>\n <TableCell>{workflow.description}</TableCell>\n <TableCell>{String(workflow.version)}</TableCell>\n <TableCell>\n <Badge>{workflow.isDraft ? labels.statusDraft : labels.statusPublished}</Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex flex-col gap-2\">\n <Form\n onSubmit={(event) => {\n event.preventDefault()\n onUpdateMeta({\n workflowId: workflow.id,\n name: workflow.name ?? '',\n description: workflow.description ?? '',\n })\n }}\n >\n <InlineForm>\n <Button type=\"submit\" outline>{labels.saveMeta}</Button>\n </InlineForm>\n </Form>\n <Button type=\"button\" color=\"sky\" onClick={() => onPublish(workflow.id)}>\n {labels.publish}\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </section>\n\n <section className=\"liquid-surface rounded-2xl p-4 space-y-3\">\n <Text className=\"font-semibold text-slate-900 dark:text-slate-100\">{labels.workspace}</Text>\n {selectedWorkflow ? (\n <div className=\"min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden\">\n <WorkflowWorkspace graph={adaptWorkflowGraphToUi(selectedWorkflow.graph as WorkflowGraph) as unknown as WorkflowGraph} />\n </div>\n ) : (\n <Text>{labels.empty}</Text>\n )}\n </section>\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n EntityCard,\n FormSelect,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { WorkflowRun } from '@ui/astrlabe/contracts'\nimport { formatDurationMs } from '../utils/format-duration'\n\nexport type WorkflowRunsLabels = {\n title: string\n subtitle: string\n status: string\n duration: string\n triggeredBy: string\n startedAt: string\n cancel: string\n replay: string\n view: string\n statusPending: string\n statusRunning: string\n statusCompleted: string\n statusFailed: string\n statusCancelled: string\n filterAll: string\n filterStatus: string\n empty: string\n timeline?: string\n searchPlaceholder?: string\n}\n\nconst BADGE_COLOR: Record<string, 'emerald' | 'rose' | 'amber' | 'sky' | 'zinc'> = {\n completed: 'emerald',\n failed: 'rose',\n running: 'sky',\n pending: 'amber',\n cancelled: 'zinc',\n}\n\ntype Props = {\n labels: WorkflowRunsLabels\n runs: WorkflowRun[]\n loading: boolean\n onCancel: (run: WorkflowRun) => void\n onReplay: (run: WorkflowRun) => void\n onView?: (run: WorkflowRun) => void\n onViewTimeline?: (run: WorkflowRun) => void\n}\n\nexport function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onView, onViewTimeline }: Props) {\n const [statusFilter, setStatusFilter] = useState<string>('all')\n const [searchTerm, setSearchTerm] = useState('')\n\n const statusOptions = useMemo(() => ([\n { value: 'all', label: labels.filterAll },\n { value: 'pending', label: labels.statusPending },\n { value: 'running', label: labels.statusRunning },\n { value: 'completed', label: labels.statusCompleted },\n { value: 'failed', label: labels.statusFailed },\n { value: 'cancelled', label: labels.statusCancelled },\n ]), [labels])\n\n const statusLabelFor = (status: string) => {\n switch (status) {\n case 'pending': return labels.statusPending\n case 'running': return labels.statusRunning\n case 'completed': return labels.statusCompleted\n case 'failed': return labels.statusFailed\n case 'cancelled': return labels.statusCancelled\n default: return status\n }\n }\n\n const allRuns = runs\n const term = searchTerm.trim().toLowerCase()\n const filteredRuns = allRuns.filter((run) => {\n if (statusFilter !== 'all' && run.status !== statusFilter) return false\n if (term && !run.id.toLowerCase().includes(term) && !run.workflowId.toLowerCase().includes(term)) {\n return false\n }\n return true\n })\n const isEmpty = allRuns.length === 0\n\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-indigo-500 to-sky-700\"\n toolbar={(\n <div className=\"w-full sm:w-48\">\n <FormSelect\n name=\"statusFilter\"\n label={labels.filterStatus}\n options={statusOptions}\n value={statusFilter}\n onValueChange={setStatusFilter}\n />\n </div>\n )}\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : filteredRuns.length === 0 ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n )}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredRuns.map((run) => (\n <EntityCard\n key={run.id}\n accentGradient=\"from-indigo-500 to-sky-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400\">\n <ClockIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={run.id.slice(0, 8)}\n subtitle={`${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`}\n status={(\n <Badge color={BADGE_COLOR[run.status] ?? 'zinc'}>\n {statusLabelFor(run.status)}\n </Badge>\n )}\n footer={(\n <div className=\"flex gap-2\">\n {onView && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onView(run)}>{labels.view}</Button>\n )}\n {onViewTimeline && labels.timeline && (\n <Button type=\"button\" size=\"sm\" outline onClick={() => onViewTimeline(run)}>{labels.timeline}</Button>\n )}\n <Button type=\"button\" size=\"sm\" outline onClick={() => onReplay(run)}>{labels.replay}</Button>\n {run.status === 'running' && (\n <Button type=\"button\" size=\"sm\" color=\"rose\" onClick={() => onCancel(run)}>{labels.cancel}</Button>\n )}\n </div>\n )}\n >\n <dl className=\"mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.duration}</dt>\n <dd className=\"text-right\">{formatDurationMs(run.totalDurationMs)}</dd>\n <dt>{labels.triggeredBy}</dt>\n <dd className=\"text-right truncate\">{run.triggeredBy || '—'}</dd>\n </dl>\n {run.error && (\n <p className=\"mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400\">{run.error}</p>\n )}\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return <ManagementPageLayout hero={hero} content={content} />\n}\n","import {\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n} from '@ui/index'\nimport {\n ExecutionTimelinePanel,\n type ExecutionTimelineEntry,\n type ExecutionTimelineLabels,\n} from '@ui/astrlabe'\nimport { ClockIcon } from '@heroicons/react/24/outline'\nimport type { RunTimelineEntry } from '../workflow-api-client'\n\nexport type RunTimelineLabels = ExecutionTimelineLabels & {\n title: string\n subtitle: string\n}\n\ntype Props = {\n labels: RunTimelineLabels\n entries: RunTimelineEntry[]\n loading: boolean\n runId: string\n}\n\n/**\n * Astrlabe-shaped wrapper around the shared `ExecutionTimelinePanel`\n * (#68). Adds the page chrome (HeroSection + ManagementPageLayout) so\n * the runs page renders consistently with the rest of the platform.\n * Other apps (kori-erp) can drop `ExecutionTimelinePanel` directly\n * inside their own card layouts without taking on this page wrapper.\n */\nexport function RunTimelinePageView({ labels, entries, loading, runId }: Props) {\n const hero = (\n <HeroSection\n icon={<ClockIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={`${labels.subtitle} — ${runId.slice(0, 8)}`}\n gradient=\"from-indigo-500 to-violet-700\"\n />\n )\n\n if (loading) {\n return <ManagementPageLayout hero={hero} content={<PageLoadingState />} />\n }\n if (entries.length === 0) {\n return (\n <ManagementPageLayout\n hero={hero}\n content={<PageEmptyState title={labels.empty ?? ''} message=\"\" iconName=\"folder-open\" />}\n />\n )\n }\n\n return (\n <ManagementPageLayout\n hero={hero}\n content={(\n <ExecutionTimelinePanel\n entries={entries as ExecutionTimelineEntry[]}\n labels={labels}\n />\n )}\n />\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { LinkIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { ModelProviderType } from '@ui/astrlabe/contracts'\nimport type { ModelProviderConnection } from '../workflow-api-client'\n\nexport type CreateConnectionInput = {\n providerSlug: string\n name: string\n region?: string\n endpoint?: string\n credentialRef?: string\n apiKeyRef?: string\n modelFilter?: string[]\n config?: Record<string, unknown>\n}\n\nexport type UpdateConnectionInput = Partial<Omit<CreateConnectionInput, 'providerSlug'>> & {\n enabled?: boolean\n}\n\n/**\n * Presets per provider — used by the form to surface the fields each\n * provider actually cares about (region for Bedrock/Vertex, endpoint\n * for Ollama/custom, neither for Anthropic/OpenAI hosted APIs).\n * The shape intentionally mirrors `ModelProviderType` in\n * `ui/astrlabe/contracts.ts` so new providers added to the enum\n * automatically get a default row via the fallback map.\n */\nconst PROVIDER_PRESETS: Record<ModelProviderType, {\n label: string\n description: string\n needsRegion?: boolean\n needsEndpoint?: boolean\n defaultRegion?: string\n exampleModels?: string[]\n}> = {\n anthropic_api: {\n label: 'Anthropic API',\n description: 'Claude Opus, Sonnet, Haiku via api.anthropic.com',\n exampleModels: ['claude-opus-4-7', 'claude-sonnet-4-6'],\n },\n openai_api: {\n label: 'OpenAI API',\n description: 'GPT-4o, o3, o4-mini via api.openai.com',\n exampleModels: ['gpt-4o', 'gpt-4o-mini'],\n },\n aws_bedrock: {\n label: 'AWS Bedrock',\n description: 'Anthropic / Meta / Mistral / Nova served through Bedrock',\n needsRegion: true,\n defaultRegion: 'us-east-1',\n exampleModels: ['amazon.nova-lite-v1:0', 'anthropic.claude-3-5-sonnet-20241022-v2:0'],\n },\n google_vertex: {\n label: 'Google Vertex AI',\n description: 'Gemini + third-party models on Vertex',\n needsRegion: true,\n defaultRegion: 'us-central1',\n exampleModels: ['gemini-2.0-flash-exp', 'gemini-1.5-pro'],\n },\n azure_openai: {\n label: 'Azure OpenAI',\n description: 'OpenAI deployments hosted on Azure',\n needsRegion: true,\n needsEndpoint: true,\n defaultRegion: 'eastus',\n },\n groq: {\n label: 'Groq',\n description: 'Low-latency Llama / Mixtral inference via api.groq.com',\n },\n mistral: {\n label: 'Mistral API',\n description: 'mistral.ai hosted open-weight + commercial models',\n },\n huggingface: {\n label: 'Hugging Face',\n description: 'Inference endpoints + serverless inference API',\n needsEndpoint: true,\n },\n ollama: {\n label: 'Ollama',\n description: 'Self-hosted Ollama server — provide the base URL',\n needsEndpoint: true,\n },\n custom: {\n label: 'Custom / OpenAI-compatible',\n description: 'Any OpenAI-API-compatible HTTP endpoint',\n needsEndpoint: true,\n },\n}\n\nconst PROVIDER_OPTIONS = (Object.keys(PROVIDER_PRESETS) as ModelProviderType[]).map((slug) => ({\n value: slug,\n label: PROVIDER_PRESETS[slug].label,\n}))\n\nexport type ConnectionFormValue = {\n providerSlug: ModelProviderType\n name: string\n region: string\n endpoint: string\n /** Plaintext — only present when the user is entering a NEW key. On\n * save we push this to `/organizations/{id}/secrets` and replace\n * with the returned UUID before calling the connections API. */\n apiKey: string\n /** Vault secret UUID — displayed as \"••• (set)\" in the UI. */\n credentialRef: string\n modelFilter: string\n configJson: string\n}\n\nexport type ConnectionsLabels = {\n title: string\n subtitle: string\n add: string\n createTitle: string\n editTitle: string\n save: string\n delete: string\n edit: string\n enable: string\n disable: string\n deleteConfirm: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype CreateSecret = (name: string, value: string) => Promise<{ id: string }>\n\ntype Props = {\n labels: ConnectionsLabels\n connections: ModelProviderConnection[]\n loading: boolean\n onCreate: (input: CreateConnectionInput) => Promise<void>\n onUpdate: (id: string, input: UpdateConnectionInput) => Promise<void>\n onDelete: (connection: ModelProviderConnection) => Promise<void>\n /** Takes a secret name + plaintext value, stores it in the vault and\n * returns the UUID the connections API should reference. */\n onCreateSecret: CreateSecret\n /**\n * Prefix for auto-generated secret names when the user enters a new\n * API key. Final shape is `${prefix}-${providerSlug}-${timestamp}`.\n * Defaults to `'platform'` so consumers that don't override land on a\n * sensible namespace.\n */\n secretNamePrefix?: string\n}\n\nexport function ConnectionsPageView({\n labels,\n connections,\n loading,\n onCreate,\n onUpdate,\n onDelete,\n onCreateSecret,\n secretNamePrefix = 'platform',\n}: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [editing, setEditing] = useState<ModelProviderConnection | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allConnections = connections\n const filteredConnections = searchTerm.trim()\n ? allConnections.filter((conn) => conn.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allConnections\n const isEmpty = allConnections.length === 0\n\n const hero = (\n <HeroSection\n icon={<LinkIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-sky-500 to-indigo-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.add}\n onClick={() => setCreateOpen(true)}\n accent=\"sky\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredConnections.map((conn) => (\n <EntityCard\n key={conn.id}\n accentGradient=\"from-sky-500 to-indigo-600\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400\">\n <LinkIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={conn.name}\n subtitle={providerLabel(conn.providerSlug)}\n status={(\n <div className=\"flex gap-1\">\n <Badge color={conn.enabled ? 'emerald' : 'zinc'}>\n {conn.enabled ? labels.enable : labels.disable}\n </Badge>\n {conn.credentialRef ? (\n <Badge color=\"indigo\">Secret set</Badge>\n ) : (\n <Badge color=\"amber\">No secret</Badge>\n )}\n </div>\n )}\n footer={(\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setEditing(conn)}>{labels.edit}</Button>\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={async () => {\n if (window.confirm(labels.deleteConfirm)) await onDelete(conn)\n }}\n >{labels.delete}</Button>\n </div>\n )}\n >\n <dl className=\"mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400\">\n {conn.region && <Row label=\"Region\" value={conn.region} />}\n {conn.endpoint && <Row label=\"Endpoint\" value={conn.endpoint} />}\n {conn.modelFilter && conn.modelFilter.length > 0 && (\n <Row label=\"Models\" value={conn.modelFilter.join(', ')} />\n )}\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n {createOpen && (\n <ConnectionEditor\n title={labels.createTitle}\n saveLabel={labels.save}\n initial={defaultConnectionFormValue()}\n mode=\"create\"\n onClose={() => setCreateOpen(false)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onCreate(wire as CreateConnectionInput)\n setCreateOpen(false)\n }}\n />\n )}\n {editing && (\n <ConnectionEditor\n title={labels.editTitle}\n saveLabel={labels.save}\n initial={modelToFormValue(editing)}\n mode=\"edit\"\n onClose={() => setEditing(null)}\n onCreateSecret={onCreateSecret}\n secretNamePrefix={secretNamePrefix}\n onSubmit={async (wire) => {\n await onUpdate(editing.id, wire as UpdateConnectionInput)\n setEditing(null)\n }}\n />\n )}\n </>\n )\n}\n\n// ── Form modal ────────────────────────────────────────────────\n\nfunction ConnectionEditor({\n title,\n saveLabel,\n initial,\n mode,\n onClose,\n onSubmit,\n onCreateSecret,\n secretNamePrefix,\n}: {\n title: string\n saveLabel: string\n initial: ConnectionFormValue\n mode: 'create' | 'edit'\n onClose: () => void\n onSubmit: (wire: CreateConnectionInput | UpdateConnectionInput) => Promise<void>\n onCreateSecret: CreateSecret\n secretNamePrefix: string\n}) {\n const [value, setValue] = useState<ConnectionFormValue>(initial)\n const [submitting, setSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const preset = PROVIDER_PRESETS[value.providerSlug]\n\n const handleSubmit = async () => {\n setError(null)\n setSubmitting(true)\n try {\n // Track whether the user actually rotated the API key so the\n // PATCH can omit `credentialRef` when nothing changed (the\n // backend leaves the existing value alone). For create, we\n // always send whatever was produced.\n let credentialRef = value.credentialRef\n let credentialRefRotated = false\n if (value.apiKey.trim().length > 0) {\n // Push the plaintext key to the vault and replace with the\n // returned UUID. The connections API never sees the raw key.\n const secret = await onCreateSecret(`${secretNamePrefix}-${value.providerSlug}-${Date.now()}`, value.apiKey.trim())\n credentialRef = secret.id\n credentialRefRotated = true\n }\n\n const modelFilter = parseCsv(value.modelFilter)\n let config: Record<string, unknown> | undefined\n const trimmed = value.configJson.trim()\n if (trimmed.length > 0) {\n try {\n const parsed = JSON.parse(trimmed) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('config must be a JSON object')\n }\n config = parsed as Record<string, unknown>\n } catch (e) {\n throw new Error(`Invalid config JSON: ${(e as Error).message}`)\n }\n }\n\n if (mode === 'create') {\n const wire: CreateConnectionInput = {\n providerSlug: value.providerSlug,\n name: value.name.trim(),\n ...(value.region.trim() && { region: value.region.trim() }),\n ...(value.endpoint.trim() && { endpoint: value.endpoint.trim() }),\n ...(credentialRef && { credentialRef }),\n ...(modelFilter.length > 0 && { modelFilter }),\n ...(config && { config }),\n }\n await onSubmit(wire)\n } else {\n const wire: UpdateConnectionInput = {\n name: value.name.trim() || undefined,\n region: value.region.trim() || undefined,\n endpoint: value.endpoint.trim() || undefined,\n // Only thread `credentialRef` when the user actually rotated\n // the key. Omitting it tells the backend to keep the\n // existing pointer intact.\n ...(credentialRefRotated && credentialRef ? { credentialRef } : {}),\n ...(modelFilter.length > 0 ? { modelFilter } : {}),\n ...(config && { config }),\n }\n await onSubmit(wire)\n }\n } catch (e) {\n setError((e as Error).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n // When the user swaps providers during creation, pre-fill a sensible\n // default region so Bedrock / Vertex don't silently submit blank.\n useEffect(() => {\n if (mode === 'create' && preset.needsRegion && !value.region && preset.defaultRegion) {\n setValue((v) => ({ ...v, region: preset.defaultRegion ?? '' }))\n }\n }, [mode, preset, value.region])\n\n const placeholderModels = useMemo(() => {\n return preset.exampleModels?.join(', ') ?? ''\n }, [preset])\n\n return (\n <GlassModal\n open\n onClose={onClose}\n title={title}\n maxWidth=\"2xl\"\n showFormFooter\n submitLabel={submitting ? '…' : saveLabel}\n onSubmit={(event) => {\n event.preventDefault()\n void handleSubmit()\n }}\n >\n <div className=\"space-y-4\">\n <FormGrid>\n <FormSelect\n label=\"Provider\"\n value={value.providerSlug}\n options={PROVIDER_OPTIONS}\n onValueChange={(slug) => setValue((v) => ({ ...v, providerSlug: slug as ModelProviderType }))}\n disabled={mode === 'edit'}\n hint={preset.description}\n />\n <FormInput\n label=\"Display name\"\n required\n value={value.name}\n onValueChange={(name) => setValue((v) => ({ ...v, name }))}\n placeholder=\"Production Bedrock, Claude dev, …\"\n />\n {preset.needsRegion && (\n <FormInput\n label=\"Region\"\n value={value.region}\n onValueChange={(region) => setValue((v) => ({ ...v, region }))}\n placeholder={preset.defaultRegion}\n />\n )}\n {preset.needsEndpoint && (\n <FormInput\n label=\"Endpoint URL\"\n value={value.endpoint}\n onValueChange={(endpoint) => setValue((v) => ({ ...v, endpoint }))}\n placeholder=\"https://...\"\n />\n )}\n </FormGrid>\n\n <FormInput\n label={value.credentialRef ? 'Rotate API key (leave blank to keep current)' : 'API key'}\n type=\"password\"\n value={value.apiKey}\n onValueChange={(apiKey) => setValue((v) => ({ ...v, apiKey }))}\n placeholder={value.credentialRef ? '••• stored in vault' : 'sk-...'}\n hint={value.credentialRef\n ? `Stored secret: ${value.credentialRef.slice(0, 8)}…`\n : 'Plaintext — pushed to windsock vault on save, never persisted here.'}\n />\n\n <FormInput\n label=\"Model filter (comma-separated, optional)\"\n value={value.modelFilter}\n onValueChange={(modelFilter) => setValue((v) => ({ ...v, modelFilter }))}\n placeholder={placeholderModels}\n hint=\"Leave blank to allow all models the provider exposes.\"\n />\n\n <details className=\"rounded-xl border border-slate-200 bg-slate-50/60 p-3 text-sm dark:border-slate-700 dark:bg-slate-900/40\">\n <summary className=\"cursor-pointer font-medium text-slate-700 dark:text-slate-200\">\n Advanced config (JSON)\n </summary>\n <div className=\"mt-3\">\n <FormTextarea\n rows={4}\n value={value.configJson}\n onValueChange={(configJson) => setValue((v) => ({ ...v, configJson }))}\n placeholder={'{\\n \"temperature\": 0.2\\n}'}\n hint=\"Free-form JSON passed to the runtime provider — e.g. Bedrock guardrail ids, Azure deployment overrides.\"\n />\n </div>\n </details>\n\n {error && (\n <p className=\"rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300\">\n {error}\n </p>\n )}\n </div>\n </GlassModal>\n )\n}\n\n// ── Helpers ────────────────────────────────────────────────────\n\nfunction Row({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex gap-1 truncate\">\n <dt className=\"font-medium\">{label}:</dt>\n <dd className=\"truncate\">{value}</dd>\n </div>\n )\n}\n\nfunction providerLabel(slug?: string): string {\n if (!slug) return 'Unknown provider'\n const key = slug as ModelProviderType\n return PROVIDER_PRESETS[key]?.label ?? slug\n}\n\nfunction parseCsv(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n\nfunction defaultConnectionFormValue(): ConnectionFormValue {\n return {\n providerSlug: 'anthropic_api',\n name: '',\n region: '',\n endpoint: '',\n apiKey: '',\n credentialRef: '',\n modelFilter: '',\n configJson: '',\n }\n}\n\nfunction modelToFormValue(conn: ModelProviderConnection): ConnectionFormValue {\n return {\n providerSlug: (conn.providerSlug as ModelProviderType) ?? 'custom',\n name: conn.name,\n region: conn.region ?? '',\n endpoint: conn.endpoint ?? '',\n apiKey: '',\n credentialRef: conn.credentialRef ?? '',\n modelFilter: (conn.modelFilter ?? []).join(', '),\n configJson: conn.config ? JSON.stringify(conn.config, null, 2) : '',\n }\n}\n","import { useState, type FormEvent } from 'react'\nimport { KeyIcon, TrashIcon, ArrowPathIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n Button,\n CopyableId,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSelect,\n FormTextarea,\n GlassModal,\n HeroSection,\n ManagementPageLayout,\n PageEmptyState,\n PageLoadingState,\n SearchBar,\n} from '@ui/index'\nimport type { SecretSummary } from '../windsock-admin-client'\n\nexport type CredentialFormInput = {\n name: string\n value: string\n secretType: string\n description?: string\n}\n\nexport type CredentialsPageViewLabels = {\n title: string\n subtitle: string\n addCredential: string\n createTitle: string\n name: string\n namePlaceholder: string\n value: string\n valuePlaceholder: string\n type: string\n typeGeneric: string\n typeApiKey: string\n typeOAuth: string\n typePassword: string\n description: string\n descriptionPlaceholder: string\n save: string\n rotate: string\n disable: string\n disableConfirm: string\n expiresAt: string\n createdAt: string\n neverExpires: string\n empty: string\n searchPlaceholder?: string\n}\n\ntype Props = {\n labels: CredentialsPageViewLabels\n credentials: SecretSummary[]\n loading: boolean\n onCreate: (input: CredentialFormInput) => void\n onRotate: (secret: SecretSummary, newValue: string) => void\n onDisable: (secret: SecretSummary) => void\n}\n\nexport function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate, onDisable }: Props) {\n const [createOpen, setCreateOpen] = useState(false)\n const [rotateFor, setRotateFor] = useState<SecretSummary | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allCredentials = credentials\n const filteredCredentials = searchTerm.trim()\n ? allCredentials.filter((secret) => secret.name.toLowerCase().includes(searchTerm.trim().toLowerCase()))\n : allCredentials\n const isEmpty = allCredentials.length === 0\n\n const typeOptions = [\n { value: 'generic', label: labels.typeGeneric },\n { value: 'api_key', label: labels.typeApiKey },\n { value: 'oauth', label: labels.typeOAuth },\n { value: 'password', label: labels.typePassword },\n ]\n\n const hero = (\n <HeroSection\n icon={<KeyIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-rose-500 to-orange-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )}\n />\n )\n\n const mobileAction = (\n <CreateActionButton\n mode=\"mobile\"\n label={labels.addCredential}\n onClick={() => setCreateOpen(true)}\n accent=\"rose\"\n />\n )\n\n const content = loading ? (\n <PageLoadingState />\n ) : isEmpty ? (\n <PageEmptyState title={labels.empty} message={labels.subtitle} iconName=\"folder-open\" />\n ) : (\n <>\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labels.searchPlaceholder ?? labels.title}\n />\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredCredentials.map((secret) => (\n <EntityCard\n key={secret.secretId}\n accentGradient=\"from-rose-500 to-orange-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400\">\n <KeyIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={secret.name}\n subtitle={secret.secretType}\n status={(\n <Badge color={secret.disabled ? 'zinc' : 'emerald'}>\n {secret.disabled ? labels.disable : 'Active'}\n </Badge>\n )}\n footer={(\n <div className=\"flex items-center justify-between gap-2\">\n <CopyableId id={secret.secretId} />\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" outline onClick={() => setRotateFor(secret)}>\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.rotate}\n </Button>\n {!secret.disabled && (\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"rose\"\n onClick={() => {\n if (window.confirm(labels.disableConfirm)) onDisable(secret)\n }}\n >\n <TrashIcon className=\"mr-1 h-3.5 w-3.5\" />\n {labels.disable}\n </Button>\n )}\n </div>\n </div>\n )}\n >\n {secret.description && (\n <p className=\"mt-1 text-xs text-slate-500 dark:text-slate-400\">{secret.description}</p>\n )}\n <dl className=\"mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400\">\n <dt>{labels.createdAt}</dt>\n <dd className=\"text-right\">{new Date(secret.createdAt).toLocaleDateString()}</dd>\n <dt>{labels.expiresAt}</dt>\n <dd className=\"text-right\">{secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires}</dd>\n </dl>\n </EntityCard>\n ))}\n </div>\n </>\n )\n\n return (\n <>\n <ManagementPageLayout hero={hero} content={content} mobileAction={mobileAction} />\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.createTitle}\n maxWidth=\"lg\"\n showFormFooter\n submitLabel={labels.save}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const value = String(formData.get('value') ?? '')\n const secretType = String(formData.get('secretType') ?? 'generic')\n const description = String(formData.get('description') ?? '').trim() || undefined\n if (!name || !value) return\n onCreate({ name, value, secretType, description })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.namePlaceholder} required />\n <FormSelect name=\"secretType\" label={labels.type} options={typeOptions} defaultValue=\"generic\" />\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n <FormTextarea name=\"description\" label={labels.description} placeholder={labels.descriptionPlaceholder} rows={2} />\n </FormGrid>\n </GlassModal>\n\n <GlassModal\n open={rotateFor !== null}\n onClose={() => setRotateFor(null)}\n title={`${labels.rotate}: ${rotateFor?.name ?? ''}`}\n maxWidth=\"md\"\n showFormFooter\n submitLabel={labels.rotate}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const value = String(formData.get('value') ?? '')\n if (!value || !rotateFor) return\n onRotate(rotateFor, value)\n setRotateFor(null)\n }}\n >\n <FormGrid>\n <FormInput name=\"value\" label={labels.value} placeholder={labels.valuePlaceholder} required type=\"password\" />\n </FormGrid>\n </GlassModal>\n </>\n )\n}\n"]}