@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.
- package/dist/{AgentDetailSideApp-GSO53ECQ.mjs → AgentDetailSideApp-QZPV7MNB.mjs} +8 -8
- package/dist/AgentGovernanceWorkbench-25C3AKQI.mjs +20 -0
- package/dist/{MessageGraph-RUU5W4OT.mjs → MessageGraph-JX6Y3VFH.mjs} +4 -4
- package/dist/{ReactChart-KU4TD7TM.mjs → ReactChart-LYUXL5M6.mjs} +4 -4
- package/dist/{SkillFlow-MLSQCF4X.mjs → SkillFlow-7OCWAF5V.mjs} +4 -4
- package/dist/{TasksSideApp-LWM6XAWN.mjs → TasksSideApp-TWDLVB4D.mjs} +5 -7
- package/dist/TasksSideApp-TWDLVB4D.mjs.map +1 -0
- package/dist/{TeamWorkspace-3NLKUNRK.mjs → TeamWorkspace-FGFAUD5Z.mjs} +4 -4
- package/dist/{TopologyRuntimeView-NVFFMHTP.mjs → TopologyRuntimeView-O3VL4A7R.mjs} +5 -5
- package/dist/{WorkflowAutomationView-WBVKM73F.mjs → WorkflowAutomationView-D4YMZLRJ.mjs} +7 -7
- package/dist/{chunk-YDIVRYML.mjs → chunk-3ZEMSWAC.mjs} +4 -4
- package/dist/{chunk-ZX53OESZ.mjs → chunk-466FV4VM.mjs} +3 -3
- package/dist/{chunk-QM3NPPQJ.mjs → chunk-6BWBE7MR.mjs} +8 -8
- package/dist/{chunk-PMICYMSW.mjs → chunk-7JDWJZ5M.mjs} +1176 -944
- package/dist/chunk-7JDWJZ5M.mjs.map +1 -0
- package/dist/{chunk-RDC4ZHXF.mjs → chunk-IFRTNJ2P.mjs} +2 -2
- package/dist/{chunk-PEEXMLMK.mjs → chunk-IODHU3BD.mjs} +3 -3
- package/dist/{chunk-NRT6JXPT.mjs → chunk-JJIGSAPR.mjs} +129 -222
- package/dist/chunk-JJIGSAPR.mjs.map +1 -0
- package/dist/{chunk-BXPPM4ZX.mjs → chunk-QABSNIMF.mjs} +3 -3
- package/dist/{chunk-ZQ7G446O.mjs → chunk-UDSGQ7R7.mjs} +3 -3
- package/dist/{chunk-ZXEY5OGX.mjs → chunk-UZWBRDTU.mjs} +6 -6
- package/dist/{embed-page-AgentDetailSideApp-FHC56ARN.js → embed-page-AgentDetailSideApp-JYVZKSUU.js} +1 -1
- package/dist/embed-page-AgentGovernanceWorkbench-SD2EHW2B.js +1 -0
- package/dist/{embed-page-MessageGraph-DMP5EZBM.js → embed-page-MessageGraph-GLQXKAVC.js} +1 -1
- package/dist/{embed-page-ReactChart-PYGNSRHG.js → embed-page-ReactChart-74MHCE2K.js} +1 -1
- package/dist/{embed-page-SkillFlow-6LPE2VG3.js → embed-page-SkillFlow-NDAK3GAD.js} +1 -1
- package/dist/{embed-page-TasksSideApp-MPYOPRXW.js → embed-page-TasksSideApp-DA4LUTMD.js} +5 -5
- package/dist/{embed-page-TeamWorkspace-EXUAXKAH.js → embed-page-TeamWorkspace-DUB3L6V6.js} +1 -1
- package/dist/{embed-page-TopologyRuntimeView-MH4YMU7D.js → embed-page-TopologyRuntimeView-NFBHAICN.js} +1 -1
- package/dist/{embed-page-WorkflowAutomationView-KQYFSLLH.js → embed-page-WorkflowAutomationView-43YGTXGF.js} +1 -1
- package/dist/{embed-page-chunk-O44JEYLD.js → embed-page-chunk-2PFKLMTR.js} +5 -5
- package/dist/{embed-page-chunk-NW37OVAX.js → embed-page-chunk-BVSC3MSO.js} +1 -1
- package/dist/{embed-page-chunk-YQZI5LNV.js → embed-page-chunk-C4ZV4IXK.js} +2 -2
- package/dist/{embed-page-chunk-QGXGVLAX.js → embed-page-chunk-DWIBLGBW.js} +1 -1
- package/dist/{embed-page-chunk-I7BVN6EY.js → embed-page-chunk-GKHIPXZ2.js} +1 -1
- package/dist/{embed-page-chunk-QHXKZNDU.js → embed-page-chunk-P477ZTUO.js} +307 -191
- package/dist/{embed-page-chunk-JSAUTBU5.js → embed-page-chunk-UHH575CK.js} +1 -1
- package/dist/{embed-page-en-PQZ2ZCEH.js → embed-page-en-GLT2HEZZ.js} +1 -1
- package/dist/{embed-page-zh-D3EX4GW4.js → embed-page-zh-XMEJPDMF.js} +1 -1
- package/dist/embed-page.js +1 -1
- package/dist/{en-WQVDOIB7.mjs → en-FDNQNTHX.mjs} +7 -2
- package/dist/{en-WQVDOIB7.mjs.map → en-FDNQNTHX.mjs.map} +1 -1
- package/dist/index.d.mts +24 -26
- package/dist/index.d.ts +24 -26
- package/dist/index.js +2806 -2782
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +92 -222
- package/dist/index.mjs.map +1 -1
- package/dist/web-app.js +12 -2
- package/dist/web-app.js.map +1 -1
- package/dist/web-app.mjs +1 -1
- package/dist/{zh-6PHD4AY5.mjs → zh-2EJFFUSY.mjs} +7 -2
- package/dist/zh-2EJFFUSY.mjs.map +1 -0
- package/package.json +2 -2
- package/dist/AgentGovernanceWorkbench-LHXFBEYO.mjs +0 -20
- package/dist/TasksSideApp-LWM6XAWN.mjs.map +0 -1
- package/dist/chunk-NRT6JXPT.mjs.map +0 -1
- package/dist/chunk-PMICYMSW.mjs.map +0 -1
- package/dist/embed-page-AgentGovernanceWorkbench-KAPZJBE6.js +0 -5
- package/dist/zh-6PHD4AY5.mjs.map +0 -1
- /package/dist/{AgentDetailSideApp-GSO53ECQ.mjs.map → AgentDetailSideApp-QZPV7MNB.mjs.map} +0 -0
- /package/dist/{AgentGovernanceWorkbench-LHXFBEYO.mjs.map → AgentGovernanceWorkbench-25C3AKQI.mjs.map} +0 -0
- /package/dist/{MessageGraph-RUU5W4OT.mjs.map → MessageGraph-JX6Y3VFH.mjs.map} +0 -0
- /package/dist/{ReactChart-KU4TD7TM.mjs.map → ReactChart-LYUXL5M6.mjs.map} +0 -0
- /package/dist/{SkillFlow-MLSQCF4X.mjs.map → SkillFlow-7OCWAF5V.mjs.map} +0 -0
- /package/dist/{TeamWorkspace-3NLKUNRK.mjs.map → TeamWorkspace-FGFAUD5Z.mjs.map} +0 -0
- /package/dist/{TopologyRuntimeView-NVFFMHTP.mjs.map → TopologyRuntimeView-O3VL4A7R.mjs.map} +0 -0
- /package/dist/{WorkflowAutomationView-WBVKM73F.mjs.map → WorkflowAutomationView-D4YMZLRJ.mjs.map} +0 -0
- /package/dist/{chunk-YDIVRYML.mjs.map → chunk-3ZEMSWAC.mjs.map} +0 -0
- /package/dist/{chunk-ZX53OESZ.mjs.map → chunk-466FV4VM.mjs.map} +0 -0
- /package/dist/{chunk-QM3NPPQJ.mjs.map → chunk-6BWBE7MR.mjs.map} +0 -0
- /package/dist/{chunk-RDC4ZHXF.mjs.map → chunk-IFRTNJ2P.mjs.map} +0 -0
- /package/dist/{chunk-PEEXMLMK.mjs.map → chunk-IODHU3BD.mjs.map} +0 -0
- /package/dist/{chunk-BXPPM4ZX.mjs.map → chunk-QABSNIMF.mjs.map} +0 -0
- /package/dist/{chunk-ZQ7G446O.mjs.map → chunk-UDSGQ7R7.mjs.map} +0 -0
- /package/dist/{chunk-ZXEY5OGX.mjs.map → chunk-UZWBRDTU.mjs.map} +0 -0
package/dist/web-app.mjs
CHANGED
|
@@ -8,7 +8,12 @@ var messages = {
|
|
|
8
8
|
"mcpapp.unavailableDescription": "MCP App \u8981\u6C42\u7F51\u5173\u6C99\u7BB1\u4E0E\u63A7\u5236\u53F0\u7531\u4E0D\u540C\u6E90\uFF08origin\uFF09\u63D0\u4F9B\u670D\u52A1\u3002",
|
|
9
9
|
"mcpapp.failedToLoad": "MCP App \u52A0\u8F7D\u5931\u8D25\uFF1A{{error}}",
|
|
10
10
|
"mcpapp.resourceLoadFailed": "\u52A0\u8F7D MCP App \u8D44\u6E90\u5931\u8D25",
|
|
11
|
-
"mcpapp.toolResultAlt": "\u5DE5\u5177\u6267\u884C\u7ED3\u679C"
|
|
11
|
+
"mcpapp.toolResultAlt": "\u5DE5\u5177\u6267\u884C\u7ED3\u679C",
|
|
12
|
+
"mcpapp.test.badge": "\u63D2\u4EF6\u6D4B\u8BD5",
|
|
13
|
+
"mcpapp.test.input": "\u6D4B\u8BD5\u8F93\u5165",
|
|
14
|
+
"mcpapp.test.result": "\u6D4B\u8BD5\u7ED3\u679C",
|
|
15
|
+
"mcpapp.test.data": "Data",
|
|
16
|
+
"mcpapp.test.ui": "UI"
|
|
12
17
|
};
|
|
13
18
|
var zh_default = {
|
|
14
19
|
messages
|
|
@@ -17,4 +22,4 @@ export {
|
|
|
17
22
|
zh_default as default,
|
|
18
23
|
messages
|
|
19
24
|
};
|
|
20
|
-
//# sourceMappingURL=zh-
|
|
25
|
+
//# sourceMappingURL=zh-2EJFFUSY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/locales/mcpapp/zh.json"],"sourcesContent":["{\n \"messages\": {\n \"mcpapp.fallbackTitle\": \"MCP App\",\n \"mcpapp.openInSideApp\": \"在侧栏中打开\",\n \"mcpapp.unavailable\": \"MCP App 不可用\",\n \"mcpapp.unavailableDescription\": \"MCP App 要求网关沙箱与控制台由不同源(origin)提供服务。\",\n \"mcpapp.failedToLoad\": \"MCP App 加载失败:{{error}}\",\n \"mcpapp.resourceLoadFailed\": \"加载 MCP App 资源失败\",\n \"mcpapp.toolResultAlt\": \"工具执行结果\",\n \"mcpapp.test.badge\": \"插件测试\",\n \"mcpapp.test.input\": \"测试输入\",\n \"mcpapp.test.result\": \"测试结果\",\n \"mcpapp.test.data\": \"Data\",\n \"mcpapp.test.ui\": \"UI\"\n }\n}\n"],"mappings":";;;AACE,eAAY;AAAA,EACV,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,iCAAiC;AAAA,EACjC,uBAAuB;AAAA,EACvB,6BAA6B;AAAA,EAC7B,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,kBAAkB;AACpB;AAdF;AAAA,EACE;AAcF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axiom-lattice/react-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "React hooks for interacting with the Axiom Lattice Agent Service API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"react-i18next": "^17.0.15",
|
|
94
94
|
"use-sync-external-store": "^1.5.0",
|
|
95
95
|
"uuid": "^11.1.0",
|
|
96
|
-
"@axiom-lattice/client-sdk": "
|
|
96
|
+
"@axiom-lattice/client-sdk": "5.0.0",
|
|
97
97
|
"@axiom-lattice/i18n": "0.1.0",
|
|
98
98
|
"@axiom-lattice/protocols": "4.10.0"
|
|
99
99
|
},
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AgentGovernanceWorkbench
|
|
3
|
-
} from "./chunk-NRT6JXPT.mjs";
|
|
4
|
-
import "./chunk-QM3NPPQJ.mjs";
|
|
5
|
-
import "./chunk-YDIVRYML.mjs";
|
|
6
|
-
import "./chunk-BXPPM4ZX.mjs";
|
|
7
|
-
import "./chunk-ZX53OESZ.mjs";
|
|
8
|
-
import "./chunk-7FWCKQNB.mjs";
|
|
9
|
-
import "./chunk-PMICYMSW.mjs";
|
|
10
|
-
import "./chunk-XC6TB6PI.mjs";
|
|
11
|
-
import "./chunk-XAGSG72Y.mjs";
|
|
12
|
-
import "./chunk-RDC4ZHXF.mjs";
|
|
13
|
-
import "./chunk-Y2HJPMUR.mjs";
|
|
14
|
-
import "./chunk-HLVE2SB7.mjs";
|
|
15
|
-
import "./chunk-PEEXMLMK.mjs";
|
|
16
|
-
import "./chunk-32GKV6EM.mjs";
|
|
17
|
-
export {
|
|
18
|
-
AgentGovernanceWorkbench
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=AgentGovernanceWorkbench-LHXFBEYO.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Tasks/TasksSideApp.tsx","../src/components/Tasks/TaskBoard.tsx","../src/components/Tasks/TaskDependencyGraph.tsx","../src/components/Tasks/TaskGraphNode.tsx","../src/components/Tasks/TaskCreateModal.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { createStyles } from \"antd-style\";\nimport { App, Spin, Button, Segmented } from \"antd\";\nimport { Plus } from \"lucide-react\";\nimport type { TaskItem, TaskWorkItem } from \"@axiom-lattice/protocols\";\nimport { useClient } from \"@context\";\nimport { useAuth } from \"../../context/AuthContext\";\nimport { useWorkspaceContext } from \"../../context/WorkspaceContext\";\nimport { FilterSelect } from \"../EntityList/FilterSelect\";\nimport { TaskBoard } from \"./TaskBoard\";\nimport { TaskDependencyGraph } from \"./TaskDependencyGraph\";\nimport { TaskOutlineList } from \"./TaskOutlineList\";\nimport { TaskDetailPanel } from \"./TaskDetailPanel\";\nimport { TaskCreateModal } from \"./TaskCreateModal\";\nimport { useOpenTaskChat } from \"./useOpenTaskChat\";\nimport { useTaskCommands, type TaskActionType } from \"./useTaskCommands\";\nimport { useT } from \"../../i18n\";\n\nconst useStyles = createStyles(({ css, token }) => ({\n root: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n min-width: 0;\n overflow: hidden;\n `,\n header: css`\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 20px 24px 12px 24px;\n border-bottom: 1px solid ${token.colorBorderSecondary};\n flex-shrink: 0;\n\n @media (max-width: 600px) {\n padding: 12px;\n }\n `,\n content: css`\n flex: 1;\n overflow: auto;\n padding: 16px 24px;\n `,\n headerRow: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n\n @media (max-width: 600px) {\n flex-direction: column;\n align-items: stretch;\n }\n `,\n headerTitle: css`\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: ${token.colorText};\n `,\n filterRow: css`\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n `,\n headerActions: css`\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n\n @media (max-width: 600px) {\n width: 100%;\n flex-wrap: wrap;\n }\n `,\n viewSwitcher: css`\n min-width: 0;\n\n @media (max-width: 600px) {\n flex: 1 1 200px;\n max-width: 100%;\n\n .ant-segmented-group {\n width: 100%;\n }\n\n .ant-segmented-item {\n min-width: 0;\n flex: 1;\n }\n }\n `,\n createButton: css`\n flex: 0 0 auto;\n `,\n fullBleedContent: css`\n height: 100%;\n overflow: hidden;\n padding: 0;\n `,\n spinner: css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n error: css`\n margin: 16px 24px 0;\n padding: 12px;\n border: 1px solid ${token.colorErrorBorder};\n border-radius: ${token.borderRadius}px;\n color: ${token.colorErrorText};\n background: ${token.colorErrorBg};\n `,\n}));\n\ninterface TasksSideAppProps {\n statusFilter?: string[];\n getOwnerLabel?: (ownerType: string, ownerId: string) => string;\n /** When false, the project filter row is hidden. Default true. */\n showProjectFilter?: boolean;\n initialTask?: TaskItem;\n}\n\nexport const TasksSideApp: React.FC<TasksSideAppProps> = ({ statusFilter, getOwnerLabel, showProjectFilter = true, initialTask }) => {\n const { styles } = useStyles();\n const { message: messageApi } = App.useApp();\n const t = useT();\n const client = useClient(\"__GLOBAL__\");\n const { user } = useAuth();\n const { projectId: contextProjectId, projects, workspaceId } = useWorkspaceContext();\n const [filterProjectId, setFilterProjectId] = useState<string | null>(\n initialTask?.projectId != null\n ? String(initialTask.projectId)\n : contextProjectId\n ? String(contextProjectId)\n : null,\n );\n\n const resolvedOwnerLabel = useMemo(\n () =>\n getOwnerLabel ??\n ((ownerType: string, ownerId: string) => {\n if (ownerType === \"user\" && ownerId === user?.id) {\n return user.name || t(\"tasks.owner.me\");\n }\n return ownerType === \"agent\" ? t(\"tasks.owner.agent\") : t(\"tasks.owner.user\");\n }),\n [getOwnerLabel, user, t],\n );\n\n const [view, setView] = useState<\"board\" | \"list\" | \"graph\" | \"detail\">(\"board\");\n const [previousView, setPreviousView] = useState<\"board\" | \"list\" | \"graph\">(\"board\");\n const [hideCompleted, setHideCompleted] = useState(false);\n const [selectedTask, setSelectedTask] = useState<TaskItem | null>(null);\n /** Drill-down stack: tasks above the current one (parent → ... → current). */\n const [detailStack, setDetailStack] = useState<TaskItem[]>([]);\n const [tasks, setTasks] = useState<TaskItem[]>([]);\n const [tasksError, setTasksError] = useState<string>();\n const [workItems, setWorkItems] = useState<TaskWorkItem[]>([]);\n const [activityError, setActivityError] = useState<string>();\n const [tasksLoading, setTasksLoading] = useState(true);\n const [workItemsLoading, setWorkItemsLoading] = useState(false);\n const [showCreate, setShowCreate] = useState(false);\n const workItemsRequestGenerationRef = useRef(0);\n const tasksRequestGenerationRef = useRef(0);\n const selectedTaskIdRef = useRef<string | null>(null);\n const previousViewRef = useRef<\"board\" | \"list\" | \"graph\">(\"board\");\n const tasksRef = useRef<TaskItem[]>([]);\n const latestFilterScopeRef = useRef<string | null>(filterProjectId);\n const loadedTasksScopeRef = useRef<string | null>(null);\n latestFilterScopeRef.current = filterProjectId;\n\n const fetchTasks = useCallback(async (requestedScope: string | null = latestFilterScopeRef.current) => {\n if (latestFilterScopeRef.current !== requestedScope) return;\n const requestGeneration = ++tasksRequestGenerationRef.current;\n setTasksLoading(true);\n try {\n const result = await client.tasks.list(\n requestedScope ? { projectId: requestedScope } : undefined,\n );\n if (\n requestGeneration !== tasksRequestGenerationRef.current\n || latestFilterScopeRef.current !== requestedScope\n ) return;\n loadedTasksScopeRef.current = requestedScope;\n tasksRef.current = result;\n setTasks(result);\n setTasksError(undefined);\n const selectedTaskId = selectedTaskIdRef.current;\n if (selectedTaskId) {\n const tasksById = new Map(result.map((task) => [task.id, task]));\n const refreshedSelection = tasksById.get(selectedTaskId);\n if (!refreshedSelection) {\n selectedTaskIdRef.current = null;\n workItemsRequestGenerationRef.current += 1;\n setSelectedTask(null);\n setDetailStack([]);\n setWorkItems([]);\n setActivityError(undefined);\n setWorkItemsLoading(false);\n setView(previousViewRef.current);\n return;\n }\n setSelectedTask(refreshedSelection);\n setDetailStack((stack) => stack.flatMap((task) => {\n const refreshedTask = tasksById.get(task.id);\n return refreshedTask ? [refreshedTask] : [];\n }));\n }\n } catch {\n if (\n requestGeneration === tasksRequestGenerationRef.current\n && latestFilterScopeRef.current === requestedScope\n ) {\n setTasksError(tasksRef.current.length > 0\n ? t(\"tasks.error.refresh\")\n : t(\"tasks.error.load\"));\n }\n } finally {\n if (\n requestGeneration === tasksRequestGenerationRef.current\n && latestFilterScopeRef.current === requestedScope\n ) {\n setTasksLoading(false);\n }\n }\n }, [client, t]);\n\n const fetchWorkItems = useCallback(async (taskId: string) => {\n const requestGeneration = ++workItemsRequestGenerationRef.current;\n setWorkItemsLoading(true);\n setActivityError(undefined);\n try {\n const result = await client.tasks.workItems.list(taskId);\n if (requestGeneration === workItemsRequestGenerationRef.current && selectedTaskIdRef.current === taskId) {\n setWorkItems(result);\n }\n } catch {\n if (requestGeneration === workItemsRequestGenerationRef.current && selectedTaskIdRef.current === taskId) {\n setWorkItems([]);\n setActivityError(t(\"tasks.error.activity\"));\n }\n } finally {\n if (requestGeneration === workItemsRequestGenerationRef.current && selectedTaskIdRef.current === taskId) {\n setWorkItemsLoading(false);\n }\n }\n }, [client, t]);\n\n const { run, pending } = useTaskCommands({\n onSettled: () => {\n void fetchTasks(latestFilterScopeRef.current);\n if (selectedTaskIdRef.current) void fetchWorkItems(selectedTaskIdRef.current);\n },\n });\n\n useEffect(() => {\n void fetchTasks(filterProjectId);\n }, [fetchTasks, filterProjectId]);\n\n useEffect(() => {\n if (!initialTask?.id) return;\n selectedTaskIdRef.current = initialTask.id;\n setSelectedTask(initialTask);\n setView(\"detail\");\n fetchWorkItems(initialTask.id);\n }, []);\n\n const handleProjectFilterChange = useCallback((projectId: string | null) => {\n const nextScope = projectId ? String(projectId) : null;\n latestFilterScopeRef.current = nextScope;\n if (loadedTasksScopeRef.current !== nextScope) {\n loadedTasksScopeRef.current = nextScope;\n tasksRef.current = [];\n setTasks([]);\n setTasksError(undefined);\n selectedTaskIdRef.current = null;\n workItemsRequestGenerationRef.current += 1;\n setSelectedTask(null);\n setDetailStack([]);\n setWorkItems([]);\n setActivityError(undefined);\n setWorkItemsLoading(false);\n setView(previousViewRef.current);\n }\n setFilterProjectId(nextScope);\n }, []);\n\n const handleTaskClick = useCallback((task: TaskItem) => {\n selectedTaskIdRef.current = task.id;\n setWorkItems([]);\n setActivityError(undefined);\n setSelectedTask(task);\n setDetailStack([]);\n const nextPreviousView = view === \"detail\" ? previousView : view;\n previousViewRef.current = nextPreviousView;\n setPreviousView(nextPreviousView);\n setView(\"detail\");\n fetchWorkItems(task.id);\n }, [fetchWorkItems, view, previousView]);\n\n /** Drill into a child/parent task, pushing the current detail onto the stack. */\n const handleDrill = useCallback((task: TaskItem) => {\n selectedTaskIdRef.current = task.id;\n setWorkItems([]);\n setActivityError(undefined);\n setDetailStack((stack) => (selectedTask ? [...stack, selectedTask] : stack));\n setSelectedTask(task);\n fetchWorkItems(task.id);\n }, [fetchWorkItems, selectedTask]);\n\n const handleBack = useCallback(() => {\n if (detailStack.length > 0) {\n const previous = detailStack[detailStack.length - 1];\n selectedTaskIdRef.current = previous.id;\n setWorkItems([]);\n setActivityError(undefined);\n setDetailStack((stack) => stack.slice(0, -1));\n setSelectedTask(previous);\n fetchWorkItems(previous.id);\n return;\n }\n selectedTaskIdRef.current = null;\n workItemsRequestGenerationRef.current += 1;\n setView(previousView);\n setSelectedTask(null);\n setWorkItems([]);\n setActivityError(undefined);\n setWorkItemsLoading(false);\n }, [detailStack, previousView, fetchWorkItems]);\n\n const handleCreate = useCallback(\n async (data: { title: string; description?: string; requireReview?: boolean; priority?: string; projectId: string }) => {\n try {\n await client.tasks.create({\n title: data.title,\n description: data.description,\n requireReview: data.requireReview,\n priority: (data.priority || \"medium\") as \"low\" | \"medium\" | \"high\",\n projectId: data.projectId,\n });\n messageApi.success(t(\"tasks.created\"));\n void fetchTasks();\n setShowCreate(false);\n } catch {\n messageApi.error(t(\"tasks.error.create\"));\n }\n },\n [client, fetchTasks, messageApi, t]\n );\n\n const handleRun = useCallback(\n (task: TaskItem, type: TaskActionType, payload?: Record<string, unknown>) => {\n void run(task, type, payload);\n },\n [run],\n );\n\n const handleDetailRun = useCallback(\n (type: TaskActionType, payload?: Record<string, unknown>) => {\n if (selectedTask) void run(selectedTask, type, payload);\n },\n [run, selectedTask],\n );\n\n const handleComment = useCallback(\n (content: string): void | Promise<boolean> => {\n if (!selectedTask) return;\n return run(selectedTask, \"comment\", { content });\n },\n [run, selectedTask],\n );\n\n const handleViewChat = useOpenTaskChat(selectedTask);\n const selectedCommandPending = selectedTask ? Boolean(pending[selectedTask.id]) : false;\n\n const [actorNames, setActorNames] = useState<Record<string, string>>({});\n useEffect(() => {\n const projectId = selectedTask?.projectId;\n if (!projectId) {\n setActorNames({});\n return;\n }\n let cancelled = false;\n const memberList = client.projectRooms?.members?.list(projectId) ?? Promise.resolve([]);\n const botList = client.projectRooms?.bots?.list(projectId) ?? Promise.resolve([]);\n const workspaceMemberList = workspaceId\n ? client.workspaceMembers?.list(workspaceId) ?? Promise.resolve([])\n : Promise.resolve([]);\n Promise.all([\n memberList.catch(() => []),\n botList.catch(() => []),\n workspaceMemberList.catch(() => []),\n ]).then(([members, bots, workspaceMembers]) => {\n if (cancelled) return;\n const map: Record<string, string> = {};\n // The workspace member directory excludes the current user, so seed self.\n if (user?.id) map[`user:${user.id}`] = user.name || user.id;\n for (const member of workspaceMembers) map[`user:${member.userId}`] = member.name;\n for (const member of members) if (member.name) map[`user:${member.userId}`] = member.name;\n for (const bot of bots) map[`agent:${bot.assistantId}`] = bot.mentionName || bot.title;\n setActorNames(map);\n });\n return () => {\n cancelled = true;\n };\n }, [client, selectedTask?.projectId, workspaceId, user?.id, user?.name]);\n const resolveActorLabel = useCallback((actor: string): string | undefined => actorNames[actor], [actorNames]);\n\n if (view === \"detail\" && selectedTask) {\n return (\n <div className={styles.root}>\n {tasksError && (\n <div className={styles.error} role=\"alert\">\n {tasksError}{\" \"}\n <Button type=\"default\" size=\"small\" onClick={() => void fetchTasks()}>{t(\"common.retry\")}</Button>\n </div>\n )}\n <TaskDetailPanel\n task={selectedTask}\n relatedTasks={tasks}\n onRelatedTaskClick={handleDrill}\n workItems={workItems}\n loading={workItemsLoading}\n activityError={activityError}\n commandPending={selectedCommandPending}\n onRun={handleDetailRun}\n onComment={handleComment}\n commentPending={selectedCommandPending}\n resolveActorLabel={resolveActorLabel}\n onViewChat={handleViewChat}\n onBack={handleBack}\n focusKey={`${selectedTask.id}:${selectedCommandPending ? \"updating\" : selectedTask.status}`}\n subtasks={tasks.filter((t) => t.parentId === selectedTask.id)}\n onSubtaskClick={handleDrill}\n parent={tasks.find((t) => t.id === selectedTask.parentId) ?? null}\n onParentClick={handleDrill}\n />\n </div>\n );\n }\n\n return (\n <div className={styles.root}>\n <div className={`${styles.header} tasks-side-app__header`}>\n <div className={`${styles.headerRow} tasks-side-app__header-row`}>\n <h2 className={styles.headerTitle}>\n {statusFilter ? t(\"tasks.inbox\") : t(\"tasks.title\")}\n </h2>\n <div className={`${styles.headerActions} tasks-side-app__header-actions`}>\n <Segmented\n className={styles.viewSwitcher}\n size=\"small\"\n value={view}\n options={[\n { value: \"board\", label: t(\"tasks.view.board\") },\n { value: \"list\", label: t(\"tasks.view.list\") },\n { value: \"graph\", label: t(\"tasks.view.graph\") },\n ]}\n onChange={(v) => setView(v as \"board\" | \"list\" | \"graph\")}\n />\n <Button\n className={styles.createButton}\n type=\"primary\"\n size=\"small\"\n icon={<Plus size={14} />}\n onClick={() => setShowCreate(true)}\n >\n {t(\"tasks.newTask\")}\n </Button>\n </div>\n </div>\n {showProjectFilter && (\n <div className={styles.filterRow}>\n <FilterSelect\n style={{ width: 160 }}\n value={filterProjectId}\n onChange={handleProjectFilterChange}\n allLabel={t(\"tasks.allProjects\")}\n options={projects.map((p) => ({ value: p.id, label: p.name }))}\n />\n </div>\n )}\n </div>\n {tasksError && (\n <div className={styles.error} role=\"alert\">\n {tasksError}{\" \"}\n <Button type=\"default\" size=\"small\" onClick={() => void fetchTasks()}>{t(\"common.retry\")}</Button>\n </div>\n )}\n {tasksLoading ? (\n <div className={styles.spinner}>\n <Spin size=\"large\" />\n </div>\n ) : view === \"list\" ? (\n <div className={`${styles.content} ${styles.fullBleedContent}`}>\n <TaskOutlineList\n tasks={statusFilter ? tasks.filter((t) => statusFilter.includes(t.status)) : tasks}\n loading={false}\n onTaskClick={handleTaskClick}\n onRun={handleRun}\n getOwnerLabel={resolvedOwnerLabel}\n hideCompleted={hideCompleted}\n onHideCompletedChange={setHideCompleted}\n />\n </div>\n ) : view === \"graph\" ? (\n <div className={`${styles.content} ${styles.fullBleedContent}`}>\n <TaskDependencyGraph\n tasks={statusFilter ? tasks.filter((t) => statusFilter.includes(t.status)) : tasks}\n loading={false}\n onTaskClick={handleTaskClick}\n getOwnerLabel={resolvedOwnerLabel}\n hideCompleted={hideCompleted}\n onHideCompletedChange={setHideCompleted}\n />\n </div>\n ) : (\n <div className={styles.content}>\n <TaskBoard\n tasks={statusFilter ? tasks.filter((t) => statusFilter.includes(t.status)) : tasks}\n loading={false}\n onTaskClick={handleTaskClick}\n onRun={handleRun}\n onCreateClick={() => setShowCreate(true)}\n getOwnerLabel={resolvedOwnerLabel}\n showHeader={false}\n />\n </div>\n )}\n <TaskCreateModal\n visible={showCreate}\n onClose={() => setShowCreate(false)}\n projects={projects}\n initialProjectId={filterProjectId ?? contextProjectId ?? undefined}\n onCreate={handleCreate}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { createStyles } from \"antd-style\";\nimport { Spin } from \"antd\";\nimport { Plus, Clock, User, Bot } from \"lucide-react\";\nimport type { TaskItem } from \"@axiom-lattice/protocols\";\nimport { TaskActionsButton, TaskActionsContextMenu } from \"./TaskActions\";\nimport type { TaskActionType } from \"./useTaskCommands\";\nimport { taskOrigin } from \"./taskPalette\";\nimport { useT } from \"../../i18n\";\nimport type { SdkTFunction } from \"../../i18n\";\n\ninterface TaskBoardProps {\n tasks: TaskItem[];\n loading: boolean;\n onRun?: (task: TaskItem, type: TaskActionType, payload?: Record<string, unknown>) => void;\n onTaskClick: (task: TaskItem) => void;\n onCreateClick: () => void;\n getOwnerLabel?: (ownerType: string, ownerId: string) => string;\n showHeader?: boolean;\n}\n\ntype ColumnKey = \"pending\" | \"in_progress\" | \"review\" | \"failed\" | \"interrupted\" | \"completed\";\n\ninterface ColumnDef {\n key: ColumnKey;\n color: string;\n}\n\nconst COLUMNS: ColumnDef[] = [\n { key: \"pending\", color: \"#7A7A7A\" },\n { key: \"in_progress\", color: \"#3b82f6\" },\n { key: \"review\", color: \"#f59e0b\" },\n { key: \"failed\", color: \"#ef4444\" },\n { key: \"interrupted\", color: \"#8b5cf6\" },\n { key: \"completed\", color: \"#22c55e\" },\n];\n\nconst PRIORITY_COLORS: Record<string, string> = {\n high: \"#ef4444\",\n medium: \"#f59e0b\",\n low: \"#22c55e\",\n};\n\n/** Canonical priority key for label lookup; unknown priorities fall back to `medium`. */\nfunction priorityLabelKey(priority: string): \"high\" | \"medium\" | \"low\" {\n return priority === \"high\" || priority === \"low\" ? priority : \"medium\";\n}\n\nfunction formatRelativeTime(date: Date | string, t: SdkTFunction): string {\n const d = typeof date === \"string\" ? new Date(date) : date;\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHr = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHr / 24);\n\n if (diffSec < 60) return t(\"common.time.justNow\");\n if (diffMin < 60) return t(\"common.time.minutesAgo\", { count: diffMin });\n if (diffHr < 24) return t(\"common.time.hoursAgo\", { count: diffHr });\n if (diffDay < 30) return t(\"common.time.daysAgo\", { count: diffDay });\n return d.toLocaleDateString(t.locale);\n}\n\nconst useStyles = createStyles(({ css, token }) => ({\n container: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 24px;\n `,\n header: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n `,\n title: css`\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: ${token.colorText};\n `,\n createButton: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 36px;\n padding: 0 16px;\n background: ${token.colorPrimary};\n color: #fff;\n border: none;\n border-radius: ${token.borderRadius}px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n\n &:hover {\n background: ${token.colorPrimaryHover};\n }\n `,\n board: css`\n display: flex;\n gap: 16px;\n `,\n column: css`\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 280px;\n max-width: 280px;\n flex-shrink: 0;\n `,\n columnHeader: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 4px;\n `,\n columnTitle: css`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: ${token.colorText};\n `,\n statusDot: css`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n `,\n columnCount: css`\n font-size: 12px;\n color: ${token.colorTextSecondary};\n background: ${token.colorFillSecondary};\n padding: 1px 8px;\n border-radius: 10px;\n `,\n columnBody: css`\n display: flex;\n flex-direction: column;\n gap: 8px;\n `,\n card: css`\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 14px;\n background: ${token.colorBgContainer};\n border: 1px solid ${token.colorBorderSecondary};\n border-radius: ${token.borderRadius}px;\n cursor: pointer;\n transition: box-shadow 0.15s ease, border-color 0.15s ease;\n\n &:hover {\n border-color: ${token.colorPrimary};\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n }\n `,\n cardTitle: css`\n font-size: 14px;\n font-weight: 500;\n color: ${token.colorText};\n line-height: 1.4;\n word-break: break-word;\n `,\n originDot: css`\n display: inline-block;\n width: 7px;\n height: 7px;\n margin-right: 6px;\n vertical-align: middle;\n border-radius: 50%;\n flex-shrink: 0;\n `,\n cardHeader: css`\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 6px;\n `,\n cardMeta: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n priorityBadge: css`\n display: inline-flex;\n align-items: center;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n `,\n metaItem: css`\n display: flex;\n align-items: center;\n gap: 3px;\n font-size: 12px;\n color: ${token.colorTextTertiary};\n `,\n emptyColumn: css`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n border: 1px dashed ${token.colorBorder};\n border-radius: ${token.borderRadius}px;\n color: ${token.colorTextQuaternary};\n font-size: 13px;\n `,\n spinner: css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n}));\n\nexport const TaskBoard: React.FC<TaskBoardProps> = ({\n tasks,\n loading,\n onRun,\n onTaskClick,\n onCreateClick,\n getOwnerLabel,\n showHeader = true,\n}) => {\n const { styles } = useStyles();\n const t = useT();\n\n const tasksByStatus = useMemo(() => {\n const grouped: Record<ColumnKey, TaskItem[]> = {\n pending: [],\n in_progress: [],\n review: [],\n failed: [],\n interrupted: [],\n completed: [],\n };\n\n tasks.forEach((task) => {\n const key = task.status as ColumnKey;\n if (grouped[key]) {\n grouped[key].push(task);\n }\n });\n\n return grouped;\n }, [tasks]);\n\n if (loading) {\n return (\n <div className={styles.container}>\n {showHeader && (\n <div className={styles.header}>\n <h1 className={styles.title}>{t(\"tasks.title\")}</h1>\n </div>\n )}\n <div className={styles.spinner}>\n <Spin size=\"large\" />\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles.container}>\n {showHeader && (\n <div className={styles.header}>\n <h1 className={styles.title}>{t(\"tasks.title\")}</h1>\n <button className={styles.createButton} onClick={onCreateClick}>\n <Plus size={16} />\n {t(\"tasks.newTask\")}\n </button>\n </div>\n )}\n\n <div className={styles.board}>\n {COLUMNS.map((col) => {\n const columnTasks = tasksByStatus[col.key];\n\n return (\n <div key={col.key} className={styles.column}>\n <div className={styles.columnHeader}>\n <div className={styles.columnTitle}>\n <span\n className={styles.statusDot}\n style={{ background: col.color }}\n />\n {t(`tasks.status.${col.key}`)}\n </div>\n <span className={styles.columnCount}>{columnTasks.length}</span>\n </div>\n\n <div className={styles.columnBody}>\n {columnTasks.length === 0 ? (\n <div className={styles.emptyColumn}>{t(\"tasks.empty\")}</div>\n ) : (\n columnTasks.map((task) => {\n const priorityKey = priorityLabelKey(task.priority);\n const origin = taskOrigin(task);\n const runAction = onRun\n ? (type: TaskActionType, payload?: Record<string, unknown>) => onRun(task, type, payload)\n : undefined;\n\n const card = (\n <div\n key={task.id}\n data-testid=\"task-card\"\n className={styles.card}\n onClick={() => onTaskClick(task)}\n >\n <div className={styles.cardHeader}>\n <div className={styles.cardTitle}>\n <span\n data-testid=\"task-origin\"\n className={styles.originDot}\n style={{ background: origin.color }}\n title={t(`tasks.origin.${origin.key}`)}\n />\n {task.title}\n </div>\n {runAction && (\n <TaskActionsButton task={task} onRun={runAction} />\n )}\n </div>\n <div className={styles.cardMeta}>\n <span\n className={styles.priorityBadge}\n style={{\n background: `${PRIORITY_COLORS[priorityKey]}18`,\n color: PRIORITY_COLORS[priorityKey],\n }}\n >\n {t(`tasks.priority.${priorityKey}`)}\n </span>\n <span className={styles.metaItem}>\n {task.ownerType === \"agent\" ? (\n <Bot size={12} />\n ) : (\n <User size={12} />\n )}\n {getOwnerLabel\n ? getOwnerLabel(task.ownerType, task.ownerId)\n : task.ownerType === \"agent\"\n ? t(\"tasks.owner.agent\")\n : t(\"tasks.owner.user\")}\n </span>\n <span className={styles.metaItem}>\n <Clock size={12} />\n {formatRelativeTime(task.createdAt, t)}\n </span>\n </div>\n </div>\n );\n\n return runAction ? (\n <TaskActionsContextMenu key={task.id} task={task} onRun={runAction}>\n {card}\n </TaskActionsContextMenu>\n ) : card;\n })\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useNodesState,\n useEdgesState,\n type Node,\n type Edge,\n type NodeTypes,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { Spin, Empty, Switch, Typography } from \"antd\";\nimport { createStyles } from \"antd-style\";\nimport type { TaskItem } from \"@axiom-lattice/protocols\";\nimport { WorkflowGraphBase, applyDagreLayout } from \"@components/Chat/WorkflowGraphBase\";\nimport TaskGraphNode, { type TaskGraphNodeData } from \"./TaskGraphNode\";\nimport { buildTaskGraph } from \"./taskGraphUtils\";\nimport { TASK_NODE_WIDTH, TASK_NODE_HEIGHT } from \"./taskPalette\";\nimport { useT } from \"../../i18n\";\n\nconst { Text } = Typography;\n\nconst nodeTypes: NodeTypes = { taskNode: TaskGraphNode };\n\nconst useStyles = createStyles(({ css }) => ({\n root: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n `,\n toolbar: css`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 0 0 12px;\n flex-shrink: 0;\n `,\n canvas: css`\n flex: 1;\n min-height: 0;\n position: relative;\n `,\n spinner: css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n empty: css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n}));\n\ninterface TaskDependencyGraphProps {\n tasks: TaskItem[];\n loading: boolean;\n onTaskClick: (task: TaskItem) => void;\n getOwnerLabel?: (ownerType: string, ownerId: string) => string;\n hideCompleted?: boolean;\n onHideCompletedChange?: (value: boolean) => void;\n}\n\nexport const TaskDependencyGraph: React.FC<TaskDependencyGraphProps> = ({\n tasks,\n loading,\n onTaskClick,\n getOwnerLabel,\n hideCompleted = false,\n onHideCompletedChange,\n}) => {\n const { styles } = useStyles();\n const t = useT();\n\n const { nodes: graphNodes, edges: graphEdges } = useMemo(\n () => buildTaskGraph(tasks, { hideCompleted }),\n [tasks, hideCompleted],\n );\n\n const initialNodes = useMemo<Node<TaskGraphNodeData>[]>(() => {\n const positions = applyDagreLayout(\n graphNodes.map((n) => ({ id: n.id })),\n graphEdges.map((e) => ({ from: e.from, to: e.to })),\n { nodeWidth: TASK_NODE_WIDTH, nodeHeight: TASK_NODE_HEIGHT, nodesep: 50, ranksep: 70 },\n );\n return graphNodes.map((n) => {\n const pos = positions.get(n.id);\n return {\n id: n.id,\n type: \"taskNode\",\n position: pos ?? { x: 0, y: 0 },\n data: { task: n.task, getOwnerLabel },\n };\n });\n }, [graphNodes, graphEdges, getOwnerLabel]);\n\n const initialEdges = useMemo<Edge[]>(\n () =>\n graphEdges.map((e) => ({\n id: `${e.from}->${e.to}:${e.kind}`,\n source: e.from,\n target: e.to,\n style:\n e.kind === \"dependency\"\n ? { stroke: \"#6366f1\", strokeWidth: 1.5 }\n : { stroke: \"#9ca3af\", strokeWidth: 1, strokeDasharray: \"5 5\" },\n })),\n [graphEdges],\n );\n\n const [flowNodes, setFlowNodes, onNodesChange] = useNodesState<Node>(initialNodes);\n const [flowEdges, setFlowEdges, onEdgesChange] = useEdgesState(initialEdges);\n\n useEffect(() => {\n setFlowNodes((prev) => {\n const prevMap = new Map(prev.map((n) => [n.id, n]));\n const prevKey = [...prevMap.keys()].sort().join(\"|\");\n const nextKey = initialNodes.map((n) => n.id).sort().join(\"|\");\n if (prevKey === nextKey) {\n return initialNodes.map((n) => {\n const prevNode = prevMap.get(n.id);\n return prevNode ? { ...n, position: prevNode.position } : n;\n });\n }\n return initialNodes;\n });\n setFlowEdges(initialEdges);\n }, [initialNodes, initialEdges, setFlowNodes, setFlowEdges]);\n\n const handleNodeClick = useCallback(\n (_event: React.MouseEvent, node: Node) => {\n const task = (node.data as TaskGraphNodeData | undefined)?.task;\n if (task) onTaskClick(task);\n },\n [onTaskClick],\n );\n\n if (loading) {\n return (\n <div className={styles.spinner}>\n <Spin size=\"large\" />\n </div>\n );\n }\n\n return (\n <div className={styles.root}>\n <div className={styles.toolbar}>\n <Switch\n size=\"small\"\n checked={hideCompleted}\n onChange={(checked) => onHideCompletedChange?.(checked)}\n aria-label={t(\"tasks.hideCompleted\")}\n />\n <Text type=\"secondary\" style={{ fontSize: 13 }}>\n {t(\"tasks.hideCompleted\")}\n </Text>\n </div>\n {flowNodes.length === 0 ? (\n <div className={styles.empty}>\n <Empty description={t(\"tasks.empty\")} />\n </div>\n ) : (\n <div className={styles.canvas} key={String(hideCompleted)}>\n <WorkflowGraphBase\n nodes={flowNodes}\n edges={flowEdges}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeClick={handleNodeClick}\n fitView\n fitViewOptions={{ padding: 0.15 }}\n nodesDraggable\n nodesConnectable={false}\n miniMap\n attributionPosition=\"bottom-right\"\n />\n </div>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Handle, Position, type NodeProps, type Node } from \"@xyflow/react\";\nimport { Tag, Typography } from \"antd\";\nimport { User, Bot } from \"lucide-react\";\nimport type { TaskItem } from \"@axiom-lattice/protocols\";\nimport { STATUS_COLORS, PRIORITY_LABELS } from \"./taskPalette\";\nimport { useT } from \"../../i18n\";\n\nconst { Text } = Typography;\n\nexport { STATUS_COLORS } from \"./taskPalette\";\n\nexport interface TaskGraphNodeData extends Record<string, unknown> {\n task: TaskItem;\n getOwnerLabel?: (ownerType: string, ownerId: string) => string;\n}\n\nconst TaskGraphNode: React.FC<NodeProps<Node<TaskGraphNodeData>>> = ({ data }) => {\n const t = useT();\n if (!data) return null;\n\n const { task, getOwnerLabel } = data;\n const statusColor = STATUS_COLORS[task.status] ?? STATUS_COLORS.pending;\n const priority = PRIORITY_LABELS[task.priority] ?? PRIORITY_LABELS.medium;\n const ownerLabel = getOwnerLabel\n ? getOwnerLabel(task.ownerType, task.ownerId)\n : task.ownerType === \"agent\"\n ? t(\"tasks.owner.agent\")\n : t(\"tasks.owner.user\");\n\n return (\n <div style={{ padding: 4 }}>\n <Handle type=\"target\" position={Position.Top} />\n\n <div\n style={{\n width: 240,\n background: \"#fff\",\n borderRadius: 12,\n boxShadow: \"0 1px 6px rgba(0,0,0,0.08)\",\n border: \"1px solid #e5e7eb\",\n borderLeft: `4px solid ${statusColor}`,\n overflow: \"hidden\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n }}\n >\n <div style={{ padding: \"10px 12px\", display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <Text\n strong\n style={{ fontSize: 13, lineHeight: 1.4, display: \"block\" }}\n ellipsis={{ tooltip: task.title }}\n >\n {task.title}\n </Text>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <Tag\n style={{\n margin: 0,\n fontSize: 11,\n padding: \"0 6px\",\n lineHeight: \"18px\",\n background: `${priority.color}18`,\n color: priority.color,\n border: \"none\",\n }}\n >\n {t(`tasks.priority.${task.priority}`)}\n </Tag>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 3,\n fontSize: 12,\n color: \"#9ca3af\",\n }}\n >\n {task.ownerType === \"agent\" ? <Bot size={12} /> : <User size={12} />}\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: 140,\n }}\n >\n {ownerLabel}\n </span>\n </span>\n </div>\n </div>\n </div>\n\n <Handle type=\"source\" position={Position.Bottom} />\n </div>\n );\n};\n\nexport default TaskGraphNode;\n","import React, { useState, useEffect } from \"react\";\nimport { Modal, Form, Input, Select, Switch } from \"antd\";\nimport { createStyles } from \"antd-style\";\nimport { useT } from \"../../i18n\";\n\n/** A project option offered by the create-task form. */\nexport interface TaskCreateProjectOption {\n id: string;\n name: string;\n}\n\nexport interface TaskCreateInput {\n title: string;\n description?: string;\n requireReview?: boolean;\n priority?: string;\n projectId: string;\n}\n\ninterface TaskCreateModalProps {\n visible: boolean;\n onClose: () => void;\n /** Projects the task can be created under. A project is required. */\n projects: TaskCreateProjectOption[];\n /** Preselected project (e.g. the active project filter). */\n initialProjectId?: string;\n onCreate: (data: TaskCreateInput) => void;\n}\n\nconst useStyles = createStyles(({ token, css }) => ({\n switchRow: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 0;\n `,\n switchLabel: css`\n font-size: 14px;\n color: ${token.colorText};\n `,\n}));\n\nexport const TaskCreateModal: React.FC<TaskCreateModalProps> = ({\n visible,\n onClose,\n projects,\n initialProjectId,\n onCreate,\n}) => {\n const { styles } = useStyles();\n const t = useT();\n const [form] = Form.useForm();\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (visible) {\n form.resetFields();\n if (initialProjectId) {\n form.setFieldsValue({ projectId: initialProjectId });\n }\n }\n }, [visible, form, initialProjectId]);\n\n const handleSubmit = async () => {\n try {\n const values = await form.validateFields();\n setLoading(true);\n onCreate({\n title: values.title,\n description: values.description || undefined,\n requireReview: values.requireReview || false,\n priority: values.priority || \"medium\",\n projectId: values.projectId,\n });\n form.resetFields();\n onClose();\n } catch {\n // validation failed\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Modal\n title={t(\"tasks.newTask\")}\n open={visible}\n onCancel={onClose}\n onOk={handleSubmit}\n confirmLoading={loading}\n okText={t(\"common.create\")}\n cancelText={t(\"common.cancel\")}\n destroyOnClose\n >\n <Form\n form={form}\n layout=\"vertical\"\n initialValues={{ priority: \"medium\", requireReview: false, projectId: initialProjectId }}\n >\n <Form.Item\n name=\"projectId\"\n label={t(\"tasks.create.project\")}\n rules={[{ required: true, message: t(\"tasks.create.projectRequired\") }]}\n >\n <Select\n placeholder={t(\"tasks.create.projectPlaceholder\")}\n options={projects.map((project) => ({ value: project.id, label: project.name }))}\n />\n </Form.Item>\n <Form.Item\n name=\"title\"\n label={t(\"tasks.create.titleLabel\")}\n rules={[{ required: true, message: t(\"tasks.create.titleRequired\") }]}\n >\n <Input placeholder={t(\"tasks.create.titlePlaceholder\")} />\n </Form.Item>\n <Form.Item name=\"description\" label={t(\"tasks.create.description\")}>\n <Input.TextArea rows={4} placeholder={t(\"tasks.create.descriptionPlaceholder\")} />\n </Form.Item>\n <Form.Item name=\"priority\" label={t(\"tasks.fact.priority\")}>\n <Select\n options={[\n { value: \"low\", label: t(\"tasks.priority.low\") },\n { value: \"medium\", label: t(\"tasks.priority.medium\") },\n { value: \"high\", label: t(\"tasks.priority.high\") },\n ]}\n />\n </Form.Item>\n <div className={styles.switchRow}>\n <span className={styles.switchLabel}>{t(\"tasks.create.requireReview\")}</span>\n <Form.Item name=\"requireReview\" valuePropName=\"checked\" noStyle>\n <Switch />\n </Form.Item>\n </div>\n </Form>\n </Modal>\n );\n};\n"],"mappings":"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","names":["useState","useEffect","useCallback","useMemo","createStyles","Spin","Plus","useMemo","Spin","Typography","createStyles","User","Bot","jsx","jsxs","Bot","User","jsx","jsxs","Text","Typography","useStyles","createStyles","useMemo","Spin","useEffect","Switch","createStyles","jsx","jsxs","useStyles","createStyles","useEffect","Switch","jsx","jsxs","useStyles","createStyles","useState","useMemo","useCallback","useEffect","t","Plus","Spin"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Governance/AgentGovernanceWorkbench.tsx","../src/components/Governance/AgentList.tsx","../src/components/Governance/AgentGraphView.tsx","../src/components/Governance/AgentGraphNode.tsx","../src/components/Governance/AgentCardStats.tsx","../src/components/Chat/CreateAssistantModal.tsx","../src/components/Chat/ParentAgentSelector.tsx","../src/components/Chat/SubAgentInheritList.tsx","../src/components/Chat/localRuntimeValidation.ts","../src/components/Governance/AgentCreationOnboardingModal.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { message, Modal } from \"antd\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\nimport { useApi } from \"../../hooks/useApi\";\nimport { AgentList } from \"./AgentList\";\nimport { AgentDetailView } from \"./AgentDetailView\";\nimport ProjectScopeProvider from \"../ProjectScopeProvider\";\nimport { useSideAppOpener } from \"../Chat/SideAppBrowserContext\";\nimport { CreateAssistantModal } from \"../Chat/CreateAssistantModal\";\nimport type { CreationMode } from \"../Chat/CreateAssistantModal\";\nimport { buildAgentListItems } from \"./agentMeta\";\nimport type { AgentCardStatsData } from \"./AgentCardStats\";\nimport type { AgentListItem, DetailTab } from \"./types\";\nimport { AgentCreationOnboardingModal, type AgentCreationMethod } from \"./AgentCreationOnboardingModal\";\nimport { useT } from \"../../i18n\";\n\nconst parseGraphDefinition = (value: Assistant[\"graphDefinition\"]): Record<string, unknown> => {\n let parsed: unknown = value;\n if (typeof value === \"string\") {\n try {\n parsed = JSON.parse(value) as unknown;\n } catch {\n return {};\n }\n }\n return parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : {};\n};\n\nexport const AgentGovernanceWorkbench: React.FC = () => {\n const { get, del, put } = useApi();\n const t = useT();\n const [assistants, setAssistants] = useState<Assistant[]>([]);\n const [stats, setStats] = useState<Record<string, AgentCardStatsData>>({});\n const [statsExpiresAt, setStatsExpiresAt] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [initialTab, setInitialTab] = useState<DetailTab>(\"graph\");\n const [detailInitialMessage, setDetailInitialMessage] = useState<string | null>(null);\n const [detailInitialMessageCustomRunConfig, setDetailInitialMessageCustomRunConfig] = useState<Record<string, unknown> | null>(null);\n const [detailProjectId, setDetailProjectId] = useState<string | null>(null);\n const [onboardingOpen, setOnboardingOpen] = useState(false);\n const [restoreOnboardingFocus, setRestoreOnboardingFocus] = useState(true);\n const [createOpen, setCreateOpen] = useState(false);\n const [createInitialMode, setCreateInitialMode] = useState<CreationMode>(\"learn\");\n const [createInitialValues, setCreateInitialValues] = useState<Record<string, unknown>>({});\n const [deleteTargetId, setDeleteTargetId] = useState<string | null>(null);\n const [deleting, setDeleting] = useState(false);\n\n const loadAgents = useCallback(async () => {\n setLoading(true);\n try {\n const [listRes, statsRes] = await Promise.all([\n get<{ success: boolean; data: { records: Assistant[] } }>(\"/api/assistants\"),\n get<{ success: boolean; data: { records: AgentCardStatsData[] }; cache?: { expiresAt: string } }>(\"/api/assistants/stats\").catch(() => null),\n ]);\n if (listRes.success && listRes.data?.records) {\n setAssistants(listRes.data.records);\n }\n if (statsRes?.success && statsRes.data?.records) {\n const byId: Record<string, AgentCardStatsData> = {};\n for (const rec of statsRes.data.records) {\n byId[rec.id] = rec;\n }\n setStats(byId);\n setStatsExpiresAt(statsRes.cache?.expiresAt ?? null);\n }\n } catch {\n message.error(t(\"governance.workbench.loadFailed\"));\n } finally {\n setLoading(false);\n }\n }, [get, t]);\n\n useEffect(() => {\n loadAgents();\n }, [loadAgents]);\n\n const items: AgentListItem[] = React.useMemo(() => buildAgentListItems(assistants), [assistants]);\n const selectedAssistant = assistants.find((a) => a.id === selectedId) ?? null;\n\n const openDetail = useCallback((id: string, tab: DetailTab = \"graph\") => {\n setSelectedId(id);\n setInitialTab(tab);\n setDetailInitialMessage(null);\n setDetailProjectId(null);\n }, []);\n\n const openSideAppCard = useSideAppOpener();\n\n const openAgentDetailTab = useCallback(\n (id: string, tab: DetailTab) => {\n const name = assistants.find((a) => a.id === id)?.name ?? t(\"governance.workbench.agentFallback\");\n openSideAppCard({\n component_key: \"agent_detail_side_app\",\n data: { assistantId: id, initialTab: tab },\n message: name,\n });\n },\n [assistants, openSideAppCard, t]\n );\n\n const handleCreateClick = useCallback(() => {\n setRestoreOnboardingFocus(true);\n setOnboardingOpen(true);\n }, []);\n\n const handleSelectCreationMethod = useCallback((method: AgentCreationMethod) => {\n const initialization: Record<AgentCreationMethod, { mode: CreationMode; values: Record<string, unknown> }> = {\n manual: { mode: \"scratch\", values: {} },\n external: { mode: \"scratch\", values: { type: \"a2a_remote\" } },\n learn: { mode: \"learn\", values: {} },\n };\n const selected = initialization[method];\n setCreateInitialMode(selected.mode);\n setCreateInitialValues(selected.values);\n setRestoreOnboardingFocus(false);\n setOnboardingOpen(false);\n setCreateOpen(true);\n }, []);\n\n const handleSave = useCallback(\n async (assistant: Assistant, config: Record<string, unknown>) => {\n const currentDef = parseGraphDefinition(assistant.graphDefinition);\n let result: { success: boolean };\n try {\n result = await put<{ success: boolean }>(`/api/assistants/${assistant.id}`, {\n name: config.name !== undefined ? (config.name as string) : assistant.name,\n description:\n config.description !== undefined\n ? (config.description as string)\n : assistant.description,\n graphDefinition: { ...currentDef, ...config },\n });\n } catch (error) {\n message.error(t(\"governance.detail.saveFailed\"));\n throw error;\n }\n if (!result.success) {\n message.error(t(\"governance.detail.saveFailed\"));\n throw new Error(\"Failed to save agent\");\n }\n message.success(t(\"common.saved\"));\n loadAgents();\n },\n [put, loadAgents, t]\n );\n\n /**\n * In-place single-assistant update from the detail view's event-driven\n * refresh (architect copilot changed config server-side). Avoids the\n * loadAgents() full reload that rebuilt the whole canvas.\n */\n const handleAssistantUpdated = useCallback((updated: Assistant) => {\n setAssistants((prev) => prev.map((a) => (a.id === updated.id ? updated : a)));\n }, []);\n\n /**\n * List-path delete: AgentList has no confirm of its own, so confirm here,\n * then delete, then reload.\n */\n const confirmDelete = useCallback(\n (id: string) => {\n setDeleteTargetId(id);\n },\n []\n );\n\n const handleConfirmDelete = useCallback(async () => {\n if (!deleteTargetId) return;\n setDeleting(true);\n try {\n const result = await del<{ success: boolean }>(`/api/assistants/${deleteTargetId}`);\n if (result.success) {\n message.success(t(\"governance.detail.deleted\"));\n // Remove locally BEFORE reloading: if the refresh fails, the\n // deleted agent must not linger and get resurrected by a save.\n setAssistants((prev) => prev.filter((a) => a.id !== deleteTargetId));\n loadAgents();\n setDeleteTargetId(null);\n } else {\n message.error(t(\"governance.detail.deleteFailed\"));\n }\n } catch {\n message.error(t(\"governance.detail.deleteFailed\"));\n } finally {\n setDeleting(false);\n }\n }, [deleteTargetId, del, loadAgents, t]);\n\n /**\n * Detail-path delete: AgentConfigPanel already shows its own confirm modal,\n * so no second confirm here. Resolves only after a successful delete so the\n * panel navigates back; rejects on failure so the panel stays put (its catch\n * shows the error toast).\n */\n const handleDelete = useCallback(\n async (id: string): Promise<void> => {\n const result = await del<{ success: boolean }>(`/api/assistants/${id}`);\n if (!result.success) {\n throw new Error(\"Failed to delete agent\");\n }\n message.success(t(\"governance.detail.deleted\"));\n // Remove locally BEFORE reloading (see confirmDelete).\n setAssistants((prev) => prev.filter((a) => a.id !== id));\n loadAgents();\n },\n [del, loadAgents, t]\n );\n\n return (\n <div style={{ height: \"100%\", background: \"#fafafa\", overflow: \"hidden\" }}>\n {selectedAssistant ? (\n // Isolated workspace scope for the detail page: the learning project\n // selection (modal handoff / canvas selector) must scope the copilot's\n // run headers WITHOUT touching the shell-level WorkspaceContext —\n // writing the shell context navigates the shell to the project page.\n <ProjectScopeProvider key={selectedAssistant.id} defaultProjectId={detailProjectId ?? undefined}>\n <AgentDetailView\n assistant={selectedAssistant}\n allAssistants={assistants}\n onBack={() => setSelectedId(null)}\n onDeleted={handleDelete}\n onSave={handleSave}\n onAssistantUpdated={handleAssistantUpdated}\n onAgentListInvalidated={loadAgents}\n initialTab={initialTab}\n initialMessage={detailInitialMessage}\n initialMessageCustomRunConfig={detailInitialMessageCustomRunConfig}\n initialProjectId={detailProjectId}\n />\n </ProjectScopeProvider>\n ) : (\n <>\n <AgentList\n items={items}\n assistants={assistants}\n stats={stats}\n statsExpiresAt={statsExpiresAt}\n loading={loading}\n onItemClick={(id) => openAgentDetailTab(id, \"graph\")}\n onOpenPlayground={(id) => openAgentDetailTab(id, \"playground\")}\n onOpenEval={(id) => openAgentDetailTab(id, \"eval\")}\n onCreate={handleCreateClick}\n onDelete={confirmDelete}\n />\n </>\n )}\n <AgentCreationOnboardingModal\n open={onboardingOpen}\n onCancel={() => {\n setRestoreOnboardingFocus(true);\n setOnboardingOpen(false);\n }}\n onSelectMethod={handleSelectCreationMethod}\n focusTriggerAfterClose={restoreOnboardingFocus}\n />\n <CreateAssistantModal\n open={createOpen}\n initialMode={createInitialMode}\n initialValues={createInitialValues}\n onCancel={() => setCreateOpen(false)}\n onSuccess={(created, options) => {\n setCreateOpen(false);\n setAssistants((prev) => {\n const exists = prev.some((a) => a.id === created.id);\n return exists ? prev : [created, ...prev];\n });\n openDetail(created.id, \"graph\");\n setDetailInitialMessage(options?.initialMessage ?? null);\n setDetailInitialMessageCustomRunConfig(options?.initialMessageCustomRunConfig ?? null);\n setDetailProjectId(options?.projectId ?? null);\n loadAgents();\n }}\n />\n <Modal\n title={t(\"governance.deleteAgent\")}\n open={deleteTargetId !== null}\n onCancel={() => setDeleteTargetId(null)}\n onOk={handleConfirmDelete}\n okText={t(\"common.delete\")}\n okButtonProps={{ danger: true, loading: deleting }}\n cancelText={t(\"common.cancel\")}\n >\n <p>{t(\"governance.delete.irreversible\")}</p>\n </Modal>\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { Tag, Tooltip } from \"antd\";\nimport { Bot, Pencil, PlayCircle, FlaskConical, Network, Trash2 } from \"lucide-react\";\nimport { EntityListView } from \"../EntityList/EntityListView\";\nimport type { EntityAction, ViewModeExtension } from \"../EntityList/types\";\nimport { FilterSelect } from \"../EntityList/FilterSelect\";\nimport type { AgentListItem } from \"./types\";\nimport { AgentGraphView } from \"./AgentGraphView\";\nimport { AgentCardStats, type AgentCardStatsData } from \"./AgentCardStats\";\nimport { getTypeBadgeInfo, colorHex, statusHex } from \"./agentMeta\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\nimport { useT, type TranslationKey } from \"../../i18n\";\n\nexport interface AgentListProps {\n items: AgentListItem[];\n assistants?: Assistant[];\n stats?: Record<string, AgentCardStatsData>;\n /** When the server-side stats cache expires (ISO) — shown as a refresh hint. */\n statsExpiresAt?: string | null;\n loading: boolean;\n onItemClick: (id: string) => void;\n onOpenPlayground: (id: string) => void;\n onOpenEval: (id: string) => void;\n onCreate: () => void;\n onDelete?: (id: string) => void;\n}\n\nconst TYPE_TABS: ReadonlyArray<{ key: string; labelKey: TranslationKey }> = [\n { key: \"all\", labelKey: \"governance.list.tab.all\" },\n { key: \"capability\", labelKey: \"governance.list.tab.capability\" },\n { key: \"orchestrator\", labelKey: \"governance.list.tab.orchestrator\" },\n { key: \"team\", labelKey: \"governance.list.tab.team\" },\n { key: \"workflow\", labelKey: \"governance.list.tab.workflow\" },\n];\n\nexport const AgentList: React.FC<AgentListProps> = ({\n items,\n assistants = [],\n stats,\n loading,\n onItemClick,\n onOpenPlayground,\n onOpenEval,\n onCreate,\n onDelete,\n}) => {\n const t = useT();\n const [activeTab, setActiveTab] = useState(\"all\");\n const [domainFilter, setDomainFilter] = useState<string | null>(null);\n const [statusFilter, setStatusFilter] = useState<string | null>(null);\n\n const allDomains = useMemo(() => {\n const set = new Set<string>();\n items.forEach((item) => item.tags.forEach((t) => set.add(t)));\n return Array.from(set).map((t) => ({ value: t, label: t }));\n }, [items]);\n\n const visibleItems = useMemo(() => {\n return items.filter((item) => {\n if (activeTab !== \"all\" && item.type !== activeTab) return false;\n if (domainFilter && !item.tags.includes(domainFilter)) return false;\n if (statusFilter && item.status !== statusFilter) return false;\n return true;\n });\n }, [items, activeTab, domainFilter, statusFilter]);\n\n const itemActions: EntityAction<AgentListItem>[] = [\n {\n key: \"edit\",\n icon: Pencil,\n label: t(\"common.edit\"),\n onClick: (item) => onItemClick(item.id),\n },\n {\n key: \"playground\",\n icon: PlayCircle,\n label: t(\"governance.list.action.playground\"),\n onClick: (item) => onOpenPlayground(item.id),\n },\n {\n key: \"eval\",\n icon: FlaskConical,\n label: t(\"governance.list.action.eval\"),\n onClick: (item) => onOpenEval(item.id),\n },\n ];\n\n if (onDelete) {\n itemActions.push({\n key: \"delete\",\n icon: Trash2,\n label: t(\"common.delete\"),\n danger: true,\n onClick: (item) => onDelete(item.id),\n });\n }\n\n const viewModeExtensions: ViewModeExtension[] = useMemo(\n () => [\n {\n mode: \"graph\",\n icon: Network,\n label: t(\"governance.list.viewMode.graph\"),\n render: () => <AgentGraphView assistants={assistants} onNodeClick={onItemClick} />,\n },\n ],\n [assistants, onItemClick, t]\n );\n\n return (\n <>\n <span\n data-testid=\"agent-list-state\"\n data-loading={String(loading)}\n data-count={visibleItems.length}\n hidden\n aria-hidden=\"true\"\n />\n <EntityListView<AgentListItem>\n title={t(\"governance.list.title\")}\n itemName=\"common.item.agent\"\n items={visibleItems}\n loading={loading}\n keyExtractor={(item) => item.id}\n tabs={TYPE_TABS.map((tab) => ({ key: tab.key, label: t(tab.labelKey) }))}\n activeTab={activeTab}\n onTabChange={(key) => setActiveTab(key)}\n headerLeft={\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n <FilterSelect value={domainFilter} onChange={setDomainFilter} options={allDomains} placeholder={t(\"governance.list.filter.domain\")} allLabel={t(\"governance.list.filter.allDomains\")} />\n <FilterSelect\n value={statusFilter}\n onChange={setStatusFilter}\n options={[\n { value: \"enabled\", label: t(\"governance.list.status.enabled\") },\n { value: \"draft\", label: t(\"governance.list.status.draft\") },\n { value: \"disabled\", label: t(\"governance.list.status.disabled\") },\n ]}\n placeholder={t(\"governance.list.filter.status\")}\n allLabel={t(\"governance.list.filter.allStatuses\")}\n />\n </div>\n }\n renderIcon={(item) => {\n const typeColor = colorHex(getTypeBadgeInfo(item.type).color);\n return (\n <div\n title={t(\"governance.list.typeIconTitle\", { type: item.type })}\n style={{\n width: 32,\n height: 32,\n borderRadius: 8,\n background: `${typeColor}1A`,\n color: typeColor,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Bot size={18} />\n </div>\n );\n }}\n renderPrimary={(item) => (\n <span data-testid=\"agent-name\" data-agent-id={item.id}>{item.name}</span>\n )}\n renderSecondary={(item) => item.description || undefined}\n renderDetails={(item) => (\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: 8, flexWrap: \"wrap\" }}>\n <div style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\", alignItems: \"center\" }}>\n {item.tags.map((tag) => (\n <Tag key={tag} color=\"magenta\" style={{ margin: 0, borderRadius: 10, border: \"none\" }}>{tag}</Tag>\n ))}\n <Tag color={getTypeBadgeInfo(item.type).color} style={{ margin: 0, borderRadius: 10, border: \"none\" }}>{item.type}</Tag>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, flexShrink: 0 }}>\n <Tooltip title={t(\"governance.list.statusTooltip\", { status: item.status })}>\n <span\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: statusHex(item.status),\n display: \"inline-block\",\n cursor: \"help\",\n }}\n />\n </Tooltip>\n <span style={{ fontSize: 12, color: \"#8c8c8c\" }}>{item.version}</span>\n </div>\n </div>\n )}\n renderFooter={(item) => (\n <div style={{ borderTop: \"1px dashed #f0f0f0\", paddingTop: 10 }}>\n <AgentCardStats stats={stats?.[item.id]} />\n </div>\n )}\n itemActions={itemActions}\n actionsStyle=\"icon\"\n actionsPosition=\"hover\"\n onItemClick={(item) => onItemClick(item.id)}\n createLabel={t(\"governance.list.create\")}\n onCreateClick={onCreate}\n viewModeExtensions={viewModeExtensions}\n emptyIcon={<Bot size={48} style={{ opacity: 0.5 }} />}\n emptyTitle={t(\"governance.list.emptyTitle\")}\n emptyDescription={t(\"governance.list.emptyDescription\")}\n />\n </>\n );\n};\n","import React, { useMemo, useEffect, useState } from \"react\";\nimport { ReactFlow, Background, Controls, Node, Edge, useNodesState, useEdgesState, ReactFlowProvider, NodeTypes } from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide } from \"d3-force\";\nimport { AgentGraphNode, AGENT_NODE_WIDTH, AGENT_NODE_HEIGHT } from \"./AgentGraphNode\";\nimport { buildAgentGraphData } from \"./agentMeta\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\n\nexport interface AgentGraphViewProps {\n assistants: Assistant[];\n onNodeClick?: (assistantId: string) => void;\n}\n\nconst AgentGraphViewInner: React.FC<AgentGraphViewProps> = ({ assistants, onNodeClick }) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [hoveredNodeId, setHoveredNodeId] = useState<string | null>(null);\n\n const nodeTypes = useMemo(() => ({ agent: AgentGraphNode as any }) as NodeTypes, []);\n\n const graph = useMemo(() => buildAgentGraphData(assistants), [assistants]);\n\n useEffect(() => {\n const simNodes = graph.nodes.map((n) => ({ id: n.id }));\n const simLinks = graph.edges.map((e) => ({ source: e.source, target: e.target }));\n const nodeById = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const simulation = forceSimulation(simNodes as any)\n .force(\"link\", forceLink(simLinks).id((d: any) => d.id).distance(80))\n .force(\"charge\", forceManyBody().strength(-220))\n .force(\"center\", forceCenter(0, 0))\n .force(\"collide\", forceCollide(45))\n .stop();\n for (let i = 0; i < 300; i++) simulation.tick();\n\n const initialNodes: Node[] = simNodes.map((n: any) => ({\n id: n.id,\n type: \"agent\",\n data: nodeById.get(n.id)!,\n // d3-force positions are node CENTERS; ReactFlow positions are\n // top-left corners. Offset by half the node size so edges land on\n // the nodes instead of floating past them.\n position: {\n x: n.x - AGENT_NODE_WIDTH / 2,\n y: n.y - AGENT_NODE_HEIGHT / 2,\n },\n }));\n const initialEdges: Edge[] = graph.edges.map((e) => ({\n id: `e${e.source}-${e.target}`,\n source: e.source,\n target: e.target,\n style: { stroke: \"#1677ff\", strokeWidth: 2 },\n type: \"straight\",\n }));\n setNodes(initialNodes);\n setEdges(initialEdges);\n }, [graph, setNodes, setEdges]);\n\n const displayNodes = useMemo(() => {\n if (hoveredNodeId === null) return nodes;\n return nodes.map((node) => {\n const isConnected =\n node.id === hoveredNodeId ||\n edges.some((e) => (e.source === hoveredNodeId && e.target === node.id) || (e.target === hoveredNodeId && e.source === node.id));\n return { ...node, style: { opacity: isConnected ? 1 : 0.2, transition: \"opacity 0.2s ease\" } };\n });\n }, [nodes, edges, hoveredNodeId]);\n\n const displayEdges = useMemo(() => {\n if (hoveredNodeId === null) {\n return edges.map((edge) => ({ ...edge, style: { stroke: \"#1677ff\", strokeWidth: 1.5, opacity: 0.25, transition: \"opacity 0.2s ease\" } }));\n }\n return edges.map((edge) => {\n const isConnected = edge.source === hoveredNodeId || edge.target === hoveredNodeId;\n return { ...edge, style: { stroke: \"#1677ff\", strokeWidth: isConnected ? 2.5 : 1, opacity: isConnected ? 1 : 0.04, transition: \"opacity 0.2s ease\" } };\n });\n }, [edges, hoveredNodeId]);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", background: \"#fafafa\", position: \"relative\" }}>\n <ReactFlow\n nodes={displayNodes}\n edges={displayEdges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeMouseEnter={(_event, node) => setHoveredNodeId(node.id)}\n onNodeMouseLeave={() => setHoveredNodeId(null)}\n onNodeClick={(_event, node) => onNodeClick?.(String(node.id))}\n nodeTypes={nodeTypes}\n fitView\n fitViewOptions={{ padding: 0.25 }}\n >\n <Background color=\"#eee\" gap={20} />\n <Controls />\n </ReactFlow>\n </div>\n );\n};\n\nexport const AgentGraphView: React.FC<AgentGraphViewProps> = (props) => (\n <ReactFlowProvider>\n <AgentGraphViewInner {...props} />\n </ReactFlowProvider>\n);\n\n","import React, { memo } from \"react\";\nimport { Handle, Position, NodeProps, Node } from \"@xyflow/react\";\nimport type { AgentGraphNodeData } from \"./types\";\nimport { getTypeBadgeInfo, colorHex } from \"./agentMeta\";\n\n/**\n * Estimated rendered size of an AgentGraphNode (dot + label).\n * The graph layout uses these to convert d3-force center coordinates\n * into ReactFlow top-left positions, so edges connect at node centers.\n */\nexport const AGENT_NODE_WIDTH = 60;\nexport const AGENT_NODE_HEIGHT = 72;\n\nexport const AgentGraphNode: React.FC<NodeProps<Node<AgentGraphNodeData>>> = memo(({ data }) => {\n const badge = getTypeBadgeInfo(data.type);\n const dotSize = Math.min(12 + Math.sqrt(data.subAgentCount) * 10, 48);\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n {/* Centered, transparent handles so edges connect at the node center. */}\n <Handle\n type=\"target\"\n position={Position.Top}\n style={{\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n background: \"transparent\",\n border: \"none\",\n width: 0,\n height: 0,\n }}\n isConnectable={false}\n />\n <div\n title={data.label}\n style={{\n width: dotSize,\n height: dotSize,\n borderRadius: \"50%\",\n background: colorHex(badge.color),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#fff\",\n fontSize: Math.max(10, dotSize * 0.4),\n fontWeight: 600,\n cursor: \"pointer\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15)\",\n }}\n >\n {data.label.charAt(0).toUpperCase()}\n </div>\n <div style={{ fontSize: 11, maxWidth: 120, textAlign: \"center\", whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\", marginTop: 4 }}>\n {data.label}\n </div>\n <Handle\n type=\"source\"\n position={Position.Top}\n style={{\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n background: \"transparent\",\n border: \"none\",\n width: 0,\n height: 0,\n }}\n isConnectable={false}\n />\n </div>\n );\n});\n\nAgentGraphNode.displayName = \"AgentGraphNode\";\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\nimport { createStyles } from \"antd-style\";\nimport { MiniBarChart } from \"./MiniChart\";\nimport { useT, type SdkTFunction } from \"../../i18n\";\n\nexport interface AgentCardStatsData {\n id: string;\n threadCount: number;\n last7d: number;\n last30d: number;\n lastActive: string | null;\n daily7d: number[];\n daily30d: number[];\n evalScore: number | null;\n evalPassRate: number | null;\n evalRuns: number;\n evalTrend: number[];\n}\n\nconst fmtActive = (iso: string | null, t?: SdkTFunction): string => {\n if (!iso) return \"—\";\n const diff = Date.now() - new Date(iso).getTime();\n const minutes = Math.floor(diff / 60000);\n if (minutes < 1) return t ? t(\"common.time.justNow\") : \"just now\";\n if (minutes < 60) return t ? t(\"common.time.minutesAgo\", { count: minutes }) : `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return t ? t(\"common.time.hoursAgo\", { count: hours }) : `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return t ? t(\"common.time.daysAgo\", { count: days }) : `${days}d ago`;\n};\n\nconst scoreColor = (score: number | null): string => {\n if (score === null) return \"#d9d9d9\";\n return score >= 80 ? \"#22c55e\" : score >= 50 ? \"#f59e0b\" : \"#ef4444\";\n};\n\nconst useStyles = createStyles(({ css }) => ({\n row: css`\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n `,\n}));\n\nconst valueStyle: React.CSSProperties = {\n fontSize: 16,\n fontWeight: 700,\n lineHeight: 1.2,\n cursor: \"help\",\n};\nconst labelStyle: React.CSSProperties = {\n fontSize: 10,\n color: \"rgba(0, 0, 0, 0.45)\",\n whiteSpace: \"nowrap\",\n marginTop: 1,\n};\nconst metricColumn: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n};\n\nexport const AgentCardStats: React.FC<{ stats?: AgentCardStatsData | null }> = ({ stats }) => {\n const { styles } = useStyles();\n const t = useT();\n\n if (!stats) {\n return (\n <div style={{ display: \"flex\", fontSize: 11, color: \"#d9d9d9\" }}>\n <span style={{ flex: 1 }}>{t(\"governance.cardStats.scoreEmpty\")}</span>\n <span style={{ flex: 1 }}>{t(\"governance.cardStats.threadsEmpty\")}</span>\n </div>\n );\n }\n\n const score = stats.evalScore !== null ? Number(stats.evalScore).toFixed(1) : \"—\";\n const threads = stats.threadCount > 0 ? stats.threadCount : \"—\";\n const scoreTextColor = scoreColor(stats.evalScore);\n const passRate = stats.evalPassRate !== null ? `${stats.evalPassRate}%` : \"—\";\n\n return (\n <div className={styles.row}>\n {/* Left: two StatCell-style metric columns */}\n <div style={{ display: \"flex\", gap: 16, alignItems: \"flex-end\" }}>\n <Tooltip title={t(\"governance.cardStats.evalTooltip\", { score, passRate, runs: stats.evalRuns })}>\n <div style={metricColumn}>\n <span style={{ ...valueStyle, color: scoreTextColor }}>{score}</span>\n <span className=\"lattice-stat-label\" style={labelStyle}>{t(\"governance.cardStats.evalScore\")}</span>\n </div>\n </Tooltip>\n <Tooltip title={stats.lastActive\n ? t(\"governance.cardStats.conversationsTooltipActive\", { total: stats.threadCount, last7d: stats.last7d, last30d: stats.last30d, lastActive: fmtActive(stats.lastActive, t) })\n : t(\"governance.cardStats.conversationsTooltip\", { total: stats.threadCount, last7d: stats.last7d, last30d: stats.last30d })}>\n <div style={metricColumn}>\n <span style={{ ...valueStyle, color: threads === \"—\" ? \"#d9d9d9\" : \"#595959\" }}>{threads}</span>\n <span className=\"lattice-stat-label\" style={labelStyle}>{t(\"governance.cardStats.threads\")}</span>\n </div>\n </Tooltip>\n </div>\n\n {/* Right: bar chart */}\n {stats.daily7d.length > 0 && (\n <div style={metricColumn}>\n <MiniBarChart values={stats.daily7d} width={40} height={24} color=\"#8c8c8c\" />\n <span className=\"lattice-stat-label\" style={labelStyle}>{t(\"governance.cardStats.threads7d\")}</span>\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport {\n Modal,\n Form,\n Input,\n InputNumber,\n Button,\n Select,\n message,\n Typography,\n Segmented,\n Divider,\n Space,\n Radio,\n} from \"antd\";\nimport { PlusOutlined, ForkOutlined, ApiOutlined, ExperimentOutlined } from \"@ant-design/icons\";\nimport { useApi } from \"../../hooks/useApi\";\nimport { useClient } from \"../../context\";\nimport { ParentAgentSelector } from \"./ParentAgentSelector\";\nimport { SubAgentInheritList, SubAgentDecision } from \"./SubAgentInheritList\";\nimport type { Assistant, LocalA2ATemplateDefinition } from \"@axiom-lattice/client-sdk\";\nimport type { AgentCard, TaskFileRef } from \"@axiom-lattice/protocols\";\nimport { getLocalRuntimeCommandError } from \"./localRuntimeValidation\";\nimport { shortHash, startLearningRound, buildBuilderThreadId, buildLearningKickoff } from \"../Governance/Learning/trainingUtils\";\nimport { ReferenceFilesUpload } from \"../Governance/Learning/ReferenceFilesUpload\";\nimport { TrainingContextCard } from \"../Governance/Learning/TrainingContextCard\";\nimport { useWorkspaceContext } from \"../../context/WorkspaceContext\";\nimport { useT, type TranslationKey } from \"../../i18n\";\n\nconst { TextArea } = Input;\nconst { Text } = Typography;\n\nexport type CreationMode = \"scratch\" | \"extend\" | \"learn\";\ntype AgentCardProtocol = \"http://\" | \"https://\";\n\nconst AGENT_CARD_PATH = \"/.well-known/agent-card.json\";\n\nconst AGENT_CARD_PROTOCOL_OPTIONS: Array<{ value: AgentCardProtocol; label: AgentCardProtocol }> = [\n { value: \"http://\", label: \"http://\" },\n { value: \"https://\", label: \"https://\" },\n];\n\ninterface TestConnectionSuccessData {\n reachable: boolean;\n agentName?: string;\n agentCard?: Partial<AgentCard>;\n error?: string;\n}\n\nconst AGENT_TYPE_DESCRIPTION_KEYS: Record<string, TranslationKey> = {\n react: \"chatConfig.createAssistant.typeDesc.react\",\n deep_agent: \"chatConfig.createAssistant.typeDesc.deepAgent\",\n team: \"chatConfig.createAssistant.typeDesc.team\",\n processing: \"chatConfig.createAssistant.typeDesc.processing\",\n a2a_remote: \"chatConfig.createAssistant.typeDesc.a2aRemote\",\n};\n\nfunction normalizeAgentCardUrl(\n value: unknown,\n protocol: unknown,\n defaultProtocol: AgentCardProtocol = \"https://\",\n): string {\n const raw = String(value ?? \"\").trim();\n if (!raw) return \"\";\n\n const selectedProtocol =\n protocol === \"http://\" || protocol === \"https://\"\n ? protocol\n : defaultProtocol;\n const withProtocol = /^https?:\\/\\//i.test(raw)\n ? raw\n : `${selectedProtocol}${raw.replace(/^\\/+/, \"\")}`;\n\n const trimmed = withProtocol.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(AGENT_CARD_PATH)) {\n return trimmed;\n }\n\n return `${trimmed}${AGENT_CARD_PATH}`;\n}\n\nfunction getAgentCardPort(agentCardUrl: string): string | undefined {\n try {\n return new URL(agentCardUrl).port || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction commandArgsDeclarePort(args: string[]): boolean {\n return args.some(\n (arg) => arg === \"--port\" || arg === \"-p\" || /^--port=/.test(arg) || /^-p=/.test(arg),\n );\n}\n\nfunction buildTemplateCommand(\n command: LocalA2ATemplateDefinition[\"command\"],\n agentCardUrl: string,\n): LocalA2ATemplateDefinition[\"command\"] {\n const args = [...command.args];\n const port = getAgentCardPort(agentCardUrl);\n if (port && !commandArgsDeclarePort(args)) {\n args.push(\"--port\", port);\n }\n\n return {\n ...command,\n args,\n ...(command.env ? { env: { ...command.env } } : {}),\n };\n}\n\nexport interface CreateAssistantModalProps {\n open: boolean;\n onCancel: () => void;\n onSuccess?: (assistant: Assistant, options?: { initialMessage?: string; projectId?: string; initialMessageCustomRunConfig?: Record<string, unknown> }) => void;\n initialMode?: CreationMode;\n initialValues?: Record<string, unknown>;\n}\n\nexport const CreateAssistantModal: React.FC<CreateAssistantModalProps> = ({\n open,\n onCancel,\n onSuccess,\n initialMode,\n initialValues,\n}) => {\n const [form] = Form.useForm();\n const t = useT();\n const [loading, setLoading] = useState(false);\n const [creationMode, setCreationMode] = useState<CreationMode>(\"learn\");\n const [learnGoal, setLearnGoal] = useState(\"\");\n const [parentAssistant, setParentAssistant] = useState<Assistant | null>(null);\n const [subAgentDecisions, setSubAgentDecisions] = useState<SubAgentDecision[]>([]);\n const selectedType = Form.useWatch(\"type\", form) || \"react\";\n const isA2ARemote = selectedType === \"a2a_remote\";\n const [a2aMode, setA2aMode] = useState<\"remote\" | \"local\">(\"remote\");\n const [a2aTemplateKey, setA2aTemplateKey] = useState<string | undefined>(undefined);\n const [templates, setTemplates] = useState<LocalA2ATemplateDefinition[]>([]);\n const [templatesLoading, setTemplatesLoading] = useState(false);\n const templateRequestId = useRef(0);\n const [testingUrl, setTestingUrl] = useState(false);\n const [showCustomCommand, setShowCustomCommand] = useState(false);\n const { get, post, put } = useApi();\n const architectClient = useClient(\"agent-architect\");\n const { workspaceId, trainingProjects, loading: workspaceLoading } = useWorkspaceContext();\n const [selectedTrainingId, setSelectedTrainingId] = useState<string | null>(null);\n const initialValuesKey = JSON.stringify(initialValues ?? null);\n /** Learning rounds are pinned to a training project (default: first) — never a business project. */\n const trainingProject =\n trainingProjects.find((p) => p.id === selectedTrainingId) ?? trainingProjects[0] ?? null;\n /** Reference files uploaded to the selected training project, stored on the round task. */\n const [learnRefFiles, setLearnRefFiles] = useState<TaskFileRef[]>([]);\n\n const resetExtendState = useCallback(() => {\n setParentAssistant(null);\n setSubAgentDecisions([]);\n }, []);\n\n const resetModalState = useCallback(() => {\n form.resetFields();\n resetExtendState();\n setCreationMode(\"learn\");\n setLearnGoal(\"\");\n setLearnRefFiles([]);\n setSelectedTrainingId(null);\n setA2aMode(\"remote\");\n setA2aTemplateKey(undefined);\n setTemplates([]);\n setShowCustomCommand(false);\n setTestingUrl(false);\n }, [form, resetExtendState]);\n\n useEffect(() => {\n if (open) {\n resetModalState();\n setCreationMode(initialMode ?? \"learn\");\n const initialA2aMode = initialValues?.a2aMode;\n if (initialA2aMode === \"remote\" || initialA2aMode === \"local\") {\n setA2aMode(initialA2aMode);\n }\n form.setFieldsValue({\n type: \"react\",\n agentCardProtocol: \"https://\",\n a2aMode: \"remote\",\n timeout: 300000,\n ...initialValues,\n });\n }\n }, [open, form, initialMode, initialValuesKey, resetModalState]);\n\n useEffect(() => {\n const requestId = ++templateRequestId.current;\n let active = true;\n\n if (open && isA2ARemote) {\n form.setFieldValue(\"prompt\", \"\");\n if (a2aMode === \"local\") {\n setTemplatesLoading(true);\n get<{ success: boolean; data: { records: LocalA2ATemplateDefinition[] } }>(\"/api/local-a2a/templates\")\n .then((data) => {\n if (active && requestId === templateRequestId.current && data?.data?.records) {\n setTemplates(data.data.records);\n }\n })\n .catch(() => {\n if (active && requestId === templateRequestId.current) setTemplates([]);\n })\n .finally(() => {\n if (active && requestId === templateRequestId.current) setTemplatesLoading(false);\n });\n } else {\n setTemplatesLoading(false);\n }\n } else {\n setTemplatesLoading(false);\n }\n\n return () => {\n active = false;\n templateRequestId.current += 1;\n };\n }, [form, isA2ARemote, a2aMode, get, open]);\n\n const selectedTemplate = templates.find((t) => t.key === a2aTemplateKey);\n\n const ensureLocalRuntimeCommand = useCallback((): boolean => {\n const error = getLocalRuntimeCommandError({\n mode: a2aMode,\n templateKey: a2aTemplateKey,\n executable: form.getFieldValue(\"commandExecutable\"),\n }, t);\n if (!error) return true;\n\n setShowCustomCommand(true);\n form.setFields([{ name: \"commandExecutable\", errors: [error] }]);\n message.warning(error);\n return false;\n }, [a2aMode, a2aTemplateKey, form, t]);\n\n useEffect(() => {\n if (selectedTemplate) {\n form.setFieldsValue({\n agentCardProtocol: \"http://\",\n });\n }\n }, [form, selectedTemplate]);\n\n const handleTestConnection = useCallback(async () => {\n if (!ensureLocalRuntimeCommand()) return;\n\n const url = normalizeAgentCardUrl(\n form.getFieldValue(\"agentCardUrl\"),\n form.getFieldValue(\"agentCardProtocol\"),\n a2aMode === \"local\" ? \"http://\" : \"https://\",\n );\n if (!url) {\n message.warning(t(\"chatConfig.createAssistant.a2aUrlWarning\"));\n return;\n }\n setTestingUrl(true);\n try {\n const body: Record<string, any> = { agentCardUrl: url, apiKey: form.getFieldValue(\"apiKey\") };\n\n if (a2aMode === \"local\") {\n const template = selectedTemplate;\n if (template) {\n body.localRuntime = {\n label: form.getFieldValue(\"name\") || undefined,\n agentCardUrl: url,\n command: buildTemplateCommand(template.command, url),\n };\n } else {\n const argsStr = form.getFieldValue(\"commandArgs\") || \"\";\n const args = argsStr ? argsStr.split(/\\s+/).filter(Boolean) : [];\n const commandCwd = String(form.getFieldValue([\"command\", \"cwd\"]) || \"\").trim();\n body.localRuntime = {\n label: form.getFieldValue(\"name\") || undefined,\n agentCardUrl: url,\n command: {\n executable: String(\n form.getFieldValue(\"commandExecutable\") || \"\",\n ).trim(),\n args,\n ...(commandCwd ? { cwd: commandCwd } : {}),\n },\n };\n }\n }\n\n const data = await post<{ success: boolean; data?: TestConnectionSuccessData }>(\n \"/api/a2a/test-connection\",\n body\n );\n if (data.data?.reachable) {\n const agentCard = data.data.agentCard;\n message.success(t(\"chatConfig.createAssistant.connectedTo\", { name: data.data.agentName || url }));\n } else {\n message.error(data.data?.error || t(\"chatConfig.createAssistant.connectionFailed\"));\n }\n } catch {\n message.error(t(\"chatConfig.createAssistant.connectionTestFailed\"));\n } finally {\n setTestingUrl(false);\n }\n }, [form, post, a2aMode, selectedTemplate, ensureLocalRuntimeCommand, t]);\n\n /** Handle parent agent selection in extend mode */\n const handleParentSelect = useCallback(\n (assistant: Assistant | null) => {\n setParentAssistant(assistant);\n\n if (!assistant) {\n form.resetFields([\"key\", \"name\", \"description\", \"type\", \"prompt\"]);\n setSubAgentDecisions([]);\n return;\n }\n\n const graphDef =\n typeof assistant.graphDefinition === \"object\" && assistant.graphDefinition !== null\n ? assistant.graphDefinition\n : {};\n\n // Pre-fill the form with parent's values, including default key/name/description\n const parentKey = graphDef.key || assistant.id;\n const parentName = assistant.name || graphDef.name || \"\";\n form.setFieldsValue({\n key: `${parentKey}_ext`,\n name: parentName ? `${parentName} (Extended)` : \"\",\n description: assistant.description || graphDef.description || \"\",\n type: graphDef.type || \"react\",\n prompt: graphDef.prompt || \"\",\n });\n\n // Initialize sub-agent decisions (default: reuse all)\n const parentSubAgents: string[] = graphDef.subAgents || [];\n setSubAgentDecisions(\n parentSubAgents.map((key: string) => ({ originalKey: key, clone: false }))\n );\n },\n [form]\n );\n\n /** Clone a sub-agent via the API and return the created Assistant */\n const cloneSubAgent = async (\n originalKey: string,\n newKey: string\n ): Promise<Assistant> => {\n // Fetch the original sub-agent's config\n const getData = await get<{ success: boolean; data: Assistant }>(`/api/assistants/${originalKey}`);\n\n if (!getData.success) {\n throw new Error(t(\"chatConfig.createAssistant.cloneFetchFailed\", { key: originalKey }));\n }\n\n const originalAssistant = getData.data;\n const originalGraphDef =\n typeof originalAssistant.graphDefinition === \"object\"\n ? originalAssistant.graphDefinition\n : {};\n\n const cloneBody = {\n id: newKey,\n name: `${originalAssistant.name} (Clone)`,\n description: originalAssistant.description || \"\",\n graphDefinition: {\n ...originalGraphDef,\n key: newKey,\n name: `${originalAssistant.name} (Clone)`,\n },\n };\n\n const createData = await post<{ success: boolean; data: Assistant; message?: string }>(\"/api/assistants\", cloneBody);\n\n if (!createData.success) {\n throw new Error(createData.message || t(\"chatConfig.createAssistant.cloneFailed\", { key: originalKey }));\n }\n\n return createData.data;\n };\n\n /** Build the request body for \"create from scratch\" mode */\n const buildScratchBody = (values: any) => {\n const body: Record<string, any> = {\n id: values.key,\n name: values.name,\n description: values.description || \"\",\n graphDefinition: {\n key: values.key,\n name: values.name,\n description: values.description || \"\",\n type: values.type,\n prompt: values.prompt || \"\",\n tools: [],\n skills: [],\n subAgents: (values.type === \"deep_agent\" || values.type === \"processing\") ? [] : undefined,\n middleware: [],\n },\n };\n\n // A2A_REMOTE specific fields\n if (values.type === \"a2a_remote\") {\n body.graphDefinition.agentCardUrl = normalizeAgentCardUrl(\n values.agentCardUrl,\n values.agentCardProtocol,\n (values.a2aMode || a2aMode) === \"local\" ? \"http://\" : \"https://\",\n );\n if (values.apiKey) body.graphDefinition.apiKey = values.apiKey;\n if (values.timeout) body.graphDefinition.timeout = values.timeout;\n\n if ((values.a2aMode || a2aMode) === \"local\") {\n const template = selectedTemplate;\n if (template) {\n body.graphDefinition.localRuntime = {\n label: values.name || undefined,\n agentCardUrl: body.graphDefinition.agentCardUrl,\n command: buildTemplateCommand(template.command, body.graphDefinition.agentCardUrl),\n };\n } else {\n const argsStr = values.commandArgs || \"\";\n const args = argsStr ? argsStr.split(/\\s+/).filter(Boolean) : [];\n const commandCwd = String(values.command?.cwd || \"\").trim();\n body.graphDefinition.localRuntime = {\n label: values.name || undefined,\n agentCardUrl: body.graphDefinition.agentCardUrl,\n command: {\n executable: String(values.commandExecutable || \"\").trim(),\n args,\n ...(commandCwd ? { cwd: commandCwd } : {}),\n },\n };\n }\n }\n }\n\n return body;\n };\n\n /** Build the request body for \"extend agent\" mode, creating cloned sub-agents first */\n const buildExtendBody = async (\n values: any,\n createdAssistants: Assistant[]\n ) => {\n if (!parentAssistant) {\n throw new Error(t(\"chatConfig.createAssistant.noParentAgent\"));\n }\n\n // Validate clone keys before proceeding\n const cloneDecisions = subAgentDecisions.filter((d) => d.clone);\n for (const decision of cloneDecisions) {\n if (!decision.cloneKey || !decision.cloneKey.trim()) {\n throw new Error(\n t(\"chatConfig.createAssistant.cloneKeyRequired\", { key: decision.originalKey })\n );\n }\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(decision.cloneKey)) {\n throw new Error(\n t(\"chatConfig.createAssistant.cloneKeyInvalid\", { key: decision.cloneKey, originalKey: decision.originalKey })\n );\n }\n }\n\n // First, create all cloned sub-agents, then create the child agent\n const resolvedSubAgents: string[] = [];\n for (const decision of subAgentDecisions) {\n if (decision.clone) {\n const clonedAssistant = await cloneSubAgent(decision.originalKey, decision.cloneKey!);\n createdAssistants.push(clonedAssistant);\n resolvedSubAgents.push(decision.cloneKey!);\n } else {\n resolvedSubAgents.push(decision.originalKey);\n }\n }\n\n const parentGraphDef =\n typeof parentAssistant.graphDefinition === \"object\"\n ? parentAssistant.graphDefinition\n : {};\n\n // Build graphDefinition with only overridden fields + extendsAgent\n const graphDefinition: Record<string, any> = {\n key: values.key,\n name: values.name,\n description: values.description || \"\",\n extendsAgent: parentAssistant.id,\n type: values.type || parentGraphDef.type,\n };\n\n // Only include prompt if it differs from parent\n if (values.prompt && values.prompt !== parentGraphDef.prompt) {\n graphDefinition.prompt = values.prompt;\n }\n\n // Always set resolved sub-agents (they may contain cloned keys)\n if (resolvedSubAgents.length > 0 || (parentGraphDef.subAgents && parentGraphDef.subAgents.length > 0)) {\n graphDefinition.subAgents = resolvedSubAgents;\n }\n\n return {\n id: values.key,\n name: values.name,\n description: values.description || \"\",\n graphDefinition,\n };\n };\n\n /** Handle form submission */\n const handleSubmit = async () => {\n if (creationMode === \"learn\") {\n const goal = learnGoal.trim();\n if (!goal) {\n message.error(t(\"chatConfig.createAssistant.trainingGoalRequired\"));\n return;\n }\n if (!trainingProject) {\n message.error(t(\"chatConfig.createAssistant.noTrainingProject\"));\n return;\n }\n setLoading(true);\n try {\n const agentId = `agent-${shortHash(goal + Date.now())}`;\n const agentRes = await post<{ success: boolean; data: Assistant }>(\"/api/assistants\", {\n id: agentId,\n name: agentId,\n graphDefinition: {\n key: agentId,\n name: agentId,\n description: \"\",\n type: \"react\",\n prompt: \"To be trained\",\n metadata: {\n trainingProjectId: trainingProject.id,\n learningPlaceholder: \"true\",\n architectureStatus: \"undecided\",\n },\n },\n });\n if (!agentRes.data) throw new Error(t(\"chatConfig.createAssistant.agentCreateFailed\"));\n const { roundTaskId } = await startLearningRound({\n goal,\n targetAgentId: agentId,\n workspaceId: workspaceId ?? undefined,\n projectId: trainingProject.id,\n existingThreadId: buildBuilderThreadId(architectClient.tenantId, agentId),\n files: learnRefFiles,\n post,\n put,\n });\n message.success(t(\"chatConfig.createAssistant.agentCreated\"));\n setLearnGoal(\"\");\n setLearnRefFiles([]);\n setCreationMode(\"learn\");\n onSuccess?.(agentRes.data, {\n initialMessage: buildLearningKickoff({\n goal,\n roundTaskId,\n targetAgentId: agentId,\n targetMode: \"placeholder\",\n files: learnRefFiles,\n projectId: trainingProject.id,\n workspaceId: trainingProject.workspaceId ?? workspaceId ?? undefined,\n }),\n projectId: trainingProject.id,\n initialMessageCustomRunConfig: { execution: { taskId: roundTaskId } },\n });\n onCancel();\n } catch (err) {\n message.error(err instanceof Error ? err.message : t(\"chatConfig.createAssistant.agentCreateFailed\"));\n } finally {\n setLoading(false);\n }\n return;\n }\n\n try {\n if (\n creationMode === \"scratch\" &&\n isA2ARemote &&\n !ensureLocalRuntimeCommand()\n ) {\n return;\n }\n const values = await form.validateFields();\n setLoading(true);\n\n // Collect all assistants created during the extend flow (cloned sub-agents)\n const createdAssistants: Assistant[] = [];\n\n const requestBody =\n creationMode === \"scratch\"\n ? buildScratchBody(values)\n : await buildExtendBody(values, createdAssistants);\n\n const data = await post<{ success: boolean; data: Assistant; message?: string }>(\"/api/assistants\", requestBody);\n\n if (data.success) {\n message.success(\n creationMode === \"extend\"\n ? t(\"chatConfig.createAssistant.createdByExtending\", { name: parentAssistant?.name ?? \"\" })\n : t(\"chatConfig.createAssistant.created\")\n );\n resetModalState();\n\n // Notify about all created assistants: cloned sub-agents first, then child\n for (const clonedAssistant of createdAssistants) {\n onSuccess?.(clonedAssistant);\n }\n onSuccess?.(data.data);\n\n onCancel();\n } else {\n message.error(data.message || t(\"chatConfig.createAssistant.createFailed\"));\n }\n } catch (error: any) {\n if (error?.errorFields) {\n const fieldLabels: Record<string, string> = {\n key: t(\"chatConfig.createAssistant.field.key\"),\n name: t(\"chatConfig.createAssistant.field.name\"),\n description: t(\"chatConfig.createAssistant.field.description\"),\n prompt: t(\"chatConfig.createAssistant.field.systemPrompt\"),\n };\n const failed = (error.errorFields as Array<{ name?: (string | number)[] }>)\n .map((f) => fieldLabels[String((f.name ?? [])[0])] ?? String((f.name ?? [])[0]))\n .filter(Boolean);\n message.warning(\n failed.length > 0\n ? t(\"chatConfig.createAssistant.requiredFields\", { fields: [...new Set(failed)].join(\", \") })\n : t(\"chatConfig.createAssistant.requiredFieldsGeneric\")\n );\n return;\n }\n message.error(\n error.message || t(\"chatConfig.createAssistant.createError\")\n );\n } finally {\n setLoading(false);\n }\n };\n\n /** Determine if the parent has sub-agents to show the inherit list */\n const parentSubAgents: string[] =\n parentAssistant?.graphDefinition?.subAgents || [];\n const showSubAgentList =\n creationMode === \"extend\" && parentAssistant && parentSubAgents.length > 0;\n\n return (\n <Modal\n title={t(\"chatConfig.createAssistant.title\")}\n open={open}\n onCancel={() => {\n resetModalState();\n onCancel();\n }}\n footer={[\n <Button\n key=\"cancel\"\n onClick={() => {\n resetModalState();\n onCancel();\n }}\n >\n {t(\"common.cancel\")}\n </Button>,\n <Button\n key=\"submit\"\n type=\"primary\"\n icon={creationMode === \"extend\" ? <ForkOutlined /> : creationMode === \"learn\" ? <ExperimentOutlined /> : <PlusOutlined />}\n loading={loading}\n disabled={creationMode === \"learn\" && (workspaceLoading || !trainingProject)}\n onClick={handleSubmit}\n >\n {creationMode === \"extend\"\n ? t(\"chatConfig.createAssistant.createExtend\")\n : creationMode === \"learn\"\n ? t(\"chatConfig.createAssistant.startLearning\")\n : t(\"common.create\")}\n </Button>,\n ]}\n width={760}\n >\n {/* Parent agent selector (extend mode only) */}\n {creationMode === \"extend\" && (\n <div style={{ marginBottom: 20 }}>\n <Text\n type=\"secondary\"\n style={{ display: \"block\", marginBottom: 8 }}\n >\n {t(\"chatConfig.createAssistant.parentAgent\")}\n </Text>\n <ParentAgentSelector\n value={parentAssistant?.id}\n onSelect={handleParentSelect}\n />\n {parentAssistant && (\n <Text\n type=\"secondary\"\n style={{ display: \"block\", marginTop: 4, fontSize: 12 }}\n >\n {t(\"chatConfig.createAssistant.inheritHint\")}\n </Text>\n )}\n </div>\n )}\n\n {creationMode === \"extend\" && parentAssistant && (\n <Divider style={{ margin: \"12px 0\" }} />\n )}\n\n {creationMode === \"learn\" && (\n <div>\n <Text style={{ display: \"block\", marginBottom: 8 }}>\n {t(\"chatConfig.createAssistant.learnHint\")}\n </Text>\n <Input.TextArea\n rows={3}\n value={learnGoal}\n onChange={(e) => setLearnGoal(e.target.value)}\n placeholder=\"e.g. Handle price disputes using the price protection policy\"\n />\n {trainingProject && (\n <div style={{ marginTop: 12 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12, marginBottom: 8 }}>\n <Text type=\"secondary\">{t(\"chatConfig.createAssistant.referenceFiles\")}</Text>\n <TrainingContextCard\n project={trainingProject}\n projects={trainingProjects}\n value={trainingProject?.id ?? null}\n onChange={setSelectedTrainingId}\n loading={workspaceLoading}\n />\n </div>\n <ReferenceFilesUpload projectId={trainingProject.id} value={learnRefFiles} onChange={setLearnRefFiles} />\n <Text type=\"secondary\" style={{ display: \"block\", marginTop: 6, fontSize: 12 }}>\n {t(\"chatConfig.createAssistant.referenceFilesHint\")}\n </Text>\n </div>\n )}\n {!trainingProject && !workspaceLoading && (\n <div style={{ marginTop: 12 }}>\n <TrainingContextCard\n project={trainingProject}\n projects={trainingProjects}\n value={null}\n onChange={setSelectedTrainingId}\n loading={workspaceLoading}\n />\n </div>\n )}\n </div>\n )}\n\n {creationMode !== \"learn\" && (\n <Form\n form={form}\n layout=\"vertical\"\n autoComplete=\"off\"\n initialValues={{ type: \"react\", agentCardProtocol: \"https://\", a2aMode: \"remote\" }}\n >\n <Form.Item\n name=\"key\"\n label={t(\"chatConfig.createAssistant.field.key\")}\n rules={[\n { required: true, message: t(\"chatConfig.createAssistant.validation.keyRequired\") },\n {\n pattern: /^[a-zA-Z][a-zA-Z0-9_-]*$/,\n message: t(\"chatConfig.createAssistant.validation.keyPattern\"),\n },\n ]}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g., my_assistant\" />\n </Form.Item>\n\n <Form.Item\n name=\"name\"\n label={t(\"chatConfig.createAssistant.field.name\")}\n rules={[{ required: true, message: t(\"chatConfig.createAssistant.validation.nameRequired\") }]}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g., My Assistant\" />\n </Form.Item>\n\n <Form.Item\n name=\"description\"\n label={t(\"chatConfig.createAssistant.field.description\")}\n rules={[\n { required: true, message: t(\"chatConfig.createAssistant.validation.descriptionRequired\") },\n ]}\n style={{ marginBottom: 16 }}\n >\n <TextArea\n placeholder={t(\"chatConfig.createAssistant.descriptionPlaceholder\")}\n autoSize={{ minRows: 2, maxRows: 4 }}\n />\n </Form.Item>\n\n <Form.Item\n name=\"type\"\n label={t(\"chatConfig.createAssistant.field.agentType\")}\n rules={[{ required: true }]}\n style={{ marginBottom: 16 }}\n >\n <Segmented\n options={[\n { value: \"react\", label: t(\"chatConfig.agentType.executor\") },\n { value: \"deep_agent\", label: t(\"chatConfig.agentType.orchestrator\") },\n { value: \"team\", label: t(\"chatConfig.agentType.team\") },\n { value: \"processing\", label: t(\"chatConfig.agentType.workflow\") },\n { value: \"a2a_remote\", label: t(\"chatConfig.agentType.a2aRemote\") },\n ]}\n block\n />\n </Form.Item>\n <Text\n type=\"secondary\"\n style={{ fontSize: 12, display: \"block\", marginTop: -12, marginBottom: 16, lineHeight: 1.5 }}\n >\n {t(AGENT_TYPE_DESCRIPTION_KEYS[selectedType] ?? \"chatConfig.createAssistant.typeDesc.react\")}\n </Text>\n\n {/* A2A Remote specific fields */}\n {isA2ARemote && (\n <>\n <Form.Item label={t(\"chatConfig.createAssistant.field.connectionMode\")} style={{ marginBottom: 16 }}>\n <Radio.Group\n value={a2aMode}\n onChange={(e) => {\n const nextMode = e.target.value as \"remote\" | \"local\";\n setA2aMode(nextMode);\n form.setFieldValue(\"a2aMode\", nextMode);\n if (nextMode === \"local\") {\n form.setFieldValue(\"agentCardProtocol\", \"http://\");\n }\n setA2aTemplateKey(undefined);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n >\n <Radio.Button value=\"remote\">{t(\"chatConfig.createAssistant.mode.remoteUrl\")}</Radio.Button>\n <Radio.Button value=\"local\">{t(\"chatConfig.createAssistant.mode.localManaged\")}</Radio.Button>\n </Radio.Group>\n </Form.Item>\n\n <Form.Item name=\"a2aMode\" noStyle hidden>\n <Input />\n </Form.Item>\n\n {a2aMode === \"local\" && (\n <>\n <Form.Item label={t(\"chatConfig.createAssistant.field.template\")} style={{ marginBottom: 16 }}>\n <Select\n placeholder={t(\"chatConfig.createAssistant.templatePlaceholder\")}\n allowClear\n loading={templatesLoading}\n value={a2aTemplateKey}\n onChange={(val) => {\n setA2aTemplateKey(val);\n if (val) setShowCustomCommand(false);\n }}\n options={templates.map((t) => ({\n value: t.key,\n label: t.name || t.key,\n }))}\n notFoundContent={\n templatesLoading ? undefined : (\n <Text type=\"secondary\" style={{ padding: 8, display: \"block\" }}>\n {t(\"chatConfig.createAssistant.noTemplates\")}\n </Text>\n )\n }\n />\n </Form.Item>\n\n {!a2aTemplateKey && (\n <>\n {!showCustomCommand ? (\n <Button\n type=\"link\"\n onClick={() => setShowCustomCommand(true)}\n style={{ padding: 0, marginBottom: 16, display: \"block\" }}\n >\n {t(\"chatConfig.createAssistant.customCommand\")}\n </Button>\n ) : (\n <>\n <Form.Item\n name=\"commandExecutable\"\n label={t(\"chatConfig.createAssistant.field.executable\")}\n rules={[{\n required: true,\n whitespace: true,\n message: t(\"chatConfig.createAssistant.validation.executableRequired\"),\n }]}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g. node, opencode, /usr/local/bin/my-server\" />\n </Form.Item>\n <Form.Item\n name=\"commandArgs\"\n label={t(\"chatConfig.createAssistant.field.arguments\")}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g. --serve --port 4301\" />\n </Form.Item>\n <Form.Item\n name={[\"command\", \"cwd\"]}\n label={t(\"chatConfig.createAssistant.field.workingDirectory\")}\n style={{ marginBottom: 16 }}\n >\n <Input placeholder=\"e.g. /Users/me/project\" />\n </Form.Item>\n <Button\n type=\"link\"\n onClick={() => {\n setShowCustomCommand(false);\n form.setFieldsValue({\n commandExecutable: \"\",\n commandArgs: \"\",\n command: { cwd: undefined },\n });\n }}\n style={{ padding: 0, marginBottom: 16, display: \"block\" }}\n >\n {t(\"chatConfig.createAssistant.hideCustomCommand\")}\n </Button>\n </>\n )}\n </>\n )}\n </>\n )}\n\n <Form.Item\n label={t(\"chatConfig.createAssistant.field.agentCardUrl\")}\n required\n style={{ marginBottom: 16 }}\n >\n <Space.Compact style={{ width: \"100%\" }}>\n <Form.Item name=\"agentCardProtocol\" noStyle>\n <Select\n style={{ width: 100 }}\n options={AGENT_CARD_PROTOCOL_OPTIONS}\n />\n </Form.Item>\n <Form.Item\n name=\"agentCardUrl\"\n noStyle\n rules={[{ required: true, message: t(\"chatConfig.createAssistant.validation.urlRequired\") }]}\n >\n <Input placeholder={a2aMode === \"local\" ? \"localhost:4301\" : \"host:port or full URL\"} />\n </Form.Item>\n <Button\n icon={<ApiOutlined />}\n onClick={handleTestConnection}\n loading={testingUrl}\n >\n {t(\"chatConfig.connection.action.test\")}\n </Button>\n </Space.Compact>\n </Form.Item>\n\n {a2aMode === \"remote\" && (\n <Form.Item\n name=\"apiKey\"\n label={t(\"chatConfig.createAssistant.field.apiKeyOptional\")}\n style={{ marginBottom: 16 }}\n >\n <Input.Password placeholder={t(\"chatConfig.createAssistant.apiKeyPlaceholder\")} />\n </Form.Item>\n )}\n\n <Form.Item\n name=\"timeout\"\n label={t(\"chatConfig.createAssistant.field.timeout\")}\n style={{ marginBottom: 16 }}\n initialValue={300000}\n >\n <InputNumber\n min={1000}\n max={3600000}\n style={{ width: \"100%\" }}\n placeholder=\"300000\"\n />\n </Form.Item>\n </>\n )}\n\n {!isA2ARemote && (\n <Form.Item\n name=\"prompt\"\n label={\n creationMode === \"extend\" && parentAssistant\n ? t(\"chatConfig.createAssistant.field.systemPromptInherit\")\n : t(\"chatConfig.createAssistant.field.systemPrompt\")\n }\n rules={\n creationMode === \"scratch\"\n ? [{ required: true, message: t(\"chatConfig.createAssistant.validation.systemPromptRequired\") }]\n : []\n }\n >\n <TextArea\n placeholder={\n creationMode === \"extend\" && parentAssistant\n ? t(\"chatConfig.createAssistant.systemPromptInheritPlaceholder\")\n : t(\"chatConfig.createAssistant.systemPromptPlaceholder\")\n }\n autoSize={{ minRows: 4, maxRows: 8 }}\n style={{\n fontFamily: \"monospace\",\n fontSize: 13,\n lineHeight: 1.6,\n }}\n />\n </Form.Item>\n )}\n </Form>\n )}\n\n {/* Sub-agent inherit list (extend mode only, when parent has sub-agents) */}\n {showSubAgentList && (\n <>\n <Divider style={{ margin: \"12px 0\" }} />\n <Text strong style={{ display: \"block\", marginBottom: 8 }}>\n {t(\"chatConfig.createAssistant.subAgents\")}\n </Text>\n <SubAgentInheritList\n subAgentKeys={parentSubAgents}\n decisions={subAgentDecisions}\n onChange={setSubAgentDecisions}\n />\n </>\n )}\n </Modal>\n );\n};\n\nexport default CreateAssistantModal;\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { Select, Typography } from \"antd\";\nimport { useApi } from \"../../hooks/useApi\";\nimport { useT } from \"../../i18n\";\nimport type { Assistant } from \"@axiom-lattice/client-sdk\";\n\nconst { Text } = Typography;\n\nexport interface ParentAgentSelectorProps {\n /**\n * Callback when a parent agent is selected.\n * Receives the full assistant object including its graphDefinition.\n * Called with null when the selection is cleared.\n */\n onSelect: (assistant: Assistant | null) => void;\n /**\n * Currently selected parent agent key (controlled mode)\n */\n value?: string;\n /**\n * Placeholder text for the selector\n */\n placeholder?: string;\n}\n\n/**\n * ParentAgentSelector - A dropdown component that fetches and displays\n * available agents for selection as a parent in the \"Extend Agent\" flow.\n */\nexport const ParentAgentSelector: React.FC<ParentAgentSelectorProps> = ({\n onSelect,\n value,\n placeholder,\n}) => {\n const t = useT();\n const resolvedPlaceholder =\n placeholder ?? t(\"chatConfig.parentAgent.selectPlaceholder\");\n const [assistants, setAssistants] = useState<Assistant[]>([]);\n const [loading, setLoading] = useState(false);\n const { get } = useApi();\n\n const fetchAssistants = useCallback(async () => {\n setLoading(true);\n try {\n const data = await get<{\n success: boolean;\n data?: { records: Assistant[] };\n }>(\"/api/assistants\");\n\n if (data.success) {\n setAssistants(data.data?.records || []);\n }\n } catch (error) {\n console.error(\"Failed to fetch assistants:\", error);\n } finally {\n setLoading(false);\n }\n }, [get]);\n\n useEffect(() => {\n void fetchAssistants();\n }, [fetchAssistants]);\n\n const handleChange = (selectedId: string | undefined) => {\n if (!selectedId) {\n onSelect(null);\n return;\n }\n const selected = assistants.find((a) => a.id === selectedId);\n onSelect(selected || null);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n void fetchAssistants();\n }\n };\n\n return (\n <Select\n showSearch\n allowClear\n value={value}\n placeholder={resolvedPlaceholder}\n loading={loading}\n onChange={handleChange}\n onDropdownVisibleChange={handleOpenChange}\n optionFilterProp=\"label\"\n style={{ width: \"100%\" }}\n options={assistants.map((assistant) => ({\n value: assistant.id,\n label: assistant.name || assistant.id,\n description: assistant.description,\n }))}\n optionRender={(option) => (\n <div>\n <div>{option.label}</div>\n {option.data.description && (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {option.data.description}\n </Text>\n )}\n </div>\n )}\n />\n );\n};\n\nexport default ParentAgentSelector;\n","import React from \"react\";\nimport { List, Switch, Input, Typography, Tag, theme } from \"antd\";\nimport { ForkOutlined, LinkOutlined } from \"@ant-design/icons\";\nimport { useT } from \"../../i18n\";\n\nconst { Text } = Typography;\n\n/**\n * Decision for a single sub-agent: reuse the original or clone as a new agent\n */\nexport interface SubAgentDecision {\n /** The original sub-agent key from the parent */\n originalKey: string;\n /** Whether to clone this sub-agent as a new independent agent */\n clone: boolean;\n /** Custom key for the cloned sub-agent (only used when clone is true) */\n cloneKey?: string;\n}\n\nexport interface SubAgentInheritListProps {\n /**\n * Array of sub-agent keys from the parent agent\n */\n subAgentKeys: string[];\n /**\n * Current decisions for each sub-agent\n */\n decisions: SubAgentDecision[];\n /**\n * Callback when decisions change\n */\n onChange: (decisions: SubAgentDecision[]) => void;\n}\n\n/**\n * SubAgentInheritList - Displays the parent agent's sub-agents and provides\n * a per-sub-agent toggle to choose between reusing the original sub-agent\n * or cloning it as a new independent agent. When cloning, allows the user\n * to specify a custom key for the new agent.\n */\nexport const SubAgentInheritList: React.FC<SubAgentInheritListProps> = ({\n subAgentKeys,\n decisions,\n onChange,\n}) => {\n const { token } = theme.useToken();\n const t = useT();\n\n const handleToggle = (key: string, clone: boolean) => {\n const updated = decisions.map((d) =>\n d.originalKey === key\n ? { ...d, clone, cloneKey: clone ? `${key}_clone` : undefined }\n : d\n );\n onChange(updated);\n };\n\n const handleCloneKeyChange = (originalKey: string, cloneKey: string) => {\n const updated = decisions.map((d) =>\n d.originalKey === originalKey ? { ...d, cloneKey } : d\n );\n onChange(updated);\n };\n\n if (subAgentKeys.length === 0) {\n return null;\n }\n\n return (\n <div>\n <Text type=\"secondary\" style={{ display: \"block\", marginBottom: 8 }}>\n {t(\"chatConfig.subAgentInherit.hint\")}\n </Text>\n <List\n size=\"small\"\n bordered\n dataSource={decisions}\n style={{ borderRadius: token.borderRadius }}\n renderItem={(decision) => (\n <List.Item\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: 8,\n padding: \"8px 16px\",\n }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {decision.clone ? (\n <ForkOutlined style={{ color: token.colorPrimary }} />\n ) : (\n <LinkOutlined style={{ color: token.colorTextSecondary }} />\n )}\n <Text style={{ fontFamily: \"monospace\" }}>\n {decision.originalKey}\n </Text>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <Tag color={decision.clone ? \"blue\" : \"default\"}>\n {decision.clone ? t(\"chatConfig.subAgentInherit.clone\") : t(\"chatConfig.subAgentInherit.reuse\")}\n </Tag>\n <Switch\n size=\"small\"\n checked={decision.clone}\n onChange={(checked) => handleToggle(decision.originalKey, checked)}\n />\n </div>\n </div>\n {decision.clone && (\n <Input\n size=\"small\"\n placeholder={t(\"chatConfig.subAgentInherit.cloneKeyPlaceholder\")}\n value={decision.cloneKey}\n onChange={(e) => handleCloneKeyChange(decision.originalKey, e.target.value)}\n style={{ fontFamily: \"monospace\", fontSize: 12 }}\n addonBefore={t(\"chatConfig.keyValue.key\")}\n />\n )}\n </List.Item>\n )}\n />\n </div>\n );\n};\n\nexport default SubAgentInheritList;\n","import type { SdkTFunction } from \"../../i18n\";\n\nexport type A2AConnectionMode = \"remote\" | \"local\";\n\n/**\n * Pure validator: no hooks, so the translator is passed in by the caller\n * (`CreateAssistantModal`, which has `useT()`). When absent — e.g. a bare unit\n * test — the English source string is returned.\n */\nexport function getLocalRuntimeCommandError(\n options: {\n mode: A2AConnectionMode;\n templateKey?: string;\n executable?: unknown;\n },\n t?: SdkTFunction\n): string | null {\n if (options.mode !== \"local\" || options.templateKey) return null;\n if (\n typeof options.executable === \"string\" &&\n options.executable.trim().length > 0\n ) {\n return null;\n }\n return t ? t(\"chat.config.executableRequired\") : \"Choose a template or enter a custom executable\";\n}\n","import React from \"react\";\nimport { Button, Modal, Typography } from \"antd\";\nimport { Bot, Globe2, GraduationCap } from \"lucide-react\";\nimport { useT } from \"../../i18n\";\n\nconst { Paragraph, Text } = Typography;\n\nexport interface AgentCreationOnboardingModalProps {\n open: boolean;\n onCancel: () => void;\n onSelectMethod: (method: AgentCreationMethod) => void;\n focusTriggerAfterClose?: boolean;\n}\n\nexport type AgentCreationMethod = \"manual\" | \"external\" | \"learn\";\n\nconst methods = [\n {\n key: \"manual\",\n icon: Bot,\n titleKey: \"governance.creation.manual.title\",\n descriptionKey: \"governance.creation.manual.description\",\n },\n {\n key: \"external\",\n icon: Globe2,\n titleKey: \"governance.creation.external.title\",\n descriptionKey: \"governance.creation.external.description\",\n },\n {\n key: \"learn\",\n icon: GraduationCap,\n titleKey: \"governance.creation.learn.title\",\n descriptionKey: \"governance.creation.learn.description\",\n },\n] as const satisfies ReadonlyArray<{\n key: AgentCreationMethod;\n icon: typeof Bot;\n titleKey: string;\n descriptionKey: string;\n}>;\n\nexport const AgentCreationOnboardingModal: React.FC<AgentCreationOnboardingModalProps> = ({\n open,\n onCancel,\n onSelectMethod,\n focusTriggerAfterClose = true,\n}) => {\n const t = useT();\n return (\n <Modal\n title={t(\"governance.creation.title\")}\n open={open}\n onCancel={onCancel}\n footer={null}\n width={560}\n centered\n destroyOnHidden\n focusTriggerAfterClose={focusTriggerAfterClose}\n >\n <div style={{ padding: \"8px 4px 4px\" }}>\n <Paragraph style={{ color: \"#595959\", fontSize: 15, margin: \"8px 0 24px\" }}>\n {t(\"governance.creation.subtitle\")}\n </Paragraph>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n }}\n >\n {methods.map((method) => {\n const Icon = method.icon;\n const methodTitle = t(method.titleKey);\n return (\n <Button\n key={method.key}\n type=\"default\"\n onClick={() => onSelectMethod(method.key)}\n aria-label={methodTitle}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 16,\n width: \"100%\",\n minHeight: 88,\n height: \"auto\",\n padding: 16,\n borderRadius: 16,\n textAlign: \"left\",\n whiteSpace: \"normal\",\n }}\n >\n <div\n style={{\n width: 40,\n height: 40,\n borderRadius: 12,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n color: \"#6366f1\",\n background: \"#eeeeff\",\n }}\n >\n <Icon size={19} />\n </div>\n <div style={{ minWidth: 0 }}>\n <Text strong style={{ display: \"block\", fontSize: 15, marginBottom: 3 }}>\n {methodTitle}\n </Text>\n <Text style={{ color: \"#737373\", lineHeight: 1.5 }}>{t(method.descriptionKey)}</Text>\n </div>\n </Button>\n );\n })}\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8, flexWrap: \"wrap\", marginTop: 24 }}>\n <Button onClick={onCancel}>{t(\"governance.creation.notNow\")}</Button>\n </div>\n </div>\n </Modal>\n );\n};\n"],"mappings":"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","names":["React","useCallback","useEffect","useState","message","Modal","useMemo","useState","Tooltip","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useMemo","t","Tooltip","useState","useCallback","useEffect","Input","Select","Typography","ForkOutlined","useEffect","useState","jsx","jsxs","useState","useEffect","Typography","Tag","jsx","jsxs","Text","Typography","Tag","Fragment","jsx","jsxs","Input","Text","Typography","useState","useCallback","useEffect","t","parentSubAgents","ForkOutlined","Select","Button","Modal","Typography","Bot","jsx","jsxs","Text","Typography","Bot","Modal","Button","Fragment","jsx","jsxs","useState","useCallback","message","useEffect","React","Modal"]}
|