@axiom-lattice/react-sdk 4.11.2 → 6.0.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 (77) hide show
  1. package/dist/{AgentDetailSideApp-GSO53ECQ.mjs → AgentDetailSideApp-QZPV7MNB.mjs} +8 -8
  2. package/dist/AgentGovernanceWorkbench-25C3AKQI.mjs +20 -0
  3. package/dist/{MessageGraph-RUU5W4OT.mjs → MessageGraph-JX6Y3VFH.mjs} +4 -4
  4. package/dist/{ReactChart-KU4TD7TM.mjs → ReactChart-LYUXL5M6.mjs} +4 -4
  5. package/dist/{SkillFlow-MLSQCF4X.mjs → SkillFlow-7OCWAF5V.mjs} +4 -4
  6. package/dist/{TasksSideApp-LWM6XAWN.mjs → TasksSideApp-TWDLVB4D.mjs} +5 -7
  7. package/dist/TasksSideApp-TWDLVB4D.mjs.map +1 -0
  8. package/dist/{TeamWorkspace-3NLKUNRK.mjs → TeamWorkspace-FGFAUD5Z.mjs} +4 -4
  9. package/dist/{TopologyRuntimeView-NVFFMHTP.mjs → TopologyRuntimeView-O3VL4A7R.mjs} +5 -5
  10. package/dist/{WorkflowAutomationView-WBVKM73F.mjs → WorkflowAutomationView-D4YMZLRJ.mjs} +7 -7
  11. package/dist/{chunk-YDIVRYML.mjs → chunk-3ZEMSWAC.mjs} +4 -4
  12. package/dist/{chunk-ZX53OESZ.mjs → chunk-466FV4VM.mjs} +3 -3
  13. package/dist/{chunk-QM3NPPQJ.mjs → chunk-6BWBE7MR.mjs} +8 -8
  14. package/dist/{chunk-PMICYMSW.mjs → chunk-7JDWJZ5M.mjs} +1176 -944
  15. package/dist/chunk-7JDWJZ5M.mjs.map +1 -0
  16. package/dist/{chunk-RDC4ZHXF.mjs → chunk-IFRTNJ2P.mjs} +2 -2
  17. package/dist/{chunk-PEEXMLMK.mjs → chunk-IODHU3BD.mjs} +3 -3
  18. package/dist/{chunk-NRT6JXPT.mjs → chunk-JJIGSAPR.mjs} +129 -222
  19. package/dist/chunk-JJIGSAPR.mjs.map +1 -0
  20. package/dist/{chunk-BXPPM4ZX.mjs → chunk-QABSNIMF.mjs} +3 -3
  21. package/dist/{chunk-ZQ7G446O.mjs → chunk-UDSGQ7R7.mjs} +3 -3
  22. package/dist/{chunk-ZXEY5OGX.mjs → chunk-UZWBRDTU.mjs} +6 -6
  23. package/dist/{embed-page-AgentDetailSideApp-FHC56ARN.js → embed-page-AgentDetailSideApp-JYVZKSUU.js} +1 -1
  24. package/dist/embed-page-AgentGovernanceWorkbench-SD2EHW2B.js +1 -0
  25. package/dist/{embed-page-MessageGraph-DMP5EZBM.js → embed-page-MessageGraph-GLQXKAVC.js} +1 -1
  26. package/dist/{embed-page-ReactChart-PYGNSRHG.js → embed-page-ReactChart-74MHCE2K.js} +1 -1
  27. package/dist/{embed-page-SkillFlow-6LPE2VG3.js → embed-page-SkillFlow-NDAK3GAD.js} +1 -1
  28. package/dist/{embed-page-TasksSideApp-MPYOPRXW.js → embed-page-TasksSideApp-DA4LUTMD.js} +5 -5
  29. package/dist/{embed-page-TeamWorkspace-EXUAXKAH.js → embed-page-TeamWorkspace-DUB3L6V6.js} +1 -1
  30. package/dist/{embed-page-TopologyRuntimeView-MH4YMU7D.js → embed-page-TopologyRuntimeView-NFBHAICN.js} +1 -1
  31. package/dist/{embed-page-WorkflowAutomationView-KQYFSLLH.js → embed-page-WorkflowAutomationView-43YGTXGF.js} +1 -1
  32. package/dist/{embed-page-chunk-O44JEYLD.js → embed-page-chunk-2PFKLMTR.js} +5 -5
  33. package/dist/{embed-page-chunk-NW37OVAX.js → embed-page-chunk-BVSC3MSO.js} +1 -1
  34. package/dist/{embed-page-chunk-YQZI5LNV.js → embed-page-chunk-C4ZV4IXK.js} +2 -2
  35. package/dist/{embed-page-chunk-QGXGVLAX.js → embed-page-chunk-DWIBLGBW.js} +1 -1
  36. package/dist/{embed-page-chunk-I7BVN6EY.js → embed-page-chunk-GKHIPXZ2.js} +1 -1
  37. package/dist/{embed-page-chunk-QHXKZNDU.js → embed-page-chunk-P477ZTUO.js} +307 -191
  38. package/dist/{embed-page-chunk-JSAUTBU5.js → embed-page-chunk-UHH575CK.js} +1 -1
  39. package/dist/{embed-page-en-PQZ2ZCEH.js → embed-page-en-GLT2HEZZ.js} +1 -1
  40. package/dist/{embed-page-zh-D3EX4GW4.js → embed-page-zh-XMEJPDMF.js} +1 -1
  41. package/dist/embed-page.js +1 -1
  42. package/dist/{en-WQVDOIB7.mjs → en-FDNQNTHX.mjs} +7 -2
  43. package/dist/{en-WQVDOIB7.mjs.map → en-FDNQNTHX.mjs.map} +1 -1
  44. package/dist/index.d.mts +24 -26
  45. package/dist/index.d.ts +24 -26
  46. package/dist/index.js +2806 -2782
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs +92 -222
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/web-app.js +12 -2
  51. package/dist/web-app.js.map +1 -1
  52. package/dist/web-app.mjs +1 -1
  53. package/dist/{zh-6PHD4AY5.mjs → zh-2EJFFUSY.mjs} +7 -2
  54. package/dist/zh-2EJFFUSY.mjs.map +1 -0
  55. package/package.json +2 -2
  56. package/dist/AgentGovernanceWorkbench-LHXFBEYO.mjs +0 -20
  57. package/dist/TasksSideApp-LWM6XAWN.mjs.map +0 -1
  58. package/dist/chunk-NRT6JXPT.mjs.map +0 -1
  59. package/dist/chunk-PMICYMSW.mjs.map +0 -1
  60. package/dist/embed-page-AgentGovernanceWorkbench-KAPZJBE6.js +0 -5
  61. package/dist/zh-6PHD4AY5.mjs.map +0 -1
  62. /package/dist/{AgentDetailSideApp-GSO53ECQ.mjs.map → AgentDetailSideApp-QZPV7MNB.mjs.map} +0 -0
  63. /package/dist/{AgentGovernanceWorkbench-LHXFBEYO.mjs.map → AgentGovernanceWorkbench-25C3AKQI.mjs.map} +0 -0
  64. /package/dist/{MessageGraph-RUU5W4OT.mjs.map → MessageGraph-JX6Y3VFH.mjs.map} +0 -0
  65. /package/dist/{ReactChart-KU4TD7TM.mjs.map → ReactChart-LYUXL5M6.mjs.map} +0 -0
  66. /package/dist/{SkillFlow-MLSQCF4X.mjs.map → SkillFlow-7OCWAF5V.mjs.map} +0 -0
  67. /package/dist/{TeamWorkspace-3NLKUNRK.mjs.map → TeamWorkspace-FGFAUD5Z.mjs.map} +0 -0
  68. /package/dist/{TopologyRuntimeView-NVFFMHTP.mjs.map → TopologyRuntimeView-O3VL4A7R.mjs.map} +0 -0
  69. /package/dist/{WorkflowAutomationView-WBVKM73F.mjs.map → WorkflowAutomationView-D4YMZLRJ.mjs.map} +0 -0
  70. /package/dist/{chunk-YDIVRYML.mjs.map → chunk-3ZEMSWAC.mjs.map} +0 -0
  71. /package/dist/{chunk-ZX53OESZ.mjs.map → chunk-466FV4VM.mjs.map} +0 -0
  72. /package/dist/{chunk-QM3NPPQJ.mjs.map → chunk-6BWBE7MR.mjs.map} +0 -0
  73. /package/dist/{chunk-RDC4ZHXF.mjs.map → chunk-IFRTNJ2P.mjs.map} +0 -0
  74. /package/dist/{chunk-PEEXMLMK.mjs.map → chunk-IODHU3BD.mjs.map} +0 -0
  75. /package/dist/{chunk-BXPPM4ZX.mjs.map → chunk-QABSNIMF.mjs.map} +0 -0
  76. /package/dist/{chunk-ZQ7G446O.mjs.map → chunk-UDSGQ7R7.mjs.map} +0 -0
  77. /package/dist/{chunk-ZXEY5OGX.mjs.map → chunk-UZWBRDTU.mjs.map} +0 -0
@@ -0,0 +1 @@
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/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 { 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 [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 = await get<{ success: boolean; data: { records: Assistant[] } }>(\"/api/assistants\");\n if (listRes.success && listRes.data?.records) {\n setAssistants(listRes.data.records);\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 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 { 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 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 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 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, { 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","jsx","jsxs","jsx","jsxs","useState","useMemo","t","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"]}
@@ -4,10 +4,10 @@ import {
4
4
  TaskActionsButton,
5
5
  isHiddenStatus,
6
6
  taskOrigin
7
- } from "./chunk-PMICYMSW.mjs";
7
+ } from "./chunk-7JDWJZ5M.mjs";
8
8
  import {
9
9
  useT
10
- } from "./chunk-PEEXMLMK.mjs";
10
+ } from "./chunk-IODHU3BD.mjs";
11
11
 
12
12
  // src/components/Tasks/TaskOutlineList.tsx
13
13
  import {
@@ -491,4 +491,4 @@ var TaskOutlineList = ({
491
491
  export {
492
492
  TaskOutlineList
493
493
  };
494
- //# sourceMappingURL=chunk-BXPPM4ZX.mjs.map
494
+ //# sourceMappingURL=chunk-QABSNIMF.mjs.map
@@ -14,10 +14,10 @@ import {
14
14
  useApi,
15
15
  useClient,
16
16
  useLatticeChatShellContext
17
- } from "./chunk-RDC4ZHXF.mjs";
17
+ } from "./chunk-IFRTNJ2P.mjs";
18
18
  import {
19
19
  useT
20
- } from "./chunk-PEEXMLMK.mjs";
20
+ } from "./chunk-IODHU3BD.mjs";
21
21
 
22
22
  // src/components/Chat/SkillFlow.tsx
23
23
  import { useMemo as useMemo2, useEffect as useEffect2, useState as useState2 } from "react";
@@ -1172,4 +1172,4 @@ export {
1172
1172
  SkillNode_default,
1173
1173
  SkillFlow_default
1174
1174
  };
1175
- //# sourceMappingURL=chunk-ZQ7G446O.mjs.map
1175
+ //# sourceMappingURL=chunk-UDSGQ7R7.mjs.map
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  CopilotPanel,
3
3
  TrainingContextCard
4
- } from "./chunk-YDIVRYML.mjs";
4
+ } from "./chunk-3ZEMSWAC.mjs";
5
5
  import {
6
6
  WorkflowCanvas_default,
7
7
  expandWorkflow
8
- } from "./chunk-ZX53OESZ.mjs";
8
+ } from "./chunk-466FV4VM.mjs";
9
9
  import {
10
10
  MDResponse,
11
11
  ProjectScopeProvider,
12
12
  useWorkspaceContext
13
- } from "./chunk-PMICYMSW.mjs";
13
+ } from "./chunk-7JDWJZ5M.mjs";
14
14
  import {
15
15
  ReactFlowProvider
16
16
  } from "./chunk-XC6TB6PI.mjs";
17
17
  import {
18
18
  useApi
19
- } from "./chunk-RDC4ZHXF.mjs";
19
+ } from "./chunk-IFRTNJ2P.mjs";
20
20
  import {
21
21
  useT
22
- } from "./chunk-PEEXMLMK.mjs";
22
+ } from "./chunk-IODHU3BD.mjs";
23
23
 
24
24
  // src/components/Chat/WorkflowAutomationView.tsx
25
25
  import { useEffect as useEffect2, useState as useState2, useCallback, useMemo as useMemo2, useRef } from "react";
@@ -1296,4 +1296,4 @@ export {
1296
1296
  WorkflowAutomationView,
1297
1297
  WorkflowAutomationView_default
1298
1298
  };
1299
- //# sourceMappingURL=chunk-ZXEY5OGX.mjs.map
1299
+ //# sourceMappingURL=chunk-UZWBRDTU.mjs.map
@@ -1 +1 @@
1
- import{l as L}from"./embed-page-chunk-YQZI5LNV.js";import"./embed-page-chunk-NW37OVAX.js";import"./embed-page-chunk-I7BVN6EY.js";import"./embed-page-chunk-JSAUTBU5.js";import"./embed-page-chunk-WTOAQDQN.js";import"./embed-page-chunk-V2GBFWLG.js";import"./embed-page-chunk-S4XZPBRM.js";import"./embed-page-chunk-QGXGVLAX.js";import{Da as P,pb as E}from"./embed-page-chunk-QHXKZNDU.js";import{D as F,r as T}from"./embed-page-chunk-O44JEYLD.js";import{a as C}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{U as p,W as m,oa as b,va as I,xa as c}from"./embed-page-chunk-MHGVD4EV.js";import{a as N}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 u}from"./embed-page-chunk-QBTAJ2YI.js";var n=u(N());var t=u(C()),O={component_key:"workspace_assistants",data:{}},$=d=>{let i=d;if(typeof d=="string")try{i=JSON.parse(d)}catch{return{}}return i!==null&&typeof i=="object"&&!Array.isArray(i)?i:{}},W=({data:d})=>{let{assistantId:i,initialTab:R}=d??{},{get:f,put:y,del:A}=F(),e=T(),v=P(),[g,w]=(0,n.useState)(null),[B,h]=(0,n.useState)([]),[_,S]=(0,n.useState)(!1),[j,k]=(0,n.useState)(null),l=(0,n.useCallback)(()=>{v({...O,message:e("governance.detail.listCardMessage")})},[v,e]),o=(0,n.useCallback)(async()=>{S(!0),k(null);try{let s=(await f("/api/assistants")).data?.records??[];h(s),w(s.find(r=>r.id===i)??null)}catch{k(e("governance.detail.loadFailed"))}finally{S(!1)}},[f,i,e]);(0,n.useEffect)(()=>{i&&o()},[o,i]);let x=(0,n.useCallback)(async(a,s)=>{let r=$(a.graphDefinition),D;try{D=await y(`/api/assistants/${a.id}`,{name:s.name!==void 0?s.name:a.name,description:s.description!==void 0?s.description:a.description,graphDefinition:{...r,...s}})}catch(G){throw c.error(e("governance.detail.saveFailed")),G}if(!D.success)throw c.error(e("governance.detail.saveFailed")),new Error("Failed to save agent");c.success(e("common.saved")),await o()},[y,o,e]),z=(0,n.useCallback)(a=>{w(s=>s&&s.id===a.id?a:s),h(s=>s.map(r=>r.id===a.id?a:r))},[]),U=(0,n.useCallback)(async a=>{if(!(await A(`/api/assistants/${a}`)).success)throw new Error("Failed to delete agent");c.success(e("governance.detail.deleted")),l()},[A,l,e]);return i?g?(0,t.jsx)("div",{style:{height:"100%",overflow:"auto"},children:(0,t.jsx)(E,{children:(0,t.jsx)(L,{assistant:g,allAssistants:B,onBack:l,onDeleted:U,onSave:x,onAssistantUpdated:z,onAgentListInvalidated:()=>void o(),initialTab:R})},g.id)}):_?(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:(0,t.jsx)(I,{})}):j?(0,t.jsx)("div",{style:{padding:24},children:(0,t.jsx)(p,{type:"error",showIcon:!0,message:e("governance.detail.loadFailed"),"data-testid":"detail-error",action:(0,t.jsxs)(b,{children:[(0,t.jsx)(m,{size:"small",onClick:()=>void o(),children:e("common.retry")}),(0,t.jsx)(m,{size:"small",type:"primary",onClick:l,children:e("governance.detail.backToList")})]})})}):(0,t.jsx)("div",{style:{padding:24},children:(0,t.jsx)(p,{type:"warning",showIcon:!0,message:e("governance.detail.notFound"),"data-testid":"detail-not-found",action:(0,t.jsx)(m,{size:"small",type:"primary",onClick:l,children:e("governance.detail.backToList")})})}):(0,t.jsx)("div",{style:{padding:24},children:(0,t.jsx)(p,{type:"warning",showIcon:!0,message:e("governance.detail.missingId"),"data-testid":"detail-missing-id"})})};export{W as AgentDetailSideApp};
1
+ import{k as L}from"./embed-page-chunk-C4ZV4IXK.js";import"./embed-page-chunk-BVSC3MSO.js";import"./embed-page-chunk-GKHIPXZ2.js";import"./embed-page-chunk-UHH575CK.js";import"./embed-page-chunk-WTOAQDQN.js";import"./embed-page-chunk-V2GBFWLG.js";import"./embed-page-chunk-S4XZPBRM.js";import"./embed-page-chunk-DWIBLGBW.js";import{Da as P,pb as E}from"./embed-page-chunk-P477ZTUO.js";import{D as F,r as T}from"./embed-page-chunk-2PFKLMTR.js";import{a as C}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{U as p,W as m,oa as b,va as I,xa as c}from"./embed-page-chunk-MHGVD4EV.js";import{a as N}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 u}from"./embed-page-chunk-QBTAJ2YI.js";var n=u(N());var t=u(C()),O={component_key:"workspace_assistants",data:{}},$=d=>{let i=d;if(typeof d=="string")try{i=JSON.parse(d)}catch{return{}}return i!==null&&typeof i=="object"&&!Array.isArray(i)?i:{}},W=({data:d})=>{let{assistantId:i,initialTab:R}=d??{},{get:f,put:y,del:A}=F(),e=T(),v=P(),[g,w]=(0,n.useState)(null),[B,h]=(0,n.useState)([]),[_,S]=(0,n.useState)(!1),[j,k]=(0,n.useState)(null),l=(0,n.useCallback)(()=>{v({...O,message:e("governance.detail.listCardMessage")})},[v,e]),o=(0,n.useCallback)(async()=>{S(!0),k(null);try{let s=(await f("/api/assistants")).data?.records??[];h(s),w(s.find(r=>r.id===i)??null)}catch{k(e("governance.detail.loadFailed"))}finally{S(!1)}},[f,i,e]);(0,n.useEffect)(()=>{i&&o()},[o,i]);let x=(0,n.useCallback)(async(a,s)=>{let r=$(a.graphDefinition),D;try{D=await y(`/api/assistants/${a.id}`,{name:s.name!==void 0?s.name:a.name,description:s.description!==void 0?s.description:a.description,graphDefinition:{...r,...s}})}catch(G){throw c.error(e("governance.detail.saveFailed")),G}if(!D.success)throw c.error(e("governance.detail.saveFailed")),new Error("Failed to save agent");c.success(e("common.saved")),await o()},[y,o,e]),z=(0,n.useCallback)(a=>{w(s=>s&&s.id===a.id?a:s),h(s=>s.map(r=>r.id===a.id?a:r))},[]),U=(0,n.useCallback)(async a=>{if(!(await A(`/api/assistants/${a}`)).success)throw new Error("Failed to delete agent");c.success(e("governance.detail.deleted")),l()},[A,l,e]);return i?g?(0,t.jsx)("div",{style:{height:"100%",overflow:"auto"},children:(0,t.jsx)(E,{children:(0,t.jsx)(L,{assistant:g,allAssistants:B,onBack:l,onDeleted:U,onSave:x,onAssistantUpdated:z,onAgentListInvalidated:()=>void o(),initialTab:R})},g.id)}):_?(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:(0,t.jsx)(I,{})}):j?(0,t.jsx)("div",{style:{padding:24},children:(0,t.jsx)(p,{type:"error",showIcon:!0,message:e("governance.detail.loadFailed"),"data-testid":"detail-error",action:(0,t.jsxs)(b,{children:[(0,t.jsx)(m,{size:"small",onClick:()=>void o(),children:e("common.retry")}),(0,t.jsx)(m,{size:"small",type:"primary",onClick:l,children:e("governance.detail.backToList")})]})})}):(0,t.jsx)("div",{style:{padding:24},children:(0,t.jsx)(p,{type:"warning",showIcon:!0,message:e("governance.detail.notFound"),"data-testid":"detail-not-found",action:(0,t.jsx)(m,{size:"small",type:"primary",onClick:l,children:e("governance.detail.backToList")})})}):(0,t.jsx)("div",{style:{padding:24},children:(0,t.jsx)(p,{type:"warning",showIcon:!0,message:e("governance.detail.missingId"),"data-testid":"detail-missing-id"})})};export{W as AgentDetailSideApp};
@@ -0,0 +1 @@
1
+ import{a as Ie,b as De,c as kt,d as xt,e as wt,f as Tt,g as It,h as St,i as Ft,j as Rt,k as Dt}from"./embed-page-chunk-C4ZV4IXK.js";import{a as Ve}from"./embed-page-chunk-BVSC3MSO.js";import"./embed-page-chunk-GKHIPXZ2.js";import"./embed-page-chunk-UHH575CK.js";import"./embed-page-chunk-WTOAQDQN.js";import{b as Oe,e as _e,f as ft,g as yt,h as ht,i as Ct,l as At,m as bt}from"./embed-page-chunk-V2GBFWLG.js";import{a as ct,b as dt,c as gt,d as pt,e as mt}from"./embed-page-chunk-SV2BM3WO.js";import"./embed-page-chunk-S4XZPBRM.js";import"./embed-page-chunk-DWIBLGBW.js";import{$ as it,Aa as lt,C as tt,Da as ut,F as nt,L as at,Oa as Ne,X as ot,g as Te,ka as st,pb as vt,s as et,sa as rt}from"./embed-page-chunk-P477ZTUO.js";import{D as me,r as z,y as Ze}from"./embed-page-chunk-2PFKLMTR.js";import{a as E}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{$b as Re,Cb as Je,Fa as $e,Ia as we,Ja as We,La as X,Ua as Ye,W,_ as xe,aa as je,ea as Fe,ka as Be,la as Ue,lc as Qe,ma as qe,oa as He,ra as D,ta as _,wa as Le,xa as w,xc as Xe,ya as pe}from"./embed-page-chunk-MHGVD4EV.js";import{a as ge}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 I}from"./embed-page-chunk-QBTAJ2YI.js";var h=I(ge());var te=I(ge());var Z=I(ge());var Pt=I(ge());var se=I(E()),Mt=60,Et=72,Ge=(0,Pt.memo)(({data:i})=>{let l=Ie(i.type),f=Math.min(12+Math.sqrt(i.subAgentCount)*10,48);return(0,se.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center"},children:[(0,se.jsx)(_e,{type:"target",position:Oe.Top,style:{left:"50%",top:"50%",transform:"translate(-50%, -50%)",background:"transparent",border:"none",width:0,height:0},isConnectable:!1}),(0,se.jsx)("div",{title:i.label,style:{width:f,height:f,borderRadius:"50%",background:De(l.color),display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:Math.max(10,f*.4),fontWeight:600,cursor:"pointer",boxShadow:"0 2px 8px rgba(0,0,0,0.15)"},children:i.label.charAt(0).toUpperCase()}),(0,se.jsx)("div",{style:{fontSize:11,maxWidth:120,textAlign:"center",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:4},children:i.label}),(0,se.jsx)(_e,{type:"source",position:Oe.Top,style:{left:"50%",top:"50%",transform:"translate(-50%, -50%)",background:"transparent",border:"none",width:0,height:0},isConnectable:!1})]})});Ge.displayName="AgentGraphNode";var ee=I(E()),en=({assistants:i,onNodeClick:l})=>{let[f,c,u]=ht([]),[o,t,C]=Ct([]),[r,m]=(0,Z.useState)(null),S=(0,Z.useMemo)(()=>({agent:Ge}),[]),M=(0,Z.useMemo)(()=>wt(i),[i]);(0,Z.useEffect)(()=>{let k=M.nodes.map(g=>({id:g.id})),R=M.edges.map(g=>({source:g.source,target:g.target})),P=new Map(M.nodes.map(g=>[g.id,g])),$=pt(k).force("link",gt(R).id(g=>g.id).distance(80)).force("charge",mt().strength(-220)).force("center",ct(0,0)).force("collide",dt(45)).stop();for(let g=0;g<300;g++)$.tick();let j=k.map(g=>({id:g.id,type:"agent",data:P.get(g.id),position:{x:g.x-Mt/2,y:g.y-Et/2}})),a=M.edges.map(g=>({id:`e${g.source}-${g.target}`,source:g.source,target:g.target,style:{stroke:"#1677ff",strokeWidth:2},type:"straight"}));c(j),t(a)},[M,c,t]);let H=(0,Z.useMemo)(()=>r===null?f:f.map(k=>{let R=k.id===r||o.some(P=>P.source===r&&P.target===k.id||P.target===r&&P.source===k.id);return{...k,style:{opacity:R?1:.2,transition:"opacity 0.2s ease"}}}),[f,o,r]),d=(0,Z.useMemo)(()=>r===null?o.map(k=>({...k,style:{stroke:"#1677ff",strokeWidth:1.5,opacity:.25,transition:"opacity 0.2s ease"}})):o.map(k=>{let R=k.source===r||k.target===r;return{...k,style:{stroke:"#1677ff",strokeWidth:R?2.5:1,opacity:R?1:.04,transition:"opacity 0.2s ease"}}}),[o,r]);return(0,ee.jsx)("div",{style:{width:"100%",height:"100%",background:"#fafafa",position:"relative"},children:(0,ee.jsxs)(yt,{nodes:H,edges:d,onNodesChange:u,onEdgesChange:C,onNodeMouseEnter:(k,R)=>m(R.id),onNodeMouseLeave:()=>m(null),onNodeClick:(k,R)=>l?.(String(R.id)),nodeTypes:S,fitView:!0,fitViewOptions:{padding:.25},children:[(0,ee.jsx)(At,{color:"#eee",gap:20}),(0,ee.jsx)(bt,{})]})})},Kt=i=>(0,ee.jsx)(ft,{children:(0,ee.jsx)(en,{...i})});var T=I(E()),tn=[{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"}],Bt=({items:i,assistants:l=[],loading:f,onItemClick:c,onOpenPlayground:u,onOpenEval:o,onCreate:t,onDelete:C})=>{let r=z(),[m,S]=(0,te.useState)("all"),[M,H]=(0,te.useState)(null),[d,k]=(0,te.useState)(null),R=(0,te.useMemo)(()=>{let a=new Set;return i.forEach(g=>g.tags.forEach(U=>a.add(U))),Array.from(a).map(g=>({value:g,label:g}))},[i]),P=(0,te.useMemo)(()=>i.filter(a=>!(m!=="all"&&a.type!==m||M&&!a.tags.includes(M)||d&&a.status!==d)),[i,m,M,d]),$=[{key:"edit",icon:it,label:r("common.edit"),onClick:a=>c(a.id)},{key:"playground",icon:et,label:r("governance.list.action.playground"),onClick:a=>u(a.id)},{key:"eval",icon:nt,label:r("governance.list.action.eval"),onClick:a=>o(a.id)}];C&&$.push({key:"delete",icon:st,label:r("common.delete"),danger:!0,onClick:a=>C(a.id)});let j=(0,te.useMemo)(()=>[{mode:"graph",icon:ot,label:r("governance.list.viewMode.graph"),render:()=>(0,T.jsx)(Kt,{assistants:l,onNodeClick:c})}],[l,c,r]);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)("span",{"data-testid":"agent-list-state","data-loading":String(f),"data-count":P.length,hidden:!0,"aria-hidden":"true"}),(0,T.jsx)(lt,{title:r("governance.list.title"),itemName:"common.item.agent",items:P,loading:f,keyExtractor:a=>a.id,tabs:tn.map(a=>({key:a.key,label:r(a.labelKey)})),activeTab:m,onTabChange:a=>S(a),headerLeft:(0,T.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,T.jsx)(Ne,{value:M,onChange:H,options:R,placeholder:r("governance.list.filter.domain"),allLabel:r("governance.list.filter.allDomains")}),(0,T.jsx)(Ne,{value:d,onChange:k,options:[{value:"enabled",label:r("governance.list.status.enabled")},{value:"draft",label:r("governance.list.status.draft")},{value:"disabled",label:r("governance.list.status.disabled")}],placeholder:r("governance.list.filter.status"),allLabel:r("governance.list.filter.allStatuses")})]}),renderIcon:a=>{let g=De(Ie(a.type).color);return(0,T.jsx)("div",{title:r("governance.list.typeIconTitle",{type:a.type}),style:{width:32,height:32,borderRadius:8,background:`${g}1A`,color:g,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:(0,T.jsx)(Te,{size:18})})},renderPrimary:a=>(0,T.jsx)("span",{"data-testid":"agent-name","data-agent-id":a.id,children:a.name}),renderSecondary:a=>a.description||void 0,renderDetails:a=>(0,T.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:8,flexWrap:"wrap"},children:[(0,T.jsxs)("div",{style:{display:"flex",gap:4,flexWrap:"wrap",alignItems:"center"},children:[a.tags.map(g=>(0,T.jsx)(we,{color:"magenta",style:{margin:0,borderRadius:10,border:"none"},children:g},g)),(0,T.jsx)(we,{color:Ie(a.type).color,style:{margin:0,borderRadius:10,border:"none"},children:a.type})]}),(0,T.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,flexShrink:0},children:[(0,T.jsx)(je,{title:r("governance.list.statusTooltip",{status:a.status}),children:(0,T.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:kt(a.status),display:"inline-block",cursor:"help"}})}),(0,T.jsx)("span",{style:{fontSize:12,color:"#8c8c8c"},children:a.version})]})]}),itemActions:$,actionsStyle:"icon",actionsPosition:"hover",onItemClick:a=>c(a.id),createLabel:r("governance.list.create"),onCreateClick:t,viewModeExtensions:j,emptyIcon:(0,T.jsx)(Te,{size:48,style:{opacity:.5}}),emptyTitle:r("governance.list.emptyTitle"),emptyDescription:r("governance.list.emptyDescription")})]})};var A=I(ge());var re=I(ge());var ue=I(E()),{Text:nn}=X,Lt=({onSelect:i,value:l,placeholder:f})=>{let c=z(),u=f??c("chatConfig.parentAgent.selectPlaceholder"),[o,t]=(0,re.useState)([]),[C,r]=(0,re.useState)(!1),{get:m}=me(),S=(0,re.useCallback)(async()=>{r(!0);try{let d=await m("/api/assistants");d.success&&t(d.data?.records||[])}catch(d){console.error("Failed to fetch assistants:",d)}finally{r(!1)}},[m]);return(0,re.useEffect)(()=>{S()},[S]),(0,ue.jsx)(xe,{showSearch:!0,allowClear:!0,value:l,placeholder:u,loading:C,onChange:d=>{if(!d){i(null);return}let k=o.find(R=>R.id===d);i(k||null)},onDropdownVisibleChange:d=>{d&&S()},optionFilterProp:"label",style:{width:"100%"},options:o.map(d=>({value:d.id,label:d.name||d.id,description:d.description})),optionRender:d=>(0,ue.jsxs)("div",{children:[(0,ue.jsx)("div",{children:d.label}),d.data.description&&(0,ue.jsx)(nn,{type:"secondary",style:{fontSize:12},children:d.data.description})]})})};var L=I(E()),{Text:Nt}=X,Ot=({subAgentKeys:i,decisions:l,onChange:f})=>{let{token:c}=We.useToken(),u=z(),o=(C,r)=>{let m=l.map(S=>S.originalKey===C?{...S,clone:r,cloneKey:r?`${C}_clone`:void 0}:S);f(m)},t=(C,r)=>{let m=l.map(S=>S.originalKey===C?{...S,cloneKey:r}:S);f(m)};return i.length===0?null:(0,L.jsxs)("div",{children:[(0,L.jsx)(Nt,{type:"secondary",style:{display:"block",marginBottom:8},children:u("chatConfig.subAgentInherit.hint")}),(0,L.jsx)(Le,{size:"small",bordered:!0,dataSource:l,style:{borderRadius:c.borderRadius},renderItem:C=>(0,L.jsxs)(Le.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:[C.clone?(0,L.jsx)(Re,{style:{color:c.colorPrimary}}):(0,L.jsx)(Qe,{style:{color:c.colorTextSecondary}}),(0,L.jsx)(Nt,{style:{fontFamily:"monospace"},children:C.originalKey})]}),(0,L.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,L.jsx)(we,{color:C.clone?"blue":"default",children:C.clone?u("chatConfig.subAgentInherit.clone"):u("chatConfig.subAgentInherit.reuse")}),(0,L.jsx)($e,{size:"small",checked:C.clone,onChange:r=>o(C.originalKey,r)})]})]}),C.clone&&(0,L.jsx)(_,{size:"small",placeholder:u("chatConfig.subAgentInherit.cloneKeyPlaceholder"),value:C.cloneKey,onChange:r=>t(C.originalKey,r.target.value),style:{fontFamily:"monospace",fontSize:12},addonBefore:u("chatConfig.keyValue.key")})]})})]})};function _t(i,l){return i.mode!=="local"||i.templateKey||typeof i.executable=="string"&&i.executable.trim().length>0?null:l?l("chat.config.executableRequired"):"Choose a template or enter a custom executable"}var n=I(E()),{TextArea:Vt}=_,{Text:ne}=X,Gt="/.well-known/agent-card.json",an=[{value:"http://",label:"http://"},{value:"https://",label:"https://"}],on={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 zt(i,l,f="https://"){let c=String(i??"").trim();if(!c)return"";let u=l==="http://"||l==="https://"?l:f,t=(/^https?:\/\//i.test(c)?c:`${u}${c.replace(/^\/+/,"")}`).replace(/\/+$/,"");return t.endsWith(Gt)?t:`${t}${Gt}`}function sn(i){try{return new URL(i).port||void 0}catch{return}}function rn(i){return i.some(l=>l==="--port"||l==="-p"||/^--port=/.test(l)||/^-p=/.test(l))}function jt(i,l){let f=[...i.args],c=sn(l);return c&&!rn(f)&&f.push("--port",c),{...i,args:f,...i.env?{env:{...i.env}}:{}}}var Ut=({open:i,onCancel:l,onSuccess:f,initialMode:c,initialValues:u})=>{let[o]=D.useForm(),t=z(),[C,r]=(0,A.useState)(!1),[m,S]=(0,A.useState)("learn"),[M,H]=(0,A.useState)(""),[d,k]=(0,A.useState)(null),[R,P]=(0,A.useState)([]),$=D.useWatch("type",o)||"react",j=$==="a2a_remote",[a,g]=(0,A.useState)("remote"),[U,fe]=(0,A.useState)(void 0),[le,ye]=(0,A.useState)([]),[Se,ce]=(0,A.useState)(!1),ae=(0,A.useRef)(0),[oe,ie]=(0,A.useState)(!1),[Pe,Y]=(0,A.useState)(!1),{get:N,post:J,put:he}=me(),Me=Ze("agent-architect"),{workspaceId:Ce,trainingProjects:Q,loading:de}=rt(),[Ee,Ae]=(0,A.useState)(null),Ke=JSON.stringify(u??null),K=Q.find(e=>e.id===Ee)??Q[0]??null,[be,ve]=(0,A.useState)([]),p=(0,A.useCallback)(()=>{k(null),P([])},[]),b=(0,A.useCallback)(()=>{o.resetFields(),p(),S("learn"),H(""),ve([]),Ae(null),g("remote"),fe(void 0),ye([]),Y(!1),ie(!1)},[o,p]);(0,A.useEffect)(()=>{if(i){b(),S(c??"learn");let e=u?.a2aMode;(e==="remote"||e==="local")&&g(e),o.setFieldsValue({type:"react",agentCardProtocol:"https://",a2aMode:"remote",timeout:3e5,...u})}},[i,o,c,Ke,b]),(0,A.useEffect)(()=>{let e=++ae.current,s=!0;return i&&j?(o.setFieldValue("prompt",""),a==="local"?(ce(!0),N("/api/local-a2a/templates").then(v=>{s&&e===ae.current&&v?.data?.records&&ye(v.data.records)}).catch(()=>{s&&e===ae.current&&ye([])}).finally(()=>{s&&e===ae.current&&ce(!1)})):ce(!1)):ce(!1),()=>{s=!1,ae.current+=1}},[o,j,a,N,i]);let x=le.find(e=>e.key===U),q=(0,A.useCallback)(()=>{let e=_t({mode:a,templateKey:U,executable:o.getFieldValue("commandExecutable")},t);return e?(Y(!0),o.setFields([{name:"commandExecutable",errors:[e]}]),w.warning(e),!1):!0},[a,U,o,t]);(0,A.useEffect)(()=>{x&&o.setFieldsValue({agentCardProtocol:"http://"})},[o,x]);let ke=(0,A.useCallback)(async()=>{if(!q())return;let e=zt(o.getFieldValue("agentCardUrl"),o.getFieldValue("agentCardProtocol"),a==="local"?"http://":"https://");if(!e){w.warning(t("chatConfig.createAssistant.a2aUrlWarning"));return}ie(!0);try{let s={agentCardUrl:e,apiKey:o.getFieldValue("apiKey")};if(a==="local"){let y=x;if(y)s.localRuntime={label:o.getFieldValue("name")||void 0,agentCardUrl:e,command:jt(y.command,e)};else{let B=o.getFieldValue("commandArgs")||"",G=B?B.split(/\s+/).filter(Boolean):[],F=String(o.getFieldValue(["command","cwd"])||"").trim();s.localRuntime={label:o.getFieldValue("name")||void 0,agentCardUrl:e,command:{executable:String(o.getFieldValue("commandExecutable")||"").trim(),args:G,...F?{cwd:F}:{}}}}}let v=await J("/api/a2a/test-connection",s);if(v.data?.reachable){let y=v.data.agentCard;w.success(t("chatConfig.createAssistant.connectedTo",{name:v.data.agentName||e}))}else w.error(v.data?.error||t("chatConfig.createAssistant.connectionFailed"))}catch{w.error(t("chatConfig.createAssistant.connectionTestFailed"))}finally{ie(!1)}},[o,J,a,x,q,t]),$t=(0,A.useCallback)(e=>{if(k(e),!e){o.resetFields(["key","name","description","type","prompt"]),P([]);return}let s=typeof e.graphDefinition=="object"&&e.graphDefinition!==null?e.graphDefinition:{},v=s.key||e.id,y=e.name||s.name||"";o.setFieldsValue({key:`${v}_ext`,name:y?`${y} (Extended)`:"",description:e.description||s.description||"",type:s.type||"react",prompt:s.prompt||""});let B=s.subAgents||[];P(B.map(G=>({originalKey:G,clone:!1})))},[o]),Wt=async(e,s)=>{let v=await N(`/api/assistants/${e}`);if(!v.success)throw new Error(t("chatConfig.createAssistant.cloneFetchFailed",{key:e}));let y=v.data,B=typeof y.graphDefinition=="object"?y.graphDefinition:{},G={id:s,name:`${y.name} (Clone)`,description:y.description||"",graphDefinition:{...B,key:s,name:`${y.name} (Clone)`}},F=await J("/api/assistants",G);if(!F.success)throw new Error(F.message||t("chatConfig.createAssistant.cloneFailed",{key:e}));return F.data},Zt=e=>{let s={id:e.key,name:e.name,description:e.description||"",graphDefinition:{key:e.key,name:e.name,description:e.description||"",type:e.type,prompt:e.prompt||"",tools:[],skills:[],subAgents:e.type==="deep_agent"||e.type==="processing"?[]:void 0,middleware:[]}};if(e.type==="a2a_remote"&&(s.graphDefinition.agentCardUrl=zt(e.agentCardUrl,e.agentCardProtocol,(e.a2aMode||a)==="local"?"http://":"https://"),e.apiKey&&(s.graphDefinition.apiKey=e.apiKey),e.timeout&&(s.graphDefinition.timeout=e.timeout),(e.a2aMode||a)==="local")){let v=x;if(v)s.graphDefinition.localRuntime={label:e.name||void 0,agentCardUrl:s.graphDefinition.agentCardUrl,command:jt(v.command,s.graphDefinition.agentCardUrl)};else{let y=e.commandArgs||"",B=y?y.split(/\s+/).filter(Boolean):[],G=String(e.command?.cwd||"").trim();s.graphDefinition.localRuntime={label:e.name||void 0,agentCardUrl:s.graphDefinition.agentCardUrl,command:{executable:String(e.commandExecutable||"").trim(),args:B,...G?{cwd:G}:{}}}}}return s},Yt=async(e,s)=>{if(!d)throw new Error(t("chatConfig.createAssistant.noParentAgent"));let v=R.filter(F=>F.clone);for(let F of v){if(!F.cloneKey||!F.cloneKey.trim())throw new Error(t("chatConfig.createAssistant.cloneKeyRequired",{key:F.originalKey}));if(!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(F.cloneKey))throw new Error(t("chatConfig.createAssistant.cloneKeyInvalid",{key:F.cloneKey,originalKey:F.originalKey}))}let y=[];for(let F of R)if(F.clone){let Xt=await Wt(F.originalKey,F.cloneKey);s.push(Xt),y.push(F.cloneKey)}else y.push(F.originalKey);let B=typeof d.graphDefinition=="object"?d.graphDefinition:{},G={key:e.key,name:e.name,description:e.description||"",extendsAgent:d.id,type:e.type||B.type};return e.prompt&&e.prompt!==B.prompt&&(G.prompt=e.prompt),(y.length>0||B.subAgents&&B.subAgents.length>0)&&(G.subAgents=y),{id:e.key,name:e.name,description:e.description||"",graphDefinition:G}},Jt=async()=>{if(m==="learn"){let e=M.trim();if(!e){w.error(t("chatConfig.createAssistant.trainingGoalRequired"));return}if(!K){w.error(t("chatConfig.createAssistant.noTrainingProject"));return}r(!0);try{let s=`agent-${It(e+Date.now())}`,v=await J("/api/assistants",{id:s,name:s,graphDefinition:{key:s,name:s,description:"",type:"react",prompt:"To be trained",metadata:{trainingProjectId:K.id,learningPlaceholder:"true",architectureStatus:"undecided"}}});if(!v.data)throw new Error(t("chatConfig.createAssistant.agentCreateFailed"));let{roundTaskId:y}=await Ft({goal:e,targetAgentId:s,workspaceId:Ce??void 0,projectId:K.id,existingThreadId:St(Me.tenantId,s),files:be,post:J,put:he});w.success(t("chatConfig.createAssistant.agentCreated")),H(""),ve([]),S("learn"),f?.(v.data,{initialMessage:Rt({goal:e,roundTaskId:y,targetAgentId:s,targetMode:"placeholder",files:be,projectId:K.id,workspaceId:K.workspaceId??Ce??void 0}),projectId:K.id,initialMessageCustomRunConfig:{execution:{taskId:y}}}),l()}catch(s){w.error(s instanceof Error?s.message:t("chatConfig.createAssistant.agentCreateFailed"))}finally{r(!1)}return}try{if(m==="scratch"&&j&&!q())return;let e=await o.validateFields();r(!0);let s=[],v=m==="scratch"?Zt(e):await Yt(e,s),y=await J("/api/assistants",v);if(y.success){w.success(m==="extend"?t("chatConfig.createAssistant.createdByExtending",{name:d?.name??""}):t("chatConfig.createAssistant.created")),b();for(let B of s)f?.(B);f?.(y.data),l()}else w.error(y.message||t("chatConfig.createAssistant.createFailed"))}catch(e){if(e?.errorFields){let s={key:t("chatConfig.createAssistant.field.key"),name:t("chatConfig.createAssistant.field.name"),description:t("chatConfig.createAssistant.field.description"),prompt:t("chatConfig.createAssistant.field.systemPrompt")},v=e.errorFields.map(y=>s[String((y.name??[])[0])]??String((y.name??[])[0])).filter(Boolean);w.warning(v.length>0?t("chatConfig.createAssistant.requiredFields",{fields:[...new Set(v)].join(", ")}):t("chatConfig.createAssistant.requiredFieldsGeneric"));return}w.error(e.message||t("chatConfig.createAssistant.createError"))}finally{r(!1)}},ze=d?.graphDefinition?.subAgents||[],Qt=m==="extend"&&d&&ze.length>0;return(0,n.jsxs)(pe,{title:t("chatConfig.createAssistant.title"),open:i,onCancel:()=>{b(),l()},footer:[(0,n.jsx)(W,{onClick:()=>{b(),l()},children:t("common.cancel")},"cancel"),(0,n.jsx)(W,{type:"primary",icon:m==="extend"?(0,n.jsx)(Re,{}):m==="learn"?(0,n.jsx)(Je,{}):(0,n.jsx)(Xe,{}),loading:C,disabled:m==="learn"&&(de||!K),onClick:Jt,children:t(m==="extend"?"chatConfig.createAssistant.createExtend":m==="learn"?"chatConfig.createAssistant.startLearning":"common.create")},"submit")],width:760,children:[m==="extend"&&(0,n.jsxs)("div",{style:{marginBottom:20},children:[(0,n.jsx)(ne,{type:"secondary",style:{display:"block",marginBottom:8},children:t("chatConfig.createAssistant.parentAgent")}),(0,n.jsx)(Lt,{value:d?.id,onSelect:$t}),d&&(0,n.jsx)(ne,{type:"secondary",style:{display:"block",marginTop:4,fontSize:12},children:t("chatConfig.createAssistant.inheritHint")})]}),m==="extend"&&d&&(0,n.jsx)(Be,{style:{margin:"12px 0"}}),m==="learn"&&(0,n.jsxs)("div",{children:[(0,n.jsx)(ne,{style:{display:"block",marginBottom:8},children:t("chatConfig.createAssistant.learnHint")}),(0,n.jsx)(_.TextArea,{rows:3,value:M,onChange:e=>H(e.target.value),placeholder:"e.g. Handle price disputes using the price protection policy"}),K&&(0,n.jsxs)("div",{style:{marginTop:12},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:8},children:[(0,n.jsx)(ne,{type:"secondary",children:t("chatConfig.createAssistant.referenceFiles")}),(0,n.jsx)(Ve,{project:K,projects:Q,value:K?.id??null,onChange:Ae,loading:de})]}),(0,n.jsx)(Tt,{projectId:K.id,value:be,onChange:ve}),(0,n.jsx)(ne,{type:"secondary",style:{display:"block",marginTop:6,fontSize:12},children:t("chatConfig.createAssistant.referenceFilesHint")})]}),!K&&!de&&(0,n.jsx)("div",{style:{marginTop:12},children:(0,n.jsx)(Ve,{project:K,projects:Q,value:null,onChange:Ae,loading:de})})]}),m!=="learn"&&(0,n.jsxs)(D,{form:o,layout:"vertical",autoComplete:"off",initialValues:{type:"react",agentCardProtocol:"https://",a2aMode:"remote"},children:[(0,n.jsx)(D.Item,{name:"key",label:t("chatConfig.createAssistant.field.key"),rules:[{required:!0,message:t("chatConfig.createAssistant.validation.keyRequired")},{pattern:/^[a-zA-Z][a-zA-Z0-9_-]*$/,message:t("chatConfig.createAssistant.validation.keyPattern")}],style:{marginBottom:16},children:(0,n.jsx)(_,{placeholder:"e.g., my_assistant"})}),(0,n.jsx)(D.Item,{name:"name",label:t("chatConfig.createAssistant.field.name"),rules:[{required:!0,message:t("chatConfig.createAssistant.validation.nameRequired")}],style:{marginBottom:16},children:(0,n.jsx)(_,{placeholder:"e.g., My Assistant"})}),(0,n.jsx)(D.Item,{name:"description",label:t("chatConfig.createAssistant.field.description"),rules:[{required:!0,message:t("chatConfig.createAssistant.validation.descriptionRequired")}],style:{marginBottom:16},children:(0,n.jsx)(Vt,{placeholder:t("chatConfig.createAssistant.descriptionPlaceholder"),autoSize:{minRows:2,maxRows:4}})}),(0,n.jsx)(D.Item,{name:"type",label:t("chatConfig.createAssistant.field.agentType"),rules:[{required:!0}],style:{marginBottom:16},children:(0,n.jsx)(Ue,{options:[{value:"react",label:t("chatConfig.agentType.executor")},{value:"deep_agent",label:t("chatConfig.agentType.orchestrator")},{value:"team",label:t("chatConfig.agentType.team")},{value:"processing",label:t("chatConfig.agentType.workflow")},{value:"a2a_remote",label:t("chatConfig.agentType.a2aRemote")}],block:!0})}),(0,n.jsx)(ne,{type:"secondary",style:{fontSize:12,display:"block",marginTop:-12,marginBottom:16,lineHeight:1.5},children:t(on[$]??"chatConfig.createAssistant.typeDesc.react")}),j&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(D.Item,{label:t("chatConfig.createAssistant.field.connectionMode"),style:{marginBottom:16},children:(0,n.jsxs)(Fe.Group,{value:a,onChange:e=>{let s=e.target.value;g(s),o.setFieldValue("a2aMode",s),s==="local"&&o.setFieldValue("agentCardProtocol","http://"),fe(void 0)},optionType:"button",buttonStyle:"solid",children:[(0,n.jsx)(Fe.Button,{value:"remote",children:t("chatConfig.createAssistant.mode.remoteUrl")}),(0,n.jsx)(Fe.Button,{value:"local",children:t("chatConfig.createAssistant.mode.localManaged")})]})}),(0,n.jsx)(D.Item,{name:"a2aMode",noStyle:!0,hidden:!0,children:(0,n.jsx)(_,{})}),a==="local"&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(D.Item,{label:t("chatConfig.createAssistant.field.template"),style:{marginBottom:16},children:(0,n.jsx)(xe,{placeholder:t("chatConfig.createAssistant.templatePlaceholder"),allowClear:!0,loading:Se,value:U,onChange:e=>{fe(e),e&&Y(!1)},options:le.map(e=>({value:e.key,label:e.name||e.key})),notFoundContent:Se?void 0:(0,n.jsx)(ne,{type:"secondary",style:{padding:8,display:"block"},children:t("chatConfig.createAssistant.noTemplates")})})}),!U&&(0,n.jsx)(n.Fragment,{children:Pe?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(D.Item,{name:"commandExecutable",label:t("chatConfig.createAssistant.field.executable"),rules:[{required:!0,whitespace:!0,message:t("chatConfig.createAssistant.validation.executableRequired")}],style:{marginBottom:16},children:(0,n.jsx)(_,{placeholder:"e.g. node, opencode, /usr/local/bin/my-server"})}),(0,n.jsx)(D.Item,{name:"commandArgs",label:t("chatConfig.createAssistant.field.arguments"),style:{marginBottom:16},children:(0,n.jsx)(_,{placeholder:"e.g. --serve --port 4301"})}),(0,n.jsx)(D.Item,{name:["command","cwd"],label:t("chatConfig.createAssistant.field.workingDirectory"),style:{marginBottom:16},children:(0,n.jsx)(_,{placeholder:"e.g. /Users/me/project"})}),(0,n.jsx)(W,{type:"link",onClick:()=>{Y(!1),o.setFieldsValue({commandExecutable:"",commandArgs:"",command:{cwd:void 0}})},style:{padding:0,marginBottom:16,display:"block"},children:t("chatConfig.createAssistant.hideCustomCommand")})]}):(0,n.jsx)(W,{type:"link",onClick:()=>Y(!0),style:{padding:0,marginBottom:16,display:"block"},children:t("chatConfig.createAssistant.customCommand")})})]}),(0,n.jsx)(D.Item,{label:t("chatConfig.createAssistant.field.agentCardUrl"),required:!0,style:{marginBottom:16},children:(0,n.jsxs)(He.Compact,{style:{width:"100%"},children:[(0,n.jsx)(D.Item,{name:"agentCardProtocol",noStyle:!0,children:(0,n.jsx)(xe,{style:{width:100},options:an})}),(0,n.jsx)(D.Item,{name:"agentCardUrl",noStyle:!0,rules:[{required:!0,message:t("chatConfig.createAssistant.validation.urlRequired")}],children:(0,n.jsx)(_,{placeholder:a==="local"?"localhost:4301":"host:port or full URL"})}),(0,n.jsx)(W,{icon:(0,n.jsx)(Ye,{}),onClick:ke,loading:oe,children:t("chatConfig.connection.action.test")})]})}),a==="remote"&&(0,n.jsx)(D.Item,{name:"apiKey",label:t("chatConfig.createAssistant.field.apiKeyOptional"),style:{marginBottom:16},children:(0,n.jsx)(_.Password,{placeholder:t("chatConfig.createAssistant.apiKeyPlaceholder")})}),(0,n.jsx)(D.Item,{name:"timeout",label:t("chatConfig.createAssistant.field.timeout"),style:{marginBottom:16},initialValue:3e5,children:(0,n.jsx)(qe,{min:1e3,max:36e5,style:{width:"100%"},placeholder:"300000"})})]}),!j&&(0,n.jsx)(D.Item,{name:"prompt",label:t(m==="extend"&&d?"chatConfig.createAssistant.field.systemPromptInherit":"chatConfig.createAssistant.field.systemPrompt"),rules:m==="scratch"?[{required:!0,message:t("chatConfig.createAssistant.validation.systemPromptRequired")}]:[],children:(0,n.jsx)(Vt,{placeholder:t(m==="extend"&&d?"chatConfig.createAssistant.systemPromptInheritPlaceholder":"chatConfig.createAssistant.systemPromptPlaceholder"),autoSize:{minRows:4,maxRows:8},style:{fontFamily:"monospace",fontSize:13,lineHeight:1.6}})})]}),Qt&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(Be,{style:{margin:"12px 0"}}),(0,n.jsx)(ne,{strong:!0,style:{display:"block",marginBottom:8},children:t("chatConfig.createAssistant.subAgents")}),(0,n.jsx)(Ot,{subAgentKeys:ze,decisions:R,onChange:P})]})]})};var O=I(E()),{Paragraph:ln,Text:qt}=X,cn=[{key:"manual",icon:Te,titleKey:"governance.creation.manual.title",descriptionKey:"governance.creation.manual.description"},{key:"external",icon:tt,titleKey:"governance.creation.external.title",descriptionKey:"governance.creation.external.description"},{key:"learn",icon:at,titleKey:"governance.creation.learn.title",descriptionKey:"governance.creation.learn.description"}],Ht=({open:i,onCancel:l,onSelectMethod:f,focusTriggerAfterClose:c=!0})=>{let u=z();return(0,O.jsx)(pe,{title:u("governance.creation.title"),open:i,onCancel:l,footer:null,width:560,centered:!0,destroyOnHidden:!0,focusTriggerAfterClose:c,children:(0,O.jsxs)("div",{style:{padding:"8px 4px 4px"},children:[(0,O.jsx)(ln,{style:{color:"#595959",fontSize:15,margin:"8px 0 24px"},children:u("governance.creation.subtitle")}),(0,O.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:12},children:cn.map(o=>{let t=o.icon,C=u(o.titleKey);return(0,O.jsxs)(W,{type:"default",onClick:()=>f(o.key),"aria-label":C,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,O.jsx)("div",{style:{width:40,height:40,borderRadius:12,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,color:"#6366f1",background:"#eeeeff"},children:(0,O.jsx)(t,{size:19})}),(0,O.jsxs)("div",{style:{minWidth:0},children:[(0,O.jsx)(qt,{strong:!0,style:{display:"block",fontSize:15,marginBottom:3},children:C}),(0,O.jsx)(qt,{style:{color:"#737373",lineHeight:1.5},children:u(o.descriptionKey)})]})]},o.key)})}),(0,O.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,flexWrap:"wrap",marginTop:24},children:(0,O.jsx)(W,{onClick:l,children:u("governance.creation.notNow")})})]})})};var V=I(E()),dn=i=>{let l=i;if(typeof i=="string")try{l=JSON.parse(i)}catch{return{}}return l!==null&&typeof l=="object"&&!Array.isArray(l)?l:{}},va=()=>{let{get:i,del:l,put:f}=me(),c=z(),[u,o]=(0,h.useState)([]),[t,C]=(0,h.useState)(!1),[r,m]=(0,h.useState)(null),[S,M]=(0,h.useState)("graph"),[H,d]=(0,h.useState)(null),[k,R]=(0,h.useState)(null),[P,$]=(0,h.useState)(null),[j,a]=(0,h.useState)(!1),[g,U]=(0,h.useState)(!0),[fe,le]=(0,h.useState)(!1),[ye,Se]=(0,h.useState)("learn"),[ce,ae]=(0,h.useState)({}),[oe,ie]=(0,h.useState)(null),[Pe,Y]=(0,h.useState)(!1),N=(0,h.useCallback)(async()=>{C(!0);try{let p=await i("/api/assistants");p.success&&p.data?.records&&o(p.data.records)}catch{w.error(c("governance.workbench.loadFailed"))}finally{C(!1)}},[i,c]);(0,h.useEffect)(()=>{N()},[N]);let J=h.default.useMemo(()=>xt(u),[u]),he=u.find(p=>p.id===r)??null,Me=(0,h.useCallback)((p,b="graph")=>{m(p),M(b),d(null),$(null)},[]),Ce=ut(),Q=(0,h.useCallback)((p,b)=>{let x=u.find(q=>q.id===p)?.name??c("governance.workbench.agentFallback");Ce({component_key:"agent_detail_side_app",data:{assistantId:p,initialTab:b},message:x})},[u,Ce,c]),de=(0,h.useCallback)(()=>{U(!0),a(!0)},[]),Ee=(0,h.useCallback)(p=>{let x={manual:{mode:"scratch",values:{}},external:{mode:"scratch",values:{type:"a2a_remote"}},learn:{mode:"learn",values:{}}}[p];Se(x.mode),ae(x.values),U(!1),a(!1),le(!0)},[]),Ae=(0,h.useCallback)(async(p,b)=>{let x=dn(p.graphDefinition),q;try{q=await f(`/api/assistants/${p.id}`,{name:b.name!==void 0?b.name:p.name,description:b.description!==void 0?b.description:p.description,graphDefinition:{...x,...b}})}catch(ke){throw w.error(c("governance.detail.saveFailed")),ke}if(!q.success)throw w.error(c("governance.detail.saveFailed")),new Error("Failed to save agent");w.success(c("common.saved")),N()},[f,N,c]),Ke=(0,h.useCallback)(p=>{o(b=>b.map(x=>x.id===p.id?p:x))},[]),K=(0,h.useCallback)(p=>{ie(p)},[]),be=(0,h.useCallback)(async()=>{if(oe){Y(!0);try{(await l(`/api/assistants/${oe}`)).success?(w.success(c("governance.detail.deleted")),o(b=>b.filter(x=>x.id!==oe)),N(),ie(null)):w.error(c("governance.detail.deleteFailed"))}catch{w.error(c("governance.detail.deleteFailed"))}finally{Y(!1)}}},[oe,l,N,c]),ve=(0,h.useCallback)(async p=>{if(!(await l(`/api/assistants/${p}`)).success)throw new Error("Failed to delete agent");w.success(c("governance.detail.deleted")),o(x=>x.filter(q=>q.id!==p)),N()},[l,N,c]);return(0,V.jsxs)("div",{style:{height:"100%",background:"#fafafa",overflow:"hidden"},children:[he?(0,V.jsx)(vt,{defaultProjectId:P??void 0,children:(0,V.jsx)(Dt,{assistant:he,allAssistants:u,onBack:()=>m(null),onDeleted:ve,onSave:Ae,onAssistantUpdated:Ke,onAgentListInvalidated:N,initialTab:S,initialMessage:H,initialMessageCustomRunConfig:k,initialProjectId:P})},he.id):(0,V.jsx)(V.Fragment,{children:(0,V.jsx)(Bt,{items:J,assistants:u,loading:t,onItemClick:p=>Q(p,"graph"),onOpenPlayground:p=>Q(p,"playground"),onOpenEval:p=>Q(p,"eval"),onCreate:de,onDelete:K})}),(0,V.jsx)(Ht,{open:j,onCancel:()=>{U(!0),a(!1)},onSelectMethod:Ee,focusTriggerAfterClose:g}),(0,V.jsx)(Ut,{open:fe,initialMode:ye,initialValues:ce,onCancel:()=>le(!1),onSuccess:(p,b)=>{le(!1),o(x=>x.some(ke=>ke.id===p.id)?x:[p,...x]),Me(p.id,"graph"),d(b?.initialMessage??null),R(b?.initialMessageCustomRunConfig??null),$(b?.projectId??null),N()}}),(0,V.jsx)(pe,{title:c("governance.deleteAgent"),open:oe!==null,onCancel:()=>ie(null),onOk:be,okText:c("common.delete"),okButtonProps:{danger:!0,loading:Pe},cancelText:c("common.cancel"),children:(0,V.jsx)("p",{children:c("governance.delete.irreversible")})})]})};export{va as AgentGovernanceWorkbench};
@@ -1,4 +1,4 @@
1
- import{c as $,d as J}from"./embed-page-chunk-WTOAQDQN.js";import{b as R,d as V,e as S}from"./embed-page-chunk-V2GBFWLG.js";import"./embed-page-chunk-S4XZPBRM.js";import{Fa as N,Ha as H,Ia as L,Ja as U,Ka as W,Ua as A,Va as K,Wa as Y}from"./embed-page-chunk-QHXKZNDU.js";import{r as w}from"./embed-page-chunk-O44JEYLD.js";import{a as g}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{Cc as _,Ia as P,Qc as z,Rc as k,Uc as F,W as T,aa as B,fb as E,kb as D,mc as G}from"./embed-page-chunk-MHGVD4EV.js";import{a as b}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 u}from"./embed-page-chunk-QBTAJ2YI.js";var n=u(b());var I=u(b());var o=u(g());var ae="tracePulse 1.4s ease-in-out infinite",le={running:(0,o.jsx)(G,{style:{color:"#1890ff"}}),success:(0,o.jsx)(E,{style:{color:"#52c41a"}}),error:(0,o.jsx)(D,{style:{color:"#ff4d4f"}})};function de({kind:e}){switch(e){case"human":return(0,o.jsx)(F,{});case"agent":return(0,o.jsx)(z,{});case"tool":return(0,o.jsx)(k,{});case"ai":return(0,o.jsx)(_,{});default:return(0,o.jsx)(k,{})}}var M=I.default.createContext({}),ce=()=>I.default.useContext(M),pe=({data:e,selected:i})=>{let l=w(),{onJumpToMessage:t}=ce(),s=e.isAnswer===!0,a=e.status==="running",p=(e.parallelCount??1)>1,m=!!(t&&e.messageId&&!e.messageId.startsWith("summary:")),v=e.toolCall?L(e.toolCall.name):e.label,y=()=>{if((e.kind==="tool"||e.kind==="agent")&&e.toolCall){let h=U(e.toolCall.response);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(H,{data:{name:e.toolCall.name,parameters:e.toolCall.args,type:"tool_call"},component_key:`${e.toolCall.id}-params`,interactive:!1}),h&&(0,o.jsx)("div",{style:{marginTop:8},children:(0,o.jsx)(N,{content:h})}),(0,o.jsx)(W,{ui:e.toolCall.ui})]})}return e.content?(0,o.jsx)(N,{content:e.content}):(0,o.jsx)("span",{style:{color:"#8c8c8c"},children:e.label})};return(0,o.jsxs)("div",{"data-testid":"trace-card",style:{height:"100%",display:"flex",flexDirection:"column",border:`1px solid ${s||i?"#6366f1":a?"#91caff":"#e5e7eb"}`,borderRadius:12,background:s?"#eef2ff":"#fff",boxShadow:a?"0 0 0 2px rgba(24,144,255,0.18)":i?"0 0 0 2px rgba(99,102,241,0.2)":"none",animation:a?ae:void 0,overflow:"hidden",fontSize:13},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px",borderBottom:"1px solid #f0f0f0",background:"rgba(0,0,0,0.02)"},children:[(0,o.jsx)(de,{kind:e.kind}),(0,o.jsx)("span",{style:{fontWeight:s?700:600,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v}),p&&(0,o.jsx)(P,{color:"purple",style:{marginInlineEnd:0,fontSize:10},children:l("chat.trace.parallelBadge",{count:e.parallelCount??1})}),le[e.status],m&&(0,o.jsx)(T,{type:"text",size:"small",onClick:()=>t?.(e.messageId),children:l("chat.trace.jumpToChat")})]}),(0,o.jsx)("div",{style:{flex:1,minHeight:0,overflow:"auto",padding:12},children:y()})]})},ue=({data:e,selected:i})=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{type:"target",position:R.Top}),(0,o.jsx)(pe,{data:e,selected:i}),(0,o.jsx)(S,{type:"source",position:R.Bottom})]}),j={trace:ue};var Z=u(b());var f=u(g()),fe={running:"#1890ff",success:"#52c41a",error:"#ff4d4f"},q=({graph:e,activeNodeId:i,onSelectNode:l})=>{let t=Z.default.useMemo(()=>new Map(e.nodes.map(s=>[s.id,s])),[e.nodes]);return(0,f.jsx)("div",{"data-testid":"trace-overview-rail",style:{display:"flex",flexDirection:"column",gap:10,width:160,padding:8,overflowY:"auto",borderRight:"1px solid #f0f0f0"},children:e.phases.map(s=>(0,f.jsxs)("div",{"data-testid":"trace-rail-phase",children:[(0,f.jsx)("div",{style:{fontSize:12,color:"#8c8c8c",marginBottom:4},children:s.title}),(0,f.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:4},children:s.nodeIds.map(a=>{let p=t.get(a);if(!p)return null;let m=a===i;return(0,f.jsx)(B,{title:p.data.label,children:(0,f.jsx)("button",{type:"button","data-testid":"trace-rail-tick",onClick:()=>l?.(a),style:{width:m?12:8,height:m?12:8,borderRadius:"50%",border:"none",padding:0,cursor:"pointer",background:fe[p.data.status],outline:m?"2px solid #6366f1":"none"}})},a)})})]},s.id))})};var d=u(g()),Q=3,X=()=>{},me=`
1
+ import{c as $,d as J}from"./embed-page-chunk-WTOAQDQN.js";import{b as R,d as V,e as S}from"./embed-page-chunk-V2GBFWLG.js";import"./embed-page-chunk-S4XZPBRM.js";import{Fa as N,Ha as H,Ia as L,Ja as U,Ka as W,Ua as A,Va as K,Wa as Y}from"./embed-page-chunk-P477ZTUO.js";import{r as w}from"./embed-page-chunk-2PFKLMTR.js";import{a as g}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{Cc as _,Ia as P,Qc as z,Rc as k,Uc as F,W as T,aa as B,fb as E,kb as D,mc as G}from"./embed-page-chunk-MHGVD4EV.js";import{a as b}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 u}from"./embed-page-chunk-QBTAJ2YI.js";var n=u(b());var I=u(b());var o=u(g());var ae="tracePulse 1.4s ease-in-out infinite",le={running:(0,o.jsx)(G,{style:{color:"#1890ff"}}),success:(0,o.jsx)(E,{style:{color:"#52c41a"}}),error:(0,o.jsx)(D,{style:{color:"#ff4d4f"}})};function de({kind:e}){switch(e){case"human":return(0,o.jsx)(F,{});case"agent":return(0,o.jsx)(z,{});case"tool":return(0,o.jsx)(k,{});case"ai":return(0,o.jsx)(_,{});default:return(0,o.jsx)(k,{})}}var M=I.default.createContext({}),ce=()=>I.default.useContext(M),pe=({data:e,selected:i})=>{let l=w(),{onJumpToMessage:t}=ce(),s=e.isAnswer===!0,a=e.status==="running",p=(e.parallelCount??1)>1,m=!!(t&&e.messageId&&!e.messageId.startsWith("summary:")),v=e.toolCall?L(e.toolCall.name):e.label,y=()=>{if((e.kind==="tool"||e.kind==="agent")&&e.toolCall){let h=U(e.toolCall.response);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(H,{data:{name:e.toolCall.name,parameters:e.toolCall.args,type:"tool_call"},component_key:`${e.toolCall.id}-params`,interactive:!1}),h&&(0,o.jsx)("div",{style:{marginTop:8},children:(0,o.jsx)(N,{content:h})}),(0,o.jsx)(W,{ui:e.toolCall.ui})]})}return e.content?(0,o.jsx)(N,{content:e.content}):(0,o.jsx)("span",{style:{color:"#8c8c8c"},children:e.label})};return(0,o.jsxs)("div",{"data-testid":"trace-card",style:{height:"100%",display:"flex",flexDirection:"column",border:`1px solid ${s||i?"#6366f1":a?"#91caff":"#e5e7eb"}`,borderRadius:12,background:s?"#eef2ff":"#fff",boxShadow:a?"0 0 0 2px rgba(24,144,255,0.18)":i?"0 0 0 2px rgba(99,102,241,0.2)":"none",animation:a?ae:void 0,overflow:"hidden",fontSize:13},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px",borderBottom:"1px solid #f0f0f0",background:"rgba(0,0,0,0.02)"},children:[(0,o.jsx)(de,{kind:e.kind}),(0,o.jsx)("span",{style:{fontWeight:s?700:600,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v}),p&&(0,o.jsx)(P,{color:"purple",style:{marginInlineEnd:0,fontSize:10},children:l("chat.trace.parallelBadge",{count:e.parallelCount??1})}),le[e.status],m&&(0,o.jsx)(T,{type:"text",size:"small",onClick:()=>t?.(e.messageId),children:l("chat.trace.jumpToChat")})]}),(0,o.jsx)("div",{style:{flex:1,minHeight:0,overflow:"auto",padding:12},children:y()})]})},ue=({data:e,selected:i})=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{type:"target",position:R.Top}),(0,o.jsx)(pe,{data:e,selected:i}),(0,o.jsx)(S,{type:"source",position:R.Bottom})]}),j={trace:ue};var Z=u(b());var f=u(g()),fe={running:"#1890ff",success:"#52c41a",error:"#ff4d4f"},q=({graph:e,activeNodeId:i,onSelectNode:l})=>{let t=Z.default.useMemo(()=>new Map(e.nodes.map(s=>[s.id,s])),[e.nodes]);return(0,f.jsx)("div",{"data-testid":"trace-overview-rail",style:{display:"flex",flexDirection:"column",gap:10,width:160,padding:8,overflowY:"auto",borderRight:"1px solid #f0f0f0"},children:e.phases.map(s=>(0,f.jsxs)("div",{"data-testid":"trace-rail-phase",children:[(0,f.jsx)("div",{style:{fontSize:12,color:"#8c8c8c",marginBottom:4},children:s.title}),(0,f.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:4},children:s.nodeIds.map(a=>{let p=t.get(a);if(!p)return null;let m=a===i;return(0,f.jsx)(B,{title:p.data.label,children:(0,f.jsx)("button",{type:"button","data-testid":"trace-rail-tick",onClick:()=>l?.(a),style:{width:m?12:8,height:m?12:8,borderRadius:"50%",border:"none",padding:0,cursor:"pointer",background:fe[p.data.status],outline:m?"2px solid #6366f1":"none"}})},a)})})]},s.id))})};var d=u(g()),Q=3,X=()=>{},me=`
2
2
  @keyframes tracePulse {
3
3
  0%, 100% { box-shadow: 0 0 0 2px rgba(24,144,255,0.18); }
4
4
  50% { box-shadow: 0 0 0 6px rgba(24,144,255,0.05); }
@@ -1 +1 @@
1
- import{s as D}from"./embed-page-chunk-UDSGGVJH.js";import{Ea as E}from"./embed-page-chunk-QHXKZNDU.js";import{i as T,r as v}from"./embed-page-chunk-O44JEYLD.js";import{a as C}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{ga as x}from"./embed-page-chunk-MHGVD4EV.js";import{a as w}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 p}from"./embed-page-chunk-QBTAJ2YI.js";var u=p(w());var R=p(T());var y=p(C());function g(l,i){if(!l||l.length===0)return{title:{text:i("genui.chart.title"),left:"left"},tooltip:{trigger:"axis"},legend:{right:0,orient:"vertical"},xAxis:{type:"category",data:[]},yAxis:{type:"value"},series:[{type:"line",name:i("genui.chart.seriesDefault",{n:1}),data:[]}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}};let s=l[0],t=Object.keys(s);if(t.length===0)return g([],i);let r=t.filter(e=>{let n=s[e];return typeof n=="number"||!isNaN(Number(n))});if(r.length>0){let e=r[0],n=t.find(a=>!r.includes(a))||t[0],o=l.map((a,c)=>a[n]!==void 0?String(a[n]):i("genui.chart.itemDefault",{n:c+1})),f=l.map(a=>{let c=a[e];return typeof c=="number"?c:Number(c)||0});return{title:{text:i("genui.chart.title"),left:"left"},tooltip:{trigger:"axis"},legend:{right:0,orient:"vertical",data:[e]},xAxis:{type:"category",data:o},yAxis:{type:"value"},series:[{type:"line",name:e,data:f}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}}}return{title:{text:i("genui.chart.title"),left:"left"},tooltip:{trigger:"axis"},legend:{right:0,orient:"vertical"},xAxis:{type:"category",data:l.map((e,n)=>i("genui.chart.itemDefault",{n:n+1}))},yAxis:{type:"value"},series:[{type:"bar",name:i("genui.chart.countSeries"),data:l.map(()=>1)}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}}}function j(l,i){if(!l||typeof l!="object"||!l.series||!Array.isArray(l.series)||l.series.length===0)return null;let s=l.series.map((e,n)=>{if(!e||typeof e!="object"||!e.type||!e.data||!Array.isArray(e.data)||e.data.length===0)return null;let o={...e,name:e.name||i("genui.chart.seriesDefault",{n:n+1})};if(e.type==="pie"){let f=e.data.map((a,c)=>typeof a=="object"&&a!==null&&"value"in a?{value:a.value,name:a.name||i("genui.chart.itemDefault",{n:c+1})}:typeof a=="number"?{value:a,name:i("genui.chart.itemDefault",{n:c+1})}:null).filter(a=>a!==null);return f.length===0?null:{...o,data:f}}return o}).filter(e=>e!==null);if(s.length===0)return null;let t={...l,series:s},r=s[0].type;if(r!=="pie"){if(!t.xAxis)t.xAxis={type:"category",data:[]};else if(typeof t.xAxis=="object"&&!Array.isArray(t.xAxis)){let e=t.xAxis;if(e.type||(e.type="category"),e.type==="category"&&!e.data){let n=s[0].data;Array.isArray(n)&&n.length>0?Array.isArray(n[0])?e.data=n.map(o=>o[0]):e.data=n.map((o,f)=>i("genui.chart.itemDefault",{n:f+1})):e.data=[]}t.xAxis=e}t.yAxis?typeof t.yAxis=="object"&&!Array.isArray(t.yAxis)&&(t.yAxis.type||(t.yAxis.type="value")):t.yAxis={type:"value"}}if(!t.title)t.title={text:i("genui.chart.title"),left:"left"};else if(typeof t.title=="object"){let e=t.title;e.left||(e.left="left"),e.text||(e.text=i("genui.chart.title")),t.title=e}if(t.tooltip||(t.tooltip={trigger:r==="pie"?"item":"axis"}),!t.legend)s.length>1&&(t.legend={right:0,orient:"vertical"});else if(typeof t.legend=="object"){let e=t.legend;t.legend=e}return r!=="pie"&&!t.grid&&(t.grid={left:"3%",right:"4%",bottom:"3%",containLabel:!0}),t}function O(l,i){let s=null;try{let n=typeof l=="string"?l:l.join("");s=(0,R.parse)(n)}catch(n){return{data:null,error:`Failed to parse JSON: ${n instanceof Error?n.message:String(n)}`}}if(!s||typeof s!="object")return{data:null,error:"Parsed data is not an object"};let t=s.series&&Array.isArray(s.series)&&s.series.length>0,r={table:Array.isArray(s.table)?s.table:void 0},e=null;if(s.echarts?e=s.echarts:t&&(e=s),e){let n=j(e,i);if(n)r.echarts=n;else if(r.table&&r.table.length>0)r.echarts=g(r.table,i);else return{data:null,error:"ECharts configuration is invalid or incomplete. Required: series array with at least one series containing type and data."}}else r.table&&r.table.length>0?r.echarts=g(r.table,i):r.echarts=g([],i);return{data:r,error:null}}var K=l=>{let{children:i}=l,s=v(),t=(0,u.useRef)(null),r=(0,u.useRef)(null),e=(0,u.useRef)(null),[n,o]=(0,u.useState)(null);(0,u.useEffect)(()=>{if(!t.current)return;r.current||(r.current=D(t.current));let a=null;if((typeof i=="string"||Array.isArray(i))&&(a=i),!a){r.current&&r.current.clear(),o(null);return}let{data:c,error:m}=O(a,s);if(m||!c){console.warn("ReactChart failed to parse chart data:",m||"Unknown parse error"),r.current&&r.current.clear(),o(null);return}if(c.table&&Array.isArray(c.table)&&o(c.table),c.echarts)try{r.current.setOption(c.echarts,!0)}catch(d){let A=d instanceof Error?d.message:"Failed to render chart";console.error("Failed to set ECharts option:",d),r.current&&r.current.clear(),o(null)}let h=()=>{r.current&&r.current.resize()};return e.current&&(e.current.disconnect(),e.current=null),t.current&&typeof ResizeObserver<"u"&&(e.current=new ResizeObserver(d=>{requestAnimationFrame(()=>{h()})}),e.current.observe(t.current)),window.addEventListener("resize",h),()=>{e.current&&(e.current.disconnect(),e.current=null),window.removeEventListener("resize",h)}},[i,s]),(0,u.useEffect)(()=>()=>{e.current&&(e.current.disconnect(),e.current=null),r.current&&(r.current.dispose(),r.current=null)},[]);let f=a=>{if(!a||a.length===0)return[];if(Array.isArray(a[0])){let c=a[0];return a.slice(1).map((h,d)=>{let A={};return h.forEach((S,b)=>{A[c[b]||`col_${b}`]=S}),A})}return a};return(0,y.jsxs)(x,{children:[(0,y.jsx)("div",{ref:t,style:{width:"100%",height:"400px",minHeight:"300px"}}),n&&n.length>0&&(0,y.jsx)("div",{style:{marginTop:16},children:(0,y.jsx)(E,{component_key:"chart_table_data",data:{dataSource:f(n),message:s("genui.chart.dataDetails")},interactive:!0,default_open_in_side_app:!0})})]})};export{K as ReactChart};
1
+ import{s as D}from"./embed-page-chunk-UDSGGVJH.js";import{Ea as E}from"./embed-page-chunk-P477ZTUO.js";import{i as T,r as v}from"./embed-page-chunk-2PFKLMTR.js";import{a as C}from"./embed-page-chunk-QV7QAJ4N.js";import"./embed-page-chunk-VW3NF5NT.js";import"./embed-page-chunk-QULNM5O2.js";import{ga as x}from"./embed-page-chunk-MHGVD4EV.js";import{a as w}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 p}from"./embed-page-chunk-QBTAJ2YI.js";var u=p(w());var R=p(T());var y=p(C());function g(l,i){if(!l||l.length===0)return{title:{text:i("genui.chart.title"),left:"left"},tooltip:{trigger:"axis"},legend:{right:0,orient:"vertical"},xAxis:{type:"category",data:[]},yAxis:{type:"value"},series:[{type:"line",name:i("genui.chart.seriesDefault",{n:1}),data:[]}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}};let s=l[0],t=Object.keys(s);if(t.length===0)return g([],i);let r=t.filter(e=>{let n=s[e];return typeof n=="number"||!isNaN(Number(n))});if(r.length>0){let e=r[0],n=t.find(a=>!r.includes(a))||t[0],o=l.map((a,c)=>a[n]!==void 0?String(a[n]):i("genui.chart.itemDefault",{n:c+1})),f=l.map(a=>{let c=a[e];return typeof c=="number"?c:Number(c)||0});return{title:{text:i("genui.chart.title"),left:"left"},tooltip:{trigger:"axis"},legend:{right:0,orient:"vertical",data:[e]},xAxis:{type:"category",data:o},yAxis:{type:"value"},series:[{type:"line",name:e,data:f}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}}}return{title:{text:i("genui.chart.title"),left:"left"},tooltip:{trigger:"axis"},legend:{right:0,orient:"vertical"},xAxis:{type:"category",data:l.map((e,n)=>i("genui.chart.itemDefault",{n:n+1}))},yAxis:{type:"value"},series:[{type:"bar",name:i("genui.chart.countSeries"),data:l.map(()=>1)}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}}}function j(l,i){if(!l||typeof l!="object"||!l.series||!Array.isArray(l.series)||l.series.length===0)return null;let s=l.series.map((e,n)=>{if(!e||typeof e!="object"||!e.type||!e.data||!Array.isArray(e.data)||e.data.length===0)return null;let o={...e,name:e.name||i("genui.chart.seriesDefault",{n:n+1})};if(e.type==="pie"){let f=e.data.map((a,c)=>typeof a=="object"&&a!==null&&"value"in a?{value:a.value,name:a.name||i("genui.chart.itemDefault",{n:c+1})}:typeof a=="number"?{value:a,name:i("genui.chart.itemDefault",{n:c+1})}:null).filter(a=>a!==null);return f.length===0?null:{...o,data:f}}return o}).filter(e=>e!==null);if(s.length===0)return null;let t={...l,series:s},r=s[0].type;if(r!=="pie"){if(!t.xAxis)t.xAxis={type:"category",data:[]};else if(typeof t.xAxis=="object"&&!Array.isArray(t.xAxis)){let e=t.xAxis;if(e.type||(e.type="category"),e.type==="category"&&!e.data){let n=s[0].data;Array.isArray(n)&&n.length>0?Array.isArray(n[0])?e.data=n.map(o=>o[0]):e.data=n.map((o,f)=>i("genui.chart.itemDefault",{n:f+1})):e.data=[]}t.xAxis=e}t.yAxis?typeof t.yAxis=="object"&&!Array.isArray(t.yAxis)&&(t.yAxis.type||(t.yAxis.type="value")):t.yAxis={type:"value"}}if(!t.title)t.title={text:i("genui.chart.title"),left:"left"};else if(typeof t.title=="object"){let e=t.title;e.left||(e.left="left"),e.text||(e.text=i("genui.chart.title")),t.title=e}if(t.tooltip||(t.tooltip={trigger:r==="pie"?"item":"axis"}),!t.legend)s.length>1&&(t.legend={right:0,orient:"vertical"});else if(typeof t.legend=="object"){let e=t.legend;t.legend=e}return r!=="pie"&&!t.grid&&(t.grid={left:"3%",right:"4%",bottom:"3%",containLabel:!0}),t}function O(l,i){let s=null;try{let n=typeof l=="string"?l:l.join("");s=(0,R.parse)(n)}catch(n){return{data:null,error:`Failed to parse JSON: ${n instanceof Error?n.message:String(n)}`}}if(!s||typeof s!="object")return{data:null,error:"Parsed data is not an object"};let t=s.series&&Array.isArray(s.series)&&s.series.length>0,r={table:Array.isArray(s.table)?s.table:void 0},e=null;if(s.echarts?e=s.echarts:t&&(e=s),e){let n=j(e,i);if(n)r.echarts=n;else if(r.table&&r.table.length>0)r.echarts=g(r.table,i);else return{data:null,error:"ECharts configuration is invalid or incomplete. Required: series array with at least one series containing type and data."}}else r.table&&r.table.length>0?r.echarts=g(r.table,i):r.echarts=g([],i);return{data:r,error:null}}var K=l=>{let{children:i}=l,s=v(),t=(0,u.useRef)(null),r=(0,u.useRef)(null),e=(0,u.useRef)(null),[n,o]=(0,u.useState)(null);(0,u.useEffect)(()=>{if(!t.current)return;r.current||(r.current=D(t.current));let a=null;if((typeof i=="string"||Array.isArray(i))&&(a=i),!a){r.current&&r.current.clear(),o(null);return}let{data:c,error:m}=O(a,s);if(m||!c){console.warn("ReactChart failed to parse chart data:",m||"Unknown parse error"),r.current&&r.current.clear(),o(null);return}if(c.table&&Array.isArray(c.table)&&o(c.table),c.echarts)try{r.current.setOption(c.echarts,!0)}catch(d){let A=d instanceof Error?d.message:"Failed to render chart";console.error("Failed to set ECharts option:",d),r.current&&r.current.clear(),o(null)}let h=()=>{r.current&&r.current.resize()};return e.current&&(e.current.disconnect(),e.current=null),t.current&&typeof ResizeObserver<"u"&&(e.current=new ResizeObserver(d=>{requestAnimationFrame(()=>{h()})}),e.current.observe(t.current)),window.addEventListener("resize",h),()=>{e.current&&(e.current.disconnect(),e.current=null),window.removeEventListener("resize",h)}},[i,s]),(0,u.useEffect)(()=>()=>{e.current&&(e.current.disconnect(),e.current=null),r.current&&(r.current.dispose(),r.current=null)},[]);let f=a=>{if(!a||a.length===0)return[];if(Array.isArray(a[0])){let c=a[0];return a.slice(1).map((h,d)=>{let A={};return h.forEach((S,b)=>{A[c[b]||`col_${b}`]=S}),A})}return a};return(0,y.jsxs)(x,{children:[(0,y.jsx)("div",{ref:t,style:{width:"100%",height:"400px",minHeight:"300px"}}),n&&n.length>0&&(0,y.jsx)("div",{style:{marginTop:16},children:(0,y.jsx)(E,{component_key:"chart_table_data",data:{dataSource:f(n),message:s("genui.chart.dataDetails")},interactive:!0,default_open_in_side_app:!0})})]})};export{K as ReactChart};