locdex 1.3.0__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.
- locdex-1.3.0/PKG-INFO +243 -0
- locdex-1.3.0/README.md +206 -0
- locdex-1.3.0/pyproject.toml +83 -0
- locdex-1.3.0/setup.cfg +4 -0
- locdex-1.3.0/src/locdex/agent.py +955 -0
- locdex-1.3.0/src/locdex/agent_tools.py +452 -0
- locdex-1.3.0/src/locdex/cloud_fallback.py +196 -0
- locdex-1.3.0/src/locdex/config.py +151 -0
- locdex-1.3.0/src/locdex/editor.py +55 -0
- locdex-1.3.0/src/locdex/local_model.py +11 -0
- locdex-1.3.0/src/locdex/local_runtime.py +111 -0
- locdex-1.3.0/src/locdex/main.py +350 -0
- locdex-1.3.0/src/locdex/memory.py +88 -0
- locdex-1.3.0/src/locdex/model_manager.py +207 -0
- locdex-1.3.0/src/locdex/model_profiles.py +71 -0
- locdex-1.3.0/src/locdex/parser.py +27 -0
- locdex-1.3.0/src/locdex/planner.py +48 -0
- locdex-1.3.0/src/locdex/router.py +71 -0
- locdex-1.3.0/src/locdex/runtime_manager.py +432 -0
- locdex-1.3.0/src/locdex/safety.py +89 -0
- locdex-1.3.0/src/locdex/telemetry.py +295 -0
- locdex-1.3.0/src/locdex/validator.py +276 -0
- locdex-1.3.0/src/locdex.egg-info/PKG-INFO +243 -0
- locdex-1.3.0/src/locdex.egg-info/SOURCES.txt +50 -0
- locdex-1.3.0/src/locdex.egg-info/dependency_links.txt +1 -0
- locdex-1.3.0/src/locdex.egg-info/entry_points.txt +2 -0
- locdex-1.3.0/src/locdex.egg-info/requires.txt +10 -0
- locdex-1.3.0/src/locdex.egg-info/top_level.txt +1 -0
- locdex-1.3.0/tests/test_agent_hardening.py +109 -0
- locdex-1.3.0/tests/test_agent_intent_truthfulness.py +75 -0
- locdex-1.3.0/tests/test_agent_loop_v12.py +58 -0
- locdex-1.3.0/tests/test_agent_permissions_recovery.py +174 -0
- locdex-1.3.0/tests/test_agent_progress.py +60 -0
- locdex-1.3.0/tests/test_agent_tools_v12.py +42 -0
- locdex-1.3.0/tests/test_editor.py +39 -0
- locdex-1.3.0/tests/test_git_permissions_v12.py +11 -0
- locdex-1.3.0/tests/test_memory_lightweight_v18.py +12 -0
- locdex-1.3.0/tests/test_model_manager_v12.py +44 -0
- locdex-1.3.0/tests/test_model_profiles_v13.py +23 -0
- locdex-1.3.0/tests/test_parser.py +36 -0
- locdex-1.3.0/tests/test_repair_tool_retry.py +188 -0
- locdex-1.3.0/tests/test_router.py +73 -0
- locdex-1.3.0/tests/test_router_context_v12.py +18 -0
- locdex-1.3.0/tests/test_runtime_manager_v13.py +158 -0
- locdex-1.3.0/tests/test_safety.py +42 -0
- locdex-1.3.0/tests/test_safety_v12.py +25 -0
- locdex-1.3.0/tests/test_smoke_harness.py +122 -0
- locdex-1.3.0/tests/test_smoke_validation_repair.py +132 -0
- locdex-1.3.0/tests/test_staging_v12.py +19 -0
- locdex-1.3.0/tests/test_telemetry_v14.py +111 -0
- locdex-1.3.0/tests/test_validator.py +51 -0
- locdex-1.3.0/tests/test_verified_mutations.py +56 -0
locdex-1.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: locdex
|
|
3
|
+
Version: 1.3.0
|
|
4
|
+
Summary: A local-first AI coding agent with direct workspace editing, hardware-aware local inference, guarded Git tools, and optional cloud fallback.
|
|
5
|
+
Author-email: Emmanuel Amoo <amooemma10@gmail.com>, Gideon Amoo <amooademola55@gmail.com>
|
|
6
|
+
Maintainer-email: Enoch Amoo <amooadeyinka887@gmail.com>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/Locdex/Locdex
|
|
9
|
+
Project-URL: Repository, https://github.com/Locdex/Locdex
|
|
10
|
+
Project-URL: Issues, https://github.com/Locdex/Locdex/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/Locdex/Locdex/releases
|
|
12
|
+
Keywords: ai,coding-agent,local-ai,developer-tools,llm,cli,code-generation,qwen,gguf,llama-cpp
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Topic :: Software Development
|
|
24
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Requires-Python: <3.13,>=3.10
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
Requires-Dist: requests>=2.32
|
|
29
|
+
Requires-Dist: huggingface-hub>=0.30
|
|
30
|
+
Requires-Dist: platformdirs>=4.3
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff>=0.8; extra == "dev"
|
|
35
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
36
|
+
Requires-Dist: twine>=5.1; extra == "dev"
|
|
37
|
+
|
|
38
|
+
# Locdex: Local-First Agentic Coding CLI
|
|
39
|
+
|
|
40
|
+
Locdex is a local-first coding agent that works directly in the developer's current directory. It can inspect a repository, edit files, run commands and tests, inspect diffs, and perform Git operations when the user explicitly asks. Its differentiators are local-first execution, model routing, cost control, bounded tools, validation, and transparent agent behavior.
|
|
41
|
+
|
|
42
|
+
## v1.3 launch runtime
|
|
43
|
+
|
|
44
|
+
Locdex no longer requires Ollama and no longer makes `pip install locdex` compile llama.cpp on the user's machine.
|
|
45
|
+
|
|
46
|
+
`locdex setup` now:
|
|
47
|
+
|
|
48
|
+
1. detects the operating system, CPU architecture, system RAM, and available accelerator;
|
|
49
|
+
2. chooses a prebuilt llama-cpp-python runtime for CPU, Apple Metal, NVIDIA CUDA, Linux ROCm, Windows HIP Radeon, or Vulkan where detected;
|
|
50
|
+
3. caches the detected hardware fingerprint and re-detects if the machine changes;
|
|
51
|
+
4. lets the user choose Qwen3-Coder or the optional Kimi-distilled model;
|
|
52
|
+
5. checks available disk space before downloading;
|
|
53
|
+
6. verifies the pinned Qwen model SHA-256;
|
|
54
|
+
7. runs a small-context local inference smoke test before declaring setup complete.
|
|
55
|
+
|
|
56
|
+
If automatic GPU model loading fails, Locdex retries once on CPU rather than immediately failing the whole session.
|
|
57
|
+
|
|
58
|
+
## Local model choices
|
|
59
|
+
|
|
60
|
+
### Qwen3-Coder — supported default
|
|
61
|
+
|
|
62
|
+
- Base: `Qwen/Qwen3-Coder-30B-A3B-Instruct`
|
|
63
|
+
- Locdex GGUF: `unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF`
|
|
64
|
+
- Quant: Q4_K_M
|
|
65
|
+
- Download: about 18.6 GB
|
|
66
|
+
- Locdex status: **supported/default**
|
|
67
|
+
- Practical target: 32 GB system RAM; Locdex warns below 24 GB
|
|
68
|
+
|
|
69
|
+
### Kimi-distilled 9B — optional/experimental
|
|
70
|
+
|
|
71
|
+
- Upstream: `khazarai/Qwen3.5-9B-Kimi-k3-Distilled`
|
|
72
|
+
- Locdex GGUF: `mradermacher/Qwen3.5-9B-Kimi-k3-Distilled-GGUF`
|
|
73
|
+
- Quant: Q4_K_M
|
|
74
|
+
- Download: about 5.8 GB
|
|
75
|
+
- Locdex status: **experimental**
|
|
76
|
+
- Practical target: 16 GB system RAM
|
|
77
|
+
|
|
78
|
+
Both can be installed at the same time. Only the selected model is loaded for a session.
|
|
79
|
+
|
|
80
|
+
## Prerequisites
|
|
81
|
+
|
|
82
|
+
- Python 3.10+; Python 3.10-3.12 currently has the widest upstream prebuilt accelerated-runtime coverage.
|
|
83
|
+
- Git.
|
|
84
|
+
- Qwen: roughly 21 GB free disk including download/cache headroom; 32 GB RAM recommended.
|
|
85
|
+
- Kimi: roughly 8 GB free disk including download/cache headroom; 16 GB RAM recommended.
|
|
86
|
+
- Docker is not used in the current release. Candidate validation uses a disposable staged copy on the host.
|
|
87
|
+
|
|
88
|
+
Ollama is **not** required.
|
|
89
|
+
|
|
90
|
+
## Installation
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
git clone https://github.com/bandojayy/Locdex.git
|
|
94
|
+
cd Locdex
|
|
95
|
+
python -m pip install -e .
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Then run the hardware-aware setup:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
locdex setup
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Or choose explicitly:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
locdex setup --model qwen
|
|
108
|
+
locdex setup --model kimi
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`locdex setup` installs a matching prebuilt local inference runtime, downloads the selected GGUF and smoke-tests it.
|
|
112
|
+
|
|
113
|
+
## Model management
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
locdex model list
|
|
117
|
+
locdex model status
|
|
118
|
+
|
|
119
|
+
locdex model install qwen
|
|
120
|
+
locdex model install kimi
|
|
121
|
+
|
|
122
|
+
locdex model use qwen
|
|
123
|
+
locdex model use kimi
|
|
124
|
+
|
|
125
|
+
locdex model remove qwen
|
|
126
|
+
locdex model remove kimi
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The selection persists in Locdex's user config. `LOCDEX_MODEL=qwen|kimi` can override it for one process.
|
|
130
|
+
|
|
131
|
+
## Runtime management
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
locdex runtime status
|
|
135
|
+
locdex runtime install
|
|
136
|
+
locdex runtime repair
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`runtime repair` forces reinstall of the currently detected prebuilt backend. The installer deliberately uses binary wheels only; it will report an unsupported configuration instead of silently invoking a local C/C++ toolchain.
|
|
140
|
+
|
|
141
|
+
Typical detected backends:
|
|
142
|
+
|
|
143
|
+
- Apple Silicon → Metal
|
|
144
|
+
- supported NVIDIA + CUDA → CUDA wheel matched to the detected driver capability
|
|
145
|
+
- Linux AMD ROCm → ROCm wheel
|
|
146
|
+
- Windows AMD → HIP Radeon when enabled with `LOCDEX_AMD_HIP=1`
|
|
147
|
+
- Linux/Windows with `vulkaninfo` available → Vulkan fallback
|
|
148
|
+
- otherwise → CPU
|
|
149
|
+
|
|
150
|
+
Set `LOCDEX_N_GPU_LAYERS=0` to force CPU or `LOCDEX_N_GPU_LAYERS=<integer>` to override automatic offload.
|
|
151
|
+
|
|
152
|
+
## Normal workflow
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
$ locdex chat
|
|
156
|
+
|
|
157
|
+
> fix the empty-token authentication bug
|
|
158
|
+
[agent] reads relevant files
|
|
159
|
+
[agent] searches tests
|
|
160
|
+
[agent] edits src/auth.py directly
|
|
161
|
+
[agent] runs tests
|
|
162
|
+
[agent] inspects git diff
|
|
163
|
+
✓ Fixed empty-token handling. Tests passed.
|
|
164
|
+
|
|
165
|
+
> commit it
|
|
166
|
+
[agent] git status
|
|
167
|
+
[agent] git add ...
|
|
168
|
+
[agent] git commit -m "Fix empty-token authentication"
|
|
169
|
+
✓ Committed.
|
|
170
|
+
|
|
171
|
+
> push this branch
|
|
172
|
+
[agent] git push ...
|
|
173
|
+
✓ Pushed.
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
There is no mandatory `ship it` ceremony. `ship it` is just a convenience phrase that authorizes staging, committing and pushing when appropriate.
|
|
177
|
+
|
|
178
|
+
## Agent tools
|
|
179
|
+
|
|
180
|
+
Locdex exposes bounded tools to the local model instead of unrestricted Python access:
|
|
181
|
+
|
|
182
|
+
- list/search/read repository files;
|
|
183
|
+
- write or replace text files inside the workspace;
|
|
184
|
+
- delete files or empty directories;
|
|
185
|
+
- execute argv-style development commands with timeouts;
|
|
186
|
+
- run common test suites;
|
|
187
|
+
- inspect Git status and diffs;
|
|
188
|
+
- stage, commit, pull and push through dedicated Git tools.
|
|
189
|
+
|
|
190
|
+
Direct file access outside the workspace and `.git` internals is blocked. `run_command` cannot invoke `git`/`gh`; Git mutations go through dedicated tools so Locdex can enforce explicit user intent.
|
|
191
|
+
|
|
192
|
+
## Configuration overrides
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
export LOCDEX_MODEL=qwen # or kimi
|
|
196
|
+
export LOCDEX_MODEL_PATH=/absolute/path/model.gguf
|
|
197
|
+
|
|
198
|
+
export LOCDEX_MODEL_REPO='owner/model-GGUF'
|
|
199
|
+
export LOCDEX_MODEL_PATTERN='*Q4_K_M.gguf'
|
|
200
|
+
export LOCDEX_MODEL_REVISION='commit-or-tag'
|
|
201
|
+
export LOCDEX_MODEL_SHA256='expected_sha256_here'
|
|
202
|
+
|
|
203
|
+
export LOCDEX_N_CTX=16384
|
|
204
|
+
export LOCDEX_N_THREADS=8
|
|
205
|
+
export LOCDEX_N_GPU_LAYERS=auto # auto is the default
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Optional cloud fallback
|
|
209
|
+
|
|
210
|
+
Locdex does **not** assume OpenRouter or any other cloud provider/model. Cloud fallback stays disabled until you explicitly configure it.
|
|
211
|
+
|
|
212
|
+
### OpenRouter
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
export LOCDEX_CLOUD_PROVIDER='openrouter'
|
|
216
|
+
export LOCDEX_CLOUD_MODEL='your-selected-provider/model'
|
|
217
|
+
export OPENROUTER_API_KEY='...'
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Anthropic directly
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
export LOCDEX_CLOUD_PROVIDER='anthropic'
|
|
224
|
+
export LOCDEX_CLOUD_MODEL='your-selected-claude-model'
|
|
225
|
+
export ANTHROPIC_API_KEY='...'
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Any OpenAI-compatible endpoint
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
export LOCDEX_CLOUD_PROVIDER='custom'
|
|
232
|
+
export LOCDEX_CLOUD_MODEL='your-selected-model'
|
|
233
|
+
export LOCDEX_CLOUD_BASE_URL='https://your-provider.example/v1/chat/completions'
|
|
234
|
+
export LOCDEX_CLOUD_API_KEY='...'
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Use `LOCDEX_CLOUD_MODELS='model-a,model-b'` instead of `LOCDEX_CLOUD_MODEL` if you intentionally want a fallback chain. The local agent remains first; cloud escalation uses only the provider and model(s) you configured.
|
|
238
|
+
|
|
239
|
+
## Testing status
|
|
240
|
+
|
|
241
|
+
The bundle includes unit/regression coverage for agent editing, Git intent enforcement, model profiles, model manifests, hardware detection, prebuilt-runtime installation policy, router context and safety. These tests do not replace physical-machine acceptance testing.
|
|
242
|
+
|
|
243
|
+
See `TESTING.md` for the launch matrix.
|
locdex-1.3.0/README.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Locdex: Local-First Agentic Coding CLI
|
|
2
|
+
|
|
3
|
+
Locdex is a local-first coding agent that works directly in the developer's current directory. It can inspect a repository, edit files, run commands and tests, inspect diffs, and perform Git operations when the user explicitly asks. Its differentiators are local-first execution, model routing, cost control, bounded tools, validation, and transparent agent behavior.
|
|
4
|
+
|
|
5
|
+
## v1.3 launch runtime
|
|
6
|
+
|
|
7
|
+
Locdex no longer requires Ollama and no longer makes `pip install locdex` compile llama.cpp on the user's machine.
|
|
8
|
+
|
|
9
|
+
`locdex setup` now:
|
|
10
|
+
|
|
11
|
+
1. detects the operating system, CPU architecture, system RAM, and available accelerator;
|
|
12
|
+
2. chooses a prebuilt llama-cpp-python runtime for CPU, Apple Metal, NVIDIA CUDA, Linux ROCm, Windows HIP Radeon, or Vulkan where detected;
|
|
13
|
+
3. caches the detected hardware fingerprint and re-detects if the machine changes;
|
|
14
|
+
4. lets the user choose Qwen3-Coder or the optional Kimi-distilled model;
|
|
15
|
+
5. checks available disk space before downloading;
|
|
16
|
+
6. verifies the pinned Qwen model SHA-256;
|
|
17
|
+
7. runs a small-context local inference smoke test before declaring setup complete.
|
|
18
|
+
|
|
19
|
+
If automatic GPU model loading fails, Locdex retries once on CPU rather than immediately failing the whole session.
|
|
20
|
+
|
|
21
|
+
## Local model choices
|
|
22
|
+
|
|
23
|
+
### Qwen3-Coder — supported default
|
|
24
|
+
|
|
25
|
+
- Base: `Qwen/Qwen3-Coder-30B-A3B-Instruct`
|
|
26
|
+
- Locdex GGUF: `unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF`
|
|
27
|
+
- Quant: Q4_K_M
|
|
28
|
+
- Download: about 18.6 GB
|
|
29
|
+
- Locdex status: **supported/default**
|
|
30
|
+
- Practical target: 32 GB system RAM; Locdex warns below 24 GB
|
|
31
|
+
|
|
32
|
+
### Kimi-distilled 9B — optional/experimental
|
|
33
|
+
|
|
34
|
+
- Upstream: `khazarai/Qwen3.5-9B-Kimi-k3-Distilled`
|
|
35
|
+
- Locdex GGUF: `mradermacher/Qwen3.5-9B-Kimi-k3-Distilled-GGUF`
|
|
36
|
+
- Quant: Q4_K_M
|
|
37
|
+
- Download: about 5.8 GB
|
|
38
|
+
- Locdex status: **experimental**
|
|
39
|
+
- Practical target: 16 GB system RAM
|
|
40
|
+
|
|
41
|
+
Both can be installed at the same time. Only the selected model is loaded for a session.
|
|
42
|
+
|
|
43
|
+
## Prerequisites
|
|
44
|
+
|
|
45
|
+
- Python 3.10+; Python 3.10-3.12 currently has the widest upstream prebuilt accelerated-runtime coverage.
|
|
46
|
+
- Git.
|
|
47
|
+
- Qwen: roughly 21 GB free disk including download/cache headroom; 32 GB RAM recommended.
|
|
48
|
+
- Kimi: roughly 8 GB free disk including download/cache headroom; 16 GB RAM recommended.
|
|
49
|
+
- Docker is not used in the current release. Candidate validation uses a disposable staged copy on the host.
|
|
50
|
+
|
|
51
|
+
Ollama is **not** required.
|
|
52
|
+
|
|
53
|
+
## Installation
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git clone https://github.com/bandojayy/Locdex.git
|
|
57
|
+
cd Locdex
|
|
58
|
+
python -m pip install -e .
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Then run the hardware-aware setup:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
locdex setup
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Or choose explicitly:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
locdex setup --model qwen
|
|
71
|
+
locdex setup --model kimi
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`locdex setup` installs a matching prebuilt local inference runtime, downloads the selected GGUF and smoke-tests it.
|
|
75
|
+
|
|
76
|
+
## Model management
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
locdex model list
|
|
80
|
+
locdex model status
|
|
81
|
+
|
|
82
|
+
locdex model install qwen
|
|
83
|
+
locdex model install kimi
|
|
84
|
+
|
|
85
|
+
locdex model use qwen
|
|
86
|
+
locdex model use kimi
|
|
87
|
+
|
|
88
|
+
locdex model remove qwen
|
|
89
|
+
locdex model remove kimi
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The selection persists in Locdex's user config. `LOCDEX_MODEL=qwen|kimi` can override it for one process.
|
|
93
|
+
|
|
94
|
+
## Runtime management
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
locdex runtime status
|
|
98
|
+
locdex runtime install
|
|
99
|
+
locdex runtime repair
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`runtime repair` forces reinstall of the currently detected prebuilt backend. The installer deliberately uses binary wheels only; it will report an unsupported configuration instead of silently invoking a local C/C++ toolchain.
|
|
103
|
+
|
|
104
|
+
Typical detected backends:
|
|
105
|
+
|
|
106
|
+
- Apple Silicon → Metal
|
|
107
|
+
- supported NVIDIA + CUDA → CUDA wheel matched to the detected driver capability
|
|
108
|
+
- Linux AMD ROCm → ROCm wheel
|
|
109
|
+
- Windows AMD → HIP Radeon when enabled with `LOCDEX_AMD_HIP=1`
|
|
110
|
+
- Linux/Windows with `vulkaninfo` available → Vulkan fallback
|
|
111
|
+
- otherwise → CPU
|
|
112
|
+
|
|
113
|
+
Set `LOCDEX_N_GPU_LAYERS=0` to force CPU or `LOCDEX_N_GPU_LAYERS=<integer>` to override automatic offload.
|
|
114
|
+
|
|
115
|
+
## Normal workflow
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
$ locdex chat
|
|
119
|
+
|
|
120
|
+
> fix the empty-token authentication bug
|
|
121
|
+
[agent] reads relevant files
|
|
122
|
+
[agent] searches tests
|
|
123
|
+
[agent] edits src/auth.py directly
|
|
124
|
+
[agent] runs tests
|
|
125
|
+
[agent] inspects git diff
|
|
126
|
+
✓ Fixed empty-token handling. Tests passed.
|
|
127
|
+
|
|
128
|
+
> commit it
|
|
129
|
+
[agent] git status
|
|
130
|
+
[agent] git add ...
|
|
131
|
+
[agent] git commit -m "Fix empty-token authentication"
|
|
132
|
+
✓ Committed.
|
|
133
|
+
|
|
134
|
+
> push this branch
|
|
135
|
+
[agent] git push ...
|
|
136
|
+
✓ Pushed.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
There is no mandatory `ship it` ceremony. `ship it` is just a convenience phrase that authorizes staging, committing and pushing when appropriate.
|
|
140
|
+
|
|
141
|
+
## Agent tools
|
|
142
|
+
|
|
143
|
+
Locdex exposes bounded tools to the local model instead of unrestricted Python access:
|
|
144
|
+
|
|
145
|
+
- list/search/read repository files;
|
|
146
|
+
- write or replace text files inside the workspace;
|
|
147
|
+
- delete files or empty directories;
|
|
148
|
+
- execute argv-style development commands with timeouts;
|
|
149
|
+
- run common test suites;
|
|
150
|
+
- inspect Git status and diffs;
|
|
151
|
+
- stage, commit, pull and push through dedicated Git tools.
|
|
152
|
+
|
|
153
|
+
Direct file access outside the workspace and `.git` internals is blocked. `run_command` cannot invoke `git`/`gh`; Git mutations go through dedicated tools so Locdex can enforce explicit user intent.
|
|
154
|
+
|
|
155
|
+
## Configuration overrides
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
export LOCDEX_MODEL=qwen # or kimi
|
|
159
|
+
export LOCDEX_MODEL_PATH=/absolute/path/model.gguf
|
|
160
|
+
|
|
161
|
+
export LOCDEX_MODEL_REPO='owner/model-GGUF'
|
|
162
|
+
export LOCDEX_MODEL_PATTERN='*Q4_K_M.gguf'
|
|
163
|
+
export LOCDEX_MODEL_REVISION='commit-or-tag'
|
|
164
|
+
export LOCDEX_MODEL_SHA256='expected_sha256_here'
|
|
165
|
+
|
|
166
|
+
export LOCDEX_N_CTX=16384
|
|
167
|
+
export LOCDEX_N_THREADS=8
|
|
168
|
+
export LOCDEX_N_GPU_LAYERS=auto # auto is the default
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Optional cloud fallback
|
|
172
|
+
|
|
173
|
+
Locdex does **not** assume OpenRouter or any other cloud provider/model. Cloud fallback stays disabled until you explicitly configure it.
|
|
174
|
+
|
|
175
|
+
### OpenRouter
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
export LOCDEX_CLOUD_PROVIDER='openrouter'
|
|
179
|
+
export LOCDEX_CLOUD_MODEL='your-selected-provider/model'
|
|
180
|
+
export OPENROUTER_API_KEY='...'
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Anthropic directly
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
export LOCDEX_CLOUD_PROVIDER='anthropic'
|
|
187
|
+
export LOCDEX_CLOUD_MODEL='your-selected-claude-model'
|
|
188
|
+
export ANTHROPIC_API_KEY='...'
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Any OpenAI-compatible endpoint
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
export LOCDEX_CLOUD_PROVIDER='custom'
|
|
195
|
+
export LOCDEX_CLOUD_MODEL='your-selected-model'
|
|
196
|
+
export LOCDEX_CLOUD_BASE_URL='https://your-provider.example/v1/chat/completions'
|
|
197
|
+
export LOCDEX_CLOUD_API_KEY='...'
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Use `LOCDEX_CLOUD_MODELS='model-a,model-b'` instead of `LOCDEX_CLOUD_MODEL` if you intentionally want a fallback chain. The local agent remains first; cloud escalation uses only the provider and model(s) you configured.
|
|
201
|
+
|
|
202
|
+
## Testing status
|
|
203
|
+
|
|
204
|
+
The bundle includes unit/regression coverage for agent editing, Git intent enforcement, model profiles, model manifests, hardware detection, prebuilt-runtime installation policy, router context and safety. These tests do not replace physical-machine acceptance testing.
|
|
205
|
+
|
|
206
|
+
See `TESTING.md` for the launch matrix.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "locdex"
|
|
7
|
+
version = "1.3.0"
|
|
8
|
+
description = "A local-first AI coding agent with direct workspace editing, hardware-aware local inference, guarded Git tools, and optional cloud fallback."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10,<3.13"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
|
|
13
|
+
authors = [
|
|
14
|
+
{ name = "Emmanuel Amoo", email = "amooemma10@gmail.com" },
|
|
15
|
+
{ name = "Gideon Amoo", email = "amooademola55@gmail.com" },
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
maintainers = [
|
|
19
|
+
{ name = "Enoch Amoo", email = "amooadeyinka887@gmail.com" },
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
keywords = [
|
|
23
|
+
"ai",
|
|
24
|
+
"coding-agent",
|
|
25
|
+
"local-ai",
|
|
26
|
+
"developer-tools",
|
|
27
|
+
"llm",
|
|
28
|
+
"cli",
|
|
29
|
+
"code-generation",
|
|
30
|
+
"qwen",
|
|
31
|
+
"gguf",
|
|
32
|
+
"llama-cpp",
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
classifiers = [
|
|
36
|
+
"Development Status :: 4 - Beta",
|
|
37
|
+
"Environment :: Console",
|
|
38
|
+
"Intended Audience :: Developers",
|
|
39
|
+
"License :: OSI Approved :: MIT License",
|
|
40
|
+
"Operating System :: OS Independent",
|
|
41
|
+
"Programming Language :: Python",
|
|
42
|
+
"Programming Language :: Python :: 3",
|
|
43
|
+
"Programming Language :: Python :: 3.10",
|
|
44
|
+
"Programming Language :: Python :: 3.11",
|
|
45
|
+
"Programming Language :: Python :: 3.12",
|
|
46
|
+
"Topic :: Software Development",
|
|
47
|
+
"Topic :: Software Development :: Code Generators",
|
|
48
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
dependencies = [
|
|
52
|
+
"requests>=2.32",
|
|
53
|
+
"huggingface-hub>=0.30",
|
|
54
|
+
"platformdirs>=4.3",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
[project.optional-dependencies]
|
|
58
|
+
dev = [
|
|
59
|
+
"pytest>=8.0",
|
|
60
|
+
"pytest-cov>=5.0",
|
|
61
|
+
"ruff>=0.8",
|
|
62
|
+
"build>=1.2",
|
|
63
|
+
"twine>=5.1",
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
[project.scripts]
|
|
67
|
+
locdex = "locdex.main:cli"
|
|
68
|
+
|
|
69
|
+
[project.urls]
|
|
70
|
+
Homepage = "https://github.com/Locdex/Locdex"
|
|
71
|
+
Repository = "https://github.com/Locdex/Locdex"
|
|
72
|
+
Issues = "https://github.com/Locdex/Locdex/issues"
|
|
73
|
+
Changelog = "https://github.com/Locdex/Locdex/releases"
|
|
74
|
+
|
|
75
|
+
[tool.setuptools.packages.find]
|
|
76
|
+
where = ["src"]
|
|
77
|
+
|
|
78
|
+
[tool.ruff]
|
|
79
|
+
line-length = 110
|
|
80
|
+
|
|
81
|
+
[tool.pytest.ini_options]
|
|
82
|
+
testpaths = ["tests"]
|
|
83
|
+
addopts = "--basetemp=.pytest-locdex"
|
locdex-1.3.0/setup.cfg
ADDED