feat: support merging multiple subscriptions

This commit is contained in:
2026-07-19 23:58:02 +08:00
parent fb4d927220
commit 087869d84f
17 changed files with 1341 additions and 60 deletions

View File

@ -9,7 +9,7 @@ func newConfigCmd() *cobra.Command {
Use: "config",
Short: "Manage core configuration",
}
cmd.PersistentFlags().StringVar(&configFile, "config-file", "", "Path to the user config YAML file (default: core-config.yaml in config dir)")
cmd.PersistentFlags().StringVar(&configFile, "config-file", "", "Path to the user config YAML file (default: config/core-config.yaml in config dir)")
cmd.PersistentFlags().StringVar(&outputFile, "output-file", "", "Path to the generated config file (default: generated_config.yaml in config dir)")
cmd.PersistentFlags().StringVar(&subscriptionName, "subscription", "", "Name of the subscription to use for config generation (default: active subscription)")

View File

@ -16,6 +16,7 @@ func newSubscriptionCmd() *cobra.Command {
newSubscriptionSetURLCmd(),
newSubscriptionGetURLCmd(),
newSubscriptionActivateCmd(),
newSubscriptionDeactivateCmd(),
newSubscriptionListCmd(),
newSubscriptionStorageCmd(),
)
@ -126,7 +127,7 @@ func newSubscriptionGetURLCmd() *cobra.Command {
func newSubscriptionActivateCmd() *cobra.Command {
return &cobra.Command{
Use: "activate <name>",
Short: "Activate a subscription",
Short: "Activate a subscription (additive — other active subscriptions stay active)",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
m, err := newManagers("", "", "")
@ -142,6 +143,25 @@ func newSubscriptionActivateCmd() *cobra.Command {
}
}
func newSubscriptionDeactivateCmd() *cobra.Command {
return &cobra.Command{
Use: "deactivate <name>",
Short: "Deactivate a subscription",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
m, err := newManagers("", "", "")
if err != nil {
return err
}
m.Subscription.DeactivateSubscription(args[0])
if m.CoreConfig.Apply() {
m.Core.ReloadService("mihomo")
}
return nil
},
}
}
func newSubscriptionListCmd() *cobra.Command {
return &cobra.Command{
Use: "list",