-
Notifications
You must be signed in to change notification settings - Fork 3.2k
fix(copilot): commands #2811
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(copilot): commands #2811
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Greptile SummaryRefactored slash command handling to properly separate command IDs from display labels, fixing the mapping from Key Changes
Concerns
Confidence Score: 3/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant User
participant SlashMenu
participant UserInput
participant ContextMgmt
participant Store
User->>UserInput: Types "/" in textarea
UserInput->>SlashMenu: Opens slash menu
SlashMenu->>SlashMenu: Renders TOP_LEVEL_COMMANDS<br/>(Fast, Research, Actions)
User->>SlashMenu: Selects "Actions" command
SlashMenu->>UserInput: onSelectCommand('superagent')
UserInput->>UserInput: Maps 'superagent' to 'Actions'<br/>via COMMAND_DISPLAY_LABELS
UserInput->>ContextMgmt: addContext({kind: 'slash_command',<br/>command: 'superagent',<br/>label: 'Actions'})
UserInput->>UserInput: Replaces '/super...' with 'Actions'<br/>in textarea
User->>UserInput: Submits message
UserInput->>Store: sendMessage with contexts
Store->>Store: Extracts command field:<br/>['superagent']
Store->>Store: Calls .toLowerCase() on command
Store->>Store: Sends to API with<br/>commands: ['superagent']
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
3 files reviewed, 3 comments
| const mirrorDiv = document.createElement('div') | ||
| mirrorDiv.style.position = 'absolute' | ||
| mirrorDiv.style.visibility = 'hidden' | ||
| mirrorDiv.style.whiteSpace = 'pre-wrap' | ||
| mirrorDiv.style.wordWrap = 'break-word' | ||
| mirrorDiv.style.font = style.font | ||
| mirrorDiv.style.padding = style.padding | ||
| mirrorDiv.style.border = style.border | ||
| mirrorDiv.style.width = style.width | ||
| mirrorDiv.style.lineHeight = style.lineHeight | ||
| mirrorDiv.style.boxSizing = style.boxSizing | ||
| mirrorDiv.style.letterSpacing = style.letterSpacing | ||
| mirrorDiv.style.textTransform = style.textTransform | ||
| mirrorDiv.style.textIndent = style.textIndent | ||
| mirrorDiv.style.textAlign = style.textAlign | ||
| mirrorDiv.textContent = message.substring(0, caretPos) | ||
|
|
||
| const caretMarker = document.createElement('span') | ||
| caretMarker.style.display = 'inline-block' | ||
| caretMarker.style.width = '0px' | ||
| caretMarker.style.padding = '0' | ||
| caretMarker.style.border = '0' | ||
| mirrorDiv.appendChild(caretMarker) | ||
|
|
||
| document.body.appendChild(mirrorDiv) | ||
| const markerRect = caretMarker.getBoundingClientRect() | ||
| const mirrorRect = mirrorDiv.getBoundingClientRect() | ||
| document.body.removeChild(mirrorDiv) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: DOM manipulation runs on every render, creating performance overhead. This code creates and removes DOM elements each time the component re-renders (on every keystroke in the textarea). Extract this logic to useMemo with dependencies on caretPos, message, and textareaEl to prevent unnecessary recalculations.
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/components/slash-menu/slash-menu.tsx
Line: 73:100
Comment:
**style:** DOM manipulation runs on every render, creating performance overhead. This code creates and removes DOM elements each time the component re-renders (on every keystroke in the textarea). Extract this logic to `useMemo` with dependencies on `caretPos`, `message`, and `textareaEl` to prevent unnecessary recalculations.
How can I resolve this? If you propose a fix, please make it concise.| const mirrorDiv = document.createElement('div') | ||
| mirrorDiv.style.position = 'absolute' | ||
| mirrorDiv.style.visibility = 'hidden' | ||
| mirrorDiv.style.whiteSpace = 'pre-wrap' | ||
| mirrorDiv.style.wordWrap = 'break-word' | ||
| mirrorDiv.style.font = style.font | ||
| mirrorDiv.style.padding = style.padding | ||
| mirrorDiv.style.border = style.border | ||
| mirrorDiv.style.width = style.width | ||
| mirrorDiv.style.lineHeight = style.lineHeight | ||
| mirrorDiv.style.boxSizing = style.boxSizing | ||
| mirrorDiv.style.letterSpacing = style.letterSpacing | ||
| mirrorDiv.style.textTransform = style.textTransform | ||
| mirrorDiv.style.textIndent = style.textIndent | ||
| mirrorDiv.style.textAlign = style.textAlign | ||
| mirrorDiv.textContent = message.substring(0, caretPos) | ||
|
|
||
| const caretMarker = document.createElement('span') | ||
| caretMarker.style.display = 'inline-block' | ||
| caretMarker.style.width = '0px' | ||
| caretMarker.style.padding = '0' | ||
| caretMarker.style.border = '0' | ||
| mirrorDiv.appendChild(caretMarker) | ||
|
|
||
| document.body.appendChild(mirrorDiv) | ||
| const markerRect = caretMarker.getBoundingClientRect() | ||
| const mirrorRect = mirrorDiv.getBoundingClientRect() | ||
| document.body.removeChild(mirrorDiv) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: DOM manipulation runs on every render, creating performance overhead. This code creates and removes DOM elements each time the component re-renders. Extract this logic to useMemo with dependencies on caretPos, message, and textareaEl.
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/components/mention-menu/mention-menu.tsx
Line: 301:328
Comment:
**style:** DOM manipulation runs on every render, creating performance overhead. This code creates and removes DOM elements each time the component re-renders. Extract this logic to `useMemo` with dependencies on `caretPos`, `message`, and `textareaEl`.
How can I resolve this? If you propose a fix, please make it concise.| const TOP_LEVEL_COMMANDS = ['fast', 'research', 'superagent'] as const | ||
| const WEB_COMMANDS = ['search', 'read', 'scrape', 'crawl'] as const | ||
| const ALL_COMMANDS = [...TOP_LEVEL_COMMANDS, ...WEB_COMMANDS] | ||
|
|
||
| const COMMAND_DISPLAY_LABELS: Record<string, string> = { | ||
| superagent: 'Actions', | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Duplicate command configuration exists in both user-input.tsx (as string arrays) and slash-menu.tsx (as object arrays). This creates a maintenance burden - changes to available commands must be synchronized across both files.
Context Used: Context from dashboard - When defining properties for components, use a dedicated config file (.ts) for configuration and kee... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/user-input.tsx
Line: 43:49
Comment:
**style:** Duplicate command configuration exists in both `user-input.tsx` (as string arrays) and `slash-menu.tsx` (as object arrays). This creates a maintenance burden - changes to available commands must be synchronized across both files.
**Context Used:** Context from `dashboard` - When defining properties for components, use a dedicated config file (.ts) for configuration and kee... ([source](https://app.greptile.com/review/custom-context?memory=49f7e332-4733-48c6-834e-ec03d4abbeb7))
How can I resolve this? If you propose a fix, please make it concise.
Summary
Fix copilot slash commands
Type of Change
Testing
Manual
Checklist