sunpeak 0.20.36 → 0.20.42

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 (33) hide show
  1. package/README.md +4 -2
  2. package/bin/commands/inspect.mjs +225 -34
  3. package/bin/commands/test-init.mjs +4 -0
  4. package/bin/lib/eval/eval-runner.mjs +49 -1
  5. package/bin/lib/eval/eval-types.d.mts +27 -0
  6. package/bin/lib/eval/model-registry.mjs +6 -3
  7. package/dist/chatgpt/index.cjs +1 -1
  8. package/dist/chatgpt/index.js +1 -1
  9. package/dist/claude/index.cjs +1 -1
  10. package/dist/claude/index.js +1 -1
  11. package/dist/embed.css +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/inspector/index.cjs +1 -1
  15. package/dist/inspector/index.js +1 -1
  16. package/dist/inspector/inspector.d.ts +7 -0
  17. package/dist/inspector/use-inspector-state.d.ts +28 -0
  18. package/dist/{inspector-CiuT_2yA.js → inspector-C6n8zap3.js} +172 -57
  19. package/dist/{inspector-CiuT_2yA.js.map → inspector-C6n8zap3.js.map} +1 -1
  20. package/dist/{inspector-BNWla95w.cjs → inspector-DOmiG64-.cjs} +172 -57
  21. package/dist/{inspector-BNWla95w.cjs.map → inspector-DOmiG64-.cjs.map} +1 -1
  22. package/dist/style.css +22 -0
  23. package/package.json +1 -1
  24. package/template/dist/albums/albums.html +1 -1
  25. package/template/dist/albums/albums.json +1 -1
  26. package/template/dist/carousel/carousel.html +1 -1
  27. package/template/dist/carousel/carousel.json +1 -1
  28. package/template/dist/map/map.html +1 -1
  29. package/template/dist/map/map.json +1 -1
  30. package/template/dist/review/review.html +1 -1
  31. package/template/dist/review/review.json +1 -1
  32. package/template/tests/e2e/visual.spec.ts-snapshots/albums-fullscreen-chatgpt-linux.png +0 -0
  33. package/template/tests/e2e/visual.spec.ts-snapshots/albums-fullscreen-claude-linux.png +0 -0
@@ -6538,6 +6538,9 @@ var VALID_SCREEN_WIDTHS = new Set([
6538
6538
  "tablet",
6539
6539
  "full"
6540
6540
  ]);
6541
+ function isSafeStoredString(value) {
6542
+ return typeof value === "string" && value.length <= 200 && !/[\u0000-\u001f\u007f]/.test(value);
6543
+ }
6541
6544
  function sanitizeStoredPrefs(raw) {
6542
6545
  if (!raw || typeof raw !== "object") return {};
6543
6546
  const obj = raw;
@@ -6545,6 +6548,8 @@ function sanitizeStoredPrefs(raw) {
6545
6548
  if (typeof obj.theme === "string" && VALID_THEMES.has(obj.theme)) prefs.theme = obj.theme;
6546
6549
  if (typeof obj.locale === "string") prefs.locale = obj.locale;
6547
6550
  if (typeof obj.displayMode === "string" && VALID_DISPLAY_MODES.has(obj.displayMode)) prefs.displayMode = obj.displayMode;
6551
+ if (typeof obj.containerHeight === "number" && Number.isFinite(obj.containerHeight)) prefs.containerHeight = obj.containerHeight;
6552
+ if (typeof obj.containerWidth === "number" && Number.isFinite(obj.containerWidth)) prefs.containerWidth = obj.containerWidth;
6548
6553
  if (typeof obj.containerMaxHeight === "number" && Number.isFinite(obj.containerMaxHeight)) prefs.containerMaxHeight = obj.containerMaxHeight;
6549
6554
  if (typeof obj.containerMaxWidth === "number" && Number.isFinite(obj.containerMaxWidth)) prefs.containerMaxWidth = obj.containerMaxWidth;
6550
6555
  if (obj.safeAreaInsets && typeof obj.safeAreaInsets === "object") {
@@ -6563,6 +6568,10 @@ function sanitizeStoredPrefs(raw) {
6563
6568
  if (typeof obj.screenWidth === "string" && VALID_SCREEN_WIDTHS.has(obj.screenWidth)) prefs.screenWidth = obj.screenWidth;
6564
6569
  if (typeof obj.sidebarWidth === "number" && Number.isFinite(obj.sidebarWidth)) prefs.sidebarWidth = Math.max(DEFAULT_SIDEBAR_WIDTH$1, Math.round(obj.sidebarWidth));
6565
6570
  if (typeof obj.rightSidebarWidth === "number" && Number.isFinite(obj.rightSidebarWidth)) prefs.rightSidebarWidth = Math.max(DEFAULT_SIDEBAR_WIDTH$1, Math.round(obj.rightSidebarWidth));
6571
+ if (typeof obj.timeZone === "string") prefs.timeZone = obj.timeZone;
6572
+ if (typeof obj.prodResources === "boolean") prefs.prodResources = obj.prodResources;
6573
+ if (isSafeStoredString(obj.modelProvider)) prefs.modelProvider = obj.modelProvider;
6574
+ if (isSafeStoredString(obj.modelId)) prefs.modelId = obj.modelId;
6566
6575
  return prefs;
6567
6576
  }
6568
6577
  function readStoredPrefs() {
@@ -6575,6 +6584,12 @@ function readStoredPrefs() {
6575
6584
  return {};
6576
6585
  }
6577
6586
  }
6587
+ function writeStoredPrefs(prefs) {
6588
+ if (typeof window === "undefined") return;
6589
+ try {
6590
+ localStorage.setItem(PREFS_KEY, JSON.stringify(prefs));
6591
+ } catch {}
6592
+ }
6578
6593
  function deriveContainerDimensions({ displayMode, containerHeight, containerWidth, containerMaxHeight, containerMaxWidth, measuredContentWidth, viewportHeight = 800, viewportWidth = 1280 }) {
6579
6594
  if (containerHeight != null || containerWidth != null || containerMaxHeight != null || containerMaxWidth != null) return {
6580
6595
  ...containerHeight != null ? { height: containerHeight } : {},
@@ -6623,8 +6638,8 @@ function useInspectorState({ simulations, defaultHost = "chatgpt", preserveToolD
6623
6638
  const [theme, setTheme] = useState(urlParams.theme ?? storedPrefs.theme ?? DEFAULT_THEME);
6624
6639
  const [displayMode, _setDisplayMode] = useState(urlParams.displayMode ?? storedPrefs.displayMode ?? DEFAULT_DISPLAY_MODE);
6625
6640
  const [locale, setLocale] = useState(urlParams.locale ?? storedPrefs.locale ?? "en-US");
6626
- const [containerHeight, setContainerHeight] = useState(void 0);
6627
- const [containerWidth, setContainerWidth] = useState(void 0);
6641
+ const [containerHeight, setContainerHeight] = useState(storedPrefs.containerHeight);
6642
+ const [containerWidth, setContainerWidth] = useState(storedPrefs.containerWidth);
6628
6643
  const [containerMaxHeight, setContainerMaxHeight] = useState(urlParams.containerMaxHeight ?? storedPrefs.containerMaxHeight);
6629
6644
  const [containerMaxWidth, setContainerMaxWidth] = useState(urlParams.containerMaxWidth ?? storedPrefs.containerMaxWidth);
6630
6645
  const [platform, setPlatform] = useState(urlParams.platform ?? storedPrefs.platform ?? DEFAULT_PLATFORM);
@@ -6636,7 +6651,7 @@ function useInspectorState({ simulations, defaultHost = "chatgpt", preserveToolD
6636
6651
  left: 0,
6637
6652
  right: 0
6638
6653
  });
6639
- const [timeZone, setTimeZone] = useState(() => Intl.DateTimeFormat().resolvedOptions().timeZone);
6654
+ const [timeZone, setTimeZone] = useState(() => storedPrefs.timeZone ?? Intl.DateTimeFormat().resolvedOptions().timeZone);
6640
6655
  const isFirstRender = useRef(true);
6641
6656
  useEffect(() => {
6642
6657
  if (isFirstRender.current) {
@@ -6644,29 +6659,32 @@ function useInspectorState({ simulations, defaultHost = "chatgpt", preserveToolD
6644
6659
  return;
6645
6660
  }
6646
6661
  if (autoRun) return;
6647
- try {
6648
- const prefs = {
6649
- theme,
6650
- locale,
6651
- displayMode,
6652
- containerMaxHeight,
6653
- containerMaxWidth,
6654
- safeAreaInsets,
6655
- activeHost,
6656
- platform,
6657
- hover,
6658
- touch,
6659
- screenWidth,
6660
- sidebarWidth,
6661
- rightSidebarWidth
6662
- };
6663
- localStorage.setItem(PREFS_KEY, JSON.stringify(prefs));
6664
- } catch {}
6662
+ writeStoredPrefs({
6663
+ ...readStoredPrefs(),
6664
+ theme,
6665
+ locale,
6666
+ displayMode,
6667
+ containerHeight,
6668
+ containerWidth,
6669
+ containerMaxHeight,
6670
+ containerMaxWidth,
6671
+ safeAreaInsets,
6672
+ activeHost,
6673
+ platform,
6674
+ hover,
6675
+ touch,
6676
+ screenWidth,
6677
+ sidebarWidth,
6678
+ rightSidebarWidth,
6679
+ timeZone
6680
+ });
6665
6681
  }, [
6666
6682
  autoRun,
6667
6683
  theme,
6668
6684
  locale,
6669
6685
  displayMode,
6686
+ containerHeight,
6687
+ containerWidth,
6670
6688
  containerMaxHeight,
6671
6689
  containerMaxWidth,
6672
6690
  safeAreaInsets,
@@ -6676,7 +6694,8 @@ function useInspectorState({ simulations, defaultHost = "chatgpt", preserveToolD
6676
6694
  touch,
6677
6695
  screenWidth,
6678
6696
  sidebarWidth,
6679
- rightSidebarWidth
6697
+ rightSidebarWidth,
6698
+ timeZone
6680
6699
  ]);
6681
6700
  const [measuredContentWidth, setMeasuredContentWidth] = useState(void 0);
6682
6701
  const handleContentWidthChange = useCallback((width) => {
@@ -7589,12 +7608,16 @@ var DOCS_BASE_URL = "https://sunpeak.ai/docs";
7589
7608
  var DEFAULT_MODEL_PROVIDERS = [{
7590
7609
  id: "openai",
7591
7610
  label: "OpenAI",
7592
- defaultModel: "gpt-4o"
7611
+ defaultModel: "gpt-5.5"
7593
7612
  }, {
7594
7613
  id: "anthropic",
7595
7614
  label: "Anthropic",
7596
- defaultModel: "claude-3-5-sonnet-20241022"
7615
+ defaultModel: "claude-sonnet-4-20250514"
7597
7616
  }];
7617
+ function createModelConversationId() {
7618
+ const random = typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : Math.random().toString(36).slice(2);
7619
+ return `model-chat-${Date.now()}-${random}`;
7620
+ }
7598
7621
  function splitCssArgs(value) {
7599
7622
  const args = [];
7600
7623
  let depth = 0;
@@ -7687,6 +7710,7 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7687
7710
  autoRun: params.get("autoRun") === "true"
7688
7711
  };
7689
7712
  }, []);
7713
+ const storedPrefs = React.useMemo(() => initUrlParams.autoRun ? {} : readStoredPrefs(), [initUrlParams.autoRun]);
7690
7714
  const [selectedToolName, setSelectedToolName] = React.useState(() => {
7691
7715
  if (initUrlParams.tool && toolMap.has(initUrlParams.tool)) return initUrlParams.tool;
7692
7716
  if (initUrlParams.simulation) {
@@ -7736,7 +7760,7 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7736
7760
  const [oauthStatus, setOauthStatus] = React.useState("none");
7737
7761
  const [oauthError, setOauthError] = React.useState();
7738
7762
  const connection = useMcpConnection(isEmbedded ? void 0 : mcpServerUrl || void 0, inspectorApiBaseUrl);
7739
- const [prodResources, setProdResources] = React.useState(state.urlProdResources ?? defaultProdResources);
7763
+ const [prodResources, setProdResources] = React.useState(state.urlProdResources ?? storedPrefs.prodResources ?? defaultProdResources);
7740
7764
  const showSidebar = state.urlSidebar !== false;
7741
7765
  const showDevOverlay = state.urlDevOverlay !== false;
7742
7766
  const [isRunning, setIsRunning] = React.useState(false);
@@ -7758,6 +7782,15 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7758
7782
  if (requested && modelProviderOptions.some((provider) => provider.id === requested)) return requested;
7759
7783
  return modelProviderOptions[0]?.id ?? "openai";
7760
7784
  }, [modelChat?.defaultProvider, modelProviderOptions]);
7785
+ const initialModelProvider = React.useMemo(() => {
7786
+ const stored = storedPrefs.modelProvider;
7787
+ if (stored && modelProviderOptions.some((provider) => provider.id === stored)) return stored;
7788
+ return defaultModelProvider;
7789
+ }, [
7790
+ defaultModelProvider,
7791
+ modelProviderOptions,
7792
+ storedPrefs.modelProvider
7793
+ ]);
7761
7794
  const getDefaultModelId = React.useCallback((provider) => {
7762
7795
  const option = modelProviderOptions.find((item) => item.id === provider);
7763
7796
  const candidates = [
@@ -7769,8 +7802,20 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7769
7802
  if (providerModels.length === 0) return candidates.find(Boolean) ?? "";
7770
7803
  return candidates.find((model) => model && providerModels.includes(model)) ?? providerModels[0];
7771
7804
  }, [modelChat?.defaultModel, modelProviderOptions]);
7772
- const [modelProvider, setModelProvider] = React.useState(defaultModelProvider);
7773
- const [modelId, setModelId] = React.useState(() => getDefaultModelId(defaultModelProvider));
7805
+ const getInitialModelId = React.useCallback((provider) => {
7806
+ const stored = storedPrefs.modelId;
7807
+ if (storedPrefs.modelProvider && storedPrefs.modelProvider !== provider) return getDefaultModelId(provider);
7808
+ const providerModels = modelProviderOptions.find((item) => item.id === provider)?.models ?? [];
7809
+ if (stored && (providerModels.length === 0 || providerModels.includes(stored))) return stored;
7810
+ return getDefaultModelId(provider);
7811
+ }, [
7812
+ getDefaultModelId,
7813
+ modelProviderOptions,
7814
+ storedPrefs.modelId,
7815
+ storedPrefs.modelProvider
7816
+ ]);
7817
+ const [modelProvider, setModelProvider] = React.useState(initialModelProvider);
7818
+ const [modelId, setModelId] = React.useState(() => getInitialModelId(initialModelProvider));
7774
7819
  const [apiKeyDraft, setApiKeyDraft] = React.useState("");
7775
7820
  const [keyStatus, setKeyStatus] = React.useState({ hasKey: false });
7776
7821
  const [isKeyStatusLoading, setIsKeyStatusLoading] = React.useState(usesApiKeyUi);
@@ -7779,6 +7824,7 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7779
7824
  const [chatInput, setChatInput] = React.useState("");
7780
7825
  const [isChatting, setIsChatting] = React.useState(false);
7781
7826
  const [chatStatus, setChatStatus] = React.useState("");
7827
+ const modelConversationIdRef = React.useRef(createModelConversationId());
7782
7828
  const currentModelProvider = React.useMemo(() => modelProviderOptions.find((provider) => provider.id === modelProvider), [modelProvider, modelProviderOptions]);
7783
7829
  const selectedProviderModelOptions = React.useMemo(() => currentModelProvider?.models ?? [], [currentModelProvider?.models]);
7784
7830
  const modelCallableTools = React.useMemo(() => {
@@ -7789,6 +7835,25 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7789
7835
  }
7790
7836
  return Array.from(map.values());
7791
7837
  }, [simulations]);
7838
+ const isFirstInspectorPrefsRender = React.useRef(true);
7839
+ React.useEffect(() => {
7840
+ if (isFirstInspectorPrefsRender.current) {
7841
+ isFirstInspectorPrefsRender.current = false;
7842
+ return;
7843
+ }
7844
+ if (initUrlParams.autoRun) return;
7845
+ writeStoredPrefs({
7846
+ ...readStoredPrefs(),
7847
+ prodResources,
7848
+ modelProvider,
7849
+ modelId
7850
+ });
7851
+ }, [
7852
+ initUrlParams.autoRun,
7853
+ modelId,
7854
+ modelProvider,
7855
+ prodResources
7856
+ ]);
7792
7857
  React.useEffect(() => {
7793
7858
  setServerUrl(mcpServerUrl ?? "");
7794
7859
  }, [mcpServerUrl]);
@@ -7898,6 +7963,13 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
7898
7963
  usesApiKeyUi,
7899
7964
  usesLocalModelEndpoints
7900
7965
  ]);
7966
+ const handleResetModelConversation = React.useCallback(() => {
7967
+ modelConversationIdRef.current = createModelConversationId();
7968
+ setChatMessages([]);
7969
+ setChatInput("");
7970
+ setChatStatus("");
7971
+ setIsChatting(false);
7972
+ }, []);
7901
7973
  React.useEffect(() => {
7902
7974
  state.setSelectedSimulationName(effectiveSimulationName);
7903
7975
  }, [effectiveSimulationName]);
@@ -8158,15 +8230,18 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
8158
8230
  state.setToolResultJson("");
8159
8231
  state.setToolResultError("");
8160
8232
  setHasRun(false);
8233
+ const requestConversationId = modelConversationIdRef.current;
8161
8234
  try {
8162
8235
  const messages = nextMessages.map((message) => ({
8163
8236
  role: message.role,
8164
- content: message.content
8165
- }));
8237
+ content: message.content.trim()
8238
+ })).filter((message) => message.content.length > 0);
8166
8239
  let data;
8167
8240
  if (modelChatHandler) data = await modelChatHandler({
8241
+ conversationId: requestConversationId,
8168
8242
  provider: modelProvider,
8169
8243
  modelId,
8244
+ host: state.activeHost,
8170
8245
  messages,
8171
8246
  tools: modelCallableTools,
8172
8247
  appContext: state.modelAppContext ?? void 0
@@ -8177,8 +8252,10 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
8177
8252
  method: "POST",
8178
8253
  headers: { "Content-Type": "application/json" },
8179
8254
  body: JSON.stringify({
8255
+ conversationId: requestConversationId,
8180
8256
  provider: modelProvider,
8181
8257
  modelId,
8258
+ host: state.activeHost,
8182
8259
  messages,
8183
8260
  appContext: state.modelAppContext ?? void 0
8184
8261
  })
@@ -8187,6 +8264,7 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
8187
8264
  if (!res.ok || data.error) throw new Error(data.error ?? `Model request failed (${res.status})`);
8188
8265
  }
8189
8266
  if (data.error) throw new Error(data.error);
8267
+ if (requestConversationId !== modelConversationIdRef.current) return;
8190
8268
  let rendersApp = false;
8191
8269
  const toolCalls = data.toolCalls ?? [];
8192
8270
  for (let index = toolCalls.length - 1; index >= 0; index--) {
@@ -8224,6 +8302,7 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
8224
8302
  });
8225
8303
  setChatStatus("");
8226
8304
  } catch (err) {
8305
+ if (requestConversationId !== modelConversationIdRef.current) return;
8227
8306
  const message = err instanceof Error ? err.message : String(err);
8228
8307
  setChatMessages((messages) => [...messages, {
8229
8308
  id: `assistant-error-${Date.now()}`,
@@ -8232,7 +8311,7 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
8232
8311
  }]);
8233
8312
  setChatStatus(message);
8234
8313
  } finally {
8235
- setIsChatting(false);
8314
+ if (requestConversationId === modelConversationIdRef.current) setIsChatting(false);
8236
8315
  }
8237
8316
  }, [
8238
8317
  canUseModelChat,
@@ -8846,33 +8925,69 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
8846
8925
  children: /* @__PURE__ */ jsxs("div", {
8847
8926
  className: "space-y-1",
8848
8927
  children: [/* @__PURE__ */ jsxs("div", {
8849
- className: "grid grid-cols-2 gap-2",
8850
- children: [/* @__PURE__ */ jsx(SidebarControl, {
8851
- label: "Provider",
8852
- children: /* @__PURE__ */ jsx(SidebarSelect, {
8853
- value: modelProvider,
8854
- onChange: handleModelProviderChange,
8855
- options: modelProviderOptions.map((provider) => ({
8856
- value: provider.id,
8857
- label: provider.label ?? provider.id
8858
- }))
8859
- })
8860
- }), /* @__PURE__ */ jsx(SidebarControl, {
8861
- label: "Model",
8862
- children: selectedProviderModelOptions.length > 0 ? /* @__PURE__ */ jsx(SidebarSelect, {
8863
- value: modelId,
8864
- onChange: setModelId,
8865
- options: selectedProviderModelOptions.map((model) => ({
8866
- value: model,
8867
- label: model
8868
- }))
8869
- }) : /* @__PURE__ */ jsx(SidebarInput, {
8870
- value: modelId,
8871
- onChange: setModelId,
8872
- applyOnBlur: true,
8873
- placeholder: getDefaultModelId(modelProvider)
8928
+ className: "grid grid-cols-[0.7fr_minmax(0,1fr)_1.75rem] items-end gap-2",
8929
+ children: [
8930
+ /* @__PURE__ */ jsx(SidebarControl, {
8931
+ label: "Provider",
8932
+ children: /* @__PURE__ */ jsx(SidebarSelect, {
8933
+ value: modelProvider,
8934
+ onChange: handleModelProviderChange,
8935
+ options: modelProviderOptions.map((provider) => ({
8936
+ value: provider.id,
8937
+ label: provider.label ?? provider.id
8938
+ }))
8939
+ })
8940
+ }),
8941
+ /* @__PURE__ */ jsx(SidebarControl, {
8942
+ label: "Model",
8943
+ children: selectedProviderModelOptions.length > 0 ? /* @__PURE__ */ jsx(SidebarSelect, {
8944
+ value: modelId,
8945
+ onChange: setModelId,
8946
+ options: selectedProviderModelOptions.map((model) => ({
8947
+ value: model,
8948
+ label: model
8949
+ }))
8950
+ }) : /* @__PURE__ */ jsx(SidebarInput, {
8951
+ value: modelId,
8952
+ onChange: setModelId,
8953
+ applyOnBlur: true,
8954
+ placeholder: getDefaultModelId(modelProvider)
8955
+ })
8956
+ }),
8957
+ /* @__PURE__ */ jsxs("div", {
8958
+ className: "group relative flex h-7 items-center self-end",
8959
+ children: [/* @__PURE__ */ jsx("button", {
8960
+ type: "button",
8961
+ onClick: handleResetModelConversation,
8962
+ disabled: chatMessages.length === 0 && !isChatting && !chatStatus,
8963
+ "aria-label": "Reset model conversation",
8964
+ "aria-describedby": "reset-model-conversation-tooltip",
8965
+ title: "Reset conversation",
8966
+ className: "flex h-7 w-7 cursor-pointer items-center justify-center rounded-full transition-colors disabled:cursor-not-allowed disabled:opacity-40",
8967
+ style: {
8968
+ backgroundColor: "var(--color-background-primary)",
8969
+ color: "var(--color-text-primary)"
8970
+ },
8971
+ children: /* @__PURE__ */ jsx("svg", {
8972
+ width: "18",
8973
+ height: "18",
8974
+ viewBox: "0 0 24 24",
8975
+ fill: "currentColor",
8976
+ "aria-hidden": "true",
8977
+ children: /* @__PURE__ */ jsx("path", { d: "M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-8 3.58-8 8s3.58 8 8 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h8V3z" })
8978
+ })
8979
+ }), /* @__PURE__ */ jsx("span", {
8980
+ id: "reset-model-conversation-tooltip",
8981
+ role: "tooltip",
8982
+ className: "pointer-events-none absolute right-0 top-full z-[1000] mt-1 hidden whitespace-nowrap rounded px-2 py-1 text-[11px] font-normal leading-tight group-focus-within:block group-hover:block",
8983
+ style: {
8984
+ backgroundColor: "var(--color-text-primary)",
8985
+ color: "var(--color-background-primary)"
8986
+ },
8987
+ children: "Reset conversation"
8988
+ })]
8874
8989
  })
8875
- })]
8990
+ ]
8876
8991
  }), usesApiKeyUi && /* @__PURE__ */ jsxs(SidebarControl, {
8877
8992
  label: "API Key",
8878
8993
  children: [/* @__PURE__ */ jsxs("div", {
@@ -9260,4 +9375,4 @@ function Inspector({ children, app, simulations: initialSimulationsProp = EMPTY_
9260
9375
  //#endregion
9261
9376
  export { cn as C, registerHostShell as S, extractResourceCSP as _, SidebarCollapsibleControl as a, getHostShell as b, SidebarSelect as c, SimpleSidebar as d, ThemeProvider as f, IframeResource as g, useInspectorState as h, SidebarCheckbox as i, SidebarTextarea as l, useMcpConnection as m, flattenAppToSimulations as n, SidebarControl as o, useThemeContext as p, resolveServerToolResult as r, SidebarInput as s, Inspector as t, SidebarToggle as u, McpAppHost as v, DEFAULT_STYLE_VARIABLES as w, getRegisteredHosts as x, SCREEN_WIDTHS as y };
9262
9377
 
9263
- //# sourceMappingURL=inspector-CiuT_2yA.js.map
9378
+ //# sourceMappingURL=inspector-C6n8zap3.js.map