dep.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package bundle
  2. import (
  3. "os"
  4. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  5. "github.com/langgenius/dify-plugin-daemon/pkg/bundle_packager"
  6. "github.com/langgenius/dify-plugin-daemon/pkg/entities/bundle_entities"
  7. )
  8. func loadBundlePackager(bundlePath string) (bundle_packager.BundlePackager, error) {
  9. // state file, check if it's a file or a directory
  10. stateFile, err := os.Stat(bundlePath)
  11. if err != nil {
  12. return nil, err
  13. }
  14. if stateFile.IsDir() {
  15. return bundle_packager.NewLocalBundlePackager(bundlePath)
  16. }
  17. return bundle_packager.NewZipBundlePackager(bundlePath)
  18. }
  19. func AddGithubDependency(bundlePath string, pattern bundle_entities.GithubRepoPattern) {
  20. packager, err := loadBundlePackager(bundlePath)
  21. if err != nil {
  22. log.Error("Failed to load bundle packager: %v", err)
  23. return
  24. }
  25. packager.AppendGithubDependency(pattern)
  26. if err := packager.Save(); err != nil {
  27. log.Error("Failed to save bundle packager: %v", err)
  28. return
  29. }
  30. log.Info("Successfully added github dependency")
  31. }
  32. func AddMarketplaceDependency(bundlePath string, pattern bundle_entities.MarketplacePattern) {
  33. packager, err := loadBundlePackager(bundlePath)
  34. if err != nil {
  35. log.Error("Failed to load bundle packager: %v", err)
  36. return
  37. }
  38. packager.AppendMarketplaceDependency(pattern)
  39. if err := packager.Save(); err != nil {
  40. log.Error("Failed to save bundle packager: %v", err)
  41. return
  42. }
  43. log.Info("Successfully added marketplace dependency")
  44. }
  45. func AddPackageDependency(bundlePath string, path string) {
  46. packager, err := loadBundlePackager(bundlePath)
  47. if err != nil {
  48. log.Error("Failed to load bundle packager: %v", err)
  49. return
  50. }
  51. if err := packager.AppendPackageDependency(path); err != nil {
  52. log.Error("Failed to append package dependency: %v", err)
  53. return
  54. }
  55. if err := packager.Save(); err != nil {
  56. log.Error("Failed to save bundle packager: %v", err)
  57. return
  58. }
  59. log.Info("Successfully added package dependency")
  60. }
  61. func RegenerateBundle(bundlePath string) {
  62. bundle, err := generateNewBundle()
  63. if err != nil {
  64. log.Error("Failed to generate new bundle: %v", err)
  65. return
  66. }
  67. packager, err := loadBundlePackager(bundlePath)
  68. if err != nil {
  69. log.Error("Failed to load bundle packager: %v", err)
  70. return
  71. }
  72. packager.Regenerate(*bundle)
  73. if err := packager.Save(); err != nil {
  74. log.Error("Failed to save bundle packager: %v", err)
  75. return
  76. }
  77. log.Info("Successfully regenerated bundle")
  78. }
  79. func RemoveDependency(bundlePath string, index int) {
  80. packager, err := loadBundlePackager(bundlePath)
  81. if err != nil {
  82. log.Error("Failed to load bundle packager: %v", err)
  83. return
  84. }
  85. if err := packager.Remove(index); err != nil {
  86. log.Error("Failed to remove dependency: %v", err)
  87. return
  88. }
  89. if err := packager.Save(); err != nil {
  90. log.Error("Failed to save bundle packager: %v", err)
  91. return
  92. }
  93. log.Info("Successfully removed dependency")
  94. }
  95. func ListDependencies(bundlePath string) {
  96. packager, err := loadBundlePackager(bundlePath)
  97. if err != nil {
  98. log.Error("Failed to load bundle packager: %v", err)
  99. return
  100. }
  101. dependencies, err := packager.ListDependencies()
  102. if err != nil {
  103. log.Error("Failed to list dependencies: %v", err)
  104. return
  105. }
  106. if len(dependencies) == 0 {
  107. log.Info("No dependencies found")
  108. return
  109. }
  110. for i, dependency := range dependencies {
  111. log.Info("========== Dependency %d ==========", i)
  112. if dependency.Type == bundle_entities.DEPENDENCY_TYPE_GITHUB {
  113. githubDependency, ok := dependency.Value.(bundle_entities.GithubDependency)
  114. if !ok {
  115. log.Error("Failed to assert github pattern")
  116. continue
  117. }
  118. log.Info("Dependency Type: Github, Pattern: %s", githubDependency.RepoPattern)
  119. log.Info("Github Repo: %s", githubDependency.RepoPattern.Repo())
  120. log.Info("Release: %s", githubDependency.RepoPattern.Release())
  121. log.Info("Asset: %s", githubDependency.RepoPattern.Asset())
  122. } else if dependency.Type == bundle_entities.DEPENDENCY_TYPE_MARKETPLACE {
  123. marketplaceDependency, ok := dependency.Value.(bundle_entities.MarketplaceDependency)
  124. if !ok {
  125. log.Error("Failed to assert marketplace pattern")
  126. continue
  127. }
  128. log.Info("Dependency Type: Marketplace, Pattern: %s", marketplaceDependency.MarketplacePattern)
  129. log.Info("Organization: %s", marketplaceDependency.MarketplacePattern.Organization())
  130. log.Info("Plugin: %s", marketplaceDependency.MarketplacePattern.Plugin())
  131. log.Info("Version: %s", marketplaceDependency.MarketplacePattern.Version())
  132. } else if dependency.Type == bundle_entities.DEPENDENCY_TYPE_PACKAGE {
  133. packageDependency, ok := dependency.Value.(bundle_entities.PackageDependency)
  134. if !ok {
  135. log.Error("Failed to assert package dependency")
  136. continue
  137. }
  138. log.Info("Dependency Type: Package, Path: %s", packageDependency.Path)
  139. if asset, err := packager.FetchAsset(packageDependency.Path); err != nil {
  140. log.Error("Package %s not found", packageDependency.Path)
  141. } else {
  142. log.Info("Package %s: %d bytes", packageDependency.Path, len(asset))
  143. }
  144. }
  145. }
  146. }