docs: comprehensive LS binary reverse engineering with model enum mapping

This commit is contained in:
Nikketryhard
2026-02-14 04:19:48 -06:00
parent edad784bcd
commit 932214fd95
3 changed files with 880 additions and 0 deletions

834
docs/ls-binary-analysis.md Normal file
View File

@@ -0,0 +1,834 @@
# LS Binary Analysis — Reverse Engineering Notes
Source: `strings` analysis of `/usr/share/antigravity/resources/app/extensions/antigravity/bin/language_server_linux_x64`
---
## Model IDs (All Known)
### Placeholder Models (M0M50)
51 placeholder model slots (`MODEL_PLACEHOLDER_M0` through `MODEL_PLACEHOLDER_M50`).
**Known mappings** (confirmed via traffic analysis):
| Placeholder | Model |
| ----------------------- | ------------------- |
| `MODEL_PLACEHOLDER_M7` | Gemini 3 Pro (Low) |
| `MODEL_PLACEHOLDER_M8` | Gemini 3 Pro (High) |
| `MODEL_PLACEHOLDER_M12` | Claude Opus 4.5 |
| `MODEL_PLACEHOLDER_M18` | Gemini 3 Flash |
| `MODEL_PLACEHOLDER_M26` | Claude Opus 4.6 |
Remaining placeholders (M0M6, M9M11, M13M17, M19M25, M27M50) are unmapped — likely reserved for future models or A/B test variants.
### Claude Models
| Model ID | Notes |
| --------------------------------------------------- | ------------------ |
| `MODEL_CLAUDE_3_HAIKU_20240307` | Legacy |
| `MODEL_CLAUDE_3_SONNET_20240229` | Legacy |
| `MODEL_CLAUDE_3_OPUS_20240229` | Legacy |
| `MODEL_CLAUDE_3_5_HAIKU_20241022` | |
| `MODEL_CLAUDE_3_5_SONNET_20240620` | |
| `MODEL_CLAUDE_3_5_SONNET_20241022` | |
| `MODEL_CLAUDE_3_5_SONNET_BYOK` | Bring Your Own Key |
| `MODEL_CLAUDE_3_7_SONNET_20250219` | |
| `MODEL_CLAUDE_3_7_SONNET_20250219_THINKING` | Extended thinking |
| `MODEL_CLAUDE_3_7_SONNET_BYOK` | BYOK |
| `MODEL_CLAUDE_3_7_SONNET_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
| `MODEL_CLAUDE_3_7_SONNET_THINKING_BYOK` | BYOK + thinking |
| `MODEL_CLAUDE_3_7_SONNET_THINKING_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
| `MODEL_CLAUDE_4_SONNET` | Claude 4 Sonnet |
| `MODEL_CLAUDE_4_SONNET_THINKING` | + thinking |
| `MODEL_CLAUDE_4_SONNET_BYOK` | BYOK |
| `MODEL_CLAUDE_4_SONNET_DATABRICKS` | Databricks hosted |
| `MODEL_CLAUDE_4_SONNET_THINKING_DATABRICKS` | Databricks + think |
| `MODEL_CLAUDE_4_SONNET_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
| `MODEL_CLAUDE_4_SONNET_THINKING_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
| `MODEL_CLAUDE_4_SONNET_THINKING_BYOK` | BYOK + thinking |
| `MODEL_CLAUDE_4_OPUS` | Claude 4 Opus |
| `MODEL_CLAUDE_4_OPUS_THINKING` | + thinking |
| `MODEL_CLAUDE_4_OPUS_BYOK` | BYOK |
| `MODEL_CLAUDE_4_OPUS_THINKING_BYOK` | BYOK + thinking |
| `MODEL_CLAUDE_4_5_SONNET` | Claude 4.5 Sonnet |
| `MODEL_CLAUDE_4_5_SONNET_THINKING` | + thinking |
| `MODEL_CLAUDE_4_5_HAIKU` | Claude 4.5 Haiku |
| `MODEL_CLAUDE_4_5_HAIKU_THINKING` | + thinking |
### Google Models
| Model ID | Notes |
| ------------------------------------------------------ | ----------------------- |
| `MODEL_GOOGLE_GEMINI_1_0_PRO` | Legacy |
| `MODEL_GOOGLE_GEMINI_1_5_PRO` | Legacy |
| `MODEL_GOOGLE_GEMINI_2_0_FLASH` | |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH` | |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE` | |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING` | |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING_TOOLS` | With tool use |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_IMAGE_PREVIEW` | Image input |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_PREVIEW_04_17` | April preview |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_PREVIEW_05_20` | May preview |
| `MODEL_GOOGLE_GEMINI_2_5_FLASH_PREVIEW_05_20_THINKING` | May preview + thinking |
| `MODEL_GOOGLE_GEMINI_2_5_PRO` | |
| `MODEL_GOOGLE_GEMINI_2_5_PRO_EVAL` | Evaluation variant |
| `MODEL_GOOGLE_GEMINI_COMPUTER_USE_EXPERIMENTAL` | Browser/computer use |
| `MODEL_GOOGLE_GEMINI_EXP_1206` | December experiment |
| `MODEL_GOOGLE_GEMINI_FOR_GOOGLE_2_5_PRO` | Google-internal 2.5 Pro |
| `MODEL_GOOGLE_GEMINI_INTERNAL_BYOM` | Bring Your Own Model |
| `MODEL_GOOGLE_GEMINI_INTERNAL_TAB_FLASH_LITE` | Tab completion model |
| `MODEL_GOOGLE_GEMINI_INTERNAL_TAB_JUMP_FLASH_LITE` | Tab-jump completion |
| `MODEL_GOOGLE_GEMINI_TRAINING_POLICY` | RLHF/training policy |
| `MODEL_GOOGLE_TRAINING_CHECKPOINT` | Training checkpoint |
| `MODEL_GOOGLE_TRAINING_JUDGE` | Evaluation judge |
| **Codename models** (likely Gemini 3.x variants): | |
| `MODEL_GOOGLE_GEMINI_RIFTRUNNER` | Codename |
| `MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_HIGH` | High compute |
| `MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_LOW` | Low compute |
| `MODEL_GOOGLE_GEMINI_HORIZONDAWN` | Codename |
| `MODEL_GOOGLE_GEMINI_COSMICFORGE` | Codename |
| `MODEL_GOOGLE_GEMINI_INFINITYJET` | Codename |
| `MODEL_GOOGLE_GEMINI_INFINITYBLOOM` | Codename |
| `MODEL_GOOGLE_GEMINI_NEMOSREEF` | Codename |
| `MODEL_GOOGLE_GEMINI_PUREPRISM` | Codename |
| `MODEL_GOOGLE_GEMINI_ORIONFIRE` | Codename |
| `MODEL_GOOGLE_GEMINI_RAINSONG` | Codename |
| `MODEL_GOOGLE_GEMINI_GENTLEISLAND` | Codename |
| `MODEL_GOOGLE_JARVIS_PROXY` | Jarvis proxy endpoint |
| `MODEL_GOOGLE_JARVIS_V4S` | Jarvis v4s model |
### OpenAI Models
| Model ID | Notes |
| ---------------------------------- | ---------------- |
| `MODEL_OPENAI_COMPATIBLE` | Generic compat |
| `MODEL_OPENAI_GPT_OSS_120B_MEDIUM` | Open-source 120B |
---
## gRPC Services
### LanguageServerService (137+ methods)
The main service running locally on the user's machine. Communicates with both
the extension and the API server.
<details>
<summary>Full method list (click to expand)</summary>
```
AcceptTermsOfService
AcknowledgeCascadeCodeEdit
AcknowledgeCodeActionStep
AddToBrowserWhitelist
AddTrackedWorkspace
BrowserValidateCascadeOrCancelOverlayGenerate
CancelCascadeInvocation
CancelCascadeSteps
CaptureConsoleLogs
CaptureScreenshot
ConvertTrajectoryToMarkdown
CopyBuiltinWorkflowToWorkspace
CopyTrajectory
CreateCustomizationFile
CreateReplayWorkspace
CreateTrajectoryShare
CreateWorktree
DeleteCascadeMemory
DeleteCascadeTrajectory
DeleteMediaArtifact
DeleteQueuedUserInputStep
DumpFlightRecorder
DumpPprof
Exit
FocusUserPage
ForceBackgroundResearchRefresh
GenerateCommitMessage
GetAgentScripts
GetAllBrowserWhitelistedUrls
GetAllCascadeTrajectories
GetAllCustomAgentConfigs
GetAllRules
GetAllSkills
GetAllWorkflows
GetArtifactSnapshots
GetAvailableCascadePlugins
GetBrowserOpenConversation
GetBrowserWhitelistFilePath
GetCascadeMemories
GetCascadeModelConfigData
GetCascadeModelConfigs
GetCascadeNuxes
GetCascadePluginById
GetCascadeTrajectory
GetCascadeTrajectoryGeneratorMetadata
GetCascadeTrajectorySteps
GetChangelog
GetCodeValidationStates
GetCommandModelConfigs
GetDebugDiagnostics
GetMatchingContextScopeItems
GetMcpServerStates
GetMcpServerTemplates
GetModelResponse
GetModelStatuses
GetPatchAndCodeChange
GetProfileData
GetRepoInfos
GetRevertPreview
GetRevisionArtifact
GetStaticExperimentStatus
GetStatus
GetTeamOrganizationalControls
GetTermsOfService
GetTranscription
GetUnleashData
GetUserAnalyticsSummary
GetUserMemories
GetUserSettings
GetUserStatus
GetUserTrajectory
GetUserTrajectoryDebug
GetUserTrajectoryDescriptions
GetWebDocsOptions
GetWorkingDirectories
GetWorkspaceEditState
GetWorkspaceInfos
HandleCascadeUserInteraction
HandleScreenRecording
HandleStreamingCommand
Heartbeat
ImportFromCursor
InitializeCascadePanelState
InstallCascadePlugin
ListMcpResources
ListPages
LoadReplayConversation
LoadTrajectory
MigrateApiKey
OpenUrl
ProvideCompletionFeedback
RecordAnalyticsEvent
RecordChatFeedback
RecordChatPanelSession
RecordCommitMessageSave
RecordEvent
RecordInteractiveCascadeFeedback
RecordLints
RecordSearchDocOpen
RecordSearchResultsView
RecordUserGrep
RecordUserStepSnapshot
RefreshContextForIdeAction
RefreshMcpServers
RegisterGdmUser
RemoveTrackedWorkspace
ReplayGroundTruthTrajectory
ResetOnboarding
ResolveOutstandingSteps
RevertToCascadeStep
SaveMediaAsArtifact
SaveScreenRecording
SendActionToChatPanel
SendAllQueuedMessages
SendUserCascadeMessage
SetBaseExperiments
SetBrowserOpenConversation
SetUserSettings
SetWorkingDirectories
SetupUniversitySandbox
ShouldEnableUnleash
SignalExecutableIdle
SimulateSegFault
SkipOnboarding
SmartFocusConversation
SmartOpenBrowser
StartCascade
StartScreenRecording
StatUri
StreamCascadePanelReactiveUpdates
StreamCascadeReactiveUpdates
StreamCascadeSummariesReactiveUpdates
StreamTerminalShellCommand
StreamUserTrajectoryReactiveUpdates
UpdateCascadeMemory
UpdateConversationAnnotations
UpdateDevExperiments
UpdateEnterpriseExperimentsFromUrl
UpdatePRForWorktree
WellSupportedLanguages
```
</details>
**Notable new findings:**
- `StreamCascadeReactiveUpdates` — server-sent streaming RPC for real-time cascade updates (alternative to our current polling approach)
- `GetUnleashData` — direct access to feature flag data
- `GetUserMemories` — persistent memory system
- `DumpFlightRecorder` / `DumpPprof` — debug/profiling endpoints
- `SimulateSegFault` — intentional crash trigger (testing?)
- `ImportFromCursor` — competitive migration tool
- `GetAllRules` / `GetAllWorkflows` / `GetAllSkills` — customization system
- `StreamTerminalShellCommand` — streaming terminal execution
- `HandleScreenRecording` / `CaptureScreenshot` — browser automation
- `CreateWorktree` / `UpdatePRForWorktree` — git worktree integration
- `ListMcpResources` / `RefreshMcpServers` — MCP tool integration
### ApiServerService (87+ methods)
Cloud-hosted API server. LS communicates with this for analytics, model config,
and remote operations.
<details>
<summary>Full method list (click to expand)</summary>
```
ApplyTrajectoryHeuristics
BatchRecordChatRequestRecords
BatchRecordCompletions
BatchRecordPrompts
BatchRecordUserLastUpdateTimes
CheckHybridDeploymentStatus
ContactForm
CreateHybridDeploymentInternal
CreateTrajectoryShare
DeleteAllowlist
DeleteOidcProvider
DeleteTeamOrganizationalControls
DeleteTrajectoryShare
ExchangeOidcCode
FetchTrajectoryShare
FetchTrajectoryShareByUser
GenerateSyntheticRule
GetAllOidcProviders
GetAllowlist
GetCascadeModelConfigs
GetCascadeNuxes
GetChatMessage
GetCommandModelConfigs
GetCompletionExamples
GetDefaultWorkflowTemplates
GetDeploymentConfig
GetEmbeddings
GetExtensionStats
GetHybridDeploymentsInternal
GetImageGeneration
GetMQuery
GetMcpServerTemplates
GetModelInfos
GetModelStatuses
GetOidcAuthorizationUrl
GetStatus
GetStreamingExternalChatCompletions
GetStreamingModelAPITextCompletion
GetTeamOidcProviders
GetTeamOrganizationalControls
GetTeamOrganizationalControlsForSite
GetTranscription
GetUnleashContextFields
GetUserAllowlist
GetWebDocsOptions
GetWebSearchRedirect
GetWebSearchResults
InsertAllowlist
IsConversationSharingBlocked
JoinWaitlist
LogChatHybrid
LogCompletionsHybrid
LogFeedbackHybrid
PingGemini
ProvideFeedback
RecordAsyncTelemetry
RecordCascadeUsage
RecordChatFeedback
RecordChatModelNodeRun
RecordChatPanelSession
RecordChatSuccessfully
RecordCodeTrackerUpdates
RecordCommandUsage
RecordCommitMessageGeneration
RecordCommitMessageSave
RecordCompletionExample
RecordCompletions
RecordContextRefresh
RecordContextToPrompt
RecordCortexCodingPlan
RecordCortexCodingStep
RecordCortexCodingStepFeedback
RecordCortexError
RecordCortexExecutionMetadata
RecordCortexFeedback
RecordCortexGeneratorMetadata
RecordCortexStep
RecordCortexTrajectory
RecordCortexTrajectoryStep
RecordDebounce
RecordEvent
RecordFullTrajectoryAnalytics
RecordGitTelemetry
RecordMQuery
RecordNewCortexPlan
RecordOpportunities
RecordPinnedContext
RecordProfilingData
RecordReadUrlContent
RecordSearch
RecordSearchDocOpen
RecordSearchResults
RecordSearchResultsView
RecordStateInitializationData
RecordTrajectorySegmentAnalytics
RecordTrajectorySegmentEvents
RefreshOidcToken
RegisterHybridDeployment
RegisterOidcProvider
RemoveHybridDeploymentInternal
RunCodeAlignment
SendReferralEmail
StreamingTest
Subscribe
SubscribeToBlog
SupportsRemoteIndexing
UnsubscribeFromEmails
UploadErrorTraces
UpsertDeploymentConfig
UpsertTeamOrganizationalControls
UpsertTeamOrganizationalControlsForSite
ValidateEmail
ValidateRegistrationCode
WhoAmI
```
</details>
**Notable:**
- `GetStreamingExternalChatCompletions` — streaming chat API
- `GetStreamingModelAPITextCompletion` — streaming text completion
- `GetImageGeneration` — image generation capability
- `GetMQuery` / `RecordMQuery` — unknown "MQuery" system
- `GetEmbeddings` — embedding generation
- `PingGemini` — health check for Gemini
- `RecordCascadeUsage` — usage reporting (our MITM target!)
- `RunCodeAlignment` — code alignment/formatting service
- `GetWebSearchResults` — web search integration
### ExtensionServerService (53+ methods)
Extension-side service that the LS calls back into for IDE operations.
<details>
<summary>Full method list (click to expand)</summary>
```
AddAnnotation
BroadcastConversationDeletion
CheckTerminalShellSupport
EndAudioRecording
ExecuteCommand
FetchMCPAuthToken
FindAllReferences
FocusIDEWindow
GetBrowserOnboardingPort
GetChromeDevtoolsMcpUrl
GetCurrentAudioRecording
GetDefinition
GetLintErrors
GetSecretValue
HandleAsyncPostMessage
HandleProposeCodeExtensionVerification
InsertCodeAtCursor
IsAgentManagerEnabled
LanguageServerStarted
LaunchBrowser
LogEvent
OpenAntigravityRulesFile
OpenConfigurePluginsPage
OpenConversationWorkspaceQuickPick
OpenDiffZones
OpenExternalUrl
OpenFilePointer
OpenPluginConfigModal
OpenPluginPage
OpenSetting
OpenTerminal
OpenVirtualFile
PlaySound
PushUnifiedStateSyncUpdate
ReadTerminal
RecordErrorDelta
RemoveAnnotation
RestartUserStatusUpdater
RunExtensionCode
SaveDocument
SendTerminalInput
ShowAnnotation
ShowConversationPicker
ShowTerminal
SmartFocusConversation
StartAudioRecording
StoreSecretValue
SubscribeToUnifiedStateSyncTopic
TerminalResearchResult
TerminateCommand
UpdateCascadeTrajectorySummaries
UpdateDetailedViewWithCascadeInputPath
WriteCascadeEdit
```
</details>
**Notable:**
- `FetchMCPAuthToken` — the extension handles MCP auth token fetching
- `GetChromeDevtoolsMcpUrl` — Chrome DevTools MCP integration
- `RunExtensionCode` — the LS can execute arbitrary extension code
- `StartAudioRecording` / `EndAudioRecording` — audio input support
- `PlaySound` — audio output
- `LaunchBrowser` — browser automation trigger
- `StoreSecretValue` / `GetSecretValue` — secret management
### SeatManagementService (97+ methods)
Team/organization management. Handles licensing, seats, credits.
**Notable methods:**
- `AddExtraFlexCreditsInternal` — credit topup
- `GetCascadeAnalytics` — usage analytics
- `GetPlanStatus` — subscription status
- `GetTeamCreditEntries` — credit ledger
- `GetTeamSettings` / `UpdateTeamConfig` — team configuration
- `GetWrapped` — Spotify-wrapped style usage summary
- `UpdateCascadeWebSearchEnabled` — toggle web search
- `SetUserApiProviderKey` — BYOK key management
### ModelManagementService (8 methods)
Self-hosted model management for hybrid deployments.
```
AddModel
DeleteModel
ListInferenceServers
ListModels
PollInferenceServerMemory
StartInferenceServer
StopInferenceServer
UpdateInferenceServerMemory
```
### PredictionService (~15 methods)
Google AI Platform prediction service (the upstream LLM API).
```
AsyncGenerateContent
CompleteCode
CountTokens
DirectPredict
DirectRawPredict
EmbedContent
Explain
FetchAvailableModels
FetchPredictOperation
GenerateContent
Predict
PredictLongRunning
RawPredictLongRunning
RawPredict
RetrieveUserQuota ← quota retrieval!
TestGrpcPredict
```
### CloudCode Service (22 methods)
Google internal CloudCode REST-like API at `daily-cloudcode-pa.googleapis.com`.
```
CompleteCode
FetchAdminControls
FetchCodeCustomizationState
GenerateChat
GenerateCode
GetCodeAssistGlobalUserSetting
InternalAtomicAgenticChat ← agentic chat endpoint!
ListAgents
ListCloudAICompanionProjects
ListExperiments
ListModelConfigs
ListRemoteRepositories
LoadCodeAssist
MigrateDatabaseCode
OnboardUser
OnboardUserBackgroundTasks
RecordClientEvent
RecordCodeAssistMetrics
RecordSmartchoicesFeedback
SearchSnippets
SetCodeAssistGlobalUserSetting
TransformCode
```
---
## REST Endpoints (v1internal)
Discovered REST endpoints on `daily-cloudcode-pa.googleapis.com`:
```
v1internal:checkUrlDenylist
v1internal:completeCode
v1internal:countTokens
v1internal:fetchAdminControls
v1internal:fetchAvailableModels
v1internal:fetchCodeCustomizationState
v1internal:fetchUserInfo
v1internal:generateChat
v1internal:generateCode
v1internal:generateContent
v1internal:getCodeAssistGlobalUserSetting
v1internal:internalAtomicAgenticChat
v1internal:listAgents
v1internal:listCloudAICompanionProjects
v1internal:listExperiments
v1internal:listModelConfigs
v1internal:listRemoteRepositories
v1internal:loadCodeAssist
v1internal:logClientError
v1internal:migrateDatabaseCode
v1internal:onboardUser
v1internal:onboardUserBackgroundTasks
v1internal:recordClientEvent
v1internal:recordCodeAssistMetrics
v1internal:recordSmartchoicesFeedback
v1internal:recordTrajectoryAnalytics
v1internal:retrieveUserQuota
v1internal:rewriteUri
v1internal:searchSnippets
v1internal:setCodeAssistGlobalUserSetting
v1internal:setUserSettings
v1internal:streamGenerateChat
v1internal:streamGenerateContent ← main LLM API
v1internal:tabChat
v1internal:transformCode
```
**Key endpoints:**
- `streamGenerateContent` — the main LLM streaming endpoint (confirmed via MITM)
- `internalAtomicAgenticChat` — agentic chat (full tool-use loop in one call?)
- `retrieveUserQuota` — quota/credits check
- `listModelConfigs` — available models and configuration
- `fetchAvailableModels` — model discovery
- `countTokens` — tokenization
- `streamGenerateChat` — streaming chat variant
- `tabChat` — tab completion chat
- `fetchUserInfo` — user information
- `listExperiments` — A/B test experiments
---
## Proto Packages (v1internal)
Internal proto packages discovered in the binary:
```
google/internal/cloud/code/v1internal/cloudcode
google/internal/cloud/code/v1internal/credits
google/internal/cloud/code/v1internal/jetski
google/internal/cloud/code/v1internal/metrics
google/internal/cloud/code/v1internal/model
google/internal/cloud/code/v1internal/onboarding
google/internal/cloud/code/v1internal/prediction
google/internal/cloud/code/v1internal/remote
```
**Notable:**
- `credits` — credit/quota system proto definitions
- `jetski` — internal codename for the cascade/agent system
- `prediction` — AI model prediction layer
- `metrics` — telemetry/analytics
---
## Feature Flags & Configuration
### Proxy Detection
```
DETECT_AND_USE_PROXY_UNSPECIFIED (0, default — ignores proxy)
DETECT_AND_USE_PROXY_ENABLED (1, honors HTTPS_PROXY)
DETECT_AND_USE_PROXY_DISABLED (2, explicitly ignores proxy)
```
### Cascade Config Keys
```
CASCADE_ENFORCE_QUOTA ← quota enforcement toggle
CASCADE_BASE_MODEL_ID ← default model selection
CASCADE_ENABLE_MCP_TOOLS ← MCP tool use
CASCADE_ANTIGRAVITY_BROWSER_TOOLS_ENABLED
CASCADE_AUTO_FIX_LINTS
CASCADE_WEB_SEARCH_TOOL_ENABLED/DISABLED
CASCADE_BACKGROUND_RESEARCH_CONFIG_OVERRIDE
CASCADE_GLOBAL_CONFIG_OVERRIDE
CASCADE_MEMORY_CONFIG_OVERRIDE
CASCADE_DEFAULT_MODEL_OVERRIDE
CASCADE_PLAN_BASED_CONFIG_OVERRIDE
CASCADE_ENABLE_AUTOMATED_MEMORIES
```
### Model Status
```
MODEL_STATUS_UNSPECIFIED
MODEL_STATUS_INFO
MODEL_STATUS_WARNING
```
### Cortex Step Types
These are the internal names for the agent's tool-use steps:
```
CORTEX_STEP_TYPE_CODE_ACTION
CORTEX_STEP_TYPE_COMMAND_STATUS
CORTEX_STEP_TYPE_COMPILE_TOOL_PYLINT
CORTEX_STEP_TYPE_GREP_SEARCH
CORTEX_STEP_TYPE_RUN_COMMAND
CORTEX_STEP_TYPE_VIEW_CODE_ITEM
```
### Cortex Generation Types
```
CORTEX_GENERATION_TYPE_CCI_RESEARCH
CORTEX_GENERATION_TYPE_DYNAMIC_TRAJECTORY
CORTEX_GENERATION_TYPE_FILE_RESEARCH
CORTEX_GENERATION_TYPE_GRAPH
CORTEX_GENERATION_TYPE_GROUNDTRUTH
CORTEX_GENERATION_TYPE_INFORM
CORTEX_GENERATION_TYPE_MASKED_GROUND_TRUTH_TRAJECTORY
CORTEX_GENERATION_TYPE_REAPPLY_GROUND_TRUTH
CORTEX_GENERATION_TYPE_STATIC_TRAJECTORY
CORTEX_GENERATION_TYPE_VERIFY
```
---
## Hardcoded URLs
```
https://play.googleapis.com/log ← Clearcut telemetry
https://oauth2.googleapis.com/token ← Token refresh
https://oauth2.googleapis.com/device/code ← Device auth flow
https://www.googleapis.com/oauth2/v2/userinfo
https://docs.googleapis.com/v1/documents/ ← Google Docs integration
https://iamcredentials.googleapis.com/v1/ ← Service account impersonation
```
---
## Miscellaneous Findings
- **Unleash config**: Auth key `*:production.e44558998bfc35ea9584dc65858e4485fdaa5d7ef46903e0c67712d1`, domain `antigravity-unleash.goog`
- **Sentry**: Has a sample rate config (`ANTIGRAVITY_SENTRY_SAMPLE_RATE`)
- **Flight recorder**: Internal debug recording system (`DumpFlightRecorder`)
- **Browser extension IDs**: Several Chrome extension IDs visible (`pebbhcjfokadbgbnlmogdkkaahmamnap`, etc.)
- **Cortex memory**: `CORTEX_MEMORY_SOURCE_AUTO_CASCADE` — auto-generates memories from cascades
- **RLHF/Training**: `MODEL_GOOGLE_TRAINING_JUDGE`, `MODEL_GOOGLE_TRAINING_CHECKPOINT`, `MODEL_GOOGLE_GEMINI_TRAINING_POLICY` — suggests the LS participates in model training/evaluation
- **Hybrid deployment**: Multiple methods for on-prem/hybrid deployments (`CheckHybridDeploymentStatus`, `CreateHybridDeploymentInternal`, etc.)
- **BYOK support**: Claude and OpenAI models have BYOK variants; also open-router and databricks hosting options
- **Jetski**: Internal codename for the cascade/agent system. Google-internal health check: `http://jetski-server.corp.goog/healthz`
- **XboxInferenceToolRequest**: Proto message `exa.chat_pb.XboxInferenceToolRequest` — "Xbox" is a codename for their inference tool system
---
## Protobuf Enum Numbers (from extension.js)
Extracted from the compiled protobuf enum definitions in `extension.js`.
These are the wire values sent in proto field 1 (model) of usage messages.
### Placeholder Models
| Enum `no` | Proto Name |
| --------- | ------------------------- |
| 1000 | MODEL_PLACEHOLDER_M0 |
| 1001 | MODEL_PLACEHOLDER_M1 |
| 1002 | MODEL_PLACEHOLDER_M2 |
| 1003 | MODEL_PLACEHOLDER_M3 |
| 1004 | MODEL_PLACEHOLDER_M4 |
| 1005 | MODEL_PLACEHOLDER_M5 |
| 1006 | MODEL_PLACEHOLDER_M6 |
| 1007 | MODEL_PLACEHOLDER_M7 |
| 1008 | MODEL_PLACEHOLDER_M8 |
| 1009 | MODEL_PLACEHOLDER_M9 |
| 1010 | MODEL_PLACEHOLDER_M10 |
| 1011 | MODEL_PLACEHOLDER_M11 |
| 1012 | MODEL_PLACEHOLDER_M12 |
| 10131050 | MODEL_PLACEHOLDER_M13M50 |
### Claude Models
| Enum `no` | Proto Name |
| --------- | -------------------------------- |
| 281 | MODEL_CLAUDE_4_SONNET |
| 282 | MODEL_CLAUDE_4_SONNET_THINKING |
| 290 | MODEL_CLAUDE_4_OPUS |
| 291 | MODEL_CLAUDE_4_OPUS_THINKING |
| 333 | MODEL_CLAUDE_4_5_SONNET |
| 334 | MODEL_CLAUDE_4_5_SONNET_THINKING |
| 340 | MODEL_CLAUDE_4_5_HAIKU |
| 341 | MODEL_CLAUDE_4_5_HAIKU_THINKING |
### Google Models
| Enum `no` | Proto Name |
| --------- | ------------------------------------------------ |
| 246 | MODEL_GOOGLE_GEMINI_2_5_PRO |
| 312 | MODEL_GOOGLE_GEMINI_2_5_FLASH |
| 313 | MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING |
| 323 | MODEL_GOOGLE_GEMINI_TRAINING_POLICY |
| 326 | MODEL_GOOGLE_GEMINI_INTERNAL_BYOM |
| 327 | MODEL_GOOGLE_GEMINI_FOR_GOOGLE_2_5_PRO |
| 328 | MODEL_GOOGLE_GEMINI_NEMOSREEF |
| 329 | MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING_TOOLS |
| 330 | MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE |
| 331 | MODEL_GOOGLE_GEMINI_2_5_PRO_EVAL |
| 332 | MODEL_GOOGLE_GEMINI_2_5_FLASH_IMAGE_PREVIEW |
| 335 | MODEL_GOOGLE_GEMINI_COMPUTER_USE_EXPERIMENTAL |
| 336 | MODEL_GOOGLE_GEMINI_HORIZONDAWN |
| 337 | MODEL_GOOGLE_GEMINI_PUREPRISM |
| 338 | MODEL_GOOGLE_GEMINI_GENTLEISLAND |
| 339 | MODEL_GOOGLE_GEMINI_RAINSONG |
| 343 | MODEL_GOOGLE_GEMINI_ORIONFIRE |
| 344 | MODEL_GOOGLE_GEMINI_INTERNAL_TAB_FLASH_LITE |
| 345 | MODEL_GOOGLE_GEMINI_INTERNAL_TAB_JUMP_FLASH_LITE |
| 346 | MODEL_GOOGLE_JARVIS_PROXY |
| 347 | MODEL_GOOGLE_GEMINI_COSMICFORGE |
| 348 | MODEL_GOOGLE_GEMINI_RIFTRUNNER |
| 349 | MODEL_GOOGLE_JARVIS_V4S |
| 350 | MODEL_GOOGLE_GEMINI_INFINITYJET |
| 351 | MODEL_GOOGLE_GEMINI_INFINITYBLOOM |
| 352 | MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_LOW |
| 353 | MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_HIGH |
### OpenAI Models
| Enum `no` | Proto Name |
| --------- | -------------------------------- |
| 342 | MODEL_OPENAI_GPT_OSS_120B_MEDIUM |
### Key Mapping Summary (for proxy constants.rs)
| Our Name | Placeholder | Proto Enum |
| ------------------- | ----------- | ---------- |
| Gemini 3 Pro (Low) | M7 | 1007 |
| Gemini 3 Pro (High) | M8 | 1008 |
| Claude Opus 4.5 | M12 | 1012 |
| Gemini 3 Flash | M18 | 1018 |
| Claude Opus 4.6 | M26 | 1026 |

View File

@@ -240,3 +240,36 @@ sudo update-ca-certificates
## Next Steps ## Next Steps
→ See `docs/standalone-ls-todo.md` for standalone LS isolation work → See `docs/standalone-ls-todo.md` for standalone LS isolation work
→ See `docs/ls-binary-analysis.md` for comprehensive binary reverse engineering
## New Findings (from binary analysis)
### Alternative to Polling: `StreamCascadeReactiveUpdates`
The LS has a streaming gRPC method `StreamCascadeReactiveUpdates` that pushes
cascade state changes in real-time via server-sent streaming. The extension uses
this instead of polling `GetCascadeTrajectorySteps`.
**Potential improvement:** If we switch from polling to this streaming RPC, we'd
get lower latency and less backend traffic. However, our current polling approach
works reliably and doesn't require maintaining a long-lived gRPC stream.
### Quota Endpoint: `retrieveUserQuota`
The `PredictionService/RetrieveUserQuota` gRPC method and
`v1internal:retrieveUserQuota` REST endpoint provide quota/credit information.
This could be used to implement a proper `/v1/quota` endpoint instead of
scraping the LS's own quota tracking.
### `internalAtomicAgenticChat`
A REST endpoint that appears to handle the entire agentic chat loop atomically
(tool calls + responses in one request?). Investigation needed to understand
the request/response format.
### Credits System
The `google/internal/cloud/code/v1internal/credits` proto package exists with
`Credits_CreditType` enum. The `CASCADE_ENFORCE_QUOTA` config key controls
whether quotas are enforced. Related methods: `AddExtraFlexCreditsInternal`,
`GetTeamCreditEntries`, `GetPlanStatus`.

View File

@@ -72,3 +72,16 @@ curl -sk "https://127.0.0.1:42200/.../StartCascade" ...
- Model IDs: M18=Flash, M8=Pro-High, M7=Pro-Low, M26=Opus4.6, M12=Opus4.5 - Model IDs: M18=Flash, M8=Pro-High, M7=Pro-Low, M26=Opus4.6, M12=Opus4.5
- LS binary: `/usr/share/antigravity/resources/app/extensions/antigravity/bin/language_server_linux_x64` - LS binary: `/usr/share/antigravity/resources/app/extensions/antigravity/bin/language_server_linux_x64`
- API endpoint: `daily-cloudcode-pa.googleapis.com/v1internal:streamGenerateContent?alt=sse` - API endpoint: `daily-cloudcode-pa.googleapis.com/v1internal:streamGenerateContent?alt=sse`
## New Leads (from binary analysis)
- **`GetUnleashData`** — LS method to fetch Unleash flags directly. Could compare
main vs standalone to check if flags differ.
- **`GetStaticExperimentStatus`** / `SetBaseExperiments` / `UpdateDevExperiments`
experiment management. Standalone might be missing experiment overrides.
- **`FetchAdminControls`** — admin-level controls that might gate cascade execution.
- **`LoadCodeAssist`** — initialization step that might be required before cascades work.
- **`GetUserStatus` vs `GetUserMemories`** — check if standalone has auth context
by calling both.
→ See `docs/ls-binary-analysis.md` for full RPC method catalog.