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 +2 -2
- lazyopencode/app.py +20 -21
- lazyopencode/mixins/navigation.py +21 -26
- {lazyopencode-0.1.0.dist-info → lazyopencode-0.1.1.dist-info}/METADATA +27 -25
- {lazyopencode-0.1.0.dist-info → lazyopencode-0.1.1.dist-info}/RECORD +8 -8
- {lazyopencode-0.1.0.dist-info → lazyopencode-0.1.1.dist-info}/WHEEL +0 -0
- {lazyopencode-0.1.0.dist-info → lazyopencode-0.1.1.dist-info}/entry_points.txt +0 -0
- {lazyopencode-0.1.0.dist-info → lazyopencode-0.1.1.dist-info}/licenses/LICENSE +0 -0
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.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
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]
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
|
|
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]
|
|
89
|
-
|
|
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
|
|
97
|
+
id="panel-combined",
|
|
102
98
|
)
|
|
103
|
-
self._panels.append(
|
|
104
|
-
yield
|
|
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
|
|
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
|
-
|
|
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
|
|
89
|
+
"""Focus Agents panel."""
|
|
95
90
|
app = cast("LazyOpenCode", self)
|
|
96
|
-
|
|
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) >
|
|
108
|
-
app._panels[
|
|
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
|
-
|
|
114
|
-
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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.
|
|
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
|
-
|
|
37
|
+

|
|
38
38
|
|
|
39
39
|
## Features
|
|
40
40
|
|
|
@@ -58,34 +58,36 @@ pip install lazyopencode
|
|
|
58
58
|
|
|
59
59
|
## Keyboard Shortcuts
|
|
60
60
|
|
|
61
|
-
| Key
|
|
62
|
-
|
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
69
|
-
| `
|
|
70
|
-
| `
|
|
71
|
-
|
|
|
72
|
-
| `
|
|
73
|
-
| `
|
|
74
|
-
| `ctrl
|
|
75
|
-
| `?`
|
|
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
|
|
82
|
-
| -------- |
|
|
83
|
-
| Commands | `~/.config/opencode/command/`
|
|
84
|
-
| Agents | `~/.config/opencode/agent/`
|
|
85
|
-
| Skills | `~/.config/opencode/skill/`
|
|
86
|
-
| Rules | `~/.config/opencode/AGENTS.md`
|
|
87
|
-
| MCPs |
|
|
88
|
-
|
|
|
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=
|
|
4
|
-
lazyopencode/app.py,sha256=
|
|
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=
|
|
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.
|
|
34
|
-
lazyopencode-0.1.
|
|
35
|
-
lazyopencode-0.1.
|
|
36
|
-
lazyopencode-0.1.
|
|
37
|
-
lazyopencode-0.1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|