jev-harness 0.1.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.
- jev_harness-0.1.0/.github/workflows/ci.yml +34 -0
- jev_harness-0.1.0/.gitignore +59 -0
- jev_harness-0.1.0/.pre-commit-hooks.yaml +14 -0
- jev_harness-0.1.0/LICENSE +21 -0
- jev_harness-0.1.0/PKG-INFO +403 -0
- jev_harness-0.1.0/README.md +377 -0
- jev_harness-0.1.0/examples/benchmark_vs_llm.py +120 -0
- jev_harness-0.1.0/examples/git_pre_commit.sh +27 -0
- jev_harness-0.1.0/examples/mcp_servers_config.json +68 -0
- jev_harness-0.1.0/examples/python_sdk_usage.py +66 -0
- jev_harness-0.1.0/packages/ts/LICENSE +21 -0
- jev_harness-0.1.0/packages/ts/README.md +122 -0
- jev_harness-0.1.0/packages/ts/bin/cli.js +4 -0
- jev_harness-0.1.0/packages/ts/package.json +42 -0
- jev_harness-0.1.0/packages/ts/src/cli.ts +196 -0
- jev_harness-0.1.0/packages/ts/src/client.ts +348 -0
- jev_harness-0.1.0/packages/ts/src/gates.ts +234 -0
- jev_harness-0.1.0/packages/ts/src/index.ts +3 -0
- jev_harness-0.1.0/packages/ts/src/types.ts +103 -0
- jev_harness-0.1.0/packages/ts/tests/gates.test.ts +75 -0
- jev_harness-0.1.0/packages/ts/tsconfig.json +19 -0
- jev_harness-0.1.0/packages/ts/tsconfig.test.json +9 -0
- jev_harness-0.1.0/pyproject.toml +54 -0
- jev_harness-0.1.0/src/jev_harness/__init__.py +53 -0
- jev_harness-0.1.0/src/jev_harness/cli.py +361 -0
- jev_harness-0.1.0/src/jev_harness/client.py +412 -0
- jev_harness-0.1.0/src/jev_harness/gates.py +290 -0
- jev_harness-0.1.0/src/jev_harness/integrations/__init__.py +60 -0
- jev_harness-0.1.0/src/jev_harness/mcp_server.py +302 -0
- jev_harness-0.1.0/tests/__init__.py +1 -0
- jev_harness-0.1.0/tests/test_cli.py +76 -0
- jev_harness-0.1.0/tests/test_client.py +97 -0
- jev_harness-0.1.0/tests/test_gates.py +82 -0
- jev_harness-0.1.0/tests/test_mcp.py +154 -0
- jev_harness-0.1.0/tests/test_real_tracebacks.py +160 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test on Python ${{ matrix.python-version }} (${{ matrix.os }})
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
16
|
+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
|
|
26
|
+
- name: Run unit test suite
|
|
27
|
+
run: |
|
|
28
|
+
python -m unittest discover -s tests -v
|
|
29
|
+
|
|
30
|
+
- name: Test CLI entrypoints
|
|
31
|
+
run: |
|
|
32
|
+
python src/jev_harness/cli.py status
|
|
33
|
+
python src/jev_harness/cli.py route --task "Fix typo in docstrings" --json --mock
|
|
34
|
+
echo "ModuleNotFoundError: test" | python src/jev_harness/cli.py test-gate --mock
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
*.manifest
|
|
31
|
+
*.spec
|
|
32
|
+
|
|
33
|
+
# Environments
|
|
34
|
+
.env
|
|
35
|
+
.venv
|
|
36
|
+
env/
|
|
37
|
+
venv/
|
|
38
|
+
ENV/
|
|
39
|
+
env.bak/
|
|
40
|
+
venv.bak/
|
|
41
|
+
|
|
42
|
+
# Local Jev configs
|
|
43
|
+
.jev.json
|
|
44
|
+
credentials.env
|
|
45
|
+
|
|
46
|
+
# IDEs
|
|
47
|
+
.vscode/
|
|
48
|
+
.idea/
|
|
49
|
+
.cursor/
|
|
50
|
+
*.swp
|
|
51
|
+
*.swo
|
|
52
|
+
|
|
53
|
+
# Testing & coverage
|
|
54
|
+
.coverage
|
|
55
|
+
htmlcov/
|
|
56
|
+
.pytest_cache/
|
|
57
|
+
dist-test/
|
|
58
|
+
packages/*/dist-test/
|
|
59
|
+
node_modules/
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
- id: jev-test-gate
|
|
2
|
+
name: Jev Test Failure Gate
|
|
3
|
+
description: Triages test errors and blocks doomed commits with Jev System One
|
|
4
|
+
entry: jev-harness test-gate
|
|
5
|
+
language: python
|
|
6
|
+
types: [text]
|
|
7
|
+
pass_filenames: false
|
|
8
|
+
|
|
9
|
+
- id: jev-abort-check
|
|
10
|
+
name: Jev Abort & Dead-End Check
|
|
11
|
+
description: Detects circular refactors and unviable trajectories
|
|
12
|
+
entry: jev-harness abort-check
|
|
13
|
+
language: python
|
|
14
|
+
pass_filenames: false
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ISMAEL HOSNI SOILET DE LIMA
|
|
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,403 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: jev-harness
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Zero-dependency System One decision harness, token optimizer, and semantic guardrails for AI coding agents.
|
|
5
|
+
Project-URL: Homepage, https://github.com/ismaelsoilet/jev-harness
|
|
6
|
+
Project-URL: Documentation, https://github.com/ismaelsoilet/jev-harness#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/ismaelsoilet/jev-harness.git
|
|
8
|
+
Project-URL: Issues, https://github.com/ismaelsoilet/jev-harness/issues
|
|
9
|
+
Author-email: Ismael Hosni Soilet de Lima <soilet.ismael@gmail.com>
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: agentic-ai,claude-code,cursor,guardrails,jev,mcp,model-context-protocol,opencode,system-one,token-optimizer,typesafe
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
23
|
+
Classifier: Topic :: Software Development :: Testing
|
|
24
|
+
Requires-Python: >=3.9
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# ⚡ Jev Harness: The Token Optimizer & Decision Gate for AI Coding Agents
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<a href="https://github.com/ismaelsoilet/jev-harness"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License MIT"></a>
|
|
31
|
+
<a href="https://pypi.org/project/jev-harness/"><img src="https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-brightgreen.svg" alt="Python Versions"></a>
|
|
32
|
+
<a href="https://typesafe.ai"><img src="https://img.shields.io/badge/powered%20by-TypeSafe%20Jev%20System%20One-orange.svg" alt="TypeSafe Jev"></a>
|
|
33
|
+
<a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-Compatible-purple.svg" alt="MCP Compatible"></a>
|
|
34
|
+
<a href="#"><img src="https://img.shields.io/badge/dependencies-0%20(pure%20stdlib)-success.svg" alt="Zero Dependencies"></a>
|
|
35
|
+
</p>
|
|
36
|
+
|
|
37
|
+
> **Stop burning 50,000 frontier tokens on missing packages, network flakiness, and circular doom loops.**
|
|
38
|
+
>
|
|
39
|
+
> `jev-harness` is a ultra-fast, zero-dependency token optimizer, test failure triage gate, and semantic guardrail for AI coding agents (OpenCode, Command Code, Claude Code, Cursor, Antigravity IDE, Windsurf, Zed, and Pi). Powered by **TypeSafe AI's Jev System One** non-autoregressive decision model.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🎯 The Problem
|
|
44
|
+
|
|
45
|
+
When an autonomous coding agent encounters a test failure or compiler error, the standard reaction is to dump 500 lines of raw traceback into an expensive frontier reasoning model (GPT-6 Astra, Claude Fable 5.1).
|
|
46
|
+
|
|
47
|
+
| Failure Scenario | Without Jev Harness | With Jev Harness |
|
|
48
|
+
| :--- | :--- | :--- |
|
|
49
|
+
| **Missing dependency** (`ModuleNotFoundError`, `Cannot find module`, `TS2307`, `E0463`) | 💸 **50,000 LLM tokens burned** (~$0.50 - $2.50) + 15s delay to output `pip/npm install ...` | ⚡ **Jev triage in 90ms ($0.00004)** → Action: install package deterministically. **0 LLM tokens**. |
|
|
50
|
+
| **Flaky transient error** (network timeout, port busy, ECONNREFUSED) | 💸 LLM hallucinates architectural changes to "fix" an ephemeral glitch | ⚡ **Jev detects flaky transient** → Auto-retry worker once. **0 code changes**. |
|
|
51
|
+
| **Circular refactoring** (Doom Loop: attempting the same fix 3+ times) | 💸 **200,000+ tokens burned** in endless circular loops | 🛑 **Jev Abort Gate triggers** (`exit 1`) → Stops loop, alerts developer. |
|
|
52
|
+
| **Trivial typo / formatting** | 💸 Heavy reasoning frontier tier used for simple regex/typo | ⚡ **Jev Route** directs task to local script or Gemini 3.8 Flash. |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 🏗️ How It Works: System One vs. System Two
|
|
57
|
+
|
|
58
|
+
Daniel Kahneman's cognitive paradigm applied to agentic engineering:
|
|
59
|
+
- **System 1 (Fast, Intuitive, Calibrated):** **Jev** makes non-autoregressive, parallel, typed decisions in **70ms to 300ms** at **$0.042 per 1M tokens** ($0 output tokens).
|
|
60
|
+
- **System 2 (Slow, Deliberative, Generative):** Frontier LLMs (GPT-6 Astra, Claude Fable 5.1) write code and solve deep algorithmic logic.
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
┌────────────────────────────────────────────────────────┐
|
|
64
|
+
│ AI Coding Agent Loop │
|
|
65
|
+
└──────────────────────────┬─────────────────────────────┘
|
|
66
|
+
│
|
|
67
|
+
Command/Test Execution
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
[Test / Step Output]
|
|
71
|
+
│
|
|
72
|
+
┌────────────────────────┴────────────────────────┐
|
|
73
|
+
▼ ▼
|
|
74
|
+
[PASS: Continue] [FAIL: Error Log]
|
|
75
|
+
│
|
|
76
|
+
▼
|
|
77
|
+
┌───────────────────────┐
|
|
78
|
+
│ jev-harness gate │
|
|
79
|
+
│ (Jev System One 70ms) │
|
|
80
|
+
└───────────┬───────────┘
|
|
81
|
+
│
|
|
82
|
+
┌──────────────────────────────────┴──────────────────────────────────┐
|
|
83
|
+
▼ ▼
|
|
84
|
+
[skip_llm = True] [skip_llm = False]
|
|
85
|
+
(Env missing / Flaky / Trivial) (Deep Logic Bug)
|
|
86
|
+
│ │
|
|
87
|
+
▼ ▼
|
|
88
|
+
Deterministic Shell Action Dispatch Targeted
|
|
89
|
+
(pip/npm install or fast retry) Trace to Frontier LLM
|
|
90
|
+
⚡ 0 Frontier Tokens / Instant Fix 💸 Cost Reduced by ~80%
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## ✨ Features
|
|
96
|
+
|
|
97
|
+
- 🛡️ **Zero External Dependencies:** Built entirely with Python's standard library (`urllib.request`, `dataclasses`, `json`). No `pip` bloat, instant startup (< 50ms).
|
|
98
|
+
- 🔌 **Universal MCP Server:** Exposes Jev decision tools over stdio (`jev-mcp`) for Cursor, Claude Desktop, Antigravity, Windsurf, Zed, and OpenCode.
|
|
99
|
+
- 🚦 **UNIX Philosophy Compliant:** Standard exit codes (`0` for safe/skip_llm, `1` for abort/logic defect, `2` for syntax error) allow clean pipe composition: `pytest | jev-harness test-gate`.
|
|
100
|
+
- 🔄 **Autonomous Simulation Fallback:** If offline or without an API key, an intelligent heuristic engine runs locally so your CI and scripts never crash.
|
|
101
|
+
- 🌐 **Multi-Provider Support:** Seamlessly connects to TypeSafe AI direct, OpenCode Zen, or OpenRouter.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 🚀 Quickstart
|
|
106
|
+
|
|
107
|
+
### 1. Installation
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Via pip
|
|
111
|
+
pip install jev-harness
|
|
112
|
+
|
|
113
|
+
# Or via pipx (isolated global CLI)
|
|
114
|
+
pipx install jev-harness
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 2. Configuration (Optional)
|
|
118
|
+
|
|
119
|
+
Jev Harness automatically resolves credentials in the following priority:
|
|
120
|
+
1. Environment variables (`TYPESAFE_API_KEY`, `OPENCODE_API_KEY`, or `OPENROUTER_API_KEY`)
|
|
121
|
+
2. Local repository `.jev.json` or `.env`
|
|
122
|
+
3. Global configuration `~/.config/jev/credentials.env`
|
|
123
|
+
4. **Intelligent Offline Simulation Mode** (active by default if no key is supplied)
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
export TYPESAFE_API_KEY="your-typesafe-api-key"
|
|
127
|
+
# Check status anytime
|
|
128
|
+
jev-harness status
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 🛠️ CLI Usage
|
|
134
|
+
|
|
135
|
+
### 1. Test Failure Triage (`test-gate`)
|
|
136
|
+
Pipe error logs directly or pass a file:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Pipe directly from your test runner
|
|
140
|
+
npm test | jev-harness test-gate
|
|
141
|
+
pytest | jev-harness test-gate
|
|
142
|
+
|
|
143
|
+
# Or analyze a saved log file
|
|
144
|
+
jev-harness test-gate --log error.log
|
|
145
|
+
|
|
146
|
+
# Or get machine-readable JSON
|
|
147
|
+
jev-harness test-gate --log error.log --json
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Output Example:**
|
|
151
|
+
```text
|
|
152
|
+
--- JEV TEST TRIAGE VERDICT ---
|
|
153
|
+
Category: ENV_MISSING
|
|
154
|
+
Confidence: 92.0%
|
|
155
|
+
Skip LLM Call: YES (Save Tokens!)
|
|
156
|
+
Skip Probability: 96.0%
|
|
157
|
+
Severity Score: 1.0 / 4.0
|
|
158
|
+
Recommendation: AUTO-ACTION: Install missing dependency or check environment configuration (Do NOT call LLM).
|
|
159
|
+
--------------------------------
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 2. Guard Against Doom Loops & Dead-Ends (`abort-check`)
|
|
163
|
+
Verify that a proposed plan isn't repeating a failed path:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
jev-harness abort-check \
|
|
167
|
+
--plan "Retry rewriting the entire database schema without backup" \
|
|
168
|
+
--history "Attempt 1 failed with timeout. Attempt 2 failed with circular foreign key error."
|
|
169
|
+
```
|
|
170
|
+
*Returns exit code `1` if abort is recommended, enabling automated CI stops.*
|
|
171
|
+
|
|
172
|
+
### 3. Model Tier Routing (`route`)
|
|
173
|
+
Pick the cheapest model capable of solving the task:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
jev-harness route --task "Fix typo in docstring and reformat with black"
|
|
177
|
+
# -> TIER: DETERMINISTIC | Model: Direct Python/Bash Script (0 LLM Tokens)
|
|
178
|
+
|
|
179
|
+
jev-harness route --task "Refactor distributed actor supervision tree across 14 modules"
|
|
180
|
+
# -> TIER: HEAVY_SYSTEM2 | Model: Claude Fable 5.1 / GPT-6 Astra (~$10.00 in / $50.00 out)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 4. Step Completion Verification (`verify`)
|
|
184
|
+
Verify evidence against criteria with calibrated confidence:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
jev-harness verify \
|
|
188
|
+
--criteria "Must export format_date function and pass all 10 unit tests" \
|
|
189
|
+
--output "All 10 unit tests passed in 0.02s. format_date exported in index.ts."
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 🤖 Universal Agent & IDE Integrations
|
|
195
|
+
|
|
196
|
+
### 1. Cursor IDE (`.cursor/mcp.json`)
|
|
197
|
+
Add to `.cursor/mcp.json` (or run `jev-harness init --cursor` in your repo):
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"mcpServers": {
|
|
202
|
+
"jev-harness": {
|
|
203
|
+
"command": "jev-mcp",
|
|
204
|
+
"args": []
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### 2. Claude Desktop (`claude_desktop_config.json`)
|
|
211
|
+
Add to your Claude Desktop configuration:
|
|
212
|
+
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"mcpServers": {
|
|
216
|
+
"jev-harness": {
|
|
217
|
+
"command": "jev-mcp",
|
|
218
|
+
"args": []
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 3. Antigravity IDE (`mcp_config.json` & `hooks.json`)
|
|
225
|
+
Connect as an MCP Server:
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"mcpServers": {
|
|
229
|
+
"jev-harness": {
|
|
230
|
+
"command": "jev-mcp",
|
|
231
|
+
"args": []
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
Or hook into the execution lifecycle in `~/.gemini/config/hooks.json`:
|
|
237
|
+
```json
|
|
238
|
+
{
|
|
239
|
+
"jev-guard": {
|
|
240
|
+
"PreInvocation": [
|
|
241
|
+
{
|
|
242
|
+
"type": "command",
|
|
243
|
+
"command": "echo '{\"injectSteps\": [{\"ephemeralMessage\": \"[JEV ACTIVE] Triage test errors with jev-harness test-gate before calling LLMs. If skip_llm=true, fix deterministically.\"}]}'"
|
|
244
|
+
}
|
|
245
|
+
]
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 4. OpenCode & Command Code
|
|
251
|
+
In `.opencode/config.json` or agent instructions:
|
|
252
|
+
```markdown
|
|
253
|
+
When running tests or builds:
|
|
254
|
+
1. If a command fails, execute `jev-harness test-gate` on the traceback.
|
|
255
|
+
2. If `skip_llm=true`, execute the recommended deterministic action.
|
|
256
|
+
3. If an error persists across 2 consecutive attempts, run `jev-harness abort-check`.
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 5. Windsurf & Zed
|
|
260
|
+
- **Windsurf:** Add to `~/.codeium/windsurf/mcp_config.json`.
|
|
261
|
+
- **Zed:** Add to `~/.config/zed/settings.json` under `context_servers`.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 🐍 Python SDK
|
|
266
|
+
|
|
267
|
+
You can also use `jev-harness` directly in Python scripts and agent orchestration frameworks (LangChain, LlamaIndex, CrewAI, AutoGen):
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
from jev_harness import (
|
|
271
|
+
JevClient,
|
|
272
|
+
triage_test_failure,
|
|
273
|
+
should_abort_trajectory,
|
|
274
|
+
route_model_tier,
|
|
275
|
+
verify_step_completion,
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
client = JevClient()
|
|
279
|
+
|
|
280
|
+
# 1. Triage test traceback
|
|
281
|
+
res = triage_test_failure("ModuleNotFoundError: No module named 'scipy'", client=client)
|
|
282
|
+
if res.skip_llm:
|
|
283
|
+
print(f"Safe to fix deterministically: {res.action_recommendation}")
|
|
284
|
+
|
|
285
|
+
# 2. Check trajectory before spending tokens
|
|
286
|
+
abort_decision = should_abort_trajectory(
|
|
287
|
+
proposed_step="Tentar novamente a mesma abordagem",
|
|
288
|
+
recent_attempts_summary="Tentativa 1 falhou com timeout",
|
|
289
|
+
client=client,
|
|
290
|
+
)
|
|
291
|
+
if abort_decision.should_abort:
|
|
292
|
+
print("Trajectory aborted! Re-align with user.")
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 🟦 TypeScript / JavaScript SDK & CLI
|
|
298
|
+
|
|
299
|
+
For Node.js, Bun, Deno, Vite, Tauri, and Next.js applications:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
# Install via npm
|
|
303
|
+
npm install jev-harness
|
|
304
|
+
|
|
305
|
+
# Or via bun
|
|
306
|
+
bun add jev-harness
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Programmatic Usage
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
import {
|
|
313
|
+
triageTestFailure,
|
|
314
|
+
shouldAbortTrajectory,
|
|
315
|
+
routeModelTier,
|
|
316
|
+
verifyStepCompletion,
|
|
317
|
+
JevClient,
|
|
318
|
+
} from "jev-harness";
|
|
319
|
+
|
|
320
|
+
// 1. Triage test failure in < 2ms locally (or sub-second remote)
|
|
321
|
+
const triage = await triageTestFailure(rawErrorOutput);
|
|
322
|
+
if (triage.skipLlm) {
|
|
323
|
+
console.log("Safe to fix deterministically! LLM call skipped.");
|
|
324
|
+
console.log("Recommended Action:", triage.actionRecommendation);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// 2. Prevent circular doom loops before spending frontier tokens
|
|
328
|
+
const abortCheck = await shouldAbortTrajectory(
|
|
329
|
+
"Repeat previous refactoring step",
|
|
330
|
+
"Step failed with: TypeError: undefined is not a function"
|
|
331
|
+
);
|
|
332
|
+
if (abortCheck.shouldAbort) {
|
|
333
|
+
console.error("Agent trapped in dead-end loop! Aborting.");
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// 3. Select minimal sufficient model tier
|
|
337
|
+
const route = await routeModelTier("Fix typo in variable name");
|
|
338
|
+
console.log("Assigned Model Tier:", route.selectedTier); // deterministic
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### TypeScript CLI
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Run test triage via npx
|
|
345
|
+
npx jev-harness triage "Cannot find module 'lodash'"
|
|
346
|
+
|
|
347
|
+
# Trajectory abort check
|
|
348
|
+
npx jev-harness abort-check --plan "Try identical prompt again"
|
|
349
|
+
|
|
350
|
+
# Model router
|
|
351
|
+
npx jev-harness route "Architect distributed consensus protocol"
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 📦 Git & CI/CD Guardrails
|
|
357
|
+
|
|
358
|
+
### Pre-commit Hook (`.pre-commit-config.yaml`)
|
|
359
|
+
```yaml
|
|
360
|
+
repos:
|
|
361
|
+
- repo: https://github.com/ismaelsoilet/jev-harness
|
|
362
|
+
rev: v0.1.0
|
|
363
|
+
hooks:
|
|
364
|
+
- id: jev-test-gate
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Husky Hook (`.husky/pre-commit`)
|
|
368
|
+
```bash
|
|
369
|
+
npm test 2>&1 | jev-harness test-gate || exit 1
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## 📊 Economics & Benchmarks (September 2026 Frontier)
|
|
375
|
+
|
|
376
|
+
| Metric | 2026 Frontier Reasoning (GPT-6 Astra, Claude Fable 5.1) | Fast Agentic Tier (Gemini 3.8 Flash) | TypeSafe Jev System One (`jev-harness`) |
|
|
377
|
+
| :--- | :--- | :--- | :--- |
|
|
378
|
+
| **Input Pricing** | $10.00 / 1M tokens | $0.75 / 1M tokens | **$0.042 / 1M tokens (~238x cheaper)** |
|
|
379
|
+
| **Output Pricing** | $50.00 / 1M tokens | $3.75 / 1M tokens | **$0.00 (Free - Non-autoregressive)** |
|
|
380
|
+
| **Latency** | 10,000ms – 30,000ms | 1,500ms – 4,000ms | **70ms – 300ms (~100x faster)** |
|
|
381
|
+
| **Output Structure**| Free-form prose & streaming tokens | Structured JSON tool calls | **Strictly typed: Choice, Score, Noul** |
|
|
382
|
+
| **Determinism** | Stochastic reasoning | Stochastic generation | **Zero-hallucination calibrated bounds** |
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## 🤝 Contributing & Submissions
|
|
387
|
+
|
|
388
|
+
Contributions are welcome!
|
|
389
|
+
- Submitting to **[awesome-jev](https://github.com/yibie/awesome-jev)** and **[awesome-jev-use-cases](https://github.com/whyashthakker/awesome-jev-use-cases)**.
|
|
390
|
+
- Open an Issue or Pull Request on GitHub.
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
# Development setup
|
|
394
|
+
git clone https://github.com/ismaelsoilet/jev-harness.git
|
|
395
|
+
cd jev-harness
|
|
396
|
+
python -m unittest discover -s tests
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## 📄 License
|
|
402
|
+
|
|
403
|
+
Distributed under the **MIT License**. See [`LICENSE`](LICENSE) for more information.
|