@polpo-ai/dashboard 0.1.4 → 0.15.9
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/LICENSE +3 -1
- package/README.md +13 -40
- package/dist/components.d.ts +53 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +81 -0
- package/dist/components.js.map +1 -0
- package/dist/host.d.ts +24 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +18 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +2 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/views/agent-detail.d.ts +4 -0
- package/dist/views/agent-detail.d.ts.map +1 -0
- package/dist/views/agent-detail.js +31 -0
- package/dist/views/agent-detail.js.map +1 -0
- package/dist/views/agents.d.ts +2 -0
- package/dist/views/agents.d.ts.map +1 -0
- package/dist/views/agents.js +81 -0
- package/dist/views/agents.js.map +1 -0
- package/dist/views/files.d.ts +2 -0
- package/dist/views/files.d.ts.map +1 -0
- package/dist/views/files.js +30 -0
- package/dist/views/files.js.map +1 -0
- package/dist/views/memory.d.ts +2 -0
- package/dist/views/memory.d.ts.map +1 -0
- package/dist/views/memory.js +19 -0
- package/dist/views/memory.js.map +1 -0
- package/dist/views/playground.d.ts +4 -0
- package/dist/views/playground.d.ts.map +1 -0
- package/dist/views/playground.js +43 -0
- package/dist/views/playground.js.map +1 -0
- package/dist/views/session-detail.d.ts +4 -0
- package/dist/views/session-detail.d.ts.map +1 -0
- package/dist/views/session-detail.js +23 -0
- package/dist/views/session-detail.js.map +1 -0
- package/dist/views/sessions.d.ts +2 -0
- package/dist/views/sessions.d.ts.map +1 -0
- package/dist/views/sessions.js +17 -0
- package/dist/views/sessions.js.map +1 -0
- package/dist/views/skills.d.ts +2 -0
- package/dist/views/skills.d.ts.map +1 -0
- package/dist/views/skills.js +16 -0
- package/dist/views/skills.js.map +1 -0
- package/package.json +47 -83
- package/src/styles.css +169 -0
- package/app/(dashboard)/error.tsx +0 -47
- package/app/(dashboard)/layout.tsx +0 -41
- package/app/(dashboard)/loading.tsx +0 -30
- package/app/(dashboard)/projects/[id]/agents/[name]/memory/view.tsx +0 -36
- package/app/(dashboard)/projects/[id]/agents/[name]/models-view.tsx +0 -30
- package/app/(dashboard)/projects/[id]/agents/[name]/page.tsx +0 -51
- package/app/(dashboard)/projects/[id]/agents/[name]/prompt/view.tsx +0 -211
- package/app/(dashboard)/projects/[id]/agents/[name]/skills/view.tsx +0 -84
- package/app/(dashboard)/projects/[id]/agents/[name]/tools/view.tsx +0 -525
- package/app/(dashboard)/projects/[id]/agents/[name]/vault/view.tsx +0 -61
- package/app/(dashboard)/projects/[id]/agents/page.tsx +0 -39
- package/app/(dashboard)/projects/[id]/agents/view.tsx +0 -283
- package/app/(dashboard)/projects/[id]/layout.tsx +0 -11
- package/app/(dashboard)/projects/[id]/logs/page.tsx +0 -27
- package/app/(dashboard)/projects/[id]/logs/view.tsx +0 -184
- package/app/(dashboard)/projects/[id]/memory/page.tsx +0 -40
- package/app/(dashboard)/projects/[id]/memory/view.tsx +0 -17
- package/app/(dashboard)/projects/[id]/missions/[missionId]/page.tsx +0 -88
- package/app/(dashboard)/projects/[id]/missions/[missionId]/view.tsx +0 -569
- package/app/(dashboard)/projects/[id]/missions/page.tsx +0 -32
- package/app/(dashboard)/projects/[id]/missions/view.tsx +0 -282
- package/app/(dashboard)/projects/[id]/onboarding-checklist.tsx +0 -359
- package/app/(dashboard)/projects/[id]/page.tsx +0 -68
- package/app/(dashboard)/projects/[id]/playbooks/[name]/page.tsx +0 -5
- package/app/(dashboard)/projects/[id]/playbooks/[name]/view.tsx +0 -433
- package/app/(dashboard)/projects/[id]/playbooks/page.tsx +0 -5
- package/app/(dashboard)/projects/[id]/playbooks/view.tsx +0 -222
- package/app/(dashboard)/projects/[id]/schedules/page.tsx +0 -44
- package/app/(dashboard)/projects/[id]/schedules/view.tsx +0 -385
- package/app/(dashboard)/projects/[id]/sessions/[sessionId]/page.tsx +0 -55
- package/app/(dashboard)/projects/[id]/sessions/[sessionId]/raw-view.tsx +0 -373
- package/app/(dashboard)/projects/[id]/sessions/[sessionId]/view.tsx +0 -124
- package/app/(dashboard)/projects/[id]/sessions/page.tsx +0 -31
- package/app/(dashboard)/projects/[id]/sessions/view.tsx +0 -242
- package/app/(dashboard)/projects/[id]/settings/page.tsx +0 -52
- package/app/(dashboard)/projects/[id]/skills/[name]/page.tsx +0 -65
- package/app/(dashboard)/projects/[id]/skills/[name]/view.tsx +0 -227
- package/app/(dashboard)/projects/[id]/skills/page.tsx +0 -31
- package/app/(dashboard)/projects/[id]/skills/view.tsx +0 -243
- package/app/(dashboard)/projects/[id]/storage/page.tsx +0 -5
- package/app/(dashboard)/projects/[id]/storage/view.tsx +0 -385
- package/app/(dashboard)/projects/[id]/tasks/[taskId]/activity/view.tsx +0 -336
- package/app/(dashboard)/projects/[id]/tasks/[taskId]/assessment/view.tsx +0 -113
- package/app/(dashboard)/projects/[id]/tasks/[taskId]/blueprint.ts +0 -72
- package/app/(dashboard)/projects/[id]/tasks/[taskId]/output/view.tsx +0 -90
- package/app/(dashboard)/projects/[id]/tasks/[taskId]/page.tsx +0 -63
- package/app/(dashboard)/projects/[id]/tasks/[taskId]/view.tsx +0 -137
- package/app/(dashboard)/projects/[id]/tasks/page.tsx +0 -40
- package/app/(dashboard)/projects/[id]/tasks/view.tsx +0 -421
- package/app/(dashboard)/projects/[id]/view.tsx +0 -421
- package/app/(dashboard)/projects/[id]/welcome-banner.tsx +0 -156
- package/app/(dashboard)/projects/projects-list.tsx +0 -126
- package/app/(playground)/error.tsx +0 -42
- package/app/(playground)/layout.tsx +0 -27
- package/app/(playground)/projects/[id]/playground/page.tsx +0 -57
- package/app/(playground)/projects/[id]/playground/view.tsx +0 -167
- package/app/(playground)/projects/[id]/playground-legacy/page.tsx +0 -47
- package/app/(playground)/projects/[id]/playground-legacy/skeleton.tsx +0 -63
- package/app/(playground)/projects/[id]/playground-legacy/view.tsx +0 -237
- package/app/favicon.ico +0 -0
- package/app/globals.css +0 -385
- package/app/icon.svg +0 -6
- package/app/layout.tsx +0 -39
- package/app/page.tsx +0 -11
- package/components/ai-elements/code-block.tsx +0 -562
- package/components/dashboard/agent-capabilities.tsx +0 -326
- package/components/dashboard/agent-identity-header.tsx +0 -50
- package/components/dashboard/agent-model-picker.tsx +0 -195
- package/components/dashboard/agent-model-selector.tsx +0 -121
- package/components/dashboard/agent-picker-card.tsx +0 -46
- package/components/dashboard/agent-studio.tsx +0 -242
- package/components/dashboard/agents-table.tsx +0 -48
- package/components/dashboard/breadcrumb.tsx +0 -70
- package/components/dashboard/builder-chat.tsx +0 -418
- package/components/dashboard/chat-shell.tsx +0 -40
- package/components/dashboard/client-picker.tsx +0 -63
- package/components/dashboard/command-snippet.tsx +0 -77
- package/components/dashboard/connect-dialog.tsx +0 -680
- package/components/dashboard/copy-button.tsx +0 -45
- package/components/dashboard/copy-card.tsx +0 -48
- package/components/dashboard/file-browser.tsx +0 -161
- package/components/dashboard/hint.tsx +0 -22
- package/components/dashboard/inference-mode.tsx +0 -15
- package/components/dashboard/manual-refresh-button.tsx +0 -52
- package/components/dashboard/markdown.tsx +0 -31
- package/components/dashboard/mcp-install-panel.tsx +0 -196
- package/components/dashboard/mission-graph.tsx +0 -262
- package/components/dashboard/nav-tabs.tsx +0 -86
- package/components/dashboard/polpo-chat.tsx +0 -468
- package/components/dashboard/project-copilot.tsx +0 -253
- package/components/dashboard/sdk-snippet-panel.tsx +0 -194
- package/components/dashboard/section-header.tsx +0 -37
- package/components/dashboard/settings-form.tsx +0 -2477
- package/components/dashboard/sidebar.tsx +0 -385
- package/components/dashboard/skeletons.tsx +0 -1054
- package/components/dashboard/skills-install-wizard.tsx +0 -192
- package/components/dashboard/swarm-runs.tsx +0 -316
- package/components/dashboard/tab-toggle.tsx +0 -35
- package/components/dashboard/task-studio.tsx +0 -224
- package/components/dashboard/top-header.tsx +0 -203
- package/components/dashboard/webhook-deliveries.tsx +0 -234
- package/components/icons/coding-agents.tsx +0 -151
- package/components/json-ld.tsx +0 -8
- package/components/providers.tsx +0 -25
- package/components/ui/badge.tsx +0 -52
- package/components/ui/button.tsx +0 -60
- package/components/ui/card.tsx +0 -103
- package/components/ui/chart.tsx +0 -356
- package/components/ui/command.tsx +0 -196
- package/components/ui/dialog.tsx +0 -157
- package/components/ui/input-group.tsx +0 -158
- package/components/ui/input.tsx +0 -20
- package/components/ui/multi-select.tsx +0 -161
- package/components/ui/popover.tsx +0 -90
- package/components/ui/select.tsx +0 -201
- package/components/ui/separator.tsx +0 -25
- package/components/ui/sheet.tsx +0 -135
- package/components/ui/skeleton.tsx +0 -13
- package/components/ui/tabs.tsx +0 -56
- package/components/ui/textarea.tsx +0 -18
- package/components/ui/tooltip.tsx +0 -66
- package/hooks/use-desktop-sidebar.tsx +0 -50
- package/hooks/use-mobile-sidebar.tsx +0 -37
- package/index.ts +0 -17
- package/lib/api.ts +0 -194
- package/lib/builder-context.ts +0 -60
- package/lib/data-client.ts +0 -68
- package/lib/get-query-client.ts +0 -25
- package/lib/polpo-client.tsx +0 -49
- package/lib/tool-catalog.ts +0 -234
- package/lib/use-event-catalog.ts +0 -28
- package/lib/utils.ts +0 -6
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,44 +1,17 @@
|
|
|
1
1
|
# @polpo-ai/dashboard
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
You need a running Polpo server (the data plane). Then:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
cp .env.example .env.local # point NEXT_PUBLIC_API_URL at your server
|
|
17
|
-
pnpm install
|
|
18
|
-
pnpm dev # http://localhost:3000
|
|
3
|
+
Reusable v2 dashboard views for a Polpo runtime. The package contains only
|
|
4
|
+
project-scoped runtime UI; authentication, organizations, provisioning and
|
|
5
|
+
billing belong to the host application.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<PolpoProvider baseUrl={origin} apiPrefix="/api/polpo">
|
|
9
|
+
<DashboardProvider host={{ navigate, capabilities }}>
|
|
10
|
+
<AgentsView />
|
|
11
|
+
</DashboardProvider>
|
|
12
|
+
</PolpoProvider>
|
|
19
13
|
```
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## Config
|
|
25
|
-
|
|
26
|
-
| Env var | Default | What |
|
|
27
|
-
| --- | --- | --- |
|
|
28
|
-
| `NEXT_PUBLIC_API_URL` | `http://localhost:4000` | Your Polpo server base URL |
|
|
29
|
-
| `NEXT_PUBLIC_POLPO_API_PREFIX` | `/api/v1` | API root the server mounts under (the standalone server serves at `/api/v1`) |
|
|
30
|
-
| `NEXT_PUBLIC_POLPO_API_KEY` | — | `sk_...` key for the server (optional if it runs without auth) |
|
|
31
|
-
|
|
32
|
-
## How the data layer works
|
|
33
|
-
|
|
34
|
-
Views address the data plane by path (`/v1/agents`, `/v1/tasks`, …). `lib/data-client.ts`
|
|
35
|
-
drives a single `PolpoClient` from `@polpo-ai/sdk` (transport, auth, errors) and
|
|
36
|
-
re-wraps the result in the `{ ok, data }` envelope the views expect. Swapping the
|
|
37
|
-
server is just `NEXT_PUBLIC_API_URL`.
|
|
38
|
-
|
|
39
|
-
## Not wired yet
|
|
40
|
-
|
|
41
|
-
A few shell/settings surfaces still reach for cloud-only control-plane endpoints
|
|
42
|
-
(project name, BYOK keys, billing). These are gated to single-tenant stubs so the
|
|
43
|
-
dashboard runs; see the `TODO` in `lib/data-client.ts`. BYOK will be re-pointed to
|
|
44
|
-
the data-plane `vault` route.
|
|
15
|
+
Self-hosted installations should keep `POLPO_API_KEY` server-side and proxy
|
|
16
|
+
dashboard requests to the runtime. Never expose privileged keys through a
|
|
17
|
+
`NEXT_PUBLIC_*` variable.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ButtonHTMLAttributes, type ReactNode } from "react";
|
|
2
|
+
import { type ColumnDef } from "@tanstack/react-table";
|
|
3
|
+
export declare function PageHeader({ title, description, actions, }: {
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
description?: ReactNode;
|
|
6
|
+
actions?: ReactNode;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function PageBody({ children }: {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function Button({ variant, className, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
12
|
+
variant?: "primary" | "secondary" | "ghost" | "danger";
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function IconButton({ label, children, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
15
|
+
label: string;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function Modal({ open, title, description, onClose, children, }: {
|
|
19
|
+
open: boolean;
|
|
20
|
+
title: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
onClose: () => void;
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
25
|
+
export declare function Field({ label, hint, children, }: {
|
|
26
|
+
label: string;
|
|
27
|
+
hint?: string;
|
|
28
|
+
children: ReactNode;
|
|
29
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare function LoadingRows({ rows }: {
|
|
31
|
+
rows?: number;
|
|
32
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export type ColumnMeta = {
|
|
34
|
+
align?: "left" | "right" | "center";
|
|
35
|
+
width?: number;
|
|
36
|
+
cellClassName?: string;
|
|
37
|
+
hideOnMobile?: boolean;
|
|
38
|
+
};
|
|
39
|
+
export declare function DataTable<T>({ columns, data, getRowId, rowHref, onRowClick, searchPlaceholder, searchFn, rightSlot, filters, empty, pageSize, }: {
|
|
40
|
+
columns: ColumnDef<T, unknown>[];
|
|
41
|
+
data: T[];
|
|
42
|
+
getRowId?: (row: T) => string;
|
|
43
|
+
rowHref?: (row: T) => string;
|
|
44
|
+
onRowClick?: (row: T) => void;
|
|
45
|
+
searchPlaceholder?: string;
|
|
46
|
+
searchFn?: (row: T, query: string) => boolean;
|
|
47
|
+
rightSlot?: ReactNode;
|
|
48
|
+
filters?: ReactNode;
|
|
49
|
+
empty?: ReactNode;
|
|
50
|
+
pageSize?: number;
|
|
51
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
export declare function useStableColumns<T>(factory: () => ColumnDef<T, unknown>[], deps: unknown[]): ColumnDef<T, unknown>[];
|
|
53
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Fragment, useMemo, useState, } from "react";
|
|
4
|
+
import { CaretDown, CaretLeft, CaretRight, CaretUp, CaretUpDown, MagnifyingGlass, X, } from "@phosphor-icons/react";
|
|
5
|
+
import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table";
|
|
6
|
+
import { useDashboardHost } from "./host.js";
|
|
7
|
+
export function PageHeader({ title, description, actions, }) {
|
|
8
|
+
return (_jsxs("div", { className: "pd-page-header", children: [_jsxs("div", { className: "pd-min-w-0", children: [_jsx("h1", { children: title }), description ? _jsx("p", { children: description }) : null] }), actions ? _jsx("div", { className: "pd-actions", children: actions }) : null] }));
|
|
9
|
+
}
|
|
10
|
+
export function PageBody({ children }) {
|
|
11
|
+
return _jsx("div", { className: "pd-page-body", children: children });
|
|
12
|
+
}
|
|
13
|
+
export function Button({ variant = "primary", className = "", ...props }) {
|
|
14
|
+
return (_jsx("button", { ...props, className: `pd-button pd-button-${variant} ${className}`.trim() }));
|
|
15
|
+
}
|
|
16
|
+
export function IconButton({ label, children, ...props }) {
|
|
17
|
+
return (_jsx("button", { ...props, type: props.type ?? "button", className: "pd-icon-button", "aria-label": label, title: label, children: children }));
|
|
18
|
+
}
|
|
19
|
+
export function Modal({ open, title, description, onClose, children, }) {
|
|
20
|
+
if (!open)
|
|
21
|
+
return null;
|
|
22
|
+
return (_jsx("div", { className: "pd-modal-backdrop", role: "presentation", onMouseDown: onClose, children: _jsxs("section", { className: "pd-modal", role: "dialog", "aria-modal": "true", "aria-labelledby": "pd-modal-title", onMouseDown: (event) => event.stopPropagation(), children: [_jsxs("header", { children: [_jsxs("div", { children: [_jsx("h2", { id: "pd-modal-title", children: title }), description ? _jsx("p", { children: description }) : null] }), _jsx(IconButton, { label: "Close", onClick: onClose, children: _jsx(X, { size: 16 }) })] }), children] }) }));
|
|
23
|
+
}
|
|
24
|
+
export function Field({ label, hint, children, }) {
|
|
25
|
+
return (_jsxs("label", { className: "pd-field", children: [_jsx("span", { children: label }), children, hint ? _jsx("small", { children: hint }) : null] }));
|
|
26
|
+
}
|
|
27
|
+
export function LoadingRows({ rows = 5 }) {
|
|
28
|
+
return (_jsx("div", { className: "pd-loading-rows", "aria-label": "Loading", children: Array.from({ length: rows }, (_, index) => (_jsx("div", {}, index))) }));
|
|
29
|
+
}
|
|
30
|
+
export function DataTable({ columns, data, getRowId, rowHref, onRowClick, searchPlaceholder, searchFn, rightSlot, filters, empty, pageSize = 12, }) {
|
|
31
|
+
const host = useDashboardHost();
|
|
32
|
+
const [sorting, setSorting] = useState([]);
|
|
33
|
+
const [globalFilter, setGlobalFilter] = useState("");
|
|
34
|
+
const globalFilterFn = (row, _column, value) => {
|
|
35
|
+
const query = String(value).trim().toLowerCase();
|
|
36
|
+
if (!query)
|
|
37
|
+
return true;
|
|
38
|
+
if (searchFn)
|
|
39
|
+
return searchFn(row.original, query);
|
|
40
|
+
return Object.values(row.original).some((item) => String(item ?? "").toLowerCase().includes(query));
|
|
41
|
+
};
|
|
42
|
+
const table = useReactTable({
|
|
43
|
+
data,
|
|
44
|
+
columns,
|
|
45
|
+
state: { sorting, globalFilter },
|
|
46
|
+
onSortingChange: setSorting,
|
|
47
|
+
onGlobalFilterChange: setGlobalFilter,
|
|
48
|
+
globalFilterFn,
|
|
49
|
+
getRowId: getRowId ? (row) => getRowId(row) : undefined,
|
|
50
|
+
getCoreRowModel: getCoreRowModel(),
|
|
51
|
+
getSortedRowModel: getSortedRowModel(),
|
|
52
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
53
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
54
|
+
initialState: { pagination: { pageSize } },
|
|
55
|
+
});
|
|
56
|
+
const rows = table.getRowModel().rows;
|
|
57
|
+
const filtered = table.getFilteredRowModel().rows.length;
|
|
58
|
+
return (_jsxs("div", { className: "pd-table-stack", children: [searchPlaceholder || filters || rightSlot ? (_jsxs("div", { className: "pd-table-toolbar", children: [searchPlaceholder ? (_jsxs("div", { className: "pd-search", children: [_jsx(MagnifyingGlass, { size: 14 }), _jsx("input", { value: globalFilter, onChange: (event) => setGlobalFilter(event.target.value), placeholder: searchPlaceholder })] })) : null, filters, _jsx("div", { className: "pd-table-toolbar-right", children: rightSlot })] })) : null, _jsxs("div", { className: "pd-table-frame", children: [_jsx("div", { className: "pd-table-scroll", children: _jsxs("table", { children: [_jsx("thead", { children: table.getHeaderGroups().map((group) => (_jsx("tr", { children: group.headers.map((header) => {
|
|
59
|
+
const meta = header.column.columnDef.meta;
|
|
60
|
+
const sorted = header.column.getIsSorted();
|
|
61
|
+
return (_jsx("th", { style: meta?.width ? { width: meta.width } : undefined, "data-align": meta?.align, "data-mobile-hidden": meta?.hideOnMobile ? "true" : undefined, children: header.column.getCanSort() ? (_jsxs("button", { type: "button", onClick: header.column.getToggleSortingHandler(), children: [flexRender(header.column.columnDef.header, header.getContext()), sorted === "asc" ? _jsx(CaretUp, { size: 11 }) : sorted === "desc" ? _jsx(CaretDown, { size: 11 }) : _jsx(CaretUpDown, { size: 11 })] })) : flexRender(header.column.columnDef.header, header.getContext()) }, header.id));
|
|
62
|
+
}) }, group.id))) }), _jsxs("tbody", { children: [rows.map((row) => {
|
|
63
|
+
const href = rowHref?.(row.original);
|
|
64
|
+
const clickable = Boolean(href || onRowClick);
|
|
65
|
+
const openRow = () => {
|
|
66
|
+
if (href)
|
|
67
|
+
host.navigate(href);
|
|
68
|
+
else
|
|
69
|
+
onRowClick?.(row.original);
|
|
70
|
+
};
|
|
71
|
+
return (_jsx(Fragment, { children: _jsx("tr", { "data-clickable": clickable ? "true" : undefined, tabIndex: clickable ? 0 : undefined, onClick: clickable ? openRow : undefined, onKeyDown: clickable ? (event) => event.key === "Enter" && openRow() : undefined, children: row.getVisibleCells().map((cell) => {
|
|
72
|
+
const meta = cell.column.columnDef.meta;
|
|
73
|
+
return (_jsx("td", { "data-align": meta?.align, "data-mobile-hidden": meta?.hideOnMobile ? "true" : undefined, className: meta?.cellClassName, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id));
|
|
74
|
+
}) }) }, row.id));
|
|
75
|
+
}), rows.length === 0 ? (_jsx("tr", { children: _jsx("td", { className: "pd-empty-cell", colSpan: columns.length, children: empty ?? "Nothing here yet." }) })) : null] })] }) }), table.getPageCount() > 1 ? (_jsxs("div", { className: "pd-pagination", children: [_jsxs("span", { children: [table.getState().pagination.pageIndex * pageSize + 1, "-", Math.min((table.getState().pagination.pageIndex + 1) * pageSize, filtered), " of ", filtered] }), _jsxs("div", { children: [_jsx(IconButton, { label: "Previous page", disabled: !table.getCanPreviousPage(), onClick: () => table.previousPage(), children: _jsx(CaretLeft, { size: 13 }) }), _jsx(IconButton, { label: "Next page", disabled: !table.getCanNextPage(), onClick: () => table.nextPage(), children: _jsx(CaretRight, { size: 13 }) })] })] })) : null] })] }));
|
|
76
|
+
}
|
|
77
|
+
export function useStableColumns(factory, deps) {
|
|
78
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
79
|
+
return useMemo(factory, deps);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
package/dist/host.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface DashboardCapabilities {
|
|
3
|
+
multiProject?: boolean;
|
|
4
|
+
billing?: boolean;
|
|
5
|
+
managedConnections?: boolean;
|
|
6
|
+
managedGateway?: boolean;
|
|
7
|
+
provisioning?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface DashboardHost {
|
|
10
|
+
project: {
|
|
11
|
+
id: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
};
|
|
14
|
+
capabilities?: DashboardCapabilities;
|
|
15
|
+
navigate: (path: string) => void;
|
|
16
|
+
href?: (path: string) => string;
|
|
17
|
+
}
|
|
18
|
+
export declare function DashboardProvider({ host, children, }: {
|
|
19
|
+
host: DashboardHost;
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function useDashboardHost(): DashboardHost;
|
|
23
|
+
export declare function useDashboardHref(path: string): string;
|
|
24
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAID,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAIhD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD"}
|
package/dist/host.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
const DashboardHostContext = createContext(null);
|
|
5
|
+
export function DashboardProvider({ host, children, }) {
|
|
6
|
+
return (_jsx(DashboardHostContext.Provider, { value: host, children: children }));
|
|
7
|
+
}
|
|
8
|
+
export function useDashboardHost() {
|
|
9
|
+
const host = useContext(DashboardHostContext);
|
|
10
|
+
if (!host)
|
|
11
|
+
throw new Error("Dashboard views require <DashboardProvider>");
|
|
12
|
+
return host;
|
|
13
|
+
}
|
|
14
|
+
export function useDashboardHref(path) {
|
|
15
|
+
const host = useDashboardHost();
|
|
16
|
+
return host.href?.(path) ?? path;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAiBlE,MAAM,oBAAoB,GAAG,aAAa,CAAuB,IAAI,CAAC,CAAC;AAEvE,MAAM,UAAU,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,GAIT;IACC,OAAO,CACL,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YACvC,QAAQ,GACqB,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { DashboardProvider, useDashboardHost, useDashboardHref } from "./host.js";
|
|
2
|
+
export type { DashboardCapabilities, DashboardHost } from "./host.js";
|
|
3
|
+
export { PageBody, PageHeader, Button, IconButton, DataTable, LoadingRows } from "./components.js";
|
|
4
|
+
export type { ColumnMeta } from "./components.js";
|
|
5
|
+
export { AgentsView } from "./views/agents.js";
|
|
6
|
+
export { AgentDetailView } from "./views/agent-detail.js";
|
|
7
|
+
export { PlaygroundView } from "./views/playground.js";
|
|
8
|
+
export { SessionsView } from "./views/sessions.js";
|
|
9
|
+
export { SessionDetailView } from "./views/session-detail.js";
|
|
10
|
+
export { MemoryView } from "./views/memory.js";
|
|
11
|
+
export { SkillsView } from "./views/skills.js";
|
|
12
|
+
export { FilesView } from "./views/files.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnG,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { DashboardProvider, useDashboardHost, useDashboardHref } from "./host.js";
|
|
2
|
+
export { PageBody, PageHeader, Button, IconButton, DataTable, LoadingRows } from "./components.js";
|
|
3
|
+
export { AgentsView } from "./views/agents.js";
|
|
4
|
+
export { AgentDetailView } from "./views/agent-detail.js";
|
|
5
|
+
export { PlaygroundView } from "./views/playground.js";
|
|
6
|
+
export { SessionsView } from "./views/sessions.js";
|
|
7
|
+
export { SessionDetailView } from "./views/session-detail.js";
|
|
8
|
+
export { MemoryView } from "./views/memory.js";
|
|
9
|
+
export { SkillsView } from "./views/skills.js";
|
|
10
|
+
export { FilesView } from "./views/files.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnG,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-detail.d.ts","sourceRoot":"","sources":["../../src/views/agent-detail.tsx"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CA0CzD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { ArrowLeft, ChatCircleText, Trash } from "@phosphor-icons/react";
|
|
5
|
+
import { useAgents } from "@polpo-ai/react";
|
|
6
|
+
import { Button, Field, LoadingRows, PageHeader } from "../components.js";
|
|
7
|
+
import { useDashboardHost } from "../host.js";
|
|
8
|
+
export function AgentDetailView({ name }) {
|
|
9
|
+
const host = useDashboardHost();
|
|
10
|
+
const { agents, isLoading, updateAgent, isUpdatingAgent, removeAgent, isRemovingAgent } = useAgents();
|
|
11
|
+
const agent = agents.find((item) => item.name === name);
|
|
12
|
+
const [saved, setSaved] = useState(false);
|
|
13
|
+
useEffect(() => setSaved(false), [agent]);
|
|
14
|
+
if (isLoading && !agent)
|
|
15
|
+
return _jsx(LoadingRows, { rows: 6 });
|
|
16
|
+
if (!agent)
|
|
17
|
+
return _jsxs("div", { className: "pd-empty", children: [_jsx("strong", { children: "Agent not found" }), _jsx(Button, { variant: "secondary", onClick: () => host.navigate("/agents"), children: "Back to agents" })] });
|
|
18
|
+
async function submit(event) {
|
|
19
|
+
event.preventDefault();
|
|
20
|
+
const data = new FormData(event.currentTarget);
|
|
21
|
+
await updateAgent(name, {
|
|
22
|
+
role: String(data.get("role") ?? ""),
|
|
23
|
+
model: String(data.get("model") ?? ""),
|
|
24
|
+
systemPrompt: String(data.get("systemPrompt") ?? ""),
|
|
25
|
+
});
|
|
26
|
+
setSaved(true);
|
|
27
|
+
}
|
|
28
|
+
return (_jsxs("div", { className: "pd-view-stack", children: [_jsx(PageHeader, { title: agent.name, description: agent.role || "Agent configuration", actions: _jsxs(_Fragment, { children: [_jsxs(Button, { variant: "secondary", onClick: () => host.navigate("/agents"), children: [_jsx(ArrowLeft, { size: 15 }), "Agents"] }), _jsxs(Button, { onClick: () => host.navigate(`/playground?agent=${encodeURIComponent(name)}`), children: [_jsx(ChatCircleText, { size: 15 }), "Test agent"] })] }) }), _jsxs("form", { className: "pd-editor", onSubmit: (event) => void submit(event), children: [_jsxs("div", { className: "pd-editor-section", children: [_jsx("h2", { children: "Configuration" }), _jsx(Field, { label: "Role", children: _jsx("input", { name: "role", defaultValue: agent.role ?? "" }) }), _jsx(Field, { label: "Model", children: _jsx("input", { name: "model", defaultValue: agent.model ?? "", placeholder: "provider/model" }) }), _jsx(Field, { label: "Instructions", children: _jsx("textarea", { name: "systemPrompt", defaultValue: agent.systemPrompt ?? "", rows: 16 }) })] }), _jsxs("div", { className: "pd-editor-footer", children: [_jsxs(Button, { type: "button", variant: "danger", disabled: isRemovingAgent, onClick: async () => { if (!confirm(`Delete ${name}?`))
|
|
29
|
+
return; await removeAgent(name); host.navigate("/agents"); }, children: [_jsx(Trash, { size: 15 }), "Delete"] }), _jsxs("div", { children: [saved ? _jsx("span", { className: "pd-saved", children: "Saved" }) : null, _jsx(Button, { type: "submit", disabled: isUpdatingAgent, children: isUpdatingAgent ? "Saving..." : "Save agent" })] })] })] })] }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=agent-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-detail.js","sourceRoot":"","sources":["../../src/views/agent-detail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/views/agents.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,UAAU,4CAiFzB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useState } from "react";
|
|
4
|
+
import { Atom, CaretRight, Plus, ArrowClockwise } from "@phosphor-icons/react";
|
|
5
|
+
import { useAgents } from "@polpo-ai/react";
|
|
6
|
+
import { Button, DataTable, Field, IconButton, LoadingRows, Modal, PageHeader, } from "../components.js";
|
|
7
|
+
function modelLabel(model) {
|
|
8
|
+
return model?.trim() || "Not assigned";
|
|
9
|
+
}
|
|
10
|
+
export function AgentsView() {
|
|
11
|
+
const { agents, isLoading, error, addAgent, isAddingAgent, refetch } = useAgents();
|
|
12
|
+
const [createOpen, setCreateOpen] = useState(false);
|
|
13
|
+
const [refreshing, setRefreshing] = useState(false);
|
|
14
|
+
const columns = useMemo(() => [
|
|
15
|
+
{
|
|
16
|
+
id: "name",
|
|
17
|
+
header: "Agent",
|
|
18
|
+
accessorFn: (agent) => agent.name,
|
|
19
|
+
cell: ({ row }) => (_jsxs("div", { className: "pd-primary-cell", children: [_jsx(Atom, { size: 18, weight: "duotone" }), _jsxs("div", { children: [_jsx("strong", { children: row.original.name }), _jsx("span", { children: row.original.role || "Agent" })] })] })),
|
|
20
|
+
meta: { width: 340 },
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: "model",
|
|
24
|
+
header: "Model",
|
|
25
|
+
accessorFn: (agent) => modelLabel(agent.model),
|
|
26
|
+
cell: ({ getValue }) => _jsx("code", { children: String(getValue()) }),
|
|
27
|
+
meta: { width: 260, hideOnMobile: true },
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "tools",
|
|
31
|
+
header: "Tools",
|
|
32
|
+
accessorFn: (agent) => agent.allowedTools?.length ?? 0,
|
|
33
|
+
meta: { width: 80, align: "center", hideOnMobile: true },
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: "skills",
|
|
37
|
+
header: "Skills",
|
|
38
|
+
accessorFn: (agent) => agent.skills?.length ?? 0,
|
|
39
|
+
meta: { width: 80, align: "center", hideOnMobile: true },
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: "open",
|
|
43
|
+
header: "",
|
|
44
|
+
enableSorting: false,
|
|
45
|
+
cell: () => _jsx(CaretRight, { size: 14 }),
|
|
46
|
+
meta: { width: 44, align: "right" },
|
|
47
|
+
},
|
|
48
|
+
], []);
|
|
49
|
+
async function refresh() {
|
|
50
|
+
setRefreshing(true);
|
|
51
|
+
await refetch().finally(() => setRefreshing(false));
|
|
52
|
+
}
|
|
53
|
+
return (_jsxs("div", { className: "pd-view-stack", children: [_jsx(PageHeader, { title: "Agents", description: `${agents.length} ${agents.length === 1 ? "agent" : "agents"}`, actions: _jsxs(Button, { onClick: () => setCreateOpen(true), children: [_jsx(Plus, { size: 15, weight: "bold" }), "New agent"] }) }), error ? _jsx("div", { className: "pd-error", children: error.message }) : null, isLoading && agents.length === 0 ? _jsx(LoadingRows, {}) : (_jsx(DataTable, { columns: columns, data: agents, getRowId: (agent) => agent.name, rowHref: (agent) => `/agents/${encodeURIComponent(agent.name)}`, searchPlaceholder: "Search agents...", searchFn: (agent, query) => [agent.name, agent.role, agent.model].some((value) => value?.toLowerCase().includes(query)), rightSlot: _jsx(IconButton, { label: "Refresh agents", onClick: () => void refresh(), disabled: refreshing, children: _jsx(ArrowClockwise, { className: refreshing ? "pd-spin" : "", size: 15 }) }), empty: _jsxs("div", { className: "pd-empty", children: [_jsx(Atom, { size: 24 }), _jsx("strong", { children: "No agents yet" }), _jsx("span", { children: "Create the first agent for this runtime." }), _jsx(Button, { onClick: () => setCreateOpen(true), children: "New agent" })] }) })), _jsx(CreateAgentModal, { open: createOpen, busy: isAddingAgent, onClose: () => setCreateOpen(false), onCreate: async (agent) => {
|
|
54
|
+
await addAgent(agent);
|
|
55
|
+
setCreateOpen(false);
|
|
56
|
+
} })] }));
|
|
57
|
+
}
|
|
58
|
+
function CreateAgentModal({ open, busy, onClose, onCreate, }) {
|
|
59
|
+
const [error, setError] = useState(null);
|
|
60
|
+
async function submit(event) {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
const data = new FormData(event.currentTarget);
|
|
63
|
+
const name = String(data.get("name") ?? "").trim();
|
|
64
|
+
if (!name)
|
|
65
|
+
return;
|
|
66
|
+
setError(null);
|
|
67
|
+
try {
|
|
68
|
+
await onCreate({
|
|
69
|
+
name,
|
|
70
|
+
role: String(data.get("role") ?? "").trim() || undefined,
|
|
71
|
+
model: String(data.get("model") ?? "").trim() || undefined,
|
|
72
|
+
systemPrompt: String(data.get("systemPrompt") ?? "").trim() || undefined,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (cause) {
|
|
76
|
+
setError(cause instanceof Error ? cause.message : "Could not create agent");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return (_jsx(Modal, { open: open, onClose: onClose, title: "New agent", description: "Define a portable agent for this Polpo runtime.", children: _jsxs("form", { className: "pd-form", onSubmit: (event) => void submit(event), children: [_jsx(Field, { label: "Name", hint: "Stable identifier used by API calls.", children: _jsx("input", { name: "name", required: true, placeholder: "support-agent", pattern: "[A-Za-z0-9_-]+" }) }), _jsx(Field, { label: "Role", children: _jsx("input", { name: "role", placeholder: "Customer support specialist" }) }), _jsx(Field, { label: "Model", children: _jsx("input", { name: "model", placeholder: "anthropic/claude-sonnet-4-5" }) }), _jsx(Field, { label: "Instructions", children: _jsx("textarea", { name: "systemPrompt", rows: 7, placeholder: "Explain what this agent should do..." }) }), error ? _jsx("div", { className: "pd-error", children: error }) : null, _jsxs("div", { className: "pd-form-actions", children: [_jsx(Button, { type: "button", variant: "secondary", onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", disabled: busy, children: busy ? "Creating..." : "Create agent" })] })] }) }));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/views/agents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/views/files.tsx"],"names":[],"mappings":"AAWA,wBAAgB,SAAS,4CAgBxB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { ArrowClockwise, CaretRight, File, FolderOpen } from "@phosphor-icons/react";
|
|
5
|
+
import { useFiles } from "@polpo-ai/react";
|
|
6
|
+
import { DataTable, IconButton, LoadingRows, PageHeader } from "../components.js";
|
|
7
|
+
function joinPath(base, name) { return base ? `${base.replace(/\/$/, "")}/${name}` : name; }
|
|
8
|
+
export function FilesView() {
|
|
9
|
+
const rootsState = useFiles();
|
|
10
|
+
const [path, setPath] = useState();
|
|
11
|
+
const filesState = useFiles(path);
|
|
12
|
+
useEffect(() => { if (!path && rootsState.roots[0])
|
|
13
|
+
setPath(rootsState.roots[0].path); }, [path, rootsState.roots]);
|
|
14
|
+
const columns = useMemo(() => [
|
|
15
|
+
{ id: "name", header: "Name", accessorFn: (item) => item.name, cell: ({ row }) => _jsxs("div", { className: "pd-file-name", children: [row.original.isDirectory ? _jsx(FolderOpen, { size: 17, weight: "duotone" }) : _jsx(File, { size: 17 }), _jsx("span", { children: row.original.name })] }), meta: { width: 520 } },
|
|
16
|
+
{ id: "type", header: "Type", accessorFn: (item) => item.isDirectory ? "Folder" : "File", meta: { width: 130, hideOnMobile: true } },
|
|
17
|
+
{ id: "size", header: "Size", accessorFn: (item) => item.size ?? 0, cell: ({ getValue, row }) => row.original.isDirectory ? "-" : `${Math.max(1, Math.round(Number(getValue()) / 1024))} KB`, meta: { width: 110, align: "right", hideOnMobile: true } },
|
|
18
|
+
{ id: "open", header: "", enableSorting: false, cell: ({ row }) => row.original.isDirectory ? _jsx(CaretRight, { size: 14 }) : null, meta: { width: 44, align: "right" } },
|
|
19
|
+
], []);
|
|
20
|
+
const rootPath = rootsState.roots[0]?.path ?? ".";
|
|
21
|
+
const relativePath = path && path !== "." ? path.replace(/^\.\/?/, "") : "";
|
|
22
|
+
const crumbs = relativePath.split("/").filter(Boolean);
|
|
23
|
+
const loading = rootsState.isLoading || filesState.isLoading;
|
|
24
|
+
return _jsxs("div", { className: "pd-view-stack", children: [_jsx(PageHeader, { title: "Files", description: "Browse files available to this Polpo runtime." }), _jsxs("div", { className: "pd-breadcrumb", children: [_jsx("button", { type: "button", onClick: () => setPath(rootPath), children: "Home" }), crumbs.map((crumb, index) => _jsxs("span", { children: [_jsx(CaretRight, { size: 12 }), _jsx("button", { type: "button", onClick: () => setPath(joinPath(rootPath === "." ? "" : rootPath, crumbs.slice(0, index + 1).join("/")) || "."), children: crumb })] }, `${crumb}-${index}`))] }), loading && filesState.entries.length === 0 ? _jsx(LoadingRows, {}) : _jsx(DataTable, { columns: columns, data: filesState.entries, getRowId: (item) => joinPath(path ?? "", item.name), onRowClick: (item) => { if (item.isDirectory)
|
|
25
|
+
setPath(joinPath(path ?? ".", item.name)); }, searchPlaceholder: "Search files...", searchFn: (item, query) => item.name.toLowerCase().includes(query), rightSlot: _jsx(IconButton, { label: "Refresh files", onClick: () => { if (path)
|
|
26
|
+
void filesState.listFiles(path);
|
|
27
|
+
else
|
|
28
|
+
void rootsState.refetchRoots(); }, children: _jsx(ArrowClockwise, { size: 15 }) }) })] });
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/views/files.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/views/memory.tsx"],"names":[],"mappings":"AAOA,wBAAgB,UAAU,4CAiBzB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { ArrowClockwise } from "@phosphor-icons/react";
|
|
5
|
+
import { useMemory } from "@polpo-ai/react";
|
|
6
|
+
import { Button, IconButton, LoadingRows, PageHeader } from "../components.js";
|
|
7
|
+
export function MemoryView() {
|
|
8
|
+
const { memory, isLoading, error, saveMemory, refetch } = useMemory();
|
|
9
|
+
const [content, setContent] = useState("");
|
|
10
|
+
const [saving, setSaving] = useState(false);
|
|
11
|
+
useEffect(() => setContent(memory?.content ?? ""), [memory?.content]);
|
|
12
|
+
async function submit(event) {
|
|
13
|
+
event.preventDefault();
|
|
14
|
+
setSaving(true);
|
|
15
|
+
await saveMemory(content).finally(() => setSaving(false));
|
|
16
|
+
}
|
|
17
|
+
return (_jsxs("div", { className: "pd-view-stack", children: [_jsx(PageHeader, { title: "Shared memory", description: "Shared context injected into every agent in this runtime.", actions: _jsx(IconButton, { label: "Refresh memory", onClick: () => void refetch(), children: _jsx(ArrowClockwise, { size: 15 }) }) }), error ? _jsx("div", { className: "pd-error", children: error.message }) : null, isLoading && !memory ? _jsx(LoadingRows, { rows: 4 }) : _jsxs("form", { className: "pd-memory-editor", onSubmit: (event) => void submit(event), children: [_jsx("textarea", { value: content, onChange: (event) => setContent(event.target.value), spellCheck: false }), _jsxs("footer", { children: [_jsx("span", { children: content.trim() ? `${content.trim().split(/\s+/).length} words` : "Empty memory" }), _jsx(Button, { type: "submit", disabled: saving, children: saving ? "Saving..." : "Save memory" })] })] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/views/memory.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,KAAK,UAAU,MAAM,CAAC,KAAgB;QACpC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,KAAC,UAAU,IAAC,KAAK,EAAC,eAAe,EAAC,WAAW,EAAC,2DAA2D,EAAC,OAAO,EAAE,KAAC,UAAU,IAAC,KAAK,EAAC,gBAAgB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,YAAE,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,GAAa,GAAI,EACjO,KAAK,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,UAAU,YAAE,KAAK,CAAC,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,EAC9D,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,CAAC,GAAI,CAAC,CAAC,CAAC,gBAAM,SAAS,EAAC,kBAAkB,EAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,aAAE,mBAAU,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,GAAI,EAAA,6BAAQ,yBAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,cAAc,GAAQ,EAAA,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,MAAM,YAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,GAAU,IAAS,IAAO,IAC5a,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../src/views/playground.tsx"],"names":[],"mappings":"AAcA,wBAAgB,cAAc,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,2CA0CzE"}
|