Skip to content

Commit

Permalink
fix: Make it possible to dogfood new prompt editor
Browse files Browse the repository at this point in the history
  • Loading branch information
fkling committed Feb 15, 2025
1 parent 5888c21 commit c523b2f
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 16 deletions.
11 changes: 2 additions & 9 deletions lib/prompt-editor/src/v2/promptInput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,11 @@ const prosemirrorActor = fromCallback<ProseMirrorMachineEvent, ProseMirrorMachin
}
})

function doFocus() {
editor.focus()
editor.dispatch(editor.state.tr.scrollIntoView())
}

receive(event => {
switch (event.type) {
case 'focus':
doFocus()
// HACK(sqs): Needed in VS Code webviews to actually get it to focus
// on initial load, for some reason.
setTimeout(doFocus)
editor.focus()
editor.dispatch(editor.state.tr.scrollIntoView())
break
case 'blur':
editor.dom.blur()
Expand Down
6 changes: 6 additions & 0 deletions vscode/src/chat/chat-view/ChatController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
DOTCOM_URL,
type DefaultChatCommands,
type EventSource,
FeatureFlag,
type Guardrails,
ModelUsage,
type NLSSearchDynamicFilter,
Expand All @@ -36,6 +37,7 @@ import {
extractContextFromTraceparent,
featureFlagProvider,
firstResultFromOperation,
firstValueFrom,
forceHydration,
graphqlClient,
hydrateAfterPostMessage,
Expand Down Expand Up @@ -528,6 +530,9 @@ export class ChatController implements vscode.Disposable, vscode.WebviewViewProv

private async getConfigForWebview(): Promise<ConfigurationSubsetForWebview & LocalEnv> {
const { configuration, auth } = await currentResolvedConfig()
const experimentalPromptEditorEnabled = await firstValueFrom(
featureFlagProvider.evaluatedFeatureFlag(FeatureFlag.CodyExperimentalPromptEditor)
)
const sidebarViewOnly = this.extensionClient.capabilities?.webviewNativeConfig?.view === 'single'
const isEditorViewType = this.webviewPanelOrView?.viewType === 'cody.editorPanel'
const webviewType = isEditorViewType && !sidebarViewOnly ? 'editor' : 'sidebar'
Expand All @@ -545,6 +550,7 @@ export class ChatController implements vscode.Disposable, vscode.WebviewViewProv
multipleWebviewsEnabled: !sidebarViewOnly,
internalDebugContext: configuration.internalDebugContext,
allowEndpointChange: configuration.overrideServerEndpoint === undefined,
experimentalPromptEditorEnabled,
}
}

Expand Down
1 change: 1 addition & 0 deletions vscode/src/chat/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ export interface ConfigurationSubsetForWebview
multipleWebviewsEnabled?: boolean | undefined | null
endpointHistory?: string[] | undefined | null
allowEndpointChange: boolean
experimentalPromptEditorEnabled: boolean
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import {
type ChatMessage,
FAST_CHAT_INPUT_TOKEN_BUDGET,
FeatureFlag,
type Model,
ModelTag,
type SerializedPromptEditorState,
Expand Down Expand Up @@ -33,7 +32,6 @@ import { type ClientActionListener, useClientActionListener } from '../../../../
import { promptModeToIntent } from '../../../../../prompts/PromptsTab'
import { useTelemetryRecorder } from '../../../../../utils/telemetry'
import { useConfig } from '../../../../../utils/useConfig'
import { useFeatureFlag } from '../../../../../utils/useFeatureFlags'
import { useLinkOpener } from '../../../../../utils/useLinkOpener'
import { useOmniBox } from '../../../../../utils/useOmniBox'
import styles from './HumanMessageEditor.module.css'
Expand Down Expand Up @@ -102,7 +100,7 @@ export const HumanMessageEditor: FunctionComponent<{
const telemetryRecorder = useTelemetryRecorder()

const editorRef = useRef<PromptEditorRefAPI>(null)
useImperativeHandle(parentEditorRef, (): PromptEditorRefAPI | null => editorRef.current, [])
useImperativeHandle(parentEditorRef, (): PromptEditorRefAPI | null => editorRef.current)

// The only PromptEditor state we really need to track in our own state is whether it's empty.
const [isEmptyEditorValue, setIsEmptyEditorValue] = useState(
Expand All @@ -124,9 +122,6 @@ export const HumanMessageEditor: FunctionComponent<{
? 'emptyEditorValue'
: 'submittable'

// TODO: Finish implementing "current repo not indexed" handling for v2 editor
const experimentalPromptEditorEnabled = useFeatureFlag(FeatureFlag.CodyExperimentalPromptEditor)

const onSubmitClick = useCallback(
(intent?: ChatMessage['intent'], forceSubmit?: boolean): void => {
if (!forceSubmit && submitState === 'emptyEditorValue') {
Expand Down Expand Up @@ -163,7 +158,10 @@ export const HumanMessageEditor: FunctionComponent<{
)

const omniBoxEnabled = useOmniBox()
const { isDotComUser } = useConfig()
const {
isDotComUser,
config: { experimentalPromptEditorEnabled },
} = useConfig()

const onEditorEnterKey = useCallback(
(event: KeyboardEvent | null): void => {
Expand Down Expand Up @@ -425,6 +423,7 @@ export const HumanMessageEditor: FunctionComponent<{
[linkOpener]
)

// TODO: Finish implementing "current repo not indexed" handling for v2 editor
const Editor = experimentalPromptEditorEnabled ? PromptEditorV2 : PromptEditor

return (
Expand Down

0 comments on commit c523b2f

Please sign in to comment.