diff --git a/build.gradle.kts b/build.gradle.kts index 2870a5112d..11be605540 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -227,6 +227,7 @@ fun Test.sharedIntegrationTestConfig(buildCodyDir: File, mode: String) { environment( "CODY_RECORDING_MODE" to mode, + "CODY_RECORDING_NAME" to "integration-test", "CODY_RECORDING_DIRECTORY" to resourcesDir.resolve("recordings").absolutePath, "CODY_SHIM_TESTING" to "true", "CODY_TEMPERATURE_ZERO" to "true", diff --git a/src/integrationTest/kotlin/com/sourcegraph/cody/AllSuites.kt b/src/integrationTest/kotlin/com/sourcegraph/cody/AllSuites.kt index 171b0a4103..67c8ebd3c7 100644 --- a/src/integrationTest/kotlin/com/sourcegraph/cody/AllSuites.kt +++ b/src/integrationTest/kotlin/com/sourcegraph/cody/AllSuites.kt @@ -1,11 +1,8 @@ package com.sourcegraph.cody -import com.sourcegraph.cody.chat.ChatTest import com.sourcegraph.cody.edit.DocumentCodeTest import com.sourcegraph.cody.util.RepeatableSuite import org.junit.runner.RunWith import org.junit.runners.Suite -@RunWith(RepeatableSuite::class) -@Suite.SuiteClasses(ChatTest::class, DocumentCodeTest::class) -class AllSuites +@RunWith(RepeatableSuite::class) @Suite.SuiteClasses(DocumentCodeTest::class) class AllSuites diff --git a/src/integrationTest/kotlin/com/sourcegraph/cody/chat/ChatTest.kt b/src/integrationTest/kotlin/com/sourcegraph/cody/chat/ChatTest.kt deleted file mode 100644 index 57656a1104..0000000000 --- a/src/integrationTest/kotlin/com/sourcegraph/cody/chat/ChatTest.kt +++ /dev/null @@ -1,102 +0,0 @@ -package com.sourcegraph.cody.chat - -import com.intellij.testFramework.runInEdtAndGet -import com.intellij.testFramework.runInEdtAndWait -import com.sourcegraph.cody.chat.ui.ContextFileActionLink -import com.sourcegraph.cody.context.ui.EnterpriseEnhancedContextPanel -import com.sourcegraph.cody.history.HistoryService -import com.sourcegraph.cody.history.state.EnhancedContextState -import com.sourcegraph.cody.history.state.RemoteRepositoryState -import com.sourcegraph.cody.util.CodyIntegrationTestFixture -import com.sourcegraph.cody.util.CustomJunitClassRunner -import com.sourcegraph.cody.util.TestingCredentials -import java.awt.Component -import java.awt.Container -import java.util.concurrent.TimeUnit -import junit.framework.TestCase -import org.awaitility.kotlin.await -import org.awaitility.kotlin.until -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(CustomJunitClassRunner::class) -class ChatTest : CodyIntegrationTestFixture() { - override fun recordingName() = "chat" - - override fun credentials() = TestingCredentials.enterprise - - override fun checkSuiteSpecificInitialConditions() = Unit - - @Test - fun testRemoteContextFileItems() { - val enhancedContextState = - EnhancedContextState().apply { - remoteRepositories.add( - RemoteRepositoryState().apply { - isEnabled = true - remoteUrl = "github.com/sourcegraph/cody" - codebaseName = "github.com/sourcegraph/cody" - }) - } - HistoryService.getInstance(project).updateDefaultContextState(enhancedContextState) - - val session = runInEdtAndGet { AgentChatSession.createNew(project) } - - await.atMost(30, TimeUnit.SECONDS) until - { - (session.getPanel().contextView as EnterpriseEnhancedContextPanel) - .controller - .getConfiguredState() - .find { it.name == "github.com/sourcegraph/cody" && !it.isIgnored } != null - } - - runInEdtAndWait { session.sendMessage("What is JSON RPC?", emptyList()) } - - await.atMost(30, TimeUnit.SECONDS) until { !session.messages[0].contextFiles.isNullOrEmpty() } - await.atMost(30, TimeUnit.SECONDS) until { session.messages.size == 2 } - await.atMost(30, TimeUnit.SECONDS) until { session.messages[1].text?.isNotBlank() == true } - - val linkPanels = - findComponentsRecursively(session.getPanel(), ContextFileActionLink::class.java) - - TestCase.assertEquals( - listOf( - "cody agent/CHANGELOG.md", - "cody agent/README.md", - "cody agent/src/__tests__/chat-response-quality/README.md", - "cody agent/src/cli/command-jsonrpc-stdio.ts", - "cody agent/src/cli/command-jsonrpc-websocket.ts", - "cody agent/src/cli/command-root.ts", - "cody agent/src/cli/scip-codegen/JvmCodegen.ts", - "cody agent/src/cli/scip-codegen/JvmFormatter.ts", - "cody agent/src/jsonrpc-alias.ts", - "cody agent/src/local-e2e/README.md", - "cody lib/icons/README.md", - "cody vscode/src/graph/bfg/spawn-bfg.ts", - "cody vscode/src/jsonrpc/bfg-protocol.ts", - "cody vscode/src/jsonrpc/CodyJsonRpcErrorCode.ts", - "cody vscode/src/jsonrpc/embeddings-protocol.ts", - "cody vscode/src/jsonrpc/isRunningInsideAgent.ts", - "cody vscode/src/jsonrpc/jsonrpc.ts", - "cody vscode/src/jsonrpc/TextDocumentWithUri.test.ts", - "cody vscode/src/jsonrpc/TextDocumentWithUri.ts", - "cody web/lib/agent/agent.client.ts"), - linkPanels.map { panel -> panel.text }) - } - - private fun findComponentsRecursively(parent: Component, targetClass: Class): List { - val result = mutableListOf() - - if (targetClass.isInstance(parent)) { - result.add(parent as A) - } - - if (parent is Container) { - for (component in parent.components) { - result.addAll(findComponentsRecursively(component, targetClass)) - } - } - - return result - } -} diff --git a/src/integrationTest/kotlin/com/sourcegraph/cody/edit/DocumentCodeTest.kt b/src/integrationTest/kotlin/com/sourcegraph/cody/edit/DocumentCodeTest.kt index 3189164621..251f31590d 100644 --- a/src/integrationTest/kotlin/com/sourcegraph/cody/edit/DocumentCodeTest.kt +++ b/src/integrationTest/kotlin/com/sourcegraph/cody/edit/DocumentCodeTest.kt @@ -1,10 +1,5 @@ package com.sourcegraph.cody.edit -import com.intellij.openapi.actionSystem.ActionManager -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.DataContext -import com.intellij.openapi.editor.Editor -import com.intellij.openapi.editor.ex.EditorEx import com.sourcegraph.cody.edit.actions.DocumentCodeAction import com.sourcegraph.cody.edit.actions.lenses.EditAcceptAction import com.sourcegraph.cody.edit.actions.lenses.EditCancelAction @@ -15,35 +10,15 @@ import com.sourcegraph.cody.edit.widget.LensIcon import com.sourcegraph.cody.edit.widget.LensLabel import com.sourcegraph.cody.edit.widget.LensSpinner import com.sourcegraph.cody.edit.widget.LensWidgetGroup -import com.sourcegraph.cody.util.CodyIntegrationTestFixture +import com.sourcegraph.cody.util.CodyIntegrationTextFixture import com.sourcegraph.cody.util.CustomJunitClassRunner -import com.sourcegraph.cody.util.TestingCredentials import org.hamcrest.Matchers.startsWith import org.junit.Assert.assertThat import org.junit.Test import org.junit.runner.RunWith @RunWith(CustomJunitClassRunner::class) -class DocumentCodeTest : CodyIntegrationTestFixture() { - override fun recordingName() = "documentCode" - - override fun credentials() = TestingCredentials.dotcom - - override fun checkSuiteSpecificInitialConditions() { - // Check the initial state of the action's presentation - val action = ActionManager.getInstance().getAction("cody.documentCodeAction") - val event = - AnActionEvent.createFromAnAction(action, null, "", createEditorContext(myFixture.editor)) - action.update(event) - val presentation = event.presentation - assertTrue("Action should be enabled", presentation.isEnabled) - assertTrue("Action should be visible", presentation.isVisible) - } - - private fun createEditorContext(editor: Editor): DataContext { - return (editor as? EditorEx)?.dataContext ?: DataContext.EMPTY_CONTEXT - } - +class DocumentCodeTest : CodyIntegrationTextFixture() { @Test fun testGetsWorkingGroupLens() { val codeLensGroup = runAndWaitForLenses(DocumentCodeAction.ID, EditCancelAction.ID) diff --git a/src/integrationTest/kotlin/com/sourcegraph/cody/util/CodyIntegrationTestFixture.kt b/src/integrationTest/kotlin/com/sourcegraph/cody/util/CodyIntegrationTextFixture.kt similarity index 82% rename from src/integrationTest/kotlin/com/sourcegraph/cody/util/CodyIntegrationTestFixture.kt rename to src/integrationTest/kotlin/com/sourcegraph/cody/util/CodyIntegrationTextFixture.kt index bce07d2ebc..1ec0e0c4b8 100644 --- a/src/integrationTest/kotlin/com/sourcegraph/cody/util/CodyIntegrationTestFixture.kt +++ b/src/integrationTest/kotlin/com/sourcegraph/cody/util/CodyIntegrationTextFixture.kt @@ -1,11 +1,16 @@ package com.sourcegraph.cody.util import com.intellij.ide.lightEdit.LightEdit +import com.intellij.openapi.actionSystem.ActionManager +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.WriteAction import com.intellij.openapi.application.runInEdt import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.editor.ex.EditorEx import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project @@ -26,8 +31,8 @@ import java.util.concurrent.TimeUnit import java.util.regex.Pattern import junit.framework.TestCase -abstract class CodyIntegrationTestFixture : BasePlatformTestCase(), LensListener { - private val logger = Logger.getInstance(CodyIntegrationTestFixture::class.java) +open class CodyIntegrationTextFixture : BasePlatformTestCase(), LensListener { + private val logger = Logger.getInstance(CodyIntegrationTextFixture::class.java) private val lensSubscribers = mutableListOf< Pair<(List) -> Boolean, CompletableFuture>>() @@ -56,7 +61,23 @@ abstract class CodyIntegrationTestFixture : BasePlatformTestCase(), LensListener val recordingsFuture = CompletableFuture() CodyAgentService.withAgent(project) { agent -> - agent.server.testing_requestErrors(params = null).get() + val errors = agent.server.testingRequestErrors().get() + // We extract polly.js errors to notify users about the missing recordings, if any + val missingRecordings = errors.filter { it.error?.contains("`recordIfMissing` is") == true } + missingRecordings.forEach { missing -> + logger.error( + """Recording is missing: ${missing.error} + | + |${missing.body} + | + |------------------------------------------------------------------------------------------ + |To fix this problem please run `./gradlew :recordingIntegrationTest`. + |You need to export access tokens first, using script from the `sourcegraph/cody` repository: + |`agent/scripts/export-cody-http-recording-tokens.sh` + |------------------------------------------------------------------------------------------ + """ + .trimMargin()) + } recordingsFuture.complete(null) } recordingsFuture.get(ASYNC_WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS) @@ -74,14 +95,7 @@ abstract class CodyIntegrationTestFixture : BasePlatformTestCase(), LensListener // Methods there are mostly idempotent though, so calling again for every test case should not // change anything. private fun initCredentialsAndAgent() { - assertNotNull( - "Unable to start agent in a timely fashion!", - CodyAgentService.getInstance(project) - .startAgent(project, additionalEnvs = mapOf("CODY_RECORDING_NAME" to recordingName())) - .completeOnTimeout(null, ASYNC_WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS) - .get()) - - val credentials = credentials() + val credentials = TestingCredentials.dotcom CodyPersistentAccountsHost(project) .addAccount( SourcegraphServerPath.from(credentials.serverEndpoint, ""), @@ -89,11 +103,14 @@ abstract class CodyIntegrationTestFixture : BasePlatformTestCase(), LensListener displayName = "Test User", token = credentials.token ?: credentials.redactedToken, id = "random-unique-testing-id-1337") - } - abstract fun recordingName(): String - - abstract fun credentials(): TestingCredentials + assertNotNull( + "Unable to start agent in a timely fashion!", + CodyAgentService.getInstance(project) + .startAgent(project) + .completeOnTimeout(null, ASYNC_WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS) + .get()) + } private fun checkInitialConditions() { // If you don't specify this system property with this setting when running the tests, @@ -113,10 +130,19 @@ abstract class CodyIntegrationTestFixture : BasePlatformTestCase(), LensListener val isLightEditMode = LightEdit.owns(project) assertFalse("Project should not be in LightEdit mode", isLightEditMode) - checkSuiteSpecificInitialConditions() + // Check the initial state of the action's presentation + val action = ActionManager.getInstance().getAction("cody.documentCodeAction") + val event = + AnActionEvent.createFromAnAction(action, null, "", createEditorContext(myFixture.editor)) + action.update(event) + val presentation = event.presentation + assertTrue("Action should be enabled", presentation.isEnabled) + assertTrue("Action should be visible", presentation.isVisible) } - abstract fun checkSuiteSpecificInitialConditions() + private fun createEditorContext(editor: Editor): DataContext { + return (editor as? EditorEx)?.dataContext ?: DataContext.EMPTY_CONTEXT + } // This provides a crude mechanism for specifying the caret position in the test file. private fun initCaretPosition() { diff --git a/src/integrationTest/resources/recordings/chat_2722888107/recording.har.yaml b/src/integrationTest/resources/recordings/chat_2722888107/recording.har.yaml deleted file mode 100644 index b4ef71acc2..0000000000 --- a/src/integrationTest/resources/recordings/chat_2722888107/recording.har.yaml +++ /dev/null @@ -1,2414 +0,0 @@ -log: - _recordingName: chat - creator: - comment: persister:fs - name: Polly.JS - version: 6.0.6 - entries: - - _id: 55e4b30d65f8bef20b754a5b102111d0 - _order: 0 - cache: {} - request: - bodySize: 0 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 296 - httpVersion: HTTP/1.1 - method: GET - queryString: [] - url: https://demo.sourcegraph.com/.api/client-config - response: - bodySize: 184 - content: - encoding: base64 - mimeType: text/plain; charset=utf-8 - size: 184 - text: "[\"H4sIAAAAAAAAA2zMsQpCMQyF4b1PEe7sE7hJcXBzc861EQtNI80pKnLf3UVwyfz953wSE\ - dFytfI+dl6blGVPGFN2P7gzQuAJy6aPJpB4OR2m2VS5F48/gFHXiWo9dFceyNYhL1xq\ - L/YMM7UizQ/n019v3FzSlr4AAAD//wMAmGWdCt8AAAA=\"]" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:20 GMT - - name: content-type - value: text/plain; charset=utf-8 - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "176" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1364 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.849Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 132f966d98fb83a3612d47239060956e - _order: 0 - cache: {} - request: - bodySize: 20390 - cookies: [] - headers: - - name: content-type - value: application/json - - name: accept-encoding - value: gzip;q=0 - - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - name: user-agent - value: JetBrains / 6.0-localbuild - - name: traceparent - value: 00-86dd245a47c1f0f20c9a2f9b5ff9a829-b8a845bad6768fe0-01 - - name: connection - value: keep-alive - - name: host - value: demo.sourcegraph.com - headersSize: 430 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json - params: [] - textJSON: - maxTokensToSample: 4000 - messages: - - speaker: system - text: You are Cody, an AI coding assistant from Sourcegraph. - - speaker: human - text: >- - Codebase context from file /web/lib/agent/agent.client.ts in - repository github.com/sourcegraph/cody: - - ```typescript - - // @ts-ignore - - import AgentWorker from './agent.worker.ts?worker&inline' - - - // TODO(sqs): dedupe with agentClient.ts in [experimental Cody CLI](https://github.com/sourcegraph/cody/pull/3418) - - export interface AgentClient { - serverInfo: ServerInfo - rpc: MessageConnection - dispose(): void - } - - - interface AgentClientOptions { - serverEndpoint: string - accessToken: string - workspaceRootUri: string - telemetryClientName?: string - customHeaders?: Record - debug?: boolean - trace?: boolean - } - - - export async function createAgentClient({ - serverEndpoint, - accessToken, - workspaceRootUri, - customHeaders, - telemetryClientName, - debug = true, - trace = false, - }: AgentClientOptions): Promise { - // Run agent worker and set up a transport bridge between - // main thread and web-worker thread via json-rpc protocol - const worker = new AgentWorker() as Worker - const rpc = createMessageConnection( - new BrowserMessageReader(worker), - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /vscode/src/jsonrpc/TextDocumentWithUri.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - } from './agent-protocol' - - - /** - * Wrapper around `ProtocolTextDocument` that also contains a parsed vscode.Uri. - * - * We can't use `vscode.Uri` in `ProtocolTextDocument` because we use that type - * in the JSON-RPC protocol where URIs are string-encoded. - */ - export class ProtocolTextDocumentWithUri { - public underlying: ProtocolTextDocument - private constructor( - public readonly uri: vscode.Uri, - underlying?: ProtocolTextDocument - ) { - this.underlying = underlying ?? { uri: uri.toString() } - if (this.underlying.uri !== uri.toString()) { - logDebug( - 'ProtocolTextDocumentWithUri', - 'correcting invariant violation', - `${this.uri} (this.uri) !== ${this.underlying.uri} (this.underlying.uri)` - ) - this.underlying.uri = uri.toString() - } - } - - public static fromDocument(document: ProtocolTextDocument): ProtocolTextDocumentWithUri { - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /vscode/src/jsonrpc/TextDocumentWithUri.test.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - import { describe, expect, it } from 'vitest' - - import { ProtocolTextDocumentWithUri } from './TextDocumentWithUri' - - - describe('TextDocumentWithUri', () => { - it('handles URIs with exclamation marks', () => { - const uri = - 'file:///Users/com.jetbrains/ideaIC-2022.1-sources.jar!/com/intellij/RequiresBackgroundThread.java' - const textDocument = ProtocolTextDocumentWithUri.fromDocument({ uri }) - expect(textDocument.uri.toString()).toStrictEqual(textDocument.underlying.uri) - expect(textDocument.uri.toString()).toStrictEqual( - 'file:///Users/com.jetbrains/ideaIC-2022.1-sources.jar%21/com/intellij/RequiresBackgroundThread.java' - ) - }) - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /vscode/src/jsonrpc/jsonrpc.ts in - repository github.com/sourcegraph/cody: - - ```typescript - - import { appendFileSync, existsSync, mkdirSync, rmSync } from 'node:fs' - - import { dirname } from 'node:path' - - - import { isRateLimitError } from '@sourcegraph/cody-shared' - - import * as vscode from 'vscode' - - import { type CancellationToken, type MessageConnection, ResponseError, Trace } from 'vscode-jsonrpc' - - import { CodyJsonRpcErrorCode } from './CodyJsonRpcErrorCode' - - import type * as agent from './agent-protocol' - - import type * as bfg from './bfg-protocol' - - import type * as embeddings from './embeddings-protocol' - - - type Requests = bfg.Requests & agent.Requests & embeddings.Requests - - type Notifications = bfg.Notifications & agent.Notifications & embeddings.Notifications - - - // String literal types for the names of the Cody Agent protocol methods. - - export type RequestMethodName = keyof Requests - - export type NotificationMethodName = keyof Notifications - - type MethodName = RequestMethodName | NotificationMethodName - - - // Parameter type of a request or notification. Note: JSON-RPC methods can only - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /vscode/src/jsonrpc/isRunningInsideAgent.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - import * as vscode from 'vscode' - - - let cached: boolean | undefined - - export function isRunningInsideAgent(): boolean { - if (cached === undefined) { - cached = vscode.workspace.getConfiguration().get('cody.advanced.agent.running', false) - } - return cached - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /vscode/src/jsonrpc/embeddings-protocol.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - /** - * The protocol for communicating between Cody and local embeddings. - */ - - interface InitializeParams { - codyGatewayEndpoint: string - indexPath: string - chunkingPolicy?: ChunkingPolicy | undefined | null - } - - - interface ChunkingPolicy { - maxFileSizeBytes: number - pathsToExcludeRegexp: string - } - - - interface QueryParams { - repoName: string - query: string - numResults: number - } - - - export interface QueryResultSet { - results: QueryResult[] - } - - - interface QueryResult { - fileName: string - startLine: number - endLine: number - content: string - } - - - interface IndexHealthRequest { - // The name of the repository to scrutinize the index for. Note, this - // is a repo name, like github.com/sourcegraph/cody, not a file path. - repoName: string - } - - - type IndexHealthResult = IndexHealthResultFound | IndexHealthResultNotFound - - - export interface IndexHealthResultFound { - type: 'found' - repoName: string - format: 'App' | 'LocalEmbeddings' - commit: string - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /vscode/src/jsonrpc/CodyJsonRpcErrorCode.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - export enum CodyJsonRpcErrorCode { - ParseError = -32700, - InvalidRequest = -32600, - MethodNotFound = -32601, - InvalidParams = -32602, - InternalError = -32603, - RequestCanceled = -32604, - RateLimitError = -32000, - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /vscode/src/jsonrpc/bfg-protocol.ts - in repository github.com/sourcegraph/cody: - - ```typescript - - /** - * This file declares the protocol for communicating between Cody and BFG (Blazingly Fast Graph), a Rust implementation - * of the "Graph Context" feature flag. - */ - import type { Position } from './agent-protocol' - - - interface BFGFileContextSnippet { - fileName: string - content: string - } - - - interface BFGSymbolContextSnippet extends BFGFileContextSnippet { - symbol: string - } - - - export type Requests = { - 'bfg/initialize': [{ clientName: string }, { serverVersion: string }] - 'bfg/contextAtPosition': [ - { uri: string; content: string; position: Position; maxSnippets: number; maxDepth: number }, - { - symbols?: BFGSymbolContextSnippet[] | undefined | null - files?: BFGFileContextSnippet[] | undefined | null - }, - ] - 'bfg/contextForIdentifiers': [ - { uri: string; identifiers: string[]; maxSnippets: number; maxDepth: number }, - { symbols?: BFGSymbolContextSnippet[] | undefined | null }, - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /vscode/src/graph/bfg/spawn-bfg.ts - in repository github.com/sourcegraph/cody: - - ```typescript - - import * as child_process from 'node:child_process' - - - import * as vscode from 'vscode' - - - import { StreamMessageReader, StreamMessageWriter, createMessageConnection } from 'vscode-jsonrpc/node' - - import { MessageHandler } from '../../jsonrpc/jsonrpc' - - import { logDebug } from '../../log' - - import { getBfgPath } from './download-bfg' - - - export async function spawnBfg( - context: vscode.ExtensionContext, - reject: (reason?: any) => void - ): Promise { - const codyrpc = await getBfgPath(context) - if (!codyrpc) { - throw new Error( - 'Failed to download BFG binary. To fix this problem, set the "cody.experimental.cody-engine.path" configuration to the path of your BFG binary' - ) - } - const isVerboseDebug = vscode.workspace.getConfiguration().get('cody.debug.verbose', false) - const child = child_process.spawn(codyrpc, { - stdio: 'pipe', - env: { - ...process.env, - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /lib/icons/README.md in repository - github.com/sourcegraph/cody: - - ```markdown - - - ```sh - - cp font/cody-icons.ttf ../../vscode/resources/cody-icons.ttf - - cp font/cody-icons.woff ../../vscode/resources/cody-icons.woff - - ``` - - - 2. Register the icons in `vscode/package.json` in the `icons` field. - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /agent/src/local-e2e/README.md in - repository github.com/sourcegraph/cody: - - ```markdown - "completionModel": "anthropic/claude-instant-1", - // truncated - } - - ``` - - - While you can totally edit those over https://sourcegraph.test:3443/site-admin/configuration, the - - recommended method is through the escape hatch: `~/.sourcegraph/site-config.json`. Once the local - - instance is running, saving that file will reload the instance. - - - ## Running the tests - - - 1. In your Sourcegraph folder, run `sg start dotcom-cody-e2e`. - 1. To ensure the default site-admin is available (mandatory), still in the Sourcegraph folder you can run `sg db default-site-admin`. - 1. Back to the Cody repo, run `pnpm run test:local-e2e` - - - ## FAQ - - - ### Why write a test if I'm going to throw it away? - - - First, because it's a starting point. Even if you can't solve the problem, you can at least try - - to reproduce the prolbem and just share that with your teammates. - - - And second, the final integration/e2e test that will be shipped with the fix will most likely - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /agent/src/jsonrpc-alias.ts in - repository github.com/sourcegraph/cody: - - ```typescript - - export * from '../../vscode/src/jsonrpc/jsonrpc' - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /agent/src/cli/scip-codegen/JvmFormatter.ts in repository - github.com/sourcegraph/cody: - - ```typescript - .replaceAll('$/', '') - .split('/') - .map(part => capitalize(part)) - .join('_') - } - - public jsonrpcMethodParameter(jsonrpcMethod: scip.SymbolInformation): { - parameterSyntax: string - parameterType: scip.Type - } { - const parameterType = jsonrpcMethod.signature.value_signature.tpe.type_ref.type_arguments[0] - const parameterSyntax = this.jsonrpcTypeName(jsonrpcMethod, parameterType, 'parameter') - if (this.language === JvmLanguage.Kotlin) { - return { parameterType, parameterSyntax: `params: ${parameterSyntax}` } - } - return { parameterType, parameterSyntax: `${parameterSyntax} params` } - } - - public isNullish(symbol: string): boolean { - return symbol === typescriptKeyword('undefined') || symbol === typescriptKeyword('null') - } - - public isNullableInfo(info: scip.SymbolInformation): boolean { - return this.isNullable(info.signature.value_signature.tpe) - } - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /agent/src/cli/scip-codegen/JvmCodegen.ts in repository - github.com/sourcegraph/cody: - - ```typescript - continue - } - // Process a JSON-RPC request signature. For example: - // type Notifications = { 'textDocument/inlineCompletions': [NotificationParams] } - const { parameterType, parameterSyntax } = f.jsonrpcMethodParameter(notification) - this.queueClassLikeType(parameterType, notification, 'parameter') - p.line(`@JsonNotification("${notification.display_name}")`) - if (this.language === JvmLanguage.Kotlin) { - p.line(`fun ${f.functionName(notification)}(${parameterSyntax})`) - } else { - p.line(`void ${f.functionName(notification)}(${parameterSyntax});`) - } - } - }) - - p.line('}') - - await fspromises.writeFile( - path.join(this.options.output, `${name}.${this.fileExtension()}`), - p.build() - ) - } - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /agent/src/cli/command-root.ts in - repository github.com/sourcegraph/cody: - - ```typescript - - import { authCommand } from './command-auth/command-auth' - - import { benchCommand } from './command-bench/command-bench' - - import { chatCommand } from './command-chat' - - import { jsonrpcCommand } from './command-jsonrpc-stdio' - - import { serverCommand } from './command-jsonrpc-websocket' - - - import { version } from '../../package.json' - - - export const rootCommand = new Command() - .name('cody') - .version(version, '-v, --version') - .description( - 'The Cody cli supports running Cody in headless mode and interacting with it via JSON-RPC. Run `cody chat -m "Hello" to get started.' - ) - .addCommand(authCommand()) - .addCommand(chatCommand()) - .addCommand(new Command('api').addCommand(serverCommand).addCommand(jsonrpcCommand)) - .addCommand(new Command('internal').addCommand(benchCommand)) - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /agent/src/cli/command-jsonrpc-websocket.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - import { logDebug, logError } from '@sourcegraph/cody-shared' - - import { Command } from 'commander' - - import { WebSocketServer } from 'ws' - - import { newAgentClient } from '../agent' - - import type { RpcMessageHandler } from '../jsonrpc-alias' - - import { intOption } from './command-bench/cli-parsers' - - - interface ServerOptions { - port: number - } - - - export const serverCommand = new Command('jsonrpc-websocket') - .description( - 'Start a server that opens JSON-RPC connections through websockets. This command does not work at the moment.' - ) - .option('--port ', 'Which port to listen to', intOption, 7000) - .action(async (options: ServerOptions) => { - const wss = new WebSocketServer({ - port: options.port, - }) - logDebug('cody-server', `Listening... http://localhost:${options.port}`) - wss.on('connection', async ws => { - logDebug('cody-server', 'New client') - let client: RpcMessageHandler | undefined - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /agent/src/cli/command-jsonrpc-stdio.ts in repository - github.com/sourcegraph/cody: - - ```typescript - - import { startPollyRecording } from '../../../vscode/src/testutils/polly' - - import { Agent } from '../agent' - - - import { activate } from '../../../vscode/src/extension.node' - - import { booleanOption } from './command-bench/cli-parsers' - - - interface JsonrpcCommandOptions { - expiresIn?: string | null | undefined - recordingDirectory?: string - keepUnusedRecordings?: boolean - recordingMode?: MODE - recordIfMissing?: boolean - recordingExpiryStrategy?: EXPIRY_STRATEGY - recordingName?: string - } - - - export interface PollyRequestError { - request: Request - error: string - } - - - function recordingModeOption(value: string): MODE { - switch (value) { - case 'record': - case 'replay': - case 'passthrough': - case 'stopped': - return value - default: - throw new commander.InvalidArgumentError( - 'Not a valid recording mode. Valid options are record, replay-or-record, replay, passthrough, or stopped.' - ) - } - } - - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file - /agent/src/__tests__/chat-response-quality/README.md in - repository github.com/sourcegraph/cody: - - ```markdown - - - ### Web interface - - go install github.com/sourcegraph/zoekt/cmd/zoekt-webserver - $GOPATH/bin/zoekt-webserver -listen :6070 - - ### JSON API - - - You can retrieve search results as JSON by sending a GET request to zoekt-webserver. - - curl --get /n --url "http://localhost:6070/search" /n --data-urlencode "q=ngram f:READ" /n --data-urlencode "num=50" /n --data-urlencode "format=json" - - The response data is a JSON object. You can refer to [web.ApiSearchResult](https://sourcegraph.com/github.com/sourcegraph/zoekt@6b1df4f8a3d7b34f13ba0cafd8e1a9b3fc728cf0/-/blob/web/api.go?L23:6&subtree=true) to learn about the structure of the object. - - - ### CLI - - go install github.com/sourcegraph/zoekt/cmd/zoekt - $GOPATH/bin/zoekt 'ngram f:READ' - - ## Installation - - A more organized installation on a Linux server should use a systemd unit file, - - eg. - - [Unit] - Description=zoekt webserver - - [Service] - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /agent/README.md in repository - github.com/sourcegraph/cody: - - ```markdown - - # Cody Agent - - - The `@sourcegraph/cody-agent` package implements a JSON-RPC server to interact - - with Cody via stdout/stdin. This package is intended to be used by - - non-ECMAScript clients such as the JetBrains and NeoVim plugins. - - - ## Releases - - - Cody Agent releases are available: - - - - as self-contained executables for various platforms at [Cody Agent releases](https://github.com/sourcegraph/cody/releases) on GitHub - - - from the `@sourcegraph/cody-agent` npm package (`npx @sourcegraph/cody-agent help`) - - - To build and publish a release using GitHub Actions, bump the version number in the agent's [package.json](package.json) and then push to the `agent-vN.N.N` tag (where `N.N.N` is that version number). - - - ## Protocol - - - The protocol is defined in the file [`protocol.ts`](../vscode/src/jsonrpc/agent-protocol.ts). The TypeScript code is the single source of truth of what JSON-RPC methods are - - supported in the protocol. - - - ## Updating the protocol - - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: >- - Codebase context from file /agent/CHANGELOG.md in repository - github.com/sourcegraph/cody: - - ```markdown - - - - New command `auth login --web` to authenticate the cli through the browser. The access token is stored in the operating system's secret storage (Keychain on macOS, Credential Vault on Windows, Secret Service API/libsecret on Linux). - - - New command `auth login --access-token` to authenticate with an access token or `SRC_ACCESS_TOKEN` environment variable. - - - New command `auth logout` to log out of the cli. - - - New command `auth whoami` to determine what account is logged in. - - - New command `auth accounts` to list all available Sourcegraph accounts. - - - New command `auth settings-path` to print the JSON file path where non-sensitive configuration is stored. - - - ### Changed - - - - The `chat` command now runs faster - - - The `chat` command now prints the reply to the standard output stream instead of system error. - - - The `chat` command now interacively streams the reply to system error. Use `--silent` to disable interactive streaming. - - ``` - - speaker: assistant - text: Ok. - - speaker: human - text: |- - You have access to the provided codebase context. - - Question: What is JSON RPC? - model: anthropic/claude-3-opus-20240229 - temperature: 0 - topK: -1 - topP: -1 - queryString: - - name: api-version - value: "1" - - name: client-name - value: jetbrains - - name: client-version - value: 6.0-localbuild - url: https://demo.sourcegraph.com/.api/completions/stream?api-version=1&client-name=jetbrains&client-version=6.0-localbuild - response: - bodySize: 121498 - content: - mimeType: text/event-stream - size: 121498 - text: >+ - event: completion - - data: {"completion":"Based on the provided codebase context, JSON-RPC (JSON Remote Procedure Call) is a protocol used for communication between different components of the Cody system. Here are a few key points about JSON-RPC in the context of this codebase:\n\n1. JSON-RPC is used to define the protocol for communication between Cody and other components like the BFG (Blazingly Fast Graph) and local embeddings (files `bfg-protocol.ts` and `embeddings-protocol.ts`).\n\n2. The protocol is defined in the file `agent-protocol.ts` in the `vscode/src/jsonrpc` directory. This TypeScript code serves as the single source of truth for the supported JSON-RPC methods in the protocol.\n\n3. The `@sourcegraph/cody-agent` package implements a JSON-RPC server to interact with Cody via stdout/stdin. This is intended for non-ECMAScript clients such as JetBrains and NeoVim plugins to communicate with Cody.\n\n4. The `jsonrpc.ts` file in `vscode/src/jsonrpc` defines types for request method names (`RequestMethodName`) and notification method names (`NotificationMethodName`) based on the protocol definition.\n\n5. The `command-jsonrpc-stdio.ts` and `command-jsonrpc-websocket.ts` files in the `agent/src/cli` directory implement JSON-RPC communication via stdio and WebSocket respectively.\n\nIn summary, JSON-RPC is used as a protocol for communication between different parts of the Cody system, with the protocol defined in TypeScript and implemented in various components for interoperability with non-ECMAScript clients.","stopReason":"end_turn"} - - - event: done - - data: {} - - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:25 GMT - - name: content-type - value: text/event-stream - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "175" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - headersSize: 1321 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:21.167Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 904d184d3559994254e824161e4c5c77 - _order: 0 - cache: {} - request: - bodySize: 144 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "144" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 327 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query ContextFilters { - site { - codyContextFilters(version: V1) { - raw - } - } - } - variables: {} - queryString: - - name: ContextFilters - value: null - url: https://demo.sourcegraph.com/.api/graphql?ContextFilters - response: - bodySize: 111 - content: - encoding: base64 - mimeType: application/json - size: 111 - text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdHJ+SmVzvl5JakVJW6ZOSWpRcUg0aLEciWrv\ - NKcnNra2loAAAAA//8=\",\"AwA2LshlNQAAAA==\"]" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:20 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "176" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:20.531Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 5007670687f0520c7adc88dbc7af3663 - _order: 0 - cache: {} - request: - bodySize: 318 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "318" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 344 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query CurrentSiteCodyLlmConfiguration { - site { - codyLLMConfiguration { - chatModel - chatModelMaxTokens - fastChatModel - fastChatModelMaxTokens - completionModel - completionModelMaxTokens - } - } - } - variables: {} - queryString: - - name: CurrentSiteCodyLlmConfiguration - value: null - url: https://demo.sourcegraph.com/.api/graphql?CurrentSiteCodyLlmConfiguration - response: - bodySize: 244 - content: - encoding: base64 - mimeType: application/json - size: 244 - text: "[\"H4sIAAAAAAAAA3zOTQqDMBAF4LvMWnEaC0W3bnXnBYYk1qDNSH5oi+TuxZbSUqGrB8Obj\ - 7eCokBQr+BN0FtKVve27Rq2gzlHR8Gwfd5HCh0rPUMNZMPoeDGykDNFpfMy5yX6XKA4\ - ohAVZJ96R7eeJ2091AeBiBkM5EPzXxvJTPHFlXiCn589KfmyzHqb+kYH4/SV3eQLH8h\ - JVtrBrvcFVYiYUkoPAAAA//8DAJ/xqakRAQAA\"]" - textDecoded: - data: - site: - codyLLMConfiguration: - chatModel: anthropic/claude-3-opus-20240229 - chatModelMaxTokens: 12000 - completionModel: fireworks/starcoder - completionModelMaxTokens: 9000 - fastChatModel: anthropic/claude-3-haiku-20240307 - fastChatModelMaxTokens: 12000 - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.006Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: df222ef86be999cf54ffad2c1b3ab52b - _order: 0 - cache: {} - request: - bodySize: 165 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "165" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 344 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query CurrentSiteCodyLlmConfiguration { - site { - codyLLMConfiguration { - smartContextWindow - } - } - } - variables: {} - queryString: - - name: CurrentSiteCodyLlmConfiguration - value: null - url: https://demo.sourcegraph.com/.api/graphql?CurrentSiteCodyLlmConfiguration - response: - bodySize: 139 - content: - encoding: base64 - mimeType: application/json - size: 139 - text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdHJ+SmVPj6+zvl5aZnppUWJJZn5eWD53MSiE\ - uf8vJLUipLwzLyU/HIlK6XUvMSknNQUpdra2loAAAAA//8=\",\"AwDoCDSlSwAAAA==\ - \"]" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.046Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: ce5b1e7cdbf1da3406b7de4cf77fe38d - _order: 0 - cache: {} - request: - bodySize: 150 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "150" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 339 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query CurrentSiteCodyLlmProvider { - site { - codyLLMConfiguration { - provider - } - } - } - variables: {} - queryString: - - name: CurrentSiteCodyLlmProvider - value: null - url: https://demo.sourcegraph.com/.api/graphql?CurrentSiteCodyLlmProvider - response: - bodySize: 128 - content: - encoding: base64 - mimeType: application/json - size: 128 - text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdHJ+SmVPj6+zvl5aZnppUWJJZn5eSDxgqL8s\ - syU1CIlK6Xi/NKi5NT0osSCDKXa2tpaAAAAAP//AwAfFAXARQAAAA==\"]" - textDecoded: - data: - site: - codyLLMConfiguration: - provider: sourcegraph - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.026Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 1e4155184524e985a9d3113dc68b8f02 - _order: 0 - cache: {} - request: - bodySize: 341 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "341" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 324 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query CurrentUser { - currentUser { - id - hasVerifiedEmail - displayName - username - avatarURL - primaryEmail { - email - } - organizations { - nodes { - id - name - } - } - } - } - variables: {} - queryString: - - name: CurrentUser - value: null - url: https://demo.sourcegraph.com/.api/graphql?CurrentUser - response: - bodySize: 260 - content: - encoding: base64 - mimeType: application/json - size: 260 - text: "[\"H4sIAAAAAAAAAzSOwQrCQAxE/yXnevK24NGLaAWxRRAPoRtrZJstyVassv8u1Xp8wzDz3\ - uAxIbg3NIMqSaqMdEL24KA+laG5x1d53K2ggBtaTcpXJr/ukAO4KwajAjxbH3AssSNw\ - MoRQwGCk8mVooh8TWWJpoQB8YEKtDtt/s1fuUMd58ZdFbVH4hYmj2KQj0ZOBO89ix+V\ - G9vdqkppPWIzbW7IFPbHrAxnkS845fwAAAP//AwC8qhJW4QAAAA==\"]" - textDecoded: - data: - currentUser: - avatarURL: null - displayName: null - hasVerifiedEmail: false - id: VXNlcjozNTM= - organizations: - nodes: - - id: T3JnOjU= - name: insights-examples - primaryEmail: null - username: codytesting - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.065Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 48fcaa63c10513ba4765138404e0f5b2 - _order: 0 - cache: {} - request: - bodySize: 739 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: traceparent - value: 00-86dd245a47c1f0f20c9a2f9b5ff9a829-4f0ec2d152676d63-01 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "739" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 397 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: >- - - query GetCodyContext($repos: [ID!]!, $query: String!, $codeResultsCount: Int!, $textResultsCount: Int!) { - getCodyContext(repos: $repos, query: $query, codeResultsCount: $codeResultsCount, textResultsCount: $textResultsCount) { - ...on FileChunkContext { - blob { - path - repository { - id - name - } - commit { - oid - } - url - } - startLine - endLine - chunkContent - } - } - } - variables: - codeResultsCount: 15 - query: What is JSON RPC? - repos: - - UmVwb3NpdG9yeTozNzI2MQ== - textResultsCount: 5 - queryString: - - name: GetCodyContext - value: null - url: https://demo.sourcegraph.com/.api/graphql?GetCodyContext - response: - bodySize: 8500 - content: - encoding: base64 - mimeType: application/json - size: 8500 - text: "[\"H4sIAAAAAAAA/+R86XIbt7Lwq/Rh/BXJFDmjxVuYUjmyLDtKvB1Jjr9TpssEZ5okrCEwB\ - jCiaIX32W81gFm52PG5/6Q/IoFGo9FoNHoDb1sxM6w1uG1N0ZzIeHkihcEb0xp8uG2N\ - EzmmrpSZWWvQYlMUJtQqCj99MqiN/vQpjGbM9BXqVAqN/S8ZS7hZhuenx89enQbzuNV\ - rKUyl5kaqJaHicWvQejf/azE+fJ3GL35Z4qX8+vrr2cGrfx8dtXotwebYGrSm3MyycR\ - DJeahlpiKcKpbOwkjGy9aq14rkfM4N4ZMW4f3D8UN28CDaPzzYf/Bgbw8fxA8fsIf7B\ - /sP9x798ggfHLKHh/HjPRqbqaQ1aIU7Zvjte9GF/ZBYFP4IY1a9ljZMmZdcYGtw/36v\ - hSJ2Xx7d77WiWSau7F4I0xq0huKnn36C9zgGLgyqCYtwKIYCAGAqgQttWJLAljV9lXh\ - lwmgeu0/9BY41qmtUDsG9F2/eHl/+Ho65aAJAP+HaoIDBw71HezQjkfHHxZvXcPz2jL\ - 7/R2YQMQEKjeJ4jaCRqWgGCnWWGA1MO/DxEjSKmIspMHhxegkKv2SoDRgJjUmDfGVRp\ - hLo96doYDh0TfTX71P7sDUzJh2EYSIjlsykNpbG0M0/bDWGkJTTOBSRjBGGrS9HYqrY\ - HCYD2pNvw4tsfvRg79twE6nmzBx91lIMW7SSyxlCLgdA4MA1MMcVOf6MkQmg5OIEFbH\ - kwwLHwXHKL+xqzi0zP3ZoxXoQVjfXbvauff/t4Xg/ntyfPGaH8aPx4f3J/uGY7UVsEj\ - /GffbL+HASPTp4HE0KYV7gOGQpD6byycuDw8HDYba3d/BQZ2OjEI+MyrBLFCbIlAA2l\ - pkBM0PQRmWRyRSCnNgGv7ZcaE5env2wxG6RU2hXt7DtZoIzh5oZLsVQHMNcEk1qygT/\ - inE+s+0GKYDBSy6yG/ACr2cyS2LINAIDvdQG5zFkghuY8AR7Q4HTQj4/vBPcfHSfn6G\ - OFE8J65EjrnLKPPgFqmse4cehaK16W7TrndSc27TiXkUpHhysKcWfgC4sOCYc+Ukb/d\ - akqW/nGEHKois2ReDzNME5CpOfwv7525N8+410CpZFZigW3MzcFNecgTaxzEyoTcxFA\ - JczrkuU2o4SMcaEYYwkPzGMl0MhpOifnrw6vrDSAVHC7cw6i2akG+mg/IHmqWJcaGAi\ - htco/+JzSJNsyoX2xwfOMUGmUdPXctGgfDMwhcCuGU/YOMEBQfUJvcZk0o+kMIwLjAF\ - vMMoMgWiYSAXXTHGZaUgTZkhvaWAGPmzAX6qeHZsf5tBdOlcvuPk9GxMdEyXndqHb90\ - ak84KZnZFIb2ALKMwwSUddu9sSxhlPYsu1NBsnXM+A5SRDpumucVTAcUQHU/dgnM1TS\ - 8s1Kk0aQGTzMSrgwrbaOdoaPnhiAlLjHzvVb107n5mhgDTTM9pvuzY7tH/9OngdvB6B\ - YVPoLGaoEEa+idNuM9OYuZvv8FsljYxkkgty6r/TuBgndv88laSJ4MMohwiMHn3sBEF\ - 4rekOsnYIUarSyJ2vfgWyS6KLcLlMMRdJure4E0XiWYLgeG8VucrMjD4siPTitMzRzG\ - RsxW4odJamUpmSvmI6v7R3acwM7Ua1k/q2q8GT349fvzh9+ebFHdOEtXXXleGjqjZ8v\ - K4N6ai9xgXQukhER4y2LpFTLqBP1tWIZJUaURgeMYN2P6KEg5kpmU1n9vtYyYVG5cSE\ - RRFqDUZeoSAZ0Uaqcp9lisptrLso26RwIoXGwtmz/Ccuoxnj9qads+jNRQ9OFMZEAUv\ - gL5Ylhg==\",\"ut5zEcuF7sGFG+9vSjIyw4SPPVYp3F1NZ2bXWh3VfUv1+qKtVmeiv\ - japYHRxfvLp+OTk9OLi0+WbP09fjwDFNVdS0GVhdSVpzu1zy8zY2RI5BbKKvB0UJXzL\ - mMVMsjm3Y2I0qOZcoDtoLIpkJgyxPJHTqWX5FiQeVLupuTZAdlVxF8BFKZgF7BZUGg3\ - tpu7TUbT4UsWFM++suWoVD3WCU210uWkUmht+jRBJMeHTTDnTqpCW0gKcMTHF2F1O9q\ - 4mH2lUECHkAlQmNEyYNmQ2bYWyZDmNpTBNlrkS1oaJmKmY2J9mJIYK2dyafMhi2hAnq\ - IBKSRXsmMEbAfwak6VH05ivhgneaYRRv695Yu8z2lGuLf9zc4I45BBxQSbkJt2X8HHI\ - Iyn0XTMDNy28rv0OH1a03/1N2m80GunZUEQpTKQwzmawOANjJhAEYXlDKnQU6wbUxtE\ - LOfme4QRmiSD5PgjgHKfkOisrNRaE1ObIo6haFKNcn44s2AgmHJN4i4iUoQbr9/bxAO\ - +asOxmQSOu8qgiNg9/WRMb8suGtMA0QVJbr2SMybA1gGGLCboWUx6FUcKyGPvWcxSmv\ - z9s9ZxHF4ZkIAm6VuKhWBXb/35GinLpnXojyeFcAsacdKnUCJJ8jU3evEFtBof37x+G\ - mhvss3jORVhTrD0rKkOhkLbF+RzOHHNGXHmTo45YijBjJpoNYPQ/YVBlvcXvMDspDOC\ - NiJxNYPk6FG7BkbUOVSYEF9MeaHbtTDnmXGJY8CQhq1uy2Mm6H1W4Lm6k7bPBMaCO/Q\ - DOBLFI1W6oiUxiVD2aDkZ6CnYrIZYmkvO+PW14gKOA2L8fwKUEFDpTjuoYJ9aeKDlnI\ - y3FTdgh7c7oaHR7oA2R7Q/eOgXF5uWExOMcf7/ET4TsB/CURVf5FWSdJzqEfg0puTb0\ - ye5sIbAjz5znx/+G/H58P1vCQnGDwCw08AmctecwlZZ90m7uArgBtmDLJzTsOVfa9GC\ - MEcs0AiffhTmm0ZhUcmECOL0m622Sr6ltQMvkGnNzfJzgvFcsmBkgB8qAUcuhMJIWo2\ - ScRQV8Msa5dYI+Z9qAnjHLf2acZWW31CCbz5lBHdjVHYuYLEMp4p53YARL7M04dUId4\ - oETjhxRkpAXrWc8TTF2iN3AG9c5l9pAwq/oet6sKDc4Q7Q3f2gpztPolK7tExljYPTd\ - 0Jr/gB/bgzCP1xQo3pDvByiyOWzCB7dOVb5lSqNthSPoHx482tvzSvRMXLOEx+c+Hmx\ - 7Hxa9r6xqey3Nc5mJOO/dr499yxTZZ77zoOg0qARLKrM+3Dv0nX66E9JUCRaI7+fdzO\ - BLPuemMnjPErX7Uvas7bOEM31nZGvH+rfL0t42WfrZRYzaNZurKrf+f/tbmxElPPRGf\ - T8nbIFjLaMrNHdwc77Jjx3R1/WUFJ/b3bolD/UZjrNpjz6587LyW7gexbPXRdweimL4\ - iXe78jGeQlRVoPc4vrBkXrg4bQ680FUogQsbtzyxUdYCKAgcE0pQs0wRbuE8jV6h1my\ - KvzMRJxW8QVAX5eosXJg3NtBfQhdsHaOIZsTofkoKT2mblShyduDId8N1rhsJ78DHA6\ - 0ZORT+KJA/YHxsOufTES0z51qnvbaR7a7DGsRlSqJTpqzaF9akYkXEmy5cmaLQZXgvk\ - kKgC5kWFmWBX/vgd+4uxxI1CGlgIdUVmQ90Uc/lHIUJ2m7enCLpiGn3+3Z1w2xv7zDy\ - 66bP2O5B+/2MRzNw2+QiGkg2dLtXMr4Hj/b29nKszFLaYXopIui4OfSgzuouHLkZcp7\ - b/KLl7kJrz9OGkHUqoOU2efwBfeuVAA==\",\"q275OT8QnbYTeYut3YPRS7sY8v+DA\ - NbSl/duq7hXowrGhdYBMa7cmHYP3IIXetPSdpHRtpEfe0Ta3cYQzFMUgw2H42/IhA9F\ - f7fN5f/fGW27mwV1BbtfVbDr12GhcFiaooif8wQvliLqAd5wbbT7PL+KuXIf1Zz+F0p\ - JyBgHk5rmirkiptZBaO+clioUnG6YP9+vzn8GpsHxwI9xX6pUWOXrDC+Xhr2UV0h+Lb\ - V7kTspBL0H5z55bmnpwaUiRbqqoe+XJkHlXtlgjZYae1N344Kwi3Fpp3xUPZ+yCX48m\ - RbQ48l0JyzOxxjHXEx1MaRsqo4cCjvIG62kr8aTaVB8dSl6R+paa4mx6PLoXkvDJzxi\ - TtE7nPW2GuKNXRXstX6iOQzhwihyRBNuULHELt2lHumSIFnUeZi8knUsUl8+zRQU92G\ - VC94zIHk+gitcygmU66vCV+naMKhBtpfCCtj6fH9vwekXbd0RtLE/QiYnNi3p3Bup6K\ - 4sxgaECQfrmTVyxaVIlt+taLn2gZYzoXmMlpN3Wetu48c/cW6/rdSGwl6ZLJphPICxl\ - AkyUb8ovShOMhH5xMg6YZ1uOdjf4nwCHYcXjo6OSoTdmgXjATx1AZlgOmURBraarxI2\ - 7HSpyVlcfiZnNTjrIGDxNWnkOHBn3Yf72j2YsESjNxNW7p9CkynhJ/8eJ0xHPO0TgVM\ - U4R/X8+e2RsqgujMC+g/4URfQg2ph4P11Ea1ab4HCNGERHidJp30vJFOvaeAFOk246b\ - TDtY45SzspeQa5NRmxlBuW8K9o27vNAZ8lF532p3YpG96bycYJj8CfQ6ccC43YqTUPg\ - DgRXCznY5mcCVc6x6XoDqpCnuaDL5bCsJsBaHupbAC4XKbocdJHT9i6yV8bAEd1WgPN\ - p4KZTGFwzZIMP5XfTYoBqfRPCifuA1PTzNYSfdj7uHUWRzccgZlxHfjJaGq6M+oc6dV\ - p60G7+F7dMVIOFlnCxDRjU7Q64o/r+Uv/PfhTmoSLbtMn8Ef3tjnNGo9HtkUP4N5to2\ - 81yvVARSX8M9zrOB2QLlA3pYnr11mScD3raCssuRCs680KJQ7UssYaHtYb/hOXC6niT\ - rvQqO0u/P33N4BFliTbJN3RxsYJkgh3uJjIHYK9nVy7oSUyi2i3MJYEfX8gTEl5d+yC\ - 3SxoZJi/1xvLzKwZsyoDQNRb+1J1SWx0aPtYHzyqfquOjmbMbB9MvVVor1a2D8gDR9r\ - EXFZH1sNN2weWEaea95jXt61qYdxqwru9FuGiHdkc38qDPCR+zlQp4lt+oo7/34N2/7\ - oH/b7//q042GXudEQJB1/DVuQ5XQ8XMEMWJ6g1zMn6I/qKgg4xdYkpbmx9aG7CB3CeC\ - RhFFvWMGejPYdj6HZNEDltgJExtgRRTBuNmgIzFcb7wiph1uhv6K9Kwsb8WJGQpb3er\ - vbU9rvXU5eabmLlPstTRVwWdUHynD3OJN+aZjOyN+p6b2TvFbUb8zuirf8iT7b7M/uF\ - 2BebOwxh7gDcpRqZHElzEUzghr6qDvDB1AyEV5bCh1x7zfLJOexNEDzprkVkyT2c24q\ - jh3fmZdocMb6KEuUsU5kxd6Y1jS+MrUxyO6rZPe8ITHIRh+E6j0qTOgs9oxrb0OuQxs\ - rOT/sHewUGw3/f1PcFnpv5FgCGJeZLwz+E5fsm4Qv2URVdTJTMRX84Usjj4zK5Zu0mF\ - qawZjnaxMiBG5m2dW0t/NabstqpTRRhkJArShVg63a7/HJnTLxlLGqAiRpUsuZjSqP8\ - K7/8FU//fwf6PsTW3eL5fp1RjcHdZjzT5sCPX92hNd4Q//zwU8LNL/A==\",\"2KqfG\ - KOEKdS1mm4b2SNWZMLGt8QUxmgWiMLdp3R9Pn3+AjpPE/aVi2myhOdMG3hBK+32gMF5\ - pk35QsO/4YGf8yDhsGVBwT9SHLZggtYahknCpgGBhs0k31va7Hq2bi2KW03RPX3+4jl\ - P0E9xIXiaoskVDK2dvLa6Exo5RpWNqzWUzhVoIMUbgyLWu6esOzz1/GAzKuyHtMeTac\ - gFN9z67+0BfLj1eZ0q8bDqFebeX85oKrs+VlBFjrBjk/OSMJaH0mqrfOSvTW78CqkfN\ - Sj24leYsxu/Tp2nPm3jM0zNLG+BVSXD1vBkHVv0k8E27n74WI3Dwd9APlwdB+2mx7DO\ - /2+Mz0nbwKfnUp3ZEvcJR6V38oqXcHnjh48/xJ0fZIhF8t+YZ3dXo25hR12xPq4o1sN\ - 1o2ynTsq17nvF0hQVMHsxwmiTGTFyiXyWaAn+wZcGBrYKIc7Dw0QhYXRY0RcDZhrzum\ - SCsOXIW+bICw0X9oWbm9K4SNvPeTFlkcoobgX3WMDackyhF/O+ezEb50o79wcTpvVOm\ - /O2FnwpDZvBxlEeWPFrZtBZZSqLjFQVO8ajIntDimTpTmjJkMopK2d7smu6WtjNhnXK\ - gXBUwQJPnuQaoW50VeNqRbCvbsTBv46OGqPWwn1FCUC92SqsHTxu9zbAR1IpdG4vF/Y\ - 1jCDHV7oc7qYho3u3jm7FV/kSFO9awvOu2pJWGxfaHdVRNwLRm1jTZMxavLIZw9Nka0\ - RQM8Jj/2HzTnc3N1ekdJNWXaB77OACUy7X4i7mO6NJd7OgUSFRLd9/sB6UC0P4zeg+n\ - wqpsDD8bErtvVRXqOrq1ebHbJblifvkkthcJFy4bF4YwuWbZ286+ovuDiDGOEvzF2Nl\ - YVlg7FuOD+Q7KW4N1cQZuCcvz77vqWyaJUl4eH//cbfQfKW5WK1hy41Aa6Sd2dDyRfH\ - Zp+PSaLBeN+H6Yq5TqbHTHcC15PGaZVqZqlGU5mY8FbEtIq/bu+7pnC3bqHcU+cdzKc\ - 270tBxvQbJrDdqeVKYok8ahnSmjZz/jixGRZbMOUZSxS5r6eB6Obz1+/0iScU9KULrf\ - jLFIqw2Vu1mVzpVpGQjhcxghRedjUzora2+t3nZvQ2r6W3lQa+yCjgCo7K8ya4BjlwO\ - tjcUq8GGDXOKaM41Oj5VIOrBkTC0kUlX0OLk33pkGg1kKTCaTmjLn7Hi8RRz560YPmf\ - 2jqeL0o5c4LjvEfnWa85s5Lmv0qjy1BfKajsH7oK8lYPa6QLT4D5X4QnPkd+gNRmvXG\ - uE7ql7uurBzi3fO27C7retXHc6yYzXKVuI/ngyvTM6+dts+JHSYFs3Ec14En9KlbSvb\ - St1Z7WOagphZ7lFEZa8sG8pa3vdqze+V9xQ4xbh2VJCFopGudr2CuGySDjcUH+W216N\ - EYmcVqGmaJ5Opm+ZmVXiE7FciESymJjf3q627AY9neTWnfc+C9P19MagIKfeu4G9vHr\ - jM0ZmAB2FTEvxZABMLMtIqrsmmkqlzoS6XnEHleTOHVa2YNxUFtbxhHXLwpZ/eeiGoa\ - zkwh5kW5DXDDQ+Zzxxv6+Rs8fGksZcMLW0b8Em/MZag+WjJlJtLm5ki1yqF3bgXpOJK\ - RcYkDYYthovmP2LLvveWU7cw6Zyxg1BySo7uP4L1VhqfObV+n9doWPvh+DaYW0U5vgt\ - oBNF2rJ6sgIrJR3P8F6V4TbzN4B2ylOs2u8orgdNTyIIghwhiutvvoPZ9NTATndnVOp\ - 38qLxGw/VYp/97SkcO+StTJKls5BsxK6mZuovZwxqkxme6DClQVUF5EouNzyVqMDY5+\ - vkP++aA3N1Ew==\",\"NDWol+YffjTxRy0l2bBT8SblCvWZKEzJPLJVq8Jzms/z6hkn\ - T1aqZcP8vEJM34lMY1ywVTftygLJKxmTffnqzbPTas/Z5BXX2kUINg88JYqXF0Yxg1M\ - i4fT/vz07/8+ni8vz48vTF/9pgDfM5KoZW7LIy4INBLua7dscjW0b5FFizzQCaeAsrp\ - XaCh23O7b4pFJ0Q6suPIUFN9EMHEyjPFEjtB2+9mC9PU3Ycr09ZVr7VyfrndrINMUaN\ - ihLaCwJZY9/sTtoBgzye6Z4ahT4h4THvpxr0wVkL6HX0gADC1vyydYGBPCXbfVvOGyk\ - y0H0wK20L1W/3tKDylp7IBX45QXtjSGPld+q74zXbqglvzPq9/vZsd2yvf9gRyLsn2W\ - 97CufarG8j3pW1dxZkbDx71kL+ypevmAGF2y52R3nIsYbsrQazjSRzsX0rUx4RHrmpN\ - awMbvRCA80RniC5uzGPkbhX/Hp0qAu366BrcY0M30pT2+iJIvxHKd4k27NjP07Q7WsL\ - 5eEcz3F9oUA600im7sfRtSbH881ZnGwF2ViTeWDK90fPm4m0fXuzgIWUlTnhxeneuO3\ - MoZntKW/I0vMLH8YXXrxl/7tRJ4VLY+z/WGaSGWGC/4V/c8xxHhDIuqeGvSshVygsj9\ - FSeMtwp59Ur/tRxlJDnv2pR8rfwko2LZpq+LVSm0tlo1H623uefff6x350++NG7sFjW\ - eVseXA7Qm1tXcJl6vPHED7OE3b8De0X9JxPS1OazvfNFJx5dB/Xvh+4j7eGS383dyoK\ - +EHD3+pxn1/WbeEmxdzfqa4qN7/+d9qvSkMycG1MYnKr0Dmr3TKKlt4LhXgDZun9ncV\ - N6DZ+JTqFtrVkprQhZhPit+ZsVnh6iCnAz9uItU5d98qq4YVHMEk2FJ2X31z1F2fwuZ\ - QvmSY4UnCtH7Jr5Am6TSmrGLZVpqe/6UBrbgz+o2s9+pKO8PWvdvaG6iYa7KGPpGIr4\ - at7mgDuh+ueG/SM8kE3LudBLm5a2vwa+xZddbr0zfStAJM9Nqz2+aE15LHPzLjrxunr\ - DdVC/G7eUqrMnl71a41u9DMRKcutqMD+3szdJk3jF2r2u0LD8v0/GGy+121Hozu3drN\ - Cnwaj66DItzU6a5G3UY6MA3sb3VWM3HVavrW6uNq9b8BAAD//6qPyUCLXAAA\"]" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:21 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "175" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: content-encoding - value: gzip - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:20.804Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 0420907dbc8d483fb0caefdcb56dc902 - _order: 0 - cache: {} - request: - bodySize: 246 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "246" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 325 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: | - - query Repositories($names: [String!]!, $first: Int!) { - repositories(names: $names, first: $first) { - nodes { - name - id - } - } - } - variables: - first: 1 - names: - - github.com/sourcegraph/cody - queryString: - - name: Repositories - value: null - url: https://demo.sourcegraph.com/.api/graphql?Repositories - response: - bodySize: 180 - content: - encoding: base64 - mimeType: application/json - size: 180 - text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqSi3IL84syS/KTC0G8fPyU0CM6GqlvMTcVCUrpfTMk\ - ozSJL3k/Fz94vzSouTU9KLEggz95PyUSiUdpcwUJSul0Nyw8iRjv4IUd8vK1JD8Kr8q\ - TyPfQFtbpdrY2tpaAAAAAP//AwDQIawwbAAAAA==\"]" - textDecoded: - data: - repositories: - nodes: - - id: UmVwb3NpdG9yeTozNzI2MQ== - name: github.com/sourcegraph/cody - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:20 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "176" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:20.028Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: ad724b1d99cd03b5ca781ef8a218294c - _order: 0 - cache: {} - request: - bodySize: 141 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "141" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 330 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query SiteGraphQLFields { - __type(name: "Site") { - fields { - name - } - } - } - variables: {} - queryString: - - name: SiteGraphQLFields - value: null - url: https://demo.sourcegraph.com/.api/graphql?SiteGraphQLFields - response: - bodySize: 596 - content: - encoding: base64 - mimeType: application/json - size: 596 - text: "[\"H4sIAAAAAAAAA3ySwY7bMAxE/8XnfkFuCzcuFkiBNt5sD0WxYKSJQ6wsuSKVxAjy74WSb\ - hEZTm82Z0yTb3iuLClVi3P19qbjgPy0Yzgr1eLnufLUo1pUbKvLp39vwornz/cVE/yO\ - uxRJOfh7wZFCtIUq+06KJn9rNYkhizlps14VPyG/hgtkW9bCf2AcEWvyT7Znz6KI9zI\ - ZA5GX8A5fTEBJ999iOLBFLAScFNGTezImJK+Ftk3s7CuiTBYdYrDJ6IySBkuKeg/zfl\ - /2gJU1hiCsIY71I4Ifw7SIBzaQJoa+YVcAIOfCcWlZlxPzD9b91LyLwEYQZXkygIUtO\ - yGWC+9J6mDx7BXOcQdvJll5K8ue2L0i8o7NdYFrQWb4tGkrJvIw3TIJdWiVlEXZlDF5\ - cuO0mGSSWR985si+e9AlI8qH83GLGVfZcugiWaxBlj1keiphc9OXnrauhDYgZqB16Ae\ - HvJl8T0Fp1mLxP1vE78QRcmMJe+XYhPzdeO/jnMk4M4oJdlytvj68pqzfxAakKUKm6h\ - dSHGlck2LFPWvGmWSmh+KkDTu9BvHrcrn8AQAA//8DAOln405LBAAA\"]" - textDecoded: - data: - __type: - fields: - - name: id - - name: siteID - - name: configuration - - name: latestSettings - - name: settingsCascade - - name: settingsURL - - name: canReloadSite - - name: viewerCanAdminister - - name: accessTokens - - name: authProviders - - name: externalAccounts - - name: buildVersion - - name: productVersion - - name: updateCheck - - name: needsRepositoryConfiguration - - name: externalServicesFromFile - - name: allowEditExternalServicesWithFile - - name: freeUsersExceeded - - name: alerts - - name: hasCodeIntelligence - - name: sendsEmailVerificationEmails - - name: productSubscription - - name: usageStatistics - - name: analytics - - name: users - - name: monitoringStatistics - - name: allowSiteSettingsEdits - - name: upgradeReadiness - - name: autoUpgradeEnabled - - name: perUserCompletionsQuota - - name: perUserCodeCompletionsQuota - - name: requiresVerifiedEmailForCody - - name: isCodyEnabled - - name: codyLLMConfiguration - - name: codyConfigFeatures - - name: codyGatewayRateLimitStatus - - name: codyContextFilters - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1355 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.316Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: e2304ad643386d8500a41a21d240755f - _order: 0 - cache: {} - request: - bodySize: 100 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "100" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 331 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query SiteHasCodyEnabled { - site { - isCodyEnabled - } - } - variables: {} - queryString: - - name: SiteHasCodyEnabled - value: null - url: https://demo.sourcegraph.com/.api/graphql?SiteHasCodyEnabled - response: - bodySize: 40 - content: - mimeType: application/json - size: 40 - text: "{\"data\":{\"site\":{\"isCodyEnabled\":true}}}" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: content-length - value: "40" - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - headersSize: 1323 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:19.494Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 2f61c4440220a7c49cbf07315e5225db - _order: 0 - cache: {} - request: - bodySize: 101 - cookies: [] - headers: - - _fromType: array - name: authorization - value: token - REDACTED_b20717265e7ab1d132874d8ff0be053ab9c1dacccec8dce0bbba76888b6a0a69 - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "101" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: demo.sourcegraph.com - headersSize: 331 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query SiteProductVersion { - site { - productVersion - } - } - variables: {} - queryString: - - name: SiteProductVersion - value: null - url: https://demo.sourcegraph.com/.api/graphql?SiteProductVersion - response: - bodySize: 44 - content: - mimeType: application/json - size: 44 - text: "{\"data\":{\"site\":{\"productVersion\":\"5.6.0\"}}}" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:19 GMT - - name: content-type - value: application/json - - name: content-length - value: "44" - - name: connection - value: keep-alive - - name: retry-after - value: "177" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With, - Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - headersSize: 1323 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:18.984Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 09b59ac55ce3c40d6f9ab8c79846a2c6 - _order: 0 - cache: {} - request: - bodySize: 144 - cookies: [] - headers: - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "144" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: sourcegraph.com - headersSize: 244 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query ContextFilters { - site { - codyContextFilters(version: V1) { - raw - } - } - } - variables: {} - queryString: - - name: ContextFilters - value: null - url: https://sourcegraph.com/.api/graphql?ContextFilters - response: - bodySize: 104 - content: - encoding: base64 - mimeType: application/json - size: 104 - text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdHJ+SmVzvl5JakVJW6ZOSWpRcUg0aLEciWrv\ - NKcnNra2loAAAAA//8DADYuyGU1AAAA\"]" - textDecoded: - data: - site: - codyContextFilters: - raw: null - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:18 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "178" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Cookie,Accept-Encoding,Authorization,Cookie, Authorization, - X-Requested-With,Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1440 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:18.537Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - - _id: 203c1896021c3a09dfe619120ea1b725 - _order: 0 - cache: {} - request: - bodySize: 101 - cookies: [] - headers: - - _fromType: array - name: content-type - value: application/json; charset=utf-8 - - _fromType: array - name: user-agent - value: JetBrains / 6.0-localbuild - - _fromType: array - name: accept - value: "*/*" - - _fromType: array - name: content-length - value: "101" - - _fromType: array - name: accept-encoding - value: gzip,deflate - - name: host - value: sourcegraph.com - headersSize: 248 - httpVersion: HTTP/1.1 - method: POST - postData: - mimeType: application/json; charset=utf-8 - params: [] - textJSON: - query: |- - - query SiteProductVersion { - site { - productVersion - } - } - variables: {} - queryString: - - name: SiteProductVersion - value: null - url: https://sourcegraph.com/.api/graphql?SiteProductVersion - response: - bodySize: 139 - content: - encoding: base64 - mimeType: application/json - size: 139 - text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdEFRfkppcklYalFxZn5eUpWSkYWZhamxvFGB\ - kYmugYWugaW8aZ6ZropBkkWFqbGxkkmpmZKtbW1AAAAAP//\",\"AwDAvJF7SQAAAA==\ - \"]" - cookies: [] - headers: - - name: date - value: Fri, 09 Aug 2024 12:48:18 GMT - - name: content-type - value: application/json - - name: transfer-encoding - value: chunked - - name: connection - value: keep-alive - - name: retry-after - value: "178" - - name: access-control-allow-credentials - value: "true" - - name: access-control-allow-origin - value: "" - - name: cache-control - value: no-cache, max-age=0 - - name: vary - value: Cookie,Accept-Encoding,Authorization,Cookie, Authorization, - X-Requested-With,Cookie - - name: x-content-type-options - value: nosniff - - name: x-frame-options - value: DENY - - name: x-xss-protection - value: 1; mode=block - - name: strict-transport-security - value: max-age=31536000; includeSubDomains; preload - - name: content-encoding - value: gzip - headersSize: 1440 - httpVersion: HTTP/1.1 - redirectURL: "" - status: 200 - statusText: OK - startedDateTime: 2024-08-09T12:48:18.242Z - time: 0 - timings: - blocked: -1 - connect: -1 - dns: -1 - receive: 0 - send: 0 - ssl: -1 - wait: 0 - pages: [] - version: "1.2" diff --git a/src/integrationTest/resources/recordings/documentCode_2994921345/recording.har.yaml b/src/integrationTest/resources/recordings/integration-test_2927926756/recording.har.yaml similarity index 90% rename from src/integrationTest/resources/recordings/documentCode_2994921345/recording.har.yaml rename to src/integrationTest/resources/recordings/integration-test_2927926756/recording.har.yaml index 6dacb4e2bf..f43e01b968 100644 --- a/src/integrationTest/resources/recordings/documentCode_2994921345/recording.har.yaml +++ b/src/integrationTest/resources/recordings/integration-test_2927926756/recording.har.yaml @@ -1,5 +1,5 @@ log: - _recordingName: documentCode + _recordingName: integration-test creator: comment: persister:fs name: Polly.JS @@ -36,24 +36,26 @@ log: queryString: [] url: https://sourcegraph.com/.api/client-config response: - bodySize: 198 + bodySize: 188 content: encoding: base64 mimeType: text/plain; charset=utf-8 - size: 198 - text: "[\"H4sIAAAA\",\"AAAAA2zMsQoCMRCE4T5PsVztE9hJsLjOznrPrBjI7koyQeW4d7dRBEn9\ - z3xrICKaLp5eR+OlSJr2hNpl9wk3xjBwh0fXexHI+NkbXKOrsqU2NoCal47s9utXLu0\ - 7aMoV0Q3yxDlb8sfQUU9S2uE0/ylhC28AAAD//w==\",\"AwAr87D14AAAAA==\"]" + size: 188 + text: "[\"H4sIAAAAAAAAA2zMsQoCMRCE4T5PsVztE9hJsLjOznrPrBjI7koyQeW4d7dRBEn9z3xrI\ + CKaLp5eR+OlSJr2hNpl9wk3xjBwh0fXexHI+NkbXKOrsqU2NoCal47s9utXLu07aMoV\ + 0Q3yxDlb8sfQUU9S2uE0/ylhC28AAAD//wMAK/Ow9eAAAAA=\"]" cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:14 GMT + value: Mon, 05 Aug 2024 10:11:46 GMT - name: content-type value: text/plain; charset=utf-8 - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "403" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -73,12 +75,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1342 + headersSize: 1449 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:14.596Z + startedDateTime: 2024-08-05T10:11:45.841Z time: 0 timings: blocked: -1 @@ -105,7 +107,7 @@ log: - name: user-agent value: JetBrains / 6.0-localbuild - name: traceparent - value: 00-5fb0e28015d22fc1aee471c93c766b0e-c3b43e35617cba56-01 + value: 00-0ec7441b05369c730163041565b0a6c3-ec2f5176d73290f6-01 - name: connection value: keep-alive - name: host @@ -204,14 +206,14 @@ log: value: 6.0-localbuild url: https://sourcegraph.com/.api/completions/stream?api-version=1&client-name=jetbrains&client-version=6.0-localbuild response: - bodySize: 1168 + bodySize: 1837 content: mimeType: text/event-stream - size: 1168 + size: 1837 text: >+ event: completion - data: {"completion":"/**\n * Imports the necessary Java utility classes, including ArrayList and List.\n */","stopReason":"stop_sequence"} + data: {"completion":"/**\n * Imports the necessary Java utility classes, including {@link java.util.List} and {@link java.util.ArrayList}.\n */","stopReason":"stop_sequence"} event: done @@ -221,7 +223,7 @@ log: cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:17 GMT + value: Mon, 05 Aug 2024 10:11:48 GMT - name: content-type value: text/event-stream - name: transfer-encoding @@ -229,7 +231,7 @@ log: - name: connection value: keep-alive - name: retry-after - value: "600" + value: "401" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -252,7 +254,7 @@ log: redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:16.156Z + startedDateTime: 2024-08-05T10:11:47.322Z time: 0 timings: blocked: -1 @@ -327,13 +329,15 @@ log: cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:15 GMT + value: Mon, 05 Aug 2024 10:11:46 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "403" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -353,12 +357,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:14.978Z + startedDateTime: 2024-08-05T10:11:46.212Z time: 0 timings: blocked: -1 @@ -423,25 +427,37 @@ log: value: null url: https://sourcegraph.com/.api/graphql?CurrentSiteCodyLlmConfiguration response: - bodySize: 251 + bodySize: 248 content: encoding: base64 mimeType: application/json - size: 251 - text: "[\"H4sIAAAAAAAAA3zOwQqC\",\"QBAG4HeZs+K0BqFXr3rrBYbdMRdtJ3ZXKmTfPSyiSOg0\ - 8PP/H7OAoUhQLxBs5PVqMfe27RpxvT3NnqIV98wHip0YnqAGcnHwcrG60BPNhvMyD+I\ - cx1yh2qNSFWSfQUe3o4zsAtQ7hYgZ9BRi898byI7ziyvxAD+bLanlfJl4ffaN9tbzVf\ - wYihDJazHsYdP7gipETCmlBwAAAP//AwBQeP+1EwEAAA==\"]" + size: 248 + text: "[\"H4sIAAAAAAAAA3zOwQqCQBAG4HeZs+K0BqFXr3rrBYbdMRdtJ3ZXKmTfPSyiSOg08PP/H\ + 7OAoUhQLxBs5PVqMfe27RpxvT3NnqIV98wHip0YnqAGcnHwcrG60BPNhvMyD+Icx1yh\ + 2qNSFWSfQUe3o4zsAtQ7hYgZ9BRi898byI7ziyvxAD+bLanlfJl4ffaN9tbzVfwYihD\ + JazHsYdP7gipETCmlBwAAAP//AwBQeP+1EwEAAA==\"]" + textDecoded: + data: + site: + codyLLMConfiguration: + chatModel: anthropic/claude-3-sonnet-20240229 + chatModelMaxTokens: 12000 + completionModel: fireworks/starcoder + completionModelMaxTokens: 9000 + fastChatModel: anthropic/claude-3-haiku-20240307 + fastChatModelMaxTokens: 12000 cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:14 GMT + value: Mon, 05 Aug 2024 10:11:45 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "404" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -461,12 +477,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:13.684Z + startedDateTime: 2024-08-05T10:11:44.993Z time: 0 timings: blocked: -1 @@ -541,13 +557,15 @@ log: cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:14 GMT + value: Mon, 05 Aug 2024 10:11:45 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "404" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -567,12 +585,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:13.720Z + startedDateTime: 2024-08-05T10:11:45.025Z time: 0 timings: blocked: -1 @@ -632,28 +650,30 @@ log: value: null url: https://sourcegraph.com/.api/graphql?CurrentSiteCodyLlmProvider response: - bodySize: 128 + bodySize: 124 content: encoding: base64 mimeType: application/json - size: 128 + size: 124 text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdHJ+SmVPj6+zvl5aZnppUWJJZn5eSDxgqL8s\ - syU1CIlK6Xi/NKi5NT0osSCDKXa2tpaAAAAAP//AwAfFAXARQAAAA==\"]" + syU1CIlK6W0zKLU8vyi7GKl2traWgAAAAD//wMAf38NDUMAAAA=\"]" textDecoded: data: site: codyLLMConfiguration: - provider: sourcegraph + provider: fireworks cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:13 GMT + value: Mon, 05 Aug 2024 10:11:45 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "404" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -673,12 +693,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:13.703Z + startedDateTime: 2024-08-05T10:11:45.009Z time: 0 timings: blocked: -1 @@ -775,13 +795,15 @@ log: cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:14 GMT + value: Mon, 05 Aug 2024 10:11:45 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "404" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -801,12 +823,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:13.738Z + startedDateTime: 2024-08-05T10:11:45.041Z time: 0 timings: blocked: -1 @@ -891,13 +913,15 @@ log: cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:14 GMT + value: Mon, 05 Aug 2024 10:11:45 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "403" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -917,12 +941,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:14.014Z + startedDateTime: 2024-08-05T10:11:45.289Z time: 0 timings: blocked: -1 @@ -985,19 +1009,21 @@ log: encoding: base64 mimeType: application/json size: 139 - text: "[\"H4sIAAAAAAAAA6pWSkks\",\"SVSyqlYqzixJBdEFRfkppcklYalFxZn5eUpWSkYWZham\ - xvFGBkYmugYWugaW8aZ6ZropBkkWFqbGxkkmpmZKtbW1AAAAAP//AwDAvJF7SQAAAA==\ + text: "[\"H4sIAAAAAAAAA6pWSkksSVSyqlYqzixJBdEFRfkppcklYalFxZn5eUpWSkYWphamxvFGB\ + kYmugYWugam8aZ6prqpxsZGhkYmZpYWlqlKtbW1AAAAAP//\",\"AwDZmR/0SQAAAA==\ \"]" cookies: [] headers: - name: date - value: Fri, 09 Aug 2024 12:41:14 GMT + value: Mon, 05 Aug 2024 10:11:45 GMT - name: content-type value: application/json - name: transfer-encoding value: chunked - name: connection value: keep-alive + - name: retry-after + value: "404" - name: access-control-allow-credentials value: "true" - name: access-control-allow-origin @@ -1017,12 +1043,12 @@ log: value: max-age=31536000; includeSubDomains; preload - name: content-encoding value: gzip - headersSize: 1333 + headersSize: 1440 httpVersion: HTTP/1.1 redirectURL: "" status: 200 statusText: OK - startedDateTime: 2024-08-09T12:41:13.645Z + startedDateTime: 2024-08-05T10:11:44.958Z time: 0 timings: blocked: -1 diff --git a/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgent.kt b/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgent.kt index 0e60ff4ead..2ed832d464 100644 --- a/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgent.kt +++ b/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgent.kt @@ -98,12 +98,9 @@ private constructor( private fun shouldSpawnDebuggableAgent() = System.getenv("CODY_AGENT_DEBUG_INSPECT") == "true" - fun create( - project: Project, - additionalEnvs: Map - ): CompletableFuture { + fun create(project: Project): CompletableFuture { try { - val conn = startAgentProcess(additionalEnvs) + val conn = startAgentProcess() val client = CodyAgentClient() client.onSetConfigFeatures = project.service() val launcher = startAgentLauncher(conn, client) @@ -145,7 +142,7 @@ private constructor( } } - private fun startAgentProcess(additionalEnvs: Map): AgentConnection { + private fun startAgentProcess(): AgentConnection { if (ConfigUtil.shouldConnectToDebugAgent()) { return connectToDebugAgent() } @@ -207,9 +204,6 @@ private constructor( } } - // Add optional environment variables - additionalEnvs.forEach { (key, value) -> processBuilder.environment()[key] = value } - logger.info("starting Cody agent ${command.joinToString(" ")}") logger.info( "Cody agent proxyUrl ${proxyUrl} PROXY_TYPE_IS_SOCKS ${proxy.PROXY_TYPE_IS_SOCKS}") diff --git a/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentServer.kt b/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentServer.kt index de7a08b684..39f8c69bde 100644 --- a/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentServer.kt +++ b/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentServer.kt @@ -19,6 +19,7 @@ import com.sourcegraph.cody.agent.protocol.IgnorePolicySpec import com.sourcegraph.cody.agent.protocol.IgnoreTestParams import com.sourcegraph.cody.agent.protocol.IgnoreTestResponse import com.sourcegraph.cody.agent.protocol.InlineEditParams +import com.sourcegraph.cody.agent.protocol.NetworkRequest import com.sourcegraph.cody.agent.protocol.ProtocolTextDocument import com.sourcegraph.cody.agent.protocol.RemoteRepoHasParams import com.sourcegraph.cody.agent.protocol.RemoteRepoHasResponse @@ -41,7 +42,6 @@ import com.sourcegraph.cody.agent.protocol_generated.Graphql_GetRepoIdsParams import com.sourcegraph.cody.agent.protocol_generated.Graphql_GetRepoIdsResult import com.sourcegraph.cody.agent.protocol_generated.Null import com.sourcegraph.cody.agent.protocol_generated.ServerInfo -import com.sourcegraph.cody.agent.protocol_generated.Testing_RequestErrorsResult import com.sourcegraph.cody.chat.ConnectionId import java.util.concurrent.CompletableFuture import org.eclipse.lsp4j.jsonrpc.services.JsonNotification @@ -83,9 +83,6 @@ interface _SubsetGeneratedCodyAgentServer { @JsonRequest("extensionConfiguration/getSettingsSchema") fun extensionConfiguration_getSettingsSchema(params: Null?): CompletableFuture - @JsonRequest("testing/requestErrors") - fun testing_requestErrors(params: Null?): CompletableFuture - // // ============= // // Notifications // // ============= @@ -205,4 +202,7 @@ interface _LegacyAgentServer { @JsonRequest("testing/ignore/overridePolicy") fun testingIgnoreOverridePolicy(params: IgnorePolicySpec?): CompletableFuture + + @JsonRequest("testing/requestErrors") + fun testingRequestErrors(): CompletableFuture> } diff --git a/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentService.kt b/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentService.kt index 09b4d50b3a..2315dffe25 100644 --- a/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentService.kt +++ b/src/main/kotlin/com/sourcegraph/cody/agent/CodyAgentService.kt @@ -159,15 +159,11 @@ class CodyAgentService(private val project: Project) : Disposable { synchronized(startupActions) { startupActions.add(action) } } - fun startAgent( - project: Project, - secondsTimeout: Long = 45, - additionalEnvs: Map = emptyMap() - ): CompletableFuture { + fun startAgent(project: Project, secondsTimeout: Long = 45): CompletableFuture { ApplicationManager.getApplication().executeOnPooledThread { try { val future = - CodyAgent.create(project, additionalEnvs).exceptionally { err -> + CodyAgent.create(project).exceptionally { err -> val msg = "Creating agent unsuccessful: ${err.localizedMessage}" logger.error(msg) throw (CodyAgentException(msg)) diff --git a/src/main/kotlin/com/sourcegraph/cody/agent/protocol/NetworkRequest.kt b/src/main/kotlin/com/sourcegraph/cody/agent/protocol/NetworkRequest.kt new file mode 100644 index 0000000000..5c287b6633 --- /dev/null +++ b/src/main/kotlin/com/sourcegraph/cody/agent/protocol/NetworkRequest.kt @@ -0,0 +1,3 @@ +package com.sourcegraph.cody.agent.protocol + +data class NetworkRequest(val url: String?, val body: String?, val error: String?) diff --git a/src/main/kotlin/com/sourcegraph/cody/chat/AgentChatSession.kt b/src/main/kotlin/com/sourcegraph/cody/chat/AgentChatSession.kt index 26c493e436..e4a17de2ab 100644 --- a/src/main/kotlin/com/sourcegraph/cody/chat/AgentChatSession.kt +++ b/src/main/kotlin/com/sourcegraph/cody/chat/AgentChatSession.kt @@ -57,7 +57,7 @@ private constructor( private val chatPanel: ChatPanel = ChatPanel(project, chatSession = this, chatModelProviderFromState) private val cancellationToken = AtomicReference(CancellationToken()) - val messages = mutableListOf() + private val messages = mutableListOf() init { cancellationToken.get().dispose() diff --git a/src/main/kotlin/com/sourcegraph/cody/chat/ui/BlinkingCursorComponent.kt b/src/main/kotlin/com/sourcegraph/cody/chat/ui/BlinkingCursorComponent.kt index 06ab4617c9..b398724a1a 100644 --- a/src/main/kotlin/com/sourcegraph/cody/chat/ui/BlinkingCursorComponent.kt +++ b/src/main/kotlin/com/sourcegraph/cody/chat/ui/BlinkingCursorComponent.kt @@ -1,6 +1,5 @@ package com.sourcegraph.cody.chat.ui -import com.intellij.openapi.Disposable import com.intellij.util.ui.UIUtil import java.awt.Dimension import java.awt.Font @@ -8,7 +7,7 @@ import java.awt.Graphics import javax.swing.JPanel import javax.swing.Timer -class BlinkingCursorComponent : JPanel(), Disposable { +class BlinkingCursorComponent private constructor() : JPanel() { private var showCursor = true private val timer: Timer = @@ -35,7 +34,7 @@ class BlinkingCursorComponent : JPanel(), Disposable { return Dimension(30, 30) } - override fun dispose() { - timer.stop() + companion object { + var instance = BlinkingCursorComponent() } } diff --git a/src/main/kotlin/com/sourcegraph/cody/chat/ui/ChatPanel.kt b/src/main/kotlin/com/sourcegraph/cody/chat/ui/ChatPanel.kt index add6a3b4a9..5b97c4598d 100644 --- a/src/main/kotlin/com/sourcegraph/cody/chat/ui/ChatPanel.kt +++ b/src/main/kotlin/com/sourcegraph/cody/chat/ui/ChatPanel.kt @@ -41,7 +41,7 @@ class ChatPanel( private val messagesPanel = MessagesPanel(project, chatSession) private val chatPanel = ChatScrollPane(messagesPanel) - val contextView: EnhancedContextPanel = EnhancedContextPanel.create(project, chatSession) + internal val contextView: EnhancedContextPanel = EnhancedContextPanel.create(project, chatSession) private val stopGeneratingButton = object : JButton("Stop generating", IconUtil.desaturate(AllIcons.Actions.Suspend)) { diff --git a/src/main/kotlin/com/sourcegraph/cody/chat/ui/MessagesPanel.kt b/src/main/kotlin/com/sourcegraph/cody/chat/ui/MessagesPanel.kt index 9092bfd5b9..769e7fe8ce 100644 --- a/src/main/kotlin/com/sourcegraph/cody/chat/ui/MessagesPanel.kt +++ b/src/main/kotlin/com/sourcegraph/cody/chat/ui/MessagesPanel.kt @@ -4,7 +4,6 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.project.Project import com.intellij.openapi.ui.VerticalFlowLayout -import com.intellij.openapi.util.Disposer import com.intellij.util.concurrency.annotations.RequiresEdt import com.sourcegraph.cody.agent.protocol.ChatMessage import com.sourcegraph.cody.agent.protocol.Speaker @@ -46,7 +45,7 @@ class MessagesPanel(private val project: Project, private val chatSession: ChatS } if (message.speaker == Speaker.ASSISTANT && message.actualMessage().isBlank()) { - add(BlinkingCursorComponent()) + add(BlinkingCursorComponent.instance) } revalidate() @@ -55,12 +54,7 @@ class MessagesPanel(private val project: Project, private val chatSession: ChatS @RequiresEdt fun removeBlinkingCursor() { - components - .firstNotNullOfOrNull { it as? BlinkingCursorComponent } - ?.let { - Disposer.dispose(it) - remove(it) - } + components.find { it is BlinkingCursorComponent }?.let { remove(it) } } fun registerCancellationToken(cancellationToken: CancellationToken) { diff --git a/src/main/kotlin/com/sourcegraph/cody/context/EnterpriseEnhancedContextStateController.kt b/src/main/kotlin/com/sourcegraph/cody/context/EnterpriseEnhancedContextStateController.kt index 7a0e974b50..53148c51a8 100644 --- a/src/main/kotlin/com/sourcegraph/cody/context/EnterpriseEnhancedContextStateController.kt +++ b/src/main/kotlin/com/sourcegraph/cody/context/EnterpriseEnhancedContextStateController.kt @@ -342,6 +342,4 @@ class EnterpriseEnhancedContextStateController( fun requestUIUpdate() { ApplicationManager.getApplication().executeOnPooledThread(this::updateUI) } - - fun getConfiguredState() = model_.configured } diff --git a/src/main/kotlin/com/sourcegraph/cody/context/ui/EnhancedContextPanel.kt b/src/main/kotlin/com/sourcegraph/cody/context/ui/EnhancedContextPanel.kt index e77e35143e..3421cfc474 100644 --- a/src/main/kotlin/com/sourcegraph/cody/context/ui/EnhancedContextPanel.kt +++ b/src/main/kotlin/com/sourcegraph/cody/context/ui/EnhancedContextPanel.kt @@ -205,7 +205,7 @@ class EnterpriseEnhancedContextPanel(project: Project, chatSession: ChatSession) private const val ENTER_MAP_KEY = "enter" } - val controller = + private var controller = EnterpriseEnhancedContextStateController( project, object : ChatEnhancedContextStateProvider {