judgetap 0.0.2.dev30__tar.gz → 0.1.1.dev32__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.
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.github/workflows/release.yml +14 -4
- judgetap-0.1.1.dev32/.release-please-manifest.json +1 -0
- judgetap-0.1.1.dev32/CHANGELOG.md +53 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/PKG-INFO +1 -1
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/pyproject.toml +1 -1
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/release-please-config.json +2 -1
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/__init__.py +1 -1
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/uv.lock +1589 -1575
- judgetap-0.0.2.dev30/.release-please-manifest.json +0 -1
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.github/workflows/ci.yml +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.github/workflows/demo.yml +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.gitignore +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.python-version +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/CONTRIBUTING.md +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/LICENSE +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/README.md +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/docs/SPEC.md +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/docs/demo.tape +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/_compat.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/api.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/cascade.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/cli.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/__init__.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/data.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/page.html +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/server.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/decision_log.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engine.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/__init__.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/agentjev.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/jev.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/laya.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/llm.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/errors.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/evaluate.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/__init__.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/core.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/hook.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/install.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/loop.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/rules.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/stop.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/py.typed +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/secrets.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/testing.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/types.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_api.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_call_accounting.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_calls.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_cascade.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_dashboard.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_decision_log.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_engine_jev.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_engine_llm.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_engine_local.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_evaluate.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_agents.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_core.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_hook.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_loop.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_rules.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_stop.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_trust.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_questions.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_robustness_68.py +0 -0
- {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_secrets.py +0 -0
|
@@ -10,6 +10,12 @@ on:
|
|
|
10
10
|
branches: [main]
|
|
11
11
|
release:
|
|
12
12
|
types: [published]
|
|
13
|
+
# Publish an existing tag by hand (e.g. a release whose publish job failed).
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
inputs:
|
|
16
|
+
tag:
|
|
17
|
+
description: "Existing release tag to publish, e.g. v0.1.0"
|
|
18
|
+
required: true
|
|
13
19
|
|
|
14
20
|
permissions:
|
|
15
21
|
contents: write
|
|
@@ -66,7 +72,8 @@ jobs:
|
|
|
66
72
|
if: >-
|
|
67
73
|
always() &&
|
|
68
74
|
((github.event_name == 'push' && needs.release-please.outputs.released == 'true') ||
|
|
69
|
-
(github.event_name == 'release' && !github.event.release.prerelease)
|
|
75
|
+
(github.event_name == 'release' && !github.event.release.prerelease) ||
|
|
76
|
+
github.event_name == 'workflow_dispatch')
|
|
70
77
|
runs-on: ubuntu-latest
|
|
71
78
|
environment: pypi
|
|
72
79
|
permissions:
|
|
@@ -75,16 +82,19 @@ jobs:
|
|
|
75
82
|
steps:
|
|
76
83
|
- uses: actions/checkout@v4
|
|
77
84
|
with:
|
|
78
|
-
ref: ${{ needs.release-please.outputs.tag || github.event.release.tag_name }}
|
|
85
|
+
ref: ${{ needs.release-please.outputs.tag || github.event.release.tag_name || inputs.tag }}
|
|
79
86
|
- uses: astral-sh/setup-uv@v6
|
|
80
87
|
- name: Check the tag matches the package version
|
|
81
88
|
# The tag arrives through the environment, never interpolated into the
|
|
82
89
|
# script: a release tag is user-controlled text.
|
|
83
90
|
env:
|
|
84
|
-
TAG: ${{ needs.release-please.outputs.tag || github.event.release.tag_name }}
|
|
91
|
+
TAG: ${{ needs.release-please.outputs.tag || github.event.release.tag_name || inputs.tag }}
|
|
85
92
|
run: |
|
|
86
93
|
version=$(uv run --no-project python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
|
87
|
-
|
|
94
|
+
# Tags are vX.Y.Z; older ones carry the component: judgetap-vX.Y.Z.
|
|
95
|
+
tag_version="${TAG#judgetap-}"
|
|
96
|
+
tag_version="${tag_version#v}"
|
|
97
|
+
test "$tag_version" = "$version" || { echo "tag does not match version $version"; exit 1; }
|
|
88
98
|
- run: uv build
|
|
89
99
|
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
90
100
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{".":"0.1.0"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0](https://github.com/mergesafe-ai/judgetap/compare/judgetap-v0.0.1...judgetap-v0.1.0) (2026-09-27)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* rename snapjudge to judgetap ([#52](https://github.com/mergesafe-ai/judgetap/issues/52))
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **cascade:** escalate low-confidence answers across engines ([#16](https://github.com/mergesafe-ai/judgetap/issues/16)) ([d062390](https://github.com/mergesafe-ai/judgetap/commit/d06239011f42b5b5773a651771b1e77c1edc6aae))
|
|
13
|
+
* **core:** typed decision API with validated Decision results ([#9](https://github.com/mergesafe-ai/judgetap/issues/9)) ([20d8af9](https://github.com/mergesafe-ai/judgetap/commit/20d8af9542acce650425af60232fdd8414e4f6b2)), closes [#1](https://github.com/mergesafe-ai/judgetap/issues/1)
|
|
14
|
+
* **dashboard:** local page over the guard log ([#25](https://github.com/mergesafe-ai/judgetap/issues/25)) ([1afa1a1](https://github.com/mergesafe-ai/judgetap/commit/1afa1a10817ab5ce7653e48b8cc14bdfeaef65d9))
|
|
15
|
+
* engine keys from the OS keychain ([#48](https://github.com/mergesafe-ai/judgetap/issues/48)) ([3da0065](https://github.com/mergesafe-ai/judgetap/commit/3da006589f3f661d356c4d796a77c07225e176d8))
|
|
16
|
+
* engines report calls; dashboard engine metrics from calls ([#58](https://github.com/mergesafe-ai/judgetap/issues/58)) ([a54c77a](https://github.com/mergesafe-ai/judgetap/commit/a54c77a67dfc33e0e1856dda5624043367dc6c3f))
|
|
17
|
+
* **engines:** any TypeSafe-compatible server by base URL ([#45](https://github.com/mergesafe-ai/judgetap/issues/45)) ([6525e65](https://github.com/mergesafe-ai/judgetap/commit/6525e652468d4df62856c424106e1466d6b118b6))
|
|
18
|
+
* **engines:** Jev and LiteLLM adapters with spec-string loading ([#12](https://github.com/mergesafe-ai/judgetap/issues/12)) ([93400ef](https://github.com/mergesafe-ai/judgetap/commit/93400ef438c5093259b1c122b5133dbef35db6bb)), closes [#2](https://github.com/mergesafe-ai/judgetap/issues/2)
|
|
19
|
+
* **engines:** local Laya and AgentJev adapters ([#18](https://github.com/mergesafe-ai/judgetap/issues/18)) ([08363ba](https://github.com/mergesafe-ai/judgetap/commit/08363ba7c287abfc8e3b32018d779450f867b601))
|
|
20
|
+
* **eval:** calibration check across engines ([#20](https://github.com/mergesafe-ai/judgetap/issues/20)) ([c747835](https://github.com/mergesafe-ai/judgetap/commit/c74783502f2ddc1ee6d95bbff680986710e750e0))
|
|
21
|
+
* **guard:** Cursor and Codex support ([#24](https://github.com/mergesafe-ai/judgetap/issues/24)) ([654a807](https://github.com/mergesafe-ai/judgetap/commit/654a8078251eb163033bbc1e361d3ea4ed97ba55))
|
|
22
|
+
* **guard:** default engine: detect and record, else rules only; register snapjudge eval ([#23](https://github.com/mergesafe-ai/judgetap/issues/23)) ([5a36d92](https://github.com/mergesafe-ai/judgetap/commit/5a36d9252c5c0077878e6eb86c70cc4fe028adc7))
|
|
23
|
+
* **guard:** loop detection on PostToolUse ([#54](https://github.com/mergesafe-ai/judgetap/issues/54)) ([a2a16d4](https://github.com/mergesafe-ai/judgetap/commit/a2a16d40c8c7b76caf5ff6daeb9cf96ccd60d966))
|
|
24
|
+
* **guard:** opt-in task-done check on Stop ([#55](https://github.com/mergesafe-ai/judgetap/issues/55)) ([4923eed](https://github.com/mergesafe-ai/judgetap/commit/4923eed1d8de5c504982d1409666d8a91d361540)), closes [#26](https://github.com/mergesafe-ai/judgetap/issues/26)
|
|
25
|
+
* **guard:** pre-action guard for Claude Code ([#17](https://github.com/mergesafe-ai/judgetap/issues/17)) ([b5e7f3b](https://github.com/mergesafe-ai/judgetap/commit/b5e7f3bd87cac7af8a651626caa26c99ab4d6900))
|
|
26
|
+
* opt-in library decision log shown on the dashboard ([#46](https://github.com/mergesafe-ai/judgetap/issues/46)) ([7adcec3](https://github.com/mergesafe-ai/judgetap/commit/7adcec38ff737cd43e116c826b963c4da7ed9c80))
|
|
27
|
+
* rename snapjudge to judgetap ([#52](https://github.com/mergesafe-ai/judgetap/issues/52)) ([19f38cc](https://github.com/mergesafe-ai/judgetap/commit/19f38cc78a1e21f9bb1bb282e80290bd40676803))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* cascade and API keep calls and cost on partial failures ([#70](https://github.com/mergesafe-ai/judgetap/issues/70)) ([be33207](https://github.com/mergesafe-ai/judgetap/commit/be33207aa98a791698b3070e9824da4075cabdc9))
|
|
33
|
+
* **core:** harden question and answer validation (review of [#9](https://github.com/mergesafe-ai/judgetap/issues/9)) ([#11](https://github.com/mergesafe-ai/judgetap/issues/11)) ([56e0d0f](https://github.com/mergesafe-ai/judgetap/commit/56e0d0f979b693c4dff20c62f25b0b96c7a29f5b))
|
|
34
|
+
* **dashboard:** library layer filter, source-aware outcomes, redact library answers ([#53](https://github.com/mergesafe-ai/judgetap/issues/53)) ([e53fca9](https://github.com/mergesafe-ai/judgetap/commit/e53fca94861732350c90fe2967286bfff121beeb)), closes [#51](https://github.com/mergesafe-ai/judgetap/issues/51)
|
|
35
|
+
* **dashboard:** odd log values, strict JSON, bound port; keys/env fixes ([#72](https://github.com/mergesafe-ai/judgetap/issues/72)) ([d9235eb](https://github.com/mergesafe-ai/judgetap/commit/d9235eb348ae94207d311e8f772c6fce3444a455))
|
|
36
|
+
* **dashboard:** true call counts, cached polling, Content-Length 400, empty chart message ([#36](https://github.com/mergesafe-ai/judgetap/issues/36)) ([435524e](https://github.com/mergesafe-ai/judgetap/commit/435524ee225d72c17cbf87e39b1537a0d8b95cef)), closes [#35](https://github.com/mergesafe-ai/judgetap/issues/35)
|
|
37
|
+
* **guard:** a failed stop judge logs the calls it made and fails open ([#59](https://github.com/mergesafe-ai/judgetap/issues/59)) ([8813bfe](https://github.com/mergesafe-ai/judgetap/commit/8813bfe4a9873f75c1f5ef87493361a8df96371c))
|
|
38
|
+
* **guard:** combined git clean flags; global/system push config ([#22](https://github.com/mergesafe-ai/judgetap/issues/22)) ([93b8a1f](https://github.com/mergesafe-ai/judgetap/commit/93b8a1f72588006577f9e22dd03f92ce7ddecf23))
|
|
39
|
+
* **guard:** hooks match Claude Code's contract (PostToolUseFailure, last_assistant_message) ([#73](https://github.com/mergesafe-ai/judgetap/issues/73)) ([bc5867f](https://github.com/mergesafe-ai/judgetap/commit/bc5867fd8417f55e440d12f292aa70bcd8fa43f5))
|
|
40
|
+
* **guard:** redact basic-auth, bearer and more token formats ([#37](https://github.com/mergesafe-ai/judgetap/issues/37)) ([38a4d82](https://github.com/mergesafe-ai/judgetap/commit/38a4d82256aca391c63d0a77e6a0117d63cb8db4))
|
|
41
|
+
* **guard:** repo config can only tighten; odd input can't fail open; redact common secrets ([#71](https://github.com/mergesafe-ai/judgetap/issues/71)) ([e43db9b](https://github.com/mergesafe-ai/judgetap/commit/e43db9b4641a035b78b92d125b440381f751a995))
|
|
42
|
+
* review follow-ups from [#11](https://github.com/mergesafe-ai/judgetap/issues/11), [#12](https://github.com/mergesafe-ai/judgetap/issues/12), [#16](https://github.com/mergesafe-ai/judgetap/issues/16); snapjudge.toml cascade config ([#19](https://github.com/mergesafe-ai/judgetap/issues/19)) ([419641f](https://github.com/mergesafe-ai/judgetap/commit/419641fa582d3f4b03bd7d48ade70390afc99834))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### Performance Improvements
|
|
46
|
+
|
|
47
|
+
* **guard:** stop hook reads the transcript window once ([#57](https://github.com/mergesafe-ai/judgetap/issues/57)) ([305306c](https://github.com/mergesafe-ai/judgetap/commit/305306cc758d0c0eaf0a1cad8bd5eae9a03750dd)), closes [#56](https://github.com/mergesafe-ai/judgetap/issues/56)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### Documentation
|
|
51
|
+
|
|
52
|
+
* add CONTRIBUTING.md ([#44](https://github.com/mergesafe-ai/judgetap/issues/44)) ([d81f1dd](https://github.com/mergesafe-ai/judgetap/commit/d81f1ddceea275d80b3e04ce2468ceec7c5f8d5d)), closes [#40](https://github.com/mergesafe-ai/judgetap/issues/40)
|
|
53
|
+
* launch README, demo tape and render workflow ([#49](https://github.com/mergesafe-ai/judgetap/issues/49)) ([33f3c04](https://github.com/mergesafe-ai/judgetap/commit/33f3c04c9fc233b7b724e4f1be48c798c5fc9fde))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: judgetap
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.1.1.dev32
|
|
4
4
|
Summary: Fast typed decisions (choice, score, yes/no) across Jev-style engines, plus a guard for coding agents. Early development.
|
|
5
5
|
Project-URL: Homepage, https://github.com/mergesafe-ai/judgetap
|
|
6
6
|
Author-email: Omer Bar-Ness <omer@zsquared.io>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "judgetap"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.1.1.dev32"
|
|
4
4
|
description = "Fast typed decisions (choice, score, yes/no) across Jev-style engines, plus a guard for coding agents. Early development."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|