Files
claudetools/imported-conversations/general-work/claude-general/bbbf829f-eb67-4922-93ef-f2aae5682af9/tool-results/toolu_01QAVqeZsE2uscXVk4MxXiJU.txt
Mike Swanson 75ce1c2fd5 feat: Add Sequential Thinking to Code Review + Frontend Validation
Enhanced code review and frontend validation with intelligent triggers:

Code Review Agent Enhancement:
- Added Sequential Thinking MCP integration for complex issues
- Triggers on 2+ rejections or 3+ critical issues
- New escalation format with root cause analysis
- Comprehensive solution strategies with trade-off evaluation
- Educational feedback to break rejection cycles
- Files: .claude/agents/code-review.md (+308 lines)
- Docs: CODE_REVIEW_ST_ENHANCEMENT.md, CODE_REVIEW_ST_TESTING.md

Frontend Design Skill Enhancement:
- Automatic invocation for ANY UI change
- Comprehensive validation checklist (200+ checkpoints)
- 8 validation categories (visual, interactive, responsive, a11y, etc.)
- 3 validation levels (quick, standard, comprehensive)
- Integration with code review workflow
- Files: .claude/skills/frontend-design/SKILL.md (+120 lines)
- Docs: UI_VALIDATION_CHECKLIST.md (462 lines), AUTOMATIC_VALIDATION_ENHANCEMENT.md (587 lines)

Settings Optimization:
- Repaired .claude/settings.local.json (fixed m365 pattern)
- Reduced permissions from 49 to 33 (33% reduction)
- Removed duplicates, sorted alphabetically
- Created SETTINGS_PERMISSIONS.md documentation

Checkpoint Command Enhancement:
- Dual checkpoint system (git + database)
- Saves session context to API for cross-machine recall
- Includes git metadata in database context
- Files: .claude/commands/checkpoint.md (+139 lines)

Decision Rationale:
- Sequential Thinking MCP breaks rejection cycles by identifying root causes
- Automatic frontend validation catches UI issues before code review
- Dual checkpoints enable complete project memory across machines
- Settings optimization improves maintainability

Total: 1,200+ lines of documentation and enhancements

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 16:23:52 -07:00

381 lines
13 KiB
Plaintext

1→syntax = "proto3";
2→package guruconnect;
3→
4→// ============================================================================
5→// Session Management
6→// ============================================================================
7→
8→message SessionRequest {
9→ string agent_id = 1;
10→ string session_token = 2;
11→ SessionType session_type = 3;
12→ string client_version = 4;
13→}
14→
15→message SessionResponse {
16→ bool success = 1;
17→ string session_id = 2;
18→ string error = 3;
19→ DisplayInfo display_info = 4;
20→}
21→
22→enum SessionType {
23→ SCREEN_CONTROL = 0;
24→ VIEW_ONLY = 1;
25→ BACKSTAGE = 2;
26→ FILE_TRANSFER = 3;
27→}
28→
29→// ============================================================================
30→// Display Information
31→// ============================================================================
32→
33→message DisplayInfo {
34→ repeated Display displays = 1;
35→ int32 primary_display = 2;
36→}
37→
38→message Display {
39→ int32 id = 1;
40→ string name = 2;
41→ int32 x = 3;
42→ int32 y = 4;
43→ int32 width = 5;
44→ int32 height = 6;
45→ bool is_primary = 7;
46→}
47→
48→message SwitchDisplay {
49→ int32 display_id = 1;
50→}
51→
52→// ============================================================================
53→// Video Frames
54→// ============================================================================
55→
56→message VideoFrame {
57→ int64 timestamp = 1;
58→ int32 display_id = 2;
59→ int32 sequence = 3;
60→
61→ oneof encoding {
62→ RawFrame raw = 10;
63→ EncodedFrame vp9 = 11;
64→ EncodedFrame h264 = 12;
65→ EncodedFrame h265 = 13;
66→ }
67→}
68→
69→message RawFrame {
70→ int32 width = 1;
71→ int32 height = 2;
72→ bytes data = 3; // Zstd compressed BGRA
73→ bool compressed = 4;
74→ repeated DirtyRect dirty_rects = 5;
75→ bool is_keyframe = 6; // Full frame vs incremental
76→}
77→
78→message DirtyRect {
79→ int32 x = 1;
80→ int32 y = 2;
81→ int32 width = 3;
82→ int32 height = 4;
83→}
84→
85→message EncodedFrame {
86→ bytes data = 1;
87→ bool keyframe = 2;
88→ int64 pts = 3;
89→ int64 dts = 4;
90→}
91→
92→message VideoAck {
93→ int32 sequence = 1;
94→ int64 timestamp = 2;
95→}
96→
97→// ============================================================================
98→// Cursor
99→// ============================================================================
100→
101→message CursorShape {
102→ uint64 id = 1;
103→ int32 hotspot_x = 2;
104→ int32 hotspot_y = 3;
105→ int32 width = 4;
106→ int32 height = 5;
107→ bytes data = 6; // BGRA bitmap
108→}
109→
110→message CursorPosition {
111→ int32 x = 1;
112→ int32 y = 2;
113→ bool visible = 3;
114→}
115→
116→// ============================================================================
117→// Input Events
118→// ============================================================================
119→
120→message MouseEvent {
121→ int32 x = 1;
122→ int32 y = 2;
123→ MouseButtons buttons = 3;
124→ int32 wheel_delta_x = 4;
125→ int32 wheel_delta_y = 5;
126→ MouseEventType event_type = 6;
127→}
128→
129→enum MouseEventType {
130→ MOUSE_MOVE = 0;
131→ MOUSE_DOWN = 1;
132→ MOUSE_UP = 2;
133→ MOUSE_WHEEL = 3;
134→}
135→
136→message MouseButtons {
137→ bool left = 1;
138→ bool right = 2;
139→ bool middle = 3;
140→ bool x1 = 4;
141→ bool x2 = 5;
142→}
143→
144→message KeyEvent {
145→ bool down = 1; // true = key down, false = key up
146→ KeyEventType key_type = 2;
147→ uint32 vk_code = 3; // Virtual key code (Windows VK_*)
148→ uint32 scan_code = 4; // Hardware scan code
149→ string unicode = 5; // Unicode character (for text input)
150→ Modifiers modifiers = 6;
151→}
152→
153→enum KeyEventType {
154→ KEY_VK = 0; // Virtual key code
155→ KEY_SCAN = 1; // Scan code
156→ KEY_UNICODE = 2; // Unicode character
157→}
158→
159→message Modifiers {
160→ bool ctrl = 1;
161→ bool alt = 2;
162→ bool shift = 3;
163→ bool meta = 4; // Windows key
164→ bool caps_lock = 5;
165→ bool num_lock = 6;
166→}
167→
168→message SpecialKeyEvent {
169→ SpecialKey key = 1;
170→}
171→
172→enum SpecialKey {
173→ CTRL_ALT_DEL = 0;
174→ LOCK_SCREEN = 1;
175→ PRINT_SCREEN = 2;
176→}
177→
178→// ============================================================================
179→// Clipboard
180→// ============================================================================
181→
182→message ClipboardData {
183→ ClipboardFormat format = 1;
184→ bytes data = 2;
185→ string mime_type = 3;
186→}
187→
188→enum ClipboardFormat {
189→ CLIPBOARD_TEXT = 0;
190→ CLIPBOARD_HTML = 1;
191→ CLIPBOARD_RTF = 2;
192→ CLIPBOARD_IMAGE = 3;
193→ CLIPBOARD_FILES = 4;
194→}
195→
196→message ClipboardRequest {
197→ // Request current clipboard content
198→}
199→
200→// ============================================================================
201→// Quality Control
202→// ============================================================================
203→
204→message QualitySettings {
205→ QualityPreset preset = 1;
206→ int32 custom_fps = 2; // 1-60
207→ int32 custom_bitrate = 3; // kbps
208→ CodecPreference codec = 4;
209→}
210→
211→enum QualityPreset {
212→ QUALITY_AUTO = 0;
213→ QUALITY_LOW = 1; // Low bandwidth
214→ QUALITY_BALANCED = 2;
215→ QUALITY_HIGH = 3; // Best quality
216→}
217→
218→enum CodecPreference {
219→ CODEC_AUTO = 0;
220→ CODEC_RAW = 1; // Raw + Zstd (LAN)
221→ CODEC_VP9 = 2;
222→ CODEC_H264 = 3;
223→ CODEC_H265 = 4;
224→}
225→
226→message LatencyReport {
227→ int64 rtt_ms = 1;
228→ int32 fps = 2;
229→ int32 bitrate_kbps = 3;
230→}
231→
232→// ============================================================================
233→// Chat Messages
234→// ============================================================================
235→
236→message ChatMessage {
237→ string id = 1; // Unique message ID
238→ string sender = 2; // "technician" or "client"
239→ string content = 3; // Message text
240→ int64 timestamp = 4; // Unix timestamp
241→}
242→
243→// ============================================================================
244→// Control Messages
245→// ============================================================================
246→
247→message Heartbeat {
248→ int64 timestamp = 1;
249→}
250→
251→message HeartbeatAck {
252→ int64 client_timestamp = 1;
253→ int64 server_timestamp = 2;
254→}
255→
256→message Disconnect {
257→ string reason = 1;
258→}
259→
260→// Server commands agent to start streaming video
261→message StartStream {
262→ string viewer_id = 1; // ID of viewer requesting stream
263→ int32 display_id = 2; // Which display to stream (0 = primary)
264→}
265→
266→// Server commands agent to stop streaming
267→message StopStream {
268→ string viewer_id = 1; // Which viewer disconnected
269→}
270→
271→// Agent reports its status periodically when idle
272→message AgentStatus {
273→ string hostname = 1;
274→ string os_version = 2;
275→ bool is_elevated = 3;
276→ int64 uptime_secs = 4;
277→ int32 display_count = 5;
278→ bool is_streaming = 6;
279→ string agent_version = 7; // Agent version (e.g., "0.1.0-abc123")
280→}
281→
282→// Server commands agent to uninstall itself
283→message AdminCommand {
284→ AdminCommandType command = 1;
285→ string reason = 2; // Why the command was issued
286→}
287→
288→enum AdminCommandType {
289→ ADMIN_UNINSTALL = 0; // Uninstall agent and remove from startup
290→ ADMIN_RESTART = 1; // Restart the agent process
291→ ADMIN_UPDATE = 2; // Download and install update
292→}
293→
294→// ============================================================================
295→// Auto-Update Messages
296→// ============================================================================
297→
298→// Update command details (sent with AdminCommand or standalone)
299→message UpdateInfo {
300→ string version = 1; // Target version (e.g., "0.2.0")
301→ string download_url = 2; // HTTPS URL to download new binary
302→ string checksum_sha256 = 3; // SHA-256 hash for verification
303→ bool mandatory = 4; // If true, agent must update immediately
304→}
305→
306→// Update status report (agent -> server)
307→message UpdateStatus {
308→ string current_version = 1; // Current running version
309→ UpdateState state = 2; // Current update state
310→ string error_message = 3; // Error details if state is FAILED
311→ int32 progress_percent = 4; // Download progress (0-100)
312→}
313→
314→enum UpdateState {
315→ UPDATE_IDLE = 0; // No update in progress
316→ UPDATE_CHECKING = 1; // Checking for updates
317→ UPDATE_DOWNLOADING = 2; // Downloading new binary
318→ UPDATE_VERIFYING = 3; // Verifying checksum
319→ UPDATE_INSTALLING = 4; // Installing (rename/copy)
320→ UPDATE_RESTARTING = 5; // About to restart
321→ UPDATE_COMPLETE = 6; // Update successful (after restart)
322→ UPDATE_FAILED = 7; // Update failed
323→}
324→
325→// ============================================================================
326→// Top-Level Message Wrapper
327→// ============================================================================
328→
329→message Message {
330→ oneof payload {
331→ // Session
332→ SessionRequest session_request = 1;
333→ SessionResponse session_response = 2;
334→
335→ // Video
336→ VideoFrame video_frame = 10;
337→ VideoAck video_ack = 11;
338→ SwitchDisplay switch_display = 12;
339→
340→ // Cursor
341→ CursorShape cursor_shape = 15;
342→ CursorPosition cursor_position = 16;
343→
344→ // Input
345→ MouseEvent mouse_event = 20;
346→ KeyEvent key_event = 21;
347→ SpecialKeyEvent special_key = 22;
348→
349→ // Clipboard
350→ ClipboardData clipboard_data = 30;
351→ ClipboardRequest clipboard_request = 31;
352→
353→ // Quality
354→ QualitySettings quality_settings = 40;
355→ LatencyReport latency_report = 41;
356→
357→ // Control
358→ Heartbeat heartbeat = 50;
359→ HeartbeatAck heartbeat_ack = 51;
360→ Disconnect disconnect = 52;
361→ StartStream start_stream = 53;
362→ StopStream stop_stream = 54;
363→ AgentStatus agent_status = 55;
364→
365→ // Chat
366→ ChatMessage chat_message = 60;
367→
368→ // Admin commands (server -> agent)
369→ AdminCommand admin_command = 70;
370→
371→ // Auto-update messages
372→ UpdateInfo update_info = 75; // Server -> Agent: update available
373→ UpdateStatus update_status = 76; // Agent -> Server: update progress
374→ }
375→}
376→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>