vimgym 0.1.1__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.
- vimgym-0.1.1/CHANGELOG.md +58 -0
- vimgym-0.1.1/LICENSE +21 -0
- vimgym-0.1.1/MANIFEST.in +8 -0
- vimgym-0.1.1/PKG-INFO +165 -0
- vimgym-0.1.1/README.md +121 -0
- vimgym-0.1.1/completions/_vg +57 -0
- vimgym-0.1.1/defaults/config.json +11 -0
- vimgym-0.1.1/defaults/redaction-rules.json +23 -0
- vimgym-0.1.1/pyproject.toml +80 -0
- vimgym-0.1.1/setup.cfg +4 -0
- vimgym-0.1.1/src/vimgym/__init__.py +1 -0
- vimgym-0.1.1/src/vimgym/cli.py +639 -0
- vimgym-0.1.1/src/vimgym/config.py +306 -0
- vimgym-0.1.1/src/vimgym/daemon.py +283 -0
- vimgym-0.1.1/src/vimgym/db.py +186 -0
- vimgym-0.1.1/src/vimgym/defaults/__init__.py +0 -0
- vimgym-0.1.1/src/vimgym/defaults/config.json +11 -0
- vimgym-0.1.1/src/vimgym/defaults/redaction-rules.json +23 -0
- vimgym-0.1.1/src/vimgym/events.py +19 -0
- vimgym-0.1.1/src/vimgym/pipeline/__init__.py +0 -0
- vimgym-0.1.1/src/vimgym/pipeline/metadata.py +68 -0
- vimgym-0.1.1/src/vimgym/pipeline/orchestrator.py +105 -0
- vimgym-0.1.1/src/vimgym/pipeline/parser.py +313 -0
- vimgym-0.1.1/src/vimgym/pipeline/redact.py +76 -0
- vimgym-0.1.1/src/vimgym/pipeline/summary.py +46 -0
- vimgym-0.1.1/src/vimgym/server.py +363 -0
- vimgym-0.1.1/src/vimgym/storage/__init__.py +0 -0
- vimgym-0.1.1/src/vimgym/storage/export.py +144 -0
- vimgym-0.1.1/src/vimgym/storage/queries.py +293 -0
- vimgym-0.1.1/src/vimgym/storage/writer.py +217 -0
- vimgym-0.1.1/src/vimgym/ui/app.js +1053 -0
- vimgym-0.1.1/src/vimgym/ui/index.html +126 -0
- vimgym-0.1.1/src/vimgym/ui/style.css +1237 -0
- vimgym-0.1.1/src/vimgym/ui/vendor/highlight.min.js +1213 -0
- vimgym-0.1.1/src/vimgym/watcher.py +213 -0
- vimgym-0.1.1/src/vimgym.egg-info/PKG-INFO +165 -0
- vimgym-0.1.1/src/vimgym.egg-info/SOURCES.txt +57 -0
- vimgym-0.1.1/src/vimgym.egg-info/dependency_links.txt +1 -0
- vimgym-0.1.1/src/vimgym.egg-info/entry_points.txt +2 -0
- vimgym-0.1.1/src/vimgym.egg-info/requires.txt +15 -0
- vimgym-0.1.1/src/vimgym.egg-info/top_level.txt +1 -0
- vimgym-0.1.1/tests/test_cli.py +76 -0
- vimgym-0.1.1/tests/test_cli_start_flags.py +28 -0
- vimgym-0.1.1/tests/test_config.py +38 -0
- vimgym-0.1.1/tests/test_config_v2.py +174 -0
- vimgym-0.1.1/tests/test_daemon.py +145 -0
- vimgym-0.1.1/tests/test_db.py +49 -0
- vimgym-0.1.1/tests/test_doctor.py +43 -0
- vimgym-0.1.1/tests/test_metadata.py +35 -0
- vimgym-0.1.1/tests/test_orchestrator.py +57 -0
- vimgym-0.1.1/tests/test_parser.py +88 -0
- vimgym-0.1.1/tests/test_queries.py +89 -0
- vimgym-0.1.1/tests/test_redact.py +80 -0
- vimgym-0.1.1/tests/test_server.py +108 -0
- vimgym-0.1.1/tests/test_sources_api.py +70 -0
- vimgym-0.1.1/tests/test_summary.py +21 -0
- vimgym-0.1.1/tests/test_ui.py +122 -0
- vimgym-0.1.1/tests/test_watcher.py +132 -0
- vimgym-0.1.1/tests/test_writer.py +68 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to vimgym are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.1] — first official release
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Duplicate log lines.** The daemon's child process attached both a
|
|
13
|
+
`FileHandler` and a `StreamHandler(sys.stderr)`, while the parent's
|
|
14
|
+
`subprocess.Popen` redirected the child's stderr to the same log file.
|
|
15
|
+
Every record was written twice. The child now uses only a
|
|
16
|
+
`RotatingFileHandler`; uvicorn's own loggers are forced to propagate
|
|
17
|
+
through the root logger so we own logging end-to-end.
|
|
18
|
+
- **Wheel installs were missing the bundled redaction rules.** The
|
|
19
|
+
`defaults/` directory was referenced via a relative path that only
|
|
20
|
+
worked in editable repo installs. It is now packaged inside
|
|
21
|
+
`vimgym/defaults/` and loaded via `importlib.resources`, so secrets
|
|
22
|
+
are correctly stripped under pip, pipx, and Homebrew installs.
|
|
23
|
+
- **Log rotation.** The daemon log now rotates at 5 MB and keeps 5 backups
|
|
24
|
+
(~25 MB total) instead of growing forever.
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`vg doctor`** — comprehensive system diagnostic. Reports vimgym version,
|
|
29
|
+
Python version, SQLite + FTS5 availability, vault dir & db permissions,
|
|
30
|
+
daemon state, configured sources, redaction rule count, and free disk
|
|
31
|
+
space. Exits non-zero on any red issue.
|
|
32
|
+
- **`vg start --no-browser`** — for use as a background service. The
|
|
33
|
+
Homebrew `brew services` formula uses this so that `launchd` doesn't
|
|
34
|
+
try to pop a browser.
|
|
35
|
+
- **Virtualenv self-warning.** `vg start` now warns when invoked from
|
|
36
|
+
a project venv that won't survive a shell restart and points the user
|
|
37
|
+
at `brew install` or `pipx install`.
|
|
38
|
+
- **Zsh shell completion** (`completions/_vg`), installed automatically
|
|
39
|
+
by the Homebrew formula.
|
|
40
|
+
- **Makefile and `.envrc`** for one-command developer setup.
|
|
41
|
+
|
|
42
|
+
### Packaging
|
|
43
|
+
|
|
44
|
+
- First publish to PyPI.
|
|
45
|
+
- Homebrew tap at [`shoaibrain/homebrew-vimgym`](https://github.com/shoaibrain/homebrew-vimgym).
|
|
46
|
+
- Trusted Publishing (OIDC) for PyPI — no long-lived API tokens in CI.
|
|
47
|
+
- GitHub Actions workflow auto-bumps the tap formula on every published
|
|
48
|
+
GitHub Release.
|
|
49
|
+
- Cross-platform CI matrix (Linux + macOS, Python 3.11 / 3.12 / 3.13).
|
|
50
|
+
|
|
51
|
+
### Tests
|
|
52
|
+
|
|
53
|
+
- Regression test for the duplicate-log-lines bug
|
|
54
|
+
(`tests/test_daemon.py::test_no_duplicate_log_lines`).
|
|
55
|
+
- New tests for `vg doctor` and CLI flag parsing.
|
|
56
|
+
- Total: 117 tests passing.
|
|
57
|
+
|
|
58
|
+
[0.1.1]: https://github.com/shoaibrain/vimgym/releases/tag/v0.1.1
|
vimgym-0.1.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Shoaib Rain
|
|
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.
|
vimgym-0.1.1/MANIFEST.in
ADDED
vimgym-0.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vimgym
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: AI session memory for developers — local, fast, no cloud
|
|
5
|
+
Author: Shoaib Rain
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://vimgym.xyz
|
|
8
|
+
Project-URL: Repository, https://github.com/shoaibrain/vimgym
|
|
9
|
+
Project-URL: Issues, https://github.com/shoaibrain/vimgym/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/shoaibrain/vimgym/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: claude,claude-code,ai,session,memory,search,developer-tools,local-first
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Environment :: Web Environment
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: MacOS
|
|
18
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Topic :: Software Development
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Classifier: Topic :: Utilities
|
|
26
|
+
Requires-Python: >=3.11
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: fastapi>=0.110
|
|
30
|
+
Requires-Dist: uvicorn[standard]>=0.29
|
|
31
|
+
Requires-Dist: watchdog>=4.0
|
|
32
|
+
Requires-Dist: httpx>=0.27
|
|
33
|
+
Requires-Dist: rich>=13
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-timeout>=2.3; extra == "dev"
|
|
38
|
+
Requires-Dist: httpx; extra == "dev"
|
|
39
|
+
Requires-Dist: ruff; extra == "dev"
|
|
40
|
+
Requires-Dist: mypy; extra == "dev"
|
|
41
|
+
Requires-Dist: build; extra == "dev"
|
|
42
|
+
Requires-Dist: twine; extra == "dev"
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# vimgym
|
|
46
|
+
|
|
47
|
+
[](https://pypi.org/project/vimgym/)
|
|
48
|
+
[](https://pypi.org/project/vimgym/)
|
|
49
|
+
[](LICENSE)
|
|
50
|
+
[](https://github.com/shoaibrain/vimgym/actions/workflows/ci.yml)
|
|
51
|
+
|
|
52
|
+
> AI session memory for developers. Local. Fast. No cloud.
|
|
53
|
+
|
|
54
|
+
Vimgym automatically captures every Claude Code session and makes your entire
|
|
55
|
+
AI conversation history searchable in under 500ms. It's `git log` for your
|
|
56
|
+
AI conversations.
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
┌──────────────────────────┐
|
|
60
|
+
│ ~/.claude/projects/ │
|
|
61
|
+
└────────────┬─────────────┘
|
|
62
|
+
│ filesystem watcher
|
|
63
|
+
▼
|
|
64
|
+
┌─────────────────────────────────┐
|
|
65
|
+
│ vimgym daemon (single process) │
|
|
66
|
+
│ parser → redact → SQLite + FTS5│
|
|
67
|
+
└────────────┬────────────────────┘
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
┌────────────────────────────────────┐
|
|
71
|
+
│ http://127.0.0.1:7337 │
|
|
72
|
+
│ ⌘K to search · live updates · WS │
|
|
73
|
+
└────────────────────────────────────┘
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Install
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# macOS — recommended
|
|
80
|
+
brew tap shoaibrain/vimgym
|
|
81
|
+
brew install vimgym
|
|
82
|
+
|
|
83
|
+
# Any OS
|
|
84
|
+
pipx install vimgym
|
|
85
|
+
|
|
86
|
+
# One-liner (auto-detects best method)
|
|
87
|
+
curl -fsSL https://vimgym.xyz/install | sh
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
After install, run `vg doctor` to verify everything is healthy.
|
|
91
|
+
|
|
92
|
+
## Quick start
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
vg init # detect AI tool sources, create vault
|
|
96
|
+
vg start # spawn daemon, open browser
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
In the browser, press **⌘K** and start typing. Or from the terminal:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
vg search "CORS configuration"
|
|
103
|
+
vg search "auth" --project edforge --since 7d
|
|
104
|
+
vg search "rate limiter" --branch dev --json | jq
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Features
|
|
108
|
+
|
|
109
|
+
- **Automatic capture** — filesystem watcher catches every new session within seconds; zero configuration
|
|
110
|
+
- **Full-text search** — SQLite FTS5 with BM25 ranking, sub-500ms on any vault size, hyphen-safe queries
|
|
111
|
+
- **Three-pane web UI** — Neon Void design, command palette (⌘K), live updates via WebSocket
|
|
112
|
+
- **Session detail** — full conversation rendering with syntax-highlighted code, collapsible tool blocks, copy buttons
|
|
113
|
+
- **Markdown export** — one click to get a paste-friendly transcript for resuming a session in Claude Code
|
|
114
|
+
- **18-pattern redaction** — strips API keys, AWS credentials, kubeconfig certs, SSH keys, JWT tokens, and more *before* anything is written
|
|
115
|
+
- **Source-aware** — auto-detects Claude Code, Cursor, Copilot, Antigravity, Gemini (only Claude Code parser ships in v1)
|
|
116
|
+
- **Local-first** — server binds 127.0.0.1, vault file is `chmod 600`, zero outbound network calls
|
|
117
|
+
|
|
118
|
+
## CLI
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
vg start [--no-browser] Start daemon (watcher + web server), open browser
|
|
122
|
+
vg stop Graceful shutdown
|
|
123
|
+
vg status Daemon health, vault stats, source list
|
|
124
|
+
vg open Open browser if daemon is running
|
|
125
|
+
vg doctor Run system diagnostics (Python, FTS5, vault, sources, redaction)
|
|
126
|
+
vg search QUERY [flags] Terminal search with --project --branch --since --limit --json
|
|
127
|
+
vg init Initialize vault, detect AI tool sources
|
|
128
|
+
vg config Print active configuration
|
|
129
|
+
vg config sources List configured sources
|
|
130
|
+
vg config sources ID --enable Enable a source (takes effect on next vg start)
|
|
131
|
+
vg config sources ID --disable Disable a source
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Documentation
|
|
135
|
+
|
|
136
|
+
- **[User Guide](docs/GUIDE.md)** — installation, UI walkthrough, search syntax, configuration, troubleshooting
|
|
137
|
+
- **[Developer Reference](docs/DEVELOPER.md)** — architecture, module reference, schema, API, source adapter interface
|
|
138
|
+
|
|
139
|
+
## Status
|
|
140
|
+
|
|
141
|
+
v0.1.1 — first official release. 117 tests passing on Python 3.11 / 3.12 / 3.13,
|
|
142
|
+
Linux + macOS. Windows and additional source parsers (Cursor, Copilot, Gemini)
|
|
143
|
+
are v2.
|
|
144
|
+
|
|
145
|
+
## Requirements
|
|
146
|
+
|
|
147
|
+
- macOS or Linux
|
|
148
|
+
- Python 3.11+
|
|
149
|
+
- Claude Code
|
|
150
|
+
|
|
151
|
+
## Contributing
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
git clone https://github.com/shoaibrain/vimgym.git
|
|
155
|
+
cd vimgym
|
|
156
|
+
make install # creates .venv, installs in editable mode with [dev] extras
|
|
157
|
+
source .venv/bin/activate
|
|
158
|
+
make test # 117 tests, ~40 seconds
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
See [docs/DEVELOPER.md](docs/DEVELOPER.md) for the architecture overview.
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT. See [LICENSE](LICENSE).
|
vimgym-0.1.1/README.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# vimgym
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/vimgym/)
|
|
4
|
+
[](https://pypi.org/project/vimgym/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://github.com/shoaibrain/vimgym/actions/workflows/ci.yml)
|
|
7
|
+
|
|
8
|
+
> AI session memory for developers. Local. Fast. No cloud.
|
|
9
|
+
|
|
10
|
+
Vimgym automatically captures every Claude Code session and makes your entire
|
|
11
|
+
AI conversation history searchable in under 500ms. It's `git log` for your
|
|
12
|
+
AI conversations.
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
┌──────────────────────────┐
|
|
16
|
+
│ ~/.claude/projects/ │
|
|
17
|
+
└────────────┬─────────────┘
|
|
18
|
+
│ filesystem watcher
|
|
19
|
+
▼
|
|
20
|
+
┌─────────────────────────────────┐
|
|
21
|
+
│ vimgym daemon (single process) │
|
|
22
|
+
│ parser → redact → SQLite + FTS5│
|
|
23
|
+
└────────────┬────────────────────┘
|
|
24
|
+
│
|
|
25
|
+
▼
|
|
26
|
+
┌────────────────────────────────────┐
|
|
27
|
+
│ http://127.0.0.1:7337 │
|
|
28
|
+
│ ⌘K to search · live updates · WS │
|
|
29
|
+
└────────────────────────────────────┘
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# macOS — recommended
|
|
36
|
+
brew tap shoaibrain/vimgym
|
|
37
|
+
brew install vimgym
|
|
38
|
+
|
|
39
|
+
# Any OS
|
|
40
|
+
pipx install vimgym
|
|
41
|
+
|
|
42
|
+
# One-liner (auto-detects best method)
|
|
43
|
+
curl -fsSL https://vimgym.xyz/install | sh
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
After install, run `vg doctor` to verify everything is healthy.
|
|
47
|
+
|
|
48
|
+
## Quick start
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
vg init # detect AI tool sources, create vault
|
|
52
|
+
vg start # spawn daemon, open browser
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
In the browser, press **⌘K** and start typing. Or from the terminal:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
vg search "CORS configuration"
|
|
59
|
+
vg search "auth" --project edforge --since 7d
|
|
60
|
+
vg search "rate limiter" --branch dev --json | jq
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Features
|
|
64
|
+
|
|
65
|
+
- **Automatic capture** — filesystem watcher catches every new session within seconds; zero configuration
|
|
66
|
+
- **Full-text search** — SQLite FTS5 with BM25 ranking, sub-500ms on any vault size, hyphen-safe queries
|
|
67
|
+
- **Three-pane web UI** — Neon Void design, command palette (⌘K), live updates via WebSocket
|
|
68
|
+
- **Session detail** — full conversation rendering with syntax-highlighted code, collapsible tool blocks, copy buttons
|
|
69
|
+
- **Markdown export** — one click to get a paste-friendly transcript for resuming a session in Claude Code
|
|
70
|
+
- **18-pattern redaction** — strips API keys, AWS credentials, kubeconfig certs, SSH keys, JWT tokens, and more *before* anything is written
|
|
71
|
+
- **Source-aware** — auto-detects Claude Code, Cursor, Copilot, Antigravity, Gemini (only Claude Code parser ships in v1)
|
|
72
|
+
- **Local-first** — server binds 127.0.0.1, vault file is `chmod 600`, zero outbound network calls
|
|
73
|
+
|
|
74
|
+
## CLI
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
vg start [--no-browser] Start daemon (watcher + web server), open browser
|
|
78
|
+
vg stop Graceful shutdown
|
|
79
|
+
vg status Daemon health, vault stats, source list
|
|
80
|
+
vg open Open browser if daemon is running
|
|
81
|
+
vg doctor Run system diagnostics (Python, FTS5, vault, sources, redaction)
|
|
82
|
+
vg search QUERY [flags] Terminal search with --project --branch --since --limit --json
|
|
83
|
+
vg init Initialize vault, detect AI tool sources
|
|
84
|
+
vg config Print active configuration
|
|
85
|
+
vg config sources List configured sources
|
|
86
|
+
vg config sources ID --enable Enable a source (takes effect on next vg start)
|
|
87
|
+
vg config sources ID --disable Disable a source
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Documentation
|
|
91
|
+
|
|
92
|
+
- **[User Guide](docs/GUIDE.md)** — installation, UI walkthrough, search syntax, configuration, troubleshooting
|
|
93
|
+
- **[Developer Reference](docs/DEVELOPER.md)** — architecture, module reference, schema, API, source adapter interface
|
|
94
|
+
|
|
95
|
+
## Status
|
|
96
|
+
|
|
97
|
+
v0.1.1 — first official release. 117 tests passing on Python 3.11 / 3.12 / 3.13,
|
|
98
|
+
Linux + macOS. Windows and additional source parsers (Cursor, Copilot, Gemini)
|
|
99
|
+
are v2.
|
|
100
|
+
|
|
101
|
+
## Requirements
|
|
102
|
+
|
|
103
|
+
- macOS or Linux
|
|
104
|
+
- Python 3.11+
|
|
105
|
+
- Claude Code
|
|
106
|
+
|
|
107
|
+
## Contributing
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
git clone https://github.com/shoaibrain/vimgym.git
|
|
111
|
+
cd vimgym
|
|
112
|
+
make install # creates .venv, installs in editable mode with [dev] extras
|
|
113
|
+
source .venv/bin/activate
|
|
114
|
+
make test # 117 tests, ~40 seconds
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
See [docs/DEVELOPER.md](docs/DEVELOPER.md) for the architecture overview.
|
|
118
|
+
|
|
119
|
+
## License
|
|
120
|
+
|
|
121
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#compdef vg
|
|
2
|
+
# zsh completion for vimgym
|
|
3
|
+
|
|
4
|
+
_vg() {
|
|
5
|
+
local -a commands
|
|
6
|
+
commands=(
|
|
7
|
+
'init:Initialize vault and detect AI tool sources'
|
|
8
|
+
'start:Start daemon (watcher + web server)'
|
|
9
|
+
'stop:Stop daemon'
|
|
10
|
+
'status:Show daemon status and vault stats'
|
|
11
|
+
'open:Open browser UI'
|
|
12
|
+
'doctor:Run system diagnostics'
|
|
13
|
+
'search:Search sessions'
|
|
14
|
+
'config:View or modify configuration'
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
_arguments -C \
|
|
18
|
+
'--version[Show version and exit]' \
|
|
19
|
+
'--verbose[Verbose output]' \
|
|
20
|
+
'--help[Show help]' \
|
|
21
|
+
'1: :->command' \
|
|
22
|
+
'*::arg:->args'
|
|
23
|
+
|
|
24
|
+
case $state in
|
|
25
|
+
command)
|
|
26
|
+
_describe -t commands 'vg command' commands
|
|
27
|
+
;;
|
|
28
|
+
args)
|
|
29
|
+
case $words[1] in
|
|
30
|
+
start)
|
|
31
|
+
_arguments \
|
|
32
|
+
'--no-browser[Do not open the browser on start]' \
|
|
33
|
+
'--help[Show help]'
|
|
34
|
+
;;
|
|
35
|
+
search)
|
|
36
|
+
_arguments \
|
|
37
|
+
'--project[Filter by project name]:project' \
|
|
38
|
+
'--branch[Filter by git branch]:branch' \
|
|
39
|
+
'--since[Filter by date (ISO or Nd: 7d, 30d)]:since' \
|
|
40
|
+
'--limit[Maximum results]:limit' \
|
|
41
|
+
'--json[Output as JSON]' \
|
|
42
|
+
'--help[Show help]' \
|
|
43
|
+
'*:query'
|
|
44
|
+
;;
|
|
45
|
+
config)
|
|
46
|
+
local -a config_subs
|
|
47
|
+
config_subs=(
|
|
48
|
+
'sources:List or toggle configured sources'
|
|
49
|
+
)
|
|
50
|
+
_describe -t commands 'config subcommand' config_subs
|
|
51
|
+
;;
|
|
52
|
+
esac
|
|
53
|
+
;;
|
|
54
|
+
esac
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
_vg "$@"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"vault_dir": "~/.vimgym",
|
|
3
|
+
"watch_path": "~/.claude/projects",
|
|
4
|
+
"server_host": "127.0.0.1",
|
|
5
|
+
"server_port": 7337,
|
|
6
|
+
"debounce_secs": 5.0,
|
|
7
|
+
"stability_polls": 2,
|
|
8
|
+
"stability_poll_interval": 1.0,
|
|
9
|
+
"auto_open_browser": true,
|
|
10
|
+
"log_level": "INFO"
|
|
11
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"rules": [
|
|
4
|
+
{"name": "anthropic_key", "pattern": "sk-ant-[a-zA-Z0-9_\\-]{60,}", "replacement": "[REDACTED_ANTHROPIC_KEY]"},
|
|
5
|
+
{"name": "openai_key", "pattern": "sk-[a-zA-Z0-9_\\-]{40,}", "replacement": "[REDACTED_OPENAI_KEY]"},
|
|
6
|
+
{"name": "aws_access", "pattern": "AKIA[0-9A-Z]{16}", "replacement": "[REDACTED_AWS_KEY]"},
|
|
7
|
+
{"name": "aws_secret", "pattern": "(?i)aws.secret.{0,20}[=:]\\s*[a-zA-Z0-9/+]{40}", "replacement": "[REDACTED_AWS_SECRET]"},
|
|
8
|
+
{"name": "aws_session_token", "pattern": "AQoXb[a-zA-Z0-9+/]{100,}", "replacement": "[REDACTED_AWS_SESSION]"},
|
|
9
|
+
{"name": "arn", "pattern": "arn:aws:[a-z0-9\\-]+:[a-z0-9\\-]*:\\d{12}:[^\\s\"']+", "replacement": "arn:aws:[REDACTED]"},
|
|
10
|
+
{"name": "bearer_token", "pattern": "Bearer\\s+[a-zA-Z0-9._\\-]{20,}", "replacement": "Bearer [REDACTED]"},
|
|
11
|
+
{"name": "github_token", "pattern": "ghp_[a-zA-Z0-9_]{36,}", "replacement": "[REDACTED_GITHUB_TOKEN]"},
|
|
12
|
+
{"name": "jwt", "pattern": "eyJ[a-zA-Z0-9_\\-]+\\.[a-zA-Z0-9_\\-]+\\.[a-zA-Z0-9_\\-]+", "replacement": "[REDACTED_JWT]"},
|
|
13
|
+
{"name": "kubeconfig_cert", "pattern": "certificate-authority-data:\\s*[A-Za-z0-9+/=]{50,}", "replacement": "certificate-authority-data: [REDACTED]"},
|
|
14
|
+
{"name": "k8s_token", "pattern": "(?i)token:\\s*[a-zA-Z0-9._\\-]{40,}", "replacement": "token: [REDACTED]"},
|
|
15
|
+
{"name": "private_key_inline","pattern": "-----BEGIN (EC|RSA|OPENSSH|DSA) PRIVATE KEY-----[\\s\\S]+?-----END \\1 PRIVATE KEY-----", "replacement": "[REDACTED_PRIVATE_KEY]"},
|
|
16
|
+
{"name": "pem_block", "pattern": "-----BEGIN [A-Z ]+-----[\\s\\S]+?-----END [A-Z ]+-----", "replacement": "[REDACTED_PEM_BLOCK]"},
|
|
17
|
+
{"name": "docker_auth", "pattern": "\"auth\":\\s*\"[A-Za-z0-9+/=]{20,}\"", "replacement": "\"auth\": \"[REDACTED]\""},
|
|
18
|
+
{"name": "postgres_password", "pattern": "postgresql://[^:/\\s]+:[^@/\\s]+@", "replacement": "postgresql://[user]:[REDACTED]@"},
|
|
19
|
+
{"name": "database_url", "pattern": "(mongodb|postgres|mysql|redis)://[^\\s]{8,}", "replacement": "[REDACTED_DB_URL]"},
|
|
20
|
+
{"name": "npm_token", "pattern": "//registry\\.npmjs\\.org/:_authToken=[^\\s]+", "replacement": "//registry.npmjs.org/:_authToken=[REDACTED]"},
|
|
21
|
+
{"name": "env_secret", "pattern": "(?i)(password|secret|api_key|private_key)\\s*=\\s*\\S{8,}", "replacement": "\\1=[REDACTED]"}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "vimgym"
|
|
7
|
+
version = "0.1.1"
|
|
8
|
+
description = "AI session memory for developers — local, fast, no cloud"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [{name = "Shoaib Rain"}]
|
|
13
|
+
keywords = ["claude", "claude-code", "ai", "session", "memory", "search", "developer-tools", "local-first"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Environment :: Console",
|
|
17
|
+
"Environment :: Web Environment",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Operating System :: MacOS",
|
|
21
|
+
"Operating System :: POSIX :: Linux",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Topic :: Software Development",
|
|
27
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
28
|
+
"Topic :: Utilities",
|
|
29
|
+
]
|
|
30
|
+
dependencies = [
|
|
31
|
+
"fastapi>=0.110",
|
|
32
|
+
"uvicorn[standard]>=0.29",
|
|
33
|
+
"watchdog>=4.0",
|
|
34
|
+
"httpx>=0.27",
|
|
35
|
+
"rich>=13",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.optional-dependencies]
|
|
39
|
+
dev = [
|
|
40
|
+
"pytest>=8",
|
|
41
|
+
"pytest-asyncio>=0.23",
|
|
42
|
+
"pytest-timeout>=2.3",
|
|
43
|
+
"httpx",
|
|
44
|
+
"ruff",
|
|
45
|
+
"mypy",
|
|
46
|
+
"build",
|
|
47
|
+
"twine",
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[project.urls]
|
|
51
|
+
Homepage = "https://vimgym.xyz"
|
|
52
|
+
Repository = "https://github.com/shoaibrain/vimgym"
|
|
53
|
+
Issues = "https://github.com/shoaibrain/vimgym/issues"
|
|
54
|
+
Changelog = "https://github.com/shoaibrain/vimgym/blob/main/CHANGELOG.md"
|
|
55
|
+
|
|
56
|
+
[project.scripts]
|
|
57
|
+
vg = "vimgym.cli:main"
|
|
58
|
+
|
|
59
|
+
[tool.setuptools.package-dir]
|
|
60
|
+
"" = "src"
|
|
61
|
+
|
|
62
|
+
[tool.setuptools.packages.find]
|
|
63
|
+
where = ["src"]
|
|
64
|
+
|
|
65
|
+
[tool.setuptools.package-data]
|
|
66
|
+
vimgym = [
|
|
67
|
+
"ui/index.html",
|
|
68
|
+
"ui/style.css",
|
|
69
|
+
"ui/app.js",
|
|
70
|
+
"ui/vendor/highlight.min.js",
|
|
71
|
+
"defaults/redaction-rules.json",
|
|
72
|
+
"defaults/config.json",
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
[tool.ruff]
|
|
76
|
+
line-length = 100
|
|
77
|
+
|
|
78
|
+
[tool.pytest.ini_options]
|
|
79
|
+
testpaths = ["tests"]
|
|
80
|
+
asyncio_mode = "auto"
|
vimgym-0.1.1/setup.cfg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.1"
|