@axiom-lattice/react-sdk 5.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/{AgentDetailSideApp-TIU7UQZH.mjs → AgentDetailSideApp-6FBJVX34.mjs} +8 -8
  2. package/dist/AgentGovernanceWorkbench-EOHBGBDO.mjs +20 -0
  3. package/dist/{MessageGraph-XRSLD6VY.mjs → MessageGraph-W3ZJZWQX.mjs} +4 -4
  4. package/dist/{ReactChart-IW27RELF.mjs → ReactChart-WZM5FNED.mjs} +4 -4
  5. package/dist/{SkillFlow-7OCWAF5V.mjs → SkillFlow-IEUMMNOL.mjs} +4 -4
  6. package/dist/{TasksSideApp-5UTBVBIW.mjs → TasksSideApp-LV4XG5T3.mjs} +5 -5
  7. package/dist/{TeamWorkspace-WZ7EHM3X.mjs → TeamWorkspace-Y5BLJDDP.mjs} +4 -4
  8. package/dist/{TopologyRuntimeView-77JCSNTK.mjs → TopologyRuntimeView-6QPO555O.mjs} +5 -5
  9. package/dist/{WorkflowAutomationView-AVGN2L6Y.mjs → WorkflowAutomationView-PJAN5335.mjs} +7 -7
  10. package/dist/{chunk-VLQM75ZM.mjs → chunk-APWKT32P.mjs} +6 -6
  11. package/dist/{chunk-GJTDVFBS.mjs → chunk-CEKDKFK4.mjs} +3 -3
  12. package/dist/{chunk-IODHU3BD.mjs → chunk-CTWP76BZ.mjs} +3 -3
  13. package/dist/{chunk-IFRTNJ2P.mjs → chunk-ED5Z75BU.mjs} +2 -2
  14. package/dist/{chunk-UDSGQ7R7.mjs → chunk-ENDMVOPK.mjs} +3 -3
  15. package/dist/{chunk-MFFUZVR5.mjs → chunk-FJHVMIR4.mjs} +3 -3
  16. package/dist/{chunk-QLFWQ4HR.mjs → chunk-OZPJVRTV.mjs} +278 -42
  17. package/dist/chunk-OZPJVRTV.mjs.map +1 -0
  18. package/dist/{chunk-VQT22AKU.mjs → chunk-QYAJFSZG.mjs} +129 -222
  19. package/dist/chunk-QYAJFSZG.mjs.map +1 -0
  20. package/dist/{chunk-NE5RWDYD.mjs → chunk-TXYO3AFN.mjs} +4 -4
  21. package/dist/{chunk-CLCJX35D.mjs → chunk-WUPFAL2J.mjs} +8 -8
  22. package/dist/{embed-page-AgentDetailSideApp-XCP4LY7Y.js → embed-page-AgentDetailSideApp-2UFH4RJG.js} +1 -1
  23. package/dist/embed-page-AgentGovernanceWorkbench-3JOSRW2V.js +1 -0
  24. package/dist/{embed-page-MessageGraph-D77CYFAG.js → embed-page-MessageGraph-SPB75EHC.js} +1 -1
  25. package/dist/{embed-page-ReactChart-TBDJOTZ5.js → embed-page-ReactChart-EE4A5WKS.js} +1 -1
  26. package/dist/{embed-page-SkillFlow-NDAK3GAD.js → embed-page-SkillFlow-H2ARZGEX.js} +1 -1
  27. package/dist/{embed-page-TasksSideApp-BVCIAE24.js → embed-page-TasksSideApp-BQMOLOUF.js} +1 -1
  28. package/dist/{embed-page-TeamWorkspace-JFEKNVFP.js → embed-page-TeamWorkspace-QXMRVXWU.js} +1 -1
  29. package/dist/{embed-page-TopologyRuntimeView-42TN76MK.js → embed-page-TopologyRuntimeView-OSV75P6Y.js} +1 -1
  30. package/dist/{embed-page-WorkflowAutomationView-JLP4UHPP.js → embed-page-WorkflowAutomationView-KJ6HJ5UT.js} +1 -1
  31. package/dist/{embed-page-chunk-GUSAII2D.js → embed-page-chunk-DBUC6J4G.js} +1 -1
  32. package/dist/{embed-page-chunk-5NJ3O2GK.js → embed-page-chunk-E6F5YZBR.js} +2 -2
  33. package/dist/{embed-page-chunk-K2U3JD67.js → embed-page-chunk-FGKHXQAJ.js} +1 -1
  34. package/dist/{embed-page-chunk-2PFKLMTR.js → embed-page-chunk-GSCVATOA.js} +1 -1
  35. package/dist/{embed-page-chunk-H64UEFHS.js → embed-page-chunk-IIEDLN7W.js} +1 -1
  36. package/dist/{embed-page-chunk-YYDZ6ZBV.js → embed-page-chunk-U4XSGC4Y.js} +163 -163
  37. package/dist/{embed-page-chunk-I3OONX3N.js → embed-page-chunk-VXWRPT33.js} +1 -1
  38. package/dist/{embed-page-en-S4MXFPIU.js → embed-page-en-X6B6RVNL.js} +1 -1
  39. package/dist/{embed-page-zh-SSMSF5LE.js → embed-page-zh-EQ5X2M32.js} +1 -1
  40. package/dist/embed-page.js +1 -1
  41. package/dist/{en-4IN5LWNF.mjs → en-DQDMGSNU.mjs} +21 -1
  42. package/dist/{en-4IN5LWNF.mjs.map → en-DQDMGSNU.mjs.map} +1 -1
  43. package/dist/index.d.mts +48 -21
  44. package/dist/index.d.ts +48 -21
  45. package/dist/index.js +1918 -1867
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.mjs +92 -222
  48. package/dist/index.mjs.map +1 -1
  49. package/dist/web-app.js +40 -0
  50. package/dist/web-app.js.map +1 -1
  51. package/dist/web-app.mjs +1 -1
  52. package/dist/{zh-RAN4V57S.mjs → zh-BKAP45UO.mjs} +21 -1
  53. package/dist/{zh-RAN4V57S.mjs.map → zh-BKAP45UO.mjs.map} +1 -1
  54. package/package.json +3 -3
  55. package/dist/AgentGovernanceWorkbench-CWFRVPS5.mjs +0 -20
  56. package/dist/chunk-QLFWQ4HR.mjs.map +0 -1
  57. package/dist/chunk-VQT22AKU.mjs.map +0 -1
  58. package/dist/embed-page-AgentGovernanceWorkbench-BBDKEIBI.js +0 -5
  59. /package/dist/{AgentDetailSideApp-TIU7UQZH.mjs.map → AgentDetailSideApp-6FBJVX34.mjs.map} +0 -0
  60. /package/dist/{AgentGovernanceWorkbench-CWFRVPS5.mjs.map → AgentGovernanceWorkbench-EOHBGBDO.mjs.map} +0 -0
  61. /package/dist/{MessageGraph-XRSLD6VY.mjs.map → MessageGraph-W3ZJZWQX.mjs.map} +0 -0
  62. /package/dist/{ReactChart-IW27RELF.mjs.map → ReactChart-WZM5FNED.mjs.map} +0 -0
  63. /package/dist/{SkillFlow-7OCWAF5V.mjs.map → SkillFlow-IEUMMNOL.mjs.map} +0 -0
  64. /package/dist/{TasksSideApp-5UTBVBIW.mjs.map → TasksSideApp-LV4XG5T3.mjs.map} +0 -0
  65. /package/dist/{TeamWorkspace-WZ7EHM3X.mjs.map → TeamWorkspace-Y5BLJDDP.mjs.map} +0 -0
  66. /package/dist/{TopologyRuntimeView-77JCSNTK.mjs.map → TopologyRuntimeView-6QPO555O.mjs.map} +0 -0
  67. /package/dist/{WorkflowAutomationView-AVGN2L6Y.mjs.map → WorkflowAutomationView-PJAN5335.mjs.map} +0 -0
  68. /package/dist/{chunk-VLQM75ZM.mjs.map → chunk-APWKT32P.mjs.map} +0 -0
  69. /package/dist/{chunk-GJTDVFBS.mjs.map → chunk-CEKDKFK4.mjs.map} +0 -0
  70. /package/dist/{chunk-IODHU3BD.mjs.map → chunk-CTWP76BZ.mjs.map} +0 -0
  71. /package/dist/{chunk-IFRTNJ2P.mjs.map → chunk-ED5Z75BU.mjs.map} +0 -0
  72. /package/dist/{chunk-UDSGQ7R7.mjs.map → chunk-ENDMVOPK.mjs.map} +0 -0
  73. /package/dist/{chunk-MFFUZVR5.mjs.map → chunk-FJHVMIR4.mjs.map} +0 -0
  74. /package/dist/{chunk-NE5RWDYD.mjs.map → chunk-TXYO3AFN.mjs.map} +0 -0
  75. /package/dist/{chunk-CLCJX35D.mjs.map → chunk-WUPFAL2J.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Governance/AgentGovernanceWorkbench.tsx","../src/components/Governance/AgentList.tsx","../src/components/Governance/AgentGraphView.tsx","../src/components/Governance/AgentGraphNode.tsx","../src/components/Governance/AgentCardStats.tsx","../src/components/Chat/CreateAssistantModal.tsx","../src/components/Chat/ParentAgentSelector.tsx","../src/components/Chat/SubAgentInheritList.tsx","../src/components/Chat/localRuntimeValidation.ts","../src/components/Governance/AgentCreationOnboardingModal.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { message, Modal } from \"antd\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\nimport { useApi } from \"../../hooks/useApi\";\nimport { AgentList } from \"./AgentList\";\nimport { AgentDetailView } from \"./AgentDetailView\";\nimport ProjectScopeProvider from \"../ProjectScopeProvider\";\nimport { useSideAppOpener } from \"../Chat/SideAppBrowserContext\";\nimport { CreateAssistantModal } from \"../Chat/CreateAssistantModal\";\nimport type { CreationMode } from \"../Chat/CreateAssistantModal\";\nimport { buildAgentListItems } from \"./agentMeta\";\nimport type { AgentCardStatsData } from \"./AgentCardStats\";\nimport type { AgentListItem, DetailTab } from \"./types\";\nimport { AgentCreationOnboardingModal, type AgentCreationMethod } from \"./AgentCreationOnboardingModal\";\nimport { useT } from \"../../i18n\";\n\nconst parseGraphDefinition = (value: Assistant[\"graphDefinition\"]): Record<string, unknown> => {\n let parsed: unknown = value;\n if (typeof value === \"string\") {\n try {\n parsed = JSON.parse(value) as unknown;\n } catch {\n return {};\n }\n }\n return parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : {};\n};\n\nexport const AgentGovernanceWorkbench: React.FC = () => {\n const { get, del, put } = useApi();\n const t = useT();\n const [assistants, setAssistants] = useState<Assistant[]>([]);\n const [stats, setStats] = useState<Record<string, AgentCardStatsData>>({});\n const [statsExpiresAt, setStatsExpiresAt] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [initialTab, setInitialTab] = useState<DetailTab>(\"graph\");\n const [detailInitialMessage, setDetailInitialMessage] = useState<string | null>(null);\n const [detailInitialMessageCustomRunConfig, setDetailInitialMessageCustomRunConfig] = useState<Record<string, unknown> | null>(null);\n const [detailProjectId, setDetailProjectId] = useState<string | null>(null);\n const [onboardingOpen, setOnboardingOpen] = useState(false);\n const [restoreOnboardingFocus, setRestoreOnboardingFocus] = useState(true);\n const [createOpen, setCreateOpen] = useState(false);\n const [createInitialMode, setCreateInitialMode] = useState<CreationMode>(\"learn\");\n const [createInitialValues, setCreateInitialValues] = useState<Record<string, unknown>>({});\n const [deleteTargetId, setDeleteTargetId] = useState<string | null>(null);\n const [deleting, setDeleting] = useState(false);\n\n const loadAgents = useCallback(async () => {\n setLoading(true);\n try {\n const [listRes, statsRes] = await Promise.all([\n get<{ success: boolean; data: { records: Assistant[] } }>(\"/api/assistants\"),\n get<{ success: boolean; data: { records: AgentCardStatsData[] }; cache?: { expiresAt: string } }>(\"/api/assistants/stats\").catch(() => null),\n ]);\n if (listRes.success && listRes.data?.records) {\n setAssistants(listRes.data.records);\n }\n if (statsRes?.success && statsRes.data?.records) {\n const byId: Record<string, AgentCardStatsData> = {};\n for (const rec of statsRes.data.records) {\n byId[rec.id] = rec;\n }\n setStats(byId);\n setStatsExpiresAt(statsRes.cache?.expiresAt ?? null);\n }\n } catch {\n message.error(t(\"governance.workbench.loadFailed\"));\n } finally {\n setLoading(false);\n }\n }, [get, t]);\n\n useEffect(() => {\n loadAgents();\n }, [loadAgents]);\n\n const items: AgentListItem[] = React.useMemo(() => buildAgentListItems(assistants), [assistants]);\n const selectedAssistant = assistants.find((a) => a.id === selectedId) ?? null;\n\n const openDetail = useCallback((id: string, tab: DetailTab = \"graph\") => {\n setSelectedId(id);\n setInitialTab(tab);\n setDetailInitialMessage(null);\n setDetailProjectId(null);\n }, []);\n\n const openSideAppCard = useSideAppOpener();\n\n const openAgentDetailTab = useCallback(\n (id: string, tab: DetailTab) => {\n const name = assistants.find((a) => a.id === id)?.name ?? t(\"governance.workbench.agentFallback\");\n openSideAppCard({\n component_key: \"agent_detail_side_app\",\n data: { assistantId: id, initialTab: tab },\n message: name,\n });\n },\n [assistants, openSideAppCard, t]\n );\n\n const handleCreateClick = useCallback(() => {\n setRestoreOnboardingFocus(true);\n setOnboardingOpen(true);\n }, []);\n\n const handleSelectCreationMethod = useCallback((method: AgentCreationMethod) => {\n const initialization: Record<AgentCreationMethod, { mode: CreationMode; values: Record<string, unknown> }> = {\n manual: { mode: \"scratch\", values: {} },\n external: { mode: \"scratch\", values: { type: \"a2a_remote\" } },\n learn: { mode: \"learn\", values: {} },\n };\n const selected = initialization[method];\n setCreateInitialMode(selected.mode);\n setCreateInitialValues(selected.values);\n setRestoreOnboardingFocus(false);\n setOnboardingOpen(false);\n setCreateOpen(true);\n }, []);\n\n const handleSave = useCallback(\n async (assistant: Assistant, config: Record<string, unknown>) => {\n const currentDef = parseGraphDefinition(assistant.graphDefinition);\n let result: { success: boolean };\n try {\n result = await put<{ success: boolean }>(`/api/assistants/${assistant.id}`, {\n name: config.name !== undefined ? (config.name as string) : assistant.name,\n description:\n config.description !== undefined\n ? (config.description as string)\n : assistant.description,\n graphDefinition: { ...currentDef, ...config },\n });\n } catch (error) {\n message.error(t(\"governance.detail.saveFailed\"));\n throw error;\n }\n if (!result.success) {\n message.error(t(\"governance.detail.saveFailed\"));\n throw new Error(\"Failed to save agent\");\n }\n message.success(t(\"common.saved\"));\n loadAgents();\n },\n [put, loadAgents, t]\n );\n\n /**\n * In-place single-assistant update from the detail view's event-driven\n * refresh (architect copilot changed config server-side). Avoids the\n * loadAgents() full reload that rebuilt the whole canvas.\n */\n const handleAssistantUpdated = useCallback((updated: Assistant) => {\n setAssistants((prev) => prev.map((a) => (a.id === updated.id ? updated : a)));\n }, []);\n\n /**\n * List-path delete: AgentList has no confirm of its own, so confirm here,\n * then delete, then reload.\n */\n const confirmDelete = useCallback(\n (id: string) => {\n setDeleteTargetId(id);\n },\n []\n );\n\n const handleConfirmDelete = useCallback(async () => {\n if (!deleteTargetId) return;\n setDeleting(true);\n try {\n const result = await del<{ success: boolean }>(`/api/assistants/${deleteTargetId}`);\n if (result.success) {\n message.success(t(\"governance.detail.deleted\"));\n // Remove locally BEFORE reloading: if the refresh fails, the\n // deleted agent must not linger and get resurrected by a save.\n setAssistants((prev) => prev.filter((a) => a.id !== deleteTargetId));\n loadAgents();\n setDeleteTargetId(null);\n } else {\n message.error(t(\"governance.detail.deleteFailed\"));\n }\n } catch {\n message.error(t(\"governance.detail.deleteFailed\"));\n } finally {\n setDeleting(false);\n }\n }, [deleteTargetId, del, loadAgents, t]);\n\n /**\n * Detail-path delete: AgentConfigPanel already shows its own confirm modal,\n * so no second confirm here. Resolves only after a successful delete so the\n * panel navigates back; rejects on failure so the panel stays put (its catch\n * shows the error toast).\n */\n const handleDelete = useCallback(\n async (id: string): Promise<void> => {\n const result = await del<{ success: boolean }>(`/api/assistants/${id}`);\n if (!result.success) {\n throw new Error(\"Failed to delete agent\");\n }\n message.success(t(\"governance.detail.deleted\"));\n // Remove locally BEFORE reloading (see confirmDelete).\n setAssistants((prev) => prev.filter((a) => a.id !== id));\n loadAgents();\n },\n [del, loadAgents, t]\n );\n\n return (\n <div style={{ height: \"100%\", background: \"#fafafa\", overflow: \"hidden\" }}>\n {selectedAssistant ? (\n // Isolated workspace scope for the detail page: the learning project\n // selection (modal handoff / canvas selector) must scope the copilot's\n // run headers WITHOUT touching the shell-level WorkspaceContext —\n // writing the shell context navigates the shell to the project page.\n <ProjectScopeProvider key={selectedAssistant.id} defaultProjectId={detailProjectId ?? undefined}>\n <AgentDetailView\n assistant={selectedAssistant}\n allAssistants={assistants}\n onBack={() => setSelectedId(null)}\n onDeleted={handleDelete}\n onSave={handleSave}\n onAssistantUpdated={handleAssistantUpdated}\n onAgentListInvalidated={loadAgents}\n initialTab={initialTab}\n initialMessage={detailInitialMessage}\n initialMessageCustomRunConfig={detailInitialMessageCustomRunConfig}\n initialProjectId={detailProjectId}\n />\n </ProjectScopeProvider>\n ) : (\n <>\n <AgentList\n items={items}\n assistants={assistants}\n stats={stats}\n statsExpiresAt={statsExpiresAt}\n loading={loading}\n onItemClick={(id) => openAgentDetailTab(id, \"graph\")}\n onOpenPlayground={(id) => openAgentDetailTab(id, \"playground\")}\n onOpenEval={(id) => openAgentDetailTab(id, \"eval\")}\n onCreate={handleCreateClick}\n onDelete={confirmDelete}\n />\n </>\n )}\n <AgentCreationOnboardingModal\n open={onboardingOpen}\n onCancel={() => {\n setRestoreOnboardingFocus(true);\n setOnboardingOpen(false);\n }}\n onSelectMethod={handleSelectCreationMethod}\n focusTriggerAfterClose={restoreOnboardingFocus}\n />\n <CreateAssistantModal\n open={createOpen}\n initialMode={createInitialMode}\n initialValues={createInitialValues}\n onCancel={() => setCreateOpen(false)}\n onSuccess={(created, options) => {\n setCreateOpen(false);\n setAssistants((prev) => {\n const exists = prev.some((a) => a.id === created.id);\n return exists ? prev : [created, ...prev];\n });\n openDetail(created.id, \"graph\");\n setDetailInitialMessage(options?.initialMessage ?? null);\n setDetailInitialMessageCustomRunConfig(options?.initialMessageCustomRunConfig ?? null);\n setDetailProjectId(options?.projectId ?? null);\n loadAgents();\n }}\n />\n <Modal\n title={t(\"governance.deleteAgent\")}\n open={deleteTargetId !== null}\n onCancel={() => setDeleteTargetId(null)}\n onOk={handleConfirmDelete}\n okText={t(\"common.delete\")}\n okButtonProps={{ danger: true, loading: deleting }}\n cancelText={t(\"common.cancel\")}\n >\n <p>{t(\"governance.delete.irreversible\")}</p>\n </Modal>\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { Tag, Tooltip } from \"antd\";\nimport { Bot, Pencil, PlayCircle, FlaskConical, Network, Trash2 } from \"lucide-react\";\nimport { EntityListView } from \"../EntityList/EntityListView\";\nimport type { EntityAction, ViewModeExtension } from \"../EntityList/types\";\nimport { FilterSelect } from \"../EntityList/FilterSelect\";\nimport type { AgentListItem } from \"./types\";\nimport { AgentGraphView } from \"./AgentGraphView\";\nimport { AgentCardStats, type AgentCardStatsData } from \"./AgentCardStats\";\nimport { getTypeBadgeInfo, colorHex, statusHex } from \"./agentMeta\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\nimport { useT, type TranslationKey } from \"../../i18n\";\n\nexport interface AgentListProps {\n items: AgentListItem[];\n assistants?: Assistant[];\n stats?: Record<string, AgentCardStatsData>;\n /** When the server-side stats cache expires (ISO) — shown as a refresh hint. */\n statsExpiresAt?: string | null;\n loading: boolean;\n onItemClick: (id: string) => void;\n onOpenPlayground: (id: string) => void;\n onOpenEval: (id: string) => void;\n onCreate: () => void;\n onDelete?: (id: string) => void;\n}\n\nconst TYPE_TABS: ReadonlyArray<{ key: string; labelKey: TranslationKey }> = [\n { key: \"all\", labelKey: \"governance.list.tab.all\" },\n { key: \"capability\", labelKey: \"governance.list.tab.capability\" },\n { key: \"orchestrator\", labelKey: \"governance.list.tab.orchestrator\" },\n { key: \"team\", labelKey: \"governance.list.tab.team\" },\n { key: \"workflow\", labelKey: \"governance.list.tab.workflow\" },\n];\n\nexport const AgentList: React.FC<AgentListProps> = ({\n items,\n assistants = [],\n stats,\n loading,\n onItemClick,\n onOpenPlayground,\n onOpenEval,\n onCreate,\n onDelete,\n}) => {\n const t = useT();\n const [activeTab, setActiveTab] = useState(\"all\");\n const [domainFilter, setDomainFilter] = useState<string | null>(null);\n const [statusFilter, setStatusFilter] = useState<string | null>(null);\n\n const allDomains = useMemo(() => {\n const set = new Set<string>();\n items.forEach((item) => item.tags.forEach((t) => set.add(t)));\n return Array.from(set).map((t) => ({ value: t, label: t }));\n }, [items]);\n\n const visibleItems = useMemo(() => {\n return items.filter((item) => {\n if (activeTab !== \"all\" && item.type !== activeTab) return false;\n if (domainFilter && !item.tags.includes(domainFilter)) return false;\n if (statusFilter && item.status !== statusFilter) return false;\n return true;\n });\n }, [items, activeTab, domainFilter, statusFilter]);\n\n const itemActions: EntityAction<AgentListItem>[] = [\n {\n key: \"edit\",\n icon: Pencil,\n label: t(\"common.edit\"),\n onClick: (item) => onItemClick(item.id),\n },\n {\n key: \"playground\",\n icon: PlayCircle,\n label: t(\"governance.list.action.playground\"),\n onClick: (item) => onOpenPlayground(item.id),\n },\n {\n key: \"eval\",\n icon: FlaskConical,\n label: t(\"governance.list.action.eval\"),\n onClick: (item) => onOpenEval(item.id),\n },\n ];\n\n if (onDelete) {\n itemActions.push({\n key: \"delete\",\n icon: Trash2,\n label: t(\"common.delete\"),\n danger: true,\n onClick: (item) => onDelete(item.id),\n });\n }\n\n const viewModeExtensions: ViewModeExtension[] = useMemo(\n () => [\n {\n mode: \"graph\",\n icon: Network,\n label: t(\"governance.list.viewMode.graph\"),\n render: () => <AgentGraphView assistants={assistants} onNodeClick={onItemClick} />,\n },\n ],\n [assistants, onItemClick, t]\n );\n\n return (\n <>\n <span\n data-testid=\"agent-list-state\"\n data-loading={String(loading)}\n data-count={visibleItems.length}\n hidden\n aria-hidden=\"true\"\n />\n <EntityListView<AgentListItem>\n title={t(\"governance.list.title\")}\n itemName=\"common.item.agent\"\n items={visibleItems}\n loading={loading}\n keyExtractor={(item) => item.id}\n tabs={TYPE_TABS.map((tab) => ({ key: tab.key, label: t(tab.labelKey) }))}\n activeTab={activeTab}\n onTabChange={(key) => setActiveTab(key)}\n headerLeft={\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n <FilterSelect value={domainFilter} onChange={setDomainFilter} options={allDomains} placeholder={t(\"governance.list.filter.domain\")} allLabel={t(\"governance.list.filter.allDomains\")} />\n <FilterSelect\n value={statusFilter}\n onChange={setStatusFilter}\n options={[\n { value: \"enabled\", label: t(\"governance.list.status.enabled\") },\n { value: \"draft\", label: t(\"governance.list.status.draft\") },\n { value: \"disabled\", label: t(\"governance.list.status.disabled\") },\n ]}\n placeholder={t(\"governance.list.filter.status\")}\n allLabel={t(\"governance.list.filter.allStatuses\")}\n />\n </div>\n }\n renderIcon={(item) => {\n const typeColor = colorHex(getTypeBadgeInfo(item.type).color);\n return (\n <div\n title={t(\"governance.list.typeIconTitle\", { type: item.type })}\n style={{\n width: 32,\n height: 32,\n borderRadius: 8,\n background: `${typeColor}1A`,\n color: typeColor,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Bot size={18} />\n </div>\n );\n }}\n renderPrimary={(item) => (\n <span data-testid=\"agent-name\" data-agent-id={item.id}>{item.name}</span>\n )}\n renderSecondary={(item) => item.description || undefined}\n renderDetails={(item) => (\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: 8, flexWrap: \"wrap\" }}>\n <div style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\", alignItems: \"center\" }}>\n {item.tags.map((tag) => (\n <Tag key={tag} color=\"magenta\" style={{ margin: 0, borderRadius: 10, border: \"none\" }}>{tag}</Tag>\n ))}\n <Tag color={getTypeBadgeInfo(item.type).color} style={{ margin: 0, borderRadius: 10, border: \"none\" }}>{item.type}</Tag>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, flexShrink: 0 }}>\n <Tooltip title={t(\"governance.list.statusTooltip\", { status: item.status })}>\n <span\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: statusHex(item.status),\n display: \"inline-block\",\n cursor: \"help\",\n }}\n />\n </Tooltip>\n <span style={{ fontSize: 12, color: \"#8c8c8c\" }}>{item.version}</span>\n </div>\n </div>\n )}\n renderFooter={(item) => (\n <div style={{ borderTop: \"1px dashed #f0f0f0\", paddingTop: 10 }}>\n <AgentCardStats stats={stats?.[item.id]} />\n </div>\n )}\n itemActions={itemActions}\n actionsStyle=\"icon\"\n actionsPosition=\"hover\"\n onItemClick={(item) => onItemClick(item.id)}\n createLabel={t(\"governance.list.create\")}\n onCreateClick={onCreate}\n viewModeExtensions={viewModeExtensions}\n emptyIcon={<Bot size={48} style={{ opacity: 0.5 }} />}\n emptyTitle={t(\"governance.list.emptyTitle\")}\n emptyDescription={t(\"governance.list.emptyDescription\")}\n />\n </>\n );\n};\n","import React, { useMemo, useEffect, useState } from \"react\";\nimport { ReactFlow, Background, Controls, Node, Edge, useNodesState, useEdgesState, ReactFlowProvider, NodeTypes } from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide } from \"d3-force\";\nimport { AgentGraphNode, AGENT_NODE_WIDTH, AGENT_NODE_HEIGHT } from \"./AgentGraphNode\";\nimport { buildAgentGraphData } from \"./agentMeta\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\n\nexport interface AgentGraphViewProps {\n assistants: Assistant[];\n onNodeClick?: (assistantId: string) => void;\n}\n\nconst AgentGraphViewInner: React.FC<AgentGraphViewProps> = ({ assistants, onNodeClick }) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [hoveredNodeId, setHoveredNodeId] = useState<string | null>(null);\n\n const nodeTypes = useMemo(() => ({ agent: AgentGraphNode as any }) as NodeTypes, []);\n\n const graph = useMemo(() => buildAgentGraphData(assistants), [assistants]);\n\n useEffect(() => {\n const simNodes = graph.nodes.map((n) => ({ id: n.id }));\n const simLinks = graph.edges.map((e) => ({ source: e.source, target: e.target }));\n const nodeById = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const simulation = forceSimulation(simNodes as any)\n .force(\"link\", forceLink(simLinks).id((d: any) => d.id).distance(80))\n .force(\"charge\", forceManyBody().strength(-220))\n .force(\"center\", forceCenter(0, 0))\n .force(\"collide\", forceCollide(45))\n .stop();\n for (let i = 0; i < 300; i++) simulation.tick();\n\n const initialNodes: Node[] = simNodes.map((n: any) => ({\n id: n.id,\n type: \"agent\",\n data: nodeById.get(n.id)!,\n // d3-force positions are node CENTERS; ReactFlow positions are\n // top-left corners. Offset by half the node size so edges land on\n // the nodes instead of floating past them.\n position: {\n x: n.x - AGENT_NODE_WIDTH / 2,\n y: n.y - AGENT_NODE_HEIGHT / 2,\n },\n }));\n const initialEdges: Edge[] = graph.edges.map((e) => ({\n id: `e${e.source}-${e.target}`,\n source: e.source,\n target: e.target,\n style: { stroke: \"#1677ff\", strokeWidth: 2 },\n type: \"straight\",\n }));\n setNodes(initialNodes);\n setEdges(initialEdges);\n }, [graph, setNodes, setEdges]);\n\n const displayNodes = useMemo(() => {\n if (hoveredNodeId === null) return nodes;\n return nodes.map((node) => {\n const isConnected =\n node.id === hoveredNodeId ||\n edges.some((e) => (e.source === hoveredNodeId && e.target === node.id) || (e.target === hoveredNodeId && e.source === node.id));\n return { ...node, style: { opacity: isConnected ? 1 : 0.2, transition: \"opacity 0.2s ease\" } };\n });\n }, [nodes, edges, hoveredNodeId]);\n\n const displayEdges = useMemo(() => {\n if (hoveredNodeId === null) {\n return edges.map((edge) => ({ ...edge, style: { stroke: \"#1677ff\", strokeWidth: 1.5, opacity: 0.25, transition: \"opacity 0.2s ease\" } }));\n }\n return edges.map((edge) => {\n const isConnected = edge.source === hoveredNodeId || edge.target === hoveredNodeId;\n return { ...edge, style: { stroke: \"#1677ff\", strokeWidth: isConnected ? 2.5 : 1, opacity: isConnected ? 1 : 0.04, transition: \"opacity 0.2s ease\" } };\n });\n }, [edges, hoveredNodeId]);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", background: \"#fafafa\", position: \"relative\" }}>\n <ReactFlow\n nodes={displayNodes}\n edges={displayEdges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeMouseEnter={(_event, node) => setHoveredNodeId(node.id)}\n onNodeMouseLeave={() => setHoveredNodeId(null)}\n onNodeClick={(_event, node) => onNodeClick?.(String(node.id))}\n nodeTypes={nodeTypes}\n fitView\n fitViewOptions={{ padding: 0.25 }}\n >\n <Background color=\"#eee\" gap={20} />\n <Controls />\n </ReactFlow>\n </div>\n );\n};\n\nexport const AgentGraphView: React.FC<AgentGraphViewProps> = (props) => (\n <ReactFlowProvider>\n <AgentGraphViewInner {...props} />\n </ReactFlowProvider>\n);\n\n","import React, { memo } from \"react\";\nimport { Handle, Position, NodeProps, Node } from \"@xyflow/react\";\nimport type { AgentGraphNodeData } from \"./types\";\nimport { getTypeBadgeInfo, colorHex } from \"./agentMeta\";\n\n/**\n * Estimated rendered size of an AgentGraphNode (dot + label).\n * The graph layout uses these to convert d3-force center coordinates\n * into ReactFlow top-left positions, so edges connect at node centers.\n */\nexport const AGENT_NODE_WIDTH = 60;\nexport const AGENT_NODE_HEIGHT = 72;\n\nexport const AgentGraphNode: React.FC<NodeProps<Node<AgentGraphNodeData>>> = memo(({ data }) => {\n const badge = getTypeBadgeInfo(data.type);\n const dotSize = Math.min(12 + Math.sqrt(data.subAgentCount) * 10, 48);\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n {/* Centered, transparent handles so edges connect at the node center. */}\n <Handle\n type=\"target\"\n position={Position.Top}\n style={{\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n background: \"transparent\",\n border: \"none\",\n width: 0,\n height: 0,\n }}\n isConnectable={false}\n />\n <div\n title={data.label}\n style={{\n width: dotSize,\n height: dotSize,\n borderRadius: \"50%\",\n background: colorHex(badge.color),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#fff\",\n fontSize: Math.max(10, dotSize * 0.4),\n fontWeight: 600,\n cursor: \"pointer\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15)\",\n }}\n >\n {data.label.charAt(0).toUpperCase()}\n </div>\n <div style={{ fontSize: 11, maxWidth: 120, textAlign: \"center\", whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\", marginTop: 4 }}>\n {data.label}\n </div>\n <Handle\n type=\"source\"\n position={Position.Top}\n style={{\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n background: \"transparent\",\n border: \"none\",\n width: 0,\n height: 0,\n }}\n isConnectable={false}\n />\n </div>\n );\n});\n\nAgentGraphNode.displayName = \"AgentGraphNode\";\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\nimport { createStyles } from \"antd-style\";\nimport { MiniBarChart } from \"./MiniChart\";\nimport { useT, type SdkTFunction } from \"../../i18n\";\n\nexport interface AgentCardStatsData {\n id: string;\n threadCount: number;\n last7d: number;\n last30d: number;\n lastActive: string | null;\n daily7d: number[];\n daily30d: number[];\n evalScore: number | null;\n evalPassRate: number | null;\n evalRuns: number;\n evalTrend: number[];\n}\n\nconst fmtActive = (iso: string | null, t?: SdkTFunction): string => {\n if (!iso) return \"—\";\n const diff = Date.now() - new Date(iso).getTime();\n const minutes = Math.floor(diff / 60000);\n if (minutes < 1) return t ? t(\"common.time.justNow\") : \"just now\";\n if (minutes < 60) return t ? t(\"common.time.minutesAgo\", { count: minutes }) : `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return t ? t(\"common.time.hoursAgo\", { count: hours }) : `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return t ? t(\"common.time.daysAgo\", { count: days }) : `${days}d ago`;\n};\n\nconst scoreColor = (score: number | null): string => {\n if (score === null) return \"#d9d9d9\";\n return score >= 80 ? \"#22c55e\" : score >= 50 ? \"#f59e0b\" : \"#ef4444\";\n};\n\nconst useStyles = createStyles(({ css }) => ({\n row: css`\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n `,\n}));\n\nconst valueStyle: React.CSSProperties = {\n fontSize: 16,\n fontWeight: 700,\n lineHeight: 1.2,\n cursor: \"help\",\n};\nconst labelStyle: React.CSSProperties = {\n fontSize: 10,\n color: \"rgba(0, 0, 0, 0.45)\",\n whiteSpace: \"nowrap\",\n marginTop: 1,\n};\nconst metricColumn: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n};\n\nexport const AgentCardStats: React.FC<{ stats?: AgentCardStatsData | null }> = ({ stats }) => {\n const { styles } = useStyles();\n const t = useT();\n\n if (!stats) {\n return (\n <div style={{ display: \"flex\", fontSize: 11, color: \"#d9d9d9\" }}>\n <span style={{ flex: 1 }}>{t(\"governance.cardStats.scoreEmpty\")}</span>\n <span style={{ flex: 1 }}>{t(\"governance.cardStats.threadsEmpty\")}</span>\n </div>\n );\n }\n\n const score = stats.evalScore !== null ? Number(stats.evalScore).toFixed(1) : \"—\";\n const threads = stats.threadCount > 0 ? stats.threadCount : \"—\";\n const scoreTextColor = scoreColor(stats.evalScore);\n const passRate = stats.evalPassRate !== null ? `${stats.evalPassRate}%` : \"—\";\n\n return (\n <div className={styles.row}>\n {/* Left: two StatCell-style metric columns */}\n <div style={{ display: \"flex\", gap: 16, alignItems: \"flex-end\" }}>\n <Tooltip title={t(\"governance.cardStats.evalTooltip\", { score, passRate, runs: stats.evalRuns })}>\n <div style={metricColumn}>\n <span style={{ ...valueStyle, color: scoreTextColor }}>{score}</span>\n <span className=\"lattice-stat-label\" style={labelStyle}>{t(\"governance.cardStats.evalScore\")}</span>\n </div>\n </Tooltip>\n <Tooltip title={stats.lastActive\n ? t(\"governance.cardStats.conversationsTooltipActive\", { total: stats.threadCount, last7d: stats.last7d, last30d: stats.last30d, lastActive: fmtActive(stats.lastActive, t) })\n : t(\"governance.cardStats.conversationsTooltip\", { total: stats.threadCount, last7d: stats.last7d, last30d: stats.last30d })}>\n <div style={metricColumn}>\n <span style={{ ...valueStyle, color: threads === \"—\" ? \"#d9d9d9\" : \"#595959\" }}>{threads}</span>\n <span className=\"lattice-stat-label\" style={labelStyle}>{t(\"governance.cardStats.threads\")}</span>\n </div>\n </Tooltip>\n </div>\n\n {/* Right: bar chart */}\n {stats.daily7d.length > 0 && (\n <div style={metricColumn}>\n <MiniBarChart values={stats.daily7d} width={40} height={24} color=\"#8c8c8c\" />\n <span className=\"lattice-stat-label\" style={labelStyle}>{t(\"governance.cardStats.threads7d\")}</span>\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport {\n Modal,\n Form,\n Input,\n InputNumber,\n Button,\n Select,\n message,\n Typography,\n Segmented,\n Divider,\n Space,\n Radio,\n} from \"antd\";\nimport { PlusOutlined, ForkOutlined, ApiOutlined, ExperimentOutlined } from \"@ant-design/icons\";\nimport { useApi } from \"../../hooks/useApi\";\nimport { useClient } from \"../../context\";\nimport { ParentAgentSelector } from \"./ParentAgentSelector\";\nimport { SubAgentInheritList, SubAgentDecision } from \"./SubAgentInheritList\";\nimport type { Assistant, LocalA2ATemplateDefinition } from \"@axiom-lattice/client-sdk\";\nimport type { AgentCard, TaskFileRef } from \"@axiom-lattice/protocols\";\nimport { getLocalRuntimeCommandError } from \"./localRuntimeValidation\";\nimport { shortHash, startLearningRound, buildBuilderThreadId, buildLearningKickoff } from \"../Governance/Learning/trainingUtils\";\nimport { ReferenceFilesUpload } from \"../Governance/Learning/ReferenceFilesUpload\";\nimport { TrainingContextCard } from \"../Governance/Learning/TrainingContextCard\";\nimport { useWorkspaceContext } from \"../../context/WorkspaceContext\";\nimport { useT, type TranslationKey } from \"../../i18n\";\n\nconst { TextArea } = Input;\nconst { Text } = Typography;\n\nexport type CreationMode = \"scratch\" | \"extend\" | \"learn\";\ntype AgentCardProtocol = \"http://\" | \"https://\";\n\nconst AGENT_CARD_PATH = \"/.well-known/agent-card.json\";\n\nconst AGENT_CARD_PROTOCOL_OPTIONS: Array<{ value: AgentCardProtocol; label: AgentCardProtocol }> = [\n { value: \"http://\", label: \"http://\" },\n { value: \"https://\", label: \"https://\" },\n];\n\ninterface TestConnectionSuccessData {\n reachable: boolean;\n agentName?: string;\n agentCard?: Partial<AgentCard>;\n error?: string;\n}\n\nconst AGENT_TYPE_DESCRIPTION_KEYS: Record<string, TranslationKey> = {\n react: \"chatConfig.createAssistant.typeDesc.react\",\n deep_agent: \"chatConfig.createAssistant.typeDesc.deepAgent\",\n team: \"chatConfig.createAssistant.typeDesc.team\",\n processing: \"chatConfig.createAssistant.typeDesc.processing\",\n a2a_remote: \"chatConfig.createAssistant.typeDesc.a2aRemote\",\n};\n\nfunction normalizeAgentCardUrl(\n value: unknown,\n protocol: unknown,\n defaultProtocol: AgentCardProtocol = \"https://\",\n): string {\n const raw = String(value ?? \"\").trim();\n if (!raw) return \"\";\n\n const selectedProtocol =\n protocol === \"http://\" || protocol === \"https://\"\n ? protocol\n : defaultProtocol;\n const withProtocol = /^https?:\\/\\//i.test(raw)\n ? raw\n : `${selectedProtocol}${raw.replace(/^\\/+/, \"\")}`;\n\n const trimmed = withProtocol.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(AGENT_CARD_PATH)) {\n return trimmed;\n }\n\n return `${trimmed}${AGENT_CARD_PATH}`;\n}\n\nfunction getAgentCardPort(agentCardUrl: string): string | undefined {\n try {\n return new URL(agentCardUrl).port || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction commandArgsDeclarePort(args: string[]): boolean {\n return args.some(\n (arg) => arg === \"--port\" || arg === \"-p\" || /^--port=/.test(arg) || /^-p=/.test(arg),\n );\n}\n\nfunction buildTemplateCommand(\n command: LocalA2ATemplateDefinition[\"command\"],\n agentCardUrl: string,\n): LocalA2ATemplateDefinition[\"command\"] {\n const args = [...command.args];\n const port = getAgentCardPort(agentCardUrl);\n if (port && !commandArgsDeclarePort(args)) {\n args.push(\"--port\", port);\n }\n\n return {\n ...command,\n args,\n ...(command.env ? { env: { ...command.env } } : {}),\n };\n}\n\nexport interface CreateAssistantModalProps {\n open: boolean;\n onCancel: () => void;\n onSuccess?: (assistant: Assistant, options?: { initialMessage?: string; projectId?: string; initialMessageCustomRunConfig?: Record<string, unknown> }) => void;\n initialMode?: CreationMode;\n initialValues?: Record<string, unknown>;\n}\n\nexport const CreateAssistantModal: React.FC<CreateAssistantModalProps> = ({\n open,\n onCancel,\n onSuccess,\n initialMode,\n initialValues,\n}) => {\n const [form] = Form.useForm();\n const t = useT();\n const [loading, setLoading] = useState(false);\n const [creationMode, setCreationMode] = useState<CreationMode>(\"learn\");\n const [learnGoal, setLearnGoal] = useState(\"\");\n const [parentAssistant, setParentAssistant] = useState<Assistant | null>(null);\n const [subAgentDecisions, setSubAgentDecisions] = useState<SubAgentDecision[]>([]);\n const selectedType = Form.useWatch(\"type\", form) || \"react\";\n const isA2ARemote = selectedType === \"a2a_remote\";\n const [a2aMode, setA2aMode] = useState<\"remote\" | \"local\">(\"remote\");\n const [a2aTemplateKey, setA2aTemplateKey] = useState<string | undefined>(undefined);\n const [templates, setTemplates] = useState<LocalA2ATemplateDefinition[]>([]);\n const [templatesLoading, setTemplatesLoading] = useState(false);\n const templateRequestId = useRef(0);\n const [testingUrl, setTestingUrl] = useState(false);\n const [showCustomCommand, setShowCustomCommand] = useState(false);\n const { get, post, put } = useApi();\n const architectClient = useClient(\"agent-architect\");\n const { workspaceId, trainingProjects, loading: workspaceLoading } = useWorkspaceContext();\n const [selectedTrainingId, setSelectedTrainingId] = useState<string | null>(null);\n const initialValuesKey = JSON.stringify(initialValues ?? null);\n /** Learning rounds are pinned to a training project (default: first) — never a business project. */\n const trainingProject =\n trainingProjects.find((p) => p.id === selectedTrainingId) ?? trainingProjects[0] ?? null;\n /** Reference files uploaded to the selected training project, stored on the round task. */\n const [learnRefFiles, setLearnRefFiles] = useState<TaskFileRef[]>([]);\n\n const resetExtendState = useCallback(() => {\n setParentAssistant(null);\n setSubAgentDecisions([]);\n }, []);\n\n const resetModalState = useCallback(() => {\n form.resetFields();\n resetExtendState();\n setCreationMode(\"learn\");\n setLearnGoal(\"\");\n setLearnRefFiles([]);\n setSelectedTrainingId(null);\n setA2aMode(\"remote\");\n setA2aTemplateKey(undefined);\n setTemplates([]);\n setShowCustomCommand(false);\n setTestingUrl(false);\n }, [form, resetExtendState]);\n\n useEffect(() => {\n if (open) {\n resetModalState();\n setCreationMode(initialMode ?? \"learn\");\n const initialA2aMode = initialValues?.a2aMode;\n if (initialA2aMode === \"remote\" || initialA2aMode === \"local\") {\n setA2aMode(initialA2aMode);\n }\n form.setFieldsValue({\n type: \"react\",\n agentCardProtocol: \"https://\",\n a2aMode: \"remote\",\n timeout: 300000,\n ...initialValues,\n });\n }\n }, [open, form, initialMode, initialValuesKey, resetModalState]);\n\n useEffect(() => {\n const requestId = ++templateRequestId.current;\n let active = true;\n\n if (open && isA2ARemote) {\n form.setFieldValue(\"prompt\", \"\");\n if (a2aMode === \"local\") {\n setTemplatesLoading(true);\n get<{ success: boolean; data: { records: LocalA2ATemplateDefinition[] } }>(\"/api/local-a2a/templates\")\n .then((data) => {\n if (active && requestId === templateRequestId.current && data?.data?.records) {\n setTemplates(data.data.records);\n }\n })\n .catch(() => {\n if (active && requestId === templateRequestId.current) setTemplates([]);\n })\n .finally(() => {\n if (active && requestId === templateRequestId.current) setTemplatesLoading(false);\n });\n } else {\n setTemplatesLoading(false);\n }\n } else {\n setTemplatesLoading(false);\n }\n\n return () => {\n active = false;\n templateRequestId.current += 1;\n };\n }, [form, isA2ARemote, a2aMode, get, open]);\n\n const selectedTemplate = templates.find((t) => t.key === a2aTemplateKey);\n\n const ensureLocalRuntimeCommand = useCallback((): boolean => {\n const error = getLocalRuntimeCommandError({\n mode: a2aMode,\n templateKey: a2aTemplateKey,\n executable: form.getFieldValue(\"commandExecutable\"),\n }, t);\n if (!error) return true;\n\n setShowCustomCommand(true);\n form.setFields([{ name: \"commandExecutable\", errors: [error] }]);\n message.warning(error);\n return false;\n }, [a2aMode, a2aTemplateKey, form, t]);\n\n useEffect(() => {\n if (selectedTemplate) {\n form.setFieldsValue({\n agentCardProtocol: \"http://\",\n });\n }\n }, [form, selectedTemplate]);\n\n const handleTestConnection = useCallback(async () => {\n if (!ensureLocalRuntimeCommand()) return;\n\n const url = normalizeAgentCardUrl(\n form.getFieldValue(\"agentCardUrl\"),\n form.getFieldValue(\"agentCardProtocol\"),\n a2aMode === \"local\" ? \"http://\" : \"https://\",\n );\n if (!url) {\n message.warning(t(\"chatConfig.createAssistant.a2aUrlWarning\"));\n return;\n }\n setTestingUrl(true);\n try {\n const body: Record<string, any> = { agentCardUrl: url, apiKey: form.getFieldValue(\"apiKey\") };\n\n if (a2aMode === \"local\") {\n const template = selectedTemplate;\n if (template) {\n body.localRuntime = {\n label: form.getFieldValue(\"name\") || undefined,\n agentCardUrl: url,\n command: buildTemplateCommand(template.command, url),\n };\n } else {\n const argsStr = form.getFieldValue(\"commandArgs\") || \"\";\n const args = argsStr ? argsStr.split(/\\s+/).filter(Boolean) : [];\n const commandCwd = String(form.getFieldValue([\"command\", \"cwd\"]) || \"\").trim();\n body.localRuntime = {\n label: form.getFieldValue(\"name\") || undefined,\n agentCardUrl: url,\n command: {\n executable: String(\n form.getFieldValue(\"commandExecutable\") || \"\",\n ).trim(),\n args,\n ...(commandCwd ? { cwd: commandCwd } : {}),\n },\n };\n }\n }\n\n const data = await post<{ success: boolean; data?: TestConnectionSuccessData }>(\n \"/api/a2a/test-connection\",\n body\n );\n if (data.data?.reachable) {\n const agentCard = data.data.agentCard;\n message.success(t(\"chatConfig.createAssistant.connectedTo\", { name: data.data.agentName || url }));\n } else {\n message.error(data.data?.error || t(\"chatConfig.createAssistant.connectionFailed\"));\n }\n } catch {\n message.error(t(\"chatConfig.createAssistant.connectionTestFailed\"));\n } finally {\n setTestingUrl(false);\n }\n }, [form, post, a2aMode, selectedTemplate, ensureLocalRuntimeCommand, t]);\n\n /** Handle parent agent selection in extend mode */\n const handleParentSelect = useCallback(\n (assistant: Assistant | null) => {\n setParentAssistant(assistant);\n\n if (!assistant) {\n form.resetFields([\"key\", \"name\", \"description\", \"type\", \"prompt\"]);\n setSubAgentDecisions([]);\n return;\n }\n\n const graphDef =\n typeof assistant.graphDefinition === \"object\" && assistant.graphDefinition !== null\n ? assistant.graphDefinition\n : {};\n\n // Pre-fill the form with parent's values, including default key/name/description\n const parentKey = graphDef.key || assistant.id;\n const parentName = assistant.name || graphDef.name || \"\";\n form.setFieldsValue({\n key: `${parentKey}_ext`,\n name: parentName ? `${parentName} (Extended)` : \"\",\n description: assistant.description || graphDef.description || \"\",\n type: graphDef.type || \"react\",\n prompt: graphDef.prompt || \"\",\n });\n\n // Initialize sub-agent decisions (default: reuse all)\n const parentSubAgents: string[] = graphDef.subAgents || [];\n setSubAgentDecisions(\n parentSubAgents.map((key: string) => ({ originalKey: key, clone: false }))\n );\n },\n [form]\n );\n\n /** Clone a sub-agent via the API and return the created Assistant */\n const cloneSubAgent = async (\n originalKey: string,\n newKey: string\n ): Promise<Assistant> => {\n // Fetch the original sub-agent's config\n const getData = await get<{ success: boolean; data: Assistant }>(`/api/assistants/${originalKey}`);\n\n if (!getData.success) {\n throw new Error(t(\"chatConfig.createAssistant.cloneFetchFailed\", { key: originalKey }));\n }\n\n const originalAssistant = getData.data;\n const originalGraphDef =\n typeof originalAssistant.graphDefinition === \"object\"\n ? originalAssistant.graphDefinition\n : {};\n\n const cloneBody = {\n id: newKey,\n name: `${originalAssistant.name} (Clone)`,\n description: originalAssistant.description || \"\",\n graphDefinition: {\n ...originalGraphDef,\n key: newKey,\n name: `${originalAssistant.name} (Clone)`,\n },\n };\n\n const createData = await post<{ success: boolean; data: Assistant; message?: string }>(\"/api/assistants\", cloneBody);\n\n if (!createData.success) {\n throw new Error(createData.message || t(\"chatConfig.createAssistant.cloneFailed\", { key: originalKey }));\n }\n\n return createData.data;\n };\n\n /** Build the request body for \"create from scratch\" mode */\n const buildScratchBody = (values: any) => {\n const body: Record<string, any> = {\n id: values.key,\n name: values.name,\n description: values.description || \"\",\n graphDefinition: {\n key: values.key,\n name: values.name,\n description: values.description || \"\",\n type: values.type,\n prompt: values.prompt || \"\",\n tools: [],\n skills: [],\n subAgents: (values.type === \"deep_agent\" || values.type === \"processing\") ? [] : undefined,\n middleware: [],\n },\n };\n\n // A2A_REMOTE specific fields\n if (values.type === \"a2a_remote\") {\n body.graphDefinition.agentCardUrl = normalizeAgentCardUrl(\n values.agentCardUrl,\n values.agentCardProtocol,\n (values.a2aMode || a2aMode) === \"local\" ? \"http://\" : \"https://\",\n );\n if (values.apiKey) body.graphDefinition.apiKey = values.apiKey;\n if (values.timeout) body.graphDefinition.timeout = values.timeout;\n\n if ((values.a2aMode || a2aMode) === \"local\") {\n const template = selectedTemplate;\n if (template) {\n body.graphDefinition.localRuntime = {\n label: values.name || undefined,\n agentCardUrl: body.graphDefinition.agentCardUrl,\n command: buildTemplateCommand(template.command, body.graphDefinition.agentCardUrl),\n };\n } else {\n const argsStr = values.commandArgs || \"\";\n const args = argsStr ? argsStr.split(/\\s+/).filter(Boolean) : [];\n const commandCwd = String(values.command?.cwd || \"\").trim();\n body.graphDefinition.localRuntime = {\n label: values.name || undefined,\n agentCardUrl: body.graphDefinition.agentCardUrl,\n command: {\n executable: String(values.commandExecutable || \"\").trim(),\n args,\n ...(commandCwd ? { cwd: commandCwd } : {}),\n },\n };\n }\n }\n }\n\n return body;\n };\n\n /** Build the request body for \"extend agent\" mode, creating cloned sub-agents first */\n const buildExtendBody = async (\n values: any,\n createdAssistants: Assistant[]\n ) => {\n if (!parentAssistant) {\n throw new Error(t(\"chatConfig.createAssistant.noParentAgent\"));\n }\n\n // Validate clone keys before proceeding\n const cloneDecisions = subAgentDecisions.filter((d) => d.clone);\n for (const decision of cloneDecisions) {\n if (!decision.cloneKey || !decision.cloneKey.trim()) {\n throw new Error(\n t(\"chatConfig.createAssistant.cloneKeyRequired\", { key: decision.originalKey })\n );\n }\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(decision.cloneKey)) {\n throw new Error(\n t(\"chatConfig.createAssistant.cloneKeyInvalid\", { key: decision.cloneKey, originalKey: decision.originalKey })\n );\n }\n }\n\n // First, create all cloned sub-agents, then create the child agent\n const resolvedSubAgents: string[] = [];\n for (const decision of subAgentDecisions) {\n if (decision.clone) {\n const clonedAssistant = await cloneSubAgent(decision.originalKey, decision.cloneKey!);\n createdAssistants.push(clonedAssistant);\n resolvedSubAgents.push(decision.cloneKey!);\n } else {\n resolvedSubAgents.push(decision.originalKey);\n }\n }\n\n const parentGraphDef =\n typeof parentAssistant.graphDefinition === \"object\"\n ? parentAssistant.graphDefinition\n : {};\n\n // Build graphDefinition with only overridden fields + extendsAgent\n const graphDefinition: Record<string, any> = {\n key: values.key,\n name: values.name,\n description: values.description || \"\",\n extendsAgent: parentAssistant.id,\n type: values.type || parentGraphDef.type,\n };\n\n // Only include prompt if it differs from parent\n if (values.prompt && values.prompt !== parentGraphDef.prompt) {\n graphDefinition.prompt = values.prompt;\n }\n\n // Always set resolved sub-agents (they may contain cloned keys)\n if (resolvedSubAgents.length > 0 || (parentGraphDef.subAgents && parentGraphDef.subAgents.length > 0)) {\n graphDefinition.subAgents = resolvedSubAgents;\n }\n\n return {\n id: values.key,\n name: values.name,\n description: values.description || \"\",\n graphDefinition,\n };\n };\n\n /** Handle form submission */\n const handleSubmit = async () => {\n if (creationMode === \"learn\") {\n const goal = learnGoal.trim();\n if (!goal) {\n message.error(t(\"chatConfig.createAssistant.trainingGoalRequired\"));\n return;\n }\n if (!trainingProject) {\n message.error(t(\"chatConfig.createAssistant.noTrainingProject\"));\n return;\n }\n setLoading(true);\n try {\n const agentId = `agent-${shortHash(goal + Date.now())}`;\n const agentRes = await post<{ success: boolean; data: Assistant }>(\"/api/assistants\", {\n id: agentId,\n name: agentId,\n graphDefinition: {\n key: agentId,\n name: agentId,\n description: \"\",\n type: \"react\",\n prompt: \"To be trained\",\n metadata: {\n trainingProjectId: trainingProject.id,\n learningPlaceholder: \"true\",\n architectureStatus: \"undecided\",\n },\n },\n });\n if (!agentRes.data) throw new Error(t(\"chatConfig.createAssistant.agentCreateFailed\"));\n const { roundTaskId } = await startLearningRound({\n goal,\n targetAgentId: agentId,\n workspaceId: workspaceId ?? undefined,\n projectId: trainingProject.id,\n existingThreadId: buildBuilderThreadId(architectClient.tenantId, agentId),\n files: learnRefFiles,\n post,\n put,\n });\n message.success(t(\"chatConfig.createAssistant.agentCreated\"));\n setLearnGoal(\"\");\n setLearnRefFiles([]);\n setCreationMode(\"learn\");\n onSuccess?.(agentRes.data, {\n initialMessage: buildLearningKickoff({\n goal,\n roundTaskId,\n targetAgentId: agentId,\n targetMode: \"placeholder\",\n files: learnRefFiles,\n projectId: trainingProject.id,\n workspaceId: trainingProject.workspaceId ?? workspaceId ?? undefined,\n }),\n projectId: trainingProject.id,\n initialMessageCustomRunConfig: { execution: { taskId: roundTaskId } },\n });\n onCancel();\n } catch (err) {\n message.error(err instanceof Error ? err.message : t(\"chatConfig.createAssistant.agentCreateFailed\"));\n } finally {\n setLoading(false);\n }\n return;\n }\n\n try {\n if (\n creationMode === \"scratch\" &&\n isA2ARemote &&\n !ensureLocalRuntimeCommand()\n ) {\n return;\n }\n const values = await form.validateFields();\n setLoading(true);\n\n // Collect all assistants created during the extend flow (cloned sub-agents)\n const createdAssistants: Assistant[] = [];\n\n const requestBody =\n creationMode === \"scratch\"\n ? buildScratchBody(values)\n : await buildExtendBody(values, createdAssistants);\n\n const data = await post<{ success: boolean; data: Assistant; message?: string }>(\"/api/assistants\", requestBody);\n\n if (data.success) {\n message.success(\n creationMode === \"extend\"\n ? t(\"chatConfig.createAssistant.createdByExtending\", { name: parentAssistant?.name ?? \"\" })\n : t(\"chatConfig.createAssistant.created\")\n );\n resetModalState();\n\n // Notify about all created assistants: cloned sub-agents first, then child\n for (const clonedAssistant of createdAssistants) {\n onSuccess?.(clonedAssistant);\n }\n onSuccess?.(data.data);\n\n onCancel();\n } else {\n message.error(data.message || t(\"chatConfig.createAssistant.createFailed\"));\n }\n } catch (error: any) {\n if (error?.errorFields) {\n const fieldLabels: Record<string, string> = {\n key: t(\"chatConfig.createAssistant.field.key\"),\n name: t(\"chatConfig.createAssistant.field.name\"),\n description: t(\"chatConfig.createAssistant.field.description\"),\n prompt: t(\"chatConfig.createAssistant.field.systemPrompt\"),\n };\n const failed = (error.errorFields as Array<{ name?: (string | number)[] }>)\n .map((f) => fieldLabels[String((f.name ?? [])[0])] ?? String((f.name ?? [])[0]))\n .filter(Boolean);\n message.warning(\n failed.length > 0\n ? t(\"chatConfig.createAssistant.requiredFields\", { fields: [...new Set(failed)].join(\", \") })\n : t(\"chatConfig.createAssistant.requiredFieldsGeneric\")\n );\n return;\n }\n message.error(\n error.message || t(\"chatConfig.createAssistant.createError\")\n );\n } finally {\n setLoading(false);\n }\n };\n\n /** Determine if the parent has sub-agents to show the inherit list */\n const parentSubAgents: string[] =\n parentAssistant?.graphDefinition?.subAgents || [];\n const showSubAgentList =\n creationMode === \"extend\" && parentAssistant && parentSubAgents.length > 0;\n\n return (\n <Modal\n title={t(\"chatConfig.createAssistant.title\")}\n open={open}\n onCancel={() => {\n resetModalState();\n onCancel();\n }}\n footer={[\n <Button\n key=\"cancel\"\n onClick={() => {\n resetModalState();\n onCancel();\n }}\n >\n {t(\"common.cancel\")}\n </Button>,\n <Button\n key=\"submit\"\n type=\"primary\"\n icon={creationMode === \"extend\" ? <ForkOutlined /> : creationMode === \"learn\" ? <ExperimentOutlined /> : <PlusOutlined />}\n loading={loading}\n disabled={creationMode === \"learn\" && (workspaceLoading || !trainingProject)}\n onClick={handleSubmit}\n >\n {creationMode === \"extend\"\n ? t(\"chatConfig.createAssistant.createExtend\")\n : creationMode === \"learn\"\n ? t(\"chatConfig.createAssistant.startLearning\")\n : t(\"common.create\")}\n </Button>,\n ]}\n width={760}\n >\n {/* Parent agent selector (extend mode only) */}\n {creationMode === \"extend\" && (\n <div style={{ marginBottom: 20 }}>\n <Text\n type=\"secondary\"\n style={{ display: \"block\", marginBottom: 8 }}\n >\n {t(\"chatConfig.createAssistant.parentAgent\")}\n </Text>\n <ParentAgentSelector\n value={parentAssistant?.id}\n onSelect={handleParentSelect}\n />\n {parentAssistant && (\n <Text\n type=\"secondary\"\n style={{ display: \"block\", marginTop: 4, fontSize: 12 }}\n >\n {t(\"chatConfig.createAssistant.inheritHint\")}\n </Text>\n )}\n </div>\n )}\n\n {creationMode === \"extend\" && parentAssistant && (\n <Divider style={{ margin: \"12px 0\" }} />\n )}\n\n {creationMode === \"learn\" && (\n <div>\n <Text style={{ display: \"block\", marginBottom: 8 }}>\n {t(\"chatConfig.createAssistant.learnHint\")}\n </Text>\n <Input.TextArea\n rows={3}\n value={learnGoal}\n onChange={(e) => setLearnGoal(e.target.value)}\n placeholder=\"e.g. Handle price disputes using the price protection policy\"\n />\n {trainingProject && (\n <div style={{ marginTop: 12 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12, marginBottom: 8 }}>\n <Text type=\"secondary\">{t(\"chatConfig.createAssistant.referenceFiles\")}</Text>\n <TrainingContextCard\n project={trainingProject}\n projects={trainingProjects}\n value={trainingProject?.id ?? null}\n onChange={setSelectedTrainingId}\n loading={workspaceLoading}\n />\n </div>\n <ReferenceFilesUpload projectId={trainingProject.id} value={learnRefFiles} onChange={setLearnRefFiles} />\n <Text type=\"secondary\" style={{ display: \"block\", marginTop: 6, fontSize: 12 }}>\n {t(\"chatConfig.createAssistant.referenceFilesHint\")}\n </Text>\n </div>\n )}\n {!trainingProject && !workspaceLoading && (\n <div style={{ marginTop: 12 }}>\n <TrainingContextCard\n project={trainingProject}\n projects={trainingProjects}\n value={null}\n onChange={setSelectedTrainingId}\n loading={workspaceLoading}\n />\n </div>\n )}\n </div>\n )}\n\n {creationMode !== \"learn\" && (\n <Form\n form={form}\n layout=\"vertical\"\n autoComplete=\"off\"\n initialValues={{ type: \"react\", agentCardProtocol: \"https://\", a2aMode: \"remote\" }}\n >\n <Form.Item\n name=\"key\"\n label={t(\"chatConfig.createAssistant.field.key\")}\n rules={[\n { required: true, message: t(\"chatConfig.createAssistant.validation.keyRequired\") },\n {\n pattern: /^[a-zA-Z][a-zA-Z0-9_-]*$/,\n message: t(\"chatConfig.createAssistant.validation.keyPattern\"),\n },\n ]}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g., my_assistant\" />\n </Form.Item>\n\n <Form.Item\n name=\"name\"\n label={t(\"chatConfig.createAssistant.field.name\")}\n rules={[{ required: true, message: t(\"chatConfig.createAssistant.validation.nameRequired\") }]}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g., My Assistant\" />\n </Form.Item>\n\n <Form.Item\n name=\"description\"\n label={t(\"chatConfig.createAssistant.field.description\")}\n rules={[\n { required: true, message: t(\"chatConfig.createAssistant.validation.descriptionRequired\") },\n ]}\n style={{ marginBottom: 16 }}\n >\n <TextArea\n placeholder={t(\"chatConfig.createAssistant.descriptionPlaceholder\")}\n autoSize={{ minRows: 2, maxRows: 4 }}\n />\n </Form.Item>\n\n <Form.Item\n name=\"type\"\n label={t(\"chatConfig.createAssistant.field.agentType\")}\n rules={[{ required: true }]}\n style={{ marginBottom: 16 }}\n >\n <Segmented\n options={[\n { value: \"react\", label: t(\"chatConfig.agentType.executor\") },\n { value: \"deep_agent\", label: t(\"chatConfig.agentType.orchestrator\") },\n { value: \"team\", label: t(\"chatConfig.agentType.team\") },\n { value: \"processing\", label: t(\"chatConfig.agentType.workflow\") },\n { value: \"a2a_remote\", label: t(\"chatConfig.agentType.a2aRemote\") },\n ]}\n block\n />\n </Form.Item>\n <Text\n type=\"secondary\"\n style={{ fontSize: 12, display: \"block\", marginTop: -12, marginBottom: 16, lineHeight: 1.5 }}\n >\n {t(AGENT_TYPE_DESCRIPTION_KEYS[selectedType] ?? \"chatConfig.createAssistant.typeDesc.react\")}\n </Text>\n\n {/* A2A Remote specific fields */}\n {isA2ARemote && (\n <>\n <Form.Item label={t(\"chatConfig.createAssistant.field.connectionMode\")} style={{ marginBottom: 16 }}>\n <Radio.Group\n value={a2aMode}\n onChange={(e) => {\n const nextMode = e.target.value as \"remote\" | \"local\";\n setA2aMode(nextMode);\n form.setFieldValue(\"a2aMode\", nextMode);\n if (nextMode === \"local\") {\n form.setFieldValue(\"agentCardProtocol\", \"http://\");\n }\n setA2aTemplateKey(undefined);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n >\n <Radio.Button value=\"remote\">{t(\"chatConfig.createAssistant.mode.remoteUrl\")}</Radio.Button>\n <Radio.Button value=\"local\">{t(\"chatConfig.createAssistant.mode.localManaged\")}</Radio.Button>\n </Radio.Group>\n </Form.Item>\n\n <Form.Item name=\"a2aMode\" noStyle hidden>\n <Input />\n </Form.Item>\n\n {a2aMode === \"local\" && (\n <>\n <Form.Item label={t(\"chatConfig.createAssistant.field.template\")} style={{ marginBottom: 16 }}>\n <Select\n placeholder={t(\"chatConfig.createAssistant.templatePlaceholder\")}\n allowClear\n loading={templatesLoading}\n value={a2aTemplateKey}\n onChange={(val) => {\n setA2aTemplateKey(val);\n if (val) setShowCustomCommand(false);\n }}\n options={templates.map((t) => ({\n value: t.key,\n label: t.name || t.key,\n }))}\n notFoundContent={\n templatesLoading ? undefined : (\n <Text type=\"secondary\" style={{ padding: 8, display: \"block\" }}>\n {t(\"chatConfig.createAssistant.noTemplates\")}\n </Text>\n )\n }\n />\n </Form.Item>\n\n {!a2aTemplateKey && (\n <>\n {!showCustomCommand ? (\n <Button\n type=\"link\"\n onClick={() => setShowCustomCommand(true)}\n style={{ padding: 0, marginBottom: 16, display: \"block\" }}\n >\n {t(\"chatConfig.createAssistant.customCommand\")}\n </Button>\n ) : (\n <>\n <Form.Item\n name=\"commandExecutable\"\n label={t(\"chatConfig.createAssistant.field.executable\")}\n rules={[{\n required: true,\n whitespace: true,\n message: t(\"chatConfig.createAssistant.validation.executableRequired\"),\n }]}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g. node, opencode, /usr/local/bin/my-server\" />\n </Form.Item>\n <Form.Item\n name=\"commandArgs\"\n label={t(\"chatConfig.createAssistant.field.arguments\")}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g. --serve --port 4301\" />\n </Form.Item>\n <Form.Item\n name={[\"command\", \"cwd\"]}\n label={t(\"chatConfig.createAssistant.field.workingDirectory\")}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g. /Users/me/project\" />\n </Form.Item>\n <Button\n type=\"link\"\n onClick={() => {\n setShowCustomCommand(false);\n form.setFieldsValue({\n commandExecutable: \"\",\n commandArgs: \"\",\n command: { cwd: undefined },\n });\n }}\n style={{ padding: 0, marginBottom: 16, display: \"block\" }}\n >\n {t(\"chatConfig.createAssistant.hideCustomCommand\")}\n </Button>\n </>\n )}\n </>\n )}\n </>\n )}\n\n <Form.Item\n label={t(\"chatConfig.createAssistant.field.agentCardUrl\")}\n required\n style={{ marginBottom: 16 }}\n >\n <Space.Compact style={{ width: \"100%\" }}>\n <Form.Item name=\"agentCardProtocol\" noStyle>\n <Select\n style={{ width: 100 }}\n options={AGENT_CARD_PROTOCOL_OPTIONS}\n />\n </Form.Item>\n <Form.Item\n name=\"agentCardUrl\"\n noStyle\n rules={[{ required: true, message: t(\"chatConfig.createAssistant.validation.urlRequired\") }]}\n >\n <Input placeholder={a2aMode === \"local\" ? \"localhost:4301\" : \"host:port or full URL\"} />\n </Form.Item>\n <Button\n icon={<ApiOutlined />}\n onClick={handleTestConnection}\n loading={testingUrl}\n >\n {t(\"chatConfig.connection.action.test\")}\n </Button>\n </Space.Compact>\n </Form.Item>\n\n {a2aMode === \"remote\" && (\n <Form.Item\n name=\"apiKey\"\n label={t(\"chatConfig.createAssistant.field.apiKeyOptional\")}\n style={{ marginBottom: 16 }}\n >\n <Input.Password placeholder={t(\"chatConfig.createAssistant.apiKeyPlaceholder\")} />\n </Form.Item>\n )}\n\n <Form.Item\n name=\"timeout\"\n label={t(\"chatConfig.createAssistant.field.timeout\")}\n style={{ marginBottom: 16 }}\n initialValue={300000}\n >\n <InputNumber\n min={1000}\n max={3600000}\n style={{ width: \"100%\" }}\n placeholder=\"300000\"\n />\n </Form.Item>\n </>\n )}\n\n {!isA2ARemote && (\n <Form.Item\n name=\"prompt\"\n label={\n creationMode === \"extend\" && parentAssistant\n ? t(\"chatConfig.createAssistant.field.systemPromptInherit\")\n : t(\"chatConfig.createAssistant.field.systemPrompt\")\n }\n rules={\n creationMode === \"scratch\"\n ? [{ required: true, message: t(\"chatConfig.createAssistant.validation.systemPromptRequired\") }]\n : []\n }\n >\n <TextArea\n placeholder={\n creationMode === \"extend\" && parentAssistant\n ? t(\"chatConfig.createAssistant.systemPromptInheritPlaceholder\")\n : t(\"chatConfig.createAssistant.systemPromptPlaceholder\")\n }\n autoSize={{ minRows: 4, maxRows: 8 }}\n style={{\n fontFamily: \"monospace\",\n fontSize: 13,\n lineHeight: 1.6,\n }}\n />\n </Form.Item>\n )}\n </Form>\n )}\n\n {/* Sub-agent inherit list (extend mode only, when parent has sub-agents) */}\n {showSubAgentList && (\n <>\n <Divider style={{ margin: \"12px 0\" }} />\n <Text strong style={{ display: \"block\", marginBottom: 8 }}>\n {t(\"chatConfig.createAssistant.subAgents\")}\n </Text>\n <SubAgentInheritList\n subAgentKeys={parentSubAgents}\n decisions={subAgentDecisions}\n onChange={setSubAgentDecisions}\n />\n </>\n )}\n </Modal>\n );\n};\n\nexport default CreateAssistantModal;\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { Select, Typography } from \"antd\";\nimport { useApi } from \"../../hooks/useApi\";\nimport { useT } from \"../../i18n\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\n\nconst { Text } = Typography;\n\nexport interface ParentAgentSelectorProps {\n /**\n * Callback when a parent agent is selected.\n * Receives the full assistant object including its graphDefinition.\n * Called with null when the selection is cleared.\n */\n onSelect: (assistant: Assistant | null) => void;\n /**\n * Currently selected parent agent key (controlled mode)\n */\n value?: string;\n /**\n * Placeholder text for the selector\n */\n placeholder?: string;\n}\n\n/**\n * ParentAgentSelector - A dropdown component that fetches and displays\n * available agents for selection as a parent in the \"Extend Agent\" flow.\n */\nexport const ParentAgentSelector: React.FC<ParentAgentSelectorProps> = ({\n onSelect,\n value,\n placeholder,\n}) => {\n const t = useT();\n const resolvedPlaceholder =\n placeholder ?? t(\"chatConfig.parentAgent.selectPlaceholder\");\n const [assistants, setAssistants] = useState<Assistant[]>([]);\n const [loading, setLoading] = useState(false);\n const { get } = useApi();\n\n const fetchAssistants = useCallback(async () => {\n setLoading(true);\n try {\n const data = await get<{\n success: boolean;\n data?: { records: Assistant[] };\n }>(\"/api/assistants\");\n\n if (data.success) {\n setAssistants(data.data?.records || []);\n }\n } catch (error) {\n console.error(\"Failed to fetch assistants:\", error);\n } finally {\n setLoading(false);\n }\n }, [get]);\n\n useEffect(() => {\n void fetchAssistants();\n }, [fetchAssistants]);\n\n const handleChange = (selectedId: string | undefined) => {\n if (!selectedId) {\n onSelect(null);\n return;\n }\n const selected = assistants.find((a) => a.id === selectedId);\n onSelect(selected || null);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n void fetchAssistants();\n }\n };\n\n return (\n <Select\n showSearch\n allowClear\n value={value}\n placeholder={resolvedPlaceholder}\n loading={loading}\n onChange={handleChange}\n onDropdownVisibleChange={handleOpenChange}\n optionFilterProp=\"label\"\n style={{ width: \"100%\" }}\n options={assistants.map((assistant) => ({\n value: assistant.id,\n label: assistant.name || assistant.id,\n description: assistant.description,\n }))}\n optionRender={(option) => (\n <div>\n <div>{option.label}</div>\n {option.data.description && (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {option.data.description}\n </Text>\n )}\n </div>\n )}\n />\n );\n};\n\nexport default ParentAgentSelector;\n","import React from \"react\";\nimport { List, Switch, Input, Typography, Tag, theme } from \"antd\";\nimport { ForkOutlined, LinkOutlined } from \"@ant-design/icons\";\nimport { useT } from \"../../i18n\";\n\nconst { Text } = Typography;\n\n/**\n * Decision for a single sub-agent: reuse the original or clone as a new agent\n */\nexport interface SubAgentDecision {\n /** The original sub-agent key from the parent */\n originalKey: string;\n /** Whether to clone this sub-agent as a new independent agent */\n clone: boolean;\n /** Custom key for the cloned sub-agent (only used when clone is true) */\n cloneKey?: string;\n}\n\nexport interface SubAgentInheritListProps {\n /**\n * Array of sub-agent keys from the parent agent\n */\n subAgentKeys: string[];\n /**\n * Current decisions for each sub-agent\n */\n decisions: SubAgentDecision[];\n /**\n * Callback when decisions change\n */\n onChange: (decisions: SubAgentDecision[]) => void;\n}\n\n/**\n * SubAgentInheritList - Displays the parent agent's sub-agents and provides\n * a per-sub-agent toggle to choose between reusing the original sub-agent\n * or cloning it as a new independent agent. When cloning, allows the user\n * to specify a custom key for the new agent.\n */\nexport const SubAgentInheritList: React.FC<SubAgentInheritListProps> = ({\n subAgentKeys,\n decisions,\n onChange,\n}) => {\n const { token } = theme.useToken();\n const t = useT();\n\n const handleToggle = (key: string, clone: boolean) => {\n const updated = decisions.map((d) =>\n d.originalKey === key\n ? { ...d, clone, cloneKey: clone ? `${key}_clone` : undefined }\n : d\n );\n onChange(updated);\n };\n\n const handleCloneKeyChange = (originalKey: string, cloneKey: string) => {\n const updated = decisions.map((d) =>\n d.originalKey === originalKey ? { ...d, cloneKey } : d\n );\n onChange(updated);\n };\n\n if (subAgentKeys.length === 0) {\n return null;\n }\n\n return (\n <div>\n <Text type=\"secondary\" style={{ display: \"block\", marginBottom: 8 }}>\n {t(\"chatConfig.subAgentInherit.hint\")}\n </Text>\n <List\n size=\"small\"\n bordered\n dataSource={decisions}\n style={{ borderRadius: token.borderRadius }}\n renderItem={(decision) => (\n <List.Item\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: 8,\n padding: \"8px 16px\",\n }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {decision.clone ? (\n <ForkOutlined style={{ color: token.colorPrimary }} />\n ) : (\n <LinkOutlined style={{ color: token.colorTextSecondary }} />\n )}\n <Text style={{ fontFamily: \"monospace\" }}>\n {decision.originalKey}\n </Text>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <Tag color={decision.clone ? \"blue\" : \"default\"}>\n {decision.clone ? t(\"chatConfig.subAgentInherit.clone\") : t(\"chatConfig.subAgentInherit.reuse\")}\n </Tag>\n <Switch\n size=\"small\"\n checked={decision.clone}\n onChange={(checked) => handleToggle(decision.originalKey, checked)}\n />\n </div>\n </div>\n {decision.clone && (\n <Input\n size=\"small\"\n placeholder={t(\"chatConfig.subAgentInherit.cloneKeyPlaceholder\")}\n value={decision.cloneKey}\n onChange={(e) => handleCloneKeyChange(decision.originalKey, e.target.value)}\n style={{ fontFamily: \"monospace\", fontSize: 12 }}\n addonBefore={t(\"chatConfig.keyValue.key\")}\n />\n )}\n </List.Item>\n )}\n />\n </div>\n );\n};\n\nexport default SubAgentInheritList;\n","import type { SdkTFunction } from \"../../i18n\";\n\nexport type A2AConnectionMode = \"remote\" | \"local\";\n\n/**\n * Pure validator: no hooks, so the translator is passed in by the caller\n * (`CreateAssistantModal`, which has `useT()`). When absent — e.g. a bare unit\n * test — the English source string is returned.\n */\nexport function getLocalRuntimeCommandError(\n options: {\n mode: A2AConnectionMode;\n templateKey?: string;\n executable?: unknown;\n },\n t?: SdkTFunction\n): string | null {\n if (options.mode !== \"local\" || options.templateKey) return null;\n if (\n typeof options.executable === \"string\" &&\n options.executable.trim().length > 0\n ) {\n return null;\n }\n return t ? t(\"chat.config.executableRequired\") : \"Choose a template or enter a custom executable\";\n}\n","import React from \"react\";\nimport { Button, Modal, Typography } from \"antd\";\nimport { Bot, Globe2, GraduationCap } from \"lucide-react\";\nimport { useT } from \"../../i18n\";\n\nconst { Paragraph, Text } = Typography;\n\nexport interface AgentCreationOnboardingModalProps {\n open: boolean;\n onCancel: () => void;\n onSelectMethod: (method: AgentCreationMethod) => void;\n focusTriggerAfterClose?: boolean;\n}\n\nexport type AgentCreationMethod = \"manual\" | \"external\" | \"learn\";\n\nconst methods = [\n {\n key: \"manual\",\n icon: Bot,\n titleKey: \"governance.creation.manual.title\",\n descriptionKey: \"governance.creation.manual.description\",\n },\n {\n key: \"external\",\n icon: Globe2,\n titleKey: \"governance.creation.external.title\",\n descriptionKey: \"governance.creation.external.description\",\n },\n {\n key: \"learn\",\n icon: GraduationCap,\n titleKey: \"governance.creation.learn.title\",\n descriptionKey: \"governance.creation.learn.description\",\n },\n] as const satisfies ReadonlyArray<{\n key: AgentCreationMethod;\n icon: typeof Bot;\n titleKey: string;\n descriptionKey: string;\n}>;\n\nexport const AgentCreationOnboardingModal: React.FC<AgentCreationOnboardingModalProps> = ({\n open,\n onCancel,\n onSelectMethod,\n focusTriggerAfterClose = true,\n}) => {\n const t = useT();\n return (\n <Modal\n title={t(\"governance.creation.title\")}\n open={open}\n onCancel={onCancel}\n footer={null}\n width={560}\n centered\n destroyOnHidden\n focusTriggerAfterClose={focusTriggerAfterClose}\n >\n <div style={{ padding: \"8px 4px 4px\" }}>\n <Paragraph style={{ color: \"#595959\", fontSize: 15, margin: \"8px 0 24px\" }}>\n {t(\"governance.creation.subtitle\")}\n </Paragraph>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n }}\n >\n {methods.map((method) => {\n const Icon = method.icon;\n const methodTitle = t(method.titleKey);\n return (\n <Button\n key={method.key}\n type=\"default\"\n onClick={() => onSelectMethod(method.key)}\n aria-label={methodTitle}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 16,\n width: \"100%\",\n minHeight: 88,\n height: \"auto\",\n padding: 16,\n borderRadius: 16,\n textAlign: \"left\",\n whiteSpace: \"normal\",\n }}\n >\n <div\n style={{\n width: 40,\n height: 40,\n borderRadius: 12,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n color: \"#6366f1\",\n background: \"#eeeeff\",\n }}\n >\n <Icon size={19} />\n </div>\n <div style={{ minWidth: 0 }}>\n <Text strong style={{ display: \"block\", fontSize: 15, marginBottom: 3 }}>\n {methodTitle}\n </Text>\n <Text style={{ color: \"#737373\", lineHeight: 1.5 }}>{t(method.descriptionKey)}</Text>\n </div>\n </Button>\n );\n })}\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8, flexWrap: \"wrap\", marginTop: 24 }}>\n <Button onClick={onCancel}>{t(\"governance.creation.notNow\")}</Button>\n </div>\n </div>\n </Modal>\n );\n};\n"],"mappings":"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","names":["React","useCallback","useEffect","useState","message","Modal","useMemo","useState","Tooltip","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useMemo","t","Tooltip","useState","useCallback","useEffect","Input","Select","Typography","ForkOutlined","useEffect","useState","jsx","jsxs","useState","useEffect","Typography","Tag","jsx","jsxs","Text","Typography","Tag","Fragment","jsx","jsxs","Input","Text","Typography","useState","useCallback","useEffect","t","parentSubAgents","ForkOutlined","Select","Button","Modal","Typography","Bot","jsx","jsxs","Text","Typography","Bot","Modal","Button","Fragment","jsx","jsxs","useState","useCallback","message","useEffect","React","Modal"]}
@@ -1,5 +0,0 @@
1
- import{a as Pe,b as Ne,c as Ft,d as Pt,e as Mt,f as Et,g as Kt,h as Bt,i as Nt,j as Lt,k as Ot,l as _t}from"./embed-page-chunk-5NJ3O2GK.js";import{a as qe}from"./embed-page-chunk-K2U3JD67.js";import"./embed-page-chunk-H64UEFHS.js";import"./embed-page-chunk-GUSAII2D.js";import"./embed-page-chunk-WTOAQDQN.js";import{b as Ue,e as $e,f as kt,g as Tt,h as wt,i as St,l as It,m as Rt}from"./embed-page-chunk-V2GBFWLG.js";import{a as ht,b as Ct,c as At,d as bt,e as vt}from"./embed-page-chunk-SV2BM3WO.js";import"./embed-page-chunk-S4XZPBRM.js";import"./embed-page-chunk-I3OONX3N.js";import{$ as pt,Aa as yt,C as lt,Da as xt,F as ct,L as dt,Oa as je,X as gt,g as Fe,ka as mt,pb as Dt,ra as ut,s as rt,sa as ft}from"./embed-page-chunk-YYDZ6ZBV.js";import{D as Ce,r as _,y as nt}from"./embed-page-chunk-2PFKLMTR.js";import{a as M}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{$b as Be,Cb as ot,Fa as et,Ia as De,Ja as tt,La as te,Ua as at,W as Q,_ as Ie,aa as Re,ea as Ke,ka as Ge,la as Je,lc as it,ma as Qe,oa as Xe,ra as D,ta as j,wa as ze,xa as w,xc as st,ya as he}from"./embed-page-chunk-MHGVD4EV.js";import{a as ye}from"./embed-page-chunk-R5QL57JJ.js";import"./embed-page-chunk-QOWM3LMZ.js";import"./embed-page-chunk-EUOOO2LS.js";import"./embed-page-chunk-5JDQ456X.js";import{f as T}from"./embed-page-chunk-QBTAJ2YI.js";var u=T(ye());var ae=T(ye());var X=T(ye());var Vt=T(ye());var ce=T(M()),Gt=60,zt=72,He=(0,Vt.memo)(({data:n})=>{let s=Pe(n.type),g=Math.min(12+Math.sqrt(n.subAgentCount)*10,48);return(0,ce.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center"},children:[(0,ce.jsx)($e,{type:"target",position:Ue.Top,style:{left:"50%",top:"50%",transform:"translate(-50%, -50%)",background:"transparent",border:"none",width:0,height:0},isConnectable:!1}),(0,ce.jsx)("div",{title:n.label,style:{width:g,height:g,borderRadius:"50%",background:Ne(s.color),display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:Math.max(10,g*.4),fontWeight:600,cursor:"pointer",boxShadow:"0 2px 8px rgba(0,0,0,0.15)"},children:n.label.charAt(0).toUpperCase()}),(0,ce.jsx)("div",{style:{fontSize:11,maxWidth:120,textAlign:"center",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:4},children:n.label}),(0,ce.jsx)($e,{type:"source",position:Ue.Top,style:{left:"50%",top:"50%",transform:"translate(-50%, -50%)",background:"transparent",border:"none",width:0,height:0},isConnectable:!1})]})});He.displayName="AgentGraphNode";var ne=T(M()),ln=({assistants:n,onNodeClick:s})=>{let[g,r,d]=wt([]),[i,e,h]=St([]),[f,l]=(0,X.useState)(null),k=(0,X.useMemo)(()=>({agent:He}),[]),O=(0,X.useMemo)(()=>Mt(n),[n]);(0,X.useEffect)(()=>{let C=O.nodes.map(o=>({id:o.id})),R=O.edges.map(o=>({source:o.source,target:o.target})),K=new Map(O.nodes.map(o=>[o.id,o])),W=bt(C).force("link",At(R).id(o=>o.id).distance(80)).force("charge",vt().strength(-220)).force("center",ht(0,0)).force("collide",Ct(45)).stop();for(let o=0;o<300;o++)W.tick();let $=C.map(o=>({id:o.id,type:"agent",data:K.get(o.id),position:{x:o.x-Gt/2,y:o.y-zt/2}})),F=O.edges.map(o=>({id:`e${o.source}-${o.target}`,source:o.source,target:o.target,style:{stroke:"#1677ff",strokeWidth:2},type:"straight"}));r($),e(F)},[O,r,e]);let G=(0,X.useMemo)(()=>f===null?g:g.map(C=>{let R=C.id===f||i.some(K=>K.source===f&&K.target===C.id||K.target===f&&K.source===C.id);return{...C,style:{opacity:R?1:.2,transition:"opacity 0.2s ease"}}}),[g,i,f]),p=(0,X.useMemo)(()=>f===null?i.map(C=>({...C,style:{stroke:"#1677ff",strokeWidth:1.5,opacity:.25,transition:"opacity 0.2s ease"}})):i.map(C=>{let R=C.source===f||C.target===f;return{...C,style:{stroke:"#1677ff",strokeWidth:R?2.5:1,opacity:R?1:.04,transition:"opacity 0.2s ease"}}}),[i,f]);return(0,ne.jsx)("div",{style:{width:"100%",height:"100%",background:"#fafafa",position:"relative"},children:(0,ne.jsxs)(Tt,{nodes:G,edges:p,onNodesChange:d,onEdgesChange:h,onNodeMouseEnter:(C,R)=>l(R.id),onNodeMouseLeave:()=>l(null),onNodeClick:(C,R)=>s?.(String(R.id)),nodeTypes:k,fitView:!0,fitViewOptions:{padding:.25},children:[(0,ne.jsx)(It,{color:"#eee",gap:20}),(0,ne.jsx)(Rt,{})]})})},jt=n=>(0,ne.jsx)(kt,{children:(0,ne.jsx)(ln,{...n})});var E=T(M()),cn=(n,s)=>{if(!n)return"\u2014";let g=Date.now()-new Date(n).getTime(),r=Math.floor(g/6e4);if(r<1)return s?s("common.time.justNow"):"just now";if(r<60)return s?s("common.time.minutesAgo",{count:r}):`${r}m ago`;let d=Math.floor(r/60);if(d<24)return s?s("common.time.hoursAgo",{count:d}):`${d}h ago`;let i=Math.floor(d/24);return s?s("common.time.daysAgo",{count:i}):`${i}d ago`},dn=n=>n===null?"#d9d9d9":n>=80?"#22c55e":n>=50?"#f59e0b":"#ef4444",gn=ut(({css:n})=>({row:n`
2
- display: flex;
3
- justify-content: space-between;
4
- align-items: flex-end;
5
- `})),Ut={fontSize:16,fontWeight:700,lineHeight:1.2,cursor:"help"},We={fontSize:10,color:"rgba(0, 0, 0, 0.45)",whiteSpace:"nowrap",marginTop:1},Ze={display:"flex",flexDirection:"column",alignItems:"center"},$t=({stats:n})=>{let{styles:s}=gn(),g=_();if(!n)return(0,E.jsxs)("div",{style:{display:"flex",fontSize:11,color:"#d9d9d9"},children:[(0,E.jsx)("span",{style:{flex:1},children:g("governance.cardStats.scoreEmpty")}),(0,E.jsx)("span",{style:{flex:1},children:g("governance.cardStats.threadsEmpty")})]});let r=n.evalScore!==null?Number(n.evalScore).toFixed(1):"\u2014",d=n.threadCount>0?n.threadCount:"\u2014",i=dn(n.evalScore),e=n.evalPassRate!==null?`${n.evalPassRate}%`:"\u2014";return(0,E.jsxs)("div",{className:s.row,children:[(0,E.jsxs)("div",{style:{display:"flex",gap:16,alignItems:"flex-end"},children:[(0,E.jsx)(Re,{title:g("governance.cardStats.evalTooltip",{score:r,passRate:e,runs:n.evalRuns}),children:(0,E.jsxs)("div",{style:Ze,children:[(0,E.jsx)("span",{style:{...Ut,color:i},children:r}),(0,E.jsx)("span",{className:"lattice-stat-label",style:We,children:g("governance.cardStats.evalScore")})]})}),(0,E.jsx)(Re,{title:n.lastActive?g("governance.cardStats.conversationsTooltipActive",{total:n.threadCount,last7d:n.last7d,last30d:n.last30d,lastActive:cn(n.lastActive,g)}):g("governance.cardStats.conversationsTooltip",{total:n.threadCount,last7d:n.last7d,last30d:n.last30d}),children:(0,E.jsxs)("div",{style:Ze,children:[(0,E.jsx)("span",{style:{...Ut,color:d==="\u2014"?"#d9d9d9":"#595959"},children:d}),(0,E.jsx)("span",{className:"lattice-stat-label",style:We,children:g("governance.cardStats.threads")})]})})]}),n.daily7d.length>0&&(0,E.jsxs)("div",{style:Ze,children:[(0,E.jsx)(Et,{values:n.daily7d,width:40,height:24,color:"#8c8c8c"}),(0,E.jsx)("span",{className:"lattice-stat-label",style:We,children:g("governance.cardStats.threads7d")})]})]})};var x=T(M()),pn=[{key:"all",labelKey:"governance.list.tab.all"},{key:"capability",labelKey:"governance.list.tab.capability"},{key:"orchestrator",labelKey:"governance.list.tab.orchestrator"},{key:"team",labelKey:"governance.list.tab.team"},{key:"workflow",labelKey:"governance.list.tab.workflow"}],qt=({items:n,assistants:s=[],stats:g,loading:r,onItemClick:d,onOpenPlayground:i,onOpenEval:e,onCreate:h,onDelete:f})=>{let l=_(),[k,O]=(0,ae.useState)("all"),[G,p]=(0,ae.useState)(null),[C,R]=(0,ae.useState)(null),K=(0,ae.useMemo)(()=>{let o=new Set;return n.forEach(P=>P.tags.forEach(ie=>o.add(ie))),Array.from(o).map(P=>({value:P,label:P}))},[n]),W=(0,ae.useMemo)(()=>n.filter(o=>!(k!=="all"&&o.type!==k||G&&!o.tags.includes(G)||C&&o.status!==C)),[n,k,G,C]),$=[{key:"edit",icon:pt,label:l("common.edit"),onClick:o=>d(o.id)},{key:"playground",icon:rt,label:l("governance.list.action.playground"),onClick:o=>i(o.id)},{key:"eval",icon:ct,label:l("governance.list.action.eval"),onClick:o=>e(o.id)}];f&&$.push({key:"delete",icon:mt,label:l("common.delete"),danger:!0,onClick:o=>f(o.id)});let F=(0,ae.useMemo)(()=>[{mode:"graph",icon:gt,label:l("governance.list.viewMode.graph"),render:()=>(0,x.jsx)(jt,{assistants:s,onNodeClick:d})}],[s,d,l]);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)("span",{"data-testid":"agent-list-state","data-loading":String(r),"data-count":W.length,hidden:!0,"aria-hidden":"true"}),(0,x.jsx)(yt,{title:l("governance.list.title"),itemName:"common.item.agent",items:W,loading:r,keyExtractor:o=>o.id,tabs:pn.map(o=>({key:o.key,label:l(o.labelKey)})),activeTab:k,onTabChange:o=>O(o),headerLeft:(0,x.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,x.jsx)(je,{value:G,onChange:p,options:K,placeholder:l("governance.list.filter.domain"),allLabel:l("governance.list.filter.allDomains")}),(0,x.jsx)(je,{value:C,onChange:R,options:[{value:"enabled",label:l("governance.list.status.enabled")},{value:"draft",label:l("governance.list.status.draft")},{value:"disabled",label:l("governance.list.status.disabled")}],placeholder:l("governance.list.filter.status"),allLabel:l("governance.list.filter.allStatuses")})]}),renderIcon:o=>{let P=Ne(Pe(o.type).color);return(0,x.jsx)("div",{title:l("governance.list.typeIconTitle",{type:o.type}),style:{width:32,height:32,borderRadius:8,background:`${P}1A`,color:P,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:(0,x.jsx)(Fe,{size:18})})},renderPrimary:o=>(0,x.jsx)("span",{"data-testid":"agent-name","data-agent-id":o.id,children:o.name}),renderSecondary:o=>o.description||void 0,renderDetails:o=>(0,x.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:8,flexWrap:"wrap"},children:[(0,x.jsxs)("div",{style:{display:"flex",gap:4,flexWrap:"wrap",alignItems:"center"},children:[o.tags.map(P=>(0,x.jsx)(De,{color:"magenta",style:{margin:0,borderRadius:10,border:"none"},children:P},P)),(0,x.jsx)(De,{color:Pe(o.type).color,style:{margin:0,borderRadius:10,border:"none"},children:o.type})]}),(0,x.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,flexShrink:0},children:[(0,x.jsx)(Re,{title:l("governance.list.statusTooltip",{status:o.status}),children:(0,x.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:Ft(o.status),display:"inline-block",cursor:"help"}})}),(0,x.jsx)("span",{style:{fontSize:12,color:"#8c8c8c"},children:o.version})]})]}),renderFooter:o=>(0,x.jsx)("div",{style:{borderTop:"1px dashed #f0f0f0",paddingTop:10},children:(0,x.jsx)($t,{stats:g?.[o.id]})}),itemActions:$,actionsStyle:"icon",actionsPosition:"hover",onItemClick:o=>d(o.id),createLabel:l("governance.list.create"),onCreateClick:h,viewModeExtensions:F,emptyIcon:(0,x.jsx)(Fe,{size:48,style:{opacity:.5}}),emptyTitle:l("governance.list.emptyTitle"),emptyDescription:l("governance.list.emptyDescription")})]})};var b=T(ye());var de=T(ye());var Ae=T(M()),{Text:mn}=te,Ht=({onSelect:n,value:s,placeholder:g})=>{let r=_(),d=g??r("chatConfig.parentAgent.selectPlaceholder"),[i,e]=(0,de.useState)([]),[h,f]=(0,de.useState)(!1),{get:l}=Ce(),k=(0,de.useCallback)(async()=>{f(!0);try{let p=await l("/api/assistants");p.success&&e(p.data?.records||[])}catch(p){console.error("Failed to fetch assistants:",p)}finally{f(!1)}},[l]);return(0,de.useEffect)(()=>{k()},[k]),(0,Ae.jsx)(Ie,{showSearch:!0,allowClear:!0,value:s,placeholder:d,loading:h,onChange:p=>{if(!p){n(null);return}let C=i.find(R=>R.id===p);n(C||null)},onDropdownVisibleChange:p=>{p&&k()},optionFilterProp:"label",style:{width:"100%"},options:i.map(p=>({value:p.id,label:p.name||p.id,description:p.description})),optionRender:p=>(0,Ae.jsxs)("div",{children:[(0,Ae.jsx)("div",{children:p.label}),p.data.description&&(0,Ae.jsx)(mn,{type:"secondary",style:{fontSize:12},children:p.data.description})]})})};var L=T(M()),{Text:Wt}=te,Zt=({subAgentKeys:n,decisions:s,onChange:g})=>{let{token:r}=tt.useToken(),d=_(),i=(h,f)=>{let l=s.map(k=>k.originalKey===h?{...k,clone:f,cloneKey:f?`${h}_clone`:void 0}:k);g(l)},e=(h,f)=>{let l=s.map(k=>k.originalKey===h?{...k,cloneKey:f}:k);g(l)};return n.length===0?null:(0,L.jsxs)("div",{children:[(0,L.jsx)(Wt,{type:"secondary",style:{display:"block",marginBottom:8},children:d("chatConfig.subAgentInherit.hint")}),(0,L.jsx)(ze,{size:"small",bordered:!0,dataSource:s,style:{borderRadius:r.borderRadius},renderItem:h=>(0,L.jsxs)(ze.Item,{style:{display:"flex",flexDirection:"column",alignItems:"stretch",gap:8,padding:"8px 16px"},children:[(0,L.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,L.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[h.clone?(0,L.jsx)(Be,{style:{color:r.colorPrimary}}):(0,L.jsx)(it,{style:{color:r.colorTextSecondary}}),(0,L.jsx)(Wt,{style:{fontFamily:"monospace"},children:h.originalKey})]}),(0,L.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,L.jsx)(De,{color:h.clone?"blue":"default",children:h.clone?d("chatConfig.subAgentInherit.clone"):d("chatConfig.subAgentInherit.reuse")}),(0,L.jsx)(et,{size:"small",checked:h.clone,onChange:f=>i(h.originalKey,f)})]})]}),h.clone&&(0,L.jsx)(j,{size:"small",placeholder:d("chatConfig.subAgentInherit.cloneKeyPlaceholder"),value:h.cloneKey,onChange:f=>e(h.originalKey,f.target.value),style:{fontFamily:"monospace",fontSize:12},addonBefore:d("chatConfig.keyValue.key")})]})})]})};function Yt(n,s){return n.mode!=="local"||n.templateKey||typeof n.executable=="string"&&n.executable.trim().length>0?null:s?s("chat.config.executableRequired"):"Choose a template or enter a custom executable"}var a=T(M()),{TextArea:Jt}=j,{Text:oe}=te,Qt="/.well-known/agent-card.json",un=[{value:"http://",label:"http://"},{value:"https://",label:"https://"}],fn={react:"chatConfig.createAssistant.typeDesc.react",deep_agent:"chatConfig.createAssistant.typeDesc.deepAgent",team:"chatConfig.createAssistant.typeDesc.team",processing:"chatConfig.createAssistant.typeDesc.processing",a2a_remote:"chatConfig.createAssistant.typeDesc.a2aRemote"};function Xt(n,s,g="https://"){let r=String(n??"").trim();if(!r)return"";let d=s==="http://"||s==="https://"?s:g,e=(/^https?:\/\//i.test(r)?r:`${d}${r.replace(/^\/+/,"")}`).replace(/\/+$/,"");return e.endsWith(Qt)?e:`${e}${Qt}`}function yn(n){try{return new URL(n).port||void 0}catch{return}}function hn(n){return n.some(s=>s==="--port"||s==="-p"||/^--port=/.test(s)||/^-p=/.test(s))}function en(n,s){let g=[...n.args],r=yn(s);return r&&!hn(g)&&g.push("--port",r),{...n,args:g,...n.env?{env:{...n.env}}:{}}}var tn=({open:n,onCancel:s,onSuccess:g,initialMode:r,initialValues:d})=>{let[i]=D.useForm(),e=_(),[h,f]=(0,b.useState)(!1),[l,k]=(0,b.useState)("learn"),[O,G]=(0,b.useState)(""),[p,C]=(0,b.useState)(null),[R,K]=(0,b.useState)([]),W=D.useWatch("type",i)||"react",$=W==="a2a_remote",[F,o]=(0,b.useState)("remote"),[P,ie]=(0,b.useState)(void 0),[ge,be]=(0,b.useState)([]),[pe,me]=(0,b.useState)(!1),Y=(0,b.useRef)(0),[Le,ve]=(0,b.useState)(!1),[Oe,se]=(0,b.useState)(!1),{get:J,post:Z,put:_e}=Ce(),Me=nt("agent-architect"),{workspaceId:z,trainingProjects:ue,loading:ee}=ft(),[Ve,fe]=(0,b.useState)(null),xe=JSON.stringify(d??null),B=ue.find(t=>t.id===Ve)??ue[0]??null,[ke,Te]=(0,b.useState)([]),Ee=(0,b.useCallback)(()=>{C(null),K([])},[]),re=(0,b.useCallback)(()=>{i.resetFields(),Ee(),k("learn"),G(""),Te([]),fe(null),o("remote"),ie(void 0),be([]),se(!1),ve(!1)},[i,Ee]);(0,b.useEffect)(()=>{if(n){re(),k(r??"learn");let t=d?.a2aMode;(t==="remote"||t==="local")&&o(t),i.setFieldsValue({type:"react",agentCardProtocol:"https://",a2aMode:"remote",timeout:3e5,...d})}},[n,i,r,xe,re]),(0,b.useEffect)(()=>{let t=++Y.current,c=!0;return n&&$?(i.setFieldValue("prompt",""),F==="local"?(me(!0),J("/api/local-a2a/templates").then(v=>{c&&t===Y.current&&v?.data?.records&&be(v.data.records)}).catch(()=>{c&&t===Y.current&&be([])}).finally(()=>{c&&t===Y.current&&me(!1)})):me(!1)):me(!1),()=>{c=!1,Y.current+=1}},[i,$,F,J,n]);let le=ge.find(t=>t.key===P),we=(0,b.useCallback)(()=>{let t=Yt({mode:F,templateKey:P,executable:i.getFieldValue("commandExecutable")},e);return t?(se(!0),i.setFields([{name:"commandExecutable",errors:[t]}]),w.warning(t),!1):!0},[F,P,i,e]);(0,b.useEffect)(()=>{le&&i.setFieldsValue({agentCardProtocol:"http://"})},[i,le]);let m=(0,b.useCallback)(async()=>{if(!we())return;let t=Xt(i.getFieldValue("agentCardUrl"),i.getFieldValue("agentCardProtocol"),F==="local"?"http://":"https://");if(!t){w.warning(e("chatConfig.createAssistant.a2aUrlWarning"));return}ve(!0);try{let c={agentCardUrl:t,apiKey:i.getFieldValue("apiKey")};if(F==="local"){let y=le;if(y)c.localRuntime={label:i.getFieldValue("name")||void 0,agentCardUrl:t,command:en(y.command,t)};else{let N=i.getFieldValue("commandArgs")||"",H=N?N.split(/\s+/).filter(Boolean):[],I=String(i.getFieldValue(["command","cwd"])||"").trim();c.localRuntime={label:i.getFieldValue("name")||void 0,agentCardUrl:t,command:{executable:String(i.getFieldValue("commandExecutable")||"").trim(),args:H,...I?{cwd:I}:{}}}}}let v=await Z("/api/a2a/test-connection",c);if(v.data?.reachable){let y=v.data.agentCard;w.success(e("chatConfig.createAssistant.connectedTo",{name:v.data.agentName||t}))}else w.error(v.data?.error||e("chatConfig.createAssistant.connectionFailed"))}catch{w.error(e("chatConfig.createAssistant.connectionTestFailed"))}finally{ve(!1)}},[i,Z,F,le,we,e]),A=(0,b.useCallback)(t=>{if(C(t),!t){i.resetFields(["key","name","description","type","prompt"]),K([]);return}let c=typeof t.graphDefinition=="object"&&t.graphDefinition!==null?t.graphDefinition:{},v=c.key||t.id,y=t.name||c.name||"";i.setFieldsValue({key:`${v}_ext`,name:y?`${y} (Extended)`:"",description:t.description||c.description||"",type:c.type||"react",prompt:c.prompt||""});let N=c.subAgents||[];K(N.map(H=>({originalKey:H,clone:!1})))},[i]),S=async(t,c)=>{let v=await J(`/api/assistants/${t}`);if(!v.success)throw new Error(e("chatConfig.createAssistant.cloneFetchFailed",{key:t}));let y=v.data,N=typeof y.graphDefinition=="object"?y.graphDefinition:{},H={id:c,name:`${y.name} (Clone)`,description:y.description||"",graphDefinition:{...N,key:c,name:`${y.name} (Clone)`}},I=await Z("/api/assistants",H);if(!I.success)throw new Error(I.message||e("chatConfig.createAssistant.cloneFailed",{key:t}));return I.data},q=t=>{let c={id:t.key,name:t.name,description:t.description||"",graphDefinition:{key:t.key,name:t.name,description:t.description||"",type:t.type,prompt:t.prompt||"",tools:[],skills:[],subAgents:t.type==="deep_agent"||t.type==="processing"?[]:void 0,middleware:[]}};if(t.type==="a2a_remote"&&(c.graphDefinition.agentCardUrl=Xt(t.agentCardUrl,t.agentCardProtocol,(t.a2aMode||F)==="local"?"http://":"https://"),t.apiKey&&(c.graphDefinition.apiKey=t.apiKey),t.timeout&&(c.graphDefinition.timeout=t.timeout),(t.a2aMode||F)==="local")){let v=le;if(v)c.graphDefinition.localRuntime={label:t.name||void 0,agentCardUrl:c.graphDefinition.agentCardUrl,command:en(v.command,c.graphDefinition.agentCardUrl)};else{let y=t.commandArgs||"",N=y?y.split(/\s+/).filter(Boolean):[],H=String(t.command?.cwd||"").trim();c.graphDefinition.localRuntime={label:t.name||void 0,agentCardUrl:c.graphDefinition.agentCardUrl,command:{executable:String(t.commandExecutable||"").trim(),args:N,...H?{cwd:H}:{}}}}}return c},Se=async(t,c)=>{if(!p)throw new Error(e("chatConfig.createAssistant.noParentAgent"));let v=R.filter(I=>I.clone);for(let I of v){if(!I.cloneKey||!I.cloneKey.trim())throw new Error(e("chatConfig.createAssistant.cloneKeyRequired",{key:I.originalKey}));if(!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(I.cloneKey))throw new Error(e("chatConfig.createAssistant.cloneKeyInvalid",{key:I.cloneKey,originalKey:I.originalKey}))}let y=[];for(let I of R)if(I.clone){let rn=await S(I.originalKey,I.cloneKey);c.push(rn),y.push(I.cloneKey)}else y.push(I.originalKey);let N=typeof p.graphDefinition=="object"?p.graphDefinition:{},H={key:t.key,name:t.name,description:t.description||"",extendsAgent:p.id,type:t.type||N.type};return t.prompt&&t.prompt!==N.prompt&&(H.prompt=t.prompt),(y.length>0||N.subAgents&&N.subAgents.length>0)&&(H.subAgents=y),{id:t.key,name:t.name,description:t.description||"",graphDefinition:H}},on=async()=>{if(l==="learn"){let t=O.trim();if(!t){w.error(e("chatConfig.createAssistant.trainingGoalRequired"));return}if(!B){w.error(e("chatConfig.createAssistant.noTrainingProject"));return}f(!0);try{let c=`agent-${Bt(t+Date.now())}`,v=await Z("/api/assistants",{id:c,name:c,graphDefinition:{key:c,name:c,description:"",type:"react",prompt:"To be trained",metadata:{trainingProjectId:B.id,learningPlaceholder:"true",architectureStatus:"undecided"}}});if(!v.data)throw new Error(e("chatConfig.createAssistant.agentCreateFailed"));let{roundTaskId:y}=await Lt({goal:t,targetAgentId:c,workspaceId:z??void 0,projectId:B.id,existingThreadId:Nt(Me.tenantId,c),files:ke,post:Z,put:_e});w.success(e("chatConfig.createAssistant.agentCreated")),G(""),Te([]),k("learn"),g?.(v.data,{initialMessage:Ot({goal:t,roundTaskId:y,targetAgentId:c,targetMode:"placeholder",files:ke,projectId:B.id,workspaceId:B.workspaceId??z??void 0}),projectId:B.id,initialMessageCustomRunConfig:{execution:{taskId:y}}}),s()}catch(c){w.error(c instanceof Error?c.message:e("chatConfig.createAssistant.agentCreateFailed"))}finally{f(!1)}return}try{if(l==="scratch"&&$&&!we())return;let t=await i.validateFields();f(!0);let c=[],v=l==="scratch"?q(t):await Se(t,c),y=await Z("/api/assistants",v);if(y.success){w.success(l==="extend"?e("chatConfig.createAssistant.createdByExtending",{name:p?.name??""}):e("chatConfig.createAssistant.created")),re();for(let N of c)g?.(N);g?.(y.data),s()}else w.error(y.message||e("chatConfig.createAssistant.createFailed"))}catch(t){if(t?.errorFields){let c={key:e("chatConfig.createAssistant.field.key"),name:e("chatConfig.createAssistant.field.name"),description:e("chatConfig.createAssistant.field.description"),prompt:e("chatConfig.createAssistant.field.systemPrompt")},v=t.errorFields.map(y=>c[String((y.name??[])[0])]??String((y.name??[])[0])).filter(Boolean);w.warning(v.length>0?e("chatConfig.createAssistant.requiredFields",{fields:[...new Set(v)].join(", ")}):e("chatConfig.createAssistant.requiredFieldsGeneric"));return}w.error(t.message||e("chatConfig.createAssistant.createError"))}finally{f(!1)}},Ye=p?.graphDefinition?.subAgents||[],sn=l==="extend"&&p&&Ye.length>0;return(0,a.jsxs)(he,{title:e("chatConfig.createAssistant.title"),open:n,onCancel:()=>{re(),s()},footer:[(0,a.jsx)(Q,{onClick:()=>{re(),s()},children:e("common.cancel")},"cancel"),(0,a.jsx)(Q,{type:"primary",icon:l==="extend"?(0,a.jsx)(Be,{}):l==="learn"?(0,a.jsx)(ot,{}):(0,a.jsx)(st,{}),loading:h,disabled:l==="learn"&&(ee||!B),onClick:on,children:e(l==="extend"?"chatConfig.createAssistant.createExtend":l==="learn"?"chatConfig.createAssistant.startLearning":"common.create")},"submit")],width:760,children:[l==="extend"&&(0,a.jsxs)("div",{style:{marginBottom:20},children:[(0,a.jsx)(oe,{type:"secondary",style:{display:"block",marginBottom:8},children:e("chatConfig.createAssistant.parentAgent")}),(0,a.jsx)(Ht,{value:p?.id,onSelect:A}),p&&(0,a.jsx)(oe,{type:"secondary",style:{display:"block",marginTop:4,fontSize:12},children:e("chatConfig.createAssistant.inheritHint")})]}),l==="extend"&&p&&(0,a.jsx)(Ge,{style:{margin:"12px 0"}}),l==="learn"&&(0,a.jsxs)("div",{children:[(0,a.jsx)(oe,{style:{display:"block",marginBottom:8},children:e("chatConfig.createAssistant.learnHint")}),(0,a.jsx)(j.TextArea,{rows:3,value:O,onChange:t=>G(t.target.value),placeholder:"e.g. Handle price disputes using the price protection policy"}),B&&(0,a.jsxs)("div",{style:{marginTop:12},children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:8},children:[(0,a.jsx)(oe,{type:"secondary",children:e("chatConfig.createAssistant.referenceFiles")}),(0,a.jsx)(qe,{project:B,projects:ue,value:B?.id??null,onChange:fe,loading:ee})]}),(0,a.jsx)(Kt,{projectId:B.id,value:ke,onChange:Te}),(0,a.jsx)(oe,{type:"secondary",style:{display:"block",marginTop:6,fontSize:12},children:e("chatConfig.createAssistant.referenceFilesHint")})]}),!B&&!ee&&(0,a.jsx)("div",{style:{marginTop:12},children:(0,a.jsx)(qe,{project:B,projects:ue,value:null,onChange:fe,loading:ee})})]}),l!=="learn"&&(0,a.jsxs)(D,{form:i,layout:"vertical",autoComplete:"off",initialValues:{type:"react",agentCardProtocol:"https://",a2aMode:"remote"},children:[(0,a.jsx)(D.Item,{name:"key",label:e("chatConfig.createAssistant.field.key"),rules:[{required:!0,message:e("chatConfig.createAssistant.validation.keyRequired")},{pattern:/^[a-zA-Z][a-zA-Z0-9_-]*$/,message:e("chatConfig.createAssistant.validation.keyPattern")}],style:{marginBottom:16},children:(0,a.jsx)(j,{placeholder:"e.g., my_assistant"})}),(0,a.jsx)(D.Item,{name:"name",label:e("chatConfig.createAssistant.field.name"),rules:[{required:!0,message:e("chatConfig.createAssistant.validation.nameRequired")}],style:{marginBottom:16},children:(0,a.jsx)(j,{placeholder:"e.g., My Assistant"})}),(0,a.jsx)(D.Item,{name:"description",label:e("chatConfig.createAssistant.field.description"),rules:[{required:!0,message:e("chatConfig.createAssistant.validation.descriptionRequired")}],style:{marginBottom:16},children:(0,a.jsx)(Jt,{placeholder:e("chatConfig.createAssistant.descriptionPlaceholder"),autoSize:{minRows:2,maxRows:4}})}),(0,a.jsx)(D.Item,{name:"type",label:e("chatConfig.createAssistant.field.agentType"),rules:[{required:!0}],style:{marginBottom:16},children:(0,a.jsx)(Je,{options:[{value:"react",label:e("chatConfig.agentType.executor")},{value:"deep_agent",label:e("chatConfig.agentType.orchestrator")},{value:"team",label:e("chatConfig.agentType.team")},{value:"processing",label:e("chatConfig.agentType.workflow")},{value:"a2a_remote",label:e("chatConfig.agentType.a2aRemote")}],block:!0})}),(0,a.jsx)(oe,{type:"secondary",style:{fontSize:12,display:"block",marginTop:-12,marginBottom:16,lineHeight:1.5},children:e(fn[W]??"chatConfig.createAssistant.typeDesc.react")}),$&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D.Item,{label:e("chatConfig.createAssistant.field.connectionMode"),style:{marginBottom:16},children:(0,a.jsxs)(Ke.Group,{value:F,onChange:t=>{let c=t.target.value;o(c),i.setFieldValue("a2aMode",c),c==="local"&&i.setFieldValue("agentCardProtocol","http://"),ie(void 0)},optionType:"button",buttonStyle:"solid",children:[(0,a.jsx)(Ke.Button,{value:"remote",children:e("chatConfig.createAssistant.mode.remoteUrl")}),(0,a.jsx)(Ke.Button,{value:"local",children:e("chatConfig.createAssistant.mode.localManaged")})]})}),(0,a.jsx)(D.Item,{name:"a2aMode",noStyle:!0,hidden:!0,children:(0,a.jsx)(j,{})}),F==="local"&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D.Item,{label:e("chatConfig.createAssistant.field.template"),style:{marginBottom:16},children:(0,a.jsx)(Ie,{placeholder:e("chatConfig.createAssistant.templatePlaceholder"),allowClear:!0,loading:pe,value:P,onChange:t=>{ie(t),t&&se(!1)},options:ge.map(t=>({value:t.key,label:t.name||t.key})),notFoundContent:pe?void 0:(0,a.jsx)(oe,{type:"secondary",style:{padding:8,display:"block"},children:e("chatConfig.createAssistant.noTemplates")})})}),!P&&(0,a.jsx)(a.Fragment,{children:Oe?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D.Item,{name:"commandExecutable",label:e("chatConfig.createAssistant.field.executable"),rules:[{required:!0,whitespace:!0,message:e("chatConfig.createAssistant.validation.executableRequired")}],style:{marginBottom:16},children:(0,a.jsx)(j,{placeholder:"e.g. node, opencode, /usr/local/bin/my-server"})}),(0,a.jsx)(D.Item,{name:"commandArgs",label:e("chatConfig.createAssistant.field.arguments"),style:{marginBottom:16},children:(0,a.jsx)(j,{placeholder:"e.g. --serve --port 4301"})}),(0,a.jsx)(D.Item,{name:["command","cwd"],label:e("chatConfig.createAssistant.field.workingDirectory"),style:{marginBottom:16},children:(0,a.jsx)(j,{placeholder:"e.g. /Users/me/project"})}),(0,a.jsx)(Q,{type:"link",onClick:()=>{se(!1),i.setFieldsValue({commandExecutable:"",commandArgs:"",command:{cwd:void 0}})},style:{padding:0,marginBottom:16,display:"block"},children:e("chatConfig.createAssistant.hideCustomCommand")})]}):(0,a.jsx)(Q,{type:"link",onClick:()=>se(!0),style:{padding:0,marginBottom:16,display:"block"},children:e("chatConfig.createAssistant.customCommand")})})]}),(0,a.jsx)(D.Item,{label:e("chatConfig.createAssistant.field.agentCardUrl"),required:!0,style:{marginBottom:16},children:(0,a.jsxs)(Xe.Compact,{style:{width:"100%"},children:[(0,a.jsx)(D.Item,{name:"agentCardProtocol",noStyle:!0,children:(0,a.jsx)(Ie,{style:{width:100},options:un})}),(0,a.jsx)(D.Item,{name:"agentCardUrl",noStyle:!0,rules:[{required:!0,message:e("chatConfig.createAssistant.validation.urlRequired")}],children:(0,a.jsx)(j,{placeholder:F==="local"?"localhost:4301":"host:port or full URL"})}),(0,a.jsx)(Q,{icon:(0,a.jsx)(at,{}),onClick:m,loading:Le,children:e("chatConfig.connection.action.test")})]})}),F==="remote"&&(0,a.jsx)(D.Item,{name:"apiKey",label:e("chatConfig.createAssistant.field.apiKeyOptional"),style:{marginBottom:16},children:(0,a.jsx)(j.Password,{placeholder:e("chatConfig.createAssistant.apiKeyPlaceholder")})}),(0,a.jsx)(D.Item,{name:"timeout",label:e("chatConfig.createAssistant.field.timeout"),style:{marginBottom:16},initialValue:3e5,children:(0,a.jsx)(Qe,{min:1e3,max:36e5,style:{width:"100%"},placeholder:"300000"})})]}),!$&&(0,a.jsx)(D.Item,{name:"prompt",label:e(l==="extend"&&p?"chatConfig.createAssistant.field.systemPromptInherit":"chatConfig.createAssistant.field.systemPrompt"),rules:l==="scratch"?[{required:!0,message:e("chatConfig.createAssistant.validation.systemPromptRequired")}]:[],children:(0,a.jsx)(Jt,{placeholder:e(l==="extend"&&p?"chatConfig.createAssistant.systemPromptInheritPlaceholder":"chatConfig.createAssistant.systemPromptPlaceholder"),autoSize:{minRows:4,maxRows:8},style:{fontFamily:"monospace",fontSize:13,lineHeight:1.6}})})]}),sn&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Ge,{style:{margin:"12px 0"}}),(0,a.jsx)(oe,{strong:!0,style:{display:"block",marginBottom:8},children:e("chatConfig.createAssistant.subAgents")}),(0,a.jsx)(Zt,{subAgentKeys:Ye,decisions:R,onChange:K})]})]})};var V=T(M()),{Paragraph:Cn,Text:nn}=te,An=[{key:"manual",icon:Fe,titleKey:"governance.creation.manual.title",descriptionKey:"governance.creation.manual.description"},{key:"external",icon:lt,titleKey:"governance.creation.external.title",descriptionKey:"governance.creation.external.description"},{key:"learn",icon:dt,titleKey:"governance.creation.learn.title",descriptionKey:"governance.creation.learn.description"}],an=({open:n,onCancel:s,onSelectMethod:g,focusTriggerAfterClose:r=!0})=>{let d=_();return(0,V.jsx)(he,{title:d("governance.creation.title"),open:n,onCancel:s,footer:null,width:560,centered:!0,destroyOnHidden:!0,focusTriggerAfterClose:r,children:(0,V.jsxs)("div",{style:{padding:"8px 4px 4px"},children:[(0,V.jsx)(Cn,{style:{color:"#595959",fontSize:15,margin:"8px 0 24px"},children:d("governance.creation.subtitle")}),(0,V.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:12},children:An.map(i=>{let e=i.icon,h=d(i.titleKey);return(0,V.jsxs)(Q,{type:"default",onClick:()=>g(i.key),"aria-label":h,style:{display:"flex",flexDirection:"row",alignItems:"center",gap:16,width:"100%",minHeight:88,height:"auto",padding:16,borderRadius:16,textAlign:"left",whiteSpace:"normal"},children:[(0,V.jsx)("div",{style:{width:40,height:40,borderRadius:12,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,color:"#6366f1",background:"#eeeeff"},children:(0,V.jsx)(e,{size:19})}),(0,V.jsxs)("div",{style:{minWidth:0},children:[(0,V.jsx)(nn,{strong:!0,style:{display:"block",fontSize:15,marginBottom:3},children:h}),(0,V.jsx)(nn,{style:{color:"#737373",lineHeight:1.5},children:d(i.descriptionKey)})]})]},i.key)})}),(0,V.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,flexWrap:"wrap",marginTop:24},children:(0,V.jsx)(Q,{onClick:s,children:d("governance.creation.notNow")})})]})})};var U=T(M()),bn=n=>{let s=n;if(typeof n=="string")try{s=JSON.parse(n)}catch{return{}}return s!==null&&typeof s=="object"&&!Array.isArray(s)?s:{}},La=()=>{let{get:n,del:s,put:g}=Ce(),r=_(),[d,i]=(0,u.useState)([]),[e,h]=(0,u.useState)({}),[f,l]=(0,u.useState)(null),[k,O]=(0,u.useState)(!1),[G,p]=(0,u.useState)(null),[C,R]=(0,u.useState)("graph"),[K,W]=(0,u.useState)(null),[$,F]=(0,u.useState)(null),[o,P]=(0,u.useState)(null),[ie,ge]=(0,u.useState)(!1),[be,pe]=(0,u.useState)(!0),[me,Y]=(0,u.useState)(!1),[Le,ve]=(0,u.useState)("learn"),[Oe,se]=(0,u.useState)({}),[J,Z]=(0,u.useState)(null),[_e,Me]=(0,u.useState)(!1),z=(0,u.useCallback)(async()=>{O(!0);try{let[m,A]=await Promise.all([n("/api/assistants"),n("/api/assistants/stats").catch(()=>null)]);if(m.success&&m.data?.records&&i(m.data.records),A?.success&&A.data?.records){let S={};for(let q of A.data.records)S[q.id]=q;h(S),l(A.cache?.expiresAt??null)}}catch{w.error(r("governance.workbench.loadFailed"))}finally{O(!1)}},[n,r]);(0,u.useEffect)(()=>{z()},[z]);let ue=u.default.useMemo(()=>Pt(d),[d]),ee=d.find(m=>m.id===G)??null,Ve=(0,u.useCallback)((m,A="graph")=>{p(m),R(A),W(null),P(null)},[]),fe=xt(),xe=(0,u.useCallback)((m,A)=>{let S=d.find(q=>q.id===m)?.name??r("governance.workbench.agentFallback");fe({component_key:"agent_detail_side_app",data:{assistantId:m,initialTab:A},message:S})},[d,fe,r]),B=(0,u.useCallback)(()=>{pe(!0),ge(!0)},[]),ke=(0,u.useCallback)(m=>{let S={manual:{mode:"scratch",values:{}},external:{mode:"scratch",values:{type:"a2a_remote"}},learn:{mode:"learn",values:{}}}[m];ve(S.mode),se(S.values),pe(!1),ge(!1),Y(!0)},[]),Te=(0,u.useCallback)(async(m,A)=>{let S=bn(m.graphDefinition),q;try{q=await g(`/api/assistants/${m.id}`,{name:A.name!==void 0?A.name:m.name,description:A.description!==void 0?A.description:m.description,graphDefinition:{...S,...A}})}catch(Se){throw w.error(r("governance.detail.saveFailed")),Se}if(!q.success)throw w.error(r("governance.detail.saveFailed")),new Error("Failed to save agent");w.success(r("common.saved")),z()},[g,z,r]),Ee=(0,u.useCallback)(m=>{i(A=>A.map(S=>S.id===m.id?m:S))},[]),re=(0,u.useCallback)(m=>{Z(m)},[]),le=(0,u.useCallback)(async()=>{if(J){Me(!0);try{(await s(`/api/assistants/${J}`)).success?(w.success(r("governance.detail.deleted")),i(A=>A.filter(S=>S.id!==J)),z(),Z(null)):w.error(r("governance.detail.deleteFailed"))}catch{w.error(r("governance.detail.deleteFailed"))}finally{Me(!1)}}},[J,s,z,r]),we=(0,u.useCallback)(async m=>{if(!(await s(`/api/assistants/${m}`)).success)throw new Error("Failed to delete agent");w.success(r("governance.detail.deleted")),i(S=>S.filter(q=>q.id!==m)),z()},[s,z,r]);return(0,U.jsxs)("div",{style:{height:"100%",background:"#fafafa",overflow:"hidden"},children:[ee?(0,U.jsx)(Dt,{defaultProjectId:o??void 0,children:(0,U.jsx)(_t,{assistant:ee,allAssistants:d,onBack:()=>p(null),onDeleted:we,onSave:Te,onAssistantUpdated:Ee,onAgentListInvalidated:z,initialTab:C,initialMessage:K,initialMessageCustomRunConfig:$,initialProjectId:o})},ee.id):(0,U.jsx)(U.Fragment,{children:(0,U.jsx)(qt,{items:ue,assistants:d,stats:e,statsExpiresAt:f,loading:k,onItemClick:m=>xe(m,"graph"),onOpenPlayground:m=>xe(m,"playground"),onOpenEval:m=>xe(m,"eval"),onCreate:B,onDelete:re})}),(0,U.jsx)(an,{open:ie,onCancel:()=>{pe(!0),ge(!1)},onSelectMethod:ke,focusTriggerAfterClose:be}),(0,U.jsx)(tn,{open:me,initialMode:Le,initialValues:Oe,onCancel:()=>Y(!1),onSuccess:(m,A)=>{Y(!1),i(S=>S.some(Se=>Se.id===m.id)?S:[m,...S]),Ve(m.id,"graph"),W(A?.initialMessage??null),F(A?.initialMessageCustomRunConfig??null),P(A?.projectId??null),z()}}),(0,U.jsx)(he,{title:r("governance.deleteAgent"),open:J!==null,onCancel:()=>Z(null),onOk:le,okText:r("common.delete"),okButtonProps:{danger:!0,loading:_e},cancelText:r("common.cancel"),children:(0,U.jsx)("p",{children:r("governance.delete.irreversible")})})]})};export{La as AgentGovernanceWorkbench};