@burdenoff/microfe-vibecontrols 2026.601.11 → 2026.601.13
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/_virtual/_rolldown/runtime.js +5 -2
- package/dist/components/actions/ActionForm.js +270 -255
- package/dist/components/actions/ActionForm.js.map +1 -1
- package/dist/components/actions/RemoteExecutionEnableNotice.js +85 -0
- package/dist/components/actions/RemoteExecutionEnableNotice.js.map +1 -0
- package/dist/components/agents/AgentConnectionRecovery.js +123 -0
- package/dist/components/agents/AgentConnectionRecovery.js.map +1 -0
- package/dist/components/agents/RemoteTaskPermissionsCard.js +37 -36
- package/dist/components/agents/RemoteTaskPermissionsCard.js.map +1 -1
- package/dist/components/graph/MeshAgentNode.js +74 -0
- package/dist/components/graph/MeshAgentNode.js.map +1 -0
- package/dist/components/graph/MeshDeployWizard.js +393 -0
- package/dist/components/graph/MeshDeployWizard.js.map +1 -0
- package/dist/components/graph/MeshGraphView.js +190 -0
- package/dist/components/graph/MeshGraphView.js.map +1 -0
- package/dist/components/graph/MeshNodeActions.js +70 -0
- package/dist/components/graph/MeshNodeActions.js.map +1 -0
- package/dist/components/graph/MeshRequestPanel.js +240 -0
- package/dist/components/graph/MeshRequestPanel.js.map +1 -0
- package/dist/components/graph/meshTypes.js +11 -0
- package/dist/components/graph/meshTypes.js.map +1 -0
- package/dist/components/graph/nodeIcons.js +31 -0
- package/dist/components/graph/nodeIcons.js.map +1 -0
- package/dist/components/shared/EnableRemoteTaskDialog.js +48 -0
- package/dist/components/shared/EnableRemoteTaskDialog.js.map +1 -0
- package/dist/components/shared/index.js +1 -0
- package/dist/generated/global-operations.js +7 -12
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/wspace-operations.js +1896 -1649
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.js +14 -12
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/hooks/useAiCreditsQuota.js +27 -20
- package/dist/hooks/useAiCreditsQuota.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/node_modules/dagre/index.js +24 -0
- package/dist/node_modules/dagre/index.js.map +1 -0
- package/dist/node_modules/dagre/lib/acyclic.js +47 -0
- package/dist/node_modules/dagre/lib/acyclic.js.map +1 -0
- package/dist/node_modules/dagre/lib/add-border-segments.js +32 -0
- package/dist/node_modules/dagre/lib/add-border-segments.js.map +1 -0
- package/dist/node_modules/dagre/lib/coordinate-system.js +57 -0
- package/dist/node_modules/dagre/lib/coordinate-system.js.map +1 -0
- package/dist/node_modules/dagre/lib/data/list.js +30 -0
- package/dist/node_modules/dagre/lib/data/list.js.map +1 -0
- package/dist/node_modules/dagre/lib/debug.js +31 -0
- package/dist/node_modules/dagre/lib/debug.js.map +1 -0
- package/dist/node_modules/dagre/lib/graphlib.js +15 -0
- package/dist/node_modules/dagre/lib/graphlib.js.map +1 -0
- package/dist/node_modules/dagre/lib/greedy-fas.js +74 -0
- package/dist/node_modules/dagre/lib/greedy-fas.js.map +1 -0
- package/dist/node_modules/dagre/lib/layout.js +305 -0
- package/dist/node_modules/dagre/lib/layout.js.map +1 -0
- package/dist/node_modules/dagre/lib/lodash.js +67 -0
- package/dist/node_modules/dagre/lib/lodash.js.map +1 -0
- package/dist/node_modules/dagre/lib/nesting-graph.js +76 -0
- package/dist/node_modules/dagre/lib/nesting-graph.js.map +1 -0
- package/dist/node_modules/dagre/lib/normalize.js +45 -0
- package/dist/node_modules/dagre/lib/normalize.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/add-subgraph-constraints.js +24 -0
- package/dist/node_modules/dagre/lib/order/add-subgraph-constraints.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/barycenter.js +34 -0
- package/dist/node_modules/dagre/lib/order/barycenter.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/build-layer-graph.js +32 -0
- package/dist/node_modules/dagre/lib/order/build-layer-graph.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/cross-count.js +39 -0
- package/dist/node_modules/dagre/lib/order/cross-count.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/index.js +50 -0
- package/dist/node_modules/dagre/lib/order/index.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/init-order.js +28 -0
- package/dist/node_modules/dagre/lib/order/init-order.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/resolve-conflicts.js +61 -0
- package/dist/node_modules/dagre/lib/order/resolve-conflicts.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/sort-subgraph.js +50 -0
- package/dist/node_modules/dagre/lib/order/sort-subgraph.js.map +1 -0
- package/dist/node_modules/dagre/lib/order/sort.js +34 -0
- package/dist/node_modules/dagre/lib/order/sort.js.map +1 -0
- package/dist/node_modules/dagre/lib/parent-dummy-chains.js +50 -0
- package/dist/node_modules/dagre/lib/parent-dummy-chains.js.map +1 -0
- package/dist/node_modules/dagre/lib/position/bk.js +212 -0
- package/dist/node_modules/dagre/lib/position/bk.js.map +1 -0
- package/dist/node_modules/dagre/lib/position/index.js +30 -0
- package/dist/node_modules/dagre/lib/position/index.js.map +1 -0
- package/dist/node_modules/dagre/lib/rank/feasible-tree.js +39 -0
- package/dist/node_modules/dagre/lib/rank/feasible-tree.js.map +1 -0
- package/dist/node_modules/dagre/lib/rank/index.js +35 -0
- package/dist/node_modules/dagre/lib/rank/index.js.map +1 -0
- package/dist/node_modules/dagre/lib/rank/network-simplex.js +90 -0
- package/dist/node_modules/dagre/lib/rank/network-simplex.js.map +1 -0
- package/dist/node_modules/dagre/lib/rank/util.js +31 -0
- package/dist/node_modules/dagre/lib/rank/util.js.map +1 -0
- package/dist/node_modules/dagre/lib/util.js +151 -0
- package/dist/node_modules/dagre/lib/util.js.map +1 -0
- package/dist/node_modules/dagre/lib/version.js +10 -0
- package/dist/node_modules/dagre/lib/version.js.map +1 -0
- package/dist/node_modules/graphlib/index.js +19 -0
- package/dist/node_modules/graphlib/index.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/components.js +21 -0
- package/dist/node_modules/graphlib/lib/alg/components.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/dfs.js +25 -0
- package/dist/node_modules/graphlib/lib/alg/dfs.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/dijkstra-all.js +18 -0
- package/dist/node_modules/graphlib/lib/alg/dijkstra-all.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/dijkstra.js +31 -0
- package/dist/node_modules/graphlib/lib/alg/dijkstra.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/find-cycles.js +18 -0
- package/dist/node_modules/graphlib/lib/alg/find-cycles.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/floyd-warshall.js +41 -0
- package/dist/node_modules/graphlib/lib/alg/floyd-warshall.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/index.js +33 -0
- package/dist/node_modules/graphlib/lib/alg/index.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/is-acyclic.js +21 -0
- package/dist/node_modules/graphlib/lib/alg/is-acyclic.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/postorder.js +15 -0
- package/dist/node_modules/graphlib/lib/alg/postorder.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/preorder.js +15 -0
- package/dist/node_modules/graphlib/lib/alg/preorder.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/prim.js +35 -0
- package/dist/node_modules/graphlib/lib/alg/prim.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/tarjan.js +34 -0
- package/dist/node_modules/graphlib/lib/alg/tarjan.js.map +1 -0
- package/dist/node_modules/graphlib/lib/alg/topsort.js +23 -0
- package/dist/node_modules/graphlib/lib/alg/topsort.js.map +1 -0
- package/dist/node_modules/graphlib/lib/data/priority-queue.js +56 -0
- package/dist/node_modules/graphlib/lib/data/priority-queue.js.map +1 -0
- package/dist/node_modules/graphlib/lib/graph.js +196 -0
- package/dist/node_modules/graphlib/lib/graph.js.map +1 -0
- package/dist/node_modules/graphlib/lib/index.js +15 -0
- package/dist/node_modules/graphlib/lib/index.js.map +1 -0
- package/dist/node_modules/graphlib/lib/json.js +55 -0
- package/dist/node_modules/graphlib/lib/json.js.map +1 -0
- package/dist/node_modules/graphlib/lib/lodash.js +47 -0
- package/dist/node_modules/graphlib/lib/lodash.js.map +1 -0
- package/dist/node_modules/graphlib/lib/version.js +10 -0
- package/dist/node_modules/graphlib/lib/version.js.map +1 -0
- package/dist/node_modules/lodash/_arrayEach.js +14 -0
- package/dist/node_modules/lodash/_arrayEach.js.map +1 -0
- package/dist/node_modules/lodash/_arrayReduce.js +15 -0
- package/dist/node_modules/lodash/_arrayReduce.js.map +1 -0
- package/dist/node_modules/lodash/_asciiSize.js +11 -0
- package/dist/node_modules/lodash/_asciiSize.js.map +1 -0
- package/dist/node_modules/lodash/_assignMergeValue.js +16 -0
- package/dist/node_modules/lodash/_assignMergeValue.js.map +1 -0
- package/dist/node_modules/lodash/_assignValue.js +17 -0
- package/dist/node_modules/lodash/_assignValue.js.map +1 -0
- package/dist/node_modules/lodash/_baseAssign.js +16 -0
- package/dist/node_modules/lodash/_baseAssign.js.map +1 -0
- package/dist/node_modules/lodash/_baseAssignIn.js +16 -0
- package/dist/node_modules/lodash/_baseAssignIn.js.map +1 -0
- package/dist/node_modules/lodash/_baseClone.js +64 -0
- package/dist/node_modules/lodash/_baseClone.js.map +1 -0
- package/dist/node_modules/lodash/_baseCreate.js +21 -0
- package/dist/node_modules/lodash/_baseCreate.js.map +1 -0
- package/dist/node_modules/lodash/_baseFilter.js +18 -0
- package/dist/node_modules/lodash/_baseFilter.js.map +1 -0
- package/dist/node_modules/lodash/_baseHas.js +14 -0
- package/dist/node_modules/lodash/_baseHas.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsMap.js +16 -0
- package/dist/node_modules/lodash/_baseIsMap.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsSet.js +16 -0
- package/dist/node_modules/lodash/_baseIsSet.js.map +1 -0
- package/dist/node_modules/lodash/_baseKeysIn.js +20 -0
- package/dist/node_modules/lodash/_baseKeysIn.js.map +1 -0
- package/dist/node_modules/lodash/_baseMerge.js +27 -0
- package/dist/node_modules/lodash/_baseMerge.js.map +1 -0
- package/dist/node_modules/lodash/_baseMergeDeep.js +39 -0
- package/dist/node_modules/lodash/_baseMergeDeep.js.map +1 -0
- package/dist/node_modules/lodash/_basePick.js +18 -0
- package/dist/node_modules/lodash/_basePick.js.map +1 -0
- package/dist/node_modules/lodash/_basePickBy.js +21 -0
- package/dist/node_modules/lodash/_basePickBy.js.map +1 -0
- package/dist/node_modules/lodash/_baseReduce.js +15 -0
- package/dist/node_modules/lodash/_baseReduce.js.map +1 -0
- package/dist/node_modules/lodash/_baseSet.js +30 -0
- package/dist/node_modules/lodash/_baseSet.js.map +1 -0
- package/dist/node_modules/lodash/_baseValues.js +17 -0
- package/dist/node_modules/lodash/_baseValues.js.map +1 -0
- package/dist/node_modules/lodash/_baseZipObject.js +17 -0
- package/dist/node_modules/lodash/_baseZipObject.js.map +1 -0
- package/dist/node_modules/lodash/_castFunction.js +15 -0
- package/dist/node_modules/lodash/_castFunction.js.map +1 -0
- package/dist/node_modules/lodash/_cloneArrayBuffer.js +16 -0
- package/dist/node_modules/lodash/_cloneArrayBuffer.js.map +1 -0
- package/dist/node_modules/lodash/_cloneBuffer.js +17 -0
- package/dist/node_modules/lodash/_cloneBuffer.js.map +1 -0
- package/dist/node_modules/lodash/_cloneDataView.js +16 -0
- package/dist/node_modules/lodash/_cloneDataView.js.map +1 -0
- package/dist/node_modules/lodash/_cloneRegExp.js +15 -0
- package/dist/node_modules/lodash/_cloneRegExp.js.map +1 -0
- package/dist/node_modules/lodash/_cloneSymbol.js +15 -0
- package/dist/node_modules/lodash/_cloneSymbol.js.map +1 -0
- package/dist/node_modules/lodash/_cloneTypedArray.js +16 -0
- package/dist/node_modules/lodash/_cloneTypedArray.js.map +1 -0
- package/dist/node_modules/lodash/_copyArray.js +15 -0
- package/dist/node_modules/lodash/_copyArray.js.map +1 -0
- package/dist/node_modules/lodash/_copyObject.js +22 -0
- package/dist/node_modules/lodash/_copyObject.js.map +1 -0
- package/dist/node_modules/lodash/_copySymbols.js +16 -0
- package/dist/node_modules/lodash/_copySymbols.js.map +1 -0
- package/dist/node_modules/lodash/_copySymbolsIn.js +16 -0
- package/dist/node_modules/lodash/_copySymbolsIn.js.map +1 -0
- package/dist/node_modules/lodash/_createAssigner.js +23 -0
- package/dist/node_modules/lodash/_createAssigner.js.map +1 -0
- package/dist/node_modules/lodash/_flatRest.js +17 -0
- package/dist/node_modules/lodash/_flatRest.js.map +1 -0
- package/dist/node_modules/lodash/_getAllKeysIn.js +17 -0
- package/dist/node_modules/lodash/_getAllKeysIn.js.map +1 -0
- package/dist/node_modules/lodash/_getSymbolsIn.js +18 -0
- package/dist/node_modules/lodash/_getSymbolsIn.js.map +1 -0
- package/dist/node_modules/lodash/_initCloneArray.js +15 -0
- package/dist/node_modules/lodash/_initCloneArray.js.map +1 -0
- package/dist/node_modules/lodash/_initCloneByTag.js +40 -0
- package/dist/node_modules/lodash/_initCloneByTag.js.map +1 -0
- package/dist/node_modules/lodash/_initCloneObject.js +17 -0
- package/dist/node_modules/lodash/_initCloneObject.js.map +1 -0
- package/dist/node_modules/lodash/_nativeKeysIn.js +15 -0
- package/dist/node_modules/lodash/_nativeKeysIn.js.map +1 -0
- package/dist/node_modules/lodash/_safeGet.js +13 -0
- package/dist/node_modules/lodash/_safeGet.js.map +1 -0
- package/dist/node_modules/lodash/_stringSize.js +17 -0
- package/dist/node_modules/lodash/_stringSize.js.map +1 -0
- package/dist/node_modules/lodash/_unicodeSize.js +25 -0
- package/dist/node_modules/lodash/_unicodeSize.js.map +1 -0
- package/dist/node_modules/lodash/clone.js +15 -0
- package/dist/node_modules/lodash/clone.js.map +1 -0
- package/dist/node_modules/lodash/cloneDeep.js +15 -0
- package/dist/node_modules/lodash/cloneDeep.js.map +1 -0
- package/dist/node_modules/lodash/defaults.js +23 -0
- package/dist/node_modules/lodash/defaults.js.map +1 -0
- package/dist/node_modules/lodash/each.js +11 -0
- package/dist/node_modules/lodash/each.js.map +1 -0
- package/dist/node_modules/lodash/filter.js +18 -0
- package/dist/node_modules/lodash/filter.js.map +1 -0
- package/dist/node_modules/lodash/flatten.js +15 -0
- package/dist/node_modules/lodash/flatten.js.map +1 -0
- package/dist/node_modules/lodash/forEach.js +18 -0
- package/dist/node_modules/lodash/forEach.js.map +1 -0
- package/dist/node_modules/lodash/forIn.js +17 -0
- package/dist/node_modules/lodash/forIn.js.map +1 -0
- package/dist/node_modules/lodash/has.js +16 -0
- package/dist/node_modules/lodash/has.js.map +1 -0
- package/dist/node_modules/lodash/isArrayLikeObject.js +16 -0
- package/dist/node_modules/lodash/isArrayLikeObject.js.map +1 -0
- package/dist/node_modules/lodash/isEmpty.js +28 -0
- package/dist/node_modules/lodash/isEmpty.js.map +1 -0
- package/dist/node_modules/lodash/isMap.js +14 -0
- package/dist/node_modules/lodash/isMap.js.map +1 -0
- package/dist/node_modules/lodash/isSet.js +14 -0
- package/dist/node_modules/lodash/isSet.js.map +1 -0
- package/dist/node_modules/lodash/isUndefined.js +13 -0
- package/dist/node_modules/lodash/isUndefined.js.map +1 -0
- package/dist/node_modules/lodash/keysIn.js +17 -0
- package/dist/node_modules/lodash/keysIn.js.map +1 -0
- package/dist/node_modules/lodash/merge.js +15 -0
- package/dist/node_modules/lodash/merge.js.map +1 -0
- package/dist/node_modules/lodash/pick.js +15 -0
- package/dist/node_modules/lodash/pick.js.map +1 -0
- package/dist/node_modules/lodash/reduce.js +20 -0
- package/dist/node_modules/lodash/reduce.js.map +1 -0
- package/dist/node_modules/lodash/size.js +22 -0
- package/dist/node_modules/lodash/size.js.map +1 -0
- package/dist/node_modules/lodash/toPlainObject.js +16 -0
- package/dist/node_modules/lodash/toPlainObject.js.map +1 -0
- package/dist/node_modules/lodash/transform.js +31 -0
- package/dist/node_modules/lodash/transform.js.map +1 -0
- package/dist/node_modules/lodash/union.js +17 -0
- package/dist/node_modules/lodash/union.js.map +1 -0
- package/dist/node_modules/lodash/uniqueId.js +16 -0
- package/dist/node_modules/lodash/uniqueId.js.map +1 -0
- package/dist/node_modules/lodash/values.js +16 -0
- package/dist/node_modules/lodash/values.js.map +1 -0
- package/dist/node_modules/lodash/zipObject.js +16 -0
- package/dist/node_modules/lodash/zipObject.js.map +1 -0
- package/dist/pages/ActionsPage.js +269 -230
- package/dist/pages/ActionsPage.js.map +1 -1
- package/dist/pages/AgentDetailsPage.js +442 -436
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/AgentGraphPage.js +251 -118
- package/dist/pages/AgentGraphPage.js.map +1 -1
- package/dist/pages/VibeDeckPage.js +268 -224
- package/dist/pages/VibeDeckPage.js.map +1 -1
- package/dist/services/agentRemoteTaskGates.js +29 -0
- package/dist/services/agentRemoteTaskGates.js.map +1 -0
- package/package.json +3 -1
- package/dist/components/graph/AgentGraphView.js +0 -237
- package/dist/components/graph/AgentGraphView.js.map +0 -1
- package/dist/components/graph/AgentNode.js +0 -54
- package/dist/components/graph/AgentNode.js.map +0 -1
- package/dist/components/graph/TargetNode.js +0 -76
- package/dist/components/graph/TargetNode.js.map +0 -1
|
@@ -1,73 +1,74 @@
|
|
|
1
|
-
import { useAgentPluginsLazyQuery as e, useAgentSecretRevealLazyQuery as t, useCheckSessionHealthMutation as n, useCreateSessionMutation as r, useDeleteAgentMutation as i, useGetAgentQuery as a, useInstallAgentPluginMutation as ee, usePushAgentGatewayAuthMutation as te, useRemoveAgentPluginMutation as o, useSetupAgentGatewayAuthMutation as ne, useStartVibecontrolsAgentMutation as
|
|
2
|
-
import { ConfirmDialog as
|
|
3
|
-
import { QuotaExhaustedDialog as
|
|
4
|
-
import { getQuotaDialogContent as
|
|
5
|
-
import { useVibeControls as
|
|
6
|
-
import { useVibeControlsStore as
|
|
7
|
-
import { PageHeader as
|
|
8
|
-
import { ErrorState as
|
|
9
|
-
import { EntityTagPicker as
|
|
10
|
-
import { EmptyState as
|
|
11
|
-
import { StatusBadge as
|
|
12
|
-
import { Card as
|
|
13
|
-
import { useActiveAgentProfile as
|
|
1
|
+
import { useAgentPluginsLazyQuery as e, useAgentSecretRevealLazyQuery as t, useCheckSessionHealthMutation as n, useCreateSessionMutation as r, useDeleteAgentMutation as i, useGetAgentQuery as a, useInstallAgentPluginMutation as ee, usePushAgentGatewayAuthMutation as te, useRemoveAgentPluginMutation as o, useSetupAgentGatewayAuthMutation as ne, useStartVibecontrolsAgentMutation as re, useStopVibecontrolsAgentMutation as ie, useUpdateAgentMutation as ae, useUpdateAgentPluginMutation as s, useVibecontrolsAgentHealthProbeStreamSubscription as oe, useVibecontrolsAgentHealthProbesQuery as se } from "../generated/wspace-operations.js";
|
|
2
|
+
import { ConfirmDialog as ce } from "../components/shared/ConfirmDialog.js";
|
|
3
|
+
import { QuotaExhaustedDialog as le } from "../components/shared/QuotaExhaustedDialog.js";
|
|
4
|
+
import { getQuotaDialogContent as ue, isQuotaExhaustedError as de, markQuotaHandledLocally as fe } from "../utils/quotaUtils.js";
|
|
5
|
+
import { useVibeControls as pe, useVibeNavigate as c } from "../providers/VibeControlsProvider.js";
|
|
6
|
+
import { useVibeControlsStore as me } from "../store/vibeControlsStore.js";
|
|
7
|
+
import { PageHeader as he } from "../components/shared/PageHeader.js";
|
|
8
|
+
import { ErrorState as ge } from "../components/shared/ErrorState.js";
|
|
9
|
+
import { EntityTagPicker as _e } from "../components/shared/EntityTagPicker.js";
|
|
10
|
+
import { EmptyState as ve } from "../components/shared/EmptyState.js";
|
|
11
|
+
import { StatusBadge as ye } from "../components/shared/StatusBadge.js";
|
|
12
|
+
import { Card as l } from "../components/shared/Card.js";
|
|
13
|
+
import { useActiveAgentProfile as be } from "../hooks/useActiveAgentProfile.js";
|
|
14
14
|
import "../components/shared/index.js";
|
|
15
|
-
import { isNative as
|
|
16
|
-
import { VIBE_PERMISSIONS as
|
|
17
|
-
import { PageSkeleton as
|
|
18
|
-
import { AgentBackupTab as
|
|
19
|
-
import { ConnectionLogPanel as
|
|
20
|
-
import { AgentMaintenanceTab as
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
15
|
+
import { isNative as xe, nativeCopyText as Se, nativeToast as Ce } from "../utils/nativeBridge.js";
|
|
16
|
+
import { VIBE_PERMISSIONS as we } from "../constants/permissions.js";
|
|
17
|
+
import { PageSkeleton as Te } from "../components/shared/PageSkeleton.js";
|
|
18
|
+
import { AgentBackupTab as Ee } from "../components/agents/backup/AgentBackupTab.js";
|
|
19
|
+
import { ConnectionLogPanel as De } from "../components/agents/ConnectionLogPanel.js";
|
|
20
|
+
import { AgentMaintenanceTab as Oe } from "../components/agents/AgentMaintenanceTab.js";
|
|
21
|
+
import { AgentConnectionRecovery as ke } from "../components/agents/AgentConnectionRecovery.js";
|
|
22
|
+
import { AliasManager as Ae } from "../components/aliases/AliasManager.js";
|
|
23
|
+
import { AgentStatusBadge as je } from "../components/agents/AgentStatusBadge.js";
|
|
24
|
+
import { RemoteTaskPermissionsCard as Me } from "../components/agents/RemoteTaskPermissionsCard.js";
|
|
25
|
+
import { PluginUIPanel as Ne } from "../components/agents/PluginUIPanel.js";
|
|
26
|
+
import { OpenInBrowserEditorButton as Pe } from "../components/agents/OpenInBrowserEditorButton.js";
|
|
26
27
|
import "../components/agents/index.js";
|
|
27
|
-
import { deriveAgentStatus as
|
|
28
|
-
import { LogViewer as
|
|
29
|
-
import { ProfilesPanel as
|
|
28
|
+
import { deriveAgentStatus as Fe } from "../utils/agentStatus.js";
|
|
29
|
+
import { LogViewer as Ie } from "../components/logs/LogViewer.js";
|
|
30
|
+
import { ProfilesPanel as Le } from "../components/agent-manager/ProfilesPanel.js";
|
|
30
31
|
import "../components/agent-manager/index.js";
|
|
31
|
-
import { NotesTabPanel as
|
|
32
|
+
import { NotesTabPanel as Re } from "../components/notes/NotesTabPanel.js";
|
|
32
33
|
import "../components/notes/index.js";
|
|
33
|
-
import { useQueryBackedTab as
|
|
34
|
-
import { mintScopedIframeToken as
|
|
35
|
-
import { AddTabDialog as
|
|
36
|
-
import { PluginIframeMount as
|
|
37
|
-
import { useCallback as
|
|
38
|
-
import { useI18n as
|
|
39
|
-
import { ArrowLeft as
|
|
40
|
-
import { useParams as
|
|
41
|
-
import { usePermissions as
|
|
42
|
-
import { AnimatePresence as
|
|
34
|
+
import { useQueryBackedTab as ze } from "../hooks/useQueryBackedTab.js";
|
|
35
|
+
import { mintScopedIframeToken as Be } from "../services/iframeToken.js";
|
|
36
|
+
import { AddTabDialog as Ve } from "../components/plugins/AddTabDialog.js";
|
|
37
|
+
import { PluginIframeMount as He } from "../components/plugins/PluginIframeMount.js";
|
|
38
|
+
import { useCallback as u, useEffect as d, useMemo as Ue, useRef as f, useState as p } from "react";
|
|
39
|
+
import { useI18n as We } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
40
|
+
import { ArrowLeft as m, ArrowUpCircle as Ge, Bot as Ke, Check as qe, CheckCircle2 as Je, Clock as Ye, Command as Xe, Copy as Ze, Cpu as Qe, Database as $e, Download as et, Edit3 as tt, Eye as nt, EyeOff as rt, FileText as it, HardDrive as at, Info as ot, Key as st, Link2 as h, Loader2 as g, Monitor as ct, Play as lt, Plus as ut, Puzzle as dt, RefreshCw as ft, ScrollText as pt, Search as mt, Server as ht, Settings as gt, Shield as _t, Square as vt, Tag as yt, Terminal as bt, Trash2 as xt, Unlink as St, Users as Ct, Wrench as wt, X as _, Zap as Tt } from "lucide-react";
|
|
41
|
+
import { useParams as Et } from "react-router-dom";
|
|
42
|
+
import { usePermissions as Dt } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
43
|
+
import { AnimatePresence as Ot, motion as v } from "framer-motion";
|
|
43
44
|
import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
44
|
-
import { Checkbox as
|
|
45
|
-
import { useFeatureFlagDetails as
|
|
46
|
-
import { PermissionButton as
|
|
47
|
-
import { MotionPage as
|
|
48
|
-
import { usePluginContributions as
|
|
45
|
+
import { Checkbox as kt } from "@burdenoff/fe-libs/ui";
|
|
46
|
+
import { useFeatureFlagDetails as At } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
47
|
+
import { PermissionButton as jt } from "@burdenoff/fe-libs/shared/components";
|
|
48
|
+
import { MotionPage as Mt } from "@burdenoff/fe-libs/shared/motion";
|
|
49
|
+
import { usePluginContributions as Nt } from "@burdenoff/fe-libs/shared/plugins";
|
|
49
50
|
//#region src/pages/AgentDetailsPage.tsx
|
|
50
|
-
function
|
|
51
|
-
let { t: n } =
|
|
51
|
+
function Pt({ agent: e, onUpdate: t }) {
|
|
52
|
+
let { t: n } = We(), [r] = ae(), [i] = ne(), [a, ee] = p(!1), [te, o] = p(null), [re, ie] = p(!1), [s, oe] = p(null), [se, ce] = p(!1), [le, ue] = p(!1), [de, fe] = p(!1), pe = !!(e.appId && e.appClientId), c = (e, t, r) => {
|
|
52
53
|
let i = n(e, r), a = i === e ? t : i;
|
|
53
54
|
return r ? Object.entries(r).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), a) : a;
|
|
54
|
-
},
|
|
55
|
+
}, me = e.metadata?.devportalApplicationId, he = async () => {
|
|
55
56
|
ee(!0), o(null);
|
|
56
57
|
try {
|
|
57
58
|
let { data: n } = await i({ variables: { input: { agentId: e.id } } }), r = n?.setupAgentGatewayAuth;
|
|
58
|
-
if (!r) throw Error(
|
|
59
|
-
|
|
59
|
+
if (!r) throw Error(c("agentDetails.gatewayAuthNoResultError", "No result returned from setupAgentGatewayAuth"));
|
|
60
|
+
oe(r.clientSecret), r.error && o(r.error), t();
|
|
60
61
|
} catch (e) {
|
|
61
|
-
o(e instanceof Error ? e.message :
|
|
62
|
+
o(e instanceof Error ? e.message : c("agentDetails.failedSetupGatewayAuth", "Failed to set up gateway auth"));
|
|
62
63
|
} finally {
|
|
63
64
|
ee(!1);
|
|
64
65
|
}
|
|
65
66
|
};
|
|
66
|
-
return /* @__PURE__ */ x(
|
|
67
|
+
return /* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
67
68
|
className: "p-4 border-b border-border-default",
|
|
68
69
|
children: /* @__PURE__ */ x("h3", {
|
|
69
70
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
70
|
-
children: [/* @__PURE__ */ b(
|
|
71
|
+
children: [/* @__PURE__ */ b(_t, { className: "size-5" }), c("agentDetails.gatewayAuthTitle", "Gateway Auth (OAuth2)")]
|
|
71
72
|
})
|
|
72
73
|
}), /* @__PURE__ */ x("div", {
|
|
73
74
|
className: "p-4 space-y-3",
|
|
@@ -86,7 +87,7 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
86
87
|
children: /* @__PURE__ */ b(_, { className: "size-3.5" })
|
|
87
88
|
})
|
|
88
89
|
]
|
|
89
|
-
}),
|
|
90
|
+
}), pe ? /* @__PURE__ */ x(y, { children: [
|
|
90
91
|
/* @__PURE__ */ x("div", {
|
|
91
92
|
className: "flex items-start gap-3",
|
|
92
93
|
children: [/* @__PURE__ */ b("div", {
|
|
@@ -96,15 +97,15 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
96
97
|
className: "flex-1 min-w-0 space-y-2",
|
|
97
98
|
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
98
99
|
className: "text-sm font-medium text-text-primary",
|
|
99
|
-
children:
|
|
100
|
+
children: c("agentDetails.linkedToOauthApp", "Linked to OAuth App")
|
|
100
101
|
}), /* @__PURE__ */ b("p", {
|
|
101
102
|
className: "text-xs text-text-muted",
|
|
102
|
-
children:
|
|
103
|
+
children: c("agentDetails.gatewayAuthLinkedDescription", "This agent can authenticate with the API gateway using Client Credentials.")
|
|
103
104
|
})] }), /* @__PURE__ */ x("div", {
|
|
104
105
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-3",
|
|
105
106
|
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
106
107
|
className: "text-xs text-text-secondary mb-1",
|
|
107
|
-
children:
|
|
108
|
+
children: c("agentDetails.clientId", "Client ID")
|
|
108
109
|
}), /* @__PURE__ */ x("div", {
|
|
109
110
|
className: "flex items-center gap-2",
|
|
110
111
|
children: [/* @__PURE__ */ b("code", {
|
|
@@ -114,16 +115,16 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
114
115
|
type: "button",
|
|
115
116
|
onClick: async () => {
|
|
116
117
|
if (e.appClientId) try {
|
|
117
|
-
await
|
|
118
|
+
await Se(e.appClientId), xe() && Ce("Copied"), ue(!0), setTimeout(() => ue(!1), 2e3);
|
|
118
119
|
} catch {}
|
|
119
120
|
},
|
|
120
121
|
className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
121
|
-
title:
|
|
122
|
-
children:
|
|
122
|
+
title: c("agentDetails.copyClientId", "Copy Client ID"),
|
|
123
|
+
children: le ? /* @__PURE__ */ b(qe, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ b(Ze, { className: "size-3.5 text-text-secondary" })
|
|
123
124
|
})]
|
|
124
125
|
})] }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
125
126
|
className: "text-xs text-text-secondary mb-1",
|
|
126
|
-
children:
|
|
127
|
+
children: c("agentDetails.appId", "App ID")
|
|
127
128
|
}), /* @__PURE__ */ b("code", {
|
|
128
129
|
className: "text-xs font-mono text-text-muted bg-bg-sunken px-2 py-1 rounded truncate block",
|
|
129
130
|
children: e.appId
|
|
@@ -131,39 +132,39 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
131
132
|
})]
|
|
132
133
|
})]
|
|
133
134
|
}),
|
|
134
|
-
|
|
135
|
+
s && /* @__PURE__ */ x("div", {
|
|
135
136
|
className: "p-3 bg-status-warning-bg/20 border border-status-warning-text/20 rounded-lg space-y-2",
|
|
136
137
|
children: [
|
|
137
138
|
/* @__PURE__ */ b("p", {
|
|
138
139
|
className: "text-sm font-medium text-status-warning-text",
|
|
139
|
-
children:
|
|
140
|
+
children: c("agentDetails.clientSecretOneTimeTitle", "Client Secret (one-time display)")
|
|
140
141
|
}),
|
|
141
142
|
/* @__PURE__ */ b("p", {
|
|
142
143
|
className: "text-xs text-text-secondary",
|
|
143
|
-
children:
|
|
144
|
+
children: c("agentDetails.clientSecretOneTimeDescription", "This secret has been automatically sent to the agent. Save it now if you need it — it won't be shown again.")
|
|
144
145
|
}),
|
|
145
146
|
/* @__PURE__ */ x("div", {
|
|
146
147
|
className: "flex items-center gap-2",
|
|
147
148
|
children: [
|
|
148
149
|
/* @__PURE__ */ b("code", {
|
|
149
150
|
className: "text-xs font-mono text-text-primary bg-bg-sunken px-2 py-1 rounded flex-1 truncate",
|
|
150
|
-
children:
|
|
151
|
+
children: re ? s : "•".repeat(32)
|
|
151
152
|
}),
|
|
152
153
|
/* @__PURE__ */ b("button", {
|
|
153
154
|
type: "button",
|
|
154
|
-
onClick: () =>
|
|
155
|
+
onClick: () => ie(!re),
|
|
155
156
|
className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
156
|
-
children: b(
|
|
157
|
+
children: b(re ? rt : nt, { className: "size-3.5 text-text-secondary" })
|
|
157
158
|
}),
|
|
158
159
|
/* @__PURE__ */ b("button", {
|
|
159
160
|
type: "button",
|
|
160
161
|
onClick: async () => {
|
|
161
|
-
if (
|
|
162
|
-
await
|
|
162
|
+
if (s) try {
|
|
163
|
+
await Se(s), xe() && Ce("Secret copied"), ce(!0), setTimeout(() => ce(!1), 2e3);
|
|
163
164
|
} catch {}
|
|
164
165
|
},
|
|
165
166
|
className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
166
|
-
children:
|
|
167
|
+
children: se ? /* @__PURE__ */ b(qe, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ b(Ze, { className: "size-3.5 text-text-secondary" })
|
|
167
168
|
})
|
|
168
169
|
]
|
|
169
170
|
})
|
|
@@ -172,24 +173,24 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
172
173
|
/* @__PURE__ */ x("div", {
|
|
173
174
|
className: "flex items-center gap-2",
|
|
174
175
|
children: [
|
|
175
|
-
|
|
176
|
-
href: `/devportal/apps/${
|
|
176
|
+
me && /* @__PURE__ */ x("a", {
|
|
177
|
+
href: `/devportal/apps/${me}`,
|
|
177
178
|
className: "flex items-center gap-2 px-3 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-md transition-colors",
|
|
178
|
-
children: [/* @__PURE__ */ b(
|
|
179
|
+
children: [/* @__PURE__ */ b(ct, { className: "size-3" }), c("agentDetails.viewInDeveloperPortal", "View in Developer Portal")]
|
|
179
180
|
}),
|
|
180
181
|
/* @__PURE__ */ x("button", {
|
|
181
182
|
type: "button",
|
|
182
|
-
onClick:
|
|
183
|
+
onClick: he,
|
|
183
184
|
disabled: a,
|
|
184
185
|
className: "flex items-center gap-2 px-3 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-md transition-colors disabled:opacity-50",
|
|
185
|
-
title:
|
|
186
|
-
children: [a ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(
|
|
186
|
+
title: c("agentDetails.repushCredentialsTitle", "Rotate the OAuth secret and push it to the agent. Use this if the agent shows degraded with \"boot state awaiting-config\"."),
|
|
187
|
+
children: [a ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(ft, { className: "size-3" }), c("agentDetails.repushCredentials", "Re-push credentials")]
|
|
187
188
|
}),
|
|
188
189
|
/* @__PURE__ */ x("button", {
|
|
189
190
|
type: "button",
|
|
190
191
|
onClick: async () => {
|
|
191
|
-
if (window.confirm(
|
|
192
|
-
|
|
192
|
+
if (window.confirm(c("agentDetails.confirmUnlinkOauthApp", "Remove the linked OAuth app from this agent? The app will still exist in auth-svc."))) {
|
|
193
|
+
fe(!0), o(null);
|
|
193
194
|
try {
|
|
194
195
|
await r({ variables: {
|
|
195
196
|
id: e.id,
|
|
@@ -197,17 +198,17 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
197
198
|
appId: null,
|
|
198
199
|
appClientId: null
|
|
199
200
|
}
|
|
200
|
-
} }),
|
|
201
|
+
} }), oe(null), t();
|
|
201
202
|
} catch (e) {
|
|
202
|
-
o(e instanceof Error ? e.message :
|
|
203
|
+
o(e instanceof Error ? e.message : c("agentDetails.failedUnlinkApp", "Failed to unlink app"));
|
|
203
204
|
} finally {
|
|
204
|
-
|
|
205
|
+
fe(!1);
|
|
205
206
|
}
|
|
206
207
|
}
|
|
207
208
|
},
|
|
208
|
-
disabled:
|
|
209
|
+
disabled: de,
|
|
209
210
|
className: "flex items-center gap-2 px-3 py-1.5 text-xs text-status-error-text hover:bg-status-error-bg rounded-md transition-colors disabled:opacity-50",
|
|
210
|
-
children: [
|
|
211
|
+
children: [de ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(St, { className: "size-3" }), c("agentDetails.unlinkApp", "Unlink App")]
|
|
211
212
|
})
|
|
212
213
|
]
|
|
213
214
|
})
|
|
@@ -215,27 +216,27 @@ function Nt({ agent: e, onUpdate: t }) {
|
|
|
215
216
|
className: "flex items-start gap-3",
|
|
216
217
|
children: [/* @__PURE__ */ b("div", {
|
|
217
218
|
className: "size-8 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0 mt-0.5",
|
|
218
|
-
children: /* @__PURE__ */ b(
|
|
219
|
+
children: /* @__PURE__ */ b(_t, { className: "size-4 text-text-muted" })
|
|
219
220
|
}), /* @__PURE__ */ x("div", {
|
|
220
221
|
className: "flex-1",
|
|
221
222
|
children: [/* @__PURE__ */ b("p", {
|
|
222
223
|
className: "text-sm font-medium text-text-primary",
|
|
223
|
-
children:
|
|
224
|
+
children: c("agentDetails.noOauthAppLinked", "No OAuth App Linked")
|
|
224
225
|
}), /* @__PURE__ */ b("p", {
|
|
225
226
|
className: "text-xs text-text-muted mt-0.5",
|
|
226
|
-
children:
|
|
227
|
+
children: c("agentDetails.gatewayAuthSetupDescription", "Set up gateway auth to allow this agent to communicate with the API gateways using OAuth2 Client Credentials. This creates an OAuth app, registers it in the Developer Portal, and pushes the credentials to the agent.")
|
|
227
228
|
})]
|
|
228
229
|
})]
|
|
229
230
|
}), /* @__PURE__ */ b("button", {
|
|
230
231
|
type: "button",
|
|
231
|
-
onClick:
|
|
232
|
+
onClick: he,
|
|
232
233
|
disabled: a,
|
|
233
234
|
className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
|
|
234
|
-
children: a ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(g, { className: "size-4 animate-spin" }),
|
|
235
|
+
children: a ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(g, { className: "size-4 animate-spin" }), c("agentDetails.settingUp", "Setting up...")] }) : /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(h, { className: "size-4" }), c("agentDetails.setupGatewayAuth", "Setup Gateway Auth")] })
|
|
235
236
|
})] })]
|
|
236
237
|
})] });
|
|
237
238
|
}
|
|
238
|
-
var
|
|
239
|
+
var Ft = [
|
|
239
240
|
"overview",
|
|
240
241
|
"profiles",
|
|
241
242
|
"security",
|
|
@@ -249,11 +250,11 @@ var Pt = [
|
|
|
249
250
|
"backup",
|
|
250
251
|
"maintenance"
|
|
251
252
|
];
|
|
252
|
-
function
|
|
253
|
-
let { t: ne } =
|
|
253
|
+
function It() {
|
|
254
|
+
let { t: ne } = We(), { id: h } = Et(), { basePath: St } = pe(), It = St || "", S = c(), { hasPermission: Lt, isLoading: Rt, permissions: zt } = Dt(), C = u((e, t, n) => {
|
|
254
255
|
let r = ne(e, n), i = r === e ? t : r;
|
|
255
256
|
return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
|
|
256
|
-
}, [ne]), [
|
|
257
|
+
}, [ne]), [Bt] = ae({ refetchQueries: ["GetAgent"] }), [Vt] = i({
|
|
257
258
|
refetchQueries: ["ListAgents", "VibeControlsInitialData"],
|
|
258
259
|
awaitRefetchQueries: !0,
|
|
259
260
|
update(e, t, { variables: n }) {
|
|
@@ -263,56 +264,56 @@ function Ft() {
|
|
|
263
264
|
id: r
|
|
264
265
|
}) }), e.gc());
|
|
265
266
|
}
|
|
266
|
-
}), [
|
|
267
|
-
|
|
268
|
-
h &&
|
|
269
|
-
}, [h,
|
|
270
|
-
let [
|
|
271
|
-
|
|
267
|
+
}), [Ht] = n({ refetchQueries: ["GetAgent"] }), [Ut] = re(), [Wt] = ie(), [w, Gt] = p(null), [Kt, qt] = p(null), Jt = me((e) => e.setActiveAgentId);
|
|
268
|
+
d(() => {
|
|
269
|
+
h && Jt(h);
|
|
270
|
+
}, [h, Jt]);
|
|
271
|
+
let [Yt, Xt] = p(!1), [Zt, T] = p(null), [Qt, $t] = p(!1), [en, E] = p(null), [tn, nn] = p(!1), [rn, an] = p(!1), [on, sn] = p(""), [D, cn] = p(!1), [ln, un] = p(null), dn = f(null), fn = f(null), pn = f(null), mn = f(null), hn = f(null), [gn, _n] = p(!1), [vn, yn] = p(!1), [O, bn] = p(null), [xn, Sn] = p(!1), [Cn, wn] = p(null), [Tn] = t({ fetchPolicy: "network-only" }), [k, A] = p(!1), [En, j] = p(null), [M, Dn] = p(!1), N = f(null), On = f(null), kn = f(null), An = f(null), [jn] = r({ refetchQueries: ["GetAgent", "ListSessions"] });
|
|
272
|
+
d(() => {
|
|
272
273
|
if (!k) return;
|
|
273
274
|
let e = (e) => {
|
|
274
275
|
e.key === "Escape" && !M && A(!1);
|
|
275
276
|
};
|
|
276
277
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
277
|
-
}, [k, M]),
|
|
278
|
+
}, [k, M]), d(() => {
|
|
278
279
|
if (!k) return;
|
|
279
280
|
let e = requestAnimationFrame(() => N.current?.focus());
|
|
280
281
|
return () => cancelAnimationFrame(e);
|
|
281
282
|
}, [k]);
|
|
282
|
-
let { data:
|
|
283
|
+
let { data: Mn, loading: Nn, error: Pn, refetch: P } = a({
|
|
283
284
|
variables: { id: h || "" },
|
|
284
285
|
skip: !h,
|
|
285
286
|
fetchPolicy: "cache-and-network"
|
|
286
|
-
}), F =
|
|
287
|
+
}), F = Mn?.vibecontrolsAgent, I = se({
|
|
287
288
|
fetchPolicy: "cache-and-network",
|
|
288
289
|
nextFetchPolicy: "cache-first",
|
|
289
290
|
notifyOnNetworkStatusChange: !0,
|
|
290
291
|
skip: !h,
|
|
291
292
|
pollInterval: 3e4
|
|
292
|
-
}), { data:
|
|
293
|
-
let e = /* @__PURE__ */ new Map(), t =
|
|
293
|
+
}), { data: Fn } = oe({ skip: !h }), In = I.data === void 0 && Fn === void 0, L = Ue(() => {
|
|
294
|
+
let e = /* @__PURE__ */ new Map(), t = Fn?.vibecontrolsAgentHealthProbeStream ?? I.data?.vibecontrolsAgentHealthProbes ?? [];
|
|
294
295
|
for (let n of t) e.set(n.agentId, {
|
|
295
296
|
agentId: n.agentId,
|
|
296
297
|
healthy: n.healthy,
|
|
297
298
|
errorMessage: n.errorMessage
|
|
298
299
|
});
|
|
299
300
|
return e;
|
|
300
|
-
}, [I.data,
|
|
301
|
+
}, [I.data, Fn]), R = Ue(() => F ? Fe({
|
|
301
302
|
id: F.id,
|
|
302
303
|
isActive: F.isActive,
|
|
303
304
|
metadata: F.metadata
|
|
304
|
-
}, L, { probesLoading:
|
|
305
|
+
}, L, { probesLoading: In }) : "REGISTERING", [
|
|
305
306
|
F,
|
|
306
307
|
L,
|
|
307
|
-
|
|
308
|
-
]),
|
|
308
|
+
In
|
|
309
|
+
]), Ln = R === "STOPPED" || R === "OFFLINE", { active: z } = be(F?.id ?? null), B = At("vibes.tabs.iframe-host")?.value === !0, Rn = Ue(() => {
|
|
309
310
|
if (!B || !F?.tunnelUrl) return [];
|
|
310
311
|
let e = F.id, t = z ?? "default";
|
|
311
312
|
return [{
|
|
312
313
|
tunnelUrl: F.tunnelUrl,
|
|
313
314
|
profile: t,
|
|
314
315
|
label: F.name ?? F.id,
|
|
315
|
-
mintIframeToken: async ({ pathPrefixes: n }) =>
|
|
316
|
+
mintIframeToken: async ({ pathPrefixes: n }) => Be(e, t, n)
|
|
316
317
|
}];
|
|
317
318
|
}, [
|
|
318
319
|
B,
|
|
@@ -320,33 +321,33 @@ function Ft() {
|
|
|
320
321
|
F?.tunnelUrl,
|
|
321
322
|
F?.name,
|
|
322
323
|
z
|
|
323
|
-
]), V =
|
|
324
|
+
]), V = Nt(Rn, {
|
|
324
325
|
mountPoint: "agent.detailTab",
|
|
325
|
-
enabled: B &&
|
|
326
|
-
}), [H,
|
|
326
|
+
enabled: B && Rn.length > 0
|
|
327
|
+
}), [H, zn] = ze(Ue(() => {
|
|
327
328
|
let e = V.data.filter((e) => e.contribution.mountPoint === "agent.detailTab").map((e) => e.contribution.id);
|
|
328
|
-
return [...
|
|
329
|
-
}, [V.data]), "overview"), [
|
|
330
|
-
|
|
331
|
-
F && !
|
|
332
|
-
}, [F,
|
|
333
|
-
let [
|
|
334
|
-
|
|
335
|
-
if (!F ||
|
|
329
|
+
return [...Ft, ...e];
|
|
330
|
+
}, [V.data]), "overview"), [Bn, Vn] = p(!1), Hn = f(!1);
|
|
331
|
+
d(() => {
|
|
332
|
+
F && !Hn.current && (Hn.current = !0, Ht().catch(() => {}));
|
|
333
|
+
}, [F, Ht]);
|
|
334
|
+
let [Un] = te(), Wn = f(!1);
|
|
335
|
+
d(() => {
|
|
336
|
+
if (!F || Wn.current) return;
|
|
336
337
|
let e = !!(F.appId && F.appClientId), t = !!F.tunnelUrl;
|
|
337
|
-
!e || !t || (
|
|
338
|
+
!e || !t || (Wn.current = !0, Un({ variables: { input: { agentId: F.id } } }).then(() => {
|
|
338
339
|
P().catch(() => {});
|
|
339
340
|
}).catch(() => {}));
|
|
340
341
|
}, [
|
|
341
342
|
F,
|
|
342
|
-
|
|
343
|
+
Un,
|
|
343
344
|
P
|
|
344
345
|
]);
|
|
345
|
-
let [U,
|
|
346
|
+
let [U, Gn] = p([]), [Kn, qn] = p([]), [Jn, Yn] = p(!0), [W, G] = p(null), [Xn, K] = p(null), [Zn, Qn] = p(!1), [$n, er] = p(!1), [tr, nr] = p(!1), [rr, ir] = p(!1), [ar, or] = p(!1), [sr, cr] = p("plugin"), lr = f(null), [q, ur] = p("installed"), [J, dr] = p(""), [Y, fr] = p([]), [pr, mr] = p(!1), [hr, gr] = p(null), [_r, vr] = p(null), [yr] = e(), [br] = ee(), [xr] = o(), [Sr] = s(), X = u(async () => {
|
|
346
347
|
if (F?.id) {
|
|
347
|
-
|
|
348
|
+
Yn(!0), K(null);
|
|
348
349
|
try {
|
|
349
|
-
let { data: e } = await
|
|
350
|
+
let { data: e } = await yr({ variables: {
|
|
350
351
|
agentId: F.id,
|
|
351
352
|
profile: z
|
|
352
353
|
} }), t = e?.agentPlugins;
|
|
@@ -376,41 +377,41 @@ function Ft() {
|
|
|
376
377
|
tags: [...e.tags],
|
|
377
378
|
installed: e.installed
|
|
378
379
|
}));
|
|
379
|
-
|
|
380
|
+
Gn(e), qn(n), t.error && K(t.error);
|
|
380
381
|
}
|
|
381
382
|
} catch {
|
|
382
383
|
K("Agent unreachable — unable to fetch plugin list");
|
|
383
384
|
} finally {
|
|
384
|
-
|
|
385
|
+
Yn(!1);
|
|
385
386
|
}
|
|
386
387
|
}
|
|
387
388
|
}, [
|
|
388
389
|
F?.id,
|
|
389
|
-
|
|
390
|
+
yr,
|
|
390
391
|
z
|
|
391
392
|
]);
|
|
392
|
-
|
|
393
|
+
d(() => {
|
|
393
394
|
if (!F?.id) return;
|
|
394
395
|
let e = `${F.id}:${z}`;
|
|
395
|
-
|
|
396
|
+
lr.current !== e && (lr.current = e, X());
|
|
396
397
|
}, [
|
|
397
398
|
F?.id,
|
|
398
399
|
z,
|
|
399
400
|
X
|
|
400
401
|
]);
|
|
401
|
-
let
|
|
402
|
+
let Cr = u(async (e) => {
|
|
402
403
|
if (F?.id) {
|
|
403
404
|
G(e);
|
|
404
405
|
try {
|
|
405
|
-
let { data: t } = await
|
|
406
|
+
let { data: t } = await br({ variables: {
|
|
406
407
|
agentId: F.id,
|
|
407
408
|
packageName: e
|
|
408
409
|
} });
|
|
409
410
|
if (t?.installAgentPlugin?.success) await X();
|
|
410
411
|
else throw Error(t?.installAgentPlugin?.error || C("agentDetails.installFailed", "Install failed"));
|
|
411
412
|
} catch (e) {
|
|
412
|
-
if (
|
|
413
|
-
|
|
413
|
+
if (de(e)) {
|
|
414
|
+
fe(), cr("plugin"), or(!0);
|
|
414
415
|
return;
|
|
415
416
|
}
|
|
416
417
|
K(e instanceof Error ? e.message : C("agentDetails.pluginInstallFailed", "Failed to install plugin")), setTimeout(() => K(null), 5e3);
|
|
@@ -420,14 +421,14 @@ function Ft() {
|
|
|
420
421
|
}
|
|
421
422
|
}, [
|
|
422
423
|
F?.id,
|
|
423
|
-
|
|
424
|
+
br,
|
|
424
425
|
X,
|
|
425
426
|
C
|
|
426
|
-
]),
|
|
427
|
+
]), wr = u(async (e) => {
|
|
427
428
|
if (F?.id && window.confirm(C("agentDetails.removePluginConfirm", "Remove plugin {{packageName}}?", { packageName: e }))) {
|
|
428
429
|
G(e);
|
|
429
430
|
try {
|
|
430
|
-
let { data: t } = await
|
|
431
|
+
let { data: t } = await xr({ variables: {
|
|
431
432
|
agentId: F.id,
|
|
432
433
|
packageName: e
|
|
433
434
|
} });
|
|
@@ -441,17 +442,17 @@ function Ft() {
|
|
|
441
442
|
}
|
|
442
443
|
}, [
|
|
443
444
|
F?.id,
|
|
444
|
-
|
|
445
|
+
xr,
|
|
445
446
|
X,
|
|
446
447
|
C
|
|
447
|
-
]),
|
|
448
|
+
]), Tr = u(async (e) => {
|
|
448
449
|
if (!F?.id) return;
|
|
449
450
|
let t = window.prompt(C("agentDetails.updatePluginPrompt", "Update {{packageName}} to which version? Leave blank for latest.", { packageName: e }));
|
|
450
451
|
if (t === null) return;
|
|
451
452
|
let n = t.trim() || void 0;
|
|
452
453
|
G(e);
|
|
453
454
|
try {
|
|
454
|
-
let { data: t } = await
|
|
455
|
+
let { data: t } = await Sr({ variables: {
|
|
455
456
|
agentId: F.id,
|
|
456
457
|
packageName: e,
|
|
457
458
|
version: n ?? null
|
|
@@ -465,11 +466,11 @@ function Ft() {
|
|
|
465
466
|
}
|
|
466
467
|
}, [
|
|
467
468
|
F?.id,
|
|
468
|
-
|
|
469
|
+
Sr,
|
|
469
470
|
X,
|
|
470
471
|
C
|
|
471
|
-
]), Z = F?.sessions || [], Q = F?.vibes || [],
|
|
472
|
-
|
|
472
|
+
]), Z = F?.sessions || [], Q = F?.vibes || [], Er = u(async () => {
|
|
473
|
+
mr(!0), gr(null);
|
|
473
474
|
try {
|
|
474
475
|
let e = await (await fetch(typeof window < "u" && window.__BURDENOFF_GLOBAL_GATEWAY__ || "/global/graphql", {
|
|
475
476
|
method: "POST",
|
|
@@ -478,29 +479,29 @@ function Ft() {
|
|
|
478
479
|
body: JSON.stringify({ query: "query MyStorePlugins {\n myEntitlements {\n id\n productId\n licenseKey\n product {\n id\n name\n slug\n icon\n description\n manifest\n }\n }\n }" })
|
|
479
480
|
})).json();
|
|
480
481
|
if (e.errors?.length) throw Error(e.errors[0]?.message ?? "Failed to load store plugins");
|
|
481
|
-
|
|
482
|
+
fr((e.data?.myEntitlements ?? []).filter((e) => {
|
|
482
483
|
let t = e.product?.manifest;
|
|
483
484
|
if (!t) return !1;
|
|
484
485
|
let n = t.itemType?.toLowerCase();
|
|
485
486
|
return n === "vibemodule" || n === "plugin";
|
|
486
487
|
}));
|
|
487
488
|
} catch (e) {
|
|
488
|
-
|
|
489
|
+
gr(e instanceof Error ? e.message : "Failed to load store plugins");
|
|
489
490
|
} finally {
|
|
490
|
-
|
|
491
|
+
mr(!1);
|
|
491
492
|
}
|
|
492
493
|
}, []);
|
|
493
|
-
|
|
494
|
-
q === "store" && Y.length === 0 && !
|
|
494
|
+
d(() => {
|
|
495
|
+
q === "store" && Y.length === 0 && !pr && Er();
|
|
495
496
|
}, [
|
|
496
497
|
q,
|
|
497
498
|
Y.length,
|
|
498
|
-
|
|
499
|
-
|
|
499
|
+
pr,
|
|
500
|
+
Er
|
|
500
501
|
]);
|
|
501
|
-
let
|
|
502
|
+
let Dr = u(async (e, t) => {
|
|
502
503
|
if (F?.id) {
|
|
503
|
-
|
|
504
|
+
vr(e);
|
|
504
505
|
try {
|
|
505
506
|
let n = await (await fetch(typeof window < "u" && window.__BURDENOFF_WSPACE_GATEWAY__ || "/workspaces/graphql", {
|
|
506
507
|
method: "POST",
|
|
@@ -518,52 +519,52 @@ function Ft() {
|
|
|
518
519
|
if (n.errors?.length) throw Error(n.errors[0]?.message ?? "Install failed");
|
|
519
520
|
let r = n.data?.installStorePluginOnAgent;
|
|
520
521
|
if (!r?.success) throw Error(r?.error ?? "Install failed");
|
|
521
|
-
await X(),
|
|
522
|
+
await X(), ur("installed");
|
|
522
523
|
} catch (e) {
|
|
523
|
-
|
|
524
|
+
gr(e instanceof Error ? e.message : "Install failed");
|
|
524
525
|
} finally {
|
|
525
|
-
|
|
526
|
+
vr(null);
|
|
526
527
|
}
|
|
527
528
|
}
|
|
528
529
|
}, [F?.id, X]);
|
|
529
|
-
|
|
530
|
+
d(() => {
|
|
530
531
|
if (typeof window > "u" || !F?.id) return;
|
|
531
532
|
let e = new URLSearchParams(window.location.search), t = e.get("install"), n = e.get("licenseKey");
|
|
532
|
-
if (t && t !==
|
|
533
|
-
|
|
533
|
+
if (t && t !== _r) {
|
|
534
|
+
ur("store"), Dr(t, n);
|
|
534
535
|
let e = new URL(window.location.href);
|
|
535
536
|
e.searchParams.delete("install"), e.searchParams.delete("licenseKey"), window.history.replaceState({}, "", e.toString());
|
|
536
537
|
}
|
|
537
538
|
}, [
|
|
538
539
|
F?.id,
|
|
539
|
-
|
|
540
|
-
|
|
540
|
+
Dr,
|
|
541
|
+
_r
|
|
541
542
|
]);
|
|
542
|
-
let
|
|
543
|
+
let Or = u(async () => {
|
|
543
544
|
if (!F?.id) return null;
|
|
544
545
|
if (O) return O;
|
|
545
|
-
|
|
546
|
+
Sn(!0), wn(null);
|
|
546
547
|
try {
|
|
547
|
-
let e = (await
|
|
548
|
-
return e ? (
|
|
548
|
+
let e = (await Tn({ variables: { agentId: F.id } })).data?.vibecontrolsAgentSecretReveal ?? null;
|
|
549
|
+
return e ? (bn(e), e) : (wn("No API key configured"), null);
|
|
549
550
|
} catch (e) {
|
|
550
|
-
return
|
|
551
|
+
return wn(e instanceof Error ? e.message : "Reveal failed"), null;
|
|
551
552
|
} finally {
|
|
552
|
-
|
|
553
|
+
Sn(!1);
|
|
553
554
|
}
|
|
554
555
|
}, [
|
|
555
556
|
F?.id,
|
|
556
557
|
O,
|
|
557
|
-
|
|
558
|
+
Tn
|
|
558
559
|
]);
|
|
559
|
-
if (
|
|
560
|
+
if (Rt) return /* @__PURE__ */ b("div", {
|
|
560
561
|
className: "flex items-center justify-center min-h-[400px]",
|
|
561
562
|
children: /* @__PURE__ */ b("p", {
|
|
562
563
|
className: "text-text-secondary",
|
|
563
564
|
children: "Loading permissions…"
|
|
564
565
|
})
|
|
565
566
|
});
|
|
566
|
-
if (
|
|
567
|
+
if (zt && (zt.permissionStrings?.length ?? 0) > 0 && !Lt(we.AGENT_READ)) return /* @__PURE__ */ b("div", {
|
|
567
568
|
className: "flex items-center justify-center min-h-[400px]",
|
|
568
569
|
children: /* @__PURE__ */ x("div", {
|
|
569
570
|
className: "text-center space-y-2",
|
|
@@ -578,49 +579,49 @@ function Ft() {
|
|
|
578
579
|
});
|
|
579
580
|
let $ = () => {
|
|
580
581
|
S("/agents");
|
|
581
|
-
},
|
|
582
|
+
}, kr = async (e) => {
|
|
582
583
|
if (!(!F?.id || w)) {
|
|
583
|
-
|
|
584
|
+
Gt(e), qt(null);
|
|
584
585
|
try {
|
|
585
|
-
let t = e === "start" ? await
|
|
586
|
+
let t = e === "start" ? await Ut({ variables: { agentId: F.id } }) : await Wt({ variables: { agentId: F.id } }), n = e === "start" ? t.data?.startVibecontrolsAgent : t.data?.stopVibecontrolsAgent;
|
|
586
587
|
if (!n || n.success === !1) throw Error(n?.error || `Failed to ${e} agent`);
|
|
587
588
|
E(e === "start" ? C("agentDetails.agentStarted", "Agent started") : C("agentDetails.agentStopped", "Agent stopped")), setTimeout(() => E(null), 3e3), await Promise.all([P(), I.refetch()]).catch(() => {});
|
|
588
589
|
} catch (t) {
|
|
589
590
|
let n = t instanceof Error ? t.message : "";
|
|
590
|
-
|
|
591
|
+
qt(/unable to connect|fetch failed|timed? ?out|ECONN|agent returned 5|network/i.test(n) ? C("agentDetails.agentUnreachable", `Couldn't reach the agent to ${e} it — it may be offline or its tunnel is down. Start it from the host with: vibe start`) : n || C("agentDetails.lifecycleFailed", `Failed to ${e} agent`)), setTimeout(() => qt(null), 6e3);
|
|
591
592
|
} finally {
|
|
592
|
-
|
|
593
|
+
Gt(null);
|
|
593
594
|
}
|
|
594
595
|
}
|
|
595
|
-
},
|
|
596
|
+
}, Ar = () => void kr("start"), jr = () => void kr("stop"), Mr = async () => {
|
|
596
597
|
await Promise.all([P(), I.refetch()]).catch(() => {}), S("/agents");
|
|
597
|
-
},
|
|
598
|
-
T(null),
|
|
599
|
-
},
|
|
598
|
+
}, Nr = () => {
|
|
599
|
+
T(null), Xt(!0);
|
|
600
|
+
}, Pr = async () => {
|
|
600
601
|
if (!F?.id) return;
|
|
601
|
-
let e =
|
|
602
|
+
let e = on.trim();
|
|
602
603
|
if (!e || e === F.name) {
|
|
603
|
-
|
|
604
|
+
an(!1);
|
|
604
605
|
return;
|
|
605
606
|
}
|
|
606
|
-
|
|
607
|
+
cn(!0), un(null);
|
|
607
608
|
try {
|
|
608
|
-
let t = await
|
|
609
|
+
let t = await Bt({ variables: {
|
|
609
610
|
id: F.id,
|
|
610
611
|
input: { name: e }
|
|
611
612
|
} });
|
|
612
613
|
if (t.error) throw t.error;
|
|
613
|
-
|
|
614
|
+
an(!1);
|
|
614
615
|
} catch (e) {
|
|
615
|
-
|
|
616
|
+
un(e instanceof Error ? e.message : String(e));
|
|
616
617
|
} finally {
|
|
617
|
-
|
|
618
|
+
cn(!1);
|
|
618
619
|
}
|
|
619
|
-
},
|
|
620
|
-
|
|
621
|
-
},
|
|
620
|
+
}, Fr = () => {
|
|
621
|
+
an(!1), sn(""), un(null);
|
|
622
|
+
}, Ir = async () => {
|
|
622
623
|
if (!F?.id) return;
|
|
623
|
-
let e =
|
|
624
|
+
let e = fn.current?.value?.trim(), t = pn.current?.value?.trim(), n = mn.current?.value?.trim(), r = hn.current?.value?.trim();
|
|
624
625
|
if (!e) {
|
|
625
626
|
T(C("agentDetails.agentNameRequired", "Agent name is required"));
|
|
626
627
|
return;
|
|
@@ -632,9 +633,9 @@ function Ft() {
|
|
|
632
633
|
T(C("agentDetails.metadataJsonRequired", "Metadata must be valid JSON"));
|
|
633
634
|
return;
|
|
634
635
|
}
|
|
635
|
-
|
|
636
|
+
$t(!0), T(null);
|
|
636
637
|
try {
|
|
637
|
-
await
|
|
638
|
+
await Bt({ variables: {
|
|
638
639
|
id: F.id,
|
|
639
640
|
input: {
|
|
640
641
|
name: e,
|
|
@@ -642,44 +643,44 @@ function Ft() {
|
|
|
642
643
|
aiContext: n || null,
|
|
643
644
|
metadata: i
|
|
644
645
|
}
|
|
645
|
-
} }),
|
|
646
|
+
} }), Xt(!1), E(C("agentDetails.configurationUpdated", "Agent configuration updated successfully")), setTimeout(() => E(null), 3e3);
|
|
646
647
|
} catch (e) {
|
|
647
648
|
T(e instanceof Error ? e.message : C("agentDetails.configurationUpdateFailed", "Failed to update agent configuration"));
|
|
648
649
|
} finally {
|
|
649
|
-
|
|
650
|
+
$t(!1);
|
|
650
651
|
}
|
|
651
|
-
},
|
|
652
|
-
let e = await
|
|
652
|
+
}, Lr = async () => {
|
|
653
|
+
let e = await Or();
|
|
653
654
|
if (e) try {
|
|
654
|
-
await
|
|
655
|
+
await Se(e), xe() && Ce("API key copied"), yn(!0), setTimeout(() => yn(!1), 2e3);
|
|
655
656
|
} catch {
|
|
656
657
|
console.error("Failed to copy API key");
|
|
657
658
|
}
|
|
658
|
-
},
|
|
659
|
-
|
|
660
|
-
},
|
|
661
|
-
F?.id && (
|
|
662
|
-
},
|
|
659
|
+
}, Rr = async () => {
|
|
660
|
+
gn || await Or(), _n((e) => !e);
|
|
661
|
+
}, zr = () => {
|
|
662
|
+
F?.id && (er(!1), nr(!1), Qn(!0));
|
|
663
|
+
}, Br = async () => {
|
|
663
664
|
if (F?.id) {
|
|
664
|
-
|
|
665
|
+
ir(!0);
|
|
665
666
|
try {
|
|
666
|
-
await
|
|
667
|
+
await Vt({ variables: {
|
|
667
668
|
id: F.id,
|
|
668
|
-
uninstallFromTarget:
|
|
669
|
-
deleteTarget:
|
|
670
|
-
} }),
|
|
669
|
+
uninstallFromTarget: $n,
|
|
670
|
+
deleteTarget: tr
|
|
671
|
+
} }), Qn(!1), $();
|
|
671
672
|
} catch (e) {
|
|
672
673
|
console.error("Failed to remove agent:", e);
|
|
673
674
|
} finally {
|
|
674
|
-
|
|
675
|
+
ir(!1);
|
|
675
676
|
}
|
|
676
677
|
}
|
|
677
|
-
},
|
|
678
|
+
}, Vr = (e) => {
|
|
678
679
|
S(`/sessions/${e}`);
|
|
679
|
-
},
|
|
680
|
+
}, Hr = () => {
|
|
680
681
|
j(null), A(!0);
|
|
681
|
-
},
|
|
682
|
-
let e = N.current?.value?.trim(), t =
|
|
682
|
+
}, Ur = async () => {
|
|
683
|
+
let e = N.current?.value?.trim(), t = On.current?.value, n = kn.current?.value?.trim() || void 0, r = An.current?.value?.trim() || void 0;
|
|
683
684
|
if (!e) {
|
|
684
685
|
j(C("vibeDetails.sessionNameRequired", "Session name is required"));
|
|
685
686
|
return;
|
|
@@ -693,62 +694,62 @@ function Ft() {
|
|
|
693
694
|
j(C("sessions.agentNotHealthy", "The selected agent isn’t fully reachable right now. Please wait for the agent badge to turn green and retry.") + (i.errorMessage ? ` (${i.errorMessage})` : ""));
|
|
694
695
|
return;
|
|
695
696
|
}
|
|
696
|
-
|
|
697
|
+
Dn(!0), j(null);
|
|
697
698
|
try {
|
|
698
|
-
await
|
|
699
|
+
await jn({ variables: { input: {
|
|
699
700
|
name: e,
|
|
700
701
|
type: t || "TERMINAL",
|
|
701
702
|
agentId: F.id,
|
|
702
703
|
command: n,
|
|
703
704
|
workingDirectory: r
|
|
704
|
-
} } }), A(!1), N.current && (N.current.value = ""),
|
|
705
|
+
} } }), A(!1), N.current && (N.current.value = ""), On.current && (On.current.selectedIndex = 0), kn.current && (kn.current.value = ""), An.current && (An.current.value = ""), E(C("sessions.createdSuccess", "Session created successfully")), setTimeout(() => E(null), 3e3);
|
|
705
706
|
} catch (e) {
|
|
706
|
-
if (
|
|
707
|
-
A(!1),
|
|
707
|
+
if (de(e)) {
|
|
708
|
+
A(!1), fe(), cr("session"), or(!0);
|
|
708
709
|
return;
|
|
709
710
|
}
|
|
710
711
|
j(e instanceof Error ? e.message : C("sessions.failedCreate", "Failed to create session"));
|
|
711
712
|
} finally {
|
|
712
|
-
|
|
713
|
+
Dn(!1);
|
|
713
714
|
}
|
|
714
|
-
}, Ur = (e) => {
|
|
715
|
-
S(`/vibes/${e}`);
|
|
716
715
|
}, Wr = (e) => {
|
|
716
|
+
S(`/vibes/${e}`);
|
|
717
|
+
}, Gr = (e) => {
|
|
717
718
|
if (!e) return C("health.never", "Never");
|
|
718
719
|
let t = Date.now() - new Date(e).getTime();
|
|
719
720
|
return t < 6e4 ? C("health.justNow", "Just now") : t < 36e5 ? C("agentDetails.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? C("agentDetails.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : new Date(e).toLocaleDateString();
|
|
720
721
|
};
|
|
721
|
-
if (
|
|
722
|
+
if (Nn && !F) return /* @__PURE__ */ x(Mt, {
|
|
722
723
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
723
724
|
children: [/* @__PURE__ */ x("button", {
|
|
724
725
|
type: "button",
|
|
725
726
|
onClick: $,
|
|
726
727
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
727
|
-
children: [/* @__PURE__ */ b(
|
|
728
|
-
}), /* @__PURE__ */ b(
|
|
728
|
+
children: [/* @__PURE__ */ b(m, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
|
|
729
|
+
}), /* @__PURE__ */ b(Te, { variant: "detail" })]
|
|
729
730
|
});
|
|
730
|
-
if (
|
|
731
|
+
if (Pn && !F) return /* @__PURE__ */ x(Mt, {
|
|
731
732
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
732
733
|
children: [/* @__PURE__ */ x("button", {
|
|
733
734
|
type: "button",
|
|
734
735
|
onClick: $,
|
|
735
736
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
736
|
-
children: [/* @__PURE__ */ b(
|
|
737
|
-
}), /* @__PURE__ */ b(
|
|
737
|
+
children: [/* @__PURE__ */ b(m, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
|
|
738
|
+
}), /* @__PURE__ */ b(ge, {
|
|
738
739
|
title: C("agentDetails.failedLoad", "Failed to load agent"),
|
|
739
|
-
message:
|
|
740
|
+
message: Pn.message,
|
|
740
741
|
onRetry: () => P()
|
|
741
742
|
})]
|
|
742
743
|
});
|
|
743
|
-
if (!F) return /* @__PURE__ */ x(
|
|
744
|
+
if (!F) return /* @__PURE__ */ x(Mt, {
|
|
744
745
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
745
746
|
children: [/* @__PURE__ */ x("button", {
|
|
746
747
|
type: "button",
|
|
747
748
|
onClick: $,
|
|
748
749
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
749
|
-
children: [/* @__PURE__ */ b(
|
|
750
|
-
}), /* @__PURE__ */ b(
|
|
751
|
-
icon: /* @__PURE__ */ b(
|
|
750
|
+
children: [/* @__PURE__ */ b(m, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
|
|
751
|
+
}), /* @__PURE__ */ b(ve, {
|
|
752
|
+
icon: /* @__PURE__ */ b(ht, { className: "size-8 text-text-secondary" }),
|
|
752
753
|
title: C("agentDetails.notFound", "Agent not found"),
|
|
753
754
|
description: `${C("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${h}" ${C("agentDetails.notFoundDescriptionSuffix", "exists")}`,
|
|
754
755
|
action: /* @__PURE__ */ b("button", {
|
|
@@ -759,94 +760,94 @@ function Ft() {
|
|
|
759
760
|
})
|
|
760
761
|
})]
|
|
761
762
|
});
|
|
762
|
-
let
|
|
763
|
+
let Kr = [
|
|
763
764
|
{
|
|
764
765
|
id: "overview",
|
|
765
766
|
label: C("nav.overview", "Overview"),
|
|
766
|
-
icon:
|
|
767
|
+
icon: ht
|
|
767
768
|
},
|
|
768
769
|
{
|
|
769
770
|
id: "profiles",
|
|
770
771
|
label: C("agentDetails.profiles", "Profiles"),
|
|
771
|
-
icon:
|
|
772
|
+
icon: Ct
|
|
772
773
|
},
|
|
773
774
|
{
|
|
774
775
|
id: "security",
|
|
775
776
|
label: C("agentDetails.security", "Security"),
|
|
776
|
-
icon:
|
|
777
|
+
icon: _t
|
|
777
778
|
},
|
|
778
779
|
{
|
|
779
780
|
id: "plugins",
|
|
780
781
|
label: C("agentDetails.plugins", "Plugins"),
|
|
781
|
-
icon:
|
|
782
|
+
icon: dt,
|
|
782
783
|
badge: `${U.length}`
|
|
783
784
|
},
|
|
784
785
|
{
|
|
785
786
|
id: "sessions",
|
|
786
787
|
label: C("nav.sessions", "Sessions"),
|
|
787
|
-
icon:
|
|
788
|
+
icon: bt,
|
|
788
789
|
badge: `${Z.length}`
|
|
789
790
|
},
|
|
790
791
|
{
|
|
791
792
|
id: "logs",
|
|
792
793
|
label: C("nav.logs", "Logs"),
|
|
793
|
-
icon:
|
|
794
|
+
icon: pt
|
|
794
795
|
},
|
|
795
796
|
{
|
|
796
797
|
id: "connection",
|
|
797
798
|
label: C("agentDetails.connection", "Connection Log"),
|
|
798
|
-
icon:
|
|
799
|
+
icon: pt
|
|
799
800
|
},
|
|
800
801
|
{
|
|
801
802
|
id: "vibes",
|
|
802
803
|
label: C("nav.vibes", "Vibes"),
|
|
803
|
-
icon:
|
|
804
|
+
icon: Tt,
|
|
804
805
|
badge: `${Q.length}`
|
|
805
806
|
},
|
|
806
807
|
{
|
|
807
808
|
id: "notes",
|
|
808
809
|
label: C("vibeDetails.notes", "Notes"),
|
|
809
|
-
icon:
|
|
810
|
+
icon: it
|
|
810
811
|
},
|
|
811
812
|
{
|
|
812
813
|
id: "aliases",
|
|
813
814
|
label: C("agentDetails.aliases", "Aliases"),
|
|
814
|
-
icon:
|
|
815
|
+
icon: Xe
|
|
815
816
|
},
|
|
816
817
|
{
|
|
817
818
|
id: "backup",
|
|
818
819
|
label: C("agentDetails.backup", "Backup"),
|
|
819
|
-
icon:
|
|
820
|
+
icon: $e
|
|
820
821
|
},
|
|
821
822
|
{
|
|
822
823
|
id: "maintenance",
|
|
823
824
|
label: C("agentDetails.maintenance.tab", "Maintenance"),
|
|
824
|
-
icon:
|
|
825
|
+
icon: wt
|
|
825
826
|
}
|
|
826
|
-
],
|
|
827
|
-
return F?.tunnelUrl, /* @__PURE__ */ x(
|
|
827
|
+
], qr = Z.filter((e) => e.status === "RUNNING").length;
|
|
828
|
+
return F?.tunnelUrl, /* @__PURE__ */ x(Mt, {
|
|
828
829
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
829
830
|
children: [
|
|
830
|
-
|
|
831
|
+
en && /* @__PURE__ */ b("div", {
|
|
831
832
|
className: "fixed top-4 left-4 right-4 sm:left-auto z-50 bg-status-success-bg text-status-success-text px-4 py-3 rounded-md shadow-lg",
|
|
832
|
-
children:
|
|
833
|
+
children: en
|
|
833
834
|
}),
|
|
834
|
-
|
|
835
|
+
Kt && /* @__PURE__ */ b("div", {
|
|
835
836
|
className: "fixed top-16 left-4 right-4 sm:left-auto z-50 bg-status-error-bg text-status-error-text px-4 py-3 rounded-md shadow-lg",
|
|
836
|
-
children:
|
|
837
|
+
children: Kt
|
|
837
838
|
}),
|
|
838
839
|
/* @__PURE__ */ x("button", {
|
|
839
840
|
type: "button",
|
|
840
841
|
onClick: $,
|
|
841
842
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
842
|
-
children: [/* @__PURE__ */ b(
|
|
843
|
+
children: [/* @__PURE__ */ b(m, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
|
|
843
844
|
}),
|
|
844
|
-
/* @__PURE__ */ b(
|
|
845
|
+
/* @__PURE__ */ b(he, {
|
|
845
846
|
title: F.name,
|
|
846
847
|
description: F.hostname || C("agentDetails.noHostnameConfigured", "No hostname configured"),
|
|
847
848
|
breadcrumb: [{
|
|
848
849
|
label: C("nav.agents", "Agents"),
|
|
849
|
-
path:
|
|
850
|
+
path: It ? `${It}/agents` : "/agents"
|
|
850
851
|
}, { label: F.name }],
|
|
851
852
|
actions: /* @__PURE__ */ x("div", {
|
|
852
853
|
className: "flex flex-wrap items-center gap-2",
|
|
@@ -857,7 +858,7 @@ function Ft() {
|
|
|
857
858
|
className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors",
|
|
858
859
|
title: C("agentDetails.openAiChat", "Open AI chat with this agent"),
|
|
859
860
|
"data-testid": "agent-open-ai-chat",
|
|
860
|
-
children: [/* @__PURE__ */ b(
|
|
861
|
+
children: [/* @__PURE__ */ b(Ke, { className: "size-4" }), /* @__PURE__ */ b("span", {
|
|
861
862
|
className: "hidden sm:inline",
|
|
862
863
|
children: C("agentDetails.aiChat", "AI Chat")
|
|
863
864
|
})]
|
|
@@ -865,65 +866,65 @@ function Ft() {
|
|
|
865
866
|
/* @__PURE__ */ b("button", {
|
|
866
867
|
type: "button",
|
|
867
868
|
onClick: () => P(),
|
|
868
|
-
disabled:
|
|
869
|
+
disabled: Nn,
|
|
869
870
|
className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50",
|
|
870
871
|
title: C("common.refresh", "Refresh"),
|
|
871
|
-
children: /* @__PURE__ */ b(
|
|
872
|
+
children: /* @__PURE__ */ b(ft, { className: `size-4 ${Nn ? "animate-spin" : ""}` })
|
|
872
873
|
}),
|
|
873
|
-
|
|
874
|
+
Ln ? /* @__PURE__ */ x("button", {
|
|
874
875
|
type: "button",
|
|
875
|
-
onClick:
|
|
876
|
+
onClick: Ar,
|
|
876
877
|
disabled: w !== null,
|
|
877
878
|
"aria-busy": w === "start",
|
|
878
879
|
className: "flex items-center gap-2 px-3 py-2 bg-status-success-bg text-status-success-text rounded-md hover:opacity-80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
879
|
-
children: [w === "start" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(
|
|
880
|
+
children: [w === "start" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(lt, { className: "size-4" }), w === "start" ? C("agentDetails.starting", "Starting…") : C("agentDetails.start", "Start")]
|
|
880
881
|
}) : /* @__PURE__ */ x("button", {
|
|
881
882
|
type: "button",
|
|
882
|
-
onClick:
|
|
883
|
+
onClick: jr,
|
|
883
884
|
disabled: w !== null,
|
|
884
885
|
"aria-busy": w === "stop",
|
|
885
886
|
className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
886
|
-
children: [w === "stop" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(
|
|
887
|
+
children: [w === "stop" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(vt, { className: "size-4" }), w === "stop" ? C("agentDetails.stopping", "Stopping…") : C("sessions.stop", "Stop")]
|
|
887
888
|
}),
|
|
888
889
|
R === "DEGRADED" && /* @__PURE__ */ x("button", {
|
|
889
890
|
type: "button",
|
|
890
|
-
onClick:
|
|
891
|
+
onClick: Ar,
|
|
891
892
|
disabled: w !== null,
|
|
892
893
|
"aria-busy": w === "start",
|
|
893
894
|
className: "flex items-center gap-2 px-3 py-2 bg-status-warning-bg text-status-warning-text rounded-md hover:opacity-80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
894
895
|
title: L.get(F.id)?.errorMessage ? `Retry lifecycle/start — last error: ${L.get(F.id)?.errorMessage}` : "Retry lifecycle/start",
|
|
895
|
-
children: [w === "start" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(
|
|
896
|
+
children: [w === "start" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(ft, { className: "size-4" }), w === "start" ? C("agentDetails.reconnecting", "Reconnecting…") : C("agentDetails.reconnect", "Reconnect")]
|
|
896
897
|
}),
|
|
897
|
-
/* @__PURE__ */ b(
|
|
898
|
+
/* @__PURE__ */ b(Pe, {
|
|
898
899
|
agentId: F.id,
|
|
899
900
|
tunnelUrl: F.tunnelUrl || null,
|
|
900
901
|
profile: z
|
|
901
902
|
}),
|
|
902
903
|
/* @__PURE__ */ x("button", {
|
|
903
904
|
type: "button",
|
|
904
|
-
onClick:
|
|
905
|
+
onClick: Nr,
|
|
905
906
|
className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors",
|
|
906
|
-
children: [/* @__PURE__ */ b(
|
|
907
|
+
children: [/* @__PURE__ */ b(gt, { className: "size-4" }), C("agentDetails.configure", "Configure")]
|
|
907
908
|
}),
|
|
908
909
|
/* @__PURE__ */ x("button", {
|
|
909
910
|
type: "button",
|
|
910
|
-
onClick:
|
|
911
|
+
onClick: zr,
|
|
911
912
|
className: "flex items-center gap-2 px-3 py-2 bg-status-error-bg text-status-error-text rounded-md hover:opacity-80 transition-colors",
|
|
912
|
-
children: [/* @__PURE__ */ b(
|
|
913
|
+
children: [/* @__PURE__ */ b(xt, { className: "size-4" }), C("sessions.remove", "Remove")]
|
|
913
914
|
})
|
|
914
915
|
]
|
|
915
916
|
})
|
|
916
917
|
}),
|
|
917
918
|
/* @__PURE__ */ b("div", {
|
|
918
919
|
className: "flex items-center gap-2 -mt-2",
|
|
919
|
-
children:
|
|
920
|
+
children: rn ? /* @__PURE__ */ x(y, { children: [
|
|
920
921
|
/* @__PURE__ */ b("input", {
|
|
921
|
-
ref:
|
|
922
|
+
ref: dn,
|
|
922
923
|
type: "text",
|
|
923
|
-
value:
|
|
924
|
-
onChange: (e) =>
|
|
924
|
+
value: on,
|
|
925
|
+
onChange: (e) => sn(e.target.value),
|
|
925
926
|
onKeyDown: (e) => {
|
|
926
|
-
e.key === "Enter" && !D ?
|
|
927
|
+
e.key === "Enter" && !D ? Pr() : e.key === "Escape" && Fr();
|
|
927
928
|
},
|
|
928
929
|
disabled: D,
|
|
929
930
|
maxLength: 120,
|
|
@@ -934,34 +935,34 @@ function Ft() {
|
|
|
934
935
|
}),
|
|
935
936
|
/* @__PURE__ */ x("button", {
|
|
936
937
|
type: "button",
|
|
937
|
-
onClick: () => void
|
|
938
|
-
disabled: !
|
|
938
|
+
onClick: () => void Pr(),
|
|
939
|
+
disabled: !on.trim() || on.trim() === F.name || D,
|
|
939
940
|
className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
940
941
|
"data-testid": "agent-details-rename-save",
|
|
941
|
-
children: [D ? /* @__PURE__ */ b(g, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ b(
|
|
942
|
+
children: [D ? /* @__PURE__ */ b(g, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ b(qe, { className: "size-3.5" }), C("agentDetails.saveName", "Save")]
|
|
942
943
|
}),
|
|
943
944
|
/* @__PURE__ */ b("button", {
|
|
944
945
|
type: "button",
|
|
945
|
-
onClick:
|
|
946
|
+
onClick: Fr,
|
|
946
947
|
disabled: D,
|
|
947
948
|
className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary disabled:opacity-60",
|
|
948
949
|
"data-testid": "agent-details-rename-cancel",
|
|
949
950
|
children: C("common.cancel", "Cancel")
|
|
950
951
|
}),
|
|
951
|
-
|
|
952
|
+
ln && /* @__PURE__ */ b("span", {
|
|
952
953
|
className: "text-xs text-status-error-text",
|
|
953
954
|
role: "alert",
|
|
954
|
-
children:
|
|
955
|
+
children: ln
|
|
955
956
|
})
|
|
956
957
|
] }) : /* @__PURE__ */ x("button", {
|
|
957
958
|
type: "button",
|
|
958
959
|
onClick: () => {
|
|
959
|
-
|
|
960
|
+
un(null), sn(F.name), an(!0), requestAnimationFrame(() => dn.current?.select());
|
|
960
961
|
},
|
|
961
962
|
className: "inline-flex items-center gap-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",
|
|
962
963
|
title: C("agentDetails.renameTooltip", "Rename this agent"),
|
|
963
964
|
"data-testid": "agent-details-rename-trigger",
|
|
964
|
-
children: [/* @__PURE__ */ b(
|
|
965
|
+
children: [/* @__PURE__ */ b(tt, { className: "size-3.5" }), C("agentDetails.rename", "Rename")]
|
|
965
966
|
})
|
|
966
967
|
}),
|
|
967
968
|
R === "DEGRADED" && /* @__PURE__ */ x("div", {
|
|
@@ -992,7 +993,7 @@ function Ft() {
|
|
|
992
993
|
}),
|
|
993
994
|
/* @__PURE__ */ b("button", {
|
|
994
995
|
type: "button",
|
|
995
|
-
onClick: () =>
|
|
996
|
+
onClick: () => zn("connection"),
|
|
996
997
|
className: "text-xs font-medium text-action-primary-text hover:underline flex-shrink-0",
|
|
997
998
|
children: C("agentDetails.degradedBanner.viewLog", "View log →")
|
|
998
999
|
})
|
|
@@ -1001,33 +1002,33 @@ function Ft() {
|
|
|
1001
1002
|
/* @__PURE__ */ x("div", {
|
|
1002
1003
|
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
|
|
1003
1004
|
children: [
|
|
1004
|
-
/* @__PURE__ */ b(
|
|
1005
|
+
/* @__PURE__ */ b(l, {
|
|
1005
1006
|
className: "p-4",
|
|
1006
1007
|
children: /* @__PURE__ */ x("div", {
|
|
1007
1008
|
className: "flex items-center gap-3",
|
|
1008
1009
|
children: [/* @__PURE__ */ b("div", {
|
|
1009
1010
|
className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
|
|
1010
|
-
children: /* @__PURE__ */ b(
|
|
1011
|
+
children: /* @__PURE__ */ b(ht, { className: "size-5 text-text-secondary" })
|
|
1011
1012
|
}), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
1012
1013
|
className: "text-sm text-text-secondary",
|
|
1013
1014
|
children: C("sessions.filterStatus", "Status")
|
|
1014
|
-
}), /* @__PURE__ */ b(
|
|
1015
|
+
}), /* @__PURE__ */ b(je, {
|
|
1015
1016
|
status: R,
|
|
1016
1017
|
reason: L.get(F.id)?.errorMessage ?? (F.lastGatewayAuthPushStatus === "failed" ? F.lastGatewayAuthPushError ?? "Gateway-auth push failed" : null),
|
|
1017
1018
|
linkTo: "?tab=connection",
|
|
1018
1019
|
onClick: (e) => {
|
|
1019
|
-
e.preventDefault(),
|
|
1020
|
+
e.preventDefault(), zn("connection");
|
|
1020
1021
|
}
|
|
1021
1022
|
})] })]
|
|
1022
1023
|
})
|
|
1023
1024
|
}),
|
|
1024
|
-
/* @__PURE__ */ b(
|
|
1025
|
+
/* @__PURE__ */ b(l, {
|
|
1025
1026
|
className: "p-4",
|
|
1026
1027
|
children: /* @__PURE__ */ x("div", {
|
|
1027
1028
|
className: "flex items-center gap-3",
|
|
1028
1029
|
children: [/* @__PURE__ */ b("div", {
|
|
1029
1030
|
className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
|
|
1030
|
-
children: /* @__PURE__ */ b(
|
|
1031
|
+
children: /* @__PURE__ */ b(Qe, { className: "size-5 text-text-secondary" })
|
|
1031
1032
|
}), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
1032
1033
|
className: "text-sm text-text-secondary",
|
|
1033
1034
|
children: C("analytics.platform", "Platform")
|
|
@@ -1041,13 +1042,13 @@ function Ft() {
|
|
|
1041
1042
|
})] })]
|
|
1042
1043
|
})
|
|
1043
1044
|
}),
|
|
1044
|
-
/* @__PURE__ */ b(
|
|
1045
|
+
/* @__PURE__ */ b(l, {
|
|
1045
1046
|
className: "p-4",
|
|
1046
1047
|
children: /* @__PURE__ */ x("div", {
|
|
1047
1048
|
className: "flex items-center gap-3",
|
|
1048
1049
|
children: [/* @__PURE__ */ b("div", {
|
|
1049
1050
|
className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
|
|
1050
|
-
children: /* @__PURE__ */ b(
|
|
1051
|
+
children: /* @__PURE__ */ b(at, { className: "size-5 text-text-secondary" })
|
|
1051
1052
|
}), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
1052
1053
|
className: "text-sm text-text-secondary",
|
|
1053
1054
|
children: C("agentDetails.version", "Version")
|
|
@@ -1057,20 +1058,20 @@ function Ft() {
|
|
|
1057
1058
|
})] })]
|
|
1058
1059
|
})
|
|
1059
1060
|
}),
|
|
1060
|
-
/* @__PURE__ */ b(
|
|
1061
|
+
/* @__PURE__ */ b(l, {
|
|
1061
1062
|
className: "p-4",
|
|
1062
1063
|
children: /* @__PURE__ */ x("div", {
|
|
1063
1064
|
className: "flex items-center gap-3",
|
|
1064
1065
|
children: [/* @__PURE__ */ b("div", {
|
|
1065
1066
|
className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
|
|
1066
|
-
children: /* @__PURE__ */ b(
|
|
1067
|
+
children: /* @__PURE__ */ b(bt, { className: "size-5 text-text-secondary" })
|
|
1067
1068
|
}), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
1068
1069
|
className: "text-sm text-text-secondary",
|
|
1069
1070
|
children: C("nav.sessions", "Sessions")
|
|
1070
1071
|
}), /* @__PURE__ */ x("p", {
|
|
1071
1072
|
className: "font-semibold text-text-primary",
|
|
1072
1073
|
children: [
|
|
1073
|
-
|
|
1074
|
+
qr,
|
|
1074
1075
|
" ",
|
|
1075
1076
|
C("health.active", "active")
|
|
1076
1077
|
]
|
|
@@ -1085,11 +1086,11 @@ function Ft() {
|
|
|
1085
1086
|
className: "flex gap-1 -mb-px overflow-x-auto pb-1",
|
|
1086
1087
|
"aria-label": C("agentDetails.tabsAriaLabel", "Agent tabs"),
|
|
1087
1088
|
children: [
|
|
1088
|
-
|
|
1089
|
+
Kr.map((e) => {
|
|
1089
1090
|
let t = e.icon, n = H === e.id;
|
|
1090
1091
|
return /* @__PURE__ */ x("button", {
|
|
1091
1092
|
type: "button",
|
|
1092
|
-
onClick: () =>
|
|
1093
|
+
onClick: () => zn(e.id),
|
|
1093
1094
|
className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${n ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
|
|
1094
1095
|
"aria-selected": n,
|
|
1095
1096
|
role: "tab",
|
|
@@ -1107,7 +1108,7 @@ function Ft() {
|
|
|
1107
1108
|
let t = H === e.contribution.id;
|
|
1108
1109
|
return /* @__PURE__ */ b("button", {
|
|
1109
1110
|
type: "button",
|
|
1110
|
-
onClick: () =>
|
|
1111
|
+
onClick: () => zn(e.contribution.id),
|
|
1111
1112
|
className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${t ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
|
|
1112
1113
|
"aria-selected": t,
|
|
1113
1114
|
role: "tab",
|
|
@@ -1117,7 +1118,7 @@ function Ft() {
|
|
|
1117
1118
|
}),
|
|
1118
1119
|
B && F && /* @__PURE__ */ x("button", {
|
|
1119
1120
|
type: "button",
|
|
1120
|
-
onClick: () =>
|
|
1121
|
+
onClick: () => Vn(!0),
|
|
1121
1122
|
className: "flex shrink-0 items-center gap-1 p-2 text-xs sm:text-sm border-b-2 border-transparent text-text-secondary hover:text-text-primary hover:border-border-default",
|
|
1122
1123
|
title: "Install a UI plugin tab",
|
|
1123
1124
|
"aria-label": "Add tab",
|
|
@@ -1132,7 +1133,7 @@ function Ft() {
|
|
|
1132
1133
|
]
|
|
1133
1134
|
})
|
|
1134
1135
|
}),
|
|
1135
|
-
/* @__PURE__ */ x(
|
|
1136
|
+
/* @__PURE__ */ x(Ot, {
|
|
1136
1137
|
mode: "wait",
|
|
1137
1138
|
children: [
|
|
1138
1139
|
H === "overview" && /* @__PURE__ */ x(v.div, {
|
|
@@ -1151,11 +1152,11 @@ function Ft() {
|
|
|
1151
1152
|
transition: { duration: .2 },
|
|
1152
1153
|
className: "space-y-6",
|
|
1153
1154
|
children: [
|
|
1154
|
-
/* @__PURE__ */ x(
|
|
1155
|
+
/* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1155
1156
|
className: "p-4 border-b border-border-default",
|
|
1156
1157
|
children: /* @__PURE__ */ x("h3", {
|
|
1157
1158
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1158
|
-
children: [/* @__PURE__ */ b(
|
|
1159
|
+
children: [/* @__PURE__ */ b(Je, { className: "size-5" }), C("agentDetails.capabilities", "Capabilities")]
|
|
1159
1160
|
})
|
|
1160
1161
|
}), /* @__PURE__ */ b("div", {
|
|
1161
1162
|
className: "p-4",
|
|
@@ -1217,24 +1218,24 @@ function Ft() {
|
|
|
1217
1218
|
})
|
|
1218
1219
|
})
|
|
1219
1220
|
})] }),
|
|
1220
|
-
/* @__PURE__ */ x(
|
|
1221
|
+
/* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1221
1222
|
className: "p-4 border-b border-border-default",
|
|
1222
1223
|
children: /* @__PURE__ */ x("h3", {
|
|
1223
1224
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1224
|
-
children: [/* @__PURE__ */ b(
|
|
1225
|
+
children: [/* @__PURE__ */ b(yt, { className: "size-5" }), "Tags"]
|
|
1225
1226
|
})
|
|
1226
1227
|
}), /* @__PURE__ */ b("div", {
|
|
1227
1228
|
className: "p-4",
|
|
1228
|
-
children: /* @__PURE__ */ b(
|
|
1229
|
+
children: /* @__PURE__ */ b(_e, {
|
|
1229
1230
|
entityType: "VIBECONTROLS_AGENT",
|
|
1230
1231
|
entityId: F.id
|
|
1231
1232
|
})
|
|
1232
1233
|
})] }),
|
|
1233
|
-
F.tunnelUrl && /* @__PURE__ */ x(
|
|
1234
|
+
F.tunnelUrl && /* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1234
1235
|
className: "p-4 border-b border-border-default",
|
|
1235
1236
|
children: /* @__PURE__ */ x("h3", {
|
|
1236
1237
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1237
|
-
children: [/* @__PURE__ */ b(
|
|
1238
|
+
children: [/* @__PURE__ */ b(Tt, { className: "size-5" }), C("health.tunnel", "Tunnel")]
|
|
1238
1239
|
})
|
|
1239
1240
|
}), /* @__PURE__ */ b("div", {
|
|
1240
1241
|
className: "p-4",
|
|
@@ -1252,11 +1253,11 @@ function Ft() {
|
|
|
1252
1253
|
})]
|
|
1253
1254
|
})
|
|
1254
1255
|
})] }),
|
|
1255
|
-
/* @__PURE__ */ x(
|
|
1256
|
+
/* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1256
1257
|
className: "p-4 border-b border-border-default",
|
|
1257
1258
|
children: /* @__PURE__ */ x("h3", {
|
|
1258
1259
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1259
|
-
children: [/* @__PURE__ */ b(
|
|
1260
|
+
children: [/* @__PURE__ */ b(gt, { className: "size-5" }), C("agentDetails.configuration", "Configuration")]
|
|
1260
1261
|
})
|
|
1261
1262
|
}), /* @__PURE__ */ x("div", {
|
|
1262
1263
|
className: "p-4 space-y-4",
|
|
@@ -1293,11 +1294,11 @@ function Ft() {
|
|
|
1293
1294
|
children: F.aiContext
|
|
1294
1295
|
})] })]
|
|
1295
1296
|
})] }),
|
|
1296
|
-
/* @__PURE__ */ x(
|
|
1297
|
+
/* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1297
1298
|
className: "p-4 border-b border-border-default",
|
|
1298
1299
|
children: /* @__PURE__ */ x("h3", {
|
|
1299
1300
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1300
|
-
children: [/* @__PURE__ */ b(
|
|
1301
|
+
children: [/* @__PURE__ */ b(Ye, { className: "size-5" }), C("vibeDetails.timeline", "Timeline")]
|
|
1301
1302
|
})
|
|
1302
1303
|
}), /* @__PURE__ */ b("div", {
|
|
1303
1304
|
className: "p-4",
|
|
@@ -1309,21 +1310,21 @@ function Ft() {
|
|
|
1309
1310
|
children: C("health.lastHeartbeat", "Last Heartbeat")
|
|
1310
1311
|
}), /* @__PURE__ */ b("p", {
|
|
1311
1312
|
className: "font-medium text-text-primary",
|
|
1312
|
-
children:
|
|
1313
|
+
children: Gr(F.lastHeartbeat)
|
|
1313
1314
|
})] }),
|
|
1314
1315
|
/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
1315
1316
|
className: "text-text-secondary",
|
|
1316
1317
|
children: C("vibeDetails.created", "Created")
|
|
1317
1318
|
}), /* @__PURE__ */ b("p", {
|
|
1318
1319
|
className: "font-medium text-text-primary",
|
|
1319
|
-
children:
|
|
1320
|
+
children: Gr(F.createdAt)
|
|
1320
1321
|
})] }),
|
|
1321
1322
|
/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
1322
1323
|
className: "text-text-secondary",
|
|
1323
1324
|
children: C("vibeDetails.updated", "Updated")
|
|
1324
1325
|
}), /* @__PURE__ */ b("p", {
|
|
1325
1326
|
className: "font-medium text-text-primary",
|
|
1326
|
-
children:
|
|
1327
|
+
children: Gr(F.updatedAt)
|
|
1327
1328
|
})] })
|
|
1328
1329
|
]
|
|
1329
1330
|
})
|
|
@@ -1344,7 +1345,7 @@ function Ft() {
|
|
|
1344
1345
|
y: -8
|
|
1345
1346
|
},
|
|
1346
1347
|
transition: { duration: .2 },
|
|
1347
|
-
children: /* @__PURE__ */ b(
|
|
1348
|
+
children: /* @__PURE__ */ b(Le, { agentId: F.id })
|
|
1348
1349
|
}, "profiles"),
|
|
1349
1350
|
H === "security" && /* @__PURE__ */ x(v.div, {
|
|
1350
1351
|
initial: {
|
|
@@ -1362,11 +1363,11 @@ function Ft() {
|
|
|
1362
1363
|
transition: { duration: .2 },
|
|
1363
1364
|
className: "space-y-6",
|
|
1364
1365
|
children: [
|
|
1365
|
-
/* @__PURE__ */ x(
|
|
1366
|
+
/* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1366
1367
|
className: "p-4 border-b border-border-default",
|
|
1367
1368
|
children: /* @__PURE__ */ x("h3", {
|
|
1368
1369
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1369
|
-
children: [/* @__PURE__ */ b(
|
|
1370
|
+
children: [/* @__PURE__ */ b(st, { className: "size-5" }), C("agentDetails.agentApiKey", "Agent API Key")]
|
|
1370
1371
|
})
|
|
1371
1372
|
}), /* @__PURE__ */ x("div", {
|
|
1372
1373
|
className: "p-4",
|
|
@@ -1377,26 +1378,26 @@ function Ft() {
|
|
|
1377
1378
|
className: "flex-1 min-w-0",
|
|
1378
1379
|
children: [/* @__PURE__ */ b("code", {
|
|
1379
1380
|
className: "text-sm font-mono text-text-primary bg-bg-sunken px-3 py-2 rounded-md block truncate",
|
|
1380
|
-
children:
|
|
1381
|
-
}),
|
|
1381
|
+
children: gn && O ? O : xn ? C("agentDetails.revealLoading", "Revealing…") : "•".repeat(32)
|
|
1382
|
+
}), Cn && /* @__PURE__ */ b("p", {
|
|
1382
1383
|
className: "text-xs text-status-error-text mt-1",
|
|
1383
|
-
children:
|
|
1384
|
+
children: Cn
|
|
1384
1385
|
})]
|
|
1385
1386
|
}),
|
|
1386
1387
|
/* @__PURE__ */ b("button", {
|
|
1387
1388
|
type: "button",
|
|
1388
|
-
onClick: () => void
|
|
1389
|
-
disabled:
|
|
1389
|
+
onClick: () => void Rr(),
|
|
1390
|
+
disabled: xn,
|
|
1390
1391
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0 disabled:opacity-50",
|
|
1391
|
-
title:
|
|
1392
|
-
children: b(
|
|
1392
|
+
title: gn ? C("agentDetails.hideApiKey", "Hide API key") : C("agentDetails.showApiKey", "Show API key"),
|
|
1393
|
+
children: b(gn ? rt : nt, { className: "size-4 text-text-secondary" })
|
|
1393
1394
|
}),
|
|
1394
1395
|
/* @__PURE__ */ b("button", {
|
|
1395
1396
|
type: "button",
|
|
1396
|
-
onClick:
|
|
1397
|
+
onClick: Lr,
|
|
1397
1398
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
1398
1399
|
title: C("agentDetails.copyApiKey", "Copy API key"),
|
|
1399
|
-
children:
|
|
1400
|
+
children: vn ? /* @__PURE__ */ b(qe, { className: "size-4 text-status-success-text" }) : /* @__PURE__ */ b(Ze, { className: "size-4 text-text-secondary" })
|
|
1400
1401
|
})
|
|
1401
1402
|
]
|
|
1402
1403
|
}) : /* @__PURE__ */ b("p", {
|
|
@@ -1407,41 +1408,46 @@ function Ft() {
|
|
|
1407
1408
|
children: "This key authenticates requests sent to the agent. The key is revealed only on explicit operator action and every read is audited."
|
|
1408
1409
|
})]
|
|
1409
1410
|
})] }),
|
|
1410
|
-
/* @__PURE__ */ b(
|
|
1411
|
+
/* @__PURE__ */ b(ke, {
|
|
1412
|
+
agentId: F.id,
|
|
1413
|
+
currentTunnelUrl: F.tunnelUrl,
|
|
1414
|
+
onUpdated: () => P()
|
|
1415
|
+
}),
|
|
1416
|
+
/* @__PURE__ */ b(Pt, {
|
|
1411
1417
|
agent: F,
|
|
1412
1418
|
onUpdate: () => P()
|
|
1413
1419
|
}),
|
|
1414
|
-
/* @__PURE__ */ b(
|
|
1420
|
+
/* @__PURE__ */ b(Me, { agent: {
|
|
1415
1421
|
id: F.id,
|
|
1416
1422
|
profile: z ?? "default"
|
|
1417
1423
|
} })
|
|
1418
1424
|
]
|
|
1419
1425
|
}, "security"),
|
|
1420
1426
|
H === "plugins" && (() => {
|
|
1421
|
-
let e = J.toLowerCase(), t = U.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description?.toLowerCase().includes(e) || t.tags?.some((t) => t.toLowerCase().includes(e))), n =
|
|
1427
|
+
let e = J.toLowerCase(), t = U.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description?.toLowerCase().includes(e) || t.tags?.some((t) => t.toLowerCase().includes(e))), n = Kn.filter((t) => !t.installed && (!e || t.name.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description.toLowerCase().includes(e))), r = U.filter((e) => e.hasUI), i = r.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e)), a = [
|
|
1422
1428
|
{
|
|
1423
1429
|
id: "installed",
|
|
1424
1430
|
label: "Installed",
|
|
1425
1431
|
count: t.length,
|
|
1426
|
-
icon:
|
|
1432
|
+
icon: dt
|
|
1427
1433
|
},
|
|
1428
1434
|
{
|
|
1429
1435
|
id: "available",
|
|
1430
1436
|
label: "Available",
|
|
1431
1437
|
count: n.length,
|
|
1432
|
-
icon:
|
|
1438
|
+
icon: et
|
|
1433
1439
|
},
|
|
1434
1440
|
{
|
|
1435
1441
|
id: "store",
|
|
1436
1442
|
label: "Store",
|
|
1437
1443
|
count: Y.length,
|
|
1438
|
-
icon:
|
|
1444
|
+
icon: et
|
|
1439
1445
|
},
|
|
1440
1446
|
{
|
|
1441
1447
|
id: "ui-plugins",
|
|
1442
1448
|
label: "UI Plugins",
|
|
1443
1449
|
count: i.length,
|
|
1444
|
-
icon:
|
|
1450
|
+
icon: ct
|
|
1445
1451
|
}
|
|
1446
1452
|
];
|
|
1447
1453
|
return /* @__PURE__ */ b(v.div, {
|
|
@@ -1459,7 +1465,7 @@ function Ft() {
|
|
|
1459
1465
|
},
|
|
1460
1466
|
transition: { duration: .2 },
|
|
1461
1467
|
className: "space-y-6",
|
|
1462
|
-
children: /* @__PURE__ */ x(
|
|
1468
|
+
children: /* @__PURE__ */ x(l, { children: [/* @__PURE__ */ x("div", {
|
|
1463
1469
|
className: "p-4 border-b border-border-default space-y-3",
|
|
1464
1470
|
children: [
|
|
1465
1471
|
/* @__PURE__ */ x("div", {
|
|
@@ -1467,7 +1473,7 @@ function Ft() {
|
|
|
1467
1473
|
children: [/* @__PURE__ */ x("h3", {
|
|
1468
1474
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1469
1475
|
children: [
|
|
1470
|
-
/* @__PURE__ */ b(
|
|
1476
|
+
/* @__PURE__ */ b(dt, { className: "size-5" }),
|
|
1471
1477
|
"Plugins",
|
|
1472
1478
|
U.length > 0 && /* @__PURE__ */ x("span", {
|
|
1473
1479
|
className: "text-sm font-normal text-text-secondary",
|
|
@@ -1484,27 +1490,27 @@ function Ft() {
|
|
|
1484
1490
|
}), /* @__PURE__ */ b("button", {
|
|
1485
1491
|
type: "button",
|
|
1486
1492
|
onClick: X,
|
|
1487
|
-
disabled:
|
|
1493
|
+
disabled: Jn,
|
|
1488
1494
|
className: "p-1.5 text-text-secondary hover:bg-bg-sunken rounded transition-colors disabled:opacity-50",
|
|
1489
1495
|
title: C("agentDetails.refreshPlugins", "Refresh plugins"),
|
|
1490
|
-
children: /* @__PURE__ */ b(
|
|
1496
|
+
children: /* @__PURE__ */ b(ft, { className: `size-4 ${Jn ? "animate-spin" : ""}` })
|
|
1491
1497
|
})]
|
|
1492
1498
|
}),
|
|
1493
1499
|
/* @__PURE__ */ x("div", {
|
|
1494
1500
|
className: "relative",
|
|
1495
1501
|
children: [
|
|
1496
|
-
/* @__PURE__ */ b(
|
|
1502
|
+
/* @__PURE__ */ b(mt, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-text-muted" }),
|
|
1497
1503
|
/* @__PURE__ */ b("input", {
|
|
1498
1504
|
"aria-label": "control",
|
|
1499
1505
|
type: "text",
|
|
1500
1506
|
value: J,
|
|
1501
|
-
onChange: (e) =>
|
|
1507
|
+
onChange: (e) => dr(e.target.value),
|
|
1502
1508
|
placeholder: C("agentDetails.searchPluginsPlaceholder", "Search plugins by name, package, description, or tag..."),
|
|
1503
1509
|
className: "w-full pl-9 pr-8 py-2 text-sm bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-1 focus:ring-action-primary-bg focus:border-action-primary-bg"
|
|
1504
1510
|
}),
|
|
1505
1511
|
J && /* @__PURE__ */ b("button", {
|
|
1506
1512
|
type: "button",
|
|
1507
|
-
onClick: () =>
|
|
1513
|
+
onClick: () => dr(""),
|
|
1508
1514
|
className: "absolute right-2 top-1/2 -translate-y-1/2 p-0.5 text-text-muted hover:text-text-secondary rounded",
|
|
1509
1515
|
children: /* @__PURE__ */ b(_, { className: "size-3.5" })
|
|
1510
1516
|
})
|
|
@@ -1516,7 +1522,7 @@ function Ft() {
|
|
|
1516
1522
|
let t = q === e.id, n = e.icon;
|
|
1517
1523
|
return /* @__PURE__ */ x("button", {
|
|
1518
1524
|
type: "button",
|
|
1519
|
-
onClick: () =>
|
|
1525
|
+
onClick: () => ur(e.id),
|
|
1520
1526
|
className: `flex shrink-0 items-center gap-1.5 px-3 py-2 text-xs sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${t ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
|
|
1521
1527
|
children: [
|
|
1522
1528
|
/* @__PURE__ */ b(n, { className: "size-3.5" }),
|
|
@@ -1533,13 +1539,13 @@ function Ft() {
|
|
|
1533
1539
|
}), /* @__PURE__ */ x("div", {
|
|
1534
1540
|
className: "p-4 space-y-4",
|
|
1535
1541
|
children: [
|
|
1536
|
-
|
|
1542
|
+
Xn && /* @__PURE__ */ x("div", {
|
|
1537
1543
|
className: "flex items-center gap-2 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
|
|
1538
1544
|
children: [
|
|
1539
1545
|
/* @__PURE__ */ b(_, { className: "size-4 flex-shrink-0" }),
|
|
1540
1546
|
/* @__PURE__ */ b("span", {
|
|
1541
1547
|
className: "flex-1",
|
|
1542
|
-
children:
|
|
1548
|
+
children: Xn
|
|
1543
1549
|
}),
|
|
1544
1550
|
/* @__PURE__ */ b("button", {
|
|
1545
1551
|
type: "button",
|
|
@@ -1551,7 +1557,7 @@ function Ft() {
|
|
|
1551
1557
|
}),
|
|
1552
1558
|
!F?.isActive && /* @__PURE__ */ x("p", {
|
|
1553
1559
|
className: "text-sm text-text-muted flex items-center gap-1.5",
|
|
1554
|
-
children: [/* @__PURE__ */ b(
|
|
1560
|
+
children: [/* @__PURE__ */ b(ot, { className: "size-4 flex-shrink-0" }), "Agent is offline — showing known plugin catalog. Live data will load when the agent is reachable."]
|
|
1555
1561
|
}),
|
|
1556
1562
|
q === "installed" && /* @__PURE__ */ b(y, { children: t.length > 0 ? /* @__PURE__ */ b("div", {
|
|
1557
1563
|
className: "space-y-2",
|
|
@@ -1634,25 +1640,25 @@ function Ft() {
|
|
|
1634
1640
|
children: [
|
|
1635
1641
|
e.hasUI && /* @__PURE__ */ x("button", {
|
|
1636
1642
|
type: "button",
|
|
1637
|
-
onClick: () =>
|
|
1643
|
+
onClick: () => ur("ui-plugins"),
|
|
1638
1644
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 rounded-md hover:bg-action-primary-bg/20 transition-colors border border-action-primary-bg/20",
|
|
1639
1645
|
title: `Open ${e.pluginName} UI`,
|
|
1640
|
-
children: [/* @__PURE__ */ b(
|
|
1646
|
+
children: [/* @__PURE__ */ b(ct, { className: "size-3" }), "Open UI"]
|
|
1641
1647
|
}),
|
|
1642
1648
|
!e.isCore && /* @__PURE__ */ x("button", {
|
|
1643
1649
|
type: "button",
|
|
1644
|
-
onClick: () =>
|
|
1650
|
+
onClick: () => Tr(e.packageName),
|
|
1645
1651
|
disabled: W === e.packageName,
|
|
1646
1652
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-primary bg-bg-secondary border border-border-default rounded-md hover:bg-bg-elevated transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1647
1653
|
title: C("agentDetails.updatePlugin", "Update plugin (latest or a specific version)"),
|
|
1648
|
-
children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(
|
|
1654
|
+
children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(Ge, { className: "size-3" }), C("agentDetails.update", "Update")]
|
|
1649
1655
|
}),
|
|
1650
1656
|
!e.isCore && /* @__PURE__ */ x("button", {
|
|
1651
1657
|
type: "button",
|
|
1652
|
-
onClick: () =>
|
|
1658
|
+
onClick: () => wr(e.packageName),
|
|
1653
1659
|
disabled: W === e.packageName,
|
|
1654
1660
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-status-error-text bg-status-error-bg/15 border border-status-error-border/40 rounded-md hover:bg-status-error-bg/25 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1655
|
-
children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(
|
|
1661
|
+
children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(xt, { className: "size-3" }), C("sessions.remove", "Remove")]
|
|
1656
1662
|
})
|
|
1657
1663
|
]
|
|
1658
1664
|
})]
|
|
@@ -1683,23 +1689,23 @@ function Ft() {
|
|
|
1683
1689
|
]
|
|
1684
1690
|
}), /* @__PURE__ */ x("button", {
|
|
1685
1691
|
type: "button",
|
|
1686
|
-
onClick: () =>
|
|
1692
|
+
onClick: () => Cr(e.packageName),
|
|
1687
1693
|
disabled: W === e.packageName,
|
|
1688
1694
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex-shrink-0 sm:ml-3",
|
|
1689
|
-
children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(
|
|
1695
|
+
children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(et, { className: "size-3" }), "Install"]
|
|
1690
1696
|
})]
|
|
1691
1697
|
}, e.packageName))
|
|
1692
1698
|
}) : /* @__PURE__ */ b("p", {
|
|
1693
1699
|
className: "text-sm text-text-muted",
|
|
1694
|
-
children: J ? "No available plugins match your search." :
|
|
1700
|
+
children: J ? "No available plugins match your search." : Kn.every((e) => e.installed) ? "All available plugins are already installed." : "No available plugins found."
|
|
1695
1701
|
}) }),
|
|
1696
|
-
q === "store" && /* @__PURE__ */ x(y, { children: [
|
|
1702
|
+
q === "store" && /* @__PURE__ */ x(y, { children: [hr && /* @__PURE__ */ x("div", {
|
|
1697
1703
|
className: "flex items-center gap-2 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
|
|
1698
1704
|
children: [/* @__PURE__ */ b(_, { className: "size-4 flex-shrink-0" }), /* @__PURE__ */ b("span", {
|
|
1699
1705
|
className: "flex-1",
|
|
1700
|
-
children:
|
|
1706
|
+
children: hr
|
|
1701
1707
|
})]
|
|
1702
|
-
}),
|
|
1708
|
+
}), pr ? /* @__PURE__ */ b("p", {
|
|
1703
1709
|
className: "text-sm text-text-muted",
|
|
1704
1710
|
children: "Loading purchased plugins…"
|
|
1705
1711
|
}) : Y.length === 0 ? /* @__PURE__ */ x("div", {
|
|
@@ -1726,7 +1732,7 @@ function Ft() {
|
|
|
1726
1732
|
className: "size-10 rounded-md object-cover flex-shrink-0"
|
|
1727
1733
|
}) : /* @__PURE__ */ b("div", {
|
|
1728
1734
|
className: "size-10 flex-shrink-0 rounded-md bg-bg-secondary flex items-center justify-center",
|
|
1729
|
-
children: /* @__PURE__ */ b(
|
|
1735
|
+
children: /* @__PURE__ */ b(dt, { className: "size-5 text-text-muted" })
|
|
1730
1736
|
}), /* @__PURE__ */ x("div", {
|
|
1731
1737
|
className: "min-w-0 flex-1",
|
|
1732
1738
|
children: [
|
|
@@ -1752,15 +1758,15 @@ function Ft() {
|
|
|
1752
1758
|
})]
|
|
1753
1759
|
}), /* @__PURE__ */ b("button", {
|
|
1754
1760
|
type: "button",
|
|
1755
|
-
onClick: () => void
|
|
1756
|
-
disabled: r ||
|
|
1761
|
+
onClick: () => void Dr(e.productId, e.licenseKey),
|
|
1762
|
+
disabled: r || _r === e.productId || !n,
|
|
1757
1763
|
className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-semibold rounded-md bg-action-primary-bg text-action-primary-text hover:opacity-90 disabled:opacity-60 flex-shrink-0",
|
|
1758
|
-
children: r ? "Installed" :
|
|
1764
|
+
children: r ? "Installed" : _r === e.productId ? "Installing…" : "Install"
|
|
1759
1765
|
})]
|
|
1760
1766
|
}, e.id);
|
|
1761
1767
|
})
|
|
1762
1768
|
})] }),
|
|
1763
|
-
q === "ui-plugins" && /* @__PURE__ */ b(y, { children: r.length > 0 || F?.tunnelUrl ? /* @__PURE__ */ b(
|
|
1769
|
+
q === "ui-plugins" && /* @__PURE__ */ b(y, { children: r.length > 0 || F?.tunnelUrl ? /* @__PURE__ */ b(Ne, {
|
|
1764
1770
|
availablePlugins: [...F?.tunnelUrl ? [{
|
|
1765
1771
|
pluginName: "code-server",
|
|
1766
1772
|
displayName: "Code Server (VS Code)",
|
|
@@ -1780,7 +1786,7 @@ function Ft() {
|
|
|
1780
1786
|
className: "text-sm text-text-muted",
|
|
1781
1787
|
children: J ? "No UI plugins match your search." : "No plugins with UI are currently installed."
|
|
1782
1788
|
}) }),
|
|
1783
|
-
|
|
1789
|
+
Jn && U.length === 0 && /* @__PURE__ */ x("div", {
|
|
1784
1790
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
1785
1791
|
children: [/* @__PURE__ */ b(g, { className: "size-4 animate-spin" }), "Loading plugins..."]
|
|
1786
1792
|
})
|
|
@@ -1802,26 +1808,26 @@ function Ft() {
|
|
|
1802
1808
|
y: -8
|
|
1803
1809
|
},
|
|
1804
1810
|
transition: { duration: .2 },
|
|
1805
|
-
children: /* @__PURE__ */ x(
|
|
1811
|
+
children: /* @__PURE__ */ x(l, { children: [/* @__PURE__ */ x("div", {
|
|
1806
1812
|
className: "p-4 border-b border-border-default flex items-center justify-between gap-3 flex-wrap",
|
|
1807
1813
|
children: [/* @__PURE__ */ x("h3", {
|
|
1808
1814
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1809
1815
|
children: [
|
|
1810
|
-
/* @__PURE__ */ b(
|
|
1816
|
+
/* @__PURE__ */ b(bt, { className: "size-5" }),
|
|
1811
1817
|
C("nav.sessions", "Sessions"),
|
|
1812
1818
|
" (",
|
|
1813
1819
|
Z.length,
|
|
1814
1820
|
")"
|
|
1815
1821
|
]
|
|
1816
|
-
}), /* @__PURE__ */ b(
|
|
1817
|
-
permission:
|
|
1822
|
+
}), /* @__PURE__ */ b(jt, {
|
|
1823
|
+
permission: we.SESSION_CREATE,
|
|
1818
1824
|
deniedBehavior: "disable",
|
|
1819
1825
|
deniedTooltip: "You don't have permission to create sessions",
|
|
1820
1826
|
children: /* @__PURE__ */ x("button", {
|
|
1821
1827
|
"data-testid": "create-session-btn",
|
|
1822
|
-
onClick:
|
|
1828
|
+
onClick: Hr,
|
|
1823
1829
|
className: "inline-flex items-center gap-2 px-3 py-1.5 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1824
|
-
children: [/* @__PURE__ */ b(
|
|
1830
|
+
children: [/* @__PURE__ */ b(ut, { className: "w-4 h-4" }), C("sessions.createSession", "Create Session")]
|
|
1825
1831
|
})
|
|
1826
1832
|
})]
|
|
1827
1833
|
}), Z.length > 0 ? /* @__PURE__ */ b("div", {
|
|
@@ -1830,13 +1836,13 @@ function Ft() {
|
|
|
1830
1836
|
role: "button",
|
|
1831
1837
|
tabIndex: 0,
|
|
1832
1838
|
onKeyDown: (t) => {
|
|
1833
|
-
(t.key === "Enter" || t.key === " ") && (t.preventDefault(),
|
|
1839
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), Vr(e.id));
|
|
1834
1840
|
},
|
|
1835
|
-
onClick: () =>
|
|
1841
|
+
onClick: () => Vr(e.id),
|
|
1836
1842
|
className: "p-4 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 cursor-pointer hover:bg-bg-sunken/50 transition-colors",
|
|
1837
1843
|
children: [/* @__PURE__ */ x("div", {
|
|
1838
1844
|
className: "flex items-center gap-3 min-w-0",
|
|
1839
|
-
children: [/* @__PURE__ */ b(
|
|
1845
|
+
children: [/* @__PURE__ */ b(bt, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ x("div", {
|
|
1840
1846
|
className: "min-w-0",
|
|
1841
1847
|
children: [/* @__PURE__ */ b("p", {
|
|
1842
1848
|
className: "font-medium text-text-primary truncate",
|
|
@@ -1846,19 +1852,19 @@ function Ft() {
|
|
|
1846
1852
|
children: e.type
|
|
1847
1853
|
})]
|
|
1848
1854
|
})]
|
|
1849
|
-
}), /* @__PURE__ */ b(
|
|
1855
|
+
}), /* @__PURE__ */ b(ye, { status: e.status })]
|
|
1850
1856
|
}, e.id))
|
|
1851
1857
|
}) : /* @__PURE__ */ x("div", {
|
|
1852
1858
|
className: "p-6 text-center text-text-secondary flex flex-col items-center gap-3",
|
|
1853
|
-
children: [/* @__PURE__ */ b("span", { children: C("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ b(
|
|
1854
|
-
permission:
|
|
1859
|
+
children: [/* @__PURE__ */ b("span", { children: C("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ b(jt, {
|
|
1860
|
+
permission: we.SESSION_CREATE,
|
|
1855
1861
|
deniedBehavior: "disable",
|
|
1856
1862
|
deniedTooltip: "You don't have permission to create sessions",
|
|
1857
1863
|
children: /* @__PURE__ */ x("button", {
|
|
1858
1864
|
"data-testid": "create-session-empty-btn",
|
|
1859
|
-
onClick:
|
|
1865
|
+
onClick: Hr,
|
|
1860
1866
|
className: "inline-flex items-center gap-2 px-3 py-1.5 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1861
|
-
children: [/* @__PURE__ */ b(
|
|
1867
|
+
children: [/* @__PURE__ */ b(ut, { className: "w-4 h-4" }), C("sessions.createSession", "Create Session")]
|
|
1862
1868
|
})
|
|
1863
1869
|
})]
|
|
1864
1870
|
})] })
|
|
@@ -1877,9 +1883,9 @@ function Ft() {
|
|
|
1877
1883
|
y: -8
|
|
1878
1884
|
},
|
|
1879
1885
|
transition: { duration: .2 },
|
|
1880
|
-
children: /* @__PURE__ */ b(
|
|
1886
|
+
children: /* @__PURE__ */ b(l, {
|
|
1881
1887
|
className: "min-h-[60vh]",
|
|
1882
|
-
children: /* @__PURE__ */ b(
|
|
1888
|
+
children: /* @__PURE__ */ b(De, {
|
|
1883
1889
|
agentId: F.id,
|
|
1884
1890
|
agentName: F.name
|
|
1885
1891
|
})
|
|
@@ -1899,15 +1905,15 @@ function Ft() {
|
|
|
1899
1905
|
y: -8
|
|
1900
1906
|
},
|
|
1901
1907
|
transition: { duration: .2 },
|
|
1902
|
-
children: /* @__PURE__ */ x(
|
|
1908
|
+
children: /* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1903
1909
|
className: "p-4 border-b border-border-default flex items-center justify-between",
|
|
1904
1910
|
children: /* @__PURE__ */ x("h3", {
|
|
1905
1911
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1906
|
-
children: [/* @__PURE__ */ b(
|
|
1912
|
+
children: [/* @__PURE__ */ b(pt, { className: "size-5" }), C("nav.logs", "Logs")]
|
|
1907
1913
|
})
|
|
1908
1914
|
}), /* @__PURE__ */ b("div", {
|
|
1909
1915
|
className: "p-4",
|
|
1910
|
-
children: /* @__PURE__ */ b(
|
|
1916
|
+
children: /* @__PURE__ */ b(Ie, {
|
|
1911
1917
|
agentId: F.id,
|
|
1912
1918
|
profile: z,
|
|
1913
1919
|
className: "min-h-[28rem]"
|
|
@@ -1928,12 +1934,12 @@ function Ft() {
|
|
|
1928
1934
|
y: -8
|
|
1929
1935
|
},
|
|
1930
1936
|
transition: { duration: .2 },
|
|
1931
|
-
children: /* @__PURE__ */ x(
|
|
1937
|
+
children: /* @__PURE__ */ x(l, { children: [/* @__PURE__ */ b("div", {
|
|
1932
1938
|
className: "p-4 border-b border-border-default flex items-center justify-between",
|
|
1933
1939
|
children: /* @__PURE__ */ x("h3", {
|
|
1934
1940
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1935
1941
|
children: [
|
|
1936
|
-
/* @__PURE__ */ b(
|
|
1942
|
+
/* @__PURE__ */ b(Tt, { className: "size-5" }),
|
|
1937
1943
|
C("nav.vibes", "Vibes"),
|
|
1938
1944
|
" (",
|
|
1939
1945
|
Q.length,
|
|
@@ -1946,13 +1952,13 @@ function Ft() {
|
|
|
1946
1952
|
role: "button",
|
|
1947
1953
|
tabIndex: 0,
|
|
1948
1954
|
onKeyDown: (t) => {
|
|
1949
|
-
(t.key === "Enter" || t.key === " ") && (t.preventDefault(),
|
|
1955
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), Wr(e.id));
|
|
1950
1956
|
},
|
|
1951
|
-
onClick: () =>
|
|
1957
|
+
onClick: () => Wr(e.id),
|
|
1952
1958
|
className: "p-4 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 cursor-pointer hover:bg-bg-sunken/50 transition-colors",
|
|
1953
1959
|
children: [/* @__PURE__ */ x("div", {
|
|
1954
1960
|
className: "flex items-center gap-3 min-w-0",
|
|
1955
|
-
children: [/* @__PURE__ */ b(
|
|
1961
|
+
children: [/* @__PURE__ */ b(Tt, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ x("div", {
|
|
1956
1962
|
className: "min-w-0",
|
|
1957
1963
|
children: [/* @__PURE__ */ b("p", {
|
|
1958
1964
|
className: "font-medium text-text-primary truncate",
|
|
@@ -1962,7 +1968,7 @@ function Ft() {
|
|
|
1962
1968
|
children: e.type
|
|
1963
1969
|
})]
|
|
1964
1970
|
})]
|
|
1965
|
-
}), /* @__PURE__ */ b(
|
|
1971
|
+
}), /* @__PURE__ */ b(ye, { status: e.status })]
|
|
1966
1972
|
}, e.id))
|
|
1967
1973
|
}) : /* @__PURE__ */ b("div", {
|
|
1968
1974
|
className: "p-6 text-center text-text-secondary",
|
|
@@ -1984,7 +1990,7 @@ function Ft() {
|
|
|
1984
1990
|
},
|
|
1985
1991
|
transition: { duration: .2 },
|
|
1986
1992
|
className: "space-y-6",
|
|
1987
|
-
children: /* @__PURE__ */ b(
|
|
1993
|
+
children: /* @__PURE__ */ b(Re, {
|
|
1988
1994
|
context: "agent",
|
|
1989
1995
|
agentVibes: Q.map((e) => ({
|
|
1990
1996
|
id: e.id,
|
|
@@ -2007,7 +2013,7 @@ function Ft() {
|
|
|
2007
2013
|
},
|
|
2008
2014
|
transition: { duration: .2 },
|
|
2009
2015
|
className: "space-y-6",
|
|
2010
|
-
children: /* @__PURE__ */ b(
|
|
2016
|
+
children: /* @__PURE__ */ b(Ae, { agent: {
|
|
2011
2017
|
id: F.id,
|
|
2012
2018
|
profile: F.metadata?.profile ?? "default"
|
|
2013
2019
|
} })
|
|
@@ -2026,7 +2032,7 @@ function Ft() {
|
|
|
2026
2032
|
y: -8
|
|
2027
2033
|
},
|
|
2028
2034
|
transition: { duration: .2 },
|
|
2029
|
-
children: /* @__PURE__ */ b(
|
|
2035
|
+
children: /* @__PURE__ */ b(Ee, {
|
|
2030
2036
|
agentId: F.id,
|
|
2031
2037
|
profile: z
|
|
2032
2038
|
})
|
|
@@ -2045,10 +2051,10 @@ function Ft() {
|
|
|
2045
2051
|
y: -8
|
|
2046
2052
|
},
|
|
2047
2053
|
transition: { duration: .2 },
|
|
2048
|
-
children: /* @__PURE__ */ x(
|
|
2054
|
+
children: /* @__PURE__ */ x(l, {
|
|
2049
2055
|
className: "p-6 text-center text-text-secondary",
|
|
2050
2056
|
children: [
|
|
2051
|
-
/* @__PURE__ */ b(
|
|
2057
|
+
/* @__PURE__ */ b($e, { className: "size-8 mx-auto mb-2 text-text-muted" }),
|
|
2052
2058
|
/* @__PURE__ */ b("p", { children: C("agentDetails.backupRequiresTunnelAndApiKey", "Agent tunnel URL and API key are required for backup management.") }),
|
|
2053
2059
|
/* @__PURE__ */ b("p", {
|
|
2054
2060
|
className: "text-sm mt-1",
|
|
@@ -2071,10 +2077,10 @@ function Ft() {
|
|
|
2071
2077
|
y: -8
|
|
2072
2078
|
},
|
|
2073
2079
|
transition: { duration: .2 },
|
|
2074
|
-
children: /* @__PURE__ */ b(
|
|
2080
|
+
children: /* @__PURE__ */ b(Oe, {
|
|
2075
2081
|
agentId: F.id,
|
|
2076
2082
|
agentVersion: F.version,
|
|
2077
|
-
onAfterDestructiveNuke:
|
|
2083
|
+
onAfterDestructiveNuke: Mr
|
|
2078
2084
|
})
|
|
2079
2085
|
}, "maintenance"),
|
|
2080
2086
|
B && (() => {
|
|
@@ -2094,9 +2100,9 @@ function Ft() {
|
|
|
2094
2100
|
},
|
|
2095
2101
|
transition: { duration: .2 },
|
|
2096
2102
|
className: "space-y-6",
|
|
2097
|
-
children: /* @__PURE__ */ b(
|
|
2103
|
+
children: /* @__PURE__ */ b(l, { children: /* @__PURE__ */ b("div", {
|
|
2098
2104
|
className: "p-0 h-[600px]",
|
|
2099
|
-
children: /* @__PURE__ */ b(
|
|
2105
|
+
children: /* @__PURE__ */ b(He, {
|
|
2100
2106
|
contribution: e,
|
|
2101
2107
|
tunnel: e.tunnel,
|
|
2102
2108
|
restPaths: e.capabilities.restPaths.length > 0 ? e.capabilities.restPaths : [`/ui/${e.pluginKey}`],
|
|
@@ -2116,9 +2122,9 @@ function Ft() {
|
|
|
2116
2122
|
})()
|
|
2117
2123
|
]
|
|
2118
2124
|
}),
|
|
2119
|
-
B && F && /* @__PURE__ */ b(
|
|
2120
|
-
isOpen:
|
|
2121
|
-
onClose: () =>
|
|
2125
|
+
B && F && /* @__PURE__ */ b(Ve, {
|
|
2126
|
+
isOpen: Bn,
|
|
2127
|
+
onClose: () => Vn(!1),
|
|
2122
2128
|
mountPoint: "agent.detailTab",
|
|
2123
2129
|
agentId: F.id,
|
|
2124
2130
|
profile: z ?? "default",
|
|
@@ -2126,7 +2132,7 @@ function Ft() {
|
|
|
2126
2132
|
V.refetch();
|
|
2127
2133
|
}
|
|
2128
2134
|
}),
|
|
2129
|
-
|
|
2135
|
+
Yt && /* @__PURE__ */ b("div", {
|
|
2130
2136
|
className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-[100] p-4",
|
|
2131
2137
|
children: /* @__PURE__ */ x("div", {
|
|
2132
2138
|
className: "bg-bg-surface rounded-lg w-full max-w-lg max-h-[90vh] flex flex-col",
|
|
@@ -2144,9 +2150,9 @@ function Ft() {
|
|
|
2144
2150
|
}),
|
|
2145
2151
|
/* @__PURE__ */ x("div", {
|
|
2146
2152
|
className: "px-6 py-4 overflow-y-auto flex-1",
|
|
2147
|
-
children: [
|
|
2153
|
+
children: [Zt && /* @__PURE__ */ b("div", {
|
|
2148
2154
|
className: "mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
|
|
2149
|
-
children:
|
|
2155
|
+
children: Zt
|
|
2150
2156
|
}), /* @__PURE__ */ x("div", {
|
|
2151
2157
|
className: "space-y-4",
|
|
2152
2158
|
children: [
|
|
@@ -2155,7 +2161,7 @@ function Ft() {
|
|
|
2155
2161
|
children: C("webhooks.name", "Name")
|
|
2156
2162
|
}), /* @__PURE__ */ b("input", {
|
|
2157
2163
|
"aria-label": "control",
|
|
2158
|
-
ref:
|
|
2164
|
+
ref: fn,
|
|
2159
2165
|
type: "text",
|
|
2160
2166
|
defaultValue: F.name,
|
|
2161
2167
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary"
|
|
@@ -2187,7 +2193,7 @@ function Ft() {
|
|
|
2187
2193
|
}),
|
|
2188
2194
|
/* @__PURE__ */ b("input", {
|
|
2189
2195
|
"aria-label": "control",
|
|
2190
|
-
ref:
|
|
2196
|
+
ref: pn,
|
|
2191
2197
|
type: "text",
|
|
2192
2198
|
defaultValue: F.tunnelUrl ?? "",
|
|
2193
2199
|
placeholder: C("agentDetails.tunnelUrlPlaceholder", "https://xxx.trycloudflare.com"),
|
|
@@ -2208,18 +2214,18 @@ function Ft() {
|
|
|
2208
2214
|
className: "relative",
|
|
2209
2215
|
children: [/* @__PURE__ */ b("button", {
|
|
2210
2216
|
type: "button",
|
|
2211
|
-
onClick: () =>
|
|
2217
|
+
onClick: () => nn((e) => !e),
|
|
2212
2218
|
className: "p-0.5 rounded-full text-text-muted hover:text-text-secondary transition-colors",
|
|
2213
2219
|
"aria-label": "What is AI Context?",
|
|
2214
|
-
children: /* @__PURE__ */ b(
|
|
2215
|
-
}),
|
|
2220
|
+
children: /* @__PURE__ */ b(ot, { className: "size-3.5" })
|
|
2221
|
+
}), tn && /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("div", {
|
|
2216
2222
|
role: "button",
|
|
2217
2223
|
tabIndex: 0,
|
|
2218
2224
|
onKeyDown: (e) => {
|
|
2219
|
-
(e.key === "Enter" || e.key === " ") && (e.preventDefault(),
|
|
2225
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), nn(!1));
|
|
2220
2226
|
},
|
|
2221
2227
|
className: "fixed inset-0 z-10",
|
|
2222
|
-
onClick: () =>
|
|
2228
|
+
onClick: () => nn(!1)
|
|
2223
2229
|
}), /* @__PURE__ */ x("div", {
|
|
2224
2230
|
className: "absolute left-0 top-6 z-20 w-72 bg-bg-elevated border border-border-default rounded-lg shadow-xl p-3 text-xs text-text-secondary space-y-1.5",
|
|
2225
2231
|
children: [
|
|
@@ -2238,7 +2244,7 @@ function Ft() {
|
|
|
2238
2244
|
}), /* @__PURE__ */ b("textarea", {
|
|
2239
2245
|
id: "agentdetailspage-58",
|
|
2240
2246
|
"aria-label": "e.g. This agent runs on the billing server. Node 20, Docker installed. Do not modify files outside /src.",
|
|
2241
|
-
ref:
|
|
2247
|
+
ref: mn,
|
|
2242
2248
|
defaultValue: F.aiContext ?? "",
|
|
2243
2249
|
rows: 4,
|
|
2244
2250
|
placeholder: "e.g. This agent runs on the billing server. Node 20, Docker installed. Do not modify files outside /src.",
|
|
@@ -2249,7 +2255,7 @@ function Ft() {
|
|
|
2249
2255
|
children: C("agentDetails.metadataLabel", "Metadata (JSON)")
|
|
2250
2256
|
}), /* @__PURE__ */ b("textarea", {
|
|
2251
2257
|
"aria-label": "control",
|
|
2252
|
-
ref:
|
|
2258
|
+
ref: hn,
|
|
2253
2259
|
defaultValue: F.metadata ? JSON.stringify(F.metadata, null, 2) : "{}",
|
|
2254
2260
|
rows: 4,
|
|
2255
2261
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary font-mono text-sm"
|
|
@@ -2261,16 +2267,16 @@ function Ft() {
|
|
|
2261
2267
|
className: "px-6 py-4 border-t border-border-default flex-shrink-0 flex flex-wrap justify-end gap-3",
|
|
2262
2268
|
children: [/* @__PURE__ */ b("button", {
|
|
2263
2269
|
type: "button",
|
|
2264
|
-
onClick: () =>
|
|
2265
|
-
disabled:
|
|
2270
|
+
onClick: () => Xt(!1),
|
|
2271
|
+
disabled: Qt,
|
|
2266
2272
|
className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
|
|
2267
2273
|
children: C("common.cancel", "Cancel")
|
|
2268
2274
|
}), /* @__PURE__ */ b("button", {
|
|
2269
2275
|
type: "button",
|
|
2270
|
-
onClick:
|
|
2271
|
-
disabled:
|
|
2276
|
+
onClick: Ir,
|
|
2277
|
+
disabled: Qt,
|
|
2272
2278
|
className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
|
|
2273
|
-
children:
|
|
2279
|
+
children: Qt ? C("agentDetails.saving", "Saving...") : C("agentDetails.saveConfiguration", "Save Configuration")
|
|
2274
2280
|
})]
|
|
2275
2281
|
})
|
|
2276
2282
|
]
|
|
@@ -2298,9 +2304,9 @@ function Ft() {
|
|
|
2298
2304
|
F.name
|
|
2299
2305
|
]
|
|
2300
2306
|
}),
|
|
2301
|
-
|
|
2307
|
+
En && /* @__PURE__ */ b("div", {
|
|
2302
2308
|
className: "mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
|
|
2303
|
-
children:
|
|
2309
|
+
children: En
|
|
2304
2310
|
}),
|
|
2305
2311
|
/* @__PURE__ */ x("div", {
|
|
2306
2312
|
className: "space-y-4",
|
|
@@ -2319,7 +2325,7 @@ function Ft() {
|
|
|
2319
2325
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
2320
2326
|
children: C("sessions.filterType", "Type")
|
|
2321
2327
|
}), /* @__PURE__ */ x("select", {
|
|
2322
|
-
ref:
|
|
2328
|
+
ref: On,
|
|
2323
2329
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary",
|
|
2324
2330
|
children: [
|
|
2325
2331
|
/* @__PURE__ */ b("option", {
|
|
@@ -2348,7 +2354,7 @@ function Ft() {
|
|
|
2348
2354
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
2349
2355
|
children: C("sessions.command", "Command")
|
|
2350
2356
|
}), /* @__PURE__ */ b("input", {
|
|
2351
|
-
ref:
|
|
2357
|
+
ref: kn,
|
|
2352
2358
|
type: "text",
|
|
2353
2359
|
placeholder: C("vibeDetails.sessionCommandPlaceholder", "bash"),
|
|
2354
2360
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
|
|
@@ -2357,7 +2363,7 @@ function Ft() {
|
|
|
2357
2363
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
2358
2364
|
children: C("vibeDetails.workingDirectory", "Working Directory")
|
|
2359
2365
|
}), /* @__PURE__ */ b("input", {
|
|
2360
|
-
ref:
|
|
2366
|
+
ref: An,
|
|
2361
2367
|
type: "text",
|
|
2362
2368
|
placeholder: "/home/user",
|
|
2363
2369
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
|
|
@@ -2373,7 +2379,7 @@ function Ft() {
|
|
|
2373
2379
|
children: C("common.cancel", "Cancel")
|
|
2374
2380
|
}), /* @__PURE__ */ b("button", {
|
|
2375
2381
|
"data-testid": "create-session-submit",
|
|
2376
|
-
onClick:
|
|
2382
|
+
onClick: Ur,
|
|
2377
2383
|
disabled: M,
|
|
2378
2384
|
className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
|
|
2379
2385
|
children: M ? C("sessions.creating", "Creating...") : C("sessions.createSession", "Create Session")
|
|
@@ -2382,34 +2388,34 @@ function Ft() {
|
|
|
2382
2388
|
]
|
|
2383
2389
|
})
|
|
2384
2390
|
}),
|
|
2385
|
-
/* @__PURE__ */ b(
|
|
2386
|
-
isOpen:
|
|
2387
|
-
onClose: () =>
|
|
2391
|
+
/* @__PURE__ */ b(le, {
|
|
2392
|
+
isOpen: ar,
|
|
2393
|
+
onClose: () => or(!1),
|
|
2388
2394
|
onConfirm: () => {
|
|
2389
|
-
|
|
2395
|
+
or(!1), S("/billing/plans");
|
|
2390
2396
|
},
|
|
2391
|
-
title:
|
|
2392
|
-
message:
|
|
2397
|
+
title: ue(sr).title,
|
|
2398
|
+
message: ue(sr).message
|
|
2393
2399
|
}),
|
|
2394
|
-
/* @__PURE__ */ b(
|
|
2395
|
-
isOpen:
|
|
2400
|
+
/* @__PURE__ */ b(ce, {
|
|
2401
|
+
isOpen: Zn,
|
|
2396
2402
|
onClose: () => {
|
|
2397
|
-
|
|
2403
|
+
rr || Qn(!1);
|
|
2398
2404
|
},
|
|
2399
|
-
onConfirm:
|
|
2405
|
+
onConfirm: Br,
|
|
2400
2406
|
title: C("agentDetails.removeAgentTitle", "Remove agent"),
|
|
2401
2407
|
message: C("agentDetails.removeAgentMessage", "Remove “{{name}}” from this workspace.", { name: F.name }),
|
|
2402
2408
|
confirmLabel: C("sessions.remove", "Remove"),
|
|
2403
2409
|
variant: "danger",
|
|
2404
|
-
isLoading:
|
|
2410
|
+
isLoading: rr,
|
|
2405
2411
|
children: /* @__PURE__ */ x("div", {
|
|
2406
2412
|
className: "space-y-2",
|
|
2407
2413
|
children: [/* @__PURE__ */ x("label", {
|
|
2408
2414
|
className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
|
|
2409
|
-
children: [/* @__PURE__ */ b(
|
|
2410
|
-
checked:
|
|
2411
|
-
disabled:
|
|
2412
|
-
onCheckedChange: (e) =>
|
|
2415
|
+
children: [/* @__PURE__ */ b(kt, {
|
|
2416
|
+
checked: $n,
|
|
2417
|
+
disabled: rr,
|
|
2418
|
+
onCheckedChange: (e) => er(e === !0),
|
|
2413
2419
|
className: "mt-0.5"
|
|
2414
2420
|
}), /* @__PURE__ */ x("span", {
|
|
2415
2421
|
className: "min-w-0",
|
|
@@ -2423,10 +2429,10 @@ function Ft() {
|
|
|
2423
2429
|
})]
|
|
2424
2430
|
}), /* @__PURE__ */ x("label", {
|
|
2425
2431
|
className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
|
|
2426
|
-
children: [/* @__PURE__ */ b(
|
|
2427
|
-
checked:
|
|
2428
|
-
disabled:
|
|
2429
|
-
onCheckedChange: (e) =>
|
|
2432
|
+
children: [/* @__PURE__ */ b(kt, {
|
|
2433
|
+
checked: tr,
|
|
2434
|
+
disabled: rr,
|
|
2435
|
+
onCheckedChange: (e) => nr(e === !0),
|
|
2430
2436
|
className: "mt-0.5"
|
|
2431
2437
|
}), /* @__PURE__ */ x("span", {
|
|
2432
2438
|
className: "min-w-0",
|
|
@@ -2445,6 +2451,6 @@ function Ft() {
|
|
|
2445
2451
|
});
|
|
2446
2452
|
}
|
|
2447
2453
|
//#endregion
|
|
2448
|
-
export {
|
|
2454
|
+
export { It as AgentDetailsPage };
|
|
2449
2455
|
|
|
2450
2456
|
//# sourceMappingURL=AgentDetailsPage.js.map
|