experimental: codex / ai integration

This commit is contained in:
2026-07-28 20:48:00 +02:00
parent e89c524438
commit 949935a2aa
14 changed files with 2987 additions and 7 deletions

View File

@@ -43,6 +43,7 @@ type ViewKeyBindings struct {
AutoMerge []string `toml:"auto_merge"`
MergeNow []string `toml:"merge_now"`
ToggleList []string `toml:"toggle_list"`
AI []string `toml:"ai"`
}
type ThreadKeyBindings struct {
@@ -122,6 +123,7 @@ func defaultKeyBindings() KeyBindings {
Open: []string{"enter", "l"}, Dashboard: []string{"d"},
Health: []string{"H"}, Edit: []string{"e"}, ToggleList: []string{"tab"},
AutoMerge: []string{"a"}, MergeNow: []string{"M"},
AI: []string{"A"},
},
Threads: ThreadKeyBindings{
Search: []string{"/"}, ClearFilter: []string{"F"},
@@ -338,6 +340,8 @@ func (k KeyBindings) canonicalMainKey(key string, current screen) string {
return "H"
case keyMatches(key, k.Views.Edit):
return "e"
case (current == dashboardScreen || current == threadScreen) && keyMatches(key, k.Views.AI):
return "A"
default:
return ""
}
@@ -400,6 +404,7 @@ func validateKeyBindings(bindings KeyBindings) error {
"health": bindings.Views.Health, "edit": bindings.Views.Edit,
"auto_merge": bindings.Views.AutoMerge, "merge_now": bindings.Views.MergeNow,
"toggle_list": bindings.Views.ToggleList,
"ai": bindings.Views.AI,
}},
{"keybindings.threads", map[string][]string{
"search": bindings.Threads.Search, "clear_filter": bindings.Threads.ClearFilter,
@@ -492,6 +497,7 @@ func validateKeyBindingContexts(bindings KeyBindings) error {
contextBinding{"edit", views.Edit},
contextBinding{"auto_merge", views.AutoMerge},
contextBinding{"merge_now", views.MergeNow},
contextBinding{"ai", views.AI},
)...); err != nil {
return err
}
@@ -511,6 +517,7 @@ func validateKeyBindingContexts(bindings KeyBindings) error {
contextBinding{"resolve", threads.Resolve},
contextBinding{"toggle", threads.Toggle},
contextBinding{"fold_prefix", threads.FoldPrefix},
contextBinding{"ai", views.AI},
)...); err != nil {
return err
}
@@ -554,6 +561,26 @@ func validateKeyBindingContexts(bindings KeyBindings) error {
); err != nil {
return err
}
if err := validateKeyContext("AI menu",
contextBinding{"quit", nonTextBindings(general.Quit)},
contextBinding{"cancel", appendCopy(general.Back, input.Cancel...)},
contextBinding{"down", navigation.Down},
contextBinding{"up", navigation.Up},
contextBinding{"select", appendCopy(views.Open, input.Newline...)},
); err != nil {
return err
}
if err := validateKeyContext("AI confirmation",
contextBinding{"quit", nonTextBindings(general.Quit)},
contextBinding{"confirm", general.Confirm},
contextBinding{"cancel", appendCopy(general.Reject, input.Cancel...)},
contextBinding{"down", navigation.Down},
contextBinding{"up", navigation.Up},
contextBinding{"page_down", navigation.PageDown},
contextBinding{"page_up", navigation.PageUp},
); err != nil {
return err
}
editorOuter := []contextBinding{
{"help", general.Help},