@polpo-ai/dashboard 0.1.4 → 0.15.8

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.
Files changed (184) hide show
  1. package/LICENSE +3 -1
  2. package/README.md +13 -40
  3. package/dist/components.d.ts +53 -0
  4. package/dist/components.d.ts.map +1 -0
  5. package/dist/components.js +81 -0
  6. package/dist/components.js.map +1 -0
  7. package/dist/host.d.ts +24 -0
  8. package/dist/host.d.ts.map +1 -0
  9. package/dist/host.js +18 -0
  10. package/dist/host.js.map +1 -0
  11. package/dist/index.d.ts +13 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +11 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/test/setup.d.ts +2 -0
  16. package/dist/test/setup.d.ts.map +1 -0
  17. package/dist/test/setup.js +2 -0
  18. package/dist/test/setup.js.map +1 -0
  19. package/dist/views/agent-detail.d.ts +4 -0
  20. package/dist/views/agent-detail.d.ts.map +1 -0
  21. package/dist/views/agent-detail.js +31 -0
  22. package/dist/views/agent-detail.js.map +1 -0
  23. package/dist/views/agents.d.ts +2 -0
  24. package/dist/views/agents.d.ts.map +1 -0
  25. package/dist/views/agents.js +81 -0
  26. package/dist/views/agents.js.map +1 -0
  27. package/dist/views/files.d.ts +2 -0
  28. package/dist/views/files.d.ts.map +1 -0
  29. package/dist/views/files.js +30 -0
  30. package/dist/views/files.js.map +1 -0
  31. package/dist/views/memory.d.ts +2 -0
  32. package/dist/views/memory.d.ts.map +1 -0
  33. package/dist/views/memory.js +19 -0
  34. package/dist/views/memory.js.map +1 -0
  35. package/dist/views/playground.d.ts +4 -0
  36. package/dist/views/playground.d.ts.map +1 -0
  37. package/dist/views/playground.js +43 -0
  38. package/dist/views/playground.js.map +1 -0
  39. package/dist/views/session-detail.d.ts +4 -0
  40. package/dist/views/session-detail.d.ts.map +1 -0
  41. package/dist/views/session-detail.js +23 -0
  42. package/dist/views/session-detail.js.map +1 -0
  43. package/dist/views/sessions.d.ts +2 -0
  44. package/dist/views/sessions.d.ts.map +1 -0
  45. package/dist/views/sessions.js +17 -0
  46. package/dist/views/sessions.js.map +1 -0
  47. package/dist/views/skills.d.ts +2 -0
  48. package/dist/views/skills.d.ts.map +1 -0
  49. package/dist/views/skills.js +16 -0
  50. package/dist/views/skills.js.map +1 -0
  51. package/package.json +47 -83
  52. package/src/styles.css +169 -0
  53. package/app/(dashboard)/error.tsx +0 -47
  54. package/app/(dashboard)/layout.tsx +0 -41
  55. package/app/(dashboard)/loading.tsx +0 -30
  56. package/app/(dashboard)/projects/[id]/agents/[name]/memory/view.tsx +0 -36
  57. package/app/(dashboard)/projects/[id]/agents/[name]/models-view.tsx +0 -30
  58. package/app/(dashboard)/projects/[id]/agents/[name]/page.tsx +0 -51
  59. package/app/(dashboard)/projects/[id]/agents/[name]/prompt/view.tsx +0 -211
  60. package/app/(dashboard)/projects/[id]/agents/[name]/skills/view.tsx +0 -84
  61. package/app/(dashboard)/projects/[id]/agents/[name]/tools/view.tsx +0 -525
  62. package/app/(dashboard)/projects/[id]/agents/[name]/vault/view.tsx +0 -61
  63. package/app/(dashboard)/projects/[id]/agents/page.tsx +0 -39
  64. package/app/(dashboard)/projects/[id]/agents/view.tsx +0 -283
  65. package/app/(dashboard)/projects/[id]/layout.tsx +0 -11
  66. package/app/(dashboard)/projects/[id]/logs/page.tsx +0 -27
  67. package/app/(dashboard)/projects/[id]/logs/view.tsx +0 -184
  68. package/app/(dashboard)/projects/[id]/memory/page.tsx +0 -40
  69. package/app/(dashboard)/projects/[id]/memory/view.tsx +0 -17
  70. package/app/(dashboard)/projects/[id]/missions/[missionId]/page.tsx +0 -88
  71. package/app/(dashboard)/projects/[id]/missions/[missionId]/view.tsx +0 -569
  72. package/app/(dashboard)/projects/[id]/missions/page.tsx +0 -32
  73. package/app/(dashboard)/projects/[id]/missions/view.tsx +0 -282
  74. package/app/(dashboard)/projects/[id]/onboarding-checklist.tsx +0 -359
  75. package/app/(dashboard)/projects/[id]/page.tsx +0 -68
  76. package/app/(dashboard)/projects/[id]/playbooks/[name]/page.tsx +0 -5
  77. package/app/(dashboard)/projects/[id]/playbooks/[name]/view.tsx +0 -433
  78. package/app/(dashboard)/projects/[id]/playbooks/page.tsx +0 -5
  79. package/app/(dashboard)/projects/[id]/playbooks/view.tsx +0 -222
  80. package/app/(dashboard)/projects/[id]/schedules/page.tsx +0 -44
  81. package/app/(dashboard)/projects/[id]/schedules/view.tsx +0 -385
  82. package/app/(dashboard)/projects/[id]/sessions/[sessionId]/page.tsx +0 -55
  83. package/app/(dashboard)/projects/[id]/sessions/[sessionId]/raw-view.tsx +0 -373
  84. package/app/(dashboard)/projects/[id]/sessions/[sessionId]/view.tsx +0 -124
  85. package/app/(dashboard)/projects/[id]/sessions/page.tsx +0 -31
  86. package/app/(dashboard)/projects/[id]/sessions/view.tsx +0 -242
  87. package/app/(dashboard)/projects/[id]/settings/page.tsx +0 -52
  88. package/app/(dashboard)/projects/[id]/skills/[name]/page.tsx +0 -65
  89. package/app/(dashboard)/projects/[id]/skills/[name]/view.tsx +0 -227
  90. package/app/(dashboard)/projects/[id]/skills/page.tsx +0 -31
  91. package/app/(dashboard)/projects/[id]/skills/view.tsx +0 -243
  92. package/app/(dashboard)/projects/[id]/storage/page.tsx +0 -5
  93. package/app/(dashboard)/projects/[id]/storage/view.tsx +0 -385
  94. package/app/(dashboard)/projects/[id]/tasks/[taskId]/activity/view.tsx +0 -336
  95. package/app/(dashboard)/projects/[id]/tasks/[taskId]/assessment/view.tsx +0 -113
  96. package/app/(dashboard)/projects/[id]/tasks/[taskId]/blueprint.ts +0 -72
  97. package/app/(dashboard)/projects/[id]/tasks/[taskId]/output/view.tsx +0 -90
  98. package/app/(dashboard)/projects/[id]/tasks/[taskId]/page.tsx +0 -63
  99. package/app/(dashboard)/projects/[id]/tasks/[taskId]/view.tsx +0 -137
  100. package/app/(dashboard)/projects/[id]/tasks/page.tsx +0 -40
  101. package/app/(dashboard)/projects/[id]/tasks/view.tsx +0 -421
  102. package/app/(dashboard)/projects/[id]/view.tsx +0 -421
  103. package/app/(dashboard)/projects/[id]/welcome-banner.tsx +0 -156
  104. package/app/(dashboard)/projects/projects-list.tsx +0 -126
  105. package/app/(playground)/error.tsx +0 -42
  106. package/app/(playground)/layout.tsx +0 -27
  107. package/app/(playground)/projects/[id]/playground/page.tsx +0 -57
  108. package/app/(playground)/projects/[id]/playground/view.tsx +0 -167
  109. package/app/(playground)/projects/[id]/playground-legacy/page.tsx +0 -47
  110. package/app/(playground)/projects/[id]/playground-legacy/skeleton.tsx +0 -63
  111. package/app/(playground)/projects/[id]/playground-legacy/view.tsx +0 -237
  112. package/app/favicon.ico +0 -0
  113. package/app/globals.css +0 -385
  114. package/app/icon.svg +0 -6
  115. package/app/layout.tsx +0 -39
  116. package/app/page.tsx +0 -11
  117. package/components/ai-elements/code-block.tsx +0 -562
  118. package/components/dashboard/agent-capabilities.tsx +0 -326
  119. package/components/dashboard/agent-identity-header.tsx +0 -50
  120. package/components/dashboard/agent-model-picker.tsx +0 -195
  121. package/components/dashboard/agent-model-selector.tsx +0 -121
  122. package/components/dashboard/agent-picker-card.tsx +0 -46
  123. package/components/dashboard/agent-studio.tsx +0 -242
  124. package/components/dashboard/agents-table.tsx +0 -48
  125. package/components/dashboard/breadcrumb.tsx +0 -70
  126. package/components/dashboard/builder-chat.tsx +0 -418
  127. package/components/dashboard/chat-shell.tsx +0 -40
  128. package/components/dashboard/client-picker.tsx +0 -63
  129. package/components/dashboard/command-snippet.tsx +0 -77
  130. package/components/dashboard/connect-dialog.tsx +0 -680
  131. package/components/dashboard/copy-button.tsx +0 -45
  132. package/components/dashboard/copy-card.tsx +0 -48
  133. package/components/dashboard/file-browser.tsx +0 -161
  134. package/components/dashboard/hint.tsx +0 -22
  135. package/components/dashboard/inference-mode.tsx +0 -15
  136. package/components/dashboard/manual-refresh-button.tsx +0 -52
  137. package/components/dashboard/markdown.tsx +0 -31
  138. package/components/dashboard/mcp-install-panel.tsx +0 -196
  139. package/components/dashboard/mission-graph.tsx +0 -262
  140. package/components/dashboard/nav-tabs.tsx +0 -86
  141. package/components/dashboard/polpo-chat.tsx +0 -468
  142. package/components/dashboard/project-copilot.tsx +0 -253
  143. package/components/dashboard/sdk-snippet-panel.tsx +0 -194
  144. package/components/dashboard/section-header.tsx +0 -37
  145. package/components/dashboard/settings-form.tsx +0 -2477
  146. package/components/dashboard/sidebar.tsx +0 -385
  147. package/components/dashboard/skeletons.tsx +0 -1054
  148. package/components/dashboard/skills-install-wizard.tsx +0 -192
  149. package/components/dashboard/swarm-runs.tsx +0 -316
  150. package/components/dashboard/tab-toggle.tsx +0 -35
  151. package/components/dashboard/task-studio.tsx +0 -224
  152. package/components/dashboard/top-header.tsx +0 -203
  153. package/components/dashboard/webhook-deliveries.tsx +0 -234
  154. package/components/icons/coding-agents.tsx +0 -151
  155. package/components/json-ld.tsx +0 -8
  156. package/components/providers.tsx +0 -25
  157. package/components/ui/badge.tsx +0 -52
  158. package/components/ui/button.tsx +0 -60
  159. package/components/ui/card.tsx +0 -103
  160. package/components/ui/chart.tsx +0 -356
  161. package/components/ui/command.tsx +0 -196
  162. package/components/ui/dialog.tsx +0 -157
  163. package/components/ui/input-group.tsx +0 -158
  164. package/components/ui/input.tsx +0 -20
  165. package/components/ui/multi-select.tsx +0 -161
  166. package/components/ui/popover.tsx +0 -90
  167. package/components/ui/select.tsx +0 -201
  168. package/components/ui/separator.tsx +0 -25
  169. package/components/ui/sheet.tsx +0 -135
  170. package/components/ui/skeleton.tsx +0 -13
  171. package/components/ui/tabs.tsx +0 -56
  172. package/components/ui/textarea.tsx +0 -18
  173. package/components/ui/tooltip.tsx +0 -66
  174. package/hooks/use-desktop-sidebar.tsx +0 -50
  175. package/hooks/use-mobile-sidebar.tsx +0 -37
  176. package/index.ts +0 -17
  177. package/lib/api.ts +0 -194
  178. package/lib/builder-context.ts +0 -60
  179. package/lib/data-client.ts +0 -68
  180. package/lib/get-query-client.ts +0 -25
  181. package/lib/polpo-client.tsx +0 -49
  182. package/lib/tool-catalog.ts +0 -234
  183. package/lib/use-event-catalog.ts +0 -28
  184. package/lib/utils.ts +0 -6
package/LICENSE CHANGED
@@ -1,4 +1,6 @@
1
- Copyright 2026-present Lumea Labs
1
+ Apache License 2.0
2
+
3
+ Copyright 2026 Lumea Labs
2
4
 
3
5
  Licensed under the Apache License, Version 2.0 (the "License");
4
6
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -1,44 +1,17 @@
1
1
  # @polpo-ai/dashboard
2
2
 
3
- The self-hosted Polpo dashboard the single-instance debugger UI for one Polpo
4
- server: agents, tasks, missions, sessions, memory, skills, playbooks, schedules,
5
- storage, logs and a chat playground.
6
-
7
- It talks to your Polpo server through the public SDK (`@polpo-ai/sdk`). There is
8
- no auth, billing, org or onboarding here — those are cloud-only. One server, one
9
- dashboard.
10
-
11
- ## Run it
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
- `/` redirects to `/projects/local/agents`. `local` is a placeholder project id —
22
- single-tenant self-host has one project, and the data client ignores the id.
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
@@ -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"}
@@ -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,2 @@
1
+ import "@testing-library/jest-dom/vitest";
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -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,2 @@
1
+ import "@testing-library/jest-dom/vitest";
2
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function AgentDetailView({ name }: {
2
+ name: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=agent-detail.d.ts.map
@@ -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,2 @@
1
+ export declare function AgentsView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=agents.d.ts.map
@@ -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,2 @@
1
+ export declare function FilesView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=files.d.ts.map
@@ -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,2 @@
1
+ export declare function MemoryView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=memory.d.ts.map
@@ -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,4 @@
1
+ export declare function PlaygroundView({ initialAgent }: {
2
+ initialAgent?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=playground.d.ts.map
@@ -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"}