@@ -38,7 +38,11 @@ def resolve_dependencies(
3838 if working_dir is not None and not executor .path_exists (working_dir ):
3939 raise ValueError (f"Working directory does not exist: { working_dir } " )
4040
41- result = {}
41+ result : dict [str , Any ] = {}
42+ project_packages : list [dict [str , Any ]] = []
43+ project_metadata : dict [str , dict [str , Any ]] = {}
44+ system_packages : list [dict [str , Any ]] = []
45+ system_metadata : dict [str , dict [str , Any ]] = {}
4246
4347 if only_container_info :
4448 # Only run docker-info detector when only container info is requested
@@ -63,22 +67,31 @@ def resolve_dependencies(
6367 if self .debug :
6468 print (f"{ detector_name } is usable, extracting dependencies..." )
6569
66- dependencies = detector .get_dependencies (executor , working_dir )
67-
68- # Special handling for docker-info detector (simplified format)
70+ # Special handling for docker-info detector
6971 if detector_name == "docker-info" :
70- if dependencies : # Only include if we got container info
71- result ["_container-info" ] = dependencies
72+ packages , metadata = detector .get_dependencies (executor , working_dir )
73+ if metadata : # Only include if we got container info
74+ result ["_container-info" ] = metadata
7275 if self .debug :
7376 print (f"Found container info for { detector_name } " )
7477 else :
75- # Standard handling for other detectors
76- if dependencies .get ("dependencies" ) or self .debug :
77- result [detector_name ] = dependencies
78-
79- if self .debug :
80- dep_count = len (dependencies .get ("dependencies" , {}))
81- print (f"Found { dep_count } dependencies for { detector_name } " )
78+ # Standard handling for package detectors
79+ packages , metadata = detector .get_dependencies (executor , working_dir )
80+
81+ if detector .has_system_scope (executor , working_dir ):
82+ # System scope packages
83+ system_packages .extend (packages )
84+ if metadata :
85+ system_metadata [detector_name ] = metadata
86+ if self .debug :
87+ print (f"Found { len (packages )} system packages for { detector_name } " )
88+ else :
89+ # Project scope packages
90+ project_packages .extend (packages )
91+ if metadata :
92+ project_metadata [detector_name ] = metadata
93+ if self .debug :
94+ print (f"Found { len (packages )} project packages for { detector_name } " )
8295 else :
8396 if self .debug :
8497 print (f"{ detector_name } is not available" )
@@ -88,4 +101,15 @@ def resolve_dependencies(
88101 print (f"Error checking { detector_name } : { str (e )} " )
89102 continue
90103
104+ # Build final result structure matching proposal
105+ if project_packages or project_metadata :
106+ project_section : dict [str , Any ] = {"packages" : project_packages }
107+ project_section .update (project_metadata )
108+ result ["project" ] = project_section
109+
110+ if system_packages or system_metadata :
111+ system_section : dict [str , Any ] = {"packages" : system_packages }
112+ system_section .update (system_metadata )
113+ result ["system" ] = system_section
114+
91115 return result
0 commit comments