summaryrefslogtreecommitdiffhomepage
path: root/packages/tui
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tui')
-rw-r--r--packages/tui/cmd/opencode/main.go3
-rw-r--r--packages/tui/internal/app/app.go53
2 files changed, 41 insertions, 15 deletions
diff --git a/packages/tui/cmd/opencode/main.go b/packages/tui/cmd/opencode/main.go
index 654eb0adc..c242a737a 100644
--- a/packages/tui/cmd/opencode/main.go
+++ b/packages/tui/cmd/opencode/main.go
@@ -32,6 +32,7 @@ func main() {
var model *string = flag.String("model", "", "model to begin with")
var prompt *string = flag.String("prompt", "", "prompt to begin with")
var agent *string = flag.String("agent", "", "agent to begin with")
+ var sessionID *string = flag.String("session", "", "session ID")
flag.Parse()
url := os.Getenv("OPENCODE_SERVER")
@@ -96,7 +97,7 @@ func main() {
}()
// Create main context for the application
- app_, err := app.New(ctx, version, appInfo, agents, httpClient, model, prompt, agent)
+ app_, err := app.New(ctx, version, appInfo, agents, httpClient, model, prompt, agent, sessionID)
if err != nil {
panic(err)
}
diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go
index a07637794..47520257d 100644
--- a/packages/tui/internal/app/app.go
+++ b/packages/tui/internal/app/app.go
@@ -46,6 +46,7 @@ type App struct {
InitialModel *string
InitialPrompt *string
InitialAgent *string
+ InitialSession *string
compactCancel context.CancelFunc
IsLeaderSequence bool
}
@@ -95,6 +96,7 @@ func New(
initialModel *string,
initialPrompt *string,
initialAgent *string,
+ initialSession *string,
) (*App, error) {
util.RootPath = appInfo.Path.Root
util.CwdPath = appInfo.Path.Cwd
@@ -175,20 +177,21 @@ func New(
slog.Debug("Loaded config", "config", configInfo)
app := &App{
- Info: appInfo,
- Agents: agents,
- Version: version,
- StatePath: appStatePath,
- Config: configInfo,
- State: appState,
- Client: httpClient,
- AgentIndex: agentIndex,
- Session: &opencode.Session{},
- Messages: []Message{},
- Commands: commands.LoadFromConfig(configInfo),
- InitialModel: initialModel,
- InitialPrompt: initialPrompt,
- InitialAgent: initialAgent,
+ Info: appInfo,
+ Agents: agents,
+ Version: version,
+ StatePath: appStatePath,
+ Config: configInfo,
+ State: appState,
+ Client: httpClient,
+ AgentIndex: agentIndex,
+ Session: &opencode.Session{},
+ Messages: []Message{},
+ Commands: commands.LoadFromConfig(configInfo),
+ InitialModel: initialModel,
+ InitialPrompt: initialPrompt,
+ InitialAgent: initialAgent,
+ InitialSession: initialSession,
}
return app, nil
@@ -504,6 +507,28 @@ func (a *App) InitializeProvider() tea.Cmd {
Provider: *selectedProvider,
Model: *selectedModel,
}))
+
+ // Load initial session if provided
+ if a.InitialSession != nil && *a.InitialSession != "" {
+ cmds = append(cmds, func() tea.Msg {
+ // Find the session by ID
+ sessions, err := a.ListSessions(context.Background())
+ if err != nil {
+ slog.Error("Failed to list sessions for initial session", "error", err)
+ return toast.NewErrorToast("Failed to load initial session")()
+ }
+
+ for _, session := range sessions {
+ if session.ID == *a.InitialSession {
+ return SessionSelectedMsg(&session)
+ }
+ }
+
+ slog.Warn("Initial session not found", "sessionID", *a.InitialSession)
+ return toast.NewErrorToast("Session not found: " + *a.InitialSession)()
+ })
+ }
+
if a.InitialPrompt != nil && *a.InitialPrompt != "" {
cmds = append(cmds, util.CmdHandler(SendPrompt{Text: *a.InitialPrompt}))
}