@@ -387,6 +387,7 @@ class SkillConfig(BaseModel):
387387 model : str | None = None
388388 enabled : bool = True
389389 allow_chat_ids : list [str ] | None = None
390+ capability_provider : CapabilityProviderConfig | None = None
390391
391392 @field_validator ("allow_chat_ids" , mode = "before" )
392393 @classmethod
@@ -413,7 +414,8 @@ def get_env_vars(self) -> dict[str, str]:
413414 return {
414415 k .upper (): str (v )
415416 for k , v in self .model_dump ().items ()
416- if k .lower () not in {"model" , "enabled" , "allow_chat_ids" }
417+ if k .lower ()
418+ not in {"model" , "enabled" , "allow_chat_ids" , "capability_provider" }
417419 }
418420
419421
@@ -470,18 +472,6 @@ def _validate_source(self) -> "SkillSource":
470472 return self
471473
472474
473- class BundleConfig (BaseModel ):
474- """Configuration for a bundled optional integration package."""
475-
476- enabled : bool = False
477-
478-
479- class BundlesConfig (BaseModel ):
480- """Top-level bundle toggles from [bundles.*]."""
481-
482- gog : BundleConfig = Field (default_factory = BundleConfig )
483-
484-
485475class ConfigError (Exception ):
486476 """Configuration error."""
487477
@@ -542,8 +532,6 @@ def _validate_timezone(cls, v: str) -> str:
542532 skills : dict [str , SkillConfig ] = Field (default_factory = dict )
543533 # Skill defaults from [skills.defaults]
544534 skill_defaults : SkillDefaultsConfig = Field (default_factory = SkillDefaultsConfig )
545- # Bundle presets from [bundles.*]
546- bundles : BundlesConfig = Field (default_factory = BundlesConfig )
547535
548536 # External skill sources: [[skills.sources]] array
549537 skill_sources : list [SkillSource ] = Field (default_factory = list )
@@ -607,7 +595,7 @@ def _extract_skills_config(cls, data: dict) -> dict:
607595 # Remaining entries are per-skill configs
608596 data ["skills" ] = skills_data
609597
610- _apply_bundle_presets (data )
598+ _apply_gog_skill_provider_preset (data )
611599 return data
612600
613601 @model_validator (mode = "after" )
@@ -752,29 +740,17 @@ def get_resolved_env(self) -> dict[str, str]:
752740 }
753741
754742
755- def _apply_bundle_presets (data : dict [str , Any ]) -> None :
756- """Apply opinionated bundle presets without overriding explicit config ."""
757- bundles = data .get ("bundles " )
758- if not isinstance (bundles , dict ):
743+ def _apply_gog_skill_provider_preset (data : dict [str , Any ]) -> None :
744+ """Apply default provider wiring when bundled gog skill is enabled ."""
745+ skills = data .get ("skills " )
746+ if not isinstance (skills , dict ):
759747 return
760- gog = bundles .get ("gog" )
761- if not isinstance (gog , dict ):
748+ gog_skill = skills .get ("gog" )
749+ if not isinstance (gog_skill , dict ):
762750 return
763- enabled = gog .get ("enabled" )
764- if enabled is not True :
751+ if gog_skill .get ("enabled" ) is not True :
765752 return
766753
767- # Enable bundled gog skill by default.
768- skills = data .get ("skills" )
769- if not isinstance (skills , dict ):
770- skills = {}
771- skill_gog = skills .get ("gog" )
772- if not isinstance (skill_gog , dict ):
773- skill_gog = {}
774- skill_gog .setdefault ("enabled" , True )
775- skills ["gog" ] = skill_gog
776- data ["skills" ] = skills
777-
778754 # Wire default external provider bridge command by default.
779755 capabilities = data .get ("capabilities" )
780756 if not isinstance (capabilities , dict ):
@@ -785,6 +761,13 @@ def _apply_bundle_presets(data: dict[str, Any]) -> None:
785761 provider_gog = providers .get ("gog" )
786762 if not isinstance (provider_gog , dict ):
787763 provider_gog = {}
764+
765+ provider_from_skill = gog_skill .get ("capability_provider" )
766+ if isinstance (provider_from_skill , dict ):
767+ for field in ("enabled" , "namespace" , "command" , "timeout_seconds" ):
768+ if field in provider_from_skill :
769+ provider_gog [field ] = provider_from_skill [field ]
770+
788771 provider_gog .setdefault ("enabled" , True )
789772 provider_gog .setdefault ("namespace" , "gog" )
790773 provider_gog .setdefault ("command" , ["gogcli" , "bridge" ])
0 commit comments