lazyopencode 0.1.0__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.
Files changed (37) hide show
  1. lazyopencode/__init__.py +48 -0
  2. lazyopencode/__main__.py +6 -0
  3. lazyopencode/_version.py +34 -0
  4. lazyopencode/app.py +310 -0
  5. lazyopencode/bindings.py +27 -0
  6. lazyopencode/mixins/filtering.py +33 -0
  7. lazyopencode/mixins/help.py +74 -0
  8. lazyopencode/mixins/navigation.py +184 -0
  9. lazyopencode/models/__init__.py +17 -0
  10. lazyopencode/models/customization.py +120 -0
  11. lazyopencode/services/__init__.py +7 -0
  12. lazyopencode/services/discovery.py +350 -0
  13. lazyopencode/services/gitignore_filter.py +123 -0
  14. lazyopencode/services/parsers/__init__.py +152 -0
  15. lazyopencode/services/parsers/agent.py +93 -0
  16. lazyopencode/services/parsers/command.py +94 -0
  17. lazyopencode/services/parsers/mcp.py +67 -0
  18. lazyopencode/services/parsers/plugin.py +127 -0
  19. lazyopencode/services/parsers/rules.py +65 -0
  20. lazyopencode/services/parsers/skill.py +138 -0
  21. lazyopencode/services/parsers/tool.py +67 -0
  22. lazyopencode/styles/app.tcss +173 -0
  23. lazyopencode/themes.py +30 -0
  24. lazyopencode/widgets/__init__.py +17 -0
  25. lazyopencode/widgets/app_footer.py +71 -0
  26. lazyopencode/widgets/combined_panel.py +345 -0
  27. lazyopencode/widgets/detail_pane.py +338 -0
  28. lazyopencode/widgets/filter_input.py +88 -0
  29. lazyopencode/widgets/helpers/__init__.py +5 -0
  30. lazyopencode/widgets/helpers/rendering.py +17 -0
  31. lazyopencode/widgets/status_panel.py +70 -0
  32. lazyopencode/widgets/type_panel.py +501 -0
  33. lazyopencode-0.1.0.dist-info/METADATA +118 -0
  34. lazyopencode-0.1.0.dist-info/RECORD +37 -0
  35. lazyopencode-0.1.0.dist-info/WHEEL +4 -0
  36. lazyopencode-0.1.0.dist-info/entry_points.txt +2 -0
  37. lazyopencode-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,118 @@
1
+ Metadata-Version: 2.4
2
+ Name: lazyopencode
3
+ Version: 0.1.0
4
+ Summary: A lazygit-style TUI for visualizing OpenCode customizations
5
+ Project-URL: Homepage, https://github.com/nikiforovall/lazyopencode
6
+ Project-URL: Repository, https://github.com/nikiforovall/lazyopencode
7
+ Author: nikiforovall
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Keywords: cli,opencode,textual,tui
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Software Development :: User Interfaces
20
+ Requires-Python: >=3.11
21
+ Requires-Dist: pathspec>=0.12.0
22
+ Requires-Dist: pyyaml>=6.0
23
+ Requires-Dist: rich>=13.0.0
24
+ Requires-Dist: textual>=0.89.0
25
+ Provides-Extra: dev
26
+ Requires-Dist: mypy>=1.13.0; extra == 'dev'
27
+ Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
28
+ Requires-Dist: pytest-textual-snapshot>=1.0.0; extra == 'dev'
29
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
30
+ Requires-Dist: ruff>=0.8.0; extra == 'dev'
31
+ Description-Content-Type: text/markdown
32
+
33
+ # LazyOpenCode
34
+
35
+ A keyboard-driven TUI for managing OpenCode customizations.
36
+
37
+ <!-- ![LazyOpenCode Screenshot](docs/screenshot.png) -->
38
+
39
+ ## Features
40
+
41
+ - Visual discovery of all OpenCode customizations
42
+ - Keyboard-driven navigation (lazygit-inspired)
43
+ - View commands, agents, skills, rules, MCPs, and plugins
44
+ - Filter by configuration level (global/project)
45
+ - Search within customizations
46
+
47
+ ## Installation
48
+
49
+ ```bash
50
+ uvx lazyopencode
51
+ ```
52
+
53
+ Or install with pip:
54
+
55
+ ```bash
56
+ pip install lazyopencode
57
+ ```
58
+
59
+ ## Keyboard Shortcuts
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 |
76
+
77
+ ## Configuration Paths
78
+
79
+ LazyOpenCode discovers customizations from:
80
+
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/` |
89
+
90
+ ## Inspired By
91
+
92
+ - [LazyClaude](https://github.com/NikiforovAll/lazyclaude) - Similar TUI for Claude Code
93
+ - [Lazygit](https://github.com/jesseduffield/lazygit) - Keyboard-driven Git TUI
94
+ - [OpenCode](https://opencode.ai) - AI coding agent
95
+
96
+
97
+ ## Development
98
+
99
+ ```bash
100
+ # Clone and install
101
+ git clone https://github.com/yourusername/lazyopencode
102
+ cd lazyopencode
103
+ uv sync
104
+
105
+ # Run
106
+ uv run lazyopencode
107
+
108
+ # Run tests
109
+ uv run pytest
110
+
111
+ # Lint and format
112
+ uv run ruff check .
113
+ uv run ruff format .
114
+ ```
115
+
116
+ ## License
117
+
118
+ MIT
@@ -0,0 +1,37 @@
1
+ lazyopencode/__init__.py,sha256=p0PzeS7KA58kGpxWMzOVMHIPAXDXOPg-bMiF9Jxtp2c,1303
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
5
+ lazyopencode/bindings.py,sha256=N6e-U23aFuMDlOjqtsGvoLl4_qGq-loafgKZ2US7A7M,1214
6
+ lazyopencode/themes.py,sha256=9KsyWlk9XeAupAdUTj785riWuDlQMnERjD8DUzogCPc,713
7
+ lazyopencode/mixins/filtering.py,sha256=m7G5NN-dvphPCnnNc8GyJY3p6ijmFxnr4GrzukYMoII,988
8
+ lazyopencode/mixins/help.py,sha256=sZdoa0kmdfGE-81hNQAQKPY-ycH2f-2widAiWvH5iiM,1980
9
+ lazyopencode/mixins/navigation.py,sha256=ES8Oc1bf3A7MmtyLVkynSlQWSrXsiI7cDTyfLRYSGYE,6850
10
+ lazyopencode/models/__init__.py,sha256=X2Wlkc6IS1nQF0JNTvqZNNLh6YI1SH-D5YP4xpWL-rc,298
11
+ lazyopencode/models/customization.py,sha256=Tom492ns5ZqGFGURMKNRugqwt43GZrGBuHfa5BUx_sw,2910
12
+ lazyopencode/services/__init__.py,sha256=aCVZJecnMeupVU-T6EhR34dFu295XwJP9dqZ8MKWOJE,146
13
+ lazyopencode/services/discovery.py,sha256=5helVx3gye6axuVClKpRIGMMLOjTA9Je7oSkQDx0aOk,12608
14
+ lazyopencode/services/gitignore_filter.py,sha256=9QFKrUsSm0kSSYXzJ3_Zx440Pk1T6CSo6eaoPP5Pthk,3155
15
+ lazyopencode/services/parsers/__init__.py,sha256=zav6eIpqF5TGFp2jlGSOFZtCicHyltA--cVMycox9M0,4344
16
+ lazyopencode/services/parsers/agent.py,sha256=zaw8y3RZsPFOu8DsoM3b2XPGzp0BnQJcbx86mEIYUxM,2885
17
+ lazyopencode/services/parsers/command.py,sha256=-Mg3sq_4TLkIvXKzIX4lB7KvU0e4T0TA-5lpwhcUgBE,2977
18
+ lazyopencode/services/parsers/mcp.py,sha256=4C5LoXE82KOG7e-hoS12U-0MSDiyPjPAHKE4EmOlaIE,2127
19
+ lazyopencode/services/parsers/plugin.py,sha256=7J-z7-5iOnk64iYxDPiVV9ak013KKJQhdjolBn43z7A,4014
20
+ lazyopencode/services/parsers/rules.py,sha256=D92lCK_UHnVAeXV4W-lVX5kztwQY9gPEaJQgWp2exBo,2053
21
+ lazyopencode/services/parsers/skill.py,sha256=WMKIv1HJSdx0vt0KJ9YtQ0oB1G5GOOC_smnBPynx7s8,4062
22
+ lazyopencode/services/parsers/tool.py,sha256=sL3N63cim68R_wo5s0WONnnnvYxrK-tyiGCIc7guMV0,1800
23
+ lazyopencode/styles/app.tcss,sha256=fAAWxQ7ePJ7oYfMUoU3ffC3PfJ9hGocHhPF7nNMf-qU,2658
24
+ lazyopencode/widgets/__init__.py,sha256=syhZGjXKhKjg75iSU1xgRqiRWV-S-Jh8ipd0g1-qkMs,497
25
+ lazyopencode/widgets/app_footer.py,sha256=kapIzxk2F5h6NgoDLYtkbFSTU8le5YtvDQcJ_Mribsw,2200
26
+ lazyopencode/widgets/combined_panel.py,sha256=vEopdSAmThctwAlawwY88u5Bmz4XNMnDY9u2YnCLco8,12113
27
+ lazyopencode/widgets/detail_pane.py,sha256=fFTGZhaJXP4PGAUItv4rYMiDkTbdqRXG0NTI6ooS_kc,11296
28
+ lazyopencode/widgets/filter_input.py,sha256=rJp7Y0NVJSj7c-wIS8ZPXgkxTtYU4Gp-DXJOFYOhV5U,2518
29
+ lazyopencode/widgets/status_panel.py,sha256=k4lx4GrHlVUvt6t32_bz2WOWvZdPNawdSMhmXUZYpc8,2127
30
+ lazyopencode/widgets/type_panel.py,sha256=wg2D5diKvdrwco7pvcUnF9WPOgTveiH1qt0O82gkqa4,19313
31
+ lazyopencode/widgets/helpers/__init__.py,sha256=-jGrYtTMl9rmX8Q5Vod_oAuYaMl6Yh5JRwv8AFKQcwk,135
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,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ lazyopencode = lazyopencode.__main__:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 nikiforovall
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.