@@ -376,8 +376,8 @@ func runPluginListCLI(state *bootstrap.State, args []string, stdout io.Writer, s
376376 return 1
377377 }
378378 settings := runnerMergedSettings (runner )
379- installedPlugins := pluginpkg .LoadPluginDirs (pluginpkg .ProjectPluginDirs (runner .WorkingDirectory ))
380- installed := pluginCLIInstalledEntries (installedPlugins , settings )
379+ installedPlugins := pluginpkg .LoadPluginDirs (pluginpkg .InstalledPluginDirs (runner .WorkingDirectory ))
380+ installed := pluginCLIInstalledEntries (installedPlugins , settings , runner . WorkingDirectory )
381381 if * jsonOutput {
382382 encoder := json .NewEncoder (stdout )
383383 encoder .SetIndent ("" , " " )
@@ -426,23 +426,23 @@ func runPluginInstallCLI(state *bootstrap.State, args []string, stdout io.Writer
426426 return 2
427427 }
428428 if flags .NArg () != 1 {
429- fmt .Fprintln (stderr , "ccgo plugin install: usage: claude plugin install [--scope project] <plugin>" )
429+ fmt .Fprintln (stderr , "ccgo plugin install: usage: claude plugin install [--scope project|user ] <plugin>" )
430430 return 2
431431 }
432432 scope = strings .ToLower (strings .TrimSpace (scope ))
433433 if scope == "" {
434434 scope = "project"
435435 }
436- if scope != "project" {
437- fmt .Fprintf (stderr , "ccgo plugin install: scope %q is not supported yet; use project\n " , scope )
436+ if scope != "project" && scope != "user" {
437+ fmt .Fprintf (stderr , "ccgo plugin install: scope %q is not supported yet; use project or user \n " , scope )
438438 return 2
439439 }
440440 settings , err := pluginCLISettingsFromFiles (state .CWD ())
441441 if err != nil {
442442 fmt .Fprintf (stderr , "ccgo plugin install: %v\n " , err )
443443 return 1
444444 }
445- result , err := pluginpkg .InstallMarketplacePlugin (strings .TrimSpace (flags .Arg (0 )), state .CWD (), settings )
445+ result , err := pluginpkg .InstallMarketplacePluginInScope (strings .TrimSpace (flags .Arg (0 )), state .CWD (), scope , settings )
446446 if err != nil {
447447 fmt .Fprintf (stderr , "ccgo plugin install: %v\n " , err )
448448 return 1
@@ -464,23 +464,23 @@ func runPluginUpdateCLI(state *bootstrap.State, args []string, stdout io.Writer,
464464 return 2
465465 }
466466 if flags .NArg () != 1 {
467- fmt .Fprintln (stderr , "ccgo plugin update: usage: claude plugin update [--scope project] <plugin>" )
467+ fmt .Fprintln (stderr , "ccgo plugin update: usage: claude plugin update [--scope project|user|all ] <plugin>" )
468468 return 2
469469 }
470470 scope = strings .ToLower (strings .TrimSpace (scope ))
471471 if scope == "" {
472472 scope = "project"
473473 }
474- if scope != "project" {
475- fmt .Fprintf (stderr , "ccgo plugin update: scope %q is not supported yet; use project\n " , scope )
474+ if scope != "project" && scope != "user" && scope != "all" {
475+ fmt .Fprintf (stderr , "ccgo plugin update: scope %q is not supported yet; use project, user, or all \n " , scope )
476476 return 2
477477 }
478478 settings , err := pluginCLISettingsFromFiles (state .CWD ())
479479 if err != nil {
480480 fmt .Fprintf (stderr , "ccgo plugin update: %v\n " , err )
481481 return 1
482482 }
483- result , err := pluginpkg .UpdateInstalledMarketplacePlugins (strings .TrimSpace (flags .Arg (0 )), state .CWD (), settings )
483+ result , err := pluginpkg .UpdateInstalledMarketplacePluginsInScope (strings .TrimSpace (flags .Arg (0 )), state .CWD (), scope , settings )
484484 if err != nil {
485485 fmt .Fprintf (stderr , "ccgo plugin update: %v\n " , err )
486486 return 1
@@ -546,7 +546,7 @@ func runPluginDisableAllCLI(state *bootstrap.State, settingsPath string, stdout
546546 fmt .Fprintf (stderr , "ccgo plugin disable: %v\n " , err )
547547 return 1
548548 }
549- plugins := pluginpkg .LoadPluginDirs (pluginpkg .ProjectPluginDirs (state .CWD ()))
549+ plugins := pluginpkg .LoadPluginDirs (pluginpkg .InstalledPluginDirs (state .CWD ()))
550550 states := map [string ]bool {}
551551 for _ , plugin := range plugins {
552552 if pluginpkg .PluginEnabled (plugin , settings .EnabledPlugins ) && strings .TrimSpace (plugin .Name ) != "" {
@@ -844,13 +844,13 @@ func pluginCLILoadOptionalSettings(path string) (contracts.Settings, error) {
844844 return contracts.Settings {}, fmt .Errorf ("load settings %s: %w" , path , err )
845845}
846846
847- func pluginCLIInstalledEntries (plugins []pluginpkg.LoadedPlugin , settings contracts.Settings ) []pluginCLIListEntry {
847+ func pluginCLIInstalledEntries (plugins []pluginpkg.LoadedPlugin , settings contracts.Settings , cwd string ) []pluginCLIListEntry {
848848 out := make ([]pluginCLIListEntry , 0 , len (plugins ))
849849 for _ , plugin := range plugins {
850850 entry := pluginCLIListEntry {
851851 ID : pluginCLIID (plugin ),
852852 Version : pluginCLIVersion (plugin .Version ),
853- Scope : "project" ,
853+ Scope : pluginpkg . InstalledPluginScope ( cwd , plugin . Root ) ,
854854 Enabled : pluginpkg .PluginEnabled (plugin , settings .EnabledPlugins ),
855855 InstallPath : plugin .Root ,
856856 }
@@ -3397,7 +3397,7 @@ func runnerPluginSummaries(runner conversation.Runner) []printStreamPlugin {
33973397}
33983398
33993399func runnerLocalPlugins (runner conversation.Runner ) []pluginpkg.LoadedPlugin {
3400- return pluginpkg .LoadPluginDirsWithSettings (pluginpkg .ProjectPluginDirs (runner .WorkingDirectory ), runnerMergedSettings (runner ))
3400+ return pluginpkg .LoadPluginDirsWithSettings (pluginpkg .InstalledPluginDirs (runner .WorkingDirectory ), runnerMergedSettings (runner ))
34013401}
34023402
34033403func runnerMergedSettings (runner conversation.Runner ) contracts.Settings {
0 commit comments