Procházet zdrojové kódy

wip: refactoring tui

adamdottv před 10 měsíci
rodič
revize
01050a430f
60 změnil soubory, kde provedl 115 přidání a 115 odebrání
  1. 1 1
      .gitignore
  2. 5 5
      packages/tui/cmd/opencode/main.go
  3. binární
      packages/tui/internal/app/.DS_Store
  4. 4 4
      packages/tui/internal/app/app.go
  5. 1 1
      packages/tui/internal/completions/files-folders.go
  6. 3 3
      packages/tui/internal/components/chat/chat.go
  7. 7 7
      packages/tui/internal/components/chat/editor.go
  8. 3 3
      packages/tui/internal/components/chat/message.go
  9. 5 5
      packages/tui/internal/components/chat/messages.go
  10. 4 4
      packages/tui/internal/components/chat/sidebar.go
  11. 3 3
      packages/tui/internal/components/core/status.go
  12. 3 3
      packages/tui/internal/components/dialog/arguments.go
  13. 5 5
      packages/tui/internal/components/dialog/commands.go
  14. 5 5
      packages/tui/internal/components/dialog/complete.go
  15. 3 3
      packages/tui/internal/components/dialog/custom_commands.go
  16. 0 0
      packages/tui/internal/components/dialog/custom_commands_test.go
  17. 5 5
      packages/tui/internal/components/dialog/filepicker.go
  18. 2 2
      packages/tui/internal/components/dialog/help.go
  19. 3 3
      packages/tui/internal/components/dialog/init.go
  20. 5 5
      packages/tui/internal/components/dialog/models.go
  21. 4 4
      packages/tui/internal/components/dialog/permission.go
  22. 4 4
      packages/tui/internal/components/dialog/quit.go
  23. 4 4
      packages/tui/internal/components/dialog/session.go
  24. 4 4
      packages/tui/internal/components/dialog/theme.go
  25. 5 5
      packages/tui/internal/components/dialog/tools.go
  26. 1 1
      packages/tui/internal/components/diff/diff.go
  27. 1 1
      packages/tui/internal/components/qr/qr.go
  28. 0 0
      packages/tui/internal/components/spinner/spinner.go
  29. 0 0
      packages/tui/internal/components/spinner/spinner_test.go
  30. 3 3
      packages/tui/internal/components/util/simple-list.go
  31. 0 0
      packages/tui/internal/config/config.go
  32. 0 0
      packages/tui/internal/image/clipboard_unix.go
  33. 0 0
      packages/tui/internal/image/clipboard_windows.go
  34. 0 0
      packages/tui/internal/image/images.go
  35. 1 1
      packages/tui/internal/layout/container.go
  36. 0 0
      packages/tui/internal/layout/layout.go
  37. 3 3
      packages/tui/internal/layout/overlay.go
  38. 1 1
      packages/tui/internal/layout/split.go
  39. 6 6
      packages/tui/internal/page/chat.go
  40. 0 0
      packages/tui/internal/page/page.go
  41. 0 0
      packages/tui/internal/state/state.go
  42. 0 0
      packages/tui/internal/styles/background.go
  43. 0 0
      packages/tui/internal/styles/icons.go
  44. 1 1
      packages/tui/internal/styles/markdown.go
  45. 1 1
      packages/tui/internal/styles/styles.go
  46. 0 0
      packages/tui/internal/theme/ayu.go
  47. 0 0
      packages/tui/internal/theme/catppuccin.go
  48. 0 0
      packages/tui/internal/theme/dracula.go
  49. 0 0
      packages/tui/internal/theme/flexoki.go
  50. 0 0
      packages/tui/internal/theme/gruvbox.go
  51. 0 0
      packages/tui/internal/theme/manager.go
  52. 0 0
      packages/tui/internal/theme/monokai.go
  53. 0 0
      packages/tui/internal/theme/onedark.go
  54. 0 0
      packages/tui/internal/theme/opencode.go
  55. 0 0
      packages/tui/internal/theme/theme.go
  56. 0 0
      packages/tui/internal/theme/theme_test.go
  57. 0 0
      packages/tui/internal/theme/tokyonight.go
  58. 0 0
      packages/tui/internal/theme/tron.go
  59. 9 9
      packages/tui/internal/tui/tui.go
  60. 0 0
      packages/tui/internal/util/util.go

+ 1 - 1
.gitignore

@@ -1,5 +1,5 @@
+.DS_Store
 node_modules
 .opencode
 .sst
-app.log
 .env

+ 5 - 5
packages/tui/cmd/opencode/main.go

@@ -10,9 +10,9 @@ import (
 
 	tea "github.com/charmbracelet/bubbletea"
 	zone "github.com/lrstanley/bubblezone"
+	"github.com/sst/opencode/internal/app"
 	"github.com/sst/opencode/internal/pubsub"
 	"github.com/sst/opencode/internal/tui"
-	"github.com/sst/opencode/internal/tui/app"
 	"github.com/sst/opencode/pkg/client"
 )
 
@@ -46,7 +46,7 @@ func main() {
 	ctx, cancel := context.WithCancel(context.Background())
 	defer cancel()
 
-	app, err := app.New(ctx, httpClient)
+	app_, err := app.New(ctx, httpClient)
 	if err != nil {
 		slog.Error("Failed to create app", "error", err)
 		// return err
@@ -55,7 +55,7 @@ func main() {
 	// Set up the TUI
 	zone.NewGlobal()
 	program := tea.NewProgram(
-		tui.New(app),
+		tui.NewModel(app_),
 		tea.WithAltScreen(),
 	)
 
@@ -78,7 +78,7 @@ func main() {
 	}()
 
 	// Setup the subscriptions, this will send services events to the TUI
-	ch, cancelSubs := setupSubscriptions(app, ctx)
+	ch, cancelSubs := setupSubscriptions(app_, ctx)
 
 	// Create a context for the TUI message handler
 	tuiCtx, tuiCancel := context.WithCancel(ctx)
@@ -113,7 +113,7 @@ func main() {
 		cancelSubs()
 
 		// Then shutdown the app
-		app.Shutdown()
+		app_.Shutdown()
 
 		// Then cancel TUI message handler
 		tuiCancel()

binární
packages/tui/internal/app/.DS_Store


+ 4 - 4
packages/tui/internal/tui/app/app.go → packages/tui/internal/app/app.go

@@ -9,12 +9,12 @@ import (
 	"log/slog"
 
 	tea "github.com/charmbracelet/bubbletea"
+	"github.com/sst/opencode/internal/config"
 	"github.com/sst/opencode/internal/fileutil"
+	"github.com/sst/opencode/internal/state"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/config"
-	"github.com/sst/opencode/internal/tui/state"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 	"github.com/sst/opencode/pkg/client"
 )
 

+ 1 - 1
packages/tui/internal/completions/files-folders.go

@@ -9,7 +9,7 @@ import (
 	"github.com/lithammer/fuzzysearch/fuzzy"
 	"github.com/sst/opencode/internal/fileutil"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/components/dialog"
+	"github.com/sst/opencode/internal/components/dialog"
 )
 
 type filesAndFoldersContextGroup struct {

+ 3 - 3
packages/tui/internal/tui/components/chat/chat.go → packages/tui/internal/components/chat/chat.go

@@ -6,9 +6,9 @@ import (
 
 	"github.com/charmbracelet/lipgloss"
 	"github.com/charmbracelet/x/ansi"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type SendMsg struct {

+ 7 - 7
packages/tui/internal/tui/components/chat/editor.go → packages/tui/internal/components/chat/editor.go

@@ -13,14 +13,14 @@ import (
 	"github.com/charmbracelet/bubbles/textarea"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/components/dialog"
+	"github.com/sst/opencode/internal/image"
+	"github.com/sst/opencode/internal/layout"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/components/dialog"
-	"github.com/sst/opencode/internal/tui/image"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 type editorCmp struct {

+ 3 - 3
packages/tui/internal/tui/components/chat/message.go → packages/tui/internal/components/chat/message.go

@@ -8,9 +8,9 @@ import (
 
 	"github.com/charmbracelet/lipgloss"
 	"github.com/charmbracelet/x/ansi"
-	"github.com/sst/opencode/internal/tui/components/diff"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/components/diff"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 	"github.com/sst/opencode/pkg/client"
 	"golang.org/x/text/cases"
 	"golang.org/x/text/language"

+ 5 - 5
packages/tui/internal/tui/components/chat/messages.go → packages/tui/internal/components/chat/messages.go

@@ -9,11 +9,11 @@ import (
 	"github.com/charmbracelet/bubbles/viewport"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/components/dialog"
-	"github.com/sst/opencode/internal/tui/state"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/components/dialog"
+	"github.com/sst/opencode/internal/state"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 	"github.com/sst/opencode/pkg/client"
 )
 

+ 4 - 4
packages/tui/internal/tui/components/chat/sidebar.go → packages/tui/internal/components/chat/sidebar.go

@@ -7,10 +7,10 @@ import (
 
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/state"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/state"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type sidebarCmp struct {

+ 3 - 3
packages/tui/internal/tui/components/core/status.go → packages/tui/internal/components/core/status.go

@@ -9,9 +9,9 @@ import (
 	"github.com/charmbracelet/lipgloss"
 	"github.com/sst/opencode/internal/pubsub"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type StatusCmp interface {

+ 3 - 3
packages/tui/internal/tui/components/dialog/arguments.go → packages/tui/internal/components/dialog/arguments.go

@@ -7,9 +7,9 @@ import (
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
 
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 type argumentsDialogKeyMap struct {

+ 5 - 5
packages/tui/internal/tui/components/dialog/commands.go → packages/tui/internal/components/dialog/commands.go

@@ -4,11 +4,11 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	utilComponents "github.com/sst/opencode/internal/tui/components/util"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	utilComponents "github.com/sst/opencode/internal/components/util"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 // Command represents a command that can be executed

+ 5 - 5
packages/tui/internal/tui/components/dialog/complete.go → packages/tui/internal/components/dialog/complete.go

@@ -6,11 +6,11 @@ import (
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
 	"github.com/sst/opencode/internal/status"
-	utilComponents "github.com/sst/opencode/internal/tui/components/util"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	utilComponents "github.com/sst/opencode/internal/components/util"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 type CompletionItem struct {

+ 3 - 3
packages/tui/internal/tui/components/dialog/custom_commands.go → packages/tui/internal/components/dialog/custom_commands.go

@@ -8,8 +8,8 @@ import (
 	"strings"
 
 	tea "github.com/charmbracelet/bubbletea"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/util"
 )
 
 // Command prefix constants
@@ -34,7 +34,7 @@ func LoadCustomCommands(app *app.App) ([]Command, error) {
 		commands = append(commands, homeCommands...)
 	}
 
-	projectCommandsDir := filepath.Join(app.Info.Path.Root, "commands")
+	projectCommandsDir := filepath.Join(app.Info.Path.Root, ".opencode", "commands")
 	projectCommands, err := loadCommandsFromDir(projectCommandsDir, ProjectCommandPrefix)
 	if err != nil {
 		// Log error but return what we have so far

+ 0 - 0
packages/tui/internal/tui/components/dialog/custom_commands_test.go → packages/tui/internal/components/dialog/custom_commands_test.go


+ 5 - 5
packages/tui/internal/tui/components/dialog/filepicker.go → packages/tui/internal/components/dialog/filepicker.go

@@ -17,12 +17,12 @@ import (
 	"github.com/charmbracelet/bubbles/viewport"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/image"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/image"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 const (

+ 2 - 2
packages/tui/internal/tui/components/dialog/help.go → packages/tui/internal/components/dialog/help.go

@@ -6,8 +6,8 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type helpCmp struct {

+ 3 - 3
packages/tui/internal/tui/components/dialog/init.go → packages/tui/internal/components/dialog/init.go

@@ -5,9 +5,9 @@ import (
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
 
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 // InitDialogCmp is a component that asks the user if they want to initialize the project.

+ 5 - 5
packages/tui/internal/tui/components/dialog/models.go → packages/tui/internal/components/dialog/models.go

@@ -7,11 +7,11 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 	"github.com/sst/opencode/pkg/client"
 )
 

+ 4 - 4
packages/tui/internal/tui/components/dialog/permission.go → packages/tui/internal/components/dialog/permission.go

@@ -6,10 +6,10 @@ import (
 	"github.com/charmbracelet/bubbles/viewport"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 	"strings"
 )
 

+ 4 - 4
packages/tui/internal/tui/components/dialog/quit.go → packages/tui/internal/components/dialog/quit.go

@@ -6,10 +6,10 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 const question = "Are you sure you want to quit?"

+ 4 - 4
packages/tui/internal/tui/components/dialog/session.go → packages/tui/internal/components/dialog/session.go

@@ -4,10 +4,10 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 	"github.com/sst/opencode/pkg/client"
 )
 

+ 4 - 4
packages/tui/internal/tui/components/dialog/theme.go → packages/tui/internal/components/dialog/theme.go

@@ -4,11 +4,11 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
+	"github.com/sst/opencode/internal/layout"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 // ThemeChangedMsg is sent when the theme is changed

+ 5 - 5
packages/tui/internal/tui/components/dialog/tools.go → packages/tui/internal/components/dialog/tools.go

@@ -4,10 +4,10 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	utilComponents "github.com/sst/opencode/internal/tui/components/util"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	utilComponents "github.com/sst/opencode/internal/components/util"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 )
 
 const (
@@ -175,4 +175,4 @@ func NewToolsDialogCmp() ToolsDialog {
 	return &toolsDialogCmp{
 		list: list,
 	}
-}
+}

+ 1 - 1
packages/tui/internal/tui/components/diff/diff.go → packages/tui/internal/components/diff/diff.go

@@ -15,7 +15,7 @@ import (
 	"github.com/charmbracelet/lipgloss"
 	"github.com/charmbracelet/x/ansi"
 	"github.com/sergi/go-diff/diffmatchpatch"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/theme"
 )
 
 // -------------------------------------------------------------------------

+ 1 - 1
packages/tui/internal/tui/components/qr/qr.go → packages/tui/internal/components/qr/qr.go

@@ -4,7 +4,7 @@ import (
 	"strings"
 
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/theme"
 	"rsc.io/qr"
 )
 

+ 0 - 0
packages/tui/internal/tui/components/spinner/spinner.go → packages/tui/internal/components/spinner/spinner.go


+ 0 - 0
packages/tui/internal/tui/components/spinner/spinner_test.go → packages/tui/internal/components/spinner/spinner_test.go


+ 3 - 3
packages/tui/internal/tui/components/util/simple-list.go → packages/tui/internal/components/util/simple-list.go

@@ -4,9 +4,9 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type SimpleListItem interface {

+ 0 - 0
packages/tui/internal/tui/config/config.go → packages/tui/internal/config/config.go


+ 0 - 0
packages/tui/internal/tui/image/clipboard_unix.go → packages/tui/internal/image/clipboard_unix.go


+ 0 - 0
packages/tui/internal/tui/image/clipboard_windows.go → packages/tui/internal/image/clipboard_windows.go


+ 0 - 0
packages/tui/internal/tui/image/images.go → packages/tui/internal/image/images.go


+ 1 - 1
packages/tui/internal/tui/layout/container.go → packages/tui/internal/layout/container.go

@@ -4,7 +4,7 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type Container interface {

+ 0 - 0
packages/tui/internal/tui/layout/layout.go → packages/tui/internal/layout/layout.go


+ 3 - 3
packages/tui/internal/tui/layout/overlay.go → packages/tui/internal/layout/overlay.go

@@ -8,9 +8,9 @@ import (
 	"github.com/muesli/ansi"
 	"github.com/muesli/reflow/truncate"
 	"github.com/muesli/termenv"
-	"github.com/sst/opencode/internal/tui/styles"
-	"github.com/sst/opencode/internal/tui/theme"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/styles"
+	"github.com/sst/opencode/internal/theme"
+	"github.com/sst/opencode/internal/util"
 )
 
 // Most of this code is borrowed from

+ 1 - 1
packages/tui/internal/tui/layout/split.go → packages/tui/internal/layout/split.go

@@ -4,7 +4,7 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/theme"
 )
 
 type SplitPaneLayout interface {

+ 6 - 6
packages/tui/internal/tui/page/chat.go → packages/tui/internal/page/chat.go

@@ -7,13 +7,13 @@ import (
 	"github.com/charmbracelet/bubbles/key"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
+	"github.com/sst/opencode/internal/app"
 	"github.com/sst/opencode/internal/completions"
-	"github.com/sst/opencode/internal/tui/app"
-	"github.com/sst/opencode/internal/tui/components/chat"
-	"github.com/sst/opencode/internal/tui/components/dialog"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/state"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/components/chat"
+	"github.com/sst/opencode/internal/components/dialog"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/state"
+	"github.com/sst/opencode/internal/util"
 	"github.com/sst/opencode/pkg/client"
 )
 

+ 0 - 0
packages/tui/internal/tui/page/page.go → packages/tui/internal/page/page.go


+ 0 - 0
packages/tui/internal/tui/state/state.go → packages/tui/internal/state/state.go


+ 0 - 0
packages/tui/internal/tui/styles/background.go → packages/tui/internal/styles/background.go


+ 0 - 0
packages/tui/internal/tui/styles/icons.go → packages/tui/internal/styles/icons.go


+ 1 - 1
packages/tui/internal/tui/styles/markdown.go → packages/tui/internal/styles/markdown.go

@@ -4,7 +4,7 @@ import (
 	"github.com/charmbracelet/glamour"
 	"github.com/charmbracelet/glamour/ansi"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/theme"
 )
 
 const defaultMargin = 1

+ 1 - 1
packages/tui/internal/tui/styles/styles.go → packages/tui/internal/styles/styles.go

@@ -2,7 +2,7 @@ package styles
 
 import (
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/theme"
+	"github.com/sst/opencode/internal/theme"
 )
 
 // BaseStyle returns the base style with background and foreground colors

+ 0 - 0
packages/tui/internal/tui/theme/ayu.go → packages/tui/internal/theme/ayu.go


+ 0 - 0
packages/tui/internal/tui/theme/catppuccin.go → packages/tui/internal/theme/catppuccin.go


+ 0 - 0
packages/tui/internal/tui/theme/dracula.go → packages/tui/internal/theme/dracula.go


+ 0 - 0
packages/tui/internal/tui/theme/flexoki.go → packages/tui/internal/theme/flexoki.go


+ 0 - 0
packages/tui/internal/tui/theme/gruvbox.go → packages/tui/internal/theme/gruvbox.go


+ 0 - 0
packages/tui/internal/tui/theme/manager.go → packages/tui/internal/theme/manager.go


+ 0 - 0
packages/tui/internal/tui/theme/monokai.go → packages/tui/internal/theme/monokai.go


+ 0 - 0
packages/tui/internal/tui/theme/onedark.go → packages/tui/internal/theme/onedark.go


+ 0 - 0
packages/tui/internal/tui/theme/opencode.go → packages/tui/internal/theme/opencode.go


+ 0 - 0
packages/tui/internal/tui/theme/theme.go → packages/tui/internal/theme/theme.go


+ 0 - 0
packages/tui/internal/tui/theme/theme_test.go → packages/tui/internal/theme/theme_test.go


+ 0 - 0
packages/tui/internal/tui/theme/tokyonight.go → packages/tui/internal/theme/tokyonight.go


+ 0 - 0
packages/tui/internal/tui/theme/tron.go → packages/tui/internal/theme/tron.go


+ 9 - 9
packages/tui/internal/tui/tui.go

@@ -10,15 +10,15 @@ import (
 	"github.com/charmbracelet/bubbles/spinner"
 	tea "github.com/charmbracelet/bubbletea"
 	"github.com/charmbracelet/lipgloss"
-	"github.com/sst/opencode/internal/tui/app"
 
+	"github.com/sst/opencode/internal/app"
+	"github.com/sst/opencode/internal/components/core"
+	"github.com/sst/opencode/internal/components/dialog"
+	"github.com/sst/opencode/internal/layout"
+	"github.com/sst/opencode/internal/page"
+	"github.com/sst/opencode/internal/state"
 	"github.com/sst/opencode/internal/status"
-	"github.com/sst/opencode/internal/tui/components/core"
-	"github.com/sst/opencode/internal/tui/components/dialog"
-	"github.com/sst/opencode/internal/tui/layout"
-	"github.com/sst/opencode/internal/tui/page"
-	"github.com/sst/opencode/internal/tui/state"
-	"github.com/sst/opencode/internal/tui/util"
+	"github.com/sst/opencode/internal/util"
 	"github.com/sst/opencode/pkg/client"
 )
 
@@ -158,7 +158,7 @@ func (a appModel) Init() tea.Cmd {
 
 	// Check if we should show the init dialog
 	cmds = append(cmds, func() tea.Msg {
-		shouldShow := a.app.Info.Time.Initialized == nil
+		shouldShow := a.app.Info.Git && a.app.Info.Time.Initialized == nil
 		return dialog.ShowInitDialogMsg{Show: shouldShow}
 	})
 
@@ -900,7 +900,7 @@ func (a appModel) View() string {
 	return appView
 }
 
-func New(app *app.App) tea.Model {
+func NewModel(app *app.App) tea.Model {
 	startPage := page.ChatPage
 	model := &appModel{
 		currentPage:   startPage,

+ 0 - 0
packages/tui/internal/tui/util/util.go → packages/tui/internal/util/util.go