MCPcopy
hub / github.com/github/spec-kit / resolve_with_source

Method resolve_with_source

src/specify_cli/presets/__init__.py:2823–2883  ·  view source on GitHub ↗

Resolve a template name and return source attribution. Args: template_name: Template name (e.g., "spec-template") template_type: Template type ("template", "command", or "script") Returns: Dictionary with 'path' and 'source' keys, or None if not

(
        self,
        template_name: str,
        template_type: str = "template",
    )

Source from the content-addressed store, hash-verified

2821 return None
2822
2823 def resolve_with_source(
2824 self,
2825 template_name: str,
2826 template_type: str = "template",
2827 ) -> Optional[Dict[str, str]]:
2828 """Resolve a template name and return source attribution.
2829
2830 Args:
2831 template_name: Template name (e.g., "spec-template")
2832 template_type: Template type ("template", "command", or "script")
2833
2834 Returns:
2835 Dictionary with 'path' and 'source' keys, or None if not found
2836 """
2837 # Delegate to resolve() for the actual lookup, then determine source
2838 resolved = self.resolve(template_name, template_type)
2839 if resolved is None:
2840 return None
2841
2842 resolved_str = str(resolved)
2843
2844 # Determine source attribution
2845 if str(self.overrides_dir) in resolved_str:
2846 return {"path": resolved_str, "source": "project override"}
2847
2848 if str(self.presets_dir) in resolved_str and self.presets_dir.exists():
2849 registry = PresetRegistry(self.presets_dir)
2850 for pack_id, _metadata in registry.list_by_priority():
2851 pack_dir = self.presets_dir / pack_id
2852 try:
2853 resolved.relative_to(pack_dir)
2854 meta = registry.get(pack_id)
2855 version = meta.get("version", "?") if meta else "?"
2856 return {
2857 "path": resolved_str,
2858 "source": f"{pack_id} v{version}",
2859 }
2860 except ValueError:
2861 continue
2862
2863 for _priority, ext_id, ext_meta in self._get_all_extensions_by_priority():
2864 ext_dir = self.extensions_dir / ext_id
2865 if not ext_dir.is_dir():
2866 continue
2867 try:
2868 resolved.relative_to(ext_dir)
2869 if ext_meta:
2870 version = ext_meta.get("version", "?")
2871 return {
2872 "path": resolved_str,
2873 "source": f"extension:{ext_id} v{version}",
2874 }
2875 else:
2876 return {
2877 "path": resolved_str,
2878 "source": f"extension:{ext_id} (unregistered)",
2879 }
2880 except ValueError:

Calls 5

resolveMethod · 0.95
list_by_priorityMethod · 0.95
getMethod · 0.95
PresetRegistryClass · 0.85