@polpo-ai/dashboard 0.15.11 → 0.15.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/README.md +43 -9
  2. package/dist/host.d.ts +16 -0
  3. package/dist/host.d.ts.map +1 -1
  4. package/dist/host.js +3 -0
  5. package/dist/host.js.map +1 -1
  6. package/dist/index.d.ts +35 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +27 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/self-host-api.d.ts +3 -0
  11. package/dist/self-host-api.d.ts.map +1 -0
  12. package/dist/self-host-api.js +55 -0
  13. package/dist/self-host-api.js.map +1 -0
  14. package/dist/v2/agents/agent-detail.d.ts +58 -0
  15. package/dist/v2/agents/agent-detail.d.ts.map +1 -0
  16. package/dist/v2/agents/agent-detail.js +412 -0
  17. package/dist/v2/agents/agent-detail.js.map +1 -0
  18. package/dist/v2/agents/agent-run-panel.d.ts +5 -0
  19. package/dist/v2/agents/agent-run-panel.d.ts.map +1 -0
  20. package/dist/v2/agents/agent-run-panel.js +149 -0
  21. package/dist/v2/agents/agent-run-panel.js.map +1 -0
  22. package/dist/v2/agents/loops-tab.d.ts +6 -0
  23. package/dist/v2/agents/loops-tab.d.ts.map +1 -0
  24. package/dist/v2/agents/loops-tab.js +160 -0
  25. package/dist/v2/agents/loops-tab.js.map +1 -0
  26. package/dist/v2/agents/model-select.d.ts +24 -0
  27. package/dist/v2/agents/model-select.d.ts.map +1 -0
  28. package/dist/v2/agents/model-select.js +157 -0
  29. package/dist/v2/agents/model-select.js.map +1 -0
  30. package/dist/v2/agents/prompt-preview-dialog.d.ts +15 -0
  31. package/dist/v2/agents/prompt-preview-dialog.d.ts.map +1 -0
  32. package/dist/v2/agents/prompt-preview-dialog.js +141 -0
  33. package/dist/v2/agents/prompt-preview-dialog.js.map +1 -0
  34. package/dist/v2/agents/self-host-create-agent-dialog.d.ts +6 -0
  35. package/dist/v2/agents/self-host-create-agent-dialog.d.ts.map +1 -0
  36. package/dist/v2/agents/self-host-create-agent-dialog.js +31 -0
  37. package/dist/v2/agents/self-host-create-agent-dialog.js.map +1 -0
  38. package/dist/v2/agents/self-host-detail.d.ts +4 -0
  39. package/dist/v2/agents/self-host-detail.d.ts.map +1 -0
  40. package/dist/v2/agents/self-host-detail.js +34 -0
  41. package/dist/v2/agents/self-host-detail.js.map +1 -0
  42. package/dist/v2/agents/self-host-run-chat.d.ts +10 -0
  43. package/dist/v2/agents/self-host-run-chat.d.ts.map +1 -0
  44. package/dist/v2/agents/self-host-run-chat.js +18 -0
  45. package/dist/v2/agents/self-host-run-chat.js.map +1 -0
  46. package/dist/v2/agents/skills-tab.d.ts +6 -0
  47. package/dist/v2/agents/skills-tab.d.ts.map +1 -0
  48. package/dist/v2/agents/skills-tab.js +112 -0
  49. package/dist/v2/agents/skills-tab.js.map +1 -0
  50. package/dist/v2/agents/tools-panel.d.ts +26 -0
  51. package/dist/v2/agents/tools-panel.d.ts.map +1 -0
  52. package/dist/v2/agents/tools-panel.js +123 -0
  53. package/dist/v2/agents/tools-panel.js.map +1 -0
  54. package/dist/v2/agents/tools-tab.d.ts +6 -0
  55. package/dist/v2/agents/tools-tab.d.ts.map +1 -0
  56. package/dist/v2/agents/tools-tab.js +117 -0
  57. package/dist/v2/agents/tools-tab.js.map +1 -0
  58. package/dist/v2/agents/vault-tab.d.ts +13 -0
  59. package/dist/v2/agents/vault-tab.d.ts.map +1 -0
  60. package/dist/v2/agents/vault-tab.js +93 -0
  61. package/dist/v2/agents/vault-tab.js.map +1 -0
  62. package/dist/v2/files/file-browser-primitives.d.ts +39 -0
  63. package/dist/v2/files/file-browser-primitives.d.ts.map +1 -0
  64. package/dist/v2/files/file-browser-primitives.js +75 -0
  65. package/dist/v2/files/file-browser-primitives.js.map +1 -0
  66. package/dist/v2/files/file-directory-browser.d.ts +10 -0
  67. package/dist/v2/files/file-directory-browser.d.ts.map +1 -0
  68. package/dist/v2/files/file-directory-browser.js +57 -0
  69. package/dist/v2/files/file-directory-browser.js.map +1 -0
  70. package/dist/v2/files/files-browser.d.ts +7 -0
  71. package/dist/v2/files/files-browser.d.ts.map +1 -0
  72. package/dist/v2/files/files-browser.js +390 -0
  73. package/dist/v2/files/files-browser.js.map +1 -0
  74. package/dist/v2/files/host.d.ts +45 -0
  75. package/dist/v2/files/host.d.ts.map +1 -0
  76. package/dist/v2/files/host.js +72 -0
  77. package/dist/v2/files/host.js.map +1 -0
  78. package/dist/v2/host.d.ts +42 -0
  79. package/dist/v2/host.d.ts.map +1 -0
  80. package/dist/v2/host.js +137 -0
  81. package/dist/v2/host.js.map +1 -0
  82. package/dist/v2/playground/chat-canvas.d.ts +9 -0
  83. package/dist/v2/playground/chat-canvas.d.ts.map +1 -0
  84. package/dist/v2/playground/chat-canvas.js +88 -0
  85. package/dist/v2/playground/chat-canvas.js.map +1 -0
  86. package/dist/v2/playground/host.d.ts +116 -0
  87. package/dist/v2/playground/host.d.ts.map +1 -0
  88. package/dist/v2/playground/host.js +12 -0
  89. package/dist/v2/playground/host.js.map +1 -0
  90. package/dist/v2/playground/self-host-chat.d.ts +11 -0
  91. package/dist/v2/playground/self-host-chat.d.ts.map +1 -0
  92. package/dist/v2/playground/self-host-chat.js +85 -0
  93. package/dist/v2/playground/self-host-chat.js.map +1 -0
  94. package/dist/v2/playground/self-host.d.ts +2 -0
  95. package/dist/v2/playground/self-host.d.ts.map +1 -0
  96. package/dist/v2/playground/self-host.js +87 -0
  97. package/dist/v2/playground/self-host.js.map +1 -0
  98. package/dist/v2/sessions/host.d.ts +167 -0
  99. package/dist/v2/sessions/host.d.ts.map +1 -0
  100. package/dist/v2/sessions/host.js +12 -0
  101. package/dist/v2/sessions/host.js.map +1 -0
  102. package/dist/v2/sessions/self-host.d.ts +7 -0
  103. package/dist/v2/sessions/self-host.d.ts.map +1 -0
  104. package/dist/v2/sessions/self-host.js +120 -0
  105. package/dist/v2/sessions/self-host.js.map +1 -0
  106. package/dist/v2/sessions/trace-columns.d.ts +4 -0
  107. package/dist/v2/sessions/trace-columns.d.ts.map +1 -0
  108. package/dist/v2/sessions/trace-columns.js +102 -0
  109. package/dist/v2/sessions/trace-columns.js.map +1 -0
  110. package/dist/v2/sessions/trace-detail-view.d.ts +7 -0
  111. package/dist/v2/sessions/trace-detail-view.d.ts.map +1 -0
  112. package/dist/v2/sessions/trace-detail-view.js +346 -0
  113. package/dist/v2/sessions/trace-detail-view.js.map +1 -0
  114. package/dist/v2/sessions/trace-detail.d.ts +133 -0
  115. package/dist/v2/sessions/trace-detail.d.ts.map +1 -0
  116. package/dist/v2/sessions/trace-detail.js +210 -0
  117. package/dist/v2/sessions/trace-detail.js.map +1 -0
  118. package/dist/v2/sessions/trace-normalize.d.ts +60 -0
  119. package/dist/v2/sessions/trace-normalize.d.ts.map +1 -0
  120. package/dist/v2/sessions/trace-normalize.js +87 -0
  121. package/dist/v2/sessions/trace-normalize.js.map +1 -0
  122. package/dist/v2/sessions/trace-table.d.ts +8 -0
  123. package/dist/v2/sessions/trace-table.d.ts.map +1 -0
  124. package/dist/v2/sessions/trace-table.js +27 -0
  125. package/dist/v2/sessions/trace-table.js.map +1 -0
  126. package/dist/v2/shell/coding-agents.d.ts +21 -0
  127. package/dist/v2/shell/coding-agents.d.ts.map +1 -0
  128. package/dist/v2/shell/coding-agents.js +41 -0
  129. package/dist/v2/shell/coding-agents.js.map +1 -0
  130. package/dist/v2/shell/dashboard-shell.d.ts +6 -0
  131. package/dist/v2/shell/dashboard-shell.d.ts.map +1 -0
  132. package/dist/v2/shell/dashboard-shell.js +132 -0
  133. package/dist/v2/shell/dashboard-shell.js.map +1 -0
  134. package/dist/v2/skills/self-host-create-skill-dialog.d.ts +6 -0
  135. package/dist/v2/skills/self-host-create-skill-dialog.d.ts.map +1 -0
  136. package/dist/v2/skills/self-host-create-skill-dialog.js +27 -0
  137. package/dist/v2/skills/self-host-create-skill-dialog.js.map +1 -0
  138. package/dist/v2/skills/self-host-detail.d.ts +4 -0
  139. package/dist/v2/skills/self-host-detail.d.ts.map +1 -0
  140. package/dist/v2/skills/self-host-detail.js +31 -0
  141. package/dist/v2/skills/self-host-detail.js.map +1 -0
  142. package/dist/v2/support/agent-call-snippets.d.ts +35 -0
  143. package/dist/v2/support/agent-call-snippets.d.ts.map +1 -0
  144. package/dist/v2/support/agent-call-snippets.js +113 -0
  145. package/dist/v2/support/agent-call-snippets.js.map +1 -0
  146. package/dist/v2/support/tool-catalog.d.ts +62 -0
  147. package/dist/v2/support/tool-catalog.d.ts.map +1 -0
  148. package/dist/v2/support/tool-catalog.js +271 -0
  149. package/dist/v2/support/tool-catalog.js.map +1 -0
  150. package/dist/v2/support/vault-fields.d.ts +29 -0
  151. package/dist/v2/support/vault-fields.d.ts.map +1 -0
  152. package/dist/v2/support/vault-fields.js +74 -0
  153. package/dist/v2/support/vault-fields.js.map +1 -0
  154. package/dist/v2/tools/param-fields.d.ts +19 -0
  155. package/dist/v2/tools/param-fields.d.ts.map +1 -0
  156. package/dist/v2/tools/param-fields.js +191 -0
  157. package/dist/v2/tools/param-fields.js.map +1 -0
  158. package/dist/v2/tools/self-host.d.ts +7 -0
  159. package/dist/v2/tools/self-host.d.ts.map +1 -0
  160. package/dist/v2/tools/self-host.js +26 -0
  161. package/dist/v2/tools/self-host.js.map +1 -0
  162. package/dist/v2/tools/source-parsing.d.ts +4 -0
  163. package/dist/v2/tools/source-parsing.d.ts.map +1 -0
  164. package/dist/v2/tools/source-parsing.js +15 -0
  165. package/dist/v2/tools/source-parsing.js.map +1 -0
  166. package/dist/v2/tools/tool-detail.d.ts +7 -0
  167. package/dist/v2/tools/tool-detail.d.ts.map +1 -0
  168. package/dist/v2/tools/tool-detail.js +157 -0
  169. package/dist/v2/tools/tool-detail.js.map +1 -0
  170. package/dist/v2/tools/tool-editor-dialog.d.ts +9 -0
  171. package/dist/v2/tools/tool-editor-dialog.d.ts.map +1 -0
  172. package/dist/v2/tools/tool-editor-dialog.js +306 -0
  173. package/dist/v2/tools/tool-editor-dialog.js.map +1 -0
  174. package/dist/v2/tools/tools-view.d.ts +21 -0
  175. package/dist/v2/tools/tools-view.d.ts.map +1 -0
  176. package/dist/v2/tools/tools-view.js +77 -0
  177. package/dist/v2/tools/tools-view.js.map +1 -0
  178. package/dist/v2/ui/bits.d.ts +23 -0
  179. package/dist/v2/ui/bits.d.ts.map +1 -0
  180. package/dist/v2/ui/bits.js +18 -0
  181. package/dist/v2/ui/bits.js.map +1 -0
  182. package/dist/v2/ui/button.d.ts +9 -0
  183. package/dist/v2/ui/button.d.ts.map +1 -0
  184. package/dist/v2/ui/button.js +33 -0
  185. package/dist/v2/ui/button.js.map +1 -0
  186. package/dist/v2/ui/code-block.d.ts +20 -0
  187. package/dist/v2/ui/code-block.d.ts.map +1 -0
  188. package/dist/v2/ui/code-block.js +44 -0
  189. package/dist/v2/ui/code-block.js.map +1 -0
  190. package/dist/v2/ui/code-editor.d.ts +9 -0
  191. package/dist/v2/ui/code-editor.d.ts.map +1 -0
  192. package/dist/v2/ui/code-editor.js +25 -0
  193. package/dist/v2/ui/code-editor.js.map +1 -0
  194. package/dist/v2/ui/copy-button.d.ts +9 -0
  195. package/dist/v2/ui/copy-button.d.ts.map +1 -0
  196. package/dist/v2/ui/copy-button.js +24 -0
  197. package/dist/v2/ui/copy-button.js.map +1 -0
  198. package/dist/v2/ui/data-table.d.ts +40 -0
  199. package/dist/v2/ui/data-table.d.ts.map +1 -0
  200. package/dist/v2/ui/data-table.js +85 -0
  201. package/dist/v2/ui/data-table.js.map +1 -0
  202. package/dist/v2/ui/dialog.d.ts +16 -0
  203. package/dist/v2/ui/dialog.d.ts.map +1 -0
  204. package/dist/v2/ui/dialog.js +39 -0
  205. package/dist/v2/ui/dialog.js.map +1 -0
  206. package/dist/v2/ui/input.d.ts +2 -0
  207. package/dist/v2/ui/input.d.ts.map +1 -0
  208. package/dist/v2/ui/input.js +7 -0
  209. package/dist/v2/ui/input.js.map +1 -0
  210. package/dist/v2/ui/multi-select-filter.d.ts +18 -0
  211. package/dist/v2/ui/multi-select-filter.d.ts.map +1 -0
  212. package/dist/v2/ui/multi-select-filter.js +37 -0
  213. package/dist/v2/ui/multi-select-filter.js.map +1 -0
  214. package/dist/v2/ui/page-header.d.ts +10 -0
  215. package/dist/v2/ui/page-header.d.ts.map +1 -0
  216. package/dist/v2/ui/page-header.js +8 -0
  217. package/dist/v2/ui/page-header.js.map +1 -0
  218. package/dist/v2/ui/refresh-button.d.ts +5 -0
  219. package/dist/v2/ui/refresh-button.d.ts.map +1 -0
  220. package/dist/v2/ui/refresh-button.js +7 -0
  221. package/dist/v2/ui/refresh-button.js.map +1 -0
  222. package/dist/v2/ui/select.d.ts +16 -0
  223. package/dist/v2/ui/select.d.ts.map +1 -0
  224. package/dist/v2/ui/select.js +36 -0
  225. package/dist/v2/ui/select.js.map +1 -0
  226. package/dist/v2/ui/skeleton.d.ts +3 -0
  227. package/dist/v2/ui/skeleton.d.ts.map +1 -0
  228. package/dist/v2/ui/skeleton.js +7 -0
  229. package/dist/v2/ui/skeleton.js.map +1 -0
  230. package/dist/v2/ui/textarea.d.ts +2 -0
  231. package/dist/v2/ui/textarea.d.ts.map +1 -0
  232. package/dist/v2/ui/textarea.js +6 -0
  233. package/dist/v2/ui/textarea.js.map +1 -0
  234. package/dist/v2/utils.d.ts +3 -0
  235. package/dist/v2/utils.d.ts.map +1 -0
  236. package/dist/v2/utils.js +6 -0
  237. package/dist/v2/utils.js.map +1 -0
  238. package/dist/v2/views/agents-detail.d.ts +2 -0
  239. package/dist/v2/views/agents-detail.d.ts.map +1 -0
  240. package/dist/v2/views/agents-detail.js +2 -0
  241. package/dist/v2/views/agents-detail.js.map +1 -0
  242. package/dist/v2/views/agents.d.ts +27 -0
  243. package/dist/v2/views/agents.d.ts.map +1 -0
  244. package/dist/v2/views/agents.js +161 -0
  245. package/dist/v2/views/agents.js.map +1 -0
  246. package/dist/v2/views/files.d.ts +2 -0
  247. package/dist/v2/views/files.d.ts.map +1 -0
  248. package/dist/v2/views/files.js +10 -0
  249. package/dist/v2/views/files.js.map +1 -0
  250. package/dist/v2/views/memory-host.d.ts +10 -0
  251. package/dist/v2/views/memory-host.d.ts.map +1 -0
  252. package/dist/v2/views/memory-host.js +17 -0
  253. package/dist/v2/views/memory-host.js.map +1 -0
  254. package/dist/v2/views/memory-project.d.ts +5 -0
  255. package/dist/v2/views/memory-project.d.ts.map +1 -0
  256. package/dist/v2/views/memory-project.js +36 -0
  257. package/dist/v2/views/memory-project.js.map +1 -0
  258. package/dist/v2/views/memory.d.ts +2 -0
  259. package/dist/v2/views/memory.d.ts.map +1 -0
  260. package/dist/v2/views/memory.js +14 -0
  261. package/dist/v2/views/memory.js.map +1 -0
  262. package/dist/v2/views/playground.d.ts +13 -0
  263. package/dist/v2/views/playground.d.ts.map +1 -0
  264. package/dist/v2/views/playground.js +88 -0
  265. package/dist/v2/views/playground.js.map +1 -0
  266. package/dist/v2/views/sessions-detail.d.ts +8 -0
  267. package/dist/v2/views/sessions-detail.d.ts.map +1 -0
  268. package/dist/v2/views/sessions-detail.js +107 -0
  269. package/dist/v2/views/sessions-detail.js.map +1 -0
  270. package/dist/v2/views/sessions.d.ts +9 -0
  271. package/dist/v2/views/sessions.d.ts.map +1 -0
  272. package/dist/v2/views/sessions.js +9 -0
  273. package/dist/v2/views/sessions.js.map +1 -0
  274. package/dist/v2/views/skills-detail.d.ts +26 -0
  275. package/dist/v2/views/skills-detail.d.ts.map +1 -0
  276. package/dist/v2/views/skills-detail.js +120 -0
  277. package/dist/v2/views/skills-detail.js.map +1 -0
  278. package/dist/v2/views/skills.d.ts +18 -0
  279. package/dist/v2/views/skills.d.ts.map +1 -0
  280. package/dist/v2/views/skills.js +46 -0
  281. package/dist/v2/views/skills.js.map +1 -0
  282. package/package.json +20 -4
  283. package/src/v2.css +212 -0
@@ -0,0 +1,132 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState, } from "react";
4
+ import { useTheme } from "next-themes";
5
+ import { ArrowSquareOut, Atom, BookOpen, Brain, Buildings, CaretUpDown, ChartLineUp, ChatCircleText, ClockCounterClockwise, Desktop, GearSix, GraduationCap, HardDrives, Moon, PlugsConnected, SignOut, Sun, User, Wrench, } from "@phosphor-icons/react/dist/ssr";
6
+ import { useDashboardHost } from "../../host.js";
7
+ import { Link } from "../host.js";
8
+ import { ClaudeCodeIcon, CodexIcon, CopilotIcon, CursorIcon, WindsurfIcon, } from "./coding-agents.js";
9
+ const PROJECT_TOP = [
10
+ { label: "Playground", href: "/playground", icon: ChatCircleText, external: true },
11
+ ];
12
+ const GROUPS = [
13
+ {
14
+ heading: "Build",
15
+ items: [
16
+ { label: "Agents", href: "/agents", icon: Atom },
17
+ { label: "Skills", href: "/skills", icon: GraduationCap },
18
+ { label: "Tool Functions", href: "/tools", icon: Wrench },
19
+ { label: "Memory", href: "/memory", icon: Brain },
20
+ { label: "Drives", href: "/files", icon: HardDrives },
21
+ ],
22
+ },
23
+ {
24
+ heading: "Observe",
25
+ items: [
26
+ { label: "Sessions", href: "/sessions", icon: ClockCounterClockwise },
27
+ { label: "Spending", href: "/spending", icon: ChartLineUp, capability: "billing" },
28
+ ],
29
+ },
30
+ ];
31
+ const EXPANDED = 224;
32
+ const RAIL = 52;
33
+ const COLLAPSE_AT = 150;
34
+ export function DashboardShell({ pathname, children, }) {
35
+ return (_jsxs("div", { className: "v2 flex h-screen flex-col overflow-hidden bg-background text-foreground", children: [_jsx(AppTopbar, {}), _jsxs("div", { className: "flex min-h-0 flex-1", children: [_jsx(AppSidebar, { pathname: pathname }), _jsx("main", { className: "min-w-0 flex-1 overflow-y-auto", children: children })] })] }));
36
+ }
37
+ function AppTopbar() {
38
+ const host = useDashboardHost();
39
+ return (_jsxs("header", { className: "flex h-12 shrink-0 items-center gap-3 border-b border-border bg-card px-4", children: [_jsx(Link, { href: "/agents", className: "flex shrink-0 items-center", "aria-label": "Polpo", children: _jsx("img", { src: "/polpo-logo.svg", alt: "Polpo", width: 83, height: 18, className: "h-[18px] w-auto invert dark:invert-0" }) }), _jsx("span", { className: "hidden select-none text-muted-foreground/60 sm:inline", "aria-hidden": true, children: "/" }), _jsxs("span", { className: "hidden h-8 items-center gap-1.5 rounded-md px-1.5 text-[13px] font-medium text-foreground sm:flex", children: [_jsx(Buildings, { size: 15, weight: "duotone", className: "shrink-0 text-muted-foreground" }), "Self-hosted"] }), _jsx("span", { className: "hidden select-none text-muted-foreground/60 sm:inline", "aria-hidden": true, children: "/" }), _jsxs("button", { type: "button", className: "hidden h-8 min-w-0 items-center gap-1.5 rounded-md px-2 text-[13px] text-foreground transition-colors hover:bg-secondary/60 sm:flex", children: [_jsx("span", { className: "max-w-[180px] truncate font-medium", children: host.project.name || "Local runtime" }), _jsx(CaretUpDown, { size: 14, className: "text-muted-foreground" })] }), _jsxs("div", { className: "ml-auto flex min-w-0 items-center gap-1 sm:gap-2", children: [_jsxs("a", { href: "https://docs.polpo.sh", target: "_blank", rel: "noopener noreferrer", "aria-label": "Documentation", className: "flex h-8 shrink-0 items-center gap-1.5 rounded-md px-2 text-[13px] text-muted-foreground transition-colors hover:bg-secondary/60 hover:text-foreground sm:px-2.5", children: [_jsx(BookOpen, { size: 16, weight: "duotone", className: "shrink-0 text-muted-foreground" }), _jsx("span", { className: "hidden sm:inline", children: "Docs" }), _jsx(ArrowSquareOut, { size: 12, className: "hidden shrink-0 text-muted-foreground/50 sm:block" })] }), host.capabilities?.settings !== false && (_jsxs(Link, { href: "/settings", className: "flex h-8 items-center gap-1.5 rounded-md px-2.5 text-[13px] text-muted-foreground transition-colors hover:bg-secondary/60 hover:text-foreground", children: [_jsx(GearSix, { size: 16, className: "shrink-0 text-muted-foreground" }), "Settings"] })), _jsx(ConnectButton, {})] })] }));
40
+ }
41
+ const CONNECT_LOGOS = [
42
+ { Icon: ClaudeCodeIcon, name: "Claude" },
43
+ { Icon: CursorIcon, name: "Cursor" },
44
+ { Icon: CopilotIcon, name: "Copilot" },
45
+ { Icon: WindsurfIcon, name: "Windsurf" },
46
+ { Icon: CodexIcon, name: "Codex" },
47
+ ];
48
+ function ConnectButton() {
49
+ const [logoIndex, setLogoIndex] = useState(0);
50
+ useEffect(() => {
51
+ const timer = window.setInterval(() => setLogoIndex((index) => (index + 1) % CONNECT_LOGOS.length), 1800);
52
+ return () => window.clearInterval(timer);
53
+ }, []);
54
+ const current = CONNECT_LOGOS[logoIndex];
55
+ const Logo = current.Icon;
56
+ return (_jsxs("button", { type: "button", title: "Connect your coding agent", className: "inline-flex h-8 shrink-0 items-center gap-1.5 rounded-full border border-brand/30 bg-brand/[0.07] px-2.5 text-[12px] font-medium text-foreground transition-colors hover:border-brand/50 hover:bg-brand/10 sm:px-3", children: [_jsx(PlugsConnected, { size: 13, className: "text-muted-foreground" }), _jsx("span", { children: "Connect" }), _jsx("span", { className: "ml-1 hidden items-center overflow-hidden md:flex", children: _jsxs("span", { className: "inline-flex items-center gap-1.5 animate-in fade-in-0 slide-in-from-bottom-3 duration-300", children: [_jsx("span", { className: "grid h-4 w-4 shrink-0 place-items-center [&_svg]:h-4 [&_svg]:w-4", children: _jsx(Logo, { className: "h-4 w-4" }) }), current.name] }, logoIndex) })] }));
57
+ }
58
+ function AppSidebar({ pathname }) {
59
+ const host = useDashboardHost();
60
+ const asideRef = useRef(null);
61
+ const [collapsed, setCollapsed] = useState(false);
62
+ const [dragging, setDragging] = useState(false);
63
+ const [hydrated, setHydrated] = useState(false);
64
+ useEffect(() => {
65
+ const frame = window.requestAnimationFrame(() => {
66
+ setCollapsed(localStorage.getItem("v2-sidebar-collapsed") === "1");
67
+ setHydrated(true);
68
+ });
69
+ return () => window.cancelAnimationFrame(frame);
70
+ }, []);
71
+ useEffect(() => {
72
+ if (!hydrated)
73
+ return;
74
+ localStorage.setItem("v2-sidebar-collapsed", collapsed ? "1" : "0");
75
+ }, [collapsed, hydrated]);
76
+ function startDrag(event) {
77
+ event.preventDefault();
78
+ setDragging(true);
79
+ const left = asideRef.current?.getBoundingClientRect().left ?? 0;
80
+ const onMove = (moveEvent) => {
81
+ setCollapsed(moveEvent.clientX - left <= COLLAPSE_AT);
82
+ };
83
+ const onUp = () => {
84
+ setDragging(false);
85
+ window.removeEventListener("pointermove", onMove);
86
+ window.removeEventListener("pointerup", onUp);
87
+ document.body.style.userSelect = "";
88
+ document.body.style.cursor = "";
89
+ };
90
+ window.addEventListener("pointermove", onMove);
91
+ window.addEventListener("pointerup", onUp);
92
+ document.body.style.userSelect = "none";
93
+ document.body.style.cursor = "col-resize";
94
+ }
95
+ return (_jsxs("aside", { ref: asideRef, "data-collapsed": collapsed || undefined, style: { width: collapsed ? RAIL : EXPANDED }, className: "relative hidden shrink-0 flex-col border-r border-border bg-card transition-[width] duration-150 ease-out md:flex", children: [_jsx("nav", { className: "flex-1 overflow-y-auto px-2 py-4", children: _jsxs("div", { className: "animate-in fade-in-0 slide-in-from-right-8 duration-300", children: [_jsx("div", { className: "mb-5 flex flex-col gap-0.5", children: PROJECT_TOP.map((item) => (_jsx(NavRow, { item: item, active: false, collapsed: collapsed }, item.label))) }), GROUPS.map((group) => (_jsxs("div", { className: "mb-5 last:mb-0", children: [!collapsed && (_jsx("div", { className: "mb-1.5 px-2 text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground/50", children: group.heading })), collapsed && _jsx("div", { className: "mx-2 mb-2 border-t border-border/70" }), _jsx("div", { className: "flex flex-col gap-0.5", children: group.items
96
+ .filter((item) => !item.capability || host.capabilities?.[item.capability] !== false)
97
+ .map((item) => (_jsx(NavRow, { item: item, active: !item.external && isActive(pathname, item.href), collapsed: collapsed }, item.label))) })] }, group.heading)))] }) }), _jsx("div", { className: "flex flex-col gap-1 border-t border-border px-2 py-3", children: _jsx(UserMenu, { collapsed: collapsed }) }), _jsx("div", { onPointerDown: startDrag, onDoubleClick: () => setCollapsed((value) => !value), "aria-hidden": true, className: "group absolute right-0 top-0 h-full w-2 translate-x-1/2 cursor-col-resize", children: _jsx("div", { className: `mx-auto h-full w-px transition-colors ${dragging ? "bg-brand" : "bg-transparent group-hover:bg-brand/50"}` }) })] }));
98
+ }
99
+ function UserMenu({ collapsed }) {
100
+ const [open, setOpen] = useState(false);
101
+ return (_jsxs("div", { className: `relative ${collapsed ? "" : "w-full"}`, children: [_jsxs("button", { type: "button", onClick: () => setOpen((value) => !value), "aria-label": "Account menu", title: "Account", className: `flex items-center rounded-md text-muted-foreground transition-colors hover:bg-secondary/60 hover:text-foreground ${collapsed ? "h-8 w-8 justify-center" : "h-8 w-full gap-2.5 px-2 text-[13px]"}`, children: [_jsx(User, { size: 17, className: "shrink-0" }), !collapsed && (_jsxs(_Fragment, { children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-left font-medium text-foreground", children: "Self-hosted" }), _jsx(CaretUpDown, { size: 13, className: "shrink-0" })] }))] }), open && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setOpen(false) }), _jsxs("div", { className: "absolute bottom-[calc(100%+6px)] left-0 z-50 w-56 overflow-hidden rounded-md border border-border bg-popover shadow-xl", children: [_jsxs("div", { className: "border-b border-border px-3 py-2.5", children: [_jsx("div", { className: "truncate text-[13px] font-medium text-foreground", children: "Self-hosted" }), _jsx("div", { className: "truncate text-[12px] text-muted-foreground", children: "Local runtime" })] }), _jsxs("div", { className: "p-1", children: [_jsx(ThemeMenu, {}), _jsxs("button", { type: "button", disabled: true, className: "flex w-full items-center gap-2 rounded-md px-2.5 py-1.5 text-[13px] text-muted-foreground", children: [_jsx(SignOut, { size: 15, className: "text-muted-foreground" }), "Log out"] })] })] })] }))] }));
102
+ }
103
+ const THEME_ORDER = ["light", "dark", "system"];
104
+ function ThemeMenu() {
105
+ const { theme, setTheme } = useTheme();
106
+ const [mounted, setMounted] = useState(false);
107
+ useEffect(() => setMounted(true), []);
108
+ const current = (mounted ? theme : "system");
109
+ const Icon = current === "light" ? Sun : current === "dark" ? Moon : Desktop;
110
+ return (_jsxs("button", { type: "button", onClick: () => setTheme(THEME_ORDER[(THEME_ORDER.indexOf(current) + 1) % THEME_ORDER.length]), className: "flex w-full items-center gap-2 rounded-md px-2.5 py-1.5 text-[13px] text-foreground transition-colors hover:bg-secondary/60", children: [_jsx(Icon, { size: 15, className: "text-muted-foreground" }), "Theme", _jsx("span", { className: "ml-auto text-[12px] capitalize text-muted-foreground", children: mounted ? current : "" })] }));
111
+ }
112
+ function isActive(pathname, href) {
113
+ return pathname === href || pathname.startsWith(`${href}/`);
114
+ }
115
+ function NavRow({ item, active, collapsed, }) {
116
+ const Icon = item.icon;
117
+ const icon = (_jsx(Icon, { size: 17, weight: active ? "bold" : "regular", className: active
118
+ ? "shrink-0 text-foreground"
119
+ : "shrink-0 text-muted-foreground transition-colors group-hover:text-foreground" }));
120
+ const externalProps = item.external
121
+ ? { target: "_blank", rel: "noopener noreferrer" }
122
+ : {};
123
+ if (collapsed) {
124
+ return (_jsx(Link, { href: item.href, ...externalProps, "aria-label": item.label, title: item.label, className: `group grid h-8 w-8 place-items-center rounded-md transition-colors ${active
125
+ ? "bg-secondary text-foreground"
126
+ : "text-muted-foreground hover:bg-secondary/60 hover:text-foreground"}`, children: icon }));
127
+ }
128
+ return (_jsxs(Link, { href: item.href, ...externalProps, className: `group relative flex h-8 items-center gap-2.5 rounded-md px-2 text-[13px] transition-colors ${active
129
+ ? "bg-secondary font-medium text-foreground"
130
+ : "text-muted-foreground hover:bg-secondary/60 hover:text-foreground"}`, children: [active && (_jsx("span", { className: "absolute left-0 top-1/2 h-4 w-0.5 -translate-y-1/2 rounded-full bg-brand" })), icon, _jsx("span", { className: "flex-1 truncate", children: item.label }), item.external && (_jsx(ArrowSquareOut, { size: 12, className: "shrink-0 text-muted-foreground/40" }))] }));
131
+ }
132
+ //# sourceMappingURL=dashboard-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-shell.js","sourceRoot":"","sources":["../../../src/v2/shell/dashboard-shell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function SelfHostCreateSkillDialog({ open, onOpenChange }: {
2
+ projectId: string;
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=self-host-create-skill-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-create-skill-dialog.d.ts","sourceRoot":"","sources":["../../../src/v2/skills/self-host-create-skill-dialog.tsx"],"names":[],"mappings":"AASA,wBAAgB,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,2CAkC5I"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { useSkills } from "@polpo-ai/react";
5
+ import { Button } from "../ui/button.js";
6
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog.js";
7
+ import { Input } from "../ui/input.js";
8
+ import { Textarea } from "../ui/textarea.js";
9
+ export function SelfHostCreateSkillDialog({ open, onOpenChange }) {
10
+ const { createSkill, isCreating } = useSkills();
11
+ const [error, setError] = useState(null);
12
+ async function submit(event) {
13
+ event.preventDefault();
14
+ const data = new FormData(event.currentTarget);
15
+ setError(null);
16
+ try {
17
+ const name = String(data.get("name") ?? "").trim();
18
+ await createSkill({ name, description: `Custom skill: ${name}`, content: String(data.get("content") ?? "").trim() });
19
+ onOpenChange(false);
20
+ }
21
+ catch (cause) {
22
+ setError(cause instanceof Error ? cause.message : "Could not create skill");
23
+ }
24
+ }
25
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "v2 sm:max-w-xl", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create custom skill" }), _jsx(DialogDescription, { children: "Add a reusable SKILL.md definition to this project." })] }), _jsxs("form", { className: "grid gap-4", onSubmit: (event) => void submit(event), children: [_jsxs("label", { className: "grid gap-1.5 text-[12px] font-medium text-foreground", children: ["Name", _jsx(Input, { name: "name", required: true, placeholder: "customer-support" })] }), _jsxs("label", { className: "grid gap-1.5 text-[12px] font-medium text-foreground", children: ["Instructions", _jsx(Textarea, { name: "content", required: true, rows: 12, placeholder: "# Customer support\\n\\nUse this skill when\u2026" })] }), error && _jsx("p", { className: "text-[12px] text-destructive", children: error }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: "Cancel" }), _jsx(Button, { type: "submit", disabled: isCreating, children: isCreating ? "Creating…" : "Create skill" })] })] })] }) }));
26
+ }
27
+ //# sourceMappingURL=self-host-create-skill-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-create-skill-dialog.js","sourceRoot":"","sources":["../../../src/v2/skills/self-host-create-skill-dialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,UAAU,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAA+E;IAC3I,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;IAChD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,KAAK,UAAU,MAAM,CAAC,KAAiC;QACrD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrH,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,YAC5C,MAAC,aAAa,IAAC,SAAS,EAAC,gBAAgB,aACvC,MAAC,YAAY,eACX,KAAC,WAAW,sCAAkC,EAC9C,KAAC,iBAAiB,sEAAwE,IAC7E,EACf,gBAAM,SAAS,EAAC,YAAY,EAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,aAClE,iBAAO,SAAS,EAAC,sDAAsD,qBAAK,KAAC,KAAK,IAAC,IAAI,EAAC,MAAM,EAAC,QAAQ,QAAC,WAAW,EAAC,kBAAkB,GAAG,IAAQ,EACjJ,iBAAO,SAAS,EAAC,sDAAsD,6BAAa,KAAC,QAAQ,IAAC,IAAI,EAAC,SAAS,EAAC,QAAQ,QAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAC,mDAA4C,GAAG,IAAQ,EAClM,KAAK,IAAI,YAAG,SAAS,EAAC,8BAA8B,YAAE,KAAK,GAAK,EACjE,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,uBAAiB,EAC3F,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,UAAU,YAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,GAAU,IACnF,IACV,IACO,GACT,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function SelfHostSkillDetailView({ name }: {
2
+ name: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=self-host-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-detail.d.ts","sourceRoot":"","sources":["../../../src/v2/skills/self-host-detail.tsx"],"names":[],"mappings":"AAaA,wBAAgB,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CA2CjE"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useQuery } from "@tanstack/react-query";
4
+ import { useDashboardHost } from "../../host.js";
5
+ import { usePolpoClient } from "../host.js";
6
+ import { PageBody } from "../ui/page-header.js";
7
+ import { SkillDetail, } from "../views/skills-detail.js";
8
+ export function SelfHostSkillDetailView({ name }) {
9
+ const host = useDashboardHost();
10
+ const polpo = usePolpoClient(host.project.id);
11
+ const { data, isLoading } = useQuery({
12
+ queryKey: ["skill-detail-bootstrap", host.project.id, name],
13
+ queryFn: async () => {
14
+ const [skill, files, skills] = await Promise.all([
15
+ polpo.getSkillContent(name),
16
+ polpo.listFiles(`.polpo/skills/${name}`).catch(() => ({ entries: [] })),
17
+ polpo.getSkills(),
18
+ ]);
19
+ return {
20
+ skill,
21
+ files: files.entries,
22
+ skills,
23
+ };
24
+ },
25
+ });
26
+ if (isLoading) {
27
+ return (_jsx(PageBody, { children: _jsxs("div", { className: "space-y-5", children: [_jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-16 w-full animate-pulse rounded-lg bg-muted" }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-[1fr_360px]", children: [_jsx("div", { className: "h-96 animate-pulse rounded-lg bg-muted" }), _jsx("div", { className: "h-72 animate-pulse rounded-lg bg-muted" })] })] }) }));
28
+ }
29
+ return (_jsx(PageBody, { children: _jsx(SkillDetail, { initialSkill: data?.skill ?? null, initialFiles: data?.files ?? [], initialSkillsList: data?.skills ?? [] }) }));
30
+ }
31
+ //# sourceMappingURL=self-host-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-detail.js","sourceRoot":"","sources":["../../../src/v2/skills/self-host-detail.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,WAAW,GAIZ,MAAM,2BAA2B,CAAC;AAEnC,MAAM,UAAU,uBAAuB,CAAC,EAAE,IAAI,EAAoB;IAChE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;QACnC,QAAQ,EAAE,CAAC,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC;QAC3D,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC/C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAoC;gBAC9D,KAAK,CAAC,SAAS,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvE,KAAK,CAAC,SAAS,EAA2C;aAC3D,CAAC,CAAC;YACH,OAAO;gBACL,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,OAAsB;gBACnC,MAAM;aACP,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,KAAC,QAAQ,cACP,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,yCAAyC,GAAG,EAC3D,cAAK,SAAS,EAAC,+CAA+C,GAAG,EACjE,eAAK,SAAS,EAAC,qCAAqC,aAClD,cAAK,SAAS,EAAC,wCAAwC,GAAG,EAC1D,cAAK,SAAS,EAAC,wCAAwC,GAAG,IACtD,IACF,GACG,CACZ,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,QAAQ,cACP,KAAC,WAAW,IACV,YAAY,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EACjC,YAAY,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAC/B,iBAAiB,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,GACrC,GACO,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Shared "call this agent" snippets — the single source for the code shown in
3
+ * the agent Run dialog AND the onboarding "call it via API" step (DRY). Given a
4
+ * tenant base URL + agent + a chat message or a task, it builds curl / SDK /
5
+ * Python / coding-agent snippets for the OpenAI-compatible data-plane API.
6
+ */
7
+ export type CallLang = "curl" | "ts" | "python" | "agent";
8
+ export declare const CALL_LANGS: {
9
+ id: CallLang;
10
+ label: string;
11
+ }[];
12
+ /** Tenant data-plane base URL — mirrors settings' `tenantApiUrl(slug)`. */
13
+ export declare function tenantBase(slug?: string): string;
14
+ export type CallSnippetInput = {
15
+ base: string;
16
+ agentName: string;
17
+ /** true = streaming chat (`/v1/chat/completions`), false = background task. */
18
+ streaming: boolean;
19
+ message: string;
20
+ taskTitle: string;
21
+ taskDesc: string;
22
+ };
23
+ export type CallSnippets = {
24
+ curl: string;
25
+ ts: string;
26
+ python: string;
27
+ agentPrompt: string;
28
+ /** Resolve a language to `{ code, codeLang }` for a <CodeBlock>. */
29
+ pick: (lang: CallLang) => {
30
+ code: string;
31
+ codeLang: string;
32
+ };
33
+ };
34
+ export declare function buildCallSnippets(i: CallSnippetInput): CallSnippets;
35
+ //# sourceMappingURL=agent-call-snippets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-call-snippets.d.ts","sourceRoot":"","sources":["../../../src/v2/support/agent-call-snippets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D,eAAO,MAAM,UAAU,EAAE;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAKvD,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAoGnE"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Shared "call this agent" snippets — the single source for the code shown in
3
+ * the agent Run dialog AND the onboarding "call it via API" step (DRY). Given a
4
+ * tenant base URL + agent + a chat message or a task, it builds curl / SDK /
5
+ * Python / coding-agent snippets for the OpenAI-compatible data-plane API.
6
+ */
7
+ export const CALL_LANGS = [
8
+ { id: "curl", label: "cURL" },
9
+ { id: "ts", label: "TypeScript" },
10
+ { id: "python", label: "Python" },
11
+ { id: "agent", label: "Coding agent" },
12
+ ];
13
+ /** Tenant data-plane base URL — mirrors settings' `tenantApiUrl(slug)`. */
14
+ export function tenantBase(slug) {
15
+ if (!slug)
16
+ return "https://<your-project>.polpo.cloud";
17
+ if (process.env.NEXT_PUBLIC_API_URL?.includes("localhost")) {
18
+ return `http://${slug}.polpo.localhost`;
19
+ }
20
+ return `https://${slug}.polpo.cloud`;
21
+ }
22
+ export function buildCallSnippets(i) {
23
+ const { base, agentName, streaming, message, taskTitle, taskDesc } = i;
24
+ const bodyObj = streaming
25
+ ? {
26
+ agent: agentName,
27
+ messages: [{ role: "user", content: message }],
28
+ stream: true,
29
+ }
30
+ : { assignTo: agentName, title: taskTitle, description: taskDesc };
31
+ const path = streaming ? "/v1/chat/completions" : "/v1/tasks";
32
+ const json2 = JSON.stringify(bodyObj, null, 2);
33
+ const pyStr = (s) => JSON.stringify(s);
34
+ const curl = `curl ${streaming ? "-N " : ""}${base}${path} \\
35
+ -H "Authorization: Bearer $POLPO_API_KEY" \\
36
+ -H "Content-Type: application/json" \\
37
+ -d '${json2}'`;
38
+ const ts = `import { PolpoClient } from "@polpo-ai/sdk";
39
+
40
+ const polpo = new PolpoClient({
41
+ baseUrl: "${base}",
42
+ apiKey: process.env.POLPO_API_KEY!,
43
+ });
44
+
45
+ ${streaming
46
+ ? `const stream = polpo.chatCompletionsStream(${json2});
47
+ for await (const chunk of stream) {
48
+ process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
49
+ }`
50
+ : `const task = await polpo.createTask(${json2});
51
+ console.log("task:", task.id);`}`;
52
+ const python = streaming
53
+ ? `import json, os, requests
54
+
55
+ with requests.post(
56
+ "${base}${path}",
57
+ headers={"Authorization": f"Bearer {os.environ['POLPO_API_KEY']}", "Content-Type": "application/json"},
58
+ json={
59
+ "agent": ${pyStr(agentName)},
60
+ "messages": [{"role": "user", "content": ${pyStr(message)}}],
61
+ "stream": True,
62
+ },
63
+ stream=True,
64
+ ) as r:
65
+ for line in r.iter_lines():
66
+ if not line or not line.startswith(b"data: "):
67
+ continue
68
+ data = line[6:]
69
+ if data == b"[DONE]":
70
+ break
71
+ delta = json.loads(data)["choices"][0]["delta"]
72
+ print(delta.get("content", ""), end="", flush=True)`
73
+ : `import os, requests
74
+
75
+ r = requests.post(
76
+ "${base}${path}",
77
+ headers={"Authorization": f"Bearer {os.environ['POLPO_API_KEY']}", "Content-Type": "application/json"},
78
+ json={
79
+ "assignTo": ${pyStr(agentName)},
80
+ "title": ${pyStr(taskTitle)},
81
+ "description": ${pyStr(taskDesc)},
82
+ },
83
+ )
84
+ print(r.json())`;
85
+ const agentPrompt = streaming
86
+ ? `You can call the Polpo agent "${agentName}" — a ready-made agent with its own model, tools, skills, and instructions. Use it instead of building this behaviour from scratch.
87
+
88
+ Call it as a streaming chat (OpenAI-compatible, SSE):
89
+ POST ${base}/v1/chat/completions
90
+ Headers: Authorization: Bearer <POLPO_API_KEY>, Content-Type: application/json
91
+ Body: { "agent": "${agentName}", "messages": [{ "role": "user", "content": "…" }], "stream": true }
92
+ Concatenate choices[0].delta.content from each \`data: {…}\` chunk; stop at \`data: [DONE]\`.
93
+
94
+ If a Polpo SDK or skill is available, use it — new PolpoClient({ baseUrl: "${base}", apiKey }) → polpo.chatCompletionsStream(req); otherwise call the HTTP endpoint directly. Read the key from a POLPO_API_KEY env var, never hard-code it.`
95
+ : `You can call the Polpo agent "${agentName}" — a ready-made agent with its own model, tools, skills, and instructions. Use it instead of building this behaviour from scratch.
96
+
97
+ Call it as a background task:
98
+ POST ${base}/v1/tasks
99
+ Headers: Authorization: Bearer <POLPO_API_KEY>, Content-Type: application/json
100
+ Body: { "assignTo": "${agentName}", "title": "…", "description": "…" }
101
+ Returns a task id; poll GET /v1/tasks/<id> for its status and result.
102
+
103
+ If a Polpo SDK or skill is available, use it — new PolpoClient({ baseUrl: "${base}", apiKey }) → polpo.createTask(req); otherwise call the HTTP endpoint directly. Read the key from a POLPO_API_KEY env var, never hard-code it.`;
104
+ const pick = (lang) => lang === "curl"
105
+ ? { code: curl, codeLang: "bash" }
106
+ : lang === "ts"
107
+ ? { code: ts, codeLang: "typescript" }
108
+ : lang === "python"
109
+ ? { code: python, codeLang: "python" }
110
+ : { code: agentPrompt, codeLang: "markdown" };
111
+ return { curl, ts, python, agentPrompt, pick };
112
+ }
113
+ //# sourceMappingURL=agent-call-snippets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-call-snippets.js","sourceRoot":"","sources":["../../../src/v2/support/agent-call-snippets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Static catalog of agent runtime tools (the strings used in an agent's
3
+ * `allowedTools`). Mirrors the `@polpo-ai/tools` package so the dashboard
4
+ * can show the FULL catalog — not just what a given agent has enabled —
5
+ * with human-readable descriptions and per-category metadata.
6
+ *
7
+ * Descriptions are taken from the tool definitions in @polpo-ai/tools.
8
+ * Keep in sync when the package adds/changes tools. (A future
9
+ * GET /v1/tools endpoint will replace this — see todo-tools-catalog-endpoint.)
10
+ *
11
+ * `core: true` → always available, cannot be disabled (no allowedTools entry needed).
12
+ * `requiresKey` → needs an external credential (vault entry, env var, or managed Connection) to run.
13
+ */
14
+ export interface CatalogTool {
15
+ name: string;
16
+ description: string;
17
+ }
18
+ export interface CatalogGroup {
19
+ /** Stable key + the tool-name prefix for non-core groups (e.g. "image_"). */
20
+ key: string;
21
+ /** Display label, e.g. "Image". */
22
+ label: string;
23
+ /** Lucide icon name, resolved to a component in the view. */
24
+ icon: string;
25
+ /** Core groups are always available and have no on/off state. */
26
+ core?: boolean;
27
+ /**
28
+ * Baseline groups are ON by default (when the agent has no `allowedTools`
29
+ * set) but CAN be turned off — they mirror the runtime, which keeps these
30
+ * tools only while `allowedTools` is unset, and filters them otherwise.
31
+ */
32
+ baseline?: boolean;
33
+ /** At least one tool in the group needs an external API key / credential. */
34
+ requiresKey?: boolean;
35
+ /** Display text for the credential requirement badge. Defaults to "needs vault". */
36
+ credentialLabel?: string;
37
+ /** Keep every tool visible in allowedTools instead of collapsing to a wildcard. */
38
+ explicitToolsOnly?: boolean;
39
+ /** One-line note about what the group unlocks / requires. */
40
+ note?: string;
41
+ tools: CatalogTool[];
42
+ }
43
+ export declare const TOOL_CATALOG: CatalogGroup[];
44
+ /** Every catalogued tool name, for detecting custom/unknown enabled tools. */
45
+ export declare const CATALOG_TOOL_NAMES: Set<string>;
46
+ export declare const CATALOG_TOOL_WILDCARDS: Set<string>;
47
+ /**
48
+ * Is `toolName` enabled by an agent's `allowedTools`? True on an exact match
49
+ * or a matching wildcard (e.g. "image_*" enables "image_generate").
50
+ */
51
+ export declare function isToolEnabled(toolName: string, allowed: string[]): boolean;
52
+ /** Tools the runtime grants when an agent has no explicit allowedTools. */
53
+ export declare const BASELINE_TOOLS: Set<string>;
54
+ /**
55
+ * The number of tools an agent actually has enabled — resolving core tools
56
+ * (always on), the empty-allowedTools baseline, and `prefix*` wildcards. Use
57
+ * this instead of `allowedTools.length`, which miscounts wildcards/baseline.
58
+ */
59
+ export declare function countEnabledTools(allowed: string[]): number;
60
+ /** Does `allowed` enable a whole group via its wildcard (e.g. "image_*")? */
61
+ export declare function hasGroupWildcard(groupKey: string, allowed: string[]): boolean;
62
+ //# sourceMappingURL=tool-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-catalog.d.ts","sourceRoot":"","sources":["../../../src/v2/support/tool-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,EAAE,YAAY,EAgNtC,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,aAE9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,aAElC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAK1E;AAED,2EAA2E;AAC3E,eAAO,MAAM,cAAc,aAUzB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAa3D;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAE7E"}