{file}
- {parts.slice(1).join(file)}
- >
- )
-}
-
const listServersByHealth = (
list: ServerConnection.Any[],
active: ServerConnection.Key | undefined,
@@ -284,13 +272,6 @@ export function StatusPopoverBody(props: { shown: Accessor{file}
+ {parts.slice(1).join(file)}
+ >
+ )
+}
+
+// Plugins side-panel view. Displays the list of configured plugin paths (from deepagent-code.json).
+// Plugins are configured via the config file only (no UI add/remove), so this panel is read-only.
+export const SidePanelPlugins: Component<{ onClose: () => void }> = (props) => {
+ const sync = useSync()
+ const language = useLanguage()
+
+ const plugins = createMemo(() =>
+ (sync.data.config.plugin ?? []).map((item) => (typeof item === "string" ? item : item[0])),
+ )
+ const pluginEmpty = createMemo(() => pluginEmptyMessage(language.t("dialog.plugins.empty"), "deepagent-code.json"))
+
+ return (
+ | 函数名 | +文件:行 | +自占% | +累积% | +调用次数 | +
|---|---|---|---|---|
| + + {row.name} + + {pctBar(row.selfPct)} + | +
+ |
+ + {row.selfPct.toFixed(1)}% + | ++ {row.cumulPct.toFixed(1)}% + | ++ {row.calls >= 0 ? row.calls.toLocaleString() : "—"} + | +