feat(tui): exit without confirmation

Carlos Alexandro Becker created

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Change summary

internal/config/config.go | 1 +
internal/tui/tui.go       | 6 ++++++
2 files changed, 7 insertions(+)

Detailed changes

internal/config/config.go 🔗

@@ -167,6 +167,7 @@ type Options struct {
 	DisableProviderAutoUpdate bool         `json:"disable_provider_auto_update,omitempty" jsonschema:"description=Disable providers auto-update,default=false"`
 	Attribution               *Attribution `json:"attribution,omitempty" jsonschema:"description=Attribution settings for generated content"`
 	DisableMetrics            bool         `json:"disable_metrics,omitempty" jsonschema:"description=Disable sending metrics,default=false"`
+	DisableExitConfirmation   bool         `json:"disable_exit_confirmation,omitempty" jsonschema:"description=Disable exit confirmation dialog,default=false"`
 }
 
 type MCPs map[string]MCPConfig

internal/tui/tui.go 🔗

@@ -180,6 +180,9 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			Model: compact.NewCompactDialogCmp(a.app.CoderAgent, msg.SessionID, true),
 		})
 	case commands.QuitMsg:
+		if a.app.Config().Options.DisableExitConfirmation {
+			return a, tea.Quit
+		}
 		return a, util.CmdHandler(dialogs.OpenDialogMsg{
 			Model: quit.NewQuitDialog(),
 		})
@@ -400,6 +403,9 @@ func (a *appModel) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd {
 		if a.dialog.ActiveDialogID() == quit.QuitDialogID {
 			return tea.Quit
 		}
+		if a.app.Config().Options.DisableExitConfirmation {
+			return tea.Quit
+		}
 		return util.CmdHandler(dialogs.OpenDialogMsg{
 			Model: quit.NewQuitDialog(),
 		})