app.go 945 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package app
  2. import (
  3. "context"
  4. "log/slog"
  5. "os"
  6. "path/filepath"
  7. "github.com/sst/opencode/pkg/app/paths"
  8. )
  9. type App struct {
  10. ctx context.Context
  11. directory string
  12. config *Config
  13. storage *Storage
  14. }
  15. func New(ctx context.Context, directory string) (*App, error) {
  16. var err error
  17. app := &App{
  18. directory: directory,
  19. ctx: ctx,
  20. }
  21. data := paths.Data(directory)
  22. if err := os.MkdirAll(data, 0755); err != nil {
  23. return nil, err
  24. }
  25. err = os.MkdirAll(paths.Log(directory), 0755)
  26. if err != nil {
  27. return nil, err
  28. }
  29. logFile, err := os.Create(filepath.Join(paths.Log(directory), "opencode.log"))
  30. if err != nil {
  31. return nil, err
  32. }
  33. slog.SetDefault(slog.New(slog.NewTextHandler(logFile, &slog.HandlerOptions{})))
  34. slog.Info("log created")
  35. app.config, err = initConfig(directory)
  36. if err != nil {
  37. return nil, err
  38. }
  39. app.storage, err = initStorage(app)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return app, nil
  44. }