vexy-overnight 1.0.3__tar.gz
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.
- vexy_overnight-1.0.3/.gitignore +301 -0
- vexy_overnight-1.0.3/LICENSE +21 -0
- vexy_overnight-1.0.3/PKG-INFO +266 -0
- vexy_overnight-1.0.3/README.md +221 -0
- vexy_overnight-1.0.3/pyproject.toml +389 -0
- vexy_overnight-1.0.3/src/vexy_overnight/__version__.py +34 -0
- vexy_overnight-1.0.3/src/vexy_overnight/py.typed +1 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
__version__.py
|
|
3
|
+
_Chutzpah*
|
|
4
|
+
_deps
|
|
5
|
+
_NCrunch_*
|
|
6
|
+
_pkginfo.txt
|
|
7
|
+
_private
|
|
8
|
+
_Pvt_Extensions
|
|
9
|
+
_ReSharper*/
|
|
10
|
+
_TeamCity*
|
|
11
|
+
_UpgradeReport_Files/
|
|
12
|
+
_version.py
|
|
13
|
+
!?*.[Cc]ache/
|
|
14
|
+
!.axoCover/settings.json
|
|
15
|
+
!.vscode/extensions.json
|
|
16
|
+
!.vscode/launch.json
|
|
17
|
+
!.vscode/settings.json
|
|
18
|
+
!.vscode/tasks.json
|
|
19
|
+
!**/[Pp]ackages/build/
|
|
20
|
+
!Directory.Build.rsp
|
|
21
|
+
!dist/.gitkeep
|
|
22
|
+
._*
|
|
23
|
+
.*crunch*.local.xml
|
|
24
|
+
.axoCover/*
|
|
25
|
+
.builds
|
|
26
|
+
.cache
|
|
27
|
+
.coverage
|
|
28
|
+
.coverage.*
|
|
29
|
+
.cr/personal
|
|
30
|
+
.DS_Store
|
|
31
|
+
.DS_Store?
|
|
32
|
+
.eggs/
|
|
33
|
+
.env
|
|
34
|
+
.fake/
|
|
35
|
+
.history/
|
|
36
|
+
.hypothesis/
|
|
37
|
+
.idea/
|
|
38
|
+
.installed.cfg
|
|
39
|
+
.ionide/
|
|
40
|
+
.localhistory/
|
|
41
|
+
.mfractor/
|
|
42
|
+
.mypy_cache
|
|
43
|
+
.nox/
|
|
44
|
+
.ntvs_analysis.dat
|
|
45
|
+
.paket/paket.exe
|
|
46
|
+
.pytest_cache/
|
|
47
|
+
.Python
|
|
48
|
+
.ruff_cache/
|
|
49
|
+
.sass-cache/
|
|
50
|
+
.Spotlight-V100
|
|
51
|
+
.tox/
|
|
52
|
+
.Trashes
|
|
53
|
+
.venv
|
|
54
|
+
.vs/
|
|
55
|
+
.vscode
|
|
56
|
+
.vscode/
|
|
57
|
+
.vscode/*
|
|
58
|
+
.vshistory/
|
|
59
|
+
[Aa][Rr][Mm]/
|
|
60
|
+
[Aa][Rr][Mm]64/
|
|
61
|
+
[Bb]in/
|
|
62
|
+
[Bb]uild[Ll]og.*
|
|
63
|
+
[Dd]ebug/
|
|
64
|
+
[Dd]ebugPS/
|
|
65
|
+
[Dd]ebugPublic/
|
|
66
|
+
[Ee]xpress/
|
|
67
|
+
[Ll]og/
|
|
68
|
+
[Ll]ogs/
|
|
69
|
+
[Oo]bj/
|
|
70
|
+
[Rr]elease/
|
|
71
|
+
[Rr]eleasePS/
|
|
72
|
+
[Rr]eleases/
|
|
73
|
+
[Tt]est[Rr]esult*/
|
|
74
|
+
[Ww][Ii][Nn]32/
|
|
75
|
+
*_autogen/
|
|
76
|
+
*_h.h
|
|
77
|
+
*_i.c
|
|
78
|
+
*_p.c
|
|
79
|
+
*_wpftmp.csproj
|
|
80
|
+
*- [Bb]ackup ([0-9]).rdl
|
|
81
|
+
*- [Bb]ackup ([0-9][0-9]).rdl
|
|
82
|
+
*- [Bb]ackup.rdl
|
|
83
|
+
*.[Cc]ache
|
|
84
|
+
*.[Pp]ublish.xml
|
|
85
|
+
*.[Rr]e[Ss]harper
|
|
86
|
+
*.a
|
|
87
|
+
*.app
|
|
88
|
+
*.appx
|
|
89
|
+
*.appxbundle
|
|
90
|
+
*.appxupload
|
|
91
|
+
*.aps
|
|
92
|
+
*.azurePubxml
|
|
93
|
+
*.bim_*.settings
|
|
94
|
+
*.bim.layout
|
|
95
|
+
*.binlog
|
|
96
|
+
*.btm.cs
|
|
97
|
+
*.btp.cs
|
|
98
|
+
*.build.csdef
|
|
99
|
+
*.cab
|
|
100
|
+
*.cachefile
|
|
101
|
+
*.code-workspace
|
|
102
|
+
*.cover
|
|
103
|
+
*.coverage
|
|
104
|
+
*.coveragexml
|
|
105
|
+
*.d
|
|
106
|
+
*.dbmdl
|
|
107
|
+
*.dbproj.schemaview
|
|
108
|
+
*.dll
|
|
109
|
+
*.dotCover
|
|
110
|
+
*.DotSettings.user
|
|
111
|
+
*.dsp
|
|
112
|
+
*.dsw
|
|
113
|
+
*.dylib
|
|
114
|
+
*.e2e
|
|
115
|
+
*.egg
|
|
116
|
+
*.egg-info/
|
|
117
|
+
*.exe
|
|
118
|
+
*.gch
|
|
119
|
+
*.GhostDoc.xml
|
|
120
|
+
*.gpState
|
|
121
|
+
*.ilk
|
|
122
|
+
*.iobj
|
|
123
|
+
*.ipdb
|
|
124
|
+
*.jfm
|
|
125
|
+
*.jmconfig
|
|
126
|
+
*.la
|
|
127
|
+
*.lai
|
|
128
|
+
*.ldf
|
|
129
|
+
*.lib
|
|
130
|
+
*.lo
|
|
131
|
+
*.log
|
|
132
|
+
*.mdf
|
|
133
|
+
*.meta
|
|
134
|
+
*.mm.*
|
|
135
|
+
*.mod
|
|
136
|
+
*.msi
|
|
137
|
+
*.msix
|
|
138
|
+
*.msm
|
|
139
|
+
*.msp
|
|
140
|
+
*.ncb
|
|
141
|
+
*.ndf
|
|
142
|
+
*.nuget.props
|
|
143
|
+
*.nuget.targets
|
|
144
|
+
*.nupkg
|
|
145
|
+
*.nvuser
|
|
146
|
+
*.o
|
|
147
|
+
*.obj
|
|
148
|
+
*.odx.cs
|
|
149
|
+
*.opendb
|
|
150
|
+
*.opensdf
|
|
151
|
+
*.opt
|
|
152
|
+
*.out
|
|
153
|
+
*.pch
|
|
154
|
+
*.pdb
|
|
155
|
+
*.pfx
|
|
156
|
+
*.pgc
|
|
157
|
+
*.pgd
|
|
158
|
+
*.pidb
|
|
159
|
+
*.plg
|
|
160
|
+
*.psess
|
|
161
|
+
*.publishproj
|
|
162
|
+
*.publishsettings
|
|
163
|
+
*.pubxml
|
|
164
|
+
*.py,cover
|
|
165
|
+
*.py[cod]
|
|
166
|
+
*.pyc
|
|
167
|
+
*.rdl.data
|
|
168
|
+
*.rptproj.bak
|
|
169
|
+
*.rptproj.rsuser
|
|
170
|
+
*.rsp
|
|
171
|
+
*.rsuser
|
|
172
|
+
*.sap
|
|
173
|
+
*.sbr
|
|
174
|
+
*.scc
|
|
175
|
+
*.sdf
|
|
176
|
+
*.sln.docstates
|
|
177
|
+
*.sln.iml
|
|
178
|
+
*.slo
|
|
179
|
+
*.smod
|
|
180
|
+
*.snupkg
|
|
181
|
+
*.so
|
|
182
|
+
*.suo
|
|
183
|
+
*.svclog
|
|
184
|
+
*.swo
|
|
185
|
+
*.swp
|
|
186
|
+
*.tlb
|
|
187
|
+
*.tlh
|
|
188
|
+
*.tli
|
|
189
|
+
*.tlog
|
|
190
|
+
*.tmp
|
|
191
|
+
*.tmp_proj
|
|
192
|
+
*.tss
|
|
193
|
+
*.user
|
|
194
|
+
*.userosscache
|
|
195
|
+
*.userprefs
|
|
196
|
+
*.vbp
|
|
197
|
+
*.vbw
|
|
198
|
+
*.VC.db
|
|
199
|
+
*.VC.VC.opendb
|
|
200
|
+
*.VisualState.xml
|
|
201
|
+
*.vsp
|
|
202
|
+
*.vspscc
|
|
203
|
+
*.vspx
|
|
204
|
+
*.vssscc
|
|
205
|
+
*.xsd.cs
|
|
206
|
+
**/[Pp]ackages/*
|
|
207
|
+
**/*.DesktopClient/GeneratedArtifacts
|
|
208
|
+
**/*.DesktopClient/ModelManifest.xml
|
|
209
|
+
**/*.HTMLClient/GeneratedArtifacts
|
|
210
|
+
**/*.Server/GeneratedArtifacts
|
|
211
|
+
**/*.Server/ModelManifest.xml
|
|
212
|
+
*~
|
|
213
|
+
*$py.class
|
|
214
|
+
~$*
|
|
215
|
+
$tf/
|
|
216
|
+
AppPackages/
|
|
217
|
+
artifacts/
|
|
218
|
+
ASALocalRun/
|
|
219
|
+
AutoTest.Net/
|
|
220
|
+
Backup*/
|
|
221
|
+
BenchmarkDotNet.Artifacts/
|
|
222
|
+
bld/
|
|
223
|
+
build/
|
|
224
|
+
BundleArtifacts/
|
|
225
|
+
ClientBin/
|
|
226
|
+
cmake_install.cmake
|
|
227
|
+
CMakeCache.txt
|
|
228
|
+
CMakeFiles
|
|
229
|
+
CMakeLists.txt.user
|
|
230
|
+
CMakeScripts
|
|
231
|
+
CMakeUserPresets.json
|
|
232
|
+
compile_commands.json
|
|
233
|
+
cover/
|
|
234
|
+
coverage.xml
|
|
235
|
+
coverage*.info
|
|
236
|
+
coverage*.json
|
|
237
|
+
coverage*.xml
|
|
238
|
+
csx/
|
|
239
|
+
CTestTestfile.cmake
|
|
240
|
+
develop-eggs/
|
|
241
|
+
dlldata.c
|
|
242
|
+
DocProject/buildhelp/
|
|
243
|
+
DocProject/Help/*.hhc
|
|
244
|
+
DocProject/Help/*.hhk
|
|
245
|
+
DocProject/Help/*.hhp
|
|
246
|
+
DocProject/Help/*.HxC
|
|
247
|
+
DocProject/Help/*.HxT
|
|
248
|
+
DocProject/Help/html
|
|
249
|
+
DocProject/Help/Html2
|
|
250
|
+
downloads/
|
|
251
|
+
ecf/
|
|
252
|
+
eggs/
|
|
253
|
+
ehthumbs.db
|
|
254
|
+
env.bak/
|
|
255
|
+
env/
|
|
256
|
+
ENV/
|
|
257
|
+
external
|
|
258
|
+
FakesAssemblies/
|
|
259
|
+
FodyWeavers.xsd
|
|
260
|
+
Generated_Code/
|
|
261
|
+
Generated\ Files/
|
|
262
|
+
healthchecksdb
|
|
263
|
+
htmlcov/
|
|
264
|
+
install_manifest.txt
|
|
265
|
+
ipch/
|
|
266
|
+
lib/
|
|
267
|
+
lib64/
|
|
268
|
+
Makefile
|
|
269
|
+
MANIFEST
|
|
270
|
+
MigrationBackup/
|
|
271
|
+
mono_crash.*
|
|
272
|
+
nCrunchTemp_*
|
|
273
|
+
node_modules/
|
|
274
|
+
nosetests.xml
|
|
275
|
+
nunit-*.xml
|
|
276
|
+
OpenCover/
|
|
277
|
+
orleans.codegen.cs
|
|
278
|
+
Package.StoreAssociation.xml
|
|
279
|
+
paket-files/
|
|
280
|
+
parts/
|
|
281
|
+
project.fragment.lock.json
|
|
282
|
+
project.lock.json
|
|
283
|
+
publish/
|
|
284
|
+
PublishScripts/
|
|
285
|
+
rcf/
|
|
286
|
+
ScaffoldingReadMe.txt
|
|
287
|
+
sdist/
|
|
288
|
+
ServiceFabricBackup/
|
|
289
|
+
StyleCopReport.xml
|
|
290
|
+
Testing
|
|
291
|
+
TestResult.xml
|
|
292
|
+
Thumbs.db
|
|
293
|
+
UpgradeLog*.htm
|
|
294
|
+
UpgradeLog*.XML
|
|
295
|
+
var/
|
|
296
|
+
venv.bak/
|
|
297
|
+
venv/
|
|
298
|
+
VERSION.txt
|
|
299
|
+
wheels/
|
|
300
|
+
x64/
|
|
301
|
+
x86/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Fontlab Ltd
|
|
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.
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vexy-overnight
|
|
3
|
+
Version: 1.0.3
|
|
4
|
+
Project-URL: Documentation, https://github.com/vexyart/vexy-overnight#readme
|
|
5
|
+
Project-URL: Issues, https://github.com/vexyart/vexy-overnight/issues
|
|
6
|
+
Project-URL: Source, https://github.com/vexyart/vexy-overnight
|
|
7
|
+
Author-email: Fontlab Ltd <opensource@vexy.art>
|
|
8
|
+
License: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
19
|
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Requires-Dist: fire>=0.6.0
|
|
22
|
+
Requires-Dist: loguru<1.0,>=0.7
|
|
23
|
+
Requires-Dist: rich>=13.0.0
|
|
24
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
25
|
+
Requires-Dist: tomli>=2.0.0
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: hatch>=1.12.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: mypy>=1.15.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: pre-commit>=4.1.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: ruff>=0.9.7; extra == 'dev'
|
|
31
|
+
Requires-Dist: uv>=0.5.8; extra == 'dev'
|
|
32
|
+
Provides-Extra: docs
|
|
33
|
+
Requires-Dist: myst-parser>=3.0.0; extra == 'docs'
|
|
34
|
+
Requires-Dist: sphinx-autodoc-typehints>=2.0.0; extra == 'docs'
|
|
35
|
+
Requires-Dist: sphinx-rtd-theme>=2.0.0; extra == 'docs'
|
|
36
|
+
Requires-Dist: sphinx>=7.2.6; extra == 'docs'
|
|
37
|
+
Provides-Extra: test
|
|
38
|
+
Requires-Dist: coverage[toml]>=7.6.12; extra == 'test'
|
|
39
|
+
Requires-Dist: pytest-asyncio>=0.25.3; extra == 'test'
|
|
40
|
+
Requires-Dist: pytest-benchmark[histogram]>=5.1.0; extra == 'test'
|
|
41
|
+
Requires-Dist: pytest-cov>=6.0.0; extra == 'test'
|
|
42
|
+
Requires-Dist: pytest-xdist>=3.6.1; extra == 'test'
|
|
43
|
+
Requires-Dist: pytest>=8.3.4; extra == 'test'
|
|
44
|
+
Description-Content-Type: text/markdown
|
|
45
|
+
|
|
46
|
+
# Vexy Overnight Manager (vomgr)
|
|
47
|
+
|
|
48
|
+
A unified management tool for AI assistant CLIs (Claude, Codex, Gemini), providing streamlined launching, automated continuation workflows, and configuration synchronization.
|
|
49
|
+
|
|
50
|
+
## Overview
|
|
51
|
+
|
|
52
|
+
Vexy Overnight Manager (`vomgr`) consolidates and simplifies the management of multiple AI assistant CLIs, replacing a collection of over-engineered legacy tools with a single, maintainable Python package. It handles:
|
|
53
|
+
|
|
54
|
+
- **Unified Launching**: Start Claude, Codex, or Gemini with consistent interfaces
|
|
55
|
+
- **Automated Continuation**: Smart session continuation when tasks complete
|
|
56
|
+
- **Configuration Management**: Safe editing of CLI configuration files
|
|
57
|
+
- **Rules Synchronization**: Keep instruction files (CLAUDE.md, AGENTS.md, etc.) in sync
|
|
58
|
+
- **Tool Updates**: Manage updates for all CLI tools from one place
|
|
59
|
+
|
|
60
|
+
## Features
|
|
61
|
+
|
|
62
|
+
### Core Commands
|
|
63
|
+
|
|
64
|
+
- `vomgr install` - Set up continuation hooks and configurations
|
|
65
|
+
- `vomgr enable/disable <tool>` - Toggle continuation automation
|
|
66
|
+
- `vomgr run <tool>` - Launch AI assistants with proper settings
|
|
67
|
+
- `vomgr rules` - Synchronize instruction files across projects
|
|
68
|
+
- `vomgr update` - Update CLI tools and the package itself
|
|
69
|
+
- `vomgr status` - View current configuration state
|
|
70
|
+
|
|
71
|
+
### Simplified Launchers
|
|
72
|
+
|
|
73
|
+
- `vocl` - Launch Claude with optimized settings
|
|
74
|
+
- `voco` - Launch Codex with profile management
|
|
75
|
+
- `voge` - Launch Gemini with appropriate flags
|
|
76
|
+
|
|
77
|
+
### Continuation Tools
|
|
78
|
+
|
|
79
|
+
- `vocl-go` - Auto-continue Claude sessions (replaces 1500+ line claude4ever.py)
|
|
80
|
+
- `voco-go` - Auto-continue Codex sessions (replaces complex codex4ever.py)
|
|
81
|
+
- `voge-go` - Gemini continuation (when API available)
|
|
82
|
+
|
|
83
|
+
## Installation
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Install from PyPI
|
|
87
|
+
pip install vexy-overnight
|
|
88
|
+
|
|
89
|
+
# Or with uv (recommended)
|
|
90
|
+
uv add vexy-overnight
|
|
91
|
+
|
|
92
|
+
# Install and configure
|
|
93
|
+
vomgr install
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Quick Start
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Enable continuation for Claude
|
|
100
|
+
vomgr enable claude
|
|
101
|
+
|
|
102
|
+
# Launch Claude with continuation enabled
|
|
103
|
+
vocl
|
|
104
|
+
# Or
|
|
105
|
+
vomgr run claude
|
|
106
|
+
|
|
107
|
+
# Sync instruction files in current project
|
|
108
|
+
vomgr rules sync
|
|
109
|
+
|
|
110
|
+
# Update all CLI tools
|
|
111
|
+
vomgr update --cli
|
|
112
|
+
|
|
113
|
+
# Check status
|
|
114
|
+
vomgr status
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Usage Examples
|
|
118
|
+
|
|
119
|
+
### Managing Continuation Hooks
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Enable auto-continuation for Claude and Codex
|
|
123
|
+
vomgr enable claude
|
|
124
|
+
vomgr enable codex
|
|
125
|
+
|
|
126
|
+
# Disable continuation for specific tool
|
|
127
|
+
vomgr disable claude
|
|
128
|
+
|
|
129
|
+
# Check what's enabled
|
|
130
|
+
vomgr status
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Instruction File Management
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Sync instruction files (CLAUDE.md, AGENTS.md, etc.) in current directory
|
|
137
|
+
vomgr rules sync
|
|
138
|
+
|
|
139
|
+
# Append text to all instruction files
|
|
140
|
+
vomgr rules append "Additional instructions here"
|
|
141
|
+
|
|
142
|
+
# Search in instruction files
|
|
143
|
+
vomgr rules search "pattern"
|
|
144
|
+
|
|
145
|
+
# Replace text across instruction files
|
|
146
|
+
vomgr rules replace "old text" "new text"
|
|
147
|
+
|
|
148
|
+
# Manage global instruction files in home directory
|
|
149
|
+
vomgr rules --global sync
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Launching AI Assistants
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Direct launchers (installed as console scripts)
|
|
156
|
+
vocl # Launch Claude
|
|
157
|
+
voco -m gpt5 # Launch Codex with gpt5 profile
|
|
158
|
+
voge # Launch Gemini
|
|
159
|
+
|
|
160
|
+
# Via vomgr
|
|
161
|
+
vomgr run claude --cwd /path/to/project
|
|
162
|
+
vomgr run codex --profile o3
|
|
163
|
+
vomgr run gemini
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Updates and Maintenance
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Check for updates
|
|
170
|
+
vomgr update --check
|
|
171
|
+
|
|
172
|
+
# Update CLI tools (claude, codex, gemini)
|
|
173
|
+
vomgr update --cli
|
|
174
|
+
|
|
175
|
+
# Update vexy-overnight itself
|
|
176
|
+
vomgr update --self
|
|
177
|
+
|
|
178
|
+
# Update everything
|
|
179
|
+
vomgr update --all
|
|
180
|
+
|
|
181
|
+
# Dry run (show what would be updated)
|
|
182
|
+
vomgr update --cli --dry-run
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Architecture
|
|
186
|
+
|
|
187
|
+
### Simplified Design
|
|
188
|
+
|
|
189
|
+
Unlike the legacy tools with 1500+ lines of complex async code, vexy-overnight:
|
|
190
|
+
|
|
191
|
+
- **No iTerm2 dependency**: Uses standard subprocess calls
|
|
192
|
+
- **No TTS**: Simple logging instead of speech synthesis
|
|
193
|
+
- **No state machines**: Straightforward procedural flow
|
|
194
|
+
- **Minimal dependencies**: Just essential packages
|
|
195
|
+
- **Testable**: Every component is unit-testable
|
|
196
|
+
- **Maintainable**: Clear, simple code under 200 lines per file
|
|
197
|
+
|
|
198
|
+
### Configuration Safety
|
|
199
|
+
|
|
200
|
+
- Creates backups before any config modification
|
|
201
|
+
- Validates changes after editing
|
|
202
|
+
- Provides rollback on errors
|
|
203
|
+
- Preserves all existing user settings
|
|
204
|
+
- Uses proper JSON/TOML libraries (no regex hacks)
|
|
205
|
+
|
|
206
|
+
## Migration from Legacy Tools
|
|
207
|
+
|
|
208
|
+
If you're using the old tools (claude4ever.py, codex4ever.py, etc.):
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Back up existing configurations
|
|
212
|
+
vomgr install --backup-legacy
|
|
213
|
+
|
|
214
|
+
# Migration automatically preserves your settings
|
|
215
|
+
vomgr install --migrate
|
|
216
|
+
|
|
217
|
+
# Old tools remain available until you're ready
|
|
218
|
+
# Both can coexist during transition
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Development
|
|
222
|
+
|
|
223
|
+
This project uses modern Python packaging with [uv](https://github.com/astral-sh/uv):
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Clone repository
|
|
227
|
+
git clone https://github.com/vexyart/vexy-overnight
|
|
228
|
+
cd vexy-overnight
|
|
229
|
+
|
|
230
|
+
# Set up development environment
|
|
231
|
+
uv venv --python 3.12
|
|
232
|
+
uv sync
|
|
233
|
+
|
|
234
|
+
# Run tests
|
|
235
|
+
python -m pytest -xvs
|
|
236
|
+
|
|
237
|
+
# Run with coverage
|
|
238
|
+
python -m pytest --cov=src --cov-report=term-missing
|
|
239
|
+
|
|
240
|
+
# Type checking
|
|
241
|
+
uvx mypy src/
|
|
242
|
+
|
|
243
|
+
# Format code
|
|
244
|
+
uvx ruff format src/ tests/
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Requirements
|
|
248
|
+
|
|
249
|
+
- Python 3.12+
|
|
250
|
+
- One or more AI CLI tools installed:
|
|
251
|
+
- Claude Code (`npm install -g @anthropic-ai/claude-code`)
|
|
252
|
+
- Codex (`brew install codex` or from source)
|
|
253
|
+
- Gemini CLI (`npm install -g @google/gemini-cli`)
|
|
254
|
+
|
|
255
|
+
## License
|
|
256
|
+
|
|
257
|
+
MIT License
|
|
258
|
+
|
|
259
|
+
## Contributing
|
|
260
|
+
|
|
261
|
+
Contributions welcome! Please ensure:
|
|
262
|
+
- All tests pass
|
|
263
|
+
- 80%+ code coverage
|
|
264
|
+
- Type hints on all functions
|
|
265
|
+
- No functions over 20 lines
|
|
266
|
+
- No files over 200 lines
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Vexy Overnight Manager (vomgr)
|
|
2
|
+
|
|
3
|
+
A unified management tool for AI assistant CLIs (Claude, Codex, Gemini), providing streamlined launching, automated continuation workflows, and configuration synchronization.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Vexy Overnight Manager (`vomgr`) consolidates and simplifies the management of multiple AI assistant CLIs, replacing a collection of over-engineered legacy tools with a single, maintainable Python package. It handles:
|
|
8
|
+
|
|
9
|
+
- **Unified Launching**: Start Claude, Codex, or Gemini with consistent interfaces
|
|
10
|
+
- **Automated Continuation**: Smart session continuation when tasks complete
|
|
11
|
+
- **Configuration Management**: Safe editing of CLI configuration files
|
|
12
|
+
- **Rules Synchronization**: Keep instruction files (CLAUDE.md, AGENTS.md, etc.) in sync
|
|
13
|
+
- **Tool Updates**: Manage updates for all CLI tools from one place
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
### Core Commands
|
|
18
|
+
|
|
19
|
+
- `vomgr install` - Set up continuation hooks and configurations
|
|
20
|
+
- `vomgr enable/disable <tool>` - Toggle continuation automation
|
|
21
|
+
- `vomgr run <tool>` - Launch AI assistants with proper settings
|
|
22
|
+
- `vomgr rules` - Synchronize instruction files across projects
|
|
23
|
+
- `vomgr update` - Update CLI tools and the package itself
|
|
24
|
+
- `vomgr status` - View current configuration state
|
|
25
|
+
|
|
26
|
+
### Simplified Launchers
|
|
27
|
+
|
|
28
|
+
- `vocl` - Launch Claude with optimized settings
|
|
29
|
+
- `voco` - Launch Codex with profile management
|
|
30
|
+
- `voge` - Launch Gemini with appropriate flags
|
|
31
|
+
|
|
32
|
+
### Continuation Tools
|
|
33
|
+
|
|
34
|
+
- `vocl-go` - Auto-continue Claude sessions (replaces 1500+ line claude4ever.py)
|
|
35
|
+
- `voco-go` - Auto-continue Codex sessions (replaces complex codex4ever.py)
|
|
36
|
+
- `voge-go` - Gemini continuation (when API available)
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Install from PyPI
|
|
42
|
+
pip install vexy-overnight
|
|
43
|
+
|
|
44
|
+
# Or with uv (recommended)
|
|
45
|
+
uv add vexy-overnight
|
|
46
|
+
|
|
47
|
+
# Install and configure
|
|
48
|
+
vomgr install
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Quick Start
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Enable continuation for Claude
|
|
55
|
+
vomgr enable claude
|
|
56
|
+
|
|
57
|
+
# Launch Claude with continuation enabled
|
|
58
|
+
vocl
|
|
59
|
+
# Or
|
|
60
|
+
vomgr run claude
|
|
61
|
+
|
|
62
|
+
# Sync instruction files in current project
|
|
63
|
+
vomgr rules sync
|
|
64
|
+
|
|
65
|
+
# Update all CLI tools
|
|
66
|
+
vomgr update --cli
|
|
67
|
+
|
|
68
|
+
# Check status
|
|
69
|
+
vomgr status
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Usage Examples
|
|
73
|
+
|
|
74
|
+
### Managing Continuation Hooks
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Enable auto-continuation for Claude and Codex
|
|
78
|
+
vomgr enable claude
|
|
79
|
+
vomgr enable codex
|
|
80
|
+
|
|
81
|
+
# Disable continuation for specific tool
|
|
82
|
+
vomgr disable claude
|
|
83
|
+
|
|
84
|
+
# Check what's enabled
|
|
85
|
+
vomgr status
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Instruction File Management
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Sync instruction files (CLAUDE.md, AGENTS.md, etc.) in current directory
|
|
92
|
+
vomgr rules sync
|
|
93
|
+
|
|
94
|
+
# Append text to all instruction files
|
|
95
|
+
vomgr rules append "Additional instructions here"
|
|
96
|
+
|
|
97
|
+
# Search in instruction files
|
|
98
|
+
vomgr rules search "pattern"
|
|
99
|
+
|
|
100
|
+
# Replace text across instruction files
|
|
101
|
+
vomgr rules replace "old text" "new text"
|
|
102
|
+
|
|
103
|
+
# Manage global instruction files in home directory
|
|
104
|
+
vomgr rules --global sync
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Launching AI Assistants
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Direct launchers (installed as console scripts)
|
|
111
|
+
vocl # Launch Claude
|
|
112
|
+
voco -m gpt5 # Launch Codex with gpt5 profile
|
|
113
|
+
voge # Launch Gemini
|
|
114
|
+
|
|
115
|
+
# Via vomgr
|
|
116
|
+
vomgr run claude --cwd /path/to/project
|
|
117
|
+
vomgr run codex --profile o3
|
|
118
|
+
vomgr run gemini
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Updates and Maintenance
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Check for updates
|
|
125
|
+
vomgr update --check
|
|
126
|
+
|
|
127
|
+
# Update CLI tools (claude, codex, gemini)
|
|
128
|
+
vomgr update --cli
|
|
129
|
+
|
|
130
|
+
# Update vexy-overnight itself
|
|
131
|
+
vomgr update --self
|
|
132
|
+
|
|
133
|
+
# Update everything
|
|
134
|
+
vomgr update --all
|
|
135
|
+
|
|
136
|
+
# Dry run (show what would be updated)
|
|
137
|
+
vomgr update --cli --dry-run
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Architecture
|
|
141
|
+
|
|
142
|
+
### Simplified Design
|
|
143
|
+
|
|
144
|
+
Unlike the legacy tools with 1500+ lines of complex async code, vexy-overnight:
|
|
145
|
+
|
|
146
|
+
- **No iTerm2 dependency**: Uses standard subprocess calls
|
|
147
|
+
- **No TTS**: Simple logging instead of speech synthesis
|
|
148
|
+
- **No state machines**: Straightforward procedural flow
|
|
149
|
+
- **Minimal dependencies**: Just essential packages
|
|
150
|
+
- **Testable**: Every component is unit-testable
|
|
151
|
+
- **Maintainable**: Clear, simple code under 200 lines per file
|
|
152
|
+
|
|
153
|
+
### Configuration Safety
|
|
154
|
+
|
|
155
|
+
- Creates backups before any config modification
|
|
156
|
+
- Validates changes after editing
|
|
157
|
+
- Provides rollback on errors
|
|
158
|
+
- Preserves all existing user settings
|
|
159
|
+
- Uses proper JSON/TOML libraries (no regex hacks)
|
|
160
|
+
|
|
161
|
+
## Migration from Legacy Tools
|
|
162
|
+
|
|
163
|
+
If you're using the old tools (claude4ever.py, codex4ever.py, etc.):
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Back up existing configurations
|
|
167
|
+
vomgr install --backup-legacy
|
|
168
|
+
|
|
169
|
+
# Migration automatically preserves your settings
|
|
170
|
+
vomgr install --migrate
|
|
171
|
+
|
|
172
|
+
# Old tools remain available until you're ready
|
|
173
|
+
# Both can coexist during transition
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Development
|
|
177
|
+
|
|
178
|
+
This project uses modern Python packaging with [uv](https://github.com/astral-sh/uv):
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Clone repository
|
|
182
|
+
git clone https://github.com/vexyart/vexy-overnight
|
|
183
|
+
cd vexy-overnight
|
|
184
|
+
|
|
185
|
+
# Set up development environment
|
|
186
|
+
uv venv --python 3.12
|
|
187
|
+
uv sync
|
|
188
|
+
|
|
189
|
+
# Run tests
|
|
190
|
+
python -m pytest -xvs
|
|
191
|
+
|
|
192
|
+
# Run with coverage
|
|
193
|
+
python -m pytest --cov=src --cov-report=term-missing
|
|
194
|
+
|
|
195
|
+
# Type checking
|
|
196
|
+
uvx mypy src/
|
|
197
|
+
|
|
198
|
+
# Format code
|
|
199
|
+
uvx ruff format src/ tests/
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Requirements
|
|
203
|
+
|
|
204
|
+
- Python 3.12+
|
|
205
|
+
- One or more AI CLI tools installed:
|
|
206
|
+
- Claude Code (`npm install -g @anthropic-ai/claude-code`)
|
|
207
|
+
- Codex (`brew install codex` or from source)
|
|
208
|
+
- Gemini CLI (`npm install -g @google/gemini-cli`)
|
|
209
|
+
|
|
210
|
+
## License
|
|
211
|
+
|
|
212
|
+
MIT License
|
|
213
|
+
|
|
214
|
+
## Contributing
|
|
215
|
+
|
|
216
|
+
Contributions welcome! Please ensure:
|
|
217
|
+
- All tests pass
|
|
218
|
+
- 80%+ code coverage
|
|
219
|
+
- Type hints on all functions
|
|
220
|
+
- No functions over 20 lines
|
|
221
|
+
- No files over 200 lines
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
# this_file: pyproject.toml
|
|
2
|
+
#==============================================================================
|
|
3
|
+
# VEXY-OVERNIGHT PACKAGE CONFIGURATION
|
|
4
|
+
# This pyproject.toml defines the package metadata, dependencies, build system,
|
|
5
|
+
# and development environment for the vexy-overnight package.
|
|
6
|
+
#==============================================================================
|
|
7
|
+
|
|
8
|
+
#------------------------------------------------------------------------------
|
|
9
|
+
# PROJECT METADATA
|
|
10
|
+
# Core package information used by PyPI and package managers.
|
|
11
|
+
#------------------------------------------------------------------------------
|
|
12
|
+
[project]
|
|
13
|
+
name = 'vexy-overnight' # Package name on PyPI
|
|
14
|
+
description = '' # Short description
|
|
15
|
+
readme = 'README.md' # Path to README file
|
|
16
|
+
requires-python = '>=3.10' # Minimum Python version
|
|
17
|
+
keywords = [
|
|
18
|
+
] # Keywords for PyPI search
|
|
19
|
+
dynamic = ["version"] # Fields set dynamically at build time
|
|
20
|
+
|
|
21
|
+
# PyPI classifiers for package categorization
|
|
22
|
+
classifiers = [
|
|
23
|
+
'Development Status :: 4 - Beta', # Package maturity level
|
|
24
|
+
'Programming Language :: Python',
|
|
25
|
+
'Programming Language :: Python :: 3.10',
|
|
26
|
+
'Programming Language :: Python :: 3.11',
|
|
27
|
+
'Programming Language :: Python :: 3.12',
|
|
28
|
+
'Programming Language :: Python :: Implementation :: CPython',
|
|
29
|
+
'Programming Language :: Python :: Implementation :: PyPy',
|
|
30
|
+
'Operating System :: OS Independent',
|
|
31
|
+
'License :: OSI Approved :: MIT License',
|
|
32
|
+
'Intended Audience :: Developers',
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
dependencies = [
|
|
36
|
+
'loguru>=0.7,<1.0',
|
|
37
|
+
"fire>=0.6.0",
|
|
38
|
+
'rich>=13.0.0',
|
|
39
|
+
'tomli>=2.0.0',
|
|
40
|
+
'tomli-w>=1.0.0',
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
# Author information
|
|
44
|
+
[[project.authors]]
|
|
45
|
+
name = 'Fontlab Ltd'
|
|
46
|
+
email = 'opensource@vexy.art'
|
|
47
|
+
|
|
48
|
+
# License information
|
|
49
|
+
[project.license]
|
|
50
|
+
text = 'MIT'
|
|
51
|
+
|
|
52
|
+
# Project URLs
|
|
53
|
+
[project.urls]
|
|
54
|
+
Documentation = 'https://github.com/vexyart/vexy-overnight#readme'
|
|
55
|
+
Issues = 'https://github.com/vexyart/vexy-overnight/issues'
|
|
56
|
+
Source = 'https://github.com/vexyart/vexy-overnight'
|
|
57
|
+
|
|
58
|
+
#------------------------------------------------------------------------------
|
|
59
|
+
# OPTIONAL DEPENDENCIES
|
|
60
|
+
# Additional dependencies for optional features, development, and testing.
|
|
61
|
+
#------------------------------------------------------------------------------
|
|
62
|
+
[project.optional-dependencies]
|
|
63
|
+
|
|
64
|
+
# Development tools
|
|
65
|
+
dev = [
|
|
66
|
+
'hatch>=1.12.0', # Project management and build tooling
|
|
67
|
+
'uv>=0.5.8', # Fast dependency resolver and installer
|
|
68
|
+
'ruff>=0.9.7', # Linting and formatting
|
|
69
|
+
'mypy>=1.15.0', # Type checking
|
|
70
|
+
'pre-commit>=4.1.0', # Git hook management
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
# Testing tools and frameworks
|
|
74
|
+
test = [
|
|
75
|
+
'pytest>=8.3.4', # Testing framework - Keep pytest as is, update if newer pytest version is required
|
|
76
|
+
'pytest-cov>=6.0.0', # Coverage plugin for pytest - Keep pytest-cov as is, update if newer pytest-cov version is required
|
|
77
|
+
'pytest-xdist>=3.6.1', # Parallel test execution - Keep pytest-xdist as is, update if newer pytest-xdist version is required
|
|
78
|
+
'pytest-benchmark[histogram]>=5.1.0', # Benchmarking plugin - Keep pytest-benchmark as is, update if newer pytest-benchmark version is required
|
|
79
|
+
'pytest-asyncio>=0.25.3', # Async test support - Keep pytest-asyncio as is, update if newer pytest-asyncio version is required
|
|
80
|
+
'coverage[toml]>=7.6.12',
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
docs = [
|
|
84
|
+
"sphinx>=7.2.6",
|
|
85
|
+
"sphinx-rtd-theme>=2.0.0",
|
|
86
|
+
"sphinx-autodoc-typehints>=2.0.0",
|
|
87
|
+
"myst-parser>=3.0.0", # Markdown support in Sphinx
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
#------------------------------------------------------------------------------
|
|
91
|
+
# COMMAND-LINE SCRIPTS
|
|
92
|
+
# Entry points for command-line executables installed with the package.
|
|
93
|
+
#------------------------------------------------------------------------------
|
|
94
|
+
[project.scripts]
|
|
95
|
+
vomgr = "vexy_overnight.cli:main"
|
|
96
|
+
vocl = "vexy_overnight.launchers:vocl"
|
|
97
|
+
voco = "vexy_overnight.launchers:voco"
|
|
98
|
+
voge = "vexy_overnight.launchers:voge"
|
|
99
|
+
|
|
100
|
+
#------------------------------------------------------------------------------
|
|
101
|
+
# BUILD SYSTEM CONFIGURATION
|
|
102
|
+
# Defines the tools required to build the package and the build backend.
|
|
103
|
+
#------------------------------------------------------------------------------
|
|
104
|
+
[build-system]
|
|
105
|
+
# Hatchling is a modern build backend for Python packaging
|
|
106
|
+
# hatch-vcs integrates with version control systems for versioning
|
|
107
|
+
requires = [
|
|
108
|
+
'hatchling>=1.27.0', # Keep hatchling as is, update if newer hatchling version is required
|
|
109
|
+
'hatch-vcs>=0.4.0', # Keep hatch-vcs as is, update if newer hatch-vcs version is required
|
|
110
|
+
]
|
|
111
|
+
build-backend = 'hatchling.build' # Specifies Hatchling as the build backend
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
#------------------------------------------------------------------------------
|
|
115
|
+
# HATCH BUILD CONFIGURATION
|
|
116
|
+
# Configures the build process, specifying which packages to include and
|
|
117
|
+
# how to handle versioning.
|
|
118
|
+
#------------------------------------------------------------------------------
|
|
119
|
+
[tool.hatch.build]
|
|
120
|
+
# Include package data files
|
|
121
|
+
include = [
|
|
122
|
+
"src/vexy_overnight/py.typed", # For better type checking support
|
|
123
|
+
"src/vexy_overnight/data/**/*", # Include data files if any
|
|
124
|
+
|
|
125
|
+
]
|
|
126
|
+
exclude = ["**/__pycache__", "**/.pytest_cache", "**/.mypy_cache"]
|
|
127
|
+
|
|
128
|
+
[tool.hatch.build.targets.wheel]
|
|
129
|
+
packages = ["src/vexy_overnight"]
|
|
130
|
+
reproducible = true
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# Version control system hook configuration
|
|
134
|
+
# Automatically updates the version file from git tags
|
|
135
|
+
[tool.hatch.build.hooks.vcs]
|
|
136
|
+
version-file = "src/vexy_overnight/__version__.py"
|
|
137
|
+
|
|
138
|
+
# Version source configuration
|
|
139
|
+
[tool.hatch.version]
|
|
140
|
+
source = 'vcs' # Get version from git tags or other VCS info
|
|
141
|
+
|
|
142
|
+
[tool.hatch.version.vcs]
|
|
143
|
+
tag-pattern = '^(?:v)?(?P<version>\d+\.\d+\.\d+)$' # Enforce semantic version tags like v1.2.3
|
|
144
|
+
|
|
145
|
+
# Metadata handling configuration
|
|
146
|
+
[tool.hatch.metadata]
|
|
147
|
+
allow-direct-references = true # Allow direct references in metadata (useful for local dependencies)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
#------------------------------------------------------------------------------
|
|
151
|
+
# UV CONFIGURATION
|
|
152
|
+
# Settings for uv so the project is always treated as a package.
|
|
153
|
+
#------------------------------------------------------------------------------
|
|
154
|
+
[tool.uv]
|
|
155
|
+
package = true
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
#------------------------------------------------------------------------------
|
|
159
|
+
# DEVELOPMENT ENVIRONMENTS
|
|
160
|
+
|
|
161
|
+
[tool.hatch.envs.default]
|
|
162
|
+
installer = 'uv'
|
|
163
|
+
features = ['dev', 'test']
|
|
164
|
+
dependencies = [
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
# Commands available in the default environment
|
|
168
|
+
[tool.hatch.envs.default.scripts]
|
|
169
|
+
# Run tests with optional arguments
|
|
170
|
+
test = 'python -m pytest {args:tests}'
|
|
171
|
+
# Run tests with coverage reporting
|
|
172
|
+
test-cov = "python -m pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=src/vexy_overnight --cov=tests {args:tests}"
|
|
173
|
+
# Run type checking
|
|
174
|
+
type-check = "python -m mypy src/vexy_overnight tests"
|
|
175
|
+
# Run linting and formatting
|
|
176
|
+
lint = ["python -m ruff check src/vexy_overnight tests", "python -m ruff format --respect-gitignore src/vexy_overnight tests"]
|
|
177
|
+
# Format and fix style issues
|
|
178
|
+
fmt = ["python -m ruff format --respect-gitignore src/vexy_overnight tests", "python -m ruff check --fix src/vexy_overnight tests"]
|
|
179
|
+
fix = ["python -m ruff check --fix --unsafe-fixes src/vexy_overnight tests", "python -m ruff format --respect-gitignore src/vexy_overnight tests"]
|
|
180
|
+
|
|
181
|
+
#------------------------------------------------------------------------------
|
|
182
|
+
# SPECIALIZED ENVIRONMENTS
|
|
183
|
+
# Additional environments for specific development tasks.
|
|
184
|
+
#------------------------------------------------------------------------------
|
|
185
|
+
|
|
186
|
+
# Dedicated environment for linting and code quality checks
|
|
187
|
+
[tool.hatch.envs.lint]
|
|
188
|
+
detached = true # Create a separate, isolated environment
|
|
189
|
+
features = ['dev'] # Use dev extras dependencies
|
|
190
|
+
installer = 'uv'
|
|
191
|
+
|
|
192
|
+
# Linting environment commands
|
|
193
|
+
[tool.hatch.envs.lint.scripts]
|
|
194
|
+
# Type checking with automatic type installation
|
|
195
|
+
typing = "python -m mypy --install-types --non-interactive {args:src/vexy_overnight tests}"
|
|
196
|
+
# Check style and format code
|
|
197
|
+
style = ["python -m ruff check {args:.}", "python -m ruff format --respect-gitignore {args:.}"]
|
|
198
|
+
# Format and fix style issues
|
|
199
|
+
fmt = ["python -m ruff format --respect-gitignore {args:.}", "python -m ruff check --fix {args:.}"]
|
|
200
|
+
fix = ["python -m ruff check --fix --unsafe-fixes {args:.}", "python -m ruff format --respect-gitignore {args:.}"]
|
|
201
|
+
# Run all ops
|
|
202
|
+
all = ["style", "typing", "fix"]
|
|
203
|
+
|
|
204
|
+
# Dedicated environment for testing
|
|
205
|
+
[tool.hatch.envs.test]
|
|
206
|
+
features = ['test'] # Use test extras as dependencies
|
|
207
|
+
installer = 'uv'
|
|
208
|
+
|
|
209
|
+
# Testing environment commands
|
|
210
|
+
[tool.hatch.envs.test.scripts]
|
|
211
|
+
# Run tests in parallel
|
|
212
|
+
test = "python -m pytest -n auto {args:tests}"
|
|
213
|
+
# Run tests with coverage in parallel
|
|
214
|
+
test-cov = "python -m pytest -n auto --cov-report=term-missing --cov-config=pyproject.toml --cov=src/vexy_overnight --cov=tests {args:tests}"
|
|
215
|
+
# Run benchmarks
|
|
216
|
+
bench = "python -m pytest -v -p no:briefcase tests/test_benchmark.py --benchmark-only"
|
|
217
|
+
# Run benchmarks and save results
|
|
218
|
+
bench-save = "python -m pytest -v -p no:briefcase tests/test_benchmark.py --benchmark-only --benchmark-json=benchmark/results.json"
|
|
219
|
+
|
|
220
|
+
# Documentation environment
|
|
221
|
+
[tool.hatch.envs.docs]
|
|
222
|
+
features = ['docs']
|
|
223
|
+
installer = 'uv'
|
|
224
|
+
|
|
225
|
+
# Documentation environment commands
|
|
226
|
+
[tool.hatch.envs.docs.scripts]
|
|
227
|
+
build = "python -m sphinx -b html docs/source docs/build"
|
|
228
|
+
|
|
229
|
+
# GitHub Actions workflow configuration
|
|
230
|
+
[tool.hatch.envs.ci]
|
|
231
|
+
features = ['test']
|
|
232
|
+
installer = 'uv'
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
[tool.hatch.envs.ci.scripts]
|
|
236
|
+
test = "python -m pytest --cov=src/vexy_overnight --cov-report=xml"
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
#------------------------------------------------------------------------------
|
|
240
|
+
# CODE QUALITY TOOLS
|
|
241
|
+
# Configuration for linting, formatting, and code quality enforcement.
|
|
242
|
+
#------------------------------------------------------------------------------
|
|
243
|
+
|
|
244
|
+
#------------------------------------------------------------------------------
|
|
245
|
+
# COVERAGE CONFIGURATION
|
|
246
|
+
# Settings for test coverage measurement and reporting.
|
|
247
|
+
#------------------------------------------------------------------------------
|
|
248
|
+
|
|
249
|
+
# Path mapping for coverage in different environments
|
|
250
|
+
[tool.coverage.paths]
|
|
251
|
+
vexy_overnight = ["src/vexy_overnight", "*/vexy-overnight/src/vexy_overnight"]
|
|
252
|
+
tests = ["tests", "*/vexy-overnight/tests"]
|
|
253
|
+
|
|
254
|
+
# Coverage report configuration
|
|
255
|
+
[tool.coverage.report]
|
|
256
|
+
# Lines to exclude from coverage reporting
|
|
257
|
+
exclude_lines = [
|
|
258
|
+
'no cov', # Custom marker to skip coverage
|
|
259
|
+
'if __name__ == .__main__.:', # Script execution guard
|
|
260
|
+
'if TYPE_CHECKING:', # Type checking imports and code
|
|
261
|
+
'pass', # Empty pass statements
|
|
262
|
+
'raise NotImplementedError', # Unimplemented method placeholders
|
|
263
|
+
'raise ImportError', # Import error handling
|
|
264
|
+
'except ImportError', # Import error handling
|
|
265
|
+
'except KeyError', # Common error handling
|
|
266
|
+
'except AttributeError', # Common error handling
|
|
267
|
+
'except NotImplementedError', # Common error handling
|
|
268
|
+
]
|
|
269
|
+
|
|
270
|
+
[tool.coverage.run]
|
|
271
|
+
source_pkgs = ["vexy_overnight", "tests"]
|
|
272
|
+
branch = true # Measure branch coverage (if/else statements)
|
|
273
|
+
parallel = true # Support parallel test execution
|
|
274
|
+
omit = [
|
|
275
|
+
"src/vexy_overnight/__about__.py",
|
|
276
|
+
]
|
|
277
|
+
|
|
278
|
+
#------------------------------------------------------------------------------
|
|
279
|
+
# MYPY CONFIGURATION
|
|
280
|
+
# Configuration for type checking with mypy.
|
|
281
|
+
#------------------------------------------------------------------------------
|
|
282
|
+
|
|
283
|
+
[tool.mypy]
|
|
284
|
+
python_version = "3.10"
|
|
285
|
+
warn_return_any = true
|
|
286
|
+
warn_unused_configs = true
|
|
287
|
+
disallow_untyped_defs = true
|
|
288
|
+
disallow_incomplete_defs = true
|
|
289
|
+
check_untyped_defs = true
|
|
290
|
+
disallow_untyped_decorators = true
|
|
291
|
+
no_implicit_optional = true
|
|
292
|
+
warn_redundant_casts = true
|
|
293
|
+
warn_unused_ignores = true
|
|
294
|
+
warn_no_return = true
|
|
295
|
+
warn_unreachable = true
|
|
296
|
+
exclude = ["^external/"]
|
|
297
|
+
|
|
298
|
+
[[tool.mypy.overrides]]
|
|
299
|
+
module = ["loguru", "pytest"]
|
|
300
|
+
ignore_missing_imports = true
|
|
301
|
+
|
|
302
|
+
[[tool.mypy.overrides]]
|
|
303
|
+
module = ["tests.*"]
|
|
304
|
+
disallow_untyped_defs = false
|
|
305
|
+
disallow_incomplete_defs = false
|
|
306
|
+
allow_untyped_decorators = true
|
|
307
|
+
|
|
308
|
+
#------------------------------------------------------------------------------
|
|
309
|
+
# PYTEST CONFIGURATION
|
|
310
|
+
# Configuration for pytest, including markers, options, and benchmark settings.
|
|
311
|
+
#------------------------------------------------------------------------------
|
|
312
|
+
|
|
313
|
+
[tool.pytest.ini_options]
|
|
314
|
+
addopts = "-v --durations=10 -p no:briefcase"
|
|
315
|
+
asyncio_mode = "auto"
|
|
316
|
+
asyncio_default_fixture_loop_scope = "function"
|
|
317
|
+
console_output_style = "progress"
|
|
318
|
+
filterwarnings = ["ignore::DeprecationWarning", "ignore::UserWarning"]
|
|
319
|
+
log_cli = true
|
|
320
|
+
log_cli_level = "INFO"
|
|
321
|
+
markers = [
|
|
322
|
+
"benchmark: marks tests as benchmarks (select with '-m benchmark')",
|
|
323
|
+
"unit: mark a test as a unit test",
|
|
324
|
+
"integration: mark a test as an integration test",
|
|
325
|
+
"permutation: tests for permutation functionality",
|
|
326
|
+
"parameter: tests for parameter parsing",
|
|
327
|
+
"prompt: tests for prompt parsing",
|
|
328
|
+
]
|
|
329
|
+
norecursedirs = [
|
|
330
|
+
".*",
|
|
331
|
+
"build",
|
|
332
|
+
"dist",
|
|
333
|
+
"venv",
|
|
334
|
+
"__pycache__",
|
|
335
|
+
"*.egg-info",
|
|
336
|
+
"_private",
|
|
337
|
+
]
|
|
338
|
+
python_classes = ["Test*"]
|
|
339
|
+
python_files = ["test_*.py"]
|
|
340
|
+
python_functions = ["test_*"]
|
|
341
|
+
pythonpath = ["src"]
|
|
342
|
+
testpaths = ["tests"]
|
|
343
|
+
|
|
344
|
+
[tool.pytest-benchmark]
|
|
345
|
+
min_rounds = 100
|
|
346
|
+
min_time = 0.1
|
|
347
|
+
histogram = true
|
|
348
|
+
storage = "file"
|
|
349
|
+
save-data = true
|
|
350
|
+
compare = [
|
|
351
|
+
"min", # Minimum time
|
|
352
|
+
"max", # Maximum time
|
|
353
|
+
"mean", # Mean time
|
|
354
|
+
"stddev", # Standard deviation
|
|
355
|
+
"median", # Median time
|
|
356
|
+
"iqr", # Inter-quartile range
|
|
357
|
+
"ops", # Operations per second
|
|
358
|
+
"rounds", # Number of rounds
|
|
359
|
+
]
|
|
360
|
+
|
|
361
|
+
#------------------------------------------------------------------------------
|
|
362
|
+
# RUFF CONFIGURATION
|
|
363
|
+
# Streamlined Ruff setup with pragmatic defaults.
|
|
364
|
+
#------------------------------------------------------------------------------
|
|
365
|
+
|
|
366
|
+
[tool.ruff]
|
|
367
|
+
target-version = "py310"
|
|
368
|
+
line-length = 100
|
|
369
|
+
|
|
370
|
+
[tool.ruff.format]
|
|
371
|
+
indent-style = "space"
|
|
372
|
+
quote-style = "double"
|
|
373
|
+
|
|
374
|
+
[tool.ruff.lint]
|
|
375
|
+
select = [
|
|
376
|
+
'E', # pycodestyle errors
|
|
377
|
+
'F', # pyflakes errors
|
|
378
|
+
'B', # flake8-bugbear
|
|
379
|
+
'I', # import sorting
|
|
380
|
+
'N', # pep8-naming
|
|
381
|
+
'UP', # modern Python upgrades
|
|
382
|
+
]
|
|
383
|
+
ignore = [
|
|
384
|
+
'E501', # rely on the formatter for line length
|
|
385
|
+
]
|
|
386
|
+
extend-exclude = [".git", ".venv", "venv", "dist", "build"]
|
|
387
|
+
|
|
388
|
+
[tool.ruff.lint.isort]
|
|
389
|
+
known-first-party = ['vexy_overnight']
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
TYPE_CHECKING = False
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from typing import Tuple
|
|
16
|
+
from typing import Union
|
|
17
|
+
|
|
18
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
20
|
+
else:
|
|
21
|
+
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
23
|
+
|
|
24
|
+
version: str
|
|
25
|
+
__version__: str
|
|
26
|
+
__version_tuple__: VERSION_TUPLE
|
|
27
|
+
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
30
|
+
|
|
31
|
+
__version__ = version = '1.0.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 0, 3)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# this_file: src/vexy_overnight/py.typed
|