@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,10 @@
|
|
|
1
|
+
export { Button } from "../ui/button.js";
|
|
2
|
+
export { PageBody, PageHeader } from "../ui/page-header.js";
|
|
3
|
+
export { RefreshButton } from "../ui/refresh-button.js";
|
|
4
|
+
export declare function usePolpoClient(_projectId: string): {
|
|
5
|
+
saveMemory: (content: string) => Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare function Markdown({ content }: {
|
|
8
|
+
content: string;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=memory-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-host.d.ts","sourceRoot":"","sources":["../../../src/v2/views/memory-host.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIxD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM;;EAGhD;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,2CAyBxD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { lazy, Suspense } from "react";
|
|
4
|
+
import { useMemory } from "@polpo-ai/react";
|
|
5
|
+
import { Skeleton } from "../ui/skeleton.js";
|
|
6
|
+
export { Button } from "../ui/button.js";
|
|
7
|
+
export { PageBody, PageHeader } from "../ui/page-header.js";
|
|
8
|
+
export { RefreshButton } from "../ui/refresh-button.js";
|
|
9
|
+
const ReactMarkdown = lazy(() => import("react-markdown"));
|
|
10
|
+
export function usePolpoClient(_projectId) {
|
|
11
|
+
const { saveMemory } = useMemory();
|
|
12
|
+
return { saveMemory };
|
|
13
|
+
}
|
|
14
|
+
export function Markdown({ content }) {
|
|
15
|
+
return (_jsx("div", { className: "prose prose-sm prose-invert max-w-none\n prose-headings:font-semibold prose-headings:tracking-tight prose-headings:text-foreground\n prose-h1:text-lg prose-h2:text-sm prose-h3:text-xs\n prose-p:text-muted-foreground prose-p:leading-relaxed\n prose-li:text-muted-foreground prose-li:marker:text-muted-foreground/40\n prose-strong:text-foreground prose-strong:font-medium\n prose-code:text-xs prose-code:font-mono prose-code:bg-secondary prose-code:px-1 prose-code:py-0.5 prose-code:rounded\n prose-pre:bg-card prose-pre:border prose-pre:border-border prose-pre:rounded-lg\n prose-a:text-brand prose-a:no-underline hover:prose-a:underline\n ", children: _jsx(Suspense, { fallback: _jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-4 w-3/4" }), _jsx(Skeleton, { className: "h-3.5 w-full" }), _jsx(Skeleton, { className: "h-3.5 w-5/6" })] }), children: _jsx(ReactMarkdown, { children: content }) }) }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=memory-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-host.js","sourceRoot":"","sources":["../../../src/v2/views/memory-host.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAE3D,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;IACnC,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAAuB;IACvD,OAAO,CACL,cAAK,SAAS,EAAC,4qBASd,YACC,KAAC,QAAQ,IACP,QAAQ,EACN,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,EAClC,KAAC,QAAQ,IAAC,SAAS,EAAC,cAAc,GAAG,EACrC,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,IAChC,YAGR,KAAC,aAAa,cAAE,OAAO,GAAiB,GAC/B,GACP,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-project.d.ts","sourceRoot":"","sources":["../../../src/v2/views/memory-project.tsx"],"names":[],"mappings":"AAcA,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,OAAO,GACR,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,2CAqGA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Brain, CircleNotch, FloppyDisk, PencilSimple, } from "@phosphor-icons/react";
|
|
5
|
+
import { Button, Markdown, usePolpoClient } from "./memory-host.js";
|
|
6
|
+
const MEMORY_TEXTAREA_CLASS = "h-[calc(100vh-320px)] min-h-[360px] max-h-[900px] w-full resize-y rounded-lg border border-border bg-card p-4 font-mono text-[13px] leading-relaxed text-foreground placeholder:text-muted-foreground/40 focus:border-ring/50 focus:outline-none";
|
|
7
|
+
export function ProjectMemory({ projectId, initial, }) {
|
|
8
|
+
const polpo = usePolpoClient(projectId);
|
|
9
|
+
const [value, setValue] = useState(initial);
|
|
10
|
+
const [mode, setMode] = useState(initial ? "read" : "edit");
|
|
11
|
+
const [saving, setSaving] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const [savedAt, setSavedAt] = useState(initial);
|
|
14
|
+
const dirty = value !== savedAt;
|
|
15
|
+
async function save() {
|
|
16
|
+
setSaving(true);
|
|
17
|
+
setError(null);
|
|
18
|
+
try {
|
|
19
|
+
await polpo.saveMemory(value);
|
|
20
|
+
setSavedAt(value);
|
|
21
|
+
setMode("read");
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
setError(e instanceof Error ? e.message : "Save failed");
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
setSaving(false);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between gap-3", children: [_jsxs("span", { className: "font-mono text-[11px] text-muted-foreground/50", "data-tabular": true, children: [value.length, " chars \u00B7 ~", Math.ceil(value.length / 4), " tokens"] }), _jsx("div", { className: "flex items-center gap-2", children: mode === "read" ? (_jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: () => setMode("edit"), children: [_jsx(PencilSimple, { size: 15 }), "Refine"] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { size: "sm", onClick: save, disabled: !dirty || saving, children: saving ? (_jsxs(_Fragment, { children: [_jsx(CircleNotch, { size: 14, className: "animate-spin" }), "Saving..."] })) : (_jsxs(_Fragment, { children: [_jsx(FloppyDisk, { size: 14 }), "Save memory"] })) }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", disabled: saving, onClick: () => {
|
|
31
|
+
setValue(savedAt);
|
|
32
|
+
setError(null);
|
|
33
|
+
setMode(savedAt ? "read" : "edit");
|
|
34
|
+
}, children: "Cancel" })] })) })] }), mode === "read" ? (value.trim() ? (_jsx("div", { className: "rounded-lg border border-border bg-card px-4 py-3 text-[13px] leading-relaxed text-foreground", children: _jsx(Markdown, { content: value }) })) : (_jsxs("div", { className: "flex flex-col items-center gap-3 rounded-lg border border-dashed border-border px-3.5 py-12 text-center", children: [_jsx("span", { className: "grid h-11 w-11 place-items-center rounded-lg border border-border bg-secondary", children: _jsx(Brain, { size: 20, className: "text-muted-foreground" }) }), _jsx("span", { className: "text-[13px] text-muted-foreground", children: "No project memory yet. Click Refine to add it." })] }))) : (_jsx("textarea", { value: value, onChange: (e) => setValue(e.target.value), spellCheck: false, placeholder: "Shared facts, conventions, and context every agent should know...", className: MEMORY_TEXTAREA_CLASS })), error && _jsx("p", { className: "mt-2 text-[12px] text-destructive", children: error })] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=memory-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-project.js","sourceRoot":"","sources":["../../../src/v2/views/memory-project.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/v2/views/memory.tsx"],"names":[],"mappings":"AAQA,wBAAgB,UAAU,4CAgBzB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useMemory } from "@polpo-ai/react";
|
|
5
|
+
import { useDashboardHost } from "../../host.js";
|
|
6
|
+
import { ProjectMemory } from "./memory-project.js";
|
|
7
|
+
import { PageBody, PageHeader, RefreshButton } from "./memory-host.js";
|
|
8
|
+
export function MemoryView() {
|
|
9
|
+
const { project } = useDashboardHost();
|
|
10
|
+
const { memory, isLoading, error, refetch } = useMemory();
|
|
11
|
+
const [refreshing, setRefreshing] = useState(false);
|
|
12
|
+
return (_jsxs(PageBody, { children: [_jsx(PageHeader, { title: "Memory", description: "Shared context injected into every agent in this project.", actions: _jsx(RefreshButton, { busy: refreshing, onClick: () => { setRefreshing(true); void refetch().finally(() => setRefreshing(false)); } }) }), _jsx("div", { className: "mt-6", children: error ? _jsx("p", { className: "text-[12px] text-destructive", children: error.message }) : isLoading && !memory ? _jsx("div", { className: "h-[360px] animate-pulse rounded-lg border border-border bg-muted" }) : _jsx(ProjectMemory, { projectId: project.id, initial: memory?.content ?? "" }) })] }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/v2/views/memory.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAC1D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,CACL,MAAC,QAAQ,eACP,KAAC,UAAU,IACT,KAAK,EAAC,QAAQ,EACd,WAAW,EAAC,2DAA2D,EACvE,OAAO,EAAE,KAAC,aAAa,IAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GACzI,EACF,cAAK,SAAS,EAAC,MAAM,YAClB,KAAK,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,8BAA8B,YAAE,KAAK,CAAC,OAAO,GAAK,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,kEAAkE,GAAG,CAAC,CAAC,CAAC,KAAC,aAAa,IAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,GAAI,GAC7P,IACG,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type PlaygroundAgent, type PlaygroundHostAdapter } from "../playground/host.js";
|
|
2
|
+
type AgentWithLoops = PlaygroundAgent;
|
|
3
|
+
interface Props {
|
|
4
|
+
projectId: string;
|
|
5
|
+
projectName: string;
|
|
6
|
+
initialAgents: AgentWithLoops[];
|
|
7
|
+
initialAgent?: string;
|
|
8
|
+
initialLoop?: string;
|
|
9
|
+
host: PlaygroundHostAdapter;
|
|
10
|
+
}
|
|
11
|
+
export declare function PlaygroundView({ projectId, projectName, initialAgents, initialAgent, initialLoop, host, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default PlaygroundView;
|
|
13
|
+
//# sourceMappingURL=playground.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../../src/v2/views/playground.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAK/B,KAAK,cAAc,GAAG,eAAe,CAAC;AAEtC,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,IAAI,GACL,EAAE,KAAK,2CA6HP;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Playground v2 — a from-scratch agent debug surface (additive; the legacy
|
|
5
|
+
* `/playground` route is untouched). Chat in the middle (shared `<PolpoChat>`)
|
|
6
|
+
* with a new-chat landing (agent picker + loop modality switcher) shown while
|
|
7
|
+
* empty, and a collapsible, resizable canvas on the right (Trace + Drive),
|
|
8
|
+
* toggled from a small button in the top bar.
|
|
9
|
+
*/
|
|
10
|
+
import { useMemo, useState } from "react";
|
|
11
|
+
import { ChatCircle, SidebarSimple, WarningCircle, Plus, } from "@phosphor-icons/react";
|
|
12
|
+
import { PlaygroundHostProvider, usePlaygroundHost, } from "../playground/host.js";
|
|
13
|
+
import { ChatCanvas } from "../playground/chat-canvas.js";
|
|
14
|
+
const DEFAULT_LOOP_VALUE = "__polpo_default_loop__";
|
|
15
|
+
export function PlaygroundView({ projectId, projectName, initialAgents, initialAgent, initialLoop, host, }) {
|
|
16
|
+
const baseUrl = host.data.dataPlaneBaseUrl(projectId);
|
|
17
|
+
const { ChatLanding, PolpoChat } = host.components;
|
|
18
|
+
const [selectedAgent, setSelectedAgent] = useState((initialAgent && initialAgents.some((a) => a.name === initialAgent)
|
|
19
|
+
? initialAgent
|
|
20
|
+
: undefined) ?? initialAgents[0]?.name);
|
|
21
|
+
const selectedAgentConfig = useMemo(() => initialAgents.find((agent) => agent.name === selectedAgent), [initialAgents, selectedAgent]);
|
|
22
|
+
const assignedLoops = useMemo(() => Array.from(new Set(selectedAgentConfig?.assignedLoops ?? [])), [selectedAgentConfig]);
|
|
23
|
+
const loopOptions = useMemo(() => Array.from(new Set(assignedLoops)), [assignedLoops]);
|
|
24
|
+
const agentRefs = useMemo(() => initialAgents.map((a) => ({ name: a.name, role: a.role })), [initialAgents]);
|
|
25
|
+
const initialLoopValue = initialLoop && assignedLoops.includes(initialLoop) ? initialLoop : undefined;
|
|
26
|
+
const [selectedLoop, setSelectedLoop] = useState(initialLoopValue);
|
|
27
|
+
const [sessionId, setSessionId] = useState(undefined);
|
|
28
|
+
const [canvasOpen, setCanvasOpen] = useState(true);
|
|
29
|
+
const [canvasTab, setCanvasTab] = useState("trace");
|
|
30
|
+
const [chatKey, setChatKey] = useState(0);
|
|
31
|
+
const activeSelectedLoop = selectedLoop && assignedLoops.includes(selectedLoop) ? selectedLoop : undefined;
|
|
32
|
+
function handleSelectAgent(name) {
|
|
33
|
+
if (name === selectedAgent)
|
|
34
|
+
return;
|
|
35
|
+
setSelectedAgent(name);
|
|
36
|
+
setSelectedLoop(undefined);
|
|
37
|
+
}
|
|
38
|
+
// Start a fresh chat: drop the ?session= and remount the chat surface.
|
|
39
|
+
function newChat() {
|
|
40
|
+
const params = new URLSearchParams(Array.from(host.navigation.searchEntries()));
|
|
41
|
+
if (params.has("session")) {
|
|
42
|
+
params.delete("session");
|
|
43
|
+
const qs = params.toString();
|
|
44
|
+
host.navigation.replace(qs ? `?${qs}` : "?", { scroll: false });
|
|
45
|
+
}
|
|
46
|
+
setSessionId(undefined);
|
|
47
|
+
setChatKey((k) => k + 1);
|
|
48
|
+
}
|
|
49
|
+
const hasAgents = initialAgents.length > 0;
|
|
50
|
+
const landing = hasAgents ? (_jsx(ChatLanding, { greeting: "What should we test?", subtitle: "Pick an agent and mode, then send a message.", inputPlaceholder: "Send a message to start\u2026", header: _jsx(LandingControls, { agents: agentRefs, selectedAgent: selectedAgent, onSelectAgent: handleSelectAgent }) })) : undefined;
|
|
51
|
+
const composerControls = loopOptions.length > 0 ? (_jsx(LoopSelect, { loopOptions: loopOptions, selectedLoop: activeSelectedLoop, onSelectLoop: setSelectedLoop })) : undefined;
|
|
52
|
+
return (_jsx(PlaygroundHostProvider, { host: host, children: _jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsx(TopBar, { projectName: projectName, agent: selectedAgent, model: selectedAgentConfig?.model, projectId: projectId, missingModel: Boolean(selectedAgentConfig && !selectedAgentConfig.model), onNewChat: newChat, canvasOpen: canvasOpen, onToggleCanvas: () => setCanvasOpen((v) => !v), canToggle: hasAgents }), _jsxs("main", { className: "flex min-h-0 flex-1 overflow-hidden", children: [_jsx("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden", children: !hasAgents ? (_jsx("div", { className: "flex flex-1 items-center justify-center px-4 py-8", children: _jsx(EmptyState, { projectId: projectId }) })) : (_jsx(PolpoChat, { baseUrl: baseUrl, agent: selectedAgent, loop: activeSelectedLoop, onSession: setSessionId, landing: landing, composerControls: composerControls, gutter: "none" }, chatKey)) }), canvasOpen && hasAgents && (_jsx(ChatCanvas, { projectId: projectId, sessionId: sessionId, tab: canvasTab, onTabChange: setCanvasTab, onClose: () => setCanvasOpen(false) }))] })] }) }));
|
|
53
|
+
}
|
|
54
|
+
export default PlaygroundView;
|
|
55
|
+
/* ── Top bar ──────────────────────────────────────────────────────────── */
|
|
56
|
+
function TopBar({ projectName, agent, model, projectId, missingModel, onNewChat, canvasOpen, onToggleCanvas, canToggle, }) {
|
|
57
|
+
const host = usePlaygroundHost();
|
|
58
|
+
const { Link, Image, ProviderIcon } = host.components;
|
|
59
|
+
const [provider, modelName] = model?.includes("/")
|
|
60
|
+
? [model.split("/")[0], model.split("/").slice(1).join("/")]
|
|
61
|
+
: [undefined, model];
|
|
62
|
+
return (_jsxs("header", { className: "shrink-0 border-b border-border bg-card", children: [_jsxs("div", { className: "flex h-12 items-center gap-2.5 px-4", children: [_jsx(Link, { href: host.routes.projects(), "aria-label": "Polpo", className: "flex items-center", children: _jsx(Image, { src: host.logoSrc, alt: "Polpo", width: 83, height: 18, priority: true, className: "h-[18px] w-auto invert dark:invert-0" }) }), _jsx("span", { className: "select-none text-muted-foreground/50", "aria-hidden": true, children: "/" }), _jsx("span", { className: "text-[13px] font-medium text-foreground", children: "Playground" }), _jsx("span", { className: "hidden select-none text-muted-foreground/50 sm:inline", "aria-hidden": true, children: "/" }), _jsx("span", { className: "hidden max-w-[160px] truncate font-mono text-[12px] text-muted-foreground sm:inline", children: projectName }), agent && (_jsxs(_Fragment, { children: [_jsx("span", { className: "select-none text-muted-foreground/50", "aria-hidden": true, children: "/" }), _jsx("span", { className: "max-w-[160px] truncate font-mono text-[12px] font-medium text-foreground", children: agent }), modelName && (_jsxs("span", { title: model, className: "hidden h-6 max-w-[220px] items-center gap-1.5 rounded-md border border-border bg-background/60 px-2 text-[11px] text-muted-foreground md:inline-flex", children: [provider && (_jsx(ProviderIcon, { provider: provider, size: 14, type: "mono", className: "shrink-0 text-muted-foreground" })), _jsx("span", { className: "min-w-0 truncate font-mono", children: modelName })] }))] })), _jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [canToggle && (_jsxs("button", { type: "button", onClick: onNewChat, title: "New chat", className: "inline-flex h-8 shrink-0 items-center gap-1.5 rounded-md px-2 text-[13px] font-medium text-muted-foreground transition-colors hover:bg-secondary/60 hover:text-foreground", children: [_jsxs("span", { className: "relative grid h-4 w-4 place-items-center", children: [_jsx(ChatCircle, { size: 16 }), _jsx(Plus, { size: 8, weight: "bold", className: "absolute -right-0.5 -top-0.5 rounded-full bg-card text-current" })] }), _jsx("span", { className: "hidden sm:inline", children: "New chat" })] })), canToggle && (_jsxs("button", { type: "button", onClick: onToggleCanvas, "aria-pressed": canvasOpen, title: "Toggle the canvas (Trace + Drive)", className: `inline-flex h-8 shrink-0 items-center gap-1.5 rounded-md px-2 text-[13px] font-medium transition-colors ${canvasOpen
|
|
63
|
+
? "bg-brand/10 text-brand"
|
|
64
|
+
: "text-muted-foreground hover:bg-secondary/60 hover:text-foreground"}`, children: [_jsx(SidebarSimple, { size: 16, weight: canvasOpen ? "fill" : "regular" }), _jsx("span", { className: "hidden sm:inline", children: canvasOpen ? "Close panel" : "Show panel" })] }))] })] }), missingModel && agent && (_jsxs("div", { className: "flex min-h-8 items-center gap-2 border-t border-destructive/20 bg-destructive/5 px-4 py-1.5 text-destructive", children: [_jsx(WarningCircle, { size: 14, weight: "fill", className: "shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate text-[12px]", children: "This agent has no model configured \u2014 set one before testing." }), _jsx(Link, { href: host.routes.agent(projectId, agent), className: "shrink-0 text-[12px] font-medium underline underline-offset-2 hover:text-destructive/80", children: "Set model" })] }))] }));
|
|
65
|
+
}
|
|
66
|
+
function LandingControls({ agents, selectedAgent, onSelectAgent, }) {
|
|
67
|
+
const host = usePlaygroundHost();
|
|
68
|
+
const { ChatAgentSelector } = host.components;
|
|
69
|
+
return (_jsx("div", { className: "mb-7 flex justify-center", children: _jsx(ChatAgentSelector, { agents: agents, selected: selectedAgent, onSelect: onSelectAgent, variant: "command", fallbackLabel: "Select an agent", renderAvatar: host.showAvatars ? undefined : () => null, className: "!rounded-md border border-border bg-card !py-2 !text-[13px] !text-foreground shadow-sm hover:!bg-secondary/50" }) }));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Loop / mode selector — a compact button showing just the short label; click
|
|
73
|
+
* to open the options. Used identically in the landing and the composer.
|
|
74
|
+
*/
|
|
75
|
+
function LoopSelect({ loopOptions, selectedLoop, onSelectLoop, }) {
|
|
76
|
+
const { Select, SelectContent, SelectItem, SelectTrigger } = usePlaygroundHost().components;
|
|
77
|
+
if (loopOptions.length === 0)
|
|
78
|
+
return null;
|
|
79
|
+
const label = selectedLoop ?? "Standard";
|
|
80
|
+
return (_jsxs(Select, { value: selectedLoop ?? DEFAULT_LOOP_VALUE, onValueChange: (v) => onSelectLoop(v && v !== DEFAULT_LOOP_VALUE ? v : undefined), children: [_jsx(SelectTrigger, { className: "h-7 w-auto gap-1.5 rounded-md border-border px-2 font-mono text-[12px]", children: _jsx("span", { "data-slot": "select-value", className: "flex min-w-0 items-center gap-1.5", children: _jsx("span", { className: "max-w-[150px] truncate", children: label }) }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: DEFAULT_LOOP_VALUE, children: _jsx("span", { className: "inline-flex items-center gap-1.5", children: "Standard" }) }), loopOptions.map((loop) => (_jsx(SelectItem, { value: loop, children: loop }, loop)))] })] }));
|
|
81
|
+
}
|
|
82
|
+
/* ── Empty state ──────────────────────────────────────────────────────── */
|
|
83
|
+
function EmptyState({ projectId }) {
|
|
84
|
+
const host = usePlaygroundHost();
|
|
85
|
+
const { Link } = host.components;
|
|
86
|
+
return (_jsxs("div", { className: "flex max-w-sm flex-col items-center gap-4 rounded-xl border border-dashed border-border bg-card/40 p-10 text-center", children: [_jsx("span", { className: "grid h-11 w-11 place-items-center rounded-xl border border-border bg-secondary text-muted-foreground", children: _jsx(Plus, { size: 20 }) }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: "No agents yet" }), _jsxs("p", { className: "mt-1 text-[13px] text-muted-foreground", children: ["Create an agent from the dashboard, or deploy one from your CLI with", " ", _jsx("span", { className: "font-mono text-foreground", children: "polpo deploy" }), "."] })] }), _jsx(Link, { href: host.routes.agents(projectId), className: "mt-1 inline-flex h-9 items-center rounded-[var(--radius)] bg-brand px-3.5 text-[13px] font-medium text-brand-foreground transition-transform hover:scale-[1.02]", children: "Go to Agents" })] }));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=playground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.js","sourceRoot":"","sources":["../../../src/v2/views/playground.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type SessionsHostAdapter } from "../sessions/host.js";
|
|
2
|
+
export declare function SessionsDetailView({ projectId, runId, host, }: {
|
|
3
|
+
projectId: string;
|
|
4
|
+
runId: string;
|
|
5
|
+
host: SessionsHostAdapter;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SessionsDetailView;
|
|
8
|
+
//# sourceMappingURL=sessions-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-detail.d.ts","sourceRoot":"","sources":["../../../src/v2/views/sessions-detail.tsx"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAgB7B,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,KAAK,EACL,IAAI,GACL,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,mBAAmB,CAAC;CAC3B,2CA8BA;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { ArrowLeft, ArrowsClockwise, CaretRight, WarningCircle } from "@phosphor-icons/react";
|
|
4
|
+
import { SessionsHostProvider, useSessionsHost, } from "../sessions/host.js";
|
|
5
|
+
import { Trace } from "../sessions/trace-detail-view.js";
|
|
6
|
+
import { chatToItems, logToItems, loopToNodes, runToItems, } from "../sessions/trace-detail.js";
|
|
7
|
+
const KIND_LABEL = {
|
|
8
|
+
chat: "Chat",
|
|
9
|
+
task: "Task",
|
|
10
|
+
loop: "Loop",
|
|
11
|
+
};
|
|
12
|
+
export function SessionsDetailView({ projectId, runId, host, }) {
|
|
13
|
+
const decoded = decodeURIComponent(runId);
|
|
14
|
+
const sep = decoded.indexOf(":");
|
|
15
|
+
const kind = sep === -1 ? "loop" : decoded.slice(0, sep);
|
|
16
|
+
const realId = sep === -1 ? decoded : decoded.slice(sep + 1);
|
|
17
|
+
const { Link, PageBody } = host.components;
|
|
18
|
+
return (_jsx(SessionsHostProvider, { host: host, children: _jsxs(PageBody, { children: [_jsxs(Link, { href: host.routes.sessions(projectId), className: "mb-5 inline-flex items-center gap-1.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground", children: [_jsx(ArrowLeft, { size: 14 }), "Sessions"] }), kind === "loop" ? (_jsx(LoopRunView, { projectId: projectId, runId: realId })) : kind === "chat" ? (_jsx(ChatRunView, { projectId: projectId, sessionId: realId })) : kind === "task" ? (_jsx(TaskRunView, { projectId: projectId, taskId: realId })) : (host.notFound())] }) }));
|
|
19
|
+
}
|
|
20
|
+
export default SessionsDetailView;
|
|
21
|
+
/* ── Loop run — the step/tool trace ───────────────────────────────────── */
|
|
22
|
+
function LoopRunView({ projectId, runId, }) {
|
|
23
|
+
const host = useSessionsHost();
|
|
24
|
+
const resource = host.data.useLoopRun(projectId, runId);
|
|
25
|
+
const run = resource.data ?? null;
|
|
26
|
+
const err = resource.error?.message ?? null;
|
|
27
|
+
if (resource.isLoading && !run)
|
|
28
|
+
return _jsx(RunDetailLoading, { kind: "loop run", id: runId });
|
|
29
|
+
if (!run)
|
|
30
|
+
return _jsx(LoadError, { kind: "loop run", id: runId, error: err });
|
|
31
|
+
const nodes = loopToNodes((run.trace ?? []));
|
|
32
|
+
return (_jsxs("div", { children: [_jsx(RunHeader, { kind: "loop", title: run.loopName ?? `Loop run ${run.id.slice(0, 8)}`, agent: run.agentName, status: run.status, when: run.startedAt }), run.loopName && _jsx(LoopBand, { projectId: projectId, loopName: run.loopName }), run.error && (_jsx("div", { className: "mt-4 rounded-lg border border-destructive/30 bg-destructive/5 px-3.5 py-2.5 text-[13px] text-destructive", children: run.error })), _jsx(TraceSection, { items: nodes, actions: _jsx(host.components.RouteRefreshButton, { onClick: resource.refetch }) })] }));
|
|
33
|
+
}
|
|
34
|
+
/* ── Chat session — the conversation ──────────────────────────────────── */
|
|
35
|
+
function ChatRunView({ projectId, sessionId, }) {
|
|
36
|
+
const host = useSessionsHost();
|
|
37
|
+
const resource = host.data.useChatRun(projectId, sessionId);
|
|
38
|
+
const session = resource.data?.session;
|
|
39
|
+
const items = chatToItems((resource.data?.messages ?? []));
|
|
40
|
+
const err = resource.error?.message ?? null;
|
|
41
|
+
if (resource.isLoading && !resource.data)
|
|
42
|
+
return _jsx(RunDetailLoading, { kind: "session", id: sessionId });
|
|
43
|
+
if (err)
|
|
44
|
+
return _jsx(LoadError, { kind: "session", id: sessionId, error: err });
|
|
45
|
+
return (_jsxs("div", { children: [_jsx(RunHeader, { kind: "chat", title: session?.title ?? `Session ${sessionId.slice(0, 8)}`, agent: session?.agent, status: undefined, when: undefined }), _jsx(TraceSection, { items: items, actions: _jsx(host.components.RouteRefreshButton, { onClick: resource.refetch }) })] }));
|
|
46
|
+
}
|
|
47
|
+
/* ── Task — the session activity ──────────────────────────────────────── */
|
|
48
|
+
function TaskRunView({ projectId, taskId, }) {
|
|
49
|
+
const host = useSessionsHost();
|
|
50
|
+
const resource = host.data.useTaskRun(projectId, taskId);
|
|
51
|
+
const task = resource.data?.task ?? null;
|
|
52
|
+
const run = resource.data?.run ?? null;
|
|
53
|
+
const items = [
|
|
54
|
+
...runToItems(run),
|
|
55
|
+
...logToItems((resource.data?.entries ?? [])),
|
|
56
|
+
];
|
|
57
|
+
const err = resource.error?.message ?? null;
|
|
58
|
+
if (resource.isLoading && !resource.data)
|
|
59
|
+
return _jsx(RunDetailLoading, { kind: "task", id: taskId });
|
|
60
|
+
if (!task)
|
|
61
|
+
return _jsx(LoadError, { kind: "task", id: taskId, error: err });
|
|
62
|
+
const output = task.result?.output
|
|
63
|
+
?? task.result?.content
|
|
64
|
+
?? task.result?.stdout
|
|
65
|
+
?? run?.result?.stdout;
|
|
66
|
+
const failure = run?.result?.stderr || task.result?.stderr;
|
|
67
|
+
const loopName = task.loop;
|
|
68
|
+
return (_jsxs("div", { children: [_jsx(RunHeader, { kind: "task", title: task.title ?? `Task ${task.id.slice(0, 8)}`, agent: task.assignTo, status: task.status, when: run?.startedAt ?? task.createdAt }), loopName && _jsx(LoopBand, { projectId: projectId, loopName: loopName }), failure && _jsx(RunFailure, { message: failure, run: run }), _jsx(TraceSection, { items: items, actions: _jsx(host.components.RouteRefreshButton, { onClick: resource.refetch }) }), output != null && output !== "" && (_jsxs(_Fragment, { children: [_jsx("h2", { className: "mt-7 mb-3 text-[13px] font-medium text-foreground", children: "Output" }), _jsx("pre", { className: "max-h-[50vh] overflow-auto whitespace-pre-wrap rounded-lg border border-border bg-card p-4 font-mono text-[12px] leading-relaxed text-foreground", children: typeof output === "string" ? output : JSON.stringify(output, null, 2) })] }))] }));
|
|
69
|
+
}
|
|
70
|
+
function RunFailure({ message, run }) {
|
|
71
|
+
const duration = run?.result?.duration;
|
|
72
|
+
return (_jsxs("div", { className: "mt-5 flex items-start gap-3 rounded-md border border-destructive/25 bg-destructive/[0.04] px-3.5 py-3", children: [_jsx(WarningCircle, { size: 17, weight: "fill", className: "mt-0.5 shrink-0 text-destructive" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [_jsx("span", { className: "text-[13px] font-medium text-foreground", children: "Execution failed" }), run?.id && (_jsx("span", { className: "font-mono text-[11px] text-muted-foreground", children: run.id })), duration != null && (_jsxs("span", { className: "font-mono text-[11px] text-muted-foreground", children: [Math.max(0, duration), " ms"] }))] }), _jsx("pre", { className: "mt-1.5 whitespace-pre-wrap break-words font-mono text-[12px] leading-5 text-destructive", children: message })] })] }));
|
|
73
|
+
}
|
|
74
|
+
/* ── Shared pieces ────────────────────────────────────────────────────── */
|
|
75
|
+
function TraceSection({ items, actions, }) {
|
|
76
|
+
return (_jsx("div", { className: "mt-6", children: _jsx(Trace, { items: items, rightSlot: actions }) }));
|
|
77
|
+
}
|
|
78
|
+
function LoopBand({ projectId, loopName, }) {
|
|
79
|
+
const host = useSessionsHost();
|
|
80
|
+
const { Link } = host.components;
|
|
81
|
+
return (_jsxs(Link, { href: host.routes.loop(projectId, loopName), className: "mt-4 flex items-center gap-2.5 rounded-lg border border-brand/25 bg-brand/[0.06] px-3.5 py-2.5 transition-colors hover:border-brand/40", children: [_jsx(ArrowsClockwise, { size: 15, weight: "bold", className: "shrink-0 text-brand" }), _jsx("span", { className: "text-[12px] text-muted-foreground", children: "Ran inside loop" }), _jsx("span", { className: "font-mono text-[13px] font-medium text-foreground", children: loopName }), _jsx(CaretRight, { size: 13, className: "ml-auto text-muted-foreground/50" })] }));
|
|
82
|
+
}
|
|
83
|
+
function RunDetailLoading({ kind, id }) {
|
|
84
|
+
const Loading = useSessionsHost().components.RunDetailLoading;
|
|
85
|
+
return Loading ? _jsx(Loading, { kind: kind, id: id }) : null;
|
|
86
|
+
}
|
|
87
|
+
function LoadError({ kind, id, error, }) {
|
|
88
|
+
return (_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsxs("div", { className: "text-[14px] font-medium text-foreground", children: ["Couldn\u2019t load this ", kind] }), _jsx("p", { className: "mt-1.5 max-w-md text-[13px] leading-relaxed text-muted-foreground", children: error
|
|
89
|
+
? error
|
|
90
|
+
: "It may have been removed, or the data plane is still warming up — try refreshing in a moment." }), _jsx("p", { className: "mt-3 font-mono text-[11px] text-muted-foreground/50", children: id })] }));
|
|
91
|
+
}
|
|
92
|
+
function RunHeader({ kind, title, agent, status, when, }) {
|
|
93
|
+
const kindLabel = KIND_LABEL[kind] ?? kind;
|
|
94
|
+
const description = kind === "chat"
|
|
95
|
+
? agent
|
|
96
|
+
? `Conversation with ${agent}`
|
|
97
|
+
: "Conversation trace"
|
|
98
|
+
: kind === "task"
|
|
99
|
+
? agent
|
|
100
|
+
? `Task run assigned to ${agent}`
|
|
101
|
+
: "Task run activity"
|
|
102
|
+
: agent
|
|
103
|
+
? `Loop execution by ${agent}`
|
|
104
|
+
: "Loop execution trace";
|
|
105
|
+
return (_jsx("div", { className: "flex items-start justify-between gap-4", children: _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-2.5", children: [_jsx("h1", { className: "min-w-0 truncate font-mono text-[19px] font-semibold tracking-tight text-foreground", children: title }), _jsx("span", { className: "shrink-0 rounded border border-border bg-secondary/50 px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-[0.06em] text-muted-foreground", children: kindLabel })] }), _jsx("p", { className: "mt-0.5 text-[13px] text-muted-foreground", children: description }), (status || when) && (_jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-2", children: [status && (_jsx("span", { className: "rounded-md bg-secondary px-2.5 py-1 text-[12px] text-muted-foreground", children: status.replace(/_/g, " ") })), when && (_jsx("span", { className: "rounded-md bg-secondary px-2.5 py-1 font-mono text-[11px] text-muted-foreground", children: new Date(when).toLocaleString() }))] }))] }) }));
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=sessions-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-detail.js","sourceRoot":"","sources":["../../../src/v2/views/sessions-detail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SessionsHostAdapter } from "../sessions/host.js";
|
|
2
|
+
import type { RunRow } from "../sessions/trace-normalize.js";
|
|
3
|
+
export declare function SessionsView({ projectId, host, initial, }: {
|
|
4
|
+
projectId: string;
|
|
5
|
+
host: SessionsHostAdapter;
|
|
6
|
+
initial?: RunRow[];
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SessionsView;
|
|
9
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/v2/views/sessions.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAG7D,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,IAAI,EACJ,OAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CAQA;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { TraceTable } from "../sessions/trace-table.js";
|
|
4
|
+
export function SessionsView({ projectId, host, initial = [], }) {
|
|
5
|
+
const { PageBody } = host.components;
|
|
6
|
+
return (_jsx(PageBody, { children: _jsx(TraceTable, { projectId: projectId, initial: initial, host: host }) }));
|
|
7
|
+
}
|
|
8
|
+
export default SessionsView;
|
|
9
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/v2/views/sessions.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,EACT,IAAI,EACJ,OAAO,GAAG,EAAE,GAKb;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IAErC,OAAO,CACL,KAAC,QAAQ,cACP,KAAC,UAAU,IAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,GACzD,CACZ,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FileEntry } from "../files/file-browser-primitives";
|
|
2
|
+
export interface LoadedSkill {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
content: string;
|
|
6
|
+
source: string;
|
|
7
|
+
path: string;
|
|
8
|
+
tags?: string[];
|
|
9
|
+
category?: string;
|
|
10
|
+
assignedTo?: string[];
|
|
11
|
+
allowedTools?: string[];
|
|
12
|
+
}
|
|
13
|
+
export type { FileEntry } from "../files/file-browser-primitives";
|
|
14
|
+
export interface SkillsListEntry {
|
|
15
|
+
name: string;
|
|
16
|
+
assignedTo?: string[];
|
|
17
|
+
tags?: string[];
|
|
18
|
+
category?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function SkillDetail({ initialSkill, initialFiles, initialSkillsList, }: {
|
|
21
|
+
initialSkill: LoadedSkill | null;
|
|
22
|
+
initialFiles: FileEntry[];
|
|
23
|
+
initialSkillsList: SkillsListEntry[];
|
|
24
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export declare const SkillDetailView: typeof SkillDetail;
|
|
26
|
+
//# sourceMappingURL=skills-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-detail.d.ts","sourceRoot":"","sources":["../../../src/v2/views/skills-detail.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAWlE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,YAAY,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAC1B,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,EAAE;IACD,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,iBAAiB,EAAE,eAAe,EAAE,CAAC;CACtC,2CA+PA;AAED,eAAO,MAAM,eAAe,oBAAc,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
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 { useQuery } from "../host";
|
|
5
|
+
import { useParams, useRouter } from "../host";
|
|
6
|
+
import { Link } from "../host";
|
|
7
|
+
import { ArrowLeft, Users, Tag, Trash, WarningCircle, CircleNotch, } from "@phosphor-icons/react/dist/ssr";
|
|
8
|
+
import { usePolpoClient } from "../host";
|
|
9
|
+
import { announceNavigationStart } from "../host";
|
|
10
|
+
import { decodeTextEntities } from "../host";
|
|
11
|
+
import { Markdown } from "../host";
|
|
12
|
+
import { Button } from "../ui/button";
|
|
13
|
+
import { CodeBlock } from "../ui/code-block";
|
|
14
|
+
import { FileDirectoryBrowser } from "../files/file-directory-browser";
|
|
15
|
+
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "../ui/dialog";
|
|
16
|
+
export function SkillDetail({ initialSkill, initialFiles, initialSkillsList, }) {
|
|
17
|
+
const params = useParams();
|
|
18
|
+
const router = useRouter();
|
|
19
|
+
const id = params.id;
|
|
20
|
+
const name = decodeURIComponent(params.name);
|
|
21
|
+
const [viewingFile, setViewingFile] = useState(null);
|
|
22
|
+
const [viewingFileName, setViewingFileName] = useState(null);
|
|
23
|
+
const [confirmDelete, setConfirmDelete] = useState(false);
|
|
24
|
+
const [deleting, setDeleting] = useState(false);
|
|
25
|
+
const [delError, setDelError] = useState(null);
|
|
26
|
+
const polpo = usePolpoClient(id);
|
|
27
|
+
async function del() {
|
|
28
|
+
setDeleting(true);
|
|
29
|
+
setDelError(null);
|
|
30
|
+
try {
|
|
31
|
+
await polpo.deleteSkill(name);
|
|
32
|
+
const href = `/projects/${id}/skills`;
|
|
33
|
+
announceNavigationStart("skills", href);
|
|
34
|
+
router.push(href);
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
setDelError(e instanceof Error ? e.message : "Failed to delete");
|
|
38
|
+
setDeleting(false);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const { data: baseSkill } = useQuery({
|
|
42
|
+
queryKey: ["skill-detail", id, name],
|
|
43
|
+
queryFn: () => polpo.getSkillContent(name),
|
|
44
|
+
initialData: initialSkill ?? undefined,
|
|
45
|
+
staleTime: 5 * 60 * 1000,
|
|
46
|
+
});
|
|
47
|
+
const { data: skillsList } = useQuery({
|
|
48
|
+
queryKey: ["skills-with-assignments", id],
|
|
49
|
+
queryFn: () => polpo.getSkills(),
|
|
50
|
+
initialData: initialSkillsList,
|
|
51
|
+
staleTime: 30 * 1000,
|
|
52
|
+
});
|
|
53
|
+
const listEntry = skillsList?.find((s) => s.name === name);
|
|
54
|
+
const skill = baseSkill
|
|
55
|
+
? {
|
|
56
|
+
...baseSkill,
|
|
57
|
+
assignedTo: listEntry?.assignedTo ?? baseSkill.assignedTo,
|
|
58
|
+
tags: listEntry?.tags ?? baseSkill.tags,
|
|
59
|
+
category: listEntry?.category ?? baseSkill.category,
|
|
60
|
+
}
|
|
61
|
+
: baseSkill;
|
|
62
|
+
const { data: filePreview, isLoading: openingFile } = useQuery({
|
|
63
|
+
queryKey: ["file-preview", id, viewingFile],
|
|
64
|
+
queryFn: () => polpo.previewFile(viewingFile),
|
|
65
|
+
enabled: !!viewingFile,
|
|
66
|
+
});
|
|
67
|
+
if (!skill) {
|
|
68
|
+
return (_jsx("div", { className: "rounded-lg border border-dashed border-border p-8 text-center text-sm text-muted-foreground", children: "Skill not found." }));
|
|
69
|
+
}
|
|
70
|
+
return (_jsxs("div", { children: [_jsxs(Link, { href: `/projects/${id}/skills`, className: "inline-flex items-center gap-1.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground", children: [_jsx(ArrowLeft, { size: 14 }), "Skills"] }), _jsxs("div", { className: "mt-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsx("h1", { className: "min-w-0 font-mono text-[19px] font-semibold tracking-tight text-foreground", children: skill.name }), _jsxs(Button, { size: "sm", variant: "outline", className: "shrink-0 border-destructive/40 text-destructive hover:bg-destructive/10 hover:text-destructive", onClick: () => setConfirmDelete(true), children: [_jsx(Trash, { size: 14 }), "Delete"] })] }), skill.description && (_jsx("p", { className: "mt-2 text-[13px] text-muted-foreground", children: decodeTextEntities(skill.description) }))] }), _jsxs("div", { className: "mt-4 flex flex-wrap items-center gap-2", children: [skill.assignedTo && skill.assignedTo.length > 0 && (_jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-md bg-secondary px-2.5 py-1 text-[12px] text-muted-foreground", children: [_jsx(Users, { size: 13 }), skill.assignedTo.join(", ")] })), skill.category && (_jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-md bg-brand/10 px-2.5 py-1 text-[12px] font-medium text-brand", children: [_jsx(Tag, { size: 13 }), skill.category] })), skill.allowedTools && skill.allowedTools.length > 0 && (_jsx("span", { className: "rounded-md bg-secondary px-2.5 py-1 font-mono text-[11px] text-muted-foreground", children: skill.allowedTools.join(", ") }))] }), skill.tags && skill.tags.length > 0 && (_jsx("div", { className: "mt-2.5 flex flex-wrap gap-1.5", children: skill.tags.map((tag) => (_jsx("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] text-muted-foreground", children: tag }, tag))) })), _jsxs("div", { className: "mt-6 grid gap-6 lg:grid-cols-[1fr_360px]", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "mb-2.5 flex items-center justify-between gap-3", children: [_jsx("h2", { className: "min-w-0 truncate font-mono text-[12px] font-medium text-muted-foreground", children: viewingFileName ?? "SKILL.md" }), viewingFile && (_jsx("button", { onClick: () => {
|
|
71
|
+
setViewingFile(null);
|
|
72
|
+
setViewingFileName(null);
|
|
73
|
+
}, className: "text-[12px] text-muted-foreground transition-colors hover:text-foreground", children: "Back to SKILL.md" }))] }), _jsx("div", { className: "scrollbar-none max-h-[calc(100vh-16rem)] overflow-auto rounded-lg border border-border bg-card p-6", children: viewingFile && openingFile ? (_jsx(OpeningFile, { fileName: viewingFileName ?? viewingFile })) : viewingFile && filePreview ? (filePreview.type === "text" && filePreview.content ? (isMarkdownFile(filePreview.name) ? (_jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none", children: _jsx(Markdown, { content: filePreview.content }) })) : isCodeFile(filePreview.name) ? (_jsx(CodeBlock, { code: filePreview.content, lang: languageForFile(filePreview.name), bare: true, showCopy: false, wrap: true, maxHeightClass: "max-h-none", className: "-m-2" })) : (_jsx("pre", { className: "whitespace-pre-wrap break-words font-mono text-[12px] text-muted-foreground", children: filePreview.content }))) : (_jsx("p", { className: "text-[13px] text-muted-foreground", children: "Preview not available for this file type." }))) : (_jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none", children: _jsx(Markdown, { content: skill.content }) })) })] }), _jsxs("div", { className: "lg:sticky lg:top-8 lg:self-start", children: [_jsx("h2", { className: "mb-2.5 text-[11px] font-medium uppercase tracking-[0.1em] text-muted-foreground", children: "Files" }), _jsx(FileDirectoryBrowser, { projectId: id, rootPath: `.polpo/skills/${name}`, compact: true, initialEntries: initialFiles, onFileSelect: (filePath, fileName) => {
|
|
74
|
+
if (fileName === "SKILL.md") {
|
|
75
|
+
setViewingFile(null);
|
|
76
|
+
setViewingFileName(null);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
setViewingFile(filePath);
|
|
80
|
+
setViewingFileName(fileName);
|
|
81
|
+
} })] })] }), _jsx(Dialog, { open: confirmDelete, onOpenChange: (o) => {
|
|
82
|
+
if (!o)
|
|
83
|
+
setConfirmDelete(false);
|
|
84
|
+
}, children: _jsxs(DialogContent, { showCloseButton: false, className: "v2", children: [_jsxs(DialogHeader, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(WarningCircle, { size: 16, className: "text-destructive", weight: "fill" }), _jsx(DialogTitle, { children: "Delete skill" })] }), _jsxs(DialogDescription, { children: ["Deletes", " ", _jsx("span", { className: "font-mono font-medium text-foreground", children: name }), " ", "from this project and unassigns it from every agent. This can\u2019t be undone."] })] }), delError && _jsx("p", { className: "text-[12px] text-destructive", children: delError }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { render: _jsx(Button, { variant: "ghost", size: "sm" }), children: "Cancel" }), _jsx(Button, { variant: "destructive", size: "sm", disabled: deleting, onClick: del, children: deleting ? (_jsxs(_Fragment, { children: [_jsx(CircleNotch, { size: 14, className: "animate-spin" }), "Deleting\u2026"] })) : ("Delete skill") })] })] }) })] }));
|
|
85
|
+
}
|
|
86
|
+
export const SkillDetailView = SkillDetail;
|
|
87
|
+
function OpeningFile({ fileName }) {
|
|
88
|
+
return (_jsx("div", { className: "flex min-h-[220px] items-center justify-center", children: _jsxs("div", { className: "inline-flex items-center gap-2 rounded-md bg-secondary px-3 py-2 text-[13px] text-muted-foreground", children: [_jsx(CircleNotch, { size: 14, className: "animate-spin" }), _jsxs("span", { children: ["Opening", " ", _jsx("span", { className: "font-mono text-foreground", children: fileName })] })] }) }));
|
|
89
|
+
}
|
|
90
|
+
function isMarkdownFile(fileName) {
|
|
91
|
+
return /\.(md|mdx|markdown)$/i.test(fileName ?? "");
|
|
92
|
+
}
|
|
93
|
+
function isCodeFile(fileName) {
|
|
94
|
+
return languageForFile(fileName) !== "text";
|
|
95
|
+
}
|
|
96
|
+
function languageForFile(fileName) {
|
|
97
|
+
const ext = (fileName?.split(".").pop() ?? "").toLowerCase();
|
|
98
|
+
const languages = {
|
|
99
|
+
bash: "bash",
|
|
100
|
+
cjs: "javascript",
|
|
101
|
+
css: "css",
|
|
102
|
+
env: "bash",
|
|
103
|
+
html: "html",
|
|
104
|
+
js: "javascript",
|
|
105
|
+
json: "json",
|
|
106
|
+
jsx: "jsx",
|
|
107
|
+
mjs: "javascript",
|
|
108
|
+
py: "python",
|
|
109
|
+
rb: "ruby",
|
|
110
|
+
sh: "bash",
|
|
111
|
+
sql: "sql",
|
|
112
|
+
ts: "typescript",
|
|
113
|
+
tsx: "tsx",
|
|
114
|
+
txt: "text",
|
|
115
|
+
yaml: "yaml",
|
|
116
|
+
yml: "yaml",
|
|
117
|
+
};
|
|
118
|
+
return languages[ext] ?? "text";
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=skills-detail.js.map
|