@@ -19,7 +19,8 @@ import {
1919 DEFAULT_SYSTEM_MESSAGES_URL ,
2020} from "core/llm/defaultSystemMessages" ;
2121import { getRuleDisplayName } from "core/llm/rules/rules-utils" ;
22- import { useContext , useMemo } from "react" ;
22+ import { useContext , useMemo , useState } from "react" ;
23+ import { DropdownButton } from "../../../components/DropdownButton" ;
2324import HeaderButtonWithToolTip from "../../../components/gui/HeaderButtonWithToolTip" ;
2425import Switch from "../../../components/gui/Switch" ;
2526import { useMainEditor } from "../../../components/mainInput/TipTapEditor" ;
@@ -182,8 +183,8 @@ const RuleCard: React.FC<RuleCardProps> = ({ rule }) => {
182183 ) ;
183184 }
184185
185- const smallFont = useFontSize ( - 2 ) ;
186- const tinyFont = useFontSize ( - 3 ) ;
186+ const smallFont = fontSize ( - 2 ) ;
187+ const tinyFont = fontSize ( - 3 ) ;
187188 return (
188189 < div
189190 className = { `border-border flex flex-col rounded-sm px-2 py-1.5 transition-colors ${ isDisabled ? "opacity-50" : "" } ` }
@@ -407,18 +408,30 @@ function addDefaultSystemMessage(
407408 }
408409}
409410
411+ // Define dropdown options for global rules
412+ const globalRulesOptions = [
413+ { value : "workspace" , label : "Current workspace" } ,
414+ { value : "global" , label : "Global" } ,
415+ ] ;
416+
410417function RulesSubSection ( ) {
411418 const { selectedProfile } = useAuth ( ) ;
412419 const config = useAppSelector ( ( store ) => store . config . config ) ;
413420 const mode = useAppSelector ( ( store ) => store . session . mode ) ;
414421 const ideMessenger = useContext ( IdeMessengerContext ) ;
415422 const isLocal = selectedProfile ?. profileType === "local" ;
423+ const [ globalRulesMode , setGlobalRulesMode ] = useState < string > ( "workspace" ) ;
416424
417- const handleAddRule = ( ) => {
425+ const handleAddRule = ( mode ?: string ) => {
426+ const currentMode = mode || globalRulesMode ;
418427 if ( isLocal ) {
419- void ideMessenger . request ( "config/addLocalWorkspaceBlock" , {
420- blockType : "rules" ,
421- } ) ;
428+ if ( currentMode === "global" ) {
429+ void ideMessenger . request ( "config/addGlobalRule" , undefined ) ;
430+ } else {
431+ void ideMessenger . request ( "config/addLocalWorkspaceBlock" , {
432+ blockType : "rules" ,
433+ } ) ;
434+ }
422435 } else {
423436 void ideMessenger . request ( "controlPlane/openUrl" , {
424437 path : "?type=rules" ,
@@ -427,6 +440,11 @@ function RulesSubSection() {
427440 }
428441 } ;
429442
443+ const handleOptionClick = ( value : string ) => {
444+ setGlobalRulesMode ( value ) ;
445+ handleAddRule ( value ) ;
446+ } ;
447+
430448 const sortedRules : RuleWithSource [ ] = useMemo ( ( ) => {
431449 const rules = [ ...config . rules . map ( ( rule ) => ( { ...rule } ) ) ] ;
432450
@@ -469,12 +487,22 @@ function RulesSubSection() {
469487
470488 return (
471489 < div >
472- < ConfigHeader
473- title = "Rules"
474- variant = "sm"
475- onAddClick = { handleAddRule }
476- addButtonTooltip = "Add rule"
477- />
490+ { isLocal ? (
491+ < DropdownButton
492+ title = "Rules"
493+ variant = "sm"
494+ options = { globalRulesOptions }
495+ onOptionClick = { handleOptionClick }
496+ addButtonTooltip = "Add rules"
497+ />
498+ ) : (
499+ < ConfigHeader
500+ title = "Rules"
501+ variant = "sm"
502+ onAddClick = { ( ) => handleAddRule ( ) }
503+ addButtonTooltip = "Add rules"
504+ />
505+ ) }
478506
479507 < Card >
480508 { sortedRules . length > 0 ? (
0 commit comments