@tonyclaw/agent-inspector 3.0.12 → 3.0.14

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 (40) hide show
  1. package/.output/cli.js +72 -6
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-BxgmeTyv.js → CompareDrawer-DDfwHQUi.js} +1 -1
  4. package/.output/public/assets/{ProxyViewerContainer-CchT6T-4.js → ProxyViewerContainer-CbNsaoQw.js} +41 -41
  5. package/.output/public/assets/{ReplayDialog-CMHVUtVB.js → ReplayDialog-D-26DMBt.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-CpqHIkD1.js → RequestAnatomy-B6zNFqNX.js} +1 -1
  7. package/.output/public/assets/{ResponseView-BvhBiQ5k.js → ResponseView-Ccy95rWI.js} +2 -2
  8. package/.output/public/assets/{StreamingChunkSequence-CcNvFNPp.js → StreamingChunkSequence-yIiscGuE.js} +1 -1
  9. package/.output/public/assets/{_sessionId-D5z6C77f.js → _sessionId-BnMB0zab.js} +1 -1
  10. package/.output/public/assets/index-49RC4dlD.js +1 -0
  11. package/.output/public/assets/{index-CXcH69lm.js → index-BbtAIxbg.js} +1 -1
  12. package/.output/public/assets/index-DXKupW0r.css +1 -0
  13. package/.output/public/assets/{json-viewer-DjRQ00mw.js → json-viewer-C838cVmD.js} +1 -1
  14. package/.output/public/assets/{main-CkKubKth.js → main-BfN4culo.js} +2 -2
  15. package/.output/server/_libs/lucide-react.mjs +33 -33
  16. package/.output/server/{_sessionId-IP7wEbnv.mjs → _sessionId-DoprmwZV.mjs} +3 -3
  17. package/.output/server/_ssr/{CompareDrawer-B4qTq3I9.mjs → CompareDrawer-YMLJNxXR.mjs} +3 -3
  18. package/.output/server/_ssr/{ProxyViewerContainer-CCIJ1EcB.mjs → ProxyViewerContainer-C62eZnva.mjs} +215 -24
  19. package/.output/server/_ssr/{ReplayDialog-BgxCdCxM.mjs → ReplayDialog-NmN7Ukjo.mjs} +3 -3
  20. package/.output/server/_ssr/{RequestAnatomy-De3QDi_x.mjs → RequestAnatomy-Dawm2qxe.mjs} +2 -2
  21. package/.output/server/_ssr/{ResponseView-Dvibk8g5.mjs → ResponseView-BHyAY83t.mjs} +3 -3
  22. package/.output/server/_ssr/{StreamingChunkSequence-oAsweEag.mjs → StreamingChunkSequence-C4qgcJbg.mjs} +2 -2
  23. package/.output/server/_ssr/{index-BIlK7gMO.mjs → index-B2Pf6W_T.mjs} +2 -2
  24. package/.output/server/_ssr/index.mjs +2 -2
  25. package/.output/server/_ssr/{json-viewer-Dgo4oRbs.mjs → json-viewer-u67BASf8.mjs} +3 -3
  26. package/.output/server/_ssr/{router-DY_2TxnZ.mjs → router-CZhFVMGN.mjs} +267 -111
  27. package/.output/server/_tanstack-start-manifest_v-Dk2HfOoe.mjs +4 -0
  28. package/.output/server/index.mjs +73 -73
  29. package/README.md +32 -9
  30. package/package.json +1 -1
  31. package/src/cli.ts +95 -11
  32. package/src/components/ecosystem/AgentLabDialog.tsx +221 -10
  33. package/src/lib/ecosystemContract.ts +21 -1
  34. package/src/proxy/ecosystemRegistry.ts +52 -0
  35. package/src/proxy/ecosystemTasks.ts +95 -1
  36. package/src/routes/api/ecosystem.packages.ts +2 -1
  37. package/src/routes/api/ecosystem.recipes.$recipeId.run.ts +16 -0
  38. package/.output/public/assets/index-BIgsQvaF.css +0 -1
  39. package/.output/public/assets/index-C57MERBU.js +0 -1
  40. package/.output/server/_tanstack-start-manifest_v-CYOwyBpv.mjs +0 -4
@@ -816,7 +816,7 @@ const __iconNode = [
816
816
  ];
817
817
  const Zap = createLucideIcon("zap", __iconNode);
818
818
  export {
819
- Zap as $,
819
+ MessageSquare as $,
820
820
  ArrowLeft as A,
821
821
  Beaker as B,
822
822
  CircleCheck as C,
@@ -824,50 +824,50 @@ export {
824
824
  FolderOpen as E,
825
825
  FileBraces as F,
826
826
  Gauge as G,
827
- Bell as H,
827
+ History as H,
828
828
  Info as I,
829
- Clock3 as J,
830
- ShieldAlert as K,
829
+ Bell as J,
830
+ Clock3 as K,
831
831
  LoaderCircle as L,
832
832
  Monitor as M,
833
833
  Network as N,
834
- EyeOff as O,
834
+ ShieldAlert as O,
835
835
  Plus as P,
836
- Eye as Q,
836
+ EyeOff as Q,
837
837
  RefreshCw as R,
838
838
  Search as S,
839
839
  TriangleAlert as T,
840
840
  Upload as U,
841
- ExternalLink as V,
842
- Clock as W,
841
+ Eye as V,
842
+ ExternalLink as W,
843
843
  X,
844
- RotateCw as Y,
845
- Pencil as Z,
846
- MessageSquare as _,
844
+ Clock as Y,
845
+ RotateCw as Z,
846
+ Pencil as _,
847
847
  ChevronDown as a,
848
- Wrench as a0,
849
- Brain as a1,
850
- CircleCheckBig as a2,
851
- Minus as a3,
852
- CircleQuestionMark as a4,
853
- Server as a5,
854
- Lock as a6,
855
- Wifi as a7,
856
- WifiOff as a8,
857
- CircleX as a9,
848
+ Zap as a0,
849
+ Wrench as a1,
850
+ Brain as a2,
851
+ CircleCheckBig as a3,
852
+ Minus as a4,
853
+ CircleQuestionMark as a5,
854
+ Server as a6,
855
+ Lock as a7,
856
+ Wifi as a8,
857
+ WifiOff as a9,
858
858
  CircleStop as aA,
859
- ShieldCheck as aa,
860
- Save as ab,
861
- FileSearch as ac,
862
- CloudUpload as ad,
863
- OctagonAlert as ae,
864
- Radio as af,
865
- Globe as ag,
866
- FileTerminal as ah,
867
- ChevronsUp as ai,
868
- ChevronsDown as aj,
869
- FileDiff as ak,
870
- History as al,
859
+ CircleX as aa,
860
+ ShieldCheck as ab,
861
+ Save as ac,
862
+ FileSearch as ad,
863
+ CloudUpload as ae,
864
+ OctagonAlert as af,
865
+ Radio as ag,
866
+ Globe as ah,
867
+ FileTerminal as ai,
868
+ ChevronsUp as aj,
869
+ ChevronsDown as ak,
870
+ FileDiff as al,
871
871
  RotateCcw as am,
872
872
  GitCompareArrows as an,
873
873
  ArrowUp as ao,
@@ -1,6 +1,6 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "./_libs/react.mjs";
2
- import { P as ProxyViewerContainer } from "./_ssr/ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import { R as Route$I } from "./_ssr/router-DY_2TxnZ.mjs";
2
+ import { P as ProxyViewerContainer } from "./_ssr/ProxyViewerContainer-C62eZnva.mjs";
3
+ import { R as Route$J } from "./_ssr/router-CZhFVMGN.mjs";
4
4
  import "./_libs/jszip.mjs";
5
5
  import "./_libs/modelcontextprotocol__server.mjs";
6
6
  import "./_libs/swr.mjs";
@@ -118,7 +118,7 @@ import "./_libs/pako.mjs";
118
118
  function SessionViewerRoute() {
119
119
  const {
120
120
  sessionId
121
- } = Route$I.useParams();
121
+ } = Route$J.useParams();
122
122
  return /* @__PURE__ */ jsxRuntimeExports.jsx(ClientOnlySessionViewer, { sessionId });
123
123
  }
124
124
  function ClientOnlySessionViewer({
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, r as resolveLogFormat, a as getConversationId, c as cn, B as Badge, f as formatTokens, b as copyTextToClipboard, L as LazyJsonViewerFromString } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import "./router-DY_2TxnZ.mjs";
2
+ import { g as getLogFormatAdapter, r as resolveLogFormat, a as getConversationId, c as cn, B as Badge, f as formatTokens, b as copyTextToClipboard, L as LazyJsonViewerFromString } from "./ProxyViewerContainer-C62eZnva.mjs";
3
+ import "./router-CZhFVMGN.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { X, av as Rows3, aw as Columns2, a3 as Minus, P as Plus, Z as Pencil, h as ChevronRight, ax as Equal, b as Check, e as Copy } from "../_libs/lucide-react.mjs";
6
+ import { X, av as Rows3, aw as Columns2, a4 as Minus, P as Plus, _ as Pencil, h as ChevronRight, ax as Equal, b as Check, e as Copy } from "../_libs/lucide-react.mjs";
7
7
  import "../_libs/swr.mjs";
8
8
  import "../_libs/use-sync-external-store.mjs";
9
9
  import "../_libs/dequal.mjs";
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
2
- import { C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, i as apiFormatForPath, n as DeleteInspectorGroupsResponseSchema, o as GroupEvidenceExportResultSchema, q as DeleteInspectorGroupResponseSchema, l as AlertSummarySchema, m as AlertListResponseSchema, I as InspectorGroupsListResponseSchema, G as GroupEvidenceReadResponseSchema, z as createPendingProviderTestResults, B as ProviderTestResultsSchema, E as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, F as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, t as maskApiKey, v as PATH_V1_MESSAGES, w as PATH_V1_CHAT_COMPLETIONS, x as PATH_V1_RESPONSES, r as providerHasContextMetadata, f as parseOpenAIResponse, g as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, h as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, H as resolveProviderContextWindow, j as getSessionPath, u as findProviderModelMetadata, y as previewUpstreamUrl, K as KnowledgeCandidateSchema, J as isPlainRecord, k as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema } from "./router-DY_2TxnZ.mjs";
2
+ import { C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, i as apiFormatForPath, n as DeleteInspectorGroupsResponseSchema, o as GroupEvidenceExportResultSchema, q as DeleteInspectorGroupResponseSchema, l as AlertSummarySchema, m as AlertListResponseSchema, I as InspectorGroupsListResponseSchema, G as GroupEvidenceReadResponseSchema, z as createPendingProviderTestResults, B as ProviderTestResultsSchema, E as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, F as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, t as maskApiKey, v as PATH_V1_MESSAGES, w as PATH_V1_CHAT_COMPLETIONS, x as PATH_V1_RESPONSES, r as providerHasContextMetadata, f as parseOpenAIResponse, g as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, h as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, H as resolveProviderContextWindow, j as getSessionPath, u as findProviderModelMetadata, y as previewUpstreamUrl, K as KnowledgeCandidateSchema, J as isPlainRecord, k as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema } from "./router-CZhFVMGN.mjs";
3
3
  import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
4
4
  import { J as JSZip } from "../_libs/jszip.mjs";
5
5
  import { c as clsx } from "../_libs/clsx.mjs";
@@ -9,7 +9,7 @@ import { c as cva } from "../_libs/class-variance-authority.mjs";
9
9
  import { u as useWindowVirtualizer, a as useVirtualizer } from "../_libs/tanstack__react-virtual.mjs";
10
10
  import { d as diffJson, a as diffLines } from "../_libs/diff.mjs";
11
11
  import { R as Root2, T as Trigger, I as Icon, V as Value, P as Portal, C as Content2, a as Viewport, b as Item, c as ItemIndicator, d as ItemText, S as ScrollUpButton, e as ScrollDownButton } from "../_libs/radix-ui__react-select.mjs";
12
- import { T as TriangleAlert, C as CircleCheck, X, I as Info, a as ChevronDown, b as Check, R as RefreshCw, c as Trash2, S as Search, U as Upload, D as Download, F as FileBraces, P as Plus, A as ArrowLeft, d as ChevronUp, e as Copy, f as ChevronsLeft, g as ChevronLeft, h as ChevronRight, i as ChevronsRight, j as Clapperboard, k as Flag, l as Siren, m as Timer, G as Gauge, L as LoaderCircle, n as Layers, o as FlaskConical, p as Sparkles, q as Activity, B as Beaker, N as Network, r as Terminal, s as Settings, M as Monitor, t as Rocket, u as PackageCheck, v as Scan, w as CircleAlert, x as ArrowUpRight, y as ArrowDownRight, z as Cpu, E as FolderOpen, H as Bell, J as Clock3, K as ShieldAlert, O as EyeOff, Q as Eye, V as ExternalLink, W as Clock, Y as RotateCw, Z as Pencil, _ as MessageSquare, $ as Zap, a0 as Wrench, a1 as Brain, a2 as CircleCheckBig, a3 as Minus, a4 as CircleQuestionMark, a5 as Server, a6 as Lock, a7 as Wifi, a8 as WifiOff, a9 as CircleX, aa as ShieldCheck, ab as Save, ac as FileSearch, ad as CloudUpload, ae as OctagonAlert, af as Radio, ag as Globe, ah as FileTerminal, ai as ChevronsUp, aj as ChevronsDown, ak as FileDiff, al as History, am as RotateCcw, an as GitCompareArrows, ao as ArrowUp, ap as ArrowDown, aq as Ellipsis, ar as CodeXml, as as Blocks, at as MousePointerClick, au as FileText, av as Rows3, aw as Columns2 } from "../_libs/lucide-react.mjs";
12
+ import { T as TriangleAlert, C as CircleCheck, X, I as Info, a as ChevronDown, b as Check, R as RefreshCw, c as Trash2, S as Search, U as Upload, D as Download, F as FileBraces, P as Plus, A as ArrowLeft, d as ChevronUp, e as Copy, f as ChevronsLeft, g as ChevronLeft, h as ChevronRight, i as ChevronsRight, j as Clapperboard, k as Flag, l as Siren, m as Timer, G as Gauge, L as LoaderCircle, n as Layers, o as FlaskConical, p as Sparkles, q as Activity, B as Beaker, N as Network, r as Terminal, s as Settings, M as Monitor, t as Rocket, u as PackageCheck, H as History, v as Scan, w as CircleAlert, x as ArrowUpRight, y as ArrowDownRight, z as Cpu, E as FolderOpen, J as Bell, K as Clock3, O as ShieldAlert, Q as EyeOff, V as Eye, W as ExternalLink, Y as Clock, Z as RotateCw, _ as Pencil, $ as MessageSquare, a0 as Zap, a1 as Wrench, a2 as Brain, a3 as CircleCheckBig, a4 as Minus, a5 as CircleQuestionMark, a6 as Server, a7 as Lock, a8 as Wifi, a9 as WifiOff, aa as CircleX, ab as ShieldCheck, ac as Save, ad as FileSearch, ae as CloudUpload, af as OctagonAlert, ag as Radio, ah as Globe, ai as FileTerminal, aj as ChevronsUp, ak as ChevronsDown, al as FileDiff, am as RotateCcw, an as GitCompareArrows, ao as ArrowUp, ap as ArrowDown, aq as Ellipsis, ar as CodeXml, as as Blocks, at as MousePointerClick, au as FileText, av as Rows3, aw as Columns2 } from "../_libs/lucide-react.mjs";
13
13
  import { u as union, d as object, a as array, l as literal, n as number, c as boolean, b as string, _ as _enum } from "../_libs/zod.mjs";
14
14
  import { S as Slot } from "../_libs/radix-ui__react-slot.mjs";
15
15
  import { R as Root2$1, L as List, T as Trigger$2, C as Content$1 } from "../_libs/radix-ui__react-tabs.mjs";
@@ -2546,27 +2546,27 @@ function useCopyFeedback(text) {
2546
2546
  return { copied, copy };
2547
2547
  }
2548
2548
  const LazyCompareDrawer = reactExports.lazy(
2549
- () => import("./CompareDrawer-B4qTq3I9.mjs").then((m) => ({ default: m.CompareDrawer }))
2549
+ () => import("./CompareDrawer-YMLJNxXR.mjs").then((m) => ({ default: m.CompareDrawer }))
2550
2550
  );
2551
2551
  const LazyReplayDialog = reactExports.lazy(
2552
- () => import("./ReplayDialog-BgxCdCxM.mjs").then((m) => ({ default: m.ReplayDialog }))
2552
+ () => import("./ReplayDialog-NmN7Ukjo.mjs").then((m) => ({ default: m.ReplayDialog }))
2553
2553
  );
2554
2554
  const LazyRequestAnatomy = reactExports.lazy(
2555
- () => import("./RequestAnatomy-De3QDi_x.mjs").then((m) => ({ default: m.RequestAnatomy }))
2555
+ () => import("./RequestAnatomy-Dawm2qxe.mjs").then((m) => ({ default: m.RequestAnatomy }))
2556
2556
  );
2557
2557
  const LazyResponseView = reactExports.lazy(
2558
- () => import("./ResponseView-Dvibk8g5.mjs").then((m) => ({ default: m.ResponseView }))
2558
+ () => import("./ResponseView-BHyAY83t.mjs").then((m) => ({ default: m.ResponseView }))
2559
2559
  );
2560
2560
  const LazyStreamingChunkSequence = reactExports.lazy(
2561
- () => import("./StreamingChunkSequence-oAsweEag.mjs").then((m) => ({
2561
+ () => import("./StreamingChunkSequence-C4qgcJbg.mjs").then((m) => ({
2562
2562
  default: m.StreamingChunkSequence
2563
2563
  }))
2564
2564
  );
2565
2565
  const LazyJsonViewer = reactExports.lazy(
2566
- () => import("./json-viewer-Dgo4oRbs.mjs").then((m) => ({ default: m.JsonViewer }))
2566
+ () => import("./json-viewer-u67BASf8.mjs").then((m) => ({ default: m.JsonViewer }))
2567
2567
  );
2568
2568
  const LazyJsonViewerFromString = reactExports.lazy(
2569
- () => import("./json-viewer-Dgo4oRbs.mjs").then((m) => ({ default: m.JsonViewerFromString }))
2569
+ () => import("./json-viewer-u67BASf8.mjs").then((m) => ({ default: m.JsonViewerFromString }))
2570
2570
  );
2571
2571
  const HIGHLIGHT_DURATION_MS = 1200;
2572
2572
  const MAX_HIGHLIGHT_ATTEMPTS = 12;
@@ -11084,17 +11084,35 @@ const EcosystemRunnerPresetSchema = object({
11084
11084
  skillsDir: string(),
11085
11085
  agentsDir: string()
11086
11086
  });
11087
+ const EcosystemRecipeSchema = object({
11088
+ id: string(),
11089
+ title: string(),
11090
+ stage: string(),
11091
+ packageId: string(),
11092
+ description: string(),
11093
+ command: string(),
11094
+ requiresSession: boolean(),
11095
+ runnable: boolean()
11096
+ });
11087
11097
  const EcosystemPackagesResponseSchema = object({
11088
11098
  checkedAt: string(),
11089
11099
  packages: array(EcosystemPackageSchema),
11090
- runnerPresets: array(EcosystemRunnerPresetSchema)
11100
+ runnerPresets: array(EcosystemRunnerPresetSchema),
11101
+ recipes: array(EcosystemRecipeSchema)
11091
11102
  });
11092
- const EcosystemTaskActionSchema = _enum(["install", "upgrade", "help", "runner-presets"]);
11103
+ const EcosystemTaskActionSchema = _enum([
11104
+ "install",
11105
+ "upgrade",
11106
+ "help",
11107
+ "runner-presets",
11108
+ "recipe"
11109
+ ]);
11093
11110
  const EcosystemTaskStatusSchema = _enum(["queued", "running", "succeeded", "failed"]);
11094
11111
  const EcosystemTaskSchema = object({
11095
11112
  id: string(),
11096
11113
  packageId: string(),
11097
11114
  npmName: string(),
11115
+ recipeId: string().nullable().default(null),
11098
11116
  action: EcosystemTaskActionSchema,
11099
11117
  status: EcosystemTaskStatusSchema,
11100
11118
  command: string(),
@@ -11108,7 +11126,7 @@ const EcosystemTaskSchema = object({
11108
11126
  const EcosystemTaskResponseSchema = object({
11109
11127
  task: EcosystemTaskSchema
11110
11128
  });
11111
- object({
11129
+ const EcosystemTasksResponseSchema = object({
11112
11130
  tasks: array(EcosystemTaskSchema)
11113
11131
  });
11114
11132
  const WORKFLOWS = [
@@ -11161,6 +11179,14 @@ async function fetchEcosystemTask(url) {
11161
11179
  (response) => `Failed to load ecosystem task: ${String(response.status)}`
11162
11180
  );
11163
11181
  }
11182
+ async function fetchEcosystemTasks(url) {
11183
+ return fetchJson(
11184
+ url,
11185
+ EcosystemTasksResponseSchema,
11186
+ void 0,
11187
+ (response) => `Failed to load ecosystem tasks: ${String(response.status)}`
11188
+ );
11189
+ }
11164
11190
  async function startEcosystemTask(packageId, action) {
11165
11191
  const response = await fetchJson(
11166
11192
  `/api/ecosystem/packages/${encodeURIComponent(packageId)}/${action}`,
@@ -11170,6 +11196,15 @@ async function startEcosystemTask(packageId, action) {
11170
11196
  );
11171
11197
  return response.task;
11172
11198
  }
11199
+ async function startEcosystemRecipe(recipeId) {
11200
+ const response = await fetchJson(
11201
+ `/api/ecosystem/recipes/${encodeURIComponent(recipeId)}/run`,
11202
+ EcosystemTaskResponseSchema,
11203
+ { method: "POST" },
11204
+ (result) => `Failed to start ecosystem recipe: ${String(result.status)}`
11205
+ );
11206
+ return response.task;
11207
+ }
11173
11208
  function stateLabel(state) {
11174
11209
  switch (state) {
11175
11210
  case "installed":
@@ -11217,6 +11252,8 @@ function taskActionLabel(action) {
11217
11252
  return "Help";
11218
11253
  case "runner-presets":
11219
11254
  return "Presets";
11255
+ case "recipe":
11256
+ return "Recipe";
11220
11257
  }
11221
11258
  }
11222
11259
  function taskStatusLabel(task) {
@@ -11231,6 +11268,17 @@ function taskStatusLabel(task) {
11231
11268
  return `${taskActionLabel(task.action)} failed`;
11232
11269
  }
11233
11270
  }
11271
+ function taskStatusClassName(status) {
11272
+ switch (status) {
11273
+ case "queued":
11274
+ case "running":
11275
+ return "border-cyan-300/20 bg-cyan-300/8 text-cyan-100";
11276
+ case "succeeded":
11277
+ return "border-emerald-400/20 bg-emerald-400/8 text-emerald-100";
11278
+ case "failed":
11279
+ return "border-red-400/20 bg-red-400/8 text-red-100";
11280
+ }
11281
+ }
11234
11282
  function packagePrimaryAction(pkg) {
11235
11283
  switch (pkg.state) {
11236
11284
  case "available":
@@ -11325,17 +11373,7 @@ function TaskConsole({ task }) {
11325
11373
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "break-all font-mono text-[11px] text-white/35", children: task.command })
11326
11374
  ] })
11327
11375
  ] }),
11328
- /* @__PURE__ */ jsxRuntimeExports.jsx(
11329
- Badge,
11330
- {
11331
- variant: "outline",
11332
- className: cn(
11333
- "shrink-0",
11334
- task.status === "failed" ? "border-red-400/20 bg-red-400/8 text-red-100" : "border-cyan-300/20 bg-cyan-300/8 text-cyan-100"
11335
- ),
11336
- children: task.status
11337
- }
11338
- )
11376
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: cn("shrink-0", taskStatusClassName(task.status)), children: task.status })
11339
11377
  ] }),
11340
11378
  /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "mt-3 max-h-56 overflow-auto whitespace-pre-wrap rounded-md bg-black/30 p-3 font-mono text-[11px] leading-5 text-white/60 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.045)]", children: task.output.trim().length > 0 ? task.output : "Waiting for npm output..." }),
11341
11379
  task.error !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 text-xs text-red-100", children: task.error })
@@ -11392,10 +11430,89 @@ function RunnerPresetCard({ preset }) {
11392
11430
  ] })
11393
11431
  ] });
11394
11432
  }
11433
+ function RecipeCard({
11434
+ recipe,
11435
+ copied,
11436
+ running,
11437
+ onCopy,
11438
+ onRun
11439
+ }) {
11440
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-lg bg-white/[0.025] p-3 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.055)]", children: [
11441
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [
11442
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
11443
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-start gap-2", children: [
11444
+ /* @__PURE__ */ jsxRuntimeExports.jsx(FlaskConical, { className: "size-4 shrink-0 text-cyan-200/75" }),
11445
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold leading-snug", children: recipe.title })
11446
+ ] }),
11447
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-xs leading-5 text-muted-foreground", children: recipe.description })
11448
+ ] }),
11449
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "border-white/10 bg-white/[0.04] text-white/55", children: recipe.runnable ? recipe.stage : "Template" })
11450
+ ] }),
11451
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-3 rounded-md bg-black/20 p-2 font-mono text-[11px] leading-5 text-white/50 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.045)]", children: recipe.command }),
11452
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-3 flex items-center justify-between gap-2", children: [
11453
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "rounded bg-white/[0.035] px-2 py-1 font-mono text-[11px] text-white/35", children: recipe.packageId }),
11454
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
11455
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { type: "button", size: "sm", variant: "outline", onClick: () => onCopy(recipe), children: [
11456
+ copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" }),
11457
+ copied ? "Copied" : "Copy"
11458
+ ] }),
11459
+ recipe.runnable && /* @__PURE__ */ jsxRuntimeExports.jsxs(
11460
+ Button,
11461
+ {
11462
+ type: "button",
11463
+ size: "sm",
11464
+ variant: "secondary",
11465
+ disabled: running,
11466
+ onClick: () => onRun(recipe),
11467
+ children: [
11468
+ running ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Rocket, { className: "size-3.5" }),
11469
+ running ? "Running" : "Run"
11470
+ ]
11471
+ }
11472
+ )
11473
+ ] })
11474
+ ] })
11475
+ ] });
11476
+ }
11477
+ function RecentTaskRow({
11478
+ task,
11479
+ selected,
11480
+ onSelect
11481
+ }) {
11482
+ const label = task.recipeId ?? taskActionLabel(task.action);
11483
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-3 rounded-md bg-white/[0.025] px-3 py-2 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.045)]", children: [
11484
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
11485
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
11486
+ /* @__PURE__ */ jsxRuntimeExports.jsx(History, { className: "size-3.5 shrink-0 text-white/40" }),
11487
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "truncate text-xs font-semibold text-white/75", children: label }),
11488
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: cn("shrink-0", taskStatusClassName(task.status)), children: task.status })
11489
+ ] }),
11490
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 flex min-w-0 flex-wrap items-center gap-2 font-mono text-[10px] text-white/35", children: [
11491
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: task.packageId }),
11492
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: new Date(task.createdAt).toLocaleTimeString() }),
11493
+ task.exitCode !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
11494
+ "exit ",
11495
+ String(task.exitCode)
11496
+ ] })
11497
+ ] })
11498
+ ] }),
11499
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
11500
+ Button,
11501
+ {
11502
+ type: "button",
11503
+ size: "sm",
11504
+ variant: selected ? "secondary" : "outline",
11505
+ onClick: () => onSelect(task),
11506
+ children: selected ? "Open" : "View"
11507
+ }
11508
+ )
11509
+ ] });
11510
+ }
11395
11511
  function AgentLabDialog({ currentSessionId, logCount }) {
11396
11512
  const [open, setOpen] = reactExports.useState(false);
11397
11513
  const [copied, setCopied] = reactExports.useState(false);
11398
11514
  const [copiedPresets, setCopiedPresets] = reactExports.useState(false);
11515
+ const [copiedRecipeId, setCopiedRecipeId] = reactExports.useState(null);
11399
11516
  const [activeTaskId, setActiveTaskId] = reactExports.useState(null);
11400
11517
  const [taskError, setTaskError] = reactExports.useState(null);
11401
11518
  const response = useSWR("/api/ecosystem/packages", fetchEcosystemPackages, {
@@ -11413,8 +11530,14 @@ function AgentLabDialog({ currentSessionId, logCount }) {
11413
11530
  revalidateOnFocus: false
11414
11531
  }
11415
11532
  );
11533
+ const tasksResponse = useSWR(open ? "/api/ecosystem/tasks" : null, fetchEcosystemTasks, {
11534
+ refreshInterval: 2500,
11535
+ revalidateOnFocus: false
11536
+ });
11416
11537
  const packages = response.data?.packages ?? [];
11417
11538
  const runnerPresets = response.data?.runnerPresets ?? [];
11539
+ const recipes = response.data?.recipes ?? [];
11540
+ const recentTasks = (tasksResponse.data?.tasks ?? []).slice(0, 6);
11418
11541
  const installedCount = reactExports.useMemo(
11419
11542
  () => packages.filter((pkg) => pkg.state === "installed" || pkg.state === "update-available").length,
11420
11543
  [packages]
@@ -11433,17 +11556,35 @@ function AgentLabDialog({ currentSessionId, logCount }) {
11433
11556
  window.setTimeout(() => setCopiedPresets(false), 1200);
11434
11557
  });
11435
11558
  };
11559
+ const copyRecipeCommand = (recipe) => {
11560
+ void copyTextToClipboard(recipe.command).then(() => {
11561
+ setCopiedRecipeId(recipe.id);
11562
+ window.setTimeout(() => setCopiedRecipeId(null), 1200);
11563
+ });
11564
+ };
11565
+ const runRecipe = (recipe) => {
11566
+ setTaskError(null);
11567
+ void startEcosystemRecipe(recipe.id).then((task) => {
11568
+ setActiveTaskId(task.id);
11569
+ void activeTaskResponse.mutate({ task }, { revalidate: true });
11570
+ void tasksResponse.mutate();
11571
+ }).catch((error) => {
11572
+ setTaskError(error instanceof Error ? error.message : "Failed to start ecosystem recipe");
11573
+ });
11574
+ };
11436
11575
  const activeTask = activeTaskResponse.data?.task ?? null;
11437
11576
  reactExports.useEffect(() => {
11438
11577
  if (activeTask === null) return;
11578
+ void tasksResponse.mutate();
11439
11579
  if (activeTask.status !== "succeeded") return;
11440
11580
  void response.mutate();
11441
- }, [activeTask, response]);
11581
+ }, [activeTask, response, tasksResponse]);
11442
11582
  const handleStartTask = (packageId, action) => {
11443
11583
  setTaskError(null);
11444
11584
  void startEcosystemTask(packageId, action).then((task) => {
11445
11585
  setActiveTaskId(task.id);
11446
11586
  void activeTaskResponse.mutate({ task }, { revalidate: true });
11587
+ void tasksResponse.mutate();
11447
11588
  }).catch((error) => {
11448
11589
  setTaskError(error instanceof Error ? error.message : "Failed to start ecosystem task");
11449
11590
  });
@@ -11509,6 +11650,35 @@ function AgentLabDialog({ currentSessionId, logCount }) {
11509
11650
  ] })
11510
11651
  ] })
11511
11652
  ] }),
11653
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "mt-3", children: [
11654
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-2 flex items-center justify-between gap-3", children: [
11655
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold", children: "Lab recipes" }),
11656
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center gap-1 font-mono text-[11px] text-muted-foreground sm:flex", children: [
11657
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Sparkles, { className: "size-3.5" }),
11658
+ "copy-ready workflows"
11659
+ ] })
11660
+ ] }),
11661
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [
11662
+ recipes.map((recipe) => /* @__PURE__ */ jsxRuntimeExports.jsx(
11663
+ RecipeCard,
11664
+ {
11665
+ recipe,
11666
+ copied: copiedRecipeId === recipe.id,
11667
+ running: activeTask !== null && activeTask.recipeId === recipe.id && (activeTask.status === "queued" || activeTask.status === "running"),
11668
+ onCopy: copyRecipeCommand,
11669
+ onRun: runRecipe
11670
+ },
11671
+ recipe.id
11672
+ )),
11673
+ response.isLoading && recipes.length === 0 && [0, 1].map((index) => /* @__PURE__ */ jsxRuntimeExports.jsx(
11674
+ "div",
11675
+ {
11676
+ className: "h-40 animate-pulse rounded-lg bg-white/[0.025] shadow-[inset_0_0_0_1px_rgba(255,255,255,0.055)]"
11677
+ },
11678
+ index
11679
+ ))
11680
+ ] })
11681
+ ] }),
11512
11682
  /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "mt-3", children: [
11513
11683
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-2 flex items-center justify-between gap-3", children: [
11514
11684
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold", children: "Runner presets" }),
@@ -11554,6 +11724,27 @@ function AgentLabDialog({ currentSessionId, logCount }) {
11554
11724
  ] })
11555
11725
  ] }),
11556
11726
  taskError !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-3 rounded-lg bg-red-500/8 p-3 text-xs text-red-100 shadow-[inset_0_0_0_1px_rgba(248,113,113,0.16)]", children: taskError }),
11727
+ recentTasks.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "mt-3", children: [
11728
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-2 flex items-center justify-between gap-3", children: [
11729
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold", children: "Recent Lab runs" }),
11730
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden font-mono text-[11px] text-muted-foreground sm:block", children: [
11731
+ "last ",
11732
+ String(recentTasks.length)
11733
+ ] })
11734
+ ] }),
11735
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid gap-2 md:grid-cols-2", children: recentTasks.map((task) => /* @__PURE__ */ jsxRuntimeExports.jsx(
11736
+ RecentTaskRow,
11737
+ {
11738
+ task,
11739
+ selected: activeTaskId === task.id,
11740
+ onSelect: (selectedTask) => {
11741
+ setActiveTaskId(selectedTask.id);
11742
+ void activeTaskResponse.mutate({ task: selectedTask }, { revalidate: true });
11743
+ }
11744
+ },
11745
+ task.id
11746
+ )) })
11747
+ ] }),
11557
11748
  /* @__PURE__ */ jsxRuntimeExports.jsx(TaskConsole, { task: activeTask })
11558
11749
  ] })
11559
11750
  ] })
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, d as fetchJsonWithTimeout, D as Dialog, e as DialogContent, h as DialogHeader, i as DialogTitle, T as Tabs, j as TabsList, k as TabsTrigger, l as TabsContent, m as Button, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, s as dispatchLogFocusRequest, A as ApiTimeoutError } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import { ResponseView } from "./ResponseView-Dvibk8g5.mjs";
4
- import { C as CapturedLogSchema } from "./router-DY_2TxnZ.mjs";
2
+ import { u as useProviders, d as fetchJsonWithTimeout, D as Dialog, e as DialogContent, h as DialogHeader, i as DialogTitle, T as Tabs, j as TabsList, k as TabsTrigger, l as TabsContent, m as Button, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, s as dispatchLogFocusRequest, A as ApiTimeoutError } from "./ProxyViewerContainer-C62eZnva.mjs";
3
+ import { ResponseView } from "./ResponseView-BHyAY83t.mjs";
4
+ import { C as CapturedLogSchema } from "./router-CZhFVMGN.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
7
  import { am as RotateCcw, ay as Braces, az as Minimize2 } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, t as analyzeContextIntelligence, f as formatTokens, n as TooltipProvider, c as cn, o as Tooltip, p as TooltipTrigger, q as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, v as ANATOMY_ROLE_LABELS, w as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import "./router-DY_2TxnZ.mjs";
2
+ import { u as useProviders, t as analyzeContextIntelligence, f as formatTokens, n as TooltipProvider, c as cn, o as Tooltip, p as TooltipTrigger, q as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, v as ANATOMY_ROLE_LABELS, w as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-C62eZnva.mjs";
3
+ import "./router-CZhFVMGN.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { I as Info, a as ChevronDown, h as ChevronRight } from "../_libs/lucide-react.mjs";
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, x as getStatusCategory, B as Badge, y as Collapsible, z as CollapsibleTrigger, E as CollapsibleContent, F as ScrollArea, G as LazyJsonViewer, H as safeJsonValue } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import { s as safeGetOwnProperty } from "./router-DY_2TxnZ.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, x as getStatusCategory, B as Badge, y as Collapsible, z as CollapsibleTrigger, E as CollapsibleContent, F as ScrollArea, G as LazyJsonViewer, H as safeJsonValue } from "./ProxyViewerContainer-C62eZnva.mjs";
3
+ import { s as safeGetOwnProperty } from "./router-CZhFVMGN.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
- import { $ as Zap, T as TriangleAlert, aA as CircleStop, a1 as Brain, a as ChevronDown, h as ChevronRight, r as Terminal } from "../_libs/lucide-react.mjs";
6
+ import { a0 as Zap, T as TriangleAlert, aA as CircleStop, a2 as Brain, a as ChevronDown, h as ChevronRight, r as Terminal } from "../_libs/lucide-react.mjs";
7
7
  import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
8
8
  import "../_libs/swr.mjs";
9
9
  import "../_libs/use-sync-external-store.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { d as fetchJsonWithTimeout, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, B as Badge, q as TooltipContent, G as LazyJsonViewer } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import { S as StreamingChunkSchema$1 } from "./router-DY_2TxnZ.mjs";
2
+ import { d as fetchJsonWithTimeout, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, B as Badge, q as TooltipContent, G as LazyJsonViewer } from "./ProxyViewerContainer-C62eZnva.mjs";
3
+ import { S as StreamingChunkSchema$1 } from "./router-CZhFVMGN.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import { a as ChevronDown, h as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-C62eZnva.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-DY_2TxnZ.mjs";
3
+ import "./router-CZhFVMGN.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/swr.mjs";
@@ -198,7 +198,7 @@ function getResponse() {
198
198
  return event.res;
199
199
  }
200
200
  async function getStartManifest(matchedRoutes) {
201
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-CYOwyBpv.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-Dk2HfOoe.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -776,7 +776,7 @@ let entriesPromise;
776
776
  let baseManifestPromise;
777
777
  let cachedFinalManifestPromise;
778
778
  async function loadEntries() {
779
- const routerEntry = await import("./router-DY_2TxnZ.mjs").then((n) => n.N);
779
+ const routerEntry = await import("./router-CZhFVMGN.mjs").then((n) => n.N);
780
780
  const startEntry = await import("./start-HYkvq4Ni.mjs");
781
781
  return { startEntry, routerEntry };
782
782
  }
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { I as parseJsonText, c as cn, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-CCIJ1EcB.mjs";
3
- import "./router-DY_2TxnZ.mjs";
2
+ import { I as parseJsonText, c as cn, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-C62eZnva.mjs";
3
+ import "./router-CZhFVMGN.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, aj as ChevronsDown } from "../_libs/lucide-react.mjs";
6
+ import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, ak as ChevronsDown } from "../_libs/lucide-react.mjs";
7
7
  import "../_libs/swr.mjs";
8
8
  import "../_libs/use-sync-external-store.mjs";
9
9
  import "../_libs/dequal.mjs";