init.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package bundle
  2. import (
  3. _ "embed"
  4. "errors"
  5. "os"
  6. "path"
  7. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/bundle_entities"
  8. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/manifest_entities"
  9. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  10. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  11. "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
  12. tea "github.com/charmbracelet/bubbletea"
  13. )
  14. //go:embed templates/icon.svg
  15. var BUNDLE_ICON []byte
  16. func generateNewBundle() (*bundle_entities.Bundle, error) {
  17. m := newProfile()
  18. p := tea.NewProgram(m)
  19. if result, err := p.Run(); err != nil {
  20. return nil, err
  21. } else {
  22. if _, ok := result.(profile); ok {
  23. author := m.inputs[1].Value()
  24. name := m.inputs[0].Value()
  25. description := m.inputs[2].Value()
  26. bundle := &bundle_entities.Bundle{
  27. Name: name,
  28. Icon: "icon.svg",
  29. Labels: plugin_entities.NewI18nObject(name),
  30. Description: plugin_entities.NewI18nObject(description),
  31. Version: "0.0.1",
  32. Author: author,
  33. Type: manifest_entities.BundleType,
  34. Dependencies: []bundle_entities.Dependency{},
  35. }
  36. return bundle, nil
  37. } else {
  38. return nil, errors.New("invalid profile")
  39. }
  40. }
  41. }
  42. func InitBundle() {
  43. bundle, err := generateNewBundle()
  44. if err != nil {
  45. log.Error("Failed to generate new bundle: %v", err)
  46. return
  47. }
  48. // create bundle directory
  49. cwd, err := os.Getwd()
  50. if err != nil {
  51. log.Error("Error getting current directory: %v", err)
  52. return
  53. }
  54. bundleDir := path.Join(cwd, bundle.Name)
  55. if err := os.MkdirAll(bundleDir, 0755); err != nil {
  56. log.Error("Error creating bundle directory: %v", err)
  57. return
  58. }
  59. success := false
  60. defer func() {
  61. if !success {
  62. os.RemoveAll(bundleDir)
  63. }
  64. }()
  65. // save
  66. bundleYaml := parser.MarshalYamlBytes(bundle)
  67. if err := os.WriteFile(path.Join(bundleDir, "manifest.yaml"), bundleYaml, 0644); err != nil {
  68. log.Error("Error saving manifest.yaml: %v", err)
  69. return
  70. }
  71. // create _assets directory
  72. if err := os.MkdirAll(path.Join(bundleDir, "_assets"), 0755); err != nil {
  73. log.Error("Error creating _assets directory: %v", err)
  74. return
  75. }
  76. // create _assets/icon.svg
  77. if err := os.WriteFile(path.Join(bundleDir, "_assets", "icon.svg"), BUNDLE_ICON, 0644); err != nil {
  78. log.Error("Error saving icon.svg: %v", err)
  79. return
  80. }
  81. success = true
  82. log.Info("Bundle created successfully: %s", bundleDir)
  83. }