using System.IO; using System.Linq; using UnityEngine; using Newtonsoft.Json; using System.Collections.Generic; namespace LLM.Editor.Analysis { /// /// Provides a list of all packages currently installed in the project /// by reading the package manifest and lock files. /// public class PackageManagerProvider : IContextProvider { private class ManifestFile { public Dictionary dependencies; } private class LockFile { public Dictionary dependencies; } private class PackageLock { public string version; public int depth; public string source; } public class PackageInfo { public string name; public string version; public string source; } public object GetContext(Object target, string qualifier) { var lockJsonPath = Path.Combine(Application.dataPath, "..", "Packages", "packages-lock.json"); var manifestJsonPath = Path.Combine(Application.dataPath, "..", "Packages", "manifest.json"); if (File.Exists(lockJsonPath)) { try { var json = File.ReadAllText(lockJsonPath); var lockFile = JsonConvert.DeserializeObject(json); var packages = lockFile.dependencies.Select(kvp => new PackageInfo { name = kvp.Key, version = kvp.Value.version, source = kvp.Value.source }).ToList(); return packages; } catch (System.Exception e) { return $"Error parsing packages-lock.json: {e.Message}"; } } if (File.Exists(manifestJsonPath)) { try { var json = File.ReadAllText(manifestJsonPath); var manifestFile = JsonConvert.DeserializeObject(json); var packages = manifestFile.dependencies.Select(kvp => new PackageInfo { name = kvp.Key, version = kvp.Value, source = "manifest" }).ToList(); return packages; } catch (System.Exception e) { return $"Error parsing manifest.json: {e.Message}"; } } return "Error: Could not find 'packages-lock.json' or 'manifest.json' in the Packages folder."; } } }