lazyopencode 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
lazyopencode/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.1.0'
32
- __version_tuple__ = version_tuple = (0, 1, 0)
31
+ __version__ = version = '0.1.1'
32
+ __version_tuple__ = version_tuple = (0, 1, 1)
33
33
 
34
34
  __commit_id__ = commit_id = None
lazyopencode/app.py CHANGED
@@ -68,16 +68,17 @@ class LazyOpenCode(App, NavigationMixin, FilteringMixin, HelpMixin):
68
68
  self._status_panel = StatusPanel(id="status-panel")
69
69
  yield self._status_panel
70
70
 
71
- # [1]+[2] Combined Panel: Commands, Agents
72
- cp1 = CombinedPanel(
73
- tabs=[
74
- (CustomizationType.COMMAND, 1, "Commands"),
75
- (CustomizationType.AGENT, 2, "Agents"),
76
- ],
77
- id="panel-combined-1",
78
- )
79
- self._panels.append(cp1)
80
- yield cp1
71
+ # [1] Type Panel: Commands
72
+ tp_cmd = TypePanel(CustomizationType.COMMAND, id="panel-command")
73
+ tp_cmd.panel_number = 1
74
+ self._panels.append(tp_cmd)
75
+ yield tp_cmd
76
+
77
+ # [2] Type Panel: Agents
78
+ tp_agent = TypePanel(CustomizationType.AGENT, id="panel-agent")
79
+ tp_agent.panel_number = 2
80
+ self._panels.append(tp_agent)
81
+ yield tp_agent
81
82
 
82
83
  # [3] Type Panel: Skills
83
84
  tp_skills = TypePanel(CustomizationType.SKILL, id="panel-skill")
@@ -85,23 +86,18 @@ class LazyOpenCode(App, NavigationMixin, FilteringMixin, HelpMixin):
85
86
  self._panels.append(tp_skills)
86
87
  yield tp_skills
87
88
 
88
- # [4] Type Panel: Agent Memory (Rules)
89
- tp_rules = TypePanel(CustomizationType.RULES, id="panel-rules")
90
- tp_rules.panel_number = 4
91
- self._panels.append(tp_rules)
92
- yield tp_rules
93
-
94
- # [5]+[6]+[7] Combined Panel: MCPs, Tools, Plugins
95
- cp2 = CombinedPanel(
89
+ # [4]+[5]+[6]+[7] Combined Panel: Memory, MCPs, Tools, Plugins
90
+ cp = CombinedPanel(
96
91
  tabs=[
92
+ (CustomizationType.RULES, 4, "Memory"),
97
93
  (CustomizationType.MCP, 5, "MCPs"),
98
94
  (CustomizationType.TOOL, 6, "Tools"),
99
95
  (CustomizationType.PLUGIN, 7, "Plugins"),
100
96
  ],
101
- id="panel-combined-2",
97
+ id="panel-combined",
102
98
  )
103
- self._panels.append(cp2)
104
- yield cp2
99
+ self._panels.append(cp)
100
+ yield cp
105
101
 
106
102
  self._main_pane = MainPane(id="main-pane")
107
103
  yield self._main_pane
@@ -121,6 +117,9 @@ class LazyOpenCode(App, NavigationMixin, FilteringMixin, HelpMixin):
121
117
  self._update_status_panel()
122
118
  project_name = self._discovery_service.project_root.name
123
119
  self.title = f"{project_name} - LazyOpenCode"
120
+ self.console.set_window_title(self.title)
121
+ if os.name == "nt":
122
+ os.system(f"title {self.title}")
124
123
  # Focus first non-empty panel or first panel
125
124
  if self._panels:
126
125
  self._panels[0].focus()
@@ -80,70 +80,65 @@ class NavigationMixin:
80
80
  prev_panel.focus()
81
81
 
82
82
  def action_focus_panel_1(self) -> None:
83
- """Focus Commands tab in first combined panel."""
83
+ """Focus Commands panel."""
84
84
  app = cast("LazyOpenCode", self)
85
- from lazyopencode.widgets.combined_panel import CombinedPanel
86
-
87
85
  if len(app._panels) > 0:
88
- panel = app._panels[0]
89
- if isinstance(panel, CombinedPanel):
90
- panel.switch_to_tab(0) # Commands tab
91
- panel.focus()
86
+ app._panels[0].focus()
92
87
 
93
88
  def action_focus_panel_2(self) -> None:
94
- """Focus Agents tab in first combined panel."""
89
+ """Focus Agents panel."""
95
90
  app = cast("LazyOpenCode", self)
96
- from lazyopencode.widgets.combined_panel import CombinedPanel
97
-
98
- if len(app._panels) > 0:
99
- panel = app._panels[0]
100
- if isinstance(panel, CombinedPanel):
101
- panel.switch_to_tab(1) # Agents tab
102
- panel.focus()
91
+ if len(app._panels) > 1:
92
+ app._panels[1].focus()
103
93
 
104
94
  def action_focus_panel_3(self) -> None:
105
95
  """Focus Skills panel."""
106
96
  app = cast("LazyOpenCode", self)
107
- if len(app._panels) > 1:
108
- app._panels[1].focus()
97
+ if len(app._panels) > 2:
98
+ app._panels[2].focus()
109
99
 
110
100
  def action_focus_panel_4(self) -> None:
111
- """Focus Agent Memory (Rules) panel."""
101
+ """Focus Agent Memory (Rules) tab in combined panel."""
112
102
  app = cast("LazyOpenCode", self)
113
- if len(app._panels) > 2:
114
- app._panels[2].focus()
103
+ from lazyopencode.widgets.combined_panel import CombinedPanel
104
+
105
+ if len(app._panels) > 3:
106
+ panel = app._panels[3]
107
+ if isinstance(panel, CombinedPanel):
108
+ panel.switch_to_tab(0) # Memory tab
109
+ panel.focus()
115
110
 
116
111
  def action_focus_panel_5(self) -> None:
117
- """Focus MCPs tab in second combined panel."""
112
+ """Focus MCPs tab in combined panel."""
118
113
  app = cast("LazyOpenCode", self)
119
114
  from lazyopencode.widgets.combined_panel import CombinedPanel
120
115
 
121
116
  if len(app._panels) > 3:
122
117
  panel = app._panels[3]
123
118
  if isinstance(panel, CombinedPanel):
124
- panel.switch_to_tab(0) # MCPs tab
119
+ panel.switch_to_tab(1) # MCPs tab
125
120
  panel.focus()
126
121
 
127
122
  def action_focus_panel_6(self) -> None:
128
- """Focus Tools tab in second combined panel."""
123
+ """Focus Tools tab in combined panel."""
129
124
  app = cast("LazyOpenCode", self)
130
125
  from lazyopencode.widgets.combined_panel import CombinedPanel
131
126
 
132
127
  if len(app._panels) > 3:
133
128
  panel = app._panels[3]
134
129
  if isinstance(panel, CombinedPanel):
135
- panel.switch_to_tab(1) # Tools tab
130
+ panel.switch_to_tab(2) # Tools tab
136
131
  panel.focus()
137
132
 
138
133
  def action_focus_panel_7(self) -> None:
139
- """Focus Plugins tab in second combined panel."""
134
+ """Focus Plugins tab in combined panel."""
140
135
  app = cast("LazyOpenCode", self)
141
136
  from lazyopencode.widgets.combined_panel import CombinedPanel
142
137
 
143
138
  if len(app._panels) > 3:
144
139
  panel = app._panels[3]
145
140
  if isinstance(panel, CombinedPanel):
146
- panel.switch_to_tab(2) # Plugins tab
141
+ panel.switch_to_tab(3) # Plugins tab
147
142
  panel.focus()
148
143
 
149
144
  def action_focus_main_pane(self) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lazyopencode
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: A lazygit-style TUI for visualizing OpenCode customizations
5
5
  Project-URL: Homepage, https://github.com/nikiforovall/lazyopencode
6
6
  Project-URL: Repository, https://github.com/nikiforovall/lazyopencode
@@ -34,7 +34,7 @@ Description-Content-Type: text/markdown
34
34
 
35
35
  A keyboard-driven TUI for managing OpenCode customizations.
36
36
 
37
- <!-- ![LazyOpenCode Screenshot](docs/screenshot.png) -->
37
+ ![LazyOpenCode Screenshot](artifacts/demo.png)
38
38
 
39
39
  ## Features
40
40
 
@@ -58,34 +58,36 @@ pip install lazyopencode
58
58
 
59
59
  ## Keyboard Shortcuts
60
60
 
61
- | Key | Action |
62
- | --------- | -------------- |
63
- | `q` | Quit |
64
- | `1` | Commands panel |
65
- | `2` | Agents panel |
66
- | `3` | Skills panel |
67
- | `4` | Rules panel |
68
- | `5` | MCPs panel |
69
- | `6` | Plugins panel |
70
- | `j` / `↓` | Move down |
71
- | `k` / `↑` | Move up |
72
- | `Tab` | Next panel |
73
- | `e` | Edit selected |
74
- | `ctrl`+`u` | User Config |
75
- | `?` | Help |
61
+ | Key | Action |
62
+ | ---------- | ---------------- |
63
+ | `j` / `↓` | Move down |
64
+ | `k` / `↑` | Move up |
65
+ | `Tab` | Next panel |
66
+ | `[` / `]` | Prev/Next view |
67
+ | `1`-`7` | Jump to panel |
68
+ | `a` | All filter |
69
+ | `g` | Global filter |
70
+ | `p` | Project filter |
71
+ | `/` | Search |
72
+ | `e` | Edit selected |
73
+ | `r` | Refresh |
74
+ | `ctrl+u` | User Config |
75
+ | `?` | Help |
76
+ | `q` | Quit |
76
77
 
77
78
  ## Configuration Paths
78
79
 
79
80
  LazyOpenCode discovers customizations from:
80
81
 
81
- | Type | Global | Project |
82
- | -------- | ------------------------------ | -------------------- |
83
- | Commands | `~/.config/opencode/command/` | `.opencode/command/` |
84
- | Agents | `~/.config/opencode/agent/` | `.opencode/agent/` |
85
- | Skills | `~/.config/opencode/skill/` | `.opencode/skill/` |
86
- | Rules | `~/.config/opencode/AGENTS.md` | `AGENTS.md` |
87
- | MCPs | `opencode.json` | `opencode.json` |
88
- | Plugins | `~/.config/opencode/plugin/` | `.opencode/plugin/` |
82
+ | Type | Global | Project |
83
+ | -------- | ---------------------------------- | -------------------- |
84
+ | Commands | `~/.config/opencode/command/` | `.opencode/command/` |
85
+ | Agents | `~/.config/opencode/agent/` | `.opencode/agent/` |
86
+ | Skills | `~/.config/opencode/skill/` | `.opencode/skill/` |
87
+ | Rules | `~/.config/opencode/AGENTS.md` | `AGENTS.md` |
88
+ | MCPs | `~/.config/opencode/opencode.json` | `opencode.json` |
89
+ | Tools | `~/.config/opencode/tool/` | `.opencode/tool/` |
90
+ | Plugins | `~/.config/opencode/plugin/` | `.opencode/plugin/` |
89
91
 
90
92
  ## Inspired By
91
93
 
@@ -1,12 +1,12 @@
1
1
  lazyopencode/__init__.py,sha256=p0PzeS7KA58kGpxWMzOVMHIPAXDXOPg-bMiF9Jxtp2c,1303
2
2
  lazyopencode/__main__.py,sha256=8sGwTbHrRZyACIYWqpMRP76sq7fTBeJSj-VOAd6hUKE,120
3
- lazyopencode/_version.py,sha256=5jwwVncvCiTnhOedfkzzxmxsggwmTBORdFL_4wq0ZeY,704
4
- lazyopencode/app.py,sha256=JiEn-Dv8OvIH8EoGsO1WX_qk2jPyBgt81aNx60IZzfo,11330
3
+ lazyopencode/_version.py,sha256=m8HxkqoKGw_wAJtc4ZokpJKNLXqp4zwnNhbnfDtro7w,704
4
+ lazyopencode/app.py,sha256=s5lPLNCuBD8C31tNL3z9lBmnswOSCbq9SxyKkNltqfM,11358
5
5
  lazyopencode/bindings.py,sha256=N6e-U23aFuMDlOjqtsGvoLl4_qGq-loafgKZ2US7A7M,1214
6
6
  lazyopencode/themes.py,sha256=9KsyWlk9XeAupAdUTj785riWuDlQMnERjD8DUzogCPc,713
7
7
  lazyopencode/mixins/filtering.py,sha256=m7G5NN-dvphPCnnNc8GyJY3p6ijmFxnr4GrzukYMoII,988
8
8
  lazyopencode/mixins/help.py,sha256=sZdoa0kmdfGE-81hNQAQKPY-ycH2f-2widAiWvH5iiM,1980
9
- lazyopencode/mixins/navigation.py,sha256=ES8Oc1bf3A7MmtyLVkynSlQWSrXsiI7cDTyfLRYSGYE,6850
9
+ lazyopencode/mixins/navigation.py,sha256=RHA5J9Wn9nYjDmRglMagvn94OFTti8q3yuYI6bNAgcM,6600
10
10
  lazyopencode/models/__init__.py,sha256=X2Wlkc6IS1nQF0JNTvqZNNLh6YI1SH-D5YP4xpWL-rc,298
11
11
  lazyopencode/models/customization.py,sha256=Tom492ns5ZqGFGURMKNRugqwt43GZrGBuHfa5BUx_sw,2910
12
12
  lazyopencode/services/__init__.py,sha256=aCVZJecnMeupVU-T6EhR34dFu295XwJP9dqZ8MKWOJE,146
@@ -30,8 +30,8 @@ lazyopencode/widgets/status_panel.py,sha256=k4lx4GrHlVUvt6t32_bz2WOWvZdPNawdSMhm
30
30
  lazyopencode/widgets/type_panel.py,sha256=wg2D5diKvdrwco7pvcUnF9WPOgTveiH1qt0O82gkqa4,19313
31
31
  lazyopencode/widgets/helpers/__init__.py,sha256=-jGrYtTMl9rmX8Q5Vod_oAuYaMl6Yh5JRwv8AFKQcwk,135
32
32
  lazyopencode/widgets/helpers/rendering.py,sha256=lgxzVsnH6fgTZss2x4n8hKYYtDN35YmFMD83impkpH8,576
33
- lazyopencode-0.1.0.dist-info/METADATA,sha256=N4Yk0AS2rFw_B4mmAt4_b1dReGYk2uDuv3evMdPUTEM,3353
34
- lazyopencode-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
35
- lazyopencode-0.1.0.dist-info/entry_points.txt,sha256=PPVT4NhHce2hFuMj-NQTSN9xQIM2jwb0_ojMEcOpPJ0,60
36
- lazyopencode-0.1.0.dist-info/licenses/LICENSE,sha256=KY9Pw3pDaLTe2eiMvUoj09VHhE3i8N1Le0d01JrG_3Q,1069
37
- lazyopencode-0.1.0.dist-info/RECORD,,
33
+ lazyopencode-0.1.1.dist-info/METADATA,sha256=1J3ghVNB1JGRtuBzIu3IZ94638X2tQi__RnaW8EamrU,3526
34
+ lazyopencode-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
35
+ lazyopencode-0.1.1.dist-info/entry_points.txt,sha256=PPVT4NhHce2hFuMj-NQTSN9xQIM2jwb0_ojMEcOpPJ0,60
36
+ lazyopencode-0.1.1.dist-info/licenses/LICENSE,sha256=KY9Pw3pDaLTe2eiMvUoj09VHhE3i8N1Le0d01JrG_3Q,1069
37
+ lazyopencode-0.1.1.dist-info/RECORD,,