@sourcegraph/cody-web 0.8.0 → 0.8.2

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.
@@ -1,5 +1,5 @@
1
- import { p as path, U as Uri, s as spawn } from "./agent.worker-CpzEAjEs.mjs";
2
- import { w as wrapInActiveSpan, C as ContextItemSource } from "./browser-7p2xtDk0.mjs";
1
+ import { p as path, U as Uri, s as spawn } from "./agent.worker-DwbwPMEN.mjs";
2
+ import { w as wrapInActiveSpan, C as ContextItemSource } from "./browser-BOPUs1B6.mjs";
3
3
  async function getContextFileFromGitLog(file, options) {
4
4
  return wrapInActiveSpan("commands.context.git-log", async (span) => {
5
5
  const cwd = path.dirname(file.fsPath);
@@ -1,8 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { U as Uri, P as Position, R as Range, w as window, D as DiagnosticSeverity, b as workspace, u as updateRangeMultipleChanges, c as commands, d as executeEdit, T as TERMINAL_EDIT_STATES, f as ThemeColor, g as languages, C as CodeLens, h as setTutorialUri, i as logSidebarClick, j as Disposable } from "./agent.worker-CpzEAjEs.mjs";
5
- import { t as telemetryRecorder, p as ps, d as dedent } from "./browser-7p2xtDk0.mjs";
4
+ import { U as Uri, P as Position, R as Range, w as window, D as DiagnosticSeverity, b as workspace, c as updateRangeMultipleChanges, d as commands, f as executeEdit, T as TERMINAL_EDIT_STATES, g as ThemeColor, h as languages, C as CodeLens, i as setTutorialUri, j as logSidebarClick, k as Disposable } from "./agent.worker-DwbwPMEN.mjs";
5
+ import { t as telemetryRecorder, p as ps, d as dedent } from "./browser-BOPUs1B6.mjs";
6
6
  const EMOJI_SVG_TEMPLATE = `<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
7
7
  <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="24px">{emoji}</text>
8
8
  </svg>`;
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
5
- import { g as getDefaultExportFromCjs, L as Ls, k as ke$1, a as ks, F as Fi$1, _ as _s, b as ds, c as bs, i as ii$1, q as qe$1, y as ys, x as xi$1, K as K$2, J as J$2, R as R$3, e as ws, B as B$2, f as g$5, h as h$4, j as _i, S as Ss, l as Br, m as ln, n as bi$1, v as vn, o as xn, N as Nn, r as mn, s as li$1, u as n$1, z as ns, M as M$4, D as Ds, A as le$2, E as c$4, G as oe$1, H as z$1, I as yi$1, W as W$2, U as Ue$1, O as I$2, P as Se$2, Q as O$2, V as F$1, X as Ni$1, Y as ee$1, Z as we$2, $ as b$2, a0 as T$3, a1 as s$2, a2 as o$4, a3 as w$3, a4 as i$1, a5 as k$3, a6 as D$5, a7 as p$8, a8 as m$7, a9 as S$4, aa as v$4, ab as P$2, ac as E$6, ad as Wi$1, ae as L$3, af as d$2, ag as a$3, ah as l$2, ai as f$2, aj as u$6, ak as r$6, al as t$2, am as FILE_CONTEXT_MENTION_PROVIDER, an as SYMBOL_CONTEXT_MENTION_PROVIDER, ao as REMOTE_REPOSITORY_PROVIDER_URI, ap as REMOTE_FILE_PROVIDER_URI, aq as REMOTE_DIRECTORY_PROVIDER_URI, ar as WEB_PROVIDER_URI, as as displayPath, at as displayLineRange, au as displayPathDirname, av as displayPathBasename, aw as IGNORED_FILE_WARNING_LABEL, ax as LARGE_FILE_WARNING_LABEL, ay as Ei$1, az as xe$2, aA as V$2, aB as Es, aC as U$2, aD as e, aE as Ns, aF as an, aG as gs, aH as serializeContextItem, aI as CONTEXT_ITEM_MENTION_NODE_TYPE, aJ as contextItemMentionNodeDisplayText, C as ContextItemSource, aK as URI, aL as qr, aM as _$2, aN as TEMPLATE_INPUT_NODE_TYPE, aO as N$2, aP as parseMentionQuery, aQ as NO_SYMBOL_MATCHES_HELP_LABEL, aR as FILE_RANGE_TOOLTIP_LABEL, aS as createExtensionAPI, aT as createMessageAPIForWebview, aU as lodashExports, aV as memoizeLastValue, aW as toSerializedPromptEditorValue, aX as ri$1, aY as scanForMentionTriggerInUserTextInput, aZ as fs, a_ as Ts, a$ as ps, b0 as hydrateAfterPostMessage, b1 as isCodyProUser, b2 as CodyIDE, b3 as webviewOpenURIForContextItem, b4 as commonjsGlobal, b5 as CodyTaskState, b6 as cryptoJsExports, b7 as isError, b8 as RateLimitError, b9 as CODY_FEEDBACK_URL, ba as isDefined, bb as reformatBotMessageForChat, p as ps$1, bc as isAbortErrorOrSocketHangUp, bd as isEqual, be as serializedPromptEditorStateFromChatMessage, bf as contextItemsFromPromptEditorValue, bg as filterContextItemsFromPromptEditorValue, bh as pluralize$1, bi as isCodyProModel, bj as ModelTag, bk as CustomCommandType, bl as isMacOS, bm as textContentFromSerializedLexicalNode, bn as FAST_CHAT_INPUT_TOKEN_BUDGET, bo as deserializeContextItem, bp as View, bq as truncateTextStart, br as CHAT_INPUT_TOKEN_BUDGET, bs as ACCOUNT_USAGE_URL, bt as ACCOUNT_UPGRADE_URL, bu as getRelativeChatPeriod, bv as browser, bw as isErrorLike, bx as setDisplayPathEnvInfo, by as PromptString } from "./browser-7p2xtDk0.mjs";
5
+ import { g as getDefaultExportFromCjs, L as Ls, k as ke$1, a as ks, F as Fi$1, _ as _s, b as ds, c as bs, i as ii$1, q as qe$1, y as ys, x as xi$1, K as K$2, J as J$2, R as R$3, e as ws, B as B$2, f as g$5, h as h$4, j as _i, S as Ss, l as Br, m as ln, n as bi$1, v as vn, o as xn, N as Nn, r as mn, s as li$1, u as n$1, z as ns, M as M$4, D as Ds, A as le$2, E as c$4, G as oe$1, H as z$1, I as yi$1, W as W$2, U as Ue$1, O as I$2, P as Se$2, Q as O$2, V as F$1, X as Ni$1, Y as ee$1, Z as we$2, $ as b$2, a0 as T$3, a1 as s$2, a2 as o$4, a3 as w$3, a4 as i$1, a5 as k$3, a6 as D$5, a7 as p$8, a8 as m$7, a9 as S$4, aa as v$4, ab as P$2, ac as E$6, ad as Wi$1, ae as L$3, af as d$2, ag as a$3, ah as l$2, ai as f$2, aj as u$6, ak as r$6, al as t$2, am as FILE_CONTEXT_MENTION_PROVIDER, an as SYMBOL_CONTEXT_MENTION_PROVIDER, ao as REMOTE_REPOSITORY_PROVIDER_URI, ap as REMOTE_FILE_PROVIDER_URI, aq as REMOTE_DIRECTORY_PROVIDER_URI, ar as WEB_PROVIDER_URI, as as displayPath, at as displayLineRange, au as displayPathDirname, av as displayPathBasename, aw as IGNORED_FILE_WARNING_LABEL, ax as LARGE_FILE_WARNING_LABEL, ay as Ei$1, az as xe$2, aA as V$2, aB as Es, aC as U$2, aD as e, aE as Ns, aF as an, aG as gs, aH as serializeContextItem, aI as CONTEXT_ITEM_MENTION_NODE_TYPE, aJ as contextItemMentionNodeDisplayText, C as ContextItemSource, aK as URI, aL as qr, aM as _$2, aN as TEMPLATE_INPUT_NODE_TYPE, aO as N$2, aP as parseMentionQuery, aQ as NO_SYMBOL_MATCHES_HELP_LABEL, aR as FILE_RANGE_TOOLTIP_LABEL, aS as createExtensionAPI, aT as createMessageAPIForWebview, aU as lodashExports, aV as memoizeLastValue, aW as toSerializedPromptEditorValue, aX as ri$1, aY as scanForMentionTriggerInUserTextInput, aZ as fs, a_ as Ts, a$ as ps, b0 as hydrateAfterPostMessage, b1 as isCodyProUser, b2 as CodyIDE, b3 as webviewOpenURIForContextItem, b4 as commonjsGlobal, b5 as CodyTaskState, b6 as cryptoJsExports, b7 as isError, b8 as RateLimitError, b9 as CODY_FEEDBACK_URL, ba as isDefined, bb as reformatBotMessageForChat, p as ps$1, bc as isAbortErrorOrSocketHangUp, bd as ModelTag, be as isEqual, bf as serializedPromptEditorStateFromChatMessage, bg as contextItemsFromPromptEditorValue, bh as filterContextItemsFromPromptEditorValue, bi as pluralize$1, bj as isCodyProModel, bk as isWaitlistModel, bl as CustomCommandType, bm as isMacOS, bn as textContentFromSerializedLexicalNode, bo as FAST_CHAT_INPUT_TOKEN_BUDGET, bp as inputTextWithoutContextChipsFromPromptEditorState, bq as deserializeContextItem, br as View, bs as truncateTextStart, bt as CHAT_INPUT_TOKEN_BUDGET, bu as ACCOUNT_USAGE_URL, bv as ACCOUNT_UPGRADE_URL, bw as getRelativeChatPeriod, bx as browser, by as isErrorLike, bz as setDisplayPathEnvInfo, bA as PromptString } from "./browser-BOPUs1B6.mjs";
6
6
  import * as React from "react";
7
7
  import React__default, { createContext, useContext, useMemo, useLayoutEffect, useEffect, forwardRef, useState, useCallback, useRef, Suspense, createElement, memo, useImperativeHandle, Children, isValidElement, cloneElement, Fragment as Fragment$1, useReducer } from "react";
8
8
  var classnames = { exports: {} };
@@ -9256,7 +9256,7 @@ function getItemsHeading(parentItem, mentionQuery) {
9256
9256
  }
9257
9257
  if (parentItem.id === REMOTE_DIRECTORY_PROVIDER_URI) {
9258
9258
  return /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-gap-2 tw-items-center tw-justify-between", children: [
9259
- /* @__PURE__ */ jsx("div", { children: mentionQuery.text.includes(":") ? "Directory - Select a directory*" : "Directory - Select a repository*" }),
9259
+ /* @__PURE__ */ jsx("div", { children: mentionQuery.text.includes(":") ? "Directory - Select or search for a directory*" : "Directory - Select a repository*" }),
9260
9260
  /* @__PURE__ */ jsx(
9261
9261
  "div",
9262
9262
  {
@@ -31247,22 +31247,22 @@ const CodeExcerpt = (props) => {
31247
31247
  }, [highlightRanges, startLine, endLine, tableContainerElement, table2]);
31248
31248
  return /* @__PURE__ */ jsx(Code, { className: clsx$1(styles$i.codeExcerpt, className), "data-code-excerpt": true, children: /* @__PURE__ */ jsx("div", { ref: setTableContainerElement, children: table2 }) });
31249
31249
  };
31250
- const resultContainer = "_result-container_3o126_13";
31251
- const header$2 = "_header_3o126_36";
31252
- const headerTitle = "_header-title_3o126_1";
31253
- const result = "_result_3o126_13";
31254
- const searchResultMatch = "_search-result-match_3o126_62";
31255
- const horizontalDividerBetween = "_horizontal-divider-between_3o126_72";
31256
- const focusableBlock = "_focusable-block_3o126_78";
31257
- const clickable = "_clickable_3o126_84";
31258
- const dividerBetween = "_divider-between_3o126_92";
31259
- const dividerVertical = "_divider-vertical_3o126_102";
31260
- const divider = "_divider_3o126_92";
31261
- const title = "_title_3o126_114";
31262
- const titleInner = "_title-inner_3o126_122";
31263
- const toggleMatchesButton = "_toggle-matches-button_3o126_126";
31264
- const toggleMatchesButtonExpanded = "_toggle-matches-button--expanded_3o126_1";
31265
- const toggleMatchesButtonText = "_toggle-matches-button-text_3o126_1";
31250
+ const resultContainer = "_result-container_1ojeo_12";
31251
+ const header$2 = "_header_1ojeo_35";
31252
+ const headerTitle = "_header-title_1ojeo_1";
31253
+ const result = "_result_1ojeo_12";
31254
+ const searchResultMatch = "_search-result-match_1ojeo_61";
31255
+ const horizontalDividerBetween = "_horizontal-divider-between_1ojeo_71";
31256
+ const focusableBlock = "_focusable-block_1ojeo_77";
31257
+ const clickable = "_clickable_1ojeo_83";
31258
+ const dividerBetween = "_divider-between_1ojeo_91";
31259
+ const dividerVertical = "_divider-vertical_1ojeo_101";
31260
+ const divider = "_divider_1ojeo_91";
31261
+ const title = "_title_1ojeo_113";
31262
+ const titleInner = "_title-inner_1ojeo_121";
31263
+ const toggleMatchesButton = "_toggle-matches-button_1ojeo_125";
31264
+ const toggleMatchesButtonExpanded = "_toggle-matches-button--expanded_1ojeo_1";
31265
+ const toggleMatchesButtonText = "_toggle-matches-button-text_1ojeo_1";
31266
31266
  const styles$h = {
31267
31267
  resultContainer,
31268
31268
  header: header$2,
@@ -32530,19 +32530,20 @@ const CodyLogoBW = ({ size: size2, ...props }) => /* @__PURE__ */ jsxs(
32530
32530
  }
32531
32531
  );
32532
32532
  function chatModelIconComponent(model) {
32533
- if (model.startsWith("openai")) {
32533
+ model = model.toLowerCase();
32534
+ if (model.startsWith("openai") || model.includes("gpt")) {
32534
32535
  return OpenAILogo;
32535
32536
  }
32536
- if (model.startsWith("anthropic")) {
32537
+ if (model.includes("anthropic")) {
32537
32538
  return AnthropicLogo;
32538
32539
  }
32539
- if (model.startsWith("google")) {
32540
+ if (model.startsWith("google") || model.includes("gemini")) {
32540
32541
  return GeminiLogo;
32541
32542
  }
32542
- if (model.startsWith("ollama")) {
32543
+ if (model.includes("ollama")) {
32543
32544
  return OllamaLogo;
32544
32545
  }
32545
- if (model.startsWith("mistral")) {
32546
+ if (model.includes("mistral") || model.includes("mixtral")) {
32546
32547
  return MistralLogo;
32547
32548
  }
32548
32549
  return CodyLogoBW;
@@ -73439,7 +73440,7 @@ const BaseMessageCell = ({ speakerIcon, speakerTitle, cellAction, content: conte
73439
73440
  }
73440
73441
  );
73441
73442
  const MESSAGE_CELL_AVATAR_SIZE = 20;
73442
- const ContextFocusActions = ({ humanMessage, className }) => {
73443
+ const ContextFocusActions = ({ humanMessage, longResponseTime, className }) => {
73443
73444
  const telemetryRecorder = useTelemetryRecorder();
73444
73445
  const initialContextEventMetadata = {
73445
73446
  hasInitialContextRepositories: humanMessage.hasInitialContext.repositories ? 1 : 0,
@@ -73487,7 +73488,16 @@ const ContextFocusActions = ({ humanMessage, className }) => {
73487
73488
  humanMessage.rerunWithDifferentContext(options);
73488
73489
  }
73489
73490
  } : null,
73490
- {
73491
+ longResponseTime ? {
73492
+ label: "Try again with a different model",
73493
+ tooltip: "A new window will open with a copy of the current conversation where you can resubmit your request with a different model",
73494
+ onClick: () => {
73495
+ getVSCodeAPI().postMessage({
73496
+ command: "chatSession",
73497
+ action: "duplicate"
73498
+ });
73499
+ }
73500
+ } : {
73491
73501
  label: "Add context...",
73492
73502
  tooltip: "Add relevant content to improve the response",
73493
73503
  onClick: () => {
@@ -73502,7 +73512,13 @@ const ContextFocusActions = ({ humanMessage, className }) => {
73502
73512
  }
73503
73513
  }
73504
73514
  ].flat().filter(isDefined),
73505
- [humanMessage, telemetryRecorder, logRerunWithDifferentContext, initialContextEventMetadata]
73515
+ [
73516
+ humanMessage,
73517
+ telemetryRecorder,
73518
+ logRerunWithDifferentContext,
73519
+ initialContextEventMetadata,
73520
+ longResponseTime
73521
+ ]
73506
73522
  );
73507
73523
  return actions2.length > 0 ? /* @__PURE__ */ jsx(
73508
73524
  "menu",
@@ -73511,7 +73527,7 @@ const ContextFocusActions = ({ humanMessage, className }) => {
73511
73527
  role: "group",
73512
73528
  "aria-label": "Try again with different context",
73513
73529
  children: /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-wrap tw-items-center tw-gap-x-4 tw-gap-y-2", children: [
73514
- /* @__PURE__ */ jsx("h3", { className: "tw-flex tw-items-center tw-gap-3", children: "Try again with different context" }),
73530
+ !longResponseTime && /* @__PURE__ */ jsx("h3", { className: "tw-flex tw-items-center tw-gap-3", children: "Try again with different context" }),
73515
73531
  /* @__PURE__ */ jsx("ul", { className: "tw-whitespace-nowrap tw-flex tw-gap-2 tw-flex-wrap", children: actions2.map(({ label, tooltip, onClick }) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
73516
73532
  /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
73517
73533
  Button3,
@@ -73546,6 +73562,7 @@ const AssistantMessageCell = memo(
73546
73562
  smartApply,
73547
73563
  smartApplyEnabled
73548
73564
  }) => {
73565
+ var _a;
73549
73566
  const displayMarkdown = useMemo(
73550
73567
  () => reformatBotMessageForChat(message2.text ?? ps$1``).toString(),
73551
73568
  [message2]
@@ -73553,6 +73570,7 @@ const AssistantMessageCell = memo(
73553
73570
  const chatModel = useChatModelByID(message2.model);
73554
73571
  const ModelIcon = chatModel ? chatModelIconComponent(chatModel.id) : null;
73555
73572
  const isAborted = isAbortErrorOrSocketHangUp(message2.error);
73573
+ const hasLongerResponseTime = (_a = chatModel == null ? void 0 : chatModel.tags) == null ? void 0 : _a.includes(ModelTag.StreamDisabled);
73556
73574
  return /* @__PURE__ */ jsx(
73557
73575
  BaseMessageCell,
73558
73576
  {
@@ -73580,7 +73598,10 @@ const AssistantMessageCell = memo(
73580
73598
  smartApply,
73581
73599
  userInfo
73582
73600
  }
73583
- ) : isLoading && /* @__PURE__ */ jsx(LoadingDots, {})
73601
+ ) : isLoading && /* @__PURE__ */ jsxs("div", { children: [
73602
+ hasLongerResponseTime && /* @__PURE__ */ jsx("p", { className: "tw-m-4 tw-mt-0 tw-text-muted-foreground", children: "This model may take longer to response." }),
73603
+ /* @__PURE__ */ jsx(LoadingDots, {})
73604
+ ] })
73584
73605
  ] }),
73585
73606
  footer: chatEnabled && humanMessage && /* @__PURE__ */ jsxs("div", { className: "tw-py-3 tw-flex tw-flex-col tw-gap-2", children: [
73586
73607
  isAborted && /* @__PURE__ */ jsx("div", { className: "tw-text-sm tw-text-muted-foreground tw-mt-4", children: "Output stream stopped" }),
@@ -73596,6 +73617,7 @@ const AssistantMessageCell = memo(
73596
73617
  ContextFocusActions,
73597
73618
  {
73598
73619
  humanMessage,
73620
+ longResponseTime: hasLongerResponseTime,
73599
73621
  className: showFeedbackButtons && feedbackButtonsOnSubmit ? "tw-pl-5" : void 0
73600
73622
  }
73601
73623
  )
@@ -73653,7 +73675,8 @@ function useChatModelByID(model) {
73653
73675
  return (chatModels == null ? void 0 : chatModels.find((m2) => m2.id === model)) ?? (model ? {
73654
73676
  id: model,
73655
73677
  title: model,
73656
- provider: "unknown"
73678
+ provider: "unknown",
73679
+ tags: []
73657
73680
  } : void 0);
73658
73681
  }
73659
73682
  const contextItem = "_context-item_911i8_1";
@@ -74355,11 +74378,12 @@ const ModelSelectField = ({
74355
74378
  });
74356
74379
  return;
74357
74380
  }
74358
- getVSCodeAPI().postMessage({
74359
- command: "event",
74360
- eventName: "CodyVSCodeExtension:chooseLLM:clicked",
74361
- properties: { LLM_provider: model.id }
74362
- });
74381
+ if (isWaitlistModel(model)) {
74382
+ getVSCodeAPI().postMessage({
74383
+ command: "links",
74384
+ value: "waitlist"
74385
+ });
74386
+ }
74363
74387
  parentOnModelSelect(model);
74364
74388
  },
74365
74389
  [telemetryRecorder.recordEvent, showCodyProBadge, parentOnModelSelect, isCodyProUser2]
@@ -74405,7 +74429,7 @@ const ModelSelectField = ({
74405
74429
  // be taken to the upgrade page.
74406
74430
  disabled: !["available", "needs-cody-pro"].includes(availability),
74407
74431
  group: getModelDropDownUIGroup(m2),
74408
- tooltip: availability === "not-selectable-on-enterprise" ? "Chat model set by your Sourcegraph Enterprise admin" : availability === "needs-cody-pro" ? `Upgrade to Cody Pro to use ${m2.title} by ${m2.provider}` : `${m2.title} by ${m2.provider}`
74432
+ tooltip: getTooltip(m2, availability)
74409
74433
  };
74410
74434
  }),
74411
74435
  [models, userInfo, serverSentModelsEnabled]
@@ -74540,21 +74564,55 @@ function modelAvailability(userInfo, serverSentModelsEnabled, model) {
74540
74564
  }
74541
74565
  return "available";
74542
74566
  }
74543
- const ModelTitleWithIcon = ({ model, showIcon, modelAvailability: modelAvailability2 }) => /* @__PURE__ */ jsxs(
74544
- "span",
74545
- {
74546
- className: clsx$1(styles$5.modelTitleWithIcon, {
74547
- [styles$5.disabled]: modelAvailability2 !== "available"
74548
- }),
74549
- children: [
74550
- showIcon && /* @__PURE__ */ jsx(ChatModelIcon, { model: model.provider, className: styles$5.modelIcon }),
74551
- /* @__PURE__ */ jsx("span", { className: clsx$1("tw-flex-grow", styles$5.modelName), children: model.title }),
74552
- modelAvailability2 === "needs-cody-pro" && /* @__PURE__ */ jsx(Badge3, { variant: "secondary", className: clsx$1(styles$5.badge, "tw-opacity-75"), children: "Cody Pro" }),
74553
- model.tags.includes(ModelTag.Experimental) && /* @__PURE__ */ jsx(Badge3, { variant: "secondary", className: styles$5.badge, children: "Experimental" }),
74554
- model.tags.includes(ModelTag.Recommended) && modelAvailability2 !== "needs-cody-pro" ? /* @__PURE__ */ jsx(Badge3, { variant: "secondary", className: styles$5.badge, children: "Recommended" }) : null
74555
- ]
74567
+ function getTooltip(model, availability) {
74568
+ if (model.tags.includes(ModelTag.Waitlist)) {
74569
+ return "Request access to this new model";
74556
74570
  }
74557
- );
74571
+ if (model.tags.includes(ModelTag.OnWaitlist)) {
74572
+ return "Request received, we will reach out with next steps";
74573
+ }
74574
+ switch (availability) {
74575
+ case "not-selectable-on-enterprise":
74576
+ return "Chat model set by your Sourcegraph Enterprise admin";
74577
+ case "needs-cody-pro":
74578
+ return `Upgrade to Cody Pro to use ${model.title} by ${model.provider}`;
74579
+ default:
74580
+ return `${model.title} by ${model.provider}`;
74581
+ }
74582
+ }
74583
+ const ModelTitleWithIcon = ({ model, showIcon, modelAvailability: modelAvailability2 }) => {
74584
+ const getBadgeText = (model2, modelAvailability3) => {
74585
+ if (modelAvailability3 === "needs-cody-pro") return "Cody Pro";
74586
+ if (model2.tags.includes(ModelTag.Experimental)) return "Experimental";
74587
+ if (model2.tags.includes(ModelTag.Waitlist)) return "Join Waitlist";
74588
+ if (model2.tags.includes(ModelTag.OnWaitlist)) return "On Waitlist";
74589
+ if (model2.tags.includes(ModelTag.EarlyAccess)) return "Early Access";
74590
+ if (model2.tags.includes(ModelTag.Recommended)) return "Recommended";
74591
+ return null;
74592
+ };
74593
+ return /* @__PURE__ */ jsxs(
74594
+ "span",
74595
+ {
74596
+ className: clsx$1(styles$5.modelTitleWithIcon, {
74597
+ [styles$5.disabled]: modelAvailability2 !== "available"
74598
+ }),
74599
+ children: [
74600
+ showIcon && /* @__PURE__ */ jsx(ChatModelIcon, { model: model.provider, className: styles$5.modelIcon }),
74601
+ /* @__PURE__ */ jsx("span", { className: clsx$1("tw-flex-grow", styles$5.modelName), children: model.title }),
74602
+ getBadgeText(model, modelAvailability2) && /* @__PURE__ */ jsx(
74603
+ Badge3,
74604
+ {
74605
+ variant: "secondary",
74606
+ className: clsx$1(styles$5.badge, {
74607
+ "tw-opacity-75": modelAvailability2 === "needs-cody-pro"
74608
+ }),
74609
+ children: getBadgeText(model, modelAvailability2)
74610
+ }
74611
+ )
74612
+ ]
74613
+ }
74614
+ );
74615
+ };
74558
74616
  const ChatModelIcon = ({
74559
74617
  model,
74560
74618
  className
@@ -75527,15 +75585,20 @@ const HumanMessageEditor = ({
75527
75585
  [isSent]
75528
75586
  )
75529
75587
  );
75530
- const initialContext = useClientState().initialContext;
75588
+ const model = useCurrentChatModel();
75589
+ let initialContext = useClientState().initialContext;
75531
75590
  useEffect(() => {
75591
+ var _a2;
75532
75592
  if (initialContext && !isSent && isFirstMessage) {
75533
75593
  const editor2 = editorRef.current;
75534
75594
  if (editor2) {
75595
+ if ((_a2 = model == null ? void 0 : model.tags) == null ? void 0 : _a2.includes(ModelTag.StreamDisabled)) {
75596
+ initialContext = initialContext.filter((item2) => item2.type !== "tree");
75597
+ }
75535
75598
  editor2.setInitialContextMentions(initialContext);
75536
75599
  }
75537
75600
  }
75538
- }, [initialContext, isSent, isFirstMessage]);
75601
+ }, [initialContext, isSent, isFirstMessage, model]);
75539
75602
  const focusEditor = useCallback(() => {
75540
75603
  var _a2;
75541
75604
  return (_a2 = editorRef.current) == null ? void 0 : _a2.setFocus(true);
@@ -75546,7 +75609,6 @@ const HumanMessageEditor = ({
75546
75609
  }
75547
75610
  }, [__storybook__focus, focusEditor]);
75548
75611
  const focused2 = Boolean(isEditorFocused || isFocusWithin || __storybook__focus);
75549
- const model = useCurrentChatModel();
75550
75612
  const contextWindowSizeInTokens = ((_b = (_a = model == null ? void 0 : model.contextWindow) == null ? void 0 : _a.context) == null ? void 0 : _b.user) || ((_c = model == null ? void 0 : model.contextWindow) == null ? void 0 : _c.input) || FAST_CHAT_INPUT_TOKEN_BUDGET;
75551
75613
  return (
75552
75614
  // biome-ignore lint/a11y/useKeyWithClickEvents: only relevant to click areas
@@ -75833,7 +75895,9 @@ const TranscriptInteraction = memo((props) => {
75833
75895
  if (editorValue.contextItems.find(
75834
75896
  (contextItem2) => ["repository", "tree"].includes(contextItem2.type)
75835
75897
  )) {
75836
- extensionAPI.detectIntent(editorValue.text).subscribe((value) => {
75898
+ extensionAPI.detectIntent(
75899
+ inputTextWithoutContextChipsFromPromptEditorState(editorValue.editorState)
75900
+ ).subscribe((value) => {
75837
75901
  setIntent(value);
75838
75902
  });
75839
75903
  }
@@ -75892,7 +75956,7 @@ const TranscriptInteraction = memo((props) => {
75892
75956
  },
75893
75957
  humanMessage.index
75894
75958
  ),
75895
- experimentalOneBoxEnabled && humanMessage.intent && /* @__PURE__ */ jsx(InfoMessage, { children: humanMessage.intent === "search" ? /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-justify-between tw-gap-4", children: [
75959
+ experimentalOneBoxEnabled && humanMessage.intent && /* @__PURE__ */ jsx(InfoMessage, { children: humanMessage.intent === "search" ? /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-justify-between tw-gap-4 tw-items-center", children: [
75896
75960
  /* @__PURE__ */ jsx("span", { children: "Intent detection selected a code search response." }),
75897
75961
  /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
75898
75962
  Button3,
@@ -75907,7 +75971,7 @@ const TranscriptInteraction = memo((props) => {
75907
75971
  ]
75908
75972
  }
75909
75973
  ) })
75910
- ] }) : /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-justify-between tw-gap-4", children: [
75974
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-justify-between tw-gap-4 tw-items-center", children: [
75911
75975
  /* @__PURE__ */ jsx("span", { children: "Intent detection selected an LLM response." }),
75912
75976
  /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
75913
75977
  Button3,
@@ -76779,7 +76843,7 @@ const TabContainer = React__default.forwardRef(({ className, ...props }, ref2) =
76779
76843
  }
76780
76844
  );
76781
76845
  });
76782
- const AccountTab = () => {
76846
+ const AccountTab = ({ setView }) => {
76783
76847
  const userInfo = useUserAccountInfo();
76784
76848
  const { user, isCodyProUser: isCodyProUser2, isDotComUser, ide } = userInfo;
76785
76849
  const { displayName, username, primaryEmail, endpoint } = user;
@@ -76816,7 +76880,12 @@ const AccountTab = () => {
76816
76880
  });
76817
76881
  actions2.push({
76818
76882
  text: "Sign Out",
76819
- onClick: () => getVSCodeAPI().postMessage({ command: "auth", authKind: "signout" })
76883
+ onClick: () => {
76884
+ getVSCodeAPI().postMessage({ command: "auth", authKind: "signout" });
76885
+ if (ide === CodyIDE.JetBrains) {
76886
+ setView(View.Chat);
76887
+ }
76888
+ }
76820
76889
  });
76821
76890
  return /* @__PURE__ */ jsxs("div", { className: "tw-overflow-auto tw-flex-1 tw-flex tw-flex-col tw-items-start tw-w-full tw-px-8 tw-py-6 tw-gap-6", children: [
76822
76891
  /* @__PURE__ */ jsx("h2", { children: "Account" }),
@@ -77343,7 +77412,7 @@ const CodyPanel = ({
77343
77412
  }
77344
77413
  ),
77345
77414
  view === View.Prompts && /* @__PURE__ */ jsx(PromptsTab, { setView }),
77346
- view === View.Account && /* @__PURE__ */ jsx(AccountTab, {}),
77415
+ view === View.Account && /* @__PURE__ */ jsx(AccountTab, { setView }),
77347
77416
  view === View.Settings && /* @__PURE__ */ jsx(SettingsTab, {})
77348
77417
  ] })
77349
77418
  ]
@@ -77437,7 +77506,6 @@ async function createAgentClient({
77437
77506
  telemetryClientName,
77438
77507
  customHeaders: customHeaders ?? {},
77439
77508
  customConfiguration: {
77440
- "cody.internal.onebox": true,
77441
77509
  "cody.autocomplete.enabled": false,
77442
77510
  "cody.experimental.urlContext": true,
77443
77511
  "cody.web": true
@@ -1 +1 @@
1
- {"version":3,"file":"agent.client.d.ts","sourceRoot":"","sources":["../../../lib/agent/agent.client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAGH,KAAK,iBAAiB,EAGzB,MAAM,wBAAwB,CAAA;AAG/B,UAAU,WAAW;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,GAAG,EAAE,iBAAiB,CAAA;IACtB,OAAO,IAAI,IAAI,CAAA;CAClB;AAED,UAAU,kBAAkB;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,MAAM,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAsB,iBAAiB,CAAC,EACpC,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,KAAY,EACZ,KAAa,GAChB,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiE3C"}
1
+ {"version":3,"file":"agent.client.d.ts","sourceRoot":"","sources":["../../../lib/agent/agent.client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAGH,KAAK,iBAAiB,EAGzB,MAAM,wBAAwB,CAAA;AAG/B,UAAU,WAAW;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,GAAG,EAAE,iBAAiB,CAAA;IACtB,OAAO,IAAI,IAAI,CAAA;CAClB;AAED,UAAU,kBAAkB;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,MAAM,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAsB,iBAAiB,CAAC,EACpC,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,KAAY,EACZ,KAAa,GAChB,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAgE3C"}
@@ -1,8 +1,7 @@
1
- import { e as exec, o as os, a as env, w as window, p as path, b as workspace, U as Uri, l as logError } from "./agent.worker-CpzEAjEs.mjs";
2
- import { a as utilExports } from "./util-DHv3aBr3.mjs";
3
- import { w as wrapInActiveSpan, T as TokenCounterUtils, C as ContextItemSource } from "./browser-7p2xtDk0.mjs";
1
+ import { u as util, e as exec, o as os, a as env, w as window, p as path, b as workspace, U as Uri, l as logError } from "./agent.worker-DwbwPMEN.mjs";
2
+ import { w as wrapInActiveSpan, T as TokenCounterUtils, C as ContextItemSource } from "./browser-BOPUs1B6.mjs";
4
3
  var define_process_default = { env: {} };
5
- const _exec = utilExports.promisify(exec);
4
+ const _exec = util.promisify(exec);
6
5
  async function getContextFileFromShell(command) {
7
6
  return wrapInActiveSpan("commands.context.command", async (span) => {
8
7
  var _a, _b, _c;
package/dist/style.css CHANGED
@@ -320,23 +320,22 @@ kbd {
320
320
  --cody-chat-code-border-color: var(--vscode-widget-border);
321
321
  --cody-chat-code-text-muted: var(--vscode-input-placeholderForeground);
322
322
  --cody-chat-code-focus-border: var(--vscode-focusBorder);
323
-
324
- --mark-bg: #f8e688;
325
- --text-muted-highlighted: #566880;
323
+ --cody-chat-code-mark-background: #f8e688;
324
+ --cody-chat-code-text-highlighted: #566880;
326
325
  }
327
326
 
328
- ._result-container_3o126_13 {
327
+ ._result-container_1ojeo_12 {
329
328
  contain: paint;
330
329
  border-radius: 4px;
331
330
  border: solid 1px var(--cody-chat-code-border-color);
332
331
  }
333
332
 
334
- ._result-container_3o126_13 .match-highlight {
335
- color: var(--text-muted-highlighted);
336
- background-color: var(--mark-bg);
333
+ ._result-container_1ojeo_12 .match-highlight {
334
+ color: var(--cody-chat-code-text-highlighted);
335
+ background-color: var(--cody-chat-code-mark-background);
337
336
  }
338
337
 
339
- ._result-container_3o126_13 .sr-only {
338
+ ._result-container_1ojeo_12 .sr-only {
340
339
  position: absolute;
341
340
  width: 0.0625rem;
342
341
  height: 0.0625rem;
@@ -348,7 +347,7 @@ kbd {
348
347
  border: 0;
349
348
  }
350
349
 
351
- ._header_3o126_36 {
350
+ ._header_1ojeo_35 {
352
351
  padding: 0.45rem 0.5rem;
353
352
  display: flex;
354
353
  align-items: center;
@@ -364,17 +363,17 @@ kbd {
364
363
  background-color: var(--cody-chat-code-header-background);
365
364
  }
366
365
 
367
- ._header-title_3o126_1 {
366
+ ._header-title_1ojeo_1 {
368
367
  flex: 1 1 auto;
369
368
  display: flex;
370
369
  flex-wrap: wrap;
371
370
  }
372
371
 
373
- ._result_3o126_13 {
372
+ ._result_1ojeo_12 {
374
373
  background-color: var(--cody-chat-code-background);
375
374
  }
376
375
 
377
- ._search-result-match_3o126_62 {
376
+ ._search-result-match_1ojeo_61 {
378
377
  /* Don't use cascading link style */
379
378
  text-decoration: none;
380
379
  display: flex;
@@ -384,24 +383,24 @@ kbd {
384
383
  position: relative;
385
384
  }
386
385
 
387
- ._horizontal-divider-between_3o126_72:not(:last-child) {
386
+ ._horizontal-divider-between_1ojeo_71:not(:last-child) {
388
387
  border-bottom: 1px solid var(--cody-chat-code-border-color);
389
388
  }
390
389
 
391
- ._focusable-block_3o126_78:focus-visible {
390
+ ._focusable-block_1ojeo_77:focus-visible {
392
391
  box-shadow: inset 0 0 0 1px var(--cody-chat-code-focus-border);
393
392
  }
394
393
 
395
- ._clickable_3o126_84 {
394
+ ._clickable_1ojeo_83 {
396
395
  cursor: pointer;
397
396
  }
398
397
 
399
- ._clickable_3o126_84:hover {
398
+ ._clickable_1ojeo_83:hover {
400
399
  text-decoration: none;
401
400
  background-color: var(--cody-chat-code-subtle-background);
402
401
  }
403
402
 
404
- ._divider-between_3o126_92 > *:not(:last-child)::after {
403
+ ._divider-between_1ojeo_91 > *:not(:last-child)::after {
405
404
  content: ' ';
406
405
  height: 1rem;
407
406
  margin: 0 0.75rem;
@@ -409,19 +408,19 @@ kbd {
409
408
  display: block;
410
409
  }
411
410
 
412
- ._divider-vertical_3o126_102 {
411
+ ._divider-vertical_1ojeo_101 {
413
412
  border-bottom: 1px solid var(--cody-chat-code-border-color);
414
413
  width: 100%;
415
414
  margin: 0.5rem 0;
416
415
  }
417
416
 
418
- ._divider_3o126_92 {
417
+ ._divider_1ojeo_91 {
419
418
  border-right: 1px solid var(--cody-chat-code-border-color);
420
419
  height: 1rem;
421
420
  margin: 0 0.5rem;
422
421
  }
423
422
 
424
- ._title_3o126_114 {
423
+ ._title_1ojeo_113 {
425
424
  display: flex;
426
425
  align-items: center;
427
426
  flex-grow: 1;
@@ -429,11 +428,11 @@ kbd {
429
428
  flex-wrap: wrap;
430
429
  }
431
430
 
432
- ._title-inner_3o126_122 {
431
+ ._title-inner_1ojeo_121 {
433
432
  overflow-wrap: anywhere;
434
433
  }
435
434
 
436
- ._toggle-matches-button_3o126_126 {
435
+ ._toggle-matches-button_1ojeo_125 {
437
436
  width: 100%;
438
437
  text-align: left;
439
438
  border: none;
@@ -443,16 +442,16 @@ kbd {
443
442
  color: var(--cody-chat-code-text-muted);
444
443
  }
445
444
 
446
- ._toggle-matches-button_3o126_126:hover {
445
+ ._toggle-matches-button_1ojeo_125:hover {
447
446
  color: inherit;
448
447
  }
449
448
 
450
- ._toggle-matches-button--expanded_3o126_1 {
449
+ ._toggle-matches-button--expanded_1ojeo_1 {
451
450
  position: sticky;
452
451
  bottom: 0;
453
452
  }
454
453
 
455
- ._toggle-matches-button-text_3o126_1 {
454
+ ._toggle-matches-button-text_1ojeo_1 {
456
455
  margin-left: 0.125rem;
457
456
  }
458
457
 
@@ -1936,6 +1935,9 @@ imported in Sourcegraph shell.
1936
1935
  .tw-col-span-4 {
1937
1936
  grid-column: span 4 / span 4;
1938
1937
  }
1938
+ .tw-m-4 {
1939
+ margin: 8px;
1940
+ }
1939
1941
  .tw-m-5 {
1940
1942
  margin: 10px;
1941
1943
  }