@polpo-ai/dashboard 0.15.11 → 0.15.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/README.md +43 -9
- package/dist/host.d.ts +16 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +3 -0
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +35 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/dist/self-host-api.d.ts +3 -0
- package/dist/self-host-api.d.ts.map +1 -0
- package/dist/self-host-api.js +55 -0
- package/dist/self-host-api.js.map +1 -0
- package/dist/v2/agents/agent-detail.d.ts +58 -0
- package/dist/v2/agents/agent-detail.d.ts.map +1 -0
- package/dist/v2/agents/agent-detail.js +412 -0
- package/dist/v2/agents/agent-detail.js.map +1 -0
- package/dist/v2/agents/agent-run-panel.d.ts +5 -0
- package/dist/v2/agents/agent-run-panel.d.ts.map +1 -0
- package/dist/v2/agents/agent-run-panel.js +149 -0
- package/dist/v2/agents/agent-run-panel.js.map +1 -0
- package/dist/v2/agents/loops-tab.d.ts +6 -0
- package/dist/v2/agents/loops-tab.d.ts.map +1 -0
- package/dist/v2/agents/loops-tab.js +160 -0
- package/dist/v2/agents/loops-tab.js.map +1 -0
- package/dist/v2/agents/model-select.d.ts +24 -0
- package/dist/v2/agents/model-select.d.ts.map +1 -0
- package/dist/v2/agents/model-select.js +157 -0
- package/dist/v2/agents/model-select.js.map +1 -0
- package/dist/v2/agents/prompt-preview-dialog.d.ts +15 -0
- package/dist/v2/agents/prompt-preview-dialog.d.ts.map +1 -0
- package/dist/v2/agents/prompt-preview-dialog.js +141 -0
- package/dist/v2/agents/prompt-preview-dialog.js.map +1 -0
- package/dist/v2/agents/self-host-create-agent-dialog.d.ts +6 -0
- package/dist/v2/agents/self-host-create-agent-dialog.d.ts.map +1 -0
- package/dist/v2/agents/self-host-create-agent-dialog.js +31 -0
- package/dist/v2/agents/self-host-create-agent-dialog.js.map +1 -0
- package/dist/v2/agents/self-host-detail.d.ts +4 -0
- package/dist/v2/agents/self-host-detail.d.ts.map +1 -0
- package/dist/v2/agents/self-host-detail.js +34 -0
- package/dist/v2/agents/self-host-detail.js.map +1 -0
- package/dist/v2/agents/self-host-run-chat.d.ts +10 -0
- package/dist/v2/agents/self-host-run-chat.d.ts.map +1 -0
- package/dist/v2/agents/self-host-run-chat.js +18 -0
- package/dist/v2/agents/self-host-run-chat.js.map +1 -0
- package/dist/v2/agents/skills-tab.d.ts +6 -0
- package/dist/v2/agents/skills-tab.d.ts.map +1 -0
- package/dist/v2/agents/skills-tab.js +112 -0
- package/dist/v2/agents/skills-tab.js.map +1 -0
- package/dist/v2/agents/tools-panel.d.ts +26 -0
- package/dist/v2/agents/tools-panel.d.ts.map +1 -0
- package/dist/v2/agents/tools-panel.js +123 -0
- package/dist/v2/agents/tools-panel.js.map +1 -0
- package/dist/v2/agents/tools-tab.d.ts +6 -0
- package/dist/v2/agents/tools-tab.d.ts.map +1 -0
- package/dist/v2/agents/tools-tab.js +117 -0
- package/dist/v2/agents/tools-tab.js.map +1 -0
- package/dist/v2/agents/vault-tab.d.ts +13 -0
- package/dist/v2/agents/vault-tab.d.ts.map +1 -0
- package/dist/v2/agents/vault-tab.js +93 -0
- package/dist/v2/agents/vault-tab.js.map +1 -0
- package/dist/v2/files/file-browser-primitives.d.ts +39 -0
- package/dist/v2/files/file-browser-primitives.d.ts.map +1 -0
- package/dist/v2/files/file-browser-primitives.js +75 -0
- package/dist/v2/files/file-browser-primitives.js.map +1 -0
- package/dist/v2/files/file-directory-browser.d.ts +10 -0
- package/dist/v2/files/file-directory-browser.d.ts.map +1 -0
- package/dist/v2/files/file-directory-browser.js +57 -0
- package/dist/v2/files/file-directory-browser.js.map +1 -0
- package/dist/v2/files/files-browser.d.ts +7 -0
- package/dist/v2/files/files-browser.d.ts.map +1 -0
- package/dist/v2/files/files-browser.js +390 -0
- package/dist/v2/files/files-browser.js.map +1 -0
- package/dist/v2/files/host.d.ts +45 -0
- package/dist/v2/files/host.d.ts.map +1 -0
- package/dist/v2/files/host.js +72 -0
- package/dist/v2/files/host.js.map +1 -0
- package/dist/v2/host.d.ts +42 -0
- package/dist/v2/host.d.ts.map +1 -0
- package/dist/v2/host.js +137 -0
- package/dist/v2/host.js.map +1 -0
- package/dist/v2/playground/chat-canvas.d.ts +9 -0
- package/dist/v2/playground/chat-canvas.d.ts.map +1 -0
- package/dist/v2/playground/chat-canvas.js +88 -0
- package/dist/v2/playground/chat-canvas.js.map +1 -0
- package/dist/v2/playground/host.d.ts +116 -0
- package/dist/v2/playground/host.d.ts.map +1 -0
- package/dist/v2/playground/host.js +12 -0
- package/dist/v2/playground/host.js.map +1 -0
- package/dist/v2/playground/self-host-chat.d.ts +11 -0
- package/dist/v2/playground/self-host-chat.d.ts.map +1 -0
- package/dist/v2/playground/self-host-chat.js +85 -0
- package/dist/v2/playground/self-host-chat.js.map +1 -0
- package/dist/v2/playground/self-host.d.ts +2 -0
- package/dist/v2/playground/self-host.d.ts.map +1 -0
- package/dist/v2/playground/self-host.js +87 -0
- package/dist/v2/playground/self-host.js.map +1 -0
- package/dist/v2/sessions/host.d.ts +167 -0
- package/dist/v2/sessions/host.d.ts.map +1 -0
- package/dist/v2/sessions/host.js +12 -0
- package/dist/v2/sessions/host.js.map +1 -0
- package/dist/v2/sessions/self-host.d.ts +7 -0
- package/dist/v2/sessions/self-host.d.ts.map +1 -0
- package/dist/v2/sessions/self-host.js +120 -0
- package/dist/v2/sessions/self-host.js.map +1 -0
- package/dist/v2/sessions/trace-columns.d.ts +4 -0
- package/dist/v2/sessions/trace-columns.d.ts.map +1 -0
- package/dist/v2/sessions/trace-columns.js +102 -0
- package/dist/v2/sessions/trace-columns.js.map +1 -0
- package/dist/v2/sessions/trace-detail-view.d.ts +7 -0
- package/dist/v2/sessions/trace-detail-view.d.ts.map +1 -0
- package/dist/v2/sessions/trace-detail-view.js +346 -0
- package/dist/v2/sessions/trace-detail-view.js.map +1 -0
- package/dist/v2/sessions/trace-detail.d.ts +133 -0
- package/dist/v2/sessions/trace-detail.d.ts.map +1 -0
- package/dist/v2/sessions/trace-detail.js +210 -0
- package/dist/v2/sessions/trace-detail.js.map +1 -0
- package/dist/v2/sessions/trace-normalize.d.ts +60 -0
- package/dist/v2/sessions/trace-normalize.d.ts.map +1 -0
- package/dist/v2/sessions/trace-normalize.js +87 -0
- package/dist/v2/sessions/trace-normalize.js.map +1 -0
- package/dist/v2/sessions/trace-table.d.ts +8 -0
- package/dist/v2/sessions/trace-table.d.ts.map +1 -0
- package/dist/v2/sessions/trace-table.js +27 -0
- package/dist/v2/sessions/trace-table.js.map +1 -0
- package/dist/v2/shell/coding-agents.d.ts +21 -0
- package/dist/v2/shell/coding-agents.d.ts.map +1 -0
- package/dist/v2/shell/coding-agents.js +41 -0
- package/dist/v2/shell/coding-agents.js.map +1 -0
- package/dist/v2/shell/dashboard-shell.d.ts +6 -0
- package/dist/v2/shell/dashboard-shell.d.ts.map +1 -0
- package/dist/v2/shell/dashboard-shell.js +132 -0
- package/dist/v2/shell/dashboard-shell.js.map +1 -0
- package/dist/v2/skills/self-host-create-skill-dialog.d.ts +6 -0
- package/dist/v2/skills/self-host-create-skill-dialog.d.ts.map +1 -0
- package/dist/v2/skills/self-host-create-skill-dialog.js +27 -0
- package/dist/v2/skills/self-host-create-skill-dialog.js.map +1 -0
- package/dist/v2/skills/self-host-detail.d.ts +4 -0
- package/dist/v2/skills/self-host-detail.d.ts.map +1 -0
- package/dist/v2/skills/self-host-detail.js +31 -0
- package/dist/v2/skills/self-host-detail.js.map +1 -0
- package/dist/v2/support/agent-call-snippets.d.ts +35 -0
- package/dist/v2/support/agent-call-snippets.d.ts.map +1 -0
- package/dist/v2/support/agent-call-snippets.js +113 -0
- package/dist/v2/support/agent-call-snippets.js.map +1 -0
- package/dist/v2/support/tool-catalog.d.ts +62 -0
- package/dist/v2/support/tool-catalog.d.ts.map +1 -0
- package/dist/v2/support/tool-catalog.js +271 -0
- package/dist/v2/support/tool-catalog.js.map +1 -0
- package/dist/v2/support/vault-fields.d.ts +29 -0
- package/dist/v2/support/vault-fields.d.ts.map +1 -0
- package/dist/v2/support/vault-fields.js +74 -0
- package/dist/v2/support/vault-fields.js.map +1 -0
- package/dist/v2/tools/param-fields.d.ts +19 -0
- package/dist/v2/tools/param-fields.d.ts.map +1 -0
- package/dist/v2/tools/param-fields.js +191 -0
- package/dist/v2/tools/param-fields.js.map +1 -0
- package/dist/v2/tools/self-host.d.ts +7 -0
- package/dist/v2/tools/self-host.d.ts.map +1 -0
- package/dist/v2/tools/self-host.js +26 -0
- package/dist/v2/tools/self-host.js.map +1 -0
- package/dist/v2/tools/source-parsing.d.ts +4 -0
- package/dist/v2/tools/source-parsing.d.ts.map +1 -0
- package/dist/v2/tools/source-parsing.js +15 -0
- package/dist/v2/tools/source-parsing.js.map +1 -0
- package/dist/v2/tools/tool-detail.d.ts +7 -0
- package/dist/v2/tools/tool-detail.d.ts.map +1 -0
- package/dist/v2/tools/tool-detail.js +157 -0
- package/dist/v2/tools/tool-detail.js.map +1 -0
- package/dist/v2/tools/tool-editor-dialog.d.ts +9 -0
- package/dist/v2/tools/tool-editor-dialog.d.ts.map +1 -0
- package/dist/v2/tools/tool-editor-dialog.js +306 -0
- package/dist/v2/tools/tool-editor-dialog.js.map +1 -0
- package/dist/v2/tools/tools-view.d.ts +21 -0
- package/dist/v2/tools/tools-view.d.ts.map +1 -0
- package/dist/v2/tools/tools-view.js +77 -0
- package/dist/v2/tools/tools-view.js.map +1 -0
- package/dist/v2/ui/bits.d.ts +23 -0
- package/dist/v2/ui/bits.d.ts.map +1 -0
- package/dist/v2/ui/bits.js +18 -0
- package/dist/v2/ui/bits.js.map +1 -0
- package/dist/v2/ui/button.d.ts +9 -0
- package/dist/v2/ui/button.d.ts.map +1 -0
- package/dist/v2/ui/button.js +33 -0
- package/dist/v2/ui/button.js.map +1 -0
- package/dist/v2/ui/code-block.d.ts +20 -0
- package/dist/v2/ui/code-block.d.ts.map +1 -0
- package/dist/v2/ui/code-block.js +44 -0
- package/dist/v2/ui/code-block.js.map +1 -0
- package/dist/v2/ui/code-editor.d.ts +9 -0
- package/dist/v2/ui/code-editor.d.ts.map +1 -0
- package/dist/v2/ui/code-editor.js +25 -0
- package/dist/v2/ui/code-editor.js.map +1 -0
- package/dist/v2/ui/copy-button.d.ts +9 -0
- package/dist/v2/ui/copy-button.d.ts.map +1 -0
- package/dist/v2/ui/copy-button.js +24 -0
- package/dist/v2/ui/copy-button.js.map +1 -0
- package/dist/v2/ui/data-table.d.ts +40 -0
- package/dist/v2/ui/data-table.d.ts.map +1 -0
- package/dist/v2/ui/data-table.js +85 -0
- package/dist/v2/ui/data-table.js.map +1 -0
- package/dist/v2/ui/dialog.d.ts +16 -0
- package/dist/v2/ui/dialog.d.ts.map +1 -0
- package/dist/v2/ui/dialog.js +39 -0
- package/dist/v2/ui/dialog.js.map +1 -0
- package/dist/v2/ui/input.d.ts +2 -0
- package/dist/v2/ui/input.d.ts.map +1 -0
- package/dist/v2/ui/input.js +7 -0
- package/dist/v2/ui/input.js.map +1 -0
- package/dist/v2/ui/multi-select-filter.d.ts +18 -0
- package/dist/v2/ui/multi-select-filter.d.ts.map +1 -0
- package/dist/v2/ui/multi-select-filter.js +37 -0
- package/dist/v2/ui/multi-select-filter.js.map +1 -0
- package/dist/v2/ui/page-header.d.ts +10 -0
- package/dist/v2/ui/page-header.d.ts.map +1 -0
- package/dist/v2/ui/page-header.js +8 -0
- package/dist/v2/ui/page-header.js.map +1 -0
- package/dist/v2/ui/refresh-button.d.ts +5 -0
- package/dist/v2/ui/refresh-button.d.ts.map +1 -0
- package/dist/v2/ui/refresh-button.js +7 -0
- package/dist/v2/ui/refresh-button.js.map +1 -0
- package/dist/v2/ui/select.d.ts +16 -0
- package/dist/v2/ui/select.d.ts.map +1 -0
- package/dist/v2/ui/select.js +36 -0
- package/dist/v2/ui/select.js.map +1 -0
- package/dist/v2/ui/skeleton.d.ts +3 -0
- package/dist/v2/ui/skeleton.d.ts.map +1 -0
- package/dist/v2/ui/skeleton.js +7 -0
- package/dist/v2/ui/skeleton.js.map +1 -0
- package/dist/v2/ui/textarea.d.ts +2 -0
- package/dist/v2/ui/textarea.d.ts.map +1 -0
- package/dist/v2/ui/textarea.js +6 -0
- package/dist/v2/ui/textarea.js.map +1 -0
- package/dist/v2/utils.d.ts +3 -0
- package/dist/v2/utils.d.ts.map +1 -0
- package/dist/v2/utils.js +6 -0
- package/dist/v2/utils.js.map +1 -0
- package/dist/v2/views/agents-detail.d.ts +2 -0
- package/dist/v2/views/agents-detail.d.ts.map +1 -0
- package/dist/v2/views/agents-detail.js +2 -0
- package/dist/v2/views/agents-detail.js.map +1 -0
- package/dist/v2/views/agents.d.ts +27 -0
- package/dist/v2/views/agents.d.ts.map +1 -0
- package/dist/v2/views/agents.js +161 -0
- package/dist/v2/views/agents.js.map +1 -0
- package/dist/v2/views/files.d.ts +2 -0
- package/dist/v2/views/files.d.ts.map +1 -0
- package/dist/v2/views/files.js +10 -0
- package/dist/v2/views/files.js.map +1 -0
- package/dist/v2/views/memory-host.d.ts +10 -0
- package/dist/v2/views/memory-host.d.ts.map +1 -0
- package/dist/v2/views/memory-host.js +17 -0
- package/dist/v2/views/memory-host.js.map +1 -0
- package/dist/v2/views/memory-project.d.ts +5 -0
- package/dist/v2/views/memory-project.d.ts.map +1 -0
- package/dist/v2/views/memory-project.js +36 -0
- package/dist/v2/views/memory-project.js.map +1 -0
- package/dist/v2/views/memory.d.ts +2 -0
- package/dist/v2/views/memory.d.ts.map +1 -0
- package/dist/v2/views/memory.js +14 -0
- package/dist/v2/views/memory.js.map +1 -0
- package/dist/v2/views/playground.d.ts +13 -0
- package/dist/v2/views/playground.d.ts.map +1 -0
- package/dist/v2/views/playground.js +88 -0
- package/dist/v2/views/playground.js.map +1 -0
- package/dist/v2/views/sessions-detail.d.ts +8 -0
- package/dist/v2/views/sessions-detail.d.ts.map +1 -0
- package/dist/v2/views/sessions-detail.js +107 -0
- package/dist/v2/views/sessions-detail.js.map +1 -0
- package/dist/v2/views/sessions.d.ts +9 -0
- package/dist/v2/views/sessions.d.ts.map +1 -0
- package/dist/v2/views/sessions.js +9 -0
- package/dist/v2/views/sessions.js.map +1 -0
- package/dist/v2/views/skills-detail.d.ts +26 -0
- package/dist/v2/views/skills-detail.d.ts.map +1 -0
- package/dist/v2/views/skills-detail.js +120 -0
- package/dist/v2/views/skills-detail.js.map +1 -0
- package/dist/v2/views/skills.d.ts +18 -0
- package/dist/v2/views/skills.d.ts.map +1 -0
- package/dist/v2/views/skills.js +46 -0
- package/dist/v2/views/skills.js.map +1 -0
- package/package.json +20 -4
- package/src/v2.css +212 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useRouter } from "../host";
|
|
5
|
+
import { useQuery } from "../host";
|
|
6
|
+
import { Link } from "../host";
|
|
7
|
+
import { CircleNotch, MagnifyingGlass, CaretRight, ArrowSquareOut, PlugsConnected, } from "@phosphor-icons/react/dist/ssr";
|
|
8
|
+
import { useDashboardApi } from "../../host";
|
|
9
|
+
import { BASELINE_TOOLS, CATALOG_TOOL_NAMES, countEnabledTools, } from "../host";
|
|
10
|
+
import { Toggle } from "../ui/bits";
|
|
11
|
+
import { ToolsTab } from "./tools-tab";
|
|
12
|
+
/**
|
|
13
|
+
* The agent's "Tools & MCP" tab, split into a vertical sub-nav:
|
|
14
|
+
* • Built-in tools — the managed runtime catalog (categories, toggles).
|
|
15
|
+
* • Custom tools — tools authored at project level, toggled per agent.
|
|
16
|
+
* • MCP Servers — external tools via Model Context Protocol (coming soon).
|
|
17
|
+
*/
|
|
18
|
+
export function ToolsPanel({ projectId, agentName, allowedTools, }) {
|
|
19
|
+
const [sub, setSub] = useState("builtin");
|
|
20
|
+
const items = [
|
|
21
|
+
{ id: "builtin", label: "Built-in tools" },
|
|
22
|
+
{ id: "custom", label: "Custom tools" },
|
|
23
|
+
];
|
|
24
|
+
return (_jsxs("div", { className: "flex flex-col gap-5 md:flex-row md:gap-6", children: [_jsx("nav", { className: "flex shrink-0 gap-1 overflow-x-auto md:w-44 md:flex-col md:gap-0.5 md:overflow-visible", children: items.map((it) => (_jsx("button", { type: "button", onClick: () => setSub(it.id), className: `shrink-0 rounded-md px-2.5 py-1.5 text-left text-[13px] transition-colors ${sub === it.id
|
|
25
|
+
? "bg-secondary font-medium text-foreground"
|
|
26
|
+
: "text-muted-foreground hover:bg-secondary/60 hover:text-foreground"}`, children: it.label }, it.id))) }), _jsxs("div", { className: "min-w-0 flex-1", children: [sub === "builtin" && (_jsx(ToolsTab, { projectId: projectId, agentName: agentName, allowedTools: allowedTools })), sub === "custom" && (_jsx(CustomToolsPanel, { projectId: projectId, agentName: agentName, allowedTools: allowedTools }))] })] }));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Agent tools with a horizontal type filter — Built-in · Custom · MCP (soon).
|
|
30
|
+
* One section at a time (single search each), instead of a nested sub-nav.
|
|
31
|
+
*/
|
|
32
|
+
export function AgentToolsPanel({ projectId, agentName, allowedTools, }) {
|
|
33
|
+
const [filter, setFilter] = useState("builtin");
|
|
34
|
+
const builtinCount = countEnabledTools(allowedTools);
|
|
35
|
+
const customCount = allowedTools.filter((t) => !CATALOG_TOOL_NAMES.has(t) && !t.endsWith("*")).length;
|
|
36
|
+
const FILTERS = [
|
|
37
|
+
{ id: "builtin", label: "Built-in" },
|
|
38
|
+
{ id: "custom", label: "Custom" },
|
|
39
|
+
{ id: "mcp", label: "MCP", soon: true },
|
|
40
|
+
];
|
|
41
|
+
return (_jsxs("div", { className: "flex flex-col gap-4", children: [_jsx("p", { className: "text-[13px] text-muted-foreground", children: "Tools this agent can call. Built-in tools run on the managed runtime, custom tools are authored in your project, and MCP connects external servers." }), _jsx("div", { className: "scrollbar-none flex items-center gap-1 overflow-x-auto border-b border-border", children: FILTERS.map((f) => {
|
|
42
|
+
const count = f.id === "builtin"
|
|
43
|
+
? builtinCount
|
|
44
|
+
: f.id === "custom"
|
|
45
|
+
? customCount
|
|
46
|
+
: null;
|
|
47
|
+
return (_jsxs("button", { type: "button", onClick: () => setFilter(f.id), className: `-mb-px inline-flex shrink-0 items-center gap-1.5 border-b-2 px-3 py-2 text-[13px] transition-colors ${filter === f.id
|
|
48
|
+
? "border-brand font-medium text-foreground"
|
|
49
|
+
: "border-transparent text-muted-foreground hover:text-foreground"}`, children: [f.label, count !== null && (_jsx("span", { className: "rounded bg-secondary px-1.5 py-0.5 text-[10px] tabular-nums text-muted-foreground", children: count })), f.soon && (_jsx("span", { className: "rounded-sm bg-secondary px-1 py-px text-[9px] font-semibold uppercase leading-none tracking-wide text-muted-foreground/60", children: "Soon" }))] }, f.id));
|
|
50
|
+
}) }), filter === "builtin" && (_jsx(ToolsTab, { projectId: projectId, agentName: agentName, allowedTools: allowedTools })), filter === "custom" && (_jsx(CustomToolsPanel, { projectId: projectId, agentName: agentName, allowedTools: allowedTools })), filter === "mcp" && (_jsxs("div", { className: "flex flex-col items-center gap-3 rounded-lg border border-dashed border-border py-16 text-center", children: [_jsx("span", { className: "grid h-11 w-11 place-items-center rounded-lg border border-border bg-secondary", children: _jsx(PlugsConnected, { size: 20, className: "text-muted-foreground" }) }), _jsxs("div", { className: "max-w-sm", children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: "MCP Servers" }), _jsx("div", { className: "mt-1 text-[13px] text-muted-foreground", children: "Connect this agent to external tools and data through Model Context Protocol servers." })] }), _jsx("span", { className: "rounded-full border border-border px-2.5 py-1 text-[11px] font-medium text-muted-foreground", children: "Coming soon" })] }))] }));
|
|
51
|
+
}
|
|
52
|
+
export function CustomToolsPanel({ projectId, agentName, allowedTools, }) {
|
|
53
|
+
const api = useDashboardApi();
|
|
54
|
+
const router = useRouter();
|
|
55
|
+
const [allowed, setAllowed] = useState(allowedTools);
|
|
56
|
+
const [query, setQuery] = useState("");
|
|
57
|
+
const [expanded, setExpanded] = useState(true);
|
|
58
|
+
const [saving, setSaving] = useState(false);
|
|
59
|
+
const [error, setError] = useState(null);
|
|
60
|
+
const { data: tools = [], isLoading } = useQuery({
|
|
61
|
+
queryKey: ["custom-tools", projectId],
|
|
62
|
+
queryFn: () => api.fetchControlPlane(`/v1/projects/${projectId}/tools`).then((r) => r.data ?? []),
|
|
63
|
+
staleTime: 30_000,
|
|
64
|
+
});
|
|
65
|
+
const authorHref = `/projects/${projectId}/tools`;
|
|
66
|
+
async function persist(next) {
|
|
67
|
+
const prev = allowed;
|
|
68
|
+
setAllowed(next);
|
|
69
|
+
setSaving(true);
|
|
70
|
+
setError(null);
|
|
71
|
+
try {
|
|
72
|
+
await api.mutateDataPlane(projectId, `/v1/agents/${encodeURIComponent(agentName)}`, { method: "PATCH", body: { allowedTools: next } });
|
|
73
|
+
router.refresh();
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
setAllowed(prev);
|
|
77
|
+
setError(e instanceof Error ? e.message : "Update failed");
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
setSaving(false);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Materialize the baseline first so enabling a custom tool doesn't silently
|
|
84
|
+
// switch off the built-in baseline (empty allowedTools == baseline).
|
|
85
|
+
function base() {
|
|
86
|
+
return new Set(allowed.length ? allowed : [...BASELINE_TOOLS]);
|
|
87
|
+
}
|
|
88
|
+
function toggle(name) {
|
|
89
|
+
const set = base();
|
|
90
|
+
if (set.has(name))
|
|
91
|
+
set.delete(name);
|
|
92
|
+
else
|
|
93
|
+
set.add(name);
|
|
94
|
+
persist([...set]);
|
|
95
|
+
}
|
|
96
|
+
function toggleAll(enable) {
|
|
97
|
+
const set = base();
|
|
98
|
+
for (const t of tools) {
|
|
99
|
+
if (enable)
|
|
100
|
+
set.add(t.name);
|
|
101
|
+
else
|
|
102
|
+
set.delete(t.name);
|
|
103
|
+
}
|
|
104
|
+
persist([...set]);
|
|
105
|
+
}
|
|
106
|
+
const filtered = query
|
|
107
|
+
? tools.filter((t) => t.name.toLowerCase().includes(query.toLowerCase()) ||
|
|
108
|
+
(t.description ?? "").toLowerCase().includes(query.toLowerCase()))
|
|
109
|
+
: tools;
|
|
110
|
+
const enabledCount = tools.filter((t) => allowed.includes(t.name)).length;
|
|
111
|
+
const allOn = tools.length > 0 && enabledCount === tools.length;
|
|
112
|
+
const isOpen = expanded || query.length > 0;
|
|
113
|
+
return (_jsxs("div", { className: "flex flex-col gap-5", children: [tools.length > 0 && (_jsxs("div", { className: "relative w-full sm:w-72", children: [_jsx(MagnifyingGlass, { size: 14, className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground" }), _jsx("input", { value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search custom tools\u2026", className: "h-8 w-full rounded-md border border-border bg-transparent pl-8 pr-3 text-[13px] text-foreground placeholder:text-muted-foreground/50 focus:border-ring/50 focus:outline-none" })] })), error && _jsx("p", { className: "text-[12px] text-destructive", children: error }), isLoading ? (_jsx("div", { className: "py-10 text-center", children: _jsx(CircleNotch, { size: 18, className: "mx-auto animate-spin text-muted-foreground" }) })) : tools.length === 0 ? (_jsxs("div", { className: "rounded-lg border border-dashed border-border py-12 text-center", children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: "No custom tools yet" }), _jsxs("div", { className: "mt-1 text-[13px] text-muted-foreground", children: ["Author them in", " ", _jsx(Link, { href: authorHref, className: "text-brand transition-colors hover:underline", children: "Project \u2192 Tools" }), "."] })] })) : (_jsxs("section", { children: [_jsxs("div", { role: "button", tabIndex: 0, onClick: () => setExpanded((v) => !v), onKeyDown: (e) => {
|
|
114
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
115
|
+
e.preventDefault();
|
|
116
|
+
setExpanded((v) => !v);
|
|
117
|
+
}
|
|
118
|
+
}, className: "group -mx-2 flex cursor-pointer items-center justify-between gap-3 rounded-md px-2 py-2 transition-colors hover:bg-secondary/50", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(CaretRight, { size: 14, className: `shrink-0 text-muted-foreground/60 transition-transform ${isOpen ? "rotate-90" : ""}` }), _jsx("h3", { className: "text-[14px] font-semibold text-foreground", children: "Custom tools" }), _jsxs("span", { className: `ml-0.5 rounded-full px-1.5 py-0.5 font-mono text-[10px] tabular-nums ${enabledCount > 0
|
|
119
|
+
? "bg-brand/10 text-brand"
|
|
120
|
+
: "bg-secondary text-muted-foreground/50"}`, children: [enabledCount, "/", tools.length] })] }), _jsxs("div", { onClick: (e) => e.stopPropagation(), className: "flex shrink-0 items-center gap-2 text-[12px] text-muted-foreground", children: ["Enable all", _jsx(Toggle, { checked: allOn, onChange: () => toggleAll(!allOn), disabled: saving, label: "Toggle all custom tools" })] })] }), isOpen &&
|
|
121
|
+
(filtered.length === 0 ? (_jsxs("p", { className: "py-6 text-center text-[13px] text-muted-foreground", children: ["No custom tools match \u201C", query, "\u201D."] })) : (_jsx("div", { className: "mt-2 overflow-hidden rounded-lg border border-border bg-card", children: filtered.map((t, i) => (_jsxs("div", { className: `flex items-center gap-3 px-3.5 py-2.5 ${i > 0 ? "border-t border-border" : ""}`, children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-mono text-[12px] text-foreground", children: t.name }), t.description && (_jsx("div", { className: "mt-0.5 min-w-0 truncate text-[12px] text-muted-foreground", children: t.description }))] }), _jsxs("a", { href: `${authorHref}/${encodeURIComponent(t.name)}`, target: "_blank", rel: "noopener noreferrer", title: `Open ${t.name}`, className: "inline-flex h-7 shrink-0 items-center gap-1.5 rounded-md border border-border px-2 text-[12px] text-muted-foreground transition-colors hover:border-ring/40 hover:text-foreground", children: ["Open", _jsx(ArrowSquareOut, { size: 13 })] }), _jsx(Toggle, { checked: allowed.includes(t.name), onChange: () => toggle(t.name), disabled: saving, label: t.name })] }, t.name))) })))] }))] }));
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=tools-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-panel.js","sourceRoot":"","sources":["../../../src/v2/agents/tools-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-tab.d.ts","sourceRoot":"","sources":["../../../src/v2/agents/tools-tab.tsx"],"names":[],"mappings":"AA0CA,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,SAAS,EACT,YAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,2CAqMA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useRouter } from "../host";
|
|
5
|
+
import { Key, MagnifyingGlass, CaretRight } from "@phosphor-icons/react/dist/ssr";
|
|
6
|
+
import { TOOL_CATALOG, isToolEnabled, } from "../host";
|
|
7
|
+
import { useDashboardApi } from "../../host";
|
|
8
|
+
import { Toggle } from "../ui/bits";
|
|
9
|
+
/** When allowedTools is empty the runtime grants this baseline set. */
|
|
10
|
+
const BASELINE = new Set([
|
|
11
|
+
"read",
|
|
12
|
+
"write",
|
|
13
|
+
"edit",
|
|
14
|
+
"bash",
|
|
15
|
+
"glob",
|
|
16
|
+
"grep",
|
|
17
|
+
"ls",
|
|
18
|
+
"http_fetch",
|
|
19
|
+
"http_download",
|
|
20
|
+
]);
|
|
21
|
+
function toolOn(name, allowed, core) {
|
|
22
|
+
if (core)
|
|
23
|
+
return true;
|
|
24
|
+
if (allowed.length === 0)
|
|
25
|
+
return BASELINE.has(name);
|
|
26
|
+
return isToolEnabled(name, allowed);
|
|
27
|
+
}
|
|
28
|
+
function matches(tool, q) {
|
|
29
|
+
if (!q)
|
|
30
|
+
return true;
|
|
31
|
+
const s = q.toLowerCase();
|
|
32
|
+
return (tool.name.toLowerCase().includes(s) ||
|
|
33
|
+
tool.description.toLowerCase().includes(s));
|
|
34
|
+
}
|
|
35
|
+
export function ToolsTab({ projectId, agentName, allowedTools, }) {
|
|
36
|
+
const api = useDashboardApi();
|
|
37
|
+
const router = useRouter();
|
|
38
|
+
const [allowed, setAllowed] = useState(allowedTools);
|
|
39
|
+
const [query, setQuery] = useState("");
|
|
40
|
+
const [saving, setSaving] = useState(false);
|
|
41
|
+
const [error, setError] = useState(null);
|
|
42
|
+
const [expanded, setExpanded] = useState(() => new Set(TOOL_CATALOG.filter((g) => !g.core).map((g) => g.key)));
|
|
43
|
+
const toggleExpand = (key) => setExpanded((s) => {
|
|
44
|
+
const next = new Set(s);
|
|
45
|
+
next.has(key) ? next.delete(key) : next.add(key);
|
|
46
|
+
return next;
|
|
47
|
+
});
|
|
48
|
+
async function persist(next) {
|
|
49
|
+
const prev = allowed;
|
|
50
|
+
setAllowed(next);
|
|
51
|
+
setSaving(true);
|
|
52
|
+
setError(null);
|
|
53
|
+
try {
|
|
54
|
+
await api.mutateDataPlane(projectId, `/v1/agents/${encodeURIComponent(agentName)}`, { method: "PATCH", body: { allowedTools: next } });
|
|
55
|
+
router.refresh();
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
setAllowed(prev);
|
|
59
|
+
setError(e instanceof Error ? e.message : "Update failed");
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
setSaving(false);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function materialize() {
|
|
66
|
+
return new Set(allowed.length ? allowed : [...BASELINE]);
|
|
67
|
+
}
|
|
68
|
+
function toggleTool(group, name) {
|
|
69
|
+
const set = materialize();
|
|
70
|
+
const wildcard = `${group.key}*`;
|
|
71
|
+
if (group.explicitToolsOnly && set.has(wildcard)) {
|
|
72
|
+
set.delete(wildcard);
|
|
73
|
+
for (const tool of group.tools)
|
|
74
|
+
set.add(tool.name);
|
|
75
|
+
}
|
|
76
|
+
if (set.has(name))
|
|
77
|
+
set.delete(name);
|
|
78
|
+
else
|
|
79
|
+
set.add(name);
|
|
80
|
+
persist([...set]);
|
|
81
|
+
}
|
|
82
|
+
function toggleGroup(g, enable) {
|
|
83
|
+
const set = materialize();
|
|
84
|
+
set.delete(`${g.key}*`);
|
|
85
|
+
for (const t of g.tools) {
|
|
86
|
+
if (enable)
|
|
87
|
+
set.add(t.name);
|
|
88
|
+
else
|
|
89
|
+
set.delete(t.name);
|
|
90
|
+
}
|
|
91
|
+
persist([...set]);
|
|
92
|
+
}
|
|
93
|
+
function groupCount(g) {
|
|
94
|
+
return g.tools.filter((t) => toolOn(t.name, allowed, g.core)).length;
|
|
95
|
+
}
|
|
96
|
+
// Core tools are always on and can't be toggled — no point listing them.
|
|
97
|
+
const visible = TOOL_CATALOG.filter((g) => !g.core)
|
|
98
|
+
.map((g) => ({
|
|
99
|
+
group: g,
|
|
100
|
+
tools: g.tools.filter((t) => matches(t, query)),
|
|
101
|
+
}))
|
|
102
|
+
.filter((x) => x.tools.length > 0);
|
|
103
|
+
return (_jsxs("div", { className: "flex flex-col gap-5", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "relative w-full sm:w-72", children: [_jsx(MagnifyingGlass, { size: 14, className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground" }), _jsx("input", { value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search tools\u2026", className: "h-8 w-full rounded-md border border-border bg-transparent pl-8 pr-3 text-[13px] text-foreground placeholder:text-muted-foreground/50 focus:border-ring/50 focus:outline-none" })] }), error && _jsx("p", { className: "text-[12px] text-destructive", children: error })] }), visible.length === 0 ? (_jsxs("p", { className: "py-8 text-center text-[13px] text-muted-foreground", children: ["No tools match \u201C", query, "\u201D."] })) : (_jsx("div", { className: "flex flex-col gap-3", children: visible.map(({ group: g, tools }) => {
|
|
104
|
+
const on = groupCount(g);
|
|
105
|
+
const allOn = on === g.tools.length;
|
|
106
|
+
const isOpen = expanded.has(g.key) || query.length > 0;
|
|
107
|
+
return (_jsxs("section", { children: [_jsxs("div", { role: "button", tabIndex: 0, onClick: () => toggleExpand(g.key), onKeyDown: (e) => {
|
|
108
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
toggleExpand(g.key);
|
|
111
|
+
}
|
|
112
|
+
}, className: "group -mx-2 flex cursor-pointer items-center justify-between gap-3 rounded-md px-2 py-2 transition-colors hover:bg-secondary/50", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(CaretRight, { size: 14, className: `shrink-0 text-muted-foreground/60 transition-transform ${isOpen ? "rotate-90" : ""}` }), _jsx("h3", { className: "text-[14px] font-semibold text-foreground", children: g.label }), g.requiresKey && (_jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: [_jsx(Key, { size: 10 }), " ", g.credentialLabel ?? "needs vault"] })), _jsxs("span", { className: `ml-0.5 rounded-full px-1.5 py-0.5 font-mono text-[10px] tabular-nums ${on > 0
|
|
113
|
+
? "bg-brand/10 text-brand"
|
|
114
|
+
: "bg-secondary text-muted-foreground/50"}`, children: [on, "/", g.tools.length] })] }), g.core ? (_jsx("span", { className: "shrink-0 text-[12px] text-muted-foreground", children: "Always on" })) : (_jsxs("div", { onClick: (e) => e.stopPropagation(), className: "flex shrink-0 items-center gap-2 text-[12px] text-muted-foreground", children: ["Enable all", _jsx(Toggle, { checked: allOn, onChange: () => toggleGroup(g, !allOn), disabled: saving, label: `Toggle all ${g.label}` })] }))] }), isOpen && (_jsx("div", { className: "mt-2 overflow-hidden rounded-lg border border-border bg-card", children: tools.map((tool, i) => (_jsxs("div", { className: `flex items-center gap-3 px-3.5 py-2.5 ${i > 0 ? "border-t border-border" : ""}`, children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-mono text-[12px] text-foreground", children: tool.name }), _jsx("div", { className: "mt-0.5 text-[12px] leading-snug text-muted-foreground", children: tool.description })] }), _jsx(Toggle, { checked: toolOn(tool.name, allowed, g.core), onChange: () => toggleTool(g, tool.name), disabled: saving || g.core, label: tool.name })] }, tool.name))) }))] }, g.key));
|
|
115
|
+
}) }))] }));
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=tools-tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-tab.js","sourceRoot":"","sources":["../../../src/v2/agents/tools-tab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type VaultEntry = {
|
|
2
|
+
service: string;
|
|
3
|
+
type: string;
|
|
4
|
+
label?: string | null;
|
|
5
|
+
keys?: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare function VaultTab({ projectId, agentName, initialEntries, }: {
|
|
8
|
+
projectId: string;
|
|
9
|
+
agentName: string;
|
|
10
|
+
initialEntries: VaultEntry[];
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=vault-tab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-tab.d.ts","sourceRoot":"","sources":["../../../src/v2/agents/vault-tab.tsx"],"names":[],"mappings":"AAuBA,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAKF,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,SAAS,EACT,cAAc,GACf,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,UAAU,EAAE,CAAC;CAC9B,2CAsHA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useMutation, useQuery, useQueryClient } from "../host";
|
|
5
|
+
import { Plus, Trash, CircleNotch, Lock } from "@phosphor-icons/react/dist/ssr";
|
|
6
|
+
import { usePolpoClient } from "../host";
|
|
7
|
+
import { Button } from "../ui/button";
|
|
8
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../ui/select";
|
|
9
|
+
import { EmptyBox } from "../ui/bits";
|
|
10
|
+
import { TYPE_OPTIONS, TYPE_FIELDS, typeLabel, buildCredentials, } from "../host";
|
|
11
|
+
const INPUT = "h-8 w-full rounded-md border border-border bg-background px-2.5 text-[13px] text-foreground placeholder:text-muted-foreground/40 focus:border-ring/50 focus:outline-none";
|
|
12
|
+
export function VaultTab({ projectId, agentName, initialEntries, }) {
|
|
13
|
+
const polpo = usePolpoClient(projectId);
|
|
14
|
+
const queryClient = useQueryClient();
|
|
15
|
+
const [adding, setAdding] = useState(false);
|
|
16
|
+
const [confirm, setConfirm] = useState(null);
|
|
17
|
+
const { data: entries = [] } = useQuery({
|
|
18
|
+
queryKey: ["vault", projectId, agentName],
|
|
19
|
+
queryFn: () => polpo.listVaultEntries(agentName),
|
|
20
|
+
initialData: initialEntries,
|
|
21
|
+
});
|
|
22
|
+
const invalidate = () => queryClient.invalidateQueries({ queryKey: ["vault", projectId, agentName] });
|
|
23
|
+
const remove = useMutation({
|
|
24
|
+
mutationFn: (service) => polpo.removeVaultEntry(agentName, service),
|
|
25
|
+
onSuccess: async () => {
|
|
26
|
+
setConfirm(null);
|
|
27
|
+
await invalidate();
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "mb-3 flex items-center justify-between", children: [_jsx("p", { className: "text-[13px] text-muted-foreground", children: "Encrypted secrets this agent can read at runtime. Values are write-only." }), !adding && (_jsxs(Button, { size: "sm", onClick: () => setAdding(true), children: [_jsx(Plus, { size: 15, weight: "bold" }), "Add credential"] }))] }), adding && (_jsx("div", { className: "mb-4", children: _jsx(AddCredentialForm, { onCancel: () => setAdding(false), onSave: async (payload) => {
|
|
31
|
+
await polpo.saveVaultEntry({ agent: agentName, ...payload });
|
|
32
|
+
await invalidate();
|
|
33
|
+
setAdding(false);
|
|
34
|
+
} }) })), entries.length === 0 ? (_jsx(EmptyBox, { children: "No credentials stored for this agent." })) : (_jsxs("div", { className: "overflow-hidden rounded-lg border border-border bg-card", children: [_jsxs("div", { className: "flex border-b border-border bg-muted/40 px-3.5 py-2 text-[11px] font-medium uppercase tracking-[0.06em] text-muted-foreground", children: [_jsx("span", { className: "flex-1", children: "Service" }), _jsx("span", { className: "w-24", children: "Type" }), _jsx("span", { className: "w-40", children: "Keys" }), _jsx("span", { className: "w-24 text-right" })] }), entries.map((e) => (_jsxs("div", { className: "flex items-center border-b border-border px-3.5 py-2.5 last:border-0", children: [_jsxs("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx(Lock, { size: 13, className: "shrink-0 text-muted-foreground/50" }), _jsx("span", { className: "truncate font-mono text-[12px] text-foreground", children: e.service }), e.label && (_jsx("span", { className: "truncate text-[11px] text-muted-foreground/60", children: e.label }))] }), _jsx("span", { className: "w-24", children: _jsx("span", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: typeLabel[e.type] ?? e.type }) }), _jsx("span", { className: "w-40 truncate font-mono text-[11px] text-muted-foreground/60", children: e.keys?.join(", ") || "—" }), _jsx("span", { className: "flex w-24 items-center justify-end", children: confirm === e.service ? (_jsxs("span", { className: "flex items-center gap-2 text-[12px]", children: [_jsx("button", { onClick: () => remove.mutate(e.service), disabled: remove.isPending, className: "text-destructive hover:underline", children: remove.isPending ? "…" : "Delete" }), _jsx("button", { onClick: () => setConfirm(null), className: "text-muted-foreground hover:text-foreground", children: "Cancel" })] })) : (_jsx("button", { onClick: () => setConfirm(e.service), "aria-label": `Delete ${e.service}`, className: "grid h-7 w-7 place-items-center rounded-md text-muted-foreground/60 transition-colors hover:bg-secondary hover:text-destructive", children: _jsx(Trash, { size: 14 }) })) })] }, e.service)))] }))] }));
|
|
35
|
+
}
|
|
36
|
+
function AddCredentialForm({ onCancel, onSave, }) {
|
|
37
|
+
const [type, setType] = useState("api_key");
|
|
38
|
+
const [service, setService] = useState("");
|
|
39
|
+
const [label, setLabel] = useState("");
|
|
40
|
+
const [values, setValues] = useState({});
|
|
41
|
+
const [customRows, setCustomRows] = useState([
|
|
42
|
+
{ k: "", v: "" },
|
|
43
|
+
]);
|
|
44
|
+
const [saving, setSaving] = useState(false);
|
|
45
|
+
const [error, setError] = useState(null);
|
|
46
|
+
async function submit() {
|
|
47
|
+
setError(null);
|
|
48
|
+
if (!service.trim()) {
|
|
49
|
+
setError("Service name is required.");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let credentials;
|
|
53
|
+
try {
|
|
54
|
+
credentials = buildCredentials(type, values, customRows);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
setError(e instanceof Error ? e.message : "Invalid fields");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setSaving(true);
|
|
61
|
+
try {
|
|
62
|
+
await onSave({
|
|
63
|
+
service: service.trim(),
|
|
64
|
+
type,
|
|
65
|
+
label: label.trim() || undefined,
|
|
66
|
+
credentials,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
setError(e instanceof Error ? e.message : "Save failed");
|
|
71
|
+
setSaving(false);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return (_jsxs("div", { className: "rounded-lg border border-border bg-card p-4", children: [_jsx("div", { className: "mb-3 flex items-center justify-between", children: _jsx("span", { className: "text-[13px] font-medium text-foreground", children: "New credential" }) }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-3", children: [_jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-[11px] text-muted-foreground", children: "Type" }), _jsxs(Select, { value: type, onValueChange: (v) => {
|
|
75
|
+
if (!v)
|
|
76
|
+
return;
|
|
77
|
+
setType(v);
|
|
78
|
+
setValues({});
|
|
79
|
+
}, children: [_jsx(SelectTrigger, { size: "sm", className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: TYPE_OPTIONS.map((t) => (_jsx(SelectItem, { value: t, children: typeLabel[t] }, t))) })] })] }), _jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-[11px] text-muted-foreground", children: "Service" }), _jsx("input", { value: service, onChange: (e) => setService(e.target.value), placeholder: "e.g. openai, gmail", className: `${INPUT} font-mono` })] }), _jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-[11px] text-muted-foreground", children: "Label (optional)" }), _jsx("input", { value: label, onChange: (e) => setLabel(e.target.value), placeholder: "Personal key", className: INPUT })] })] }), _jsx("div", { className: "mt-3 grid gap-3 sm:grid-cols-2", children: type === "custom"
|
|
80
|
+
? customRows.map((row, i) => (_jsxs("div", { className: "flex gap-2", children: [_jsx("input", { value: row.k, onChange: (e) => {
|
|
81
|
+
const next = [...customRows];
|
|
82
|
+
next[i] = { ...next[i], k: e.target.value };
|
|
83
|
+
if (i === customRows.length - 1 && e.target.value)
|
|
84
|
+
next.push({ k: "", v: "" });
|
|
85
|
+
setCustomRows(next);
|
|
86
|
+
}, placeholder: "key", className: `${INPUT} font-mono` }), _jsx("input", { value: row.v, onChange: (e) => {
|
|
87
|
+
const next = [...customRows];
|
|
88
|
+
next[i] = { ...next[i], v: e.target.value };
|
|
89
|
+
setCustomRows(next);
|
|
90
|
+
}, placeholder: "value", className: INPUT })] }, i)))
|
|
91
|
+
: TYPE_FIELDS[type].map((f) => (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-[11px] text-muted-foreground", children: [f.label, f.optional && (_jsx("span", { className: "text-muted-foreground/40", children: " \u00B7 optional" }))] }), _jsx("input", { type: f.secret ? "password" : "text", value: values[f.k] ?? "", onChange: (e) => setValues((v) => ({ ...v, [f.k]: e.target.value })), placeholder: f.placeholder, className: INPUT })] }, f.k))) }), error && _jsx("p", { className: "mt-3 text-[12px] text-destructive", children: error }), _jsxs("div", { className: "mt-4 flex items-center gap-2", children: [_jsx(Button, { size: "sm", onClick: submit, disabled: saving, children: saving ? (_jsxs(_Fragment, { children: [_jsx(CircleNotch, { size: 14, className: "animate-spin" }), "Saving\u2026"] })) : ("Save credential") }), _jsx(Button, { size: "sm", variant: "ghost", onClick: onCancel, disabled: saving, children: "Cancel" })] })] }));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=vault-tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-tab.js","sourceRoot":"","sources":["../../../src/v2/agents/vault-tab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface FileEntry {
|
|
2
|
+
name: string;
|
|
3
|
+
type: "file" | "directory";
|
|
4
|
+
size?: number;
|
|
5
|
+
mimeType?: string;
|
|
6
|
+
modifiedAt?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DriveVolume {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
label: string | null;
|
|
12
|
+
mode: "file-drive" | "code-drive";
|
|
13
|
+
mountPath: string | null;
|
|
14
|
+
path: string;
|
|
15
|
+
absolutePath: string;
|
|
16
|
+
totalFiles: number;
|
|
17
|
+
totalSize: number;
|
|
18
|
+
sync?: {
|
|
19
|
+
ignore?: string[];
|
|
20
|
+
} | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* File URL on the data plane. A top-level navigation to this carries the
|
|
24
|
+
* cross-subdomain session cookie, so the browser can render files natively.
|
|
25
|
+
*/
|
|
26
|
+
export declare function fileUrl(projectId: string, path: string, download?: boolean): string;
|
|
27
|
+
export declare function modeLabel(mode?: DriveVolume["mode"]): "Code Drive" | "File Drive";
|
|
28
|
+
export declare function driveLabel(drive: DriveVolume): string;
|
|
29
|
+
export declare function VolumeModeIcon({ mode, size, className, }: {
|
|
30
|
+
mode?: DriveVolume["mode"];
|
|
31
|
+
size?: number;
|
|
32
|
+
className?: string;
|
|
33
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export declare function modeDescription(mode?: DriveVolume["mode"]): "For codebases and shell work. Polpo hydrates it into a real sandbox folder, then syncs useful changes back." | "For documents, uploaded assets, memory, skills, and files agents read or write on demand." | "Project volume.";
|
|
35
|
+
export declare function formatSize(bytes?: number): string;
|
|
36
|
+
export declare function EntryIcon({ entry }: {
|
|
37
|
+
entry: FileEntry;
|
|
38
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=file-browser-primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-browser-primitives.d.ts","sourceRoot":"","sources":["../../../src/v2/files/file-browser-primitives.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,YAAY,GAAG,YAAY,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,IAAI,CAAC;CACV;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,UAKxE;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,+BASnD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,UAE5C;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,IAAS,EACT,SAAS,GACV,EAAE;IACD,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CASA;AAED,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,mOASzD;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,UAOxC;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,2CAcxD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Code, File as FileIcon, FilePdf, FileText, FileZip, FolderOpen, ImageSquare, MusicNotes, VideoCamera, } from "@phosphor-icons/react";
|
|
4
|
+
/**
|
|
5
|
+
* File URL on the data plane. A top-level navigation to this carries the
|
|
6
|
+
* cross-subdomain session cookie, so the browser can render files natively.
|
|
7
|
+
*/
|
|
8
|
+
export function fileUrl(projectId, path, download = false) {
|
|
9
|
+
void projectId;
|
|
10
|
+
return `/api/polpo/files/read?path=${encodeURIComponent(path)}${download ? "&download=1" : ""}`;
|
|
11
|
+
}
|
|
12
|
+
export function modeLabel(mode) {
|
|
13
|
+
switch (mode) {
|
|
14
|
+
case "code-drive":
|
|
15
|
+
return "Code Drive";
|
|
16
|
+
case "file-drive":
|
|
17
|
+
return "File Drive";
|
|
18
|
+
default:
|
|
19
|
+
return "File Drive";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function driveLabel(drive) {
|
|
23
|
+
return drive.label?.trim() || drive.name;
|
|
24
|
+
}
|
|
25
|
+
export function VolumeModeIcon({ mode, size = 16, className, }) {
|
|
26
|
+
switch (mode) {
|
|
27
|
+
case "code-drive":
|
|
28
|
+
return _jsx(Code, { size: size, className: className });
|
|
29
|
+
case "file-drive":
|
|
30
|
+
return _jsx(FolderOpen, { size: size, className: className, weight: "fill" });
|
|
31
|
+
default:
|
|
32
|
+
return _jsx(FolderOpen, { size: size, className: className, weight: "fill" });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function modeDescription(mode) {
|
|
36
|
+
switch (mode) {
|
|
37
|
+
case "code-drive":
|
|
38
|
+
return "For codebases and shell work. Polpo hydrates it into a real sandbox folder, then syncs useful changes back.";
|
|
39
|
+
case "file-drive":
|
|
40
|
+
return "For documents, uploaded assets, memory, skills, and files agents read or write on demand.";
|
|
41
|
+
default:
|
|
42
|
+
return "Project volume.";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function formatSize(bytes) {
|
|
46
|
+
if (!bytes)
|
|
47
|
+
return "-";
|
|
48
|
+
if (bytes < 1024)
|
|
49
|
+
return `${bytes} B`;
|
|
50
|
+
if (bytes < 1024 * 1024)
|
|
51
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
52
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
53
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
54
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
|
|
55
|
+
}
|
|
56
|
+
export function EntryIcon({ entry }) {
|
|
57
|
+
if (entry.type === "directory")
|
|
58
|
+
return _jsx(FolderOpen, { size: 16, weight: "fill", className: "text-brand/70" });
|
|
59
|
+
const m = entry.mimeType ?? "";
|
|
60
|
+
const cls = "text-muted-foreground";
|
|
61
|
+
if (m.startsWith("image/"))
|
|
62
|
+
return _jsx(ImageSquare, { size: 16, className: cls });
|
|
63
|
+
if (m.startsWith("audio/"))
|
|
64
|
+
return _jsx(MusicNotes, { size: 16, className: cls });
|
|
65
|
+
if (m.startsWith("video/"))
|
|
66
|
+
return _jsx(VideoCamera, { size: 16, className: cls });
|
|
67
|
+
if (m === "application/pdf")
|
|
68
|
+
return _jsx(FilePdf, { size: 16, className: cls });
|
|
69
|
+
if (m.includes("zip") || m.includes("tar"))
|
|
70
|
+
return _jsx(FileZip, { size: 16, className: cls });
|
|
71
|
+
if (m.startsWith("text/") || m === "application/json")
|
|
72
|
+
return _jsx(FileText, { size: 16, className: cls });
|
|
73
|
+
return _jsx(FileIcon, { size: 16, className: cls });
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=file-browser-primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-browser-primitives.js","sourceRoot":"","sources":["../../../src/v2/files/file-browser-primitives.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FileEntry } from "./file-browser-primitives.js";
|
|
2
|
+
export declare function FileDirectoryBrowser({ projectId, rootPath, compact, initialEntries, onFileSelect, emptyLabel, }: {
|
|
3
|
+
projectId: string;
|
|
4
|
+
rootPath: string;
|
|
5
|
+
compact?: boolean;
|
|
6
|
+
initialEntries?: FileEntry[];
|
|
7
|
+
onFileSelect?: (filePath: string, fileName: string) => void;
|
|
8
|
+
emptyLabel?: string;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=file-directory-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-directory-browser.d.ts","sourceRoot":"","sources":["../../../src/v2/files/file-directory-browser.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,8BAA8B,CAAC;AAMtC,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,OAAe,EACf,cAAc,EACd,YAAY,EACZ,UAA8B,GAC/B,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,2CA8HA"}
|