Skip to content

Commit ae23241

Browse files
fix(codegen): Adds special cases for AuthStatus to re-enable codegen (#5854)
Adds a ProtocolAuthStatus type to get around issues of using a boolean as a discriminator. Also refactors the code generation into separate classes for each language type and leaves all SCIP logic in Codegen. ## Test plan Regenerated all three language types and verified that code changes were just due to updates in the underlying types since disabling.
1 parent 8e8756f commit ae23241

27 files changed

+1518
-910
lines changed

.github/workflows/agent-bindings.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Please post in #team-cody-clients if you need help getting this CI check to pass.
2+
# Worst-case: feel free to disable this workflow here https://github.com/sourcegraph/cody/actions/workflows/agent-bindings.yml
3+
name: agent-bindings
4+
on:
5+
6+
pull_request:
7+
paths:
8+
- '**.ts'
9+
- '**.tsx'
10+
- '**.js'
11+
12+
jobs:
13+
kotlin:
14+
if: github.repository == 'sourcegraph/cody'
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
- uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # SECURITY: pin third-party action hashes
19+
id: pnpm-install
20+
with:
21+
version: 8.6.7
22+
run_install: false
23+
- name: Get pnpm store directory
24+
id: pnpm-cache
25+
shell: bash
26+
run: |
27+
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
28+
- uses: actions/cache@v3
29+
name: Setup pnpm cache
30+
with:
31+
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
32+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
33+
restore-keys: |
34+
${{ runner.os }}-pnpm-store-
35+
- run: pnpm install --frozen-lockfile
36+
- run: pnpm generate-agent-kotlin-bindings
37+
- run: ./agent/scripts/error-if-diff.sh
38+
- run: ./agent/scripts/compile-bindings-if-diff.sh

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/CodyAgentServer.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,12 @@ interface CodyAgentServer {
120120
fun testing_autocomplete_awaitPendingVisibilityTimeout(params: Null?): CompletableFuture<CompletionItemID?>
121121
@JsonRequest("testing/autocomplete/setCompletionVisibilityDelay")
122122
fun testing_autocomplete_setCompletionVisibilityDelay(params: Testing_Autocomplete_SetCompletionVisibilityDelayParams): CompletableFuture<Null?>
123+
@JsonRequest("testing/autocomplete/providerConfig")
124+
fun testing_autocomplete_providerConfig(params: Null?): CompletableFuture<Testing_Autocomplete_ProviderConfigResult>
123125
@JsonRequest("extensionConfiguration/change")
124-
fun extensionConfiguration_change(params: ExtensionConfiguration): CompletableFuture<AuthStatus?>
126+
fun extensionConfiguration_change(params: ExtensionConfiguration): CompletableFuture<ProtocolAuthStatus?>
125127
@JsonRequest("extensionConfiguration/status")
126-
fun extensionConfiguration_status(params: Null?): CompletableFuture<AuthStatus?>
128+
fun extensionConfiguration_status(params: Null?): CompletableFuture<ProtocolAuthStatus?>
127129
@JsonRequest("extensionConfiguration/getSettingsSchema")
128130
fun extensionConfiguration_getSettingsSchema(params: Null?): CompletableFuture<String>
129131
@JsonRequest("textDocument/change")

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/CodyLLMSiteConfiguration.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/Constants.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ object Constants {
1616
const val agentic = "agentic"
1717
const val ask = "ask"
1818
const val assistant = "assistant"
19+
const val authenticated = "authenticated"
1920
const val autocomplete = "autocomplete"
2021
const val balanced = "balanced"
2122
const val byok = "byok"
@@ -41,7 +42,6 @@ object Constants {
4142
const val function = "function"
4243
const val gateway = "gateway"
4344
const val history = "history"
44-
const val `https-example-com` = "https://example.com"
4545
const val human = "human"
4646
const val ignore = "ignore"
4747
const val indentation = "indentation"
@@ -84,6 +84,7 @@ object Constants {
8484
const val terminal = "terminal"
8585
const val tree = "tree"
8686
const val `tree-sitter` = "tree-sitter"
87+
const val unauthenticated = "unauthenticated"
8788
const val unified = "unified"
8889
const val use = "use"
8990
const val user = "user"
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
@file:Suppress("FunctionName", "ClassName", "unused", "EnumEntryName", "UnusedImport")
22
package com.sourcegraph.cody.agent.protocol_generated;
33

4-
data class Chat_RestoreParams(
5-
val modelID: String? = null,
6-
val messages: List<SerializedChatMessage>,
7-
val chatID: String,
4+
data class OrganizationsParams(
5+
val name: String,
6+
val id: String,
87
)
98

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/AuthStatus.kt renamed to agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/ProtocolAuthStatus.kt

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,23 @@ import com.google.gson.JsonDeserializer;
88
import com.google.gson.JsonElement;
99
import java.lang.reflect.Type;
1010

11-
sealed class AuthStatus {
11+
sealed class ProtocolAuthStatus {
1212
companion object {
13-
val deserializer: JsonDeserializer<AuthStatus> =
13+
val deserializer: JsonDeserializer<ProtocolAuthStatus> =
1414
JsonDeserializer { element: JsonElement, _: Type, context: JsonDeserializationContext ->
15-
if (element.getAsJsonObject().get("username") == null) {
16-
context.deserialize<UnauthenticatedAuthStatus>(element, UnauthenticatedAuthStatus::class.java)
17-
} else {
18-
context.deserialize<AuthenticatedAuthStatus>(element, AuthenticatedAuthStatus::class.java)
19-
}
15+
when (element.getAsJsonObject().get("status").getAsString()) {
16+
"authenticated" -> context.deserialize<ProtocolAuthenticatedAuthStatus>(element, ProtocolAuthenticatedAuthStatus::class.java)
17+
"unauthenticated" -> context.deserialize<ProtocolUnauthenticatedAuthStatus>(element, ProtocolUnauthenticatedAuthStatus::class.java)
18+
else -> throw Exception("Unknown discriminator ${element}")
19+
}
2020
}
2121
}
2222
}
2323

24-
data class UnauthenticatedAuthStatus(
25-
val endpoint: String,
24+
data class ProtocolAuthenticatedAuthStatus(
25+
val status: StatusEnum, // Oneof: authenticated
2626
val authenticated: Boolean,
27-
val showNetworkError: Boolean? = null,
28-
val showInvalidAccessTokenError: Boolean? = null,
29-
val pendingValidation: Boolean,
30-
) : AuthStatus() {
31-
}
32-
33-
data class AuthenticatedAuthStatus(
3427
val endpoint: String,
35-
val authenticated: Boolean,
3628
val username: String,
3729
val isFireworksTracingEnabled: Boolean? = null,
3830
val hasVerifiedEmail: Boolean? = null,
@@ -41,6 +33,25 @@ data class AuthenticatedAuthStatus(
4133
val displayName: String? = null,
4234
val avatarURL: String? = null,
4335
val pendingValidation: Boolean,
44-
) : AuthStatus() {
36+
val organizations: List<OrganizationsParams>? = null,
37+
) : ProtocolAuthStatus() {
38+
39+
enum class StatusEnum {
40+
@SerializedName("authenticated") Authenticated,
41+
}
42+
}
43+
44+
data class ProtocolUnauthenticatedAuthStatus(
45+
val status: StatusEnum, // Oneof: unauthenticated
46+
val authenticated: Boolean,
47+
val endpoint: String,
48+
val showNetworkError: Boolean? = null,
49+
val showInvalidAccessTokenError: Boolean? = null,
50+
val pendingValidation: Boolean,
51+
) : ProtocolAuthStatus() {
52+
53+
enum class StatusEnum {
54+
@SerializedName("unauthenticated") Unauthenticated,
55+
}
4556
}
4657

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/ProtocolTypeAdapters.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package com.sourcegraph.cody.agent.protocol_generated;
33

44
object ProtocolTypeAdapters {
55
fun register(gson: com.google.gson.GsonBuilder) {
6-
gson.registerTypeAdapter(AuthStatus::class.java, AuthStatus.deserializer)
76
gson.registerTypeAdapter(ContextItem::class.java, ContextItem.deserializer)
87
gson.registerTypeAdapter(CustomCommandResult::class.java, CustomCommandResult.deserializer)
8+
gson.registerTypeAdapter(ProtocolAuthStatus::class.java, ProtocolAuthStatus.deserializer)
99
gson.registerTypeAdapter(TextEdit::class.java, TextEdit.deserializer)
1010
gson.registerTypeAdapter(WorkspaceEditOperation::class.java, WorkspaceEditOperation.deserializer)
1111
}

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/SerializedChatMessage.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@ data class SerializedChatMessage(
1010
val speaker: SpeakerEnum, // Oneof: human, assistant, system
1111
val text: String? = null,
1212
val model: String? = null,
13+
val intent: IntentEnum? = null, // Oneof: search, chat
1314
) {
1415

1516
enum class SpeakerEnum {
1617
@SerializedName("human") Human,
1718
@SerializedName("assistant") Assistant,
1819
@SerializedName("system") System,
1920
}
21+
22+
enum class IntentEnum {
23+
@SerializedName("search") Search,
24+
@SerializedName("chat") Chat,
25+
}
2026
}
2127

agent/bindings/kotlin/lib/src/main/kotlin/com/sourcegraph/cody/agent/protocol_generated/ServerInfo.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ package com.sourcegraph.cody.agent.protocol_generated;
44
data class ServerInfo(
55
val name: String,
66
val authenticated: Boolean? = null,
7-
val authStatus: AuthStatus? = null,
7+
val authStatus: ProtocolAuthStatus? = null,
88
)
99

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@file:Suppress("FunctionName", "ClassName", "unused", "EnumEntryName", "UnusedImport")
2+
package com.sourcegraph.cody.agent.protocol_generated;
3+
4+
data class Testing_Autocomplete_ProviderConfigResult(
5+
val id: String,
6+
val legacyModel: String,
7+
val configSource: String,
8+
)
9+

0 commit comments

Comments
 (0)