From e4b98af308fafca1cc75e052fa931c97138d7b92 Mon Sep 17 00:00:00 2001 From: CD Date: Sat, 7 Mar 2026 19:16:33 +0900 Subject: [PATCH] docs: LS ConnectRPC reference (100+ RPC methods) + devlog + commands update --- docs/antigravity-commands.md | 34 ++++++ docs/devlog/2026-03-07.md | 3 + docs/devlog/entries/20260307-003.md | 38 ++++++ docs/ls-rpc-reference.md | 175 ++++++++++++++++++++++++++++ 4 files changed, 250 insertions(+) create mode 100644 docs/devlog/entries/20260307-003.md create mode 100644 docs/ls-rpc-reference.md diff --git a/docs/antigravity-commands.md b/docs/antigravity-commands.md index 2559af8..f619f64 100644 --- a/docs/antigravity-commands.md +++ b/docs/antigravity-commands.md @@ -232,3 +232,37 @@ | `git.antigravityCloneNonInteractive` | Clone non-interactive | | `git.antigravityGetRemoteUrl` | Get remote URL | | `git.antigravityReportCloneProgress` | Report clone progress | + +--- + +## πŸ”Œ Language Server ConnectRPC (Direct RPC) + +> LS Go λ°”μ΄λ„ˆλ¦¬μ—μ„œ μΆ”μΆœν•œ RPC λ©”μ„œλ“œ. ConnectRPC(HTTPS) ν”„λ‘œν† μ½œ μ‚¬μš©. +> μ„œλΉ„μŠ€: `exa.language_server_pb.LanguageServerService` +> 상세: [ls-rpc-reference.md](ls-rpc-reference.md) + +### λŒ€ν™”/Trajectory + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `GetUserTrajectoryDescriptions` | λͺ¨λ“  λŒ€ν™” λͺ©λ‘ (googleAgentId, summary, lastStepIndex) | +| `GetCascadeTrajectory` | λŒ€ν™” 전체 λ‚΄μš© | +| `GetCascadeTrajectorySteps` | λŒ€ν™” 단계별 데이터 (startStepIndex 지원) | +| `StartCascade` | μƒˆ λŒ€ν™” 생성 (headless) | +| `SendUserCascadeMessage` | κΈ°μ‘΄ λŒ€ν™”μ— λ©”μ‹œμ§€ 전솑 | + +### μ‹€μ‹œκ°„ 슀트림 + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `StreamCascadeReactiveUpdates` | Cascade μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ | +| `StreamAgentStateUpdates` | μ—μ΄μ „νŠΈ μƒνƒœ 슀트림 | + +### μ—μ΄μ „νŠΈ μ œμ–΄ + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `HandleCascadeUserInteraction` | μ‚¬μš©μž μƒν˜Έμž‘μš© (승인/거절) | +| `AcknowledgeCascadeCodeEdit` | μ½”λ“œ νŽΈμ§‘ 승인 | +| `ResolveOutstandingSteps` | λ―Έν•΄κ²° 단계 처리 | + diff --git a/docs/devlog/2026-03-07.md b/docs/devlog/2026-03-07.md index 0039612..5eeb3dc 100644 --- a/docs/devlog/2026-03-07.md +++ b/docs/devlog/2026-03-07.md @@ -14,3 +14,6 @@ | 10 | 15:00 | @bridgeβ†’@gravity 이름 λ³€κ²½ + μŠ¬λž˜μ‹œ λͺ…λ Ήμ–΄ /stop /auto /send | `02e9e4d`~`0bd525a` | βœ… | | 11 | 16:00 | sendTextToChat 탐색 β†’ sendPromptToAgentPanel 발견 | `e4eb756`~`8d5e59c` | βœ… | | 12 | 17:15 | μ–‘λ°©ν–₯ 톡신 μ™„μ„± + 171개 λͺ…λ Ήμ–΄ λ¬Έμ„œν™” + scanner μ‹œμž‘ μˆ˜μ • | `befa5d7` | βœ… | +| 13 | 17:50 | getDiagnostics ꡬ쑰 ν”„λ‘œλΈŒ β†’ λŒ€ν™” ν…μŠ€νŠΈ 미포함 확인 | `952883d`~`150967d` | πŸ”§ | +| 14 | 18:15 | LS ConnectRPC λΈŒλ¦Ώμ§€ κ΅¬ν˜„ + HTTPS ν”„λ‘œν† μ½œ 감지 μˆ˜μ • | `91b3a7e`~`f2ed431` | πŸ”§ | +| 15 | 18:45 | Go λ°”μ΄λ„ˆλ¦¬μ—μ„œ 100+ RPC λ©”μ„œλ“œ μΆ”μΆœ β†’ μ •ν™•ν•œ λ©”μ„œλ“œλͺ… 적용 | `be6fae7` | πŸ”§ | diff --git a/docs/devlog/entries/20260307-003.md b/docs/devlog/entries/20260307-003.md new file mode 100644 index 0000000..7a80aa1 --- /dev/null +++ b/docs/devlog/entries/20260307-003.md @@ -0,0 +1,38 @@ +# LS ConnectRPC λΈŒλ¦Ώμ§€ 역섀계 + AI 응닡 릴레이 κ΅¬ν˜„ + +- **μ‹œκ°„**: 2026-03-07 17:30~19:00 +- **Commit**: `952883d`~`be6fae7` (6 commits) +- **Vikunja**: #223 β†’ 진행쀑 + +## 핡심 발견 + +### AI λŒ€ν™” ν…μŠ€νŠΈλŠ” brain/ νŒŒμΌμ— μ—†λ‹€ +- brain/μ—λŠ” artifact (task.md, walkthrough.md, implementation_plan.md)만 μ €μž₯ +- .system_generated/logs/ 디렉토리도 μ—†μŒ +- AI 응닡 ν…μŠ€νŠΈλŠ” **LS λ‚΄λΆ€ λ©”λͺ¨λ¦¬**μ—λ§Œ 쑴재 +- getDiagnosticsμ—λŠ” μ‹œμŠ€ν…œ λ‘œκ·Έμ™€ λŒ€ν™” **메타데이터**(제λͺ©, step 수)만 포함 + +### LS ConnectRPC 접속 +- LS λ°”μ΄λ„ˆλ¦¬: `language_server_windows_x64.exe` (160MB Go) +- ν”„λ‘œν† μ½œ: ConnectRPC over HTTPS (자체 μ„œλͺ… μΈμ¦μ„œ) +- 인증: `x-codeium-csrf-token` 헀더 + `--csrf_token` CLIκ°’ +- 포트: `--random_port` μ‚¬μš© β†’ netstat + PID 기반 탐색 ν•„μš” + +### Go λ°”μ΄λ„ˆλ¦¬μ—μ„œ 100+ RPC λ©”μ„œλ“œ μΆ”μΆœ +- Python regex둜 `/exa.language_server_pb.LanguageServerService/` νŒ¨ν„΄ μΆ”μΆœ +- 핡심 λ©”μ„œλ“œ: `GetUserTrajectoryDescriptions`, `GetCascadeTrajectorySteps`, `StreamCascadeReactiveUpdates` +- `GetTrajectoryDescriptions`λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ β†’ SDK νƒ€μž… μ •μ˜κ°€ λΆ€μ •ν™• + +## μ‹€νŒ¨ν•œ 접근법 + +1. `onDidChangeTextDocument` β€” WebView 기반 μ±„νŒ…μ€ TextDocument 이벀트 λ―Έλ°œμƒ +2. `getManagerTrace` / `getWorkbenchTrace` β€” undefined λ°˜ν™˜ +3. brain/ 파일 λͺ¨λ‹ˆν„°λ§ β€” artifact만 쑴재, λŒ€ν™” ν…μŠ€νŠΈ μ—†μŒ +4. getDiagnostics β†’ λ©”νƒ€λ°μ΄ν„°λ§Œ, λŒ€ν™” λ‚΄μš© μ—†μŒ +5. antigravity-sdk β€” d.ts만 있고 JS κ΅¬ν˜„ μ—†λŠ” vaporware + +## λ―Έμ™„λ£Œ + +- [ ] LS ConnectRPC 호좜이 μ‹€μ œλ‘œ λŒ€ν™” 데이터 λ°˜ν™˜ν•˜λŠ”μ§€ 검증 ν•„μš” +- [ ] `GetCascadeTrajectorySteps` 응닡 ꡬ쑰 νŒŒμ•… β†’ AI ν…μŠ€νŠΈ μΆ”μΆœ 둜직 +- [ ] `StreamCascadeReactiveUpdates`둜 μ‹€μ‹œκ°„ 릴레이 κ°€λŠ₯μ„± 탐색 diff --git a/docs/ls-rpc-reference.md b/docs/ls-rpc-reference.md new file mode 100644 index 0000000..f5ecd78 --- /dev/null +++ b/docs/ls-rpc-reference.md @@ -0,0 +1,175 @@ +# Antigravity Language Server RPC Reference + +> Extracted from `language_server_windows_x64.exe` (160MB Go binary, v2026-03) +> Protocol: ConnectRPC over HTTPS on localhost +> Service: `exa.language_server_pb.LanguageServerService` + +--- + +## μ—°κ²° 정보 + +| ν•­λͺ© | κ°’ | +|------|-----| +| **ν”„λ‘œμ„ΈμŠ€λͺ…** | `language_server_windows_x64.exe` | +| **CSRF 헀더** | `x-codeium-csrf-token` | +| **CSRF κ°’** | `--csrf_token` CLI μΈμžμ—μ„œ μΆ”μΆœ | +| **ν”„λ‘œν† μ½œ** | HTTPS (자체 μ„œλͺ… μΈμ¦μ„œ) | +| **포트** | `--random_port` β†’ netstatμ—μ„œ PID 기반 탐색 | +| **Content-Type** | `application/json` | + +### 포트 발견 절차 + +1. `Get-CimInstance Win32_Process` β†’ LS PID + `--csrf_token` μΆ”μΆœ +2. `netstat -ano | findstr LISTENING | findstr ` β†’ λ¦¬μŠ€λ‹ 포트 λͺ©λ‘ +3. 각 ν¬νŠΈμ— `Heartbeat` μš”μ²­ μ‹œλ„ (HTTP β†’ HTTPS fallback) +4. 200 응닡 포트 = ConnectRPC 포트 + +### μ£Όμ˜μ‚¬ν•­ + +- LS 포트 3개: LSP JSON-RPC, HTTP ConnectRPC, HTTPS ConnectRPC +- `--extension_server_port`λŠ” 별도 (Extension Host IPC μ „μš©) +- `port 404 page not found` = ν•΄λ‹Ή κ²½λ‘œμ— μ„œλΉ„μŠ€ μ—†μŒ (Go HTTP mux) +- HTTP μš”μ²­ β†’ "Client sent an HTTP request to an HTTPS server." β†’ HTTPS μ‚¬μš© + +--- + +## 🎯 핡심 RPC λ©”μ„œλ“œ (μ±„νŒ…/λŒ€ν™”) + +| λ©”μ„œλ“œ | μš©λ„ | λΉ„κ³  | +|--------|------|------| +| `GetUserTrajectoryDescriptions` | λͺ¨λ“  λŒ€ν™” λͺ©λ‘ 쑰회 | googleAgentId, summary, lastStepIndex | +| `GetCascadeTrajectory` | λŒ€ν™” 전체 λ‚΄μš© | 무거움 | +| `GetCascadeTrajectorySteps` | λŒ€ν™” 단계 데이터 | startStepIndex둜 λ²”μœ„ μ§€μ • κ°€λŠ₯ | +| `StartCascade` | μƒˆ λŒ€ν™” 생성 | headless 지원 | +| `SendUserCascadeMessage` | κΈ°μ‘΄ λŒ€ν™”μ— λ©”μ‹œμ§€ 전솑 | | +| `AddCascadeInput` | Cascade에 μž…λ ₯ μΆ”κ°€ | | +| `HandleCascadeUserInteraction` | μ‚¬μš©μž μƒν˜Έμž‘μš© 처리 | 승인/거절 λ“± | +| `LoadTrajectory` | λŒ€ν™” λ‘œλ“œ | | +| `LoadReplayConversation*` | λŒ€ν™” λ¦¬ν”Œλ ˆμ΄ | | +| `SmartFocusConversation` | UIμ—μ„œ λŒ€ν™” 포컀슀 | | + +## πŸ“‘ 슀트리밍 RPC (μ‹€μ‹œκ°„) + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `StreamCascadeReactiveUpdates` | Cascade μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ 슀트림 | +| `StreamCascadePanelReactiveUpdates*` | νŒ¨λ„ μƒνƒœ μ‹€μ‹œκ°„ 슀트림 | +| `StreamCascadeSummariesReactiveUpdates` | λŒ€ν™” μš”μ•½ μ‹€μ‹œκ°„ 슀트림 | +| `StreamAgentStateUpdates` | μ—μ΄μ „νŠΈ μƒνƒœ 슀트림 | +| `StreamUserTrajectoryReactiveUpdates*` | μ‚¬μš©μž trajectory μ‹€μ‹œκ°„ 슀트림 | +| `StreamTerminalShellCommand` | 터미널 λͺ…λ Ήμ–΄ 슀트림 | + +## πŸ› οΈ μ—μ΄μ „νŠΈ μ œμ–΄ + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `ResolveOutstandingSteps` | λ―Έν•΄κ²° 단계 처리 | +| `AcknowledgeCascadeCodeEdit` | μ½”λ“œ νŽΈμ§‘ 승인 | +| `RevertToCascadeStep` | νŠΉμ • λ‹¨κ³„λ‘œ λ‘€λ°± | +| `GetCascadeTrajectoryGeneratorMetadata` | 생성기 메타데이터 | +| `RecordUserStepSnapshot` | μ‚¬μš©μž 단계 μŠ€λƒ…μƒ· 기둝 | +| `SendActionToChatPanel` | μ±„νŒ… νŒ¨λ„μ— μ•‘μ…˜ 전솑 | + +## πŸ“‹ μ„€μ •/μƒνƒœ + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `Heartbeat` | μ—°κ²° 검증 | +| `GetStatus` | LS μƒνƒœ | +| `GetUserStatus` | μ‚¬μš©μž μƒνƒœ (ν¬λ ˆλ”§ λ“±) | +| `GetUserSettings` | μ‚¬μš©μž μ„€μ • | +| `SetUserSettings` | μ‚¬μš©μž μ„€μ • λ³€κ²½ | +| `GetWorkingDirectories` | μž‘μ—… 디렉토리 | +| `SetWorkingDirectories` | μž‘μ—… 디렉토리 μ„€μ • | +| `GetDebugDiagnostics` | 디버그 진단 | +| `GetModelStatuses` | λͺ¨λΈ μƒνƒœ | +| `GetCascadeModelConfigs` | Cascade λͺ¨λΈ μ„€μ • | + +## 🧩 MCP / ν”ŒλŸ¬κ·ΈμΈ + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `GetMcpServerStates` | MCP μ„œλ²„ μƒνƒœ | +| `RefreshMcpServers` | MCP μ„œλ²„ μƒˆλ‘œκ³ μΉ¨ | +| `ListMcpResources` | MCP λ¦¬μ†ŒμŠ€ λͺ©λ‘ | +| `ListMcpPrompts` | MCP ν”„λ‘¬ν”„νŠΈ λͺ©λ‘ | +| `GetAvailableCascadePlugins` | μ‚¬μš© κ°€λŠ₯ν•œ ν”ŒλŸ¬κ·ΈμΈ | +| `InstallCascadePlugin` | ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜ | +| `GetCascadePluginById` | ν”ŒλŸ¬κ·ΈμΈ 상세 | + +## πŸ“Š 뢄석/기둝 + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `RecordAnalyticsEvent` | 뢄석 이벀트 기둝 | +| `RecordChatFeedback` | μ±„νŒ… ν”Όλ“œλ°± 기둝 | +| `RecordEvent` | 일반 이벀트 기둝 | +| `GetUserAnalyticsSummary` | μ‚¬μš©μž 뢄석 μš”μ•½ | + +## πŸ—‚οΈ Artifact / Memory + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `GetArtifactSnapshots` | μ•„ν‹°νŒ©νŠΈ μŠ€λƒ…μƒ· | +| `GetRevisionArtifact` | νŠΉμ • 리비전 μ•„ν‹°νŒ©νŠΈ | +| `SaveMediaAsArtifact` | λ―Έλ””μ–΄ β†’ μ•„ν‹°νŒ©νŠΈ μ €μž₯ | +| `GetCascadeMemories` | Cascade λ©”λͺ¨λ¦¬ | +| `UpdateCascadeMemory` | Cascade λ©”λͺ¨λ¦¬ μ—…λ°μ΄νŠΈ | +| `GetUserMemories` | μ‚¬μš©μž λ©”λͺ¨λ¦¬ | +| `UpdateConversationAnnotations` | λŒ€ν™” 주석(νƒœκ·Έ,제λͺ©) μ—…λ°μ΄νŠΈ | + +## πŸ”§ 기타 + +| λ©”μ„œλ“œ | μš©λ„ | +|--------|------| +| `GetRepoInfos` | μ €μž₯μ†Œ 정보 | +| `GetWorkspaceInfos` | μ›Œν¬μŠ€νŽ˜μ΄μŠ€ 정보 | +| `GetAllRules` | λͺ¨λ“  κ·œμΉ™ | +| `GetAllSkills` | λͺ¨λ“  μŠ€ν‚¬ | +| `GetAllWorkflows` | λͺ¨λ“  μ›Œν¬ν”Œλ‘œμš° | +| `GetAllCustomAgentConfigs` | μ»€μŠ€ν…€ μ—μ΄μ „νŠΈ μ„€μ • | +| `GetBrowserOpenConversation` | λΈŒλΌμš°μ €μ— μ—΄λ¦° λŒ€ν™” | +| `SkipBrowserSubagent` | λΈŒλΌμš°μ € μ„œλΈŒμ—μ΄μ „νŠΈ μŠ€ν‚΅ | + +--- + +## getDiagnostics ꡬ쑰 (VS Code λͺ…λ Ή) + +`antigravity.getDiagnostics` β†’ 176KB JSON string: + +| ν‚€ | νƒ€μž… | λ‚΄μš© | +|-----|------|------| +| `isRemote` | boolean | 원격 μ—¬λΆ€ | +| `systemInfo` | object | OS, νƒ€μž„μŠ€νƒ¬ν”„, 이메일, μ‚¬μš©μžλͺ… | +| `extensionLogs` | Array(426) | Extension 둜그 λ¬Έμžμ—΄ λ°°μ—΄ | +| `rendererLogs` | object | λ Œλ”λŸ¬λ³„ 둜그 (artifacts, interactive-editor) | +| `mainThreadLogs` | object | 메인 μŠ€λ ˆλ“œ 둜그 (auth, cloudcode) | +| `languageServerLogs` | object | LS 디버그 둜그 | +| `recentTrajectories` | Array(10) | 졜근 λŒ€ν™” 메타데이터 | + +### recentTrajectories ν•­λͺ© ꡬ쑰 + +```json +{ + "googleAgentId": "uuid", + "trajectoryId": "uuid", + "summary": "λŒ€ν™” 제λͺ©", + "lastStepIndex": 56, + "lastModifiedTime": "2026-03-07T05:53:11.1492Z" +} +``` + +> ⚠️ `recentTrajectories`λŠ” **λŒ€ν™” ν…μŠ€νŠΈλ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠμŒ** β€” λ©”νƒ€λ°μ΄ν„°λ§Œ. +> AI 응닡 ν…μŠ€νŠΈλ₯Ό μ–»μœΌλ €λ©΄ LS ConnectRPC의 `GetCascadeTrajectorySteps` ν•„μš”. + +--- + +## μ‹€νŒ¨ν•œ 접근법 (μ°Έκ³ ) + +| μ ‘κ·Ό | κ²°κ³Ό | 이유 | +|------|------|------| +| `onDidChangeTextDocument` | ❌ | Agent νŒ¨λ„μ€ WebView, TextDocument 이벀트 λ―Έλ°œμƒ | +| `antigravity.getManagerTrace` | ❌ undefined | κ°€μš© 데이터 μ—†μŒ | +| `antigravity.getWorkbenchTrace` | ❌ undefined | κ°€μš© 데이터 μ—†μŒ | +| `brain/` 파일 λͺ¨λ‹ˆν„°λ§ | β–³ partial | task.md/walkthrough.md만 β€” AI 응닡 ν…μŠ€νŠΈ μ—†μŒ | +| `getDiagnostics.agentWindowConsoleLogs` | ❌ μ—†μŒ | μ‹œμŠ€ν…œ 둜그뿐 |