@miller-tech/uap 1.221.0 → 2.0.0
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.
- package/README.md +19 -9
- package/config/exl3-profiles/qwen38-27b-exl3.env +68 -0
- package/config/llama-profiles/qwen38-27b-dflash2.env +6 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/benchmarks/paired/adapter.d.ts +15 -0
- package/dist/benchmarks/paired/adapter.d.ts.map +1 -1
- package/dist/benchmarks/paired/adapter.js +22 -1
- package/dist/benchmarks/paired/adapter.js.map +1 -1
- package/dist/bin/cli.js +20 -24
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/deliver.d.ts +34 -0
- package/dist/cli/deliver.d.ts.map +1 -1
- package/dist/cli/deliver.js +147 -20
- package/dist/cli/deliver.js.map +1 -1
- package/dist/cli/guided-setup.d.ts.map +1 -1
- package/dist/cli/guided-setup.js +15 -0
- package/dist/cli/guided-setup.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -0
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +8 -2
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/policy.d.ts.map +1 -1
- package/dist/cli/policy.js +104 -2
- package/dist/cli/policy.js.map +1 -1
- package/dist/cli/quality.d.ts +11 -0
- package/dist/cli/quality.d.ts.map +1 -0
- package/dist/cli/quality.js +213 -0
- package/dist/cli/quality.js.map +1 -0
- package/dist/cli/wizard-config.d.ts.map +1 -1
- package/dist/cli/wizard-config.js +19 -9
- package/dist/cli/wizard-config.js.map +1 -1
- package/dist/cli/worktree.d.ts.map +1 -1
- package/dist/cli/worktree.js +8 -1
- package/dist/cli/worktree.js.map +1 -1
- package/dist/dashboard/savings.d.ts +1 -4
- package/dist/dashboard/savings.d.ts.map +1 -1
- package/dist/dashboard/savings.js +2 -52
- package/dist/dashboard/savings.js.map +1 -1
- package/dist/delivery/acceptance-judge.d.ts +10 -0
- package/dist/delivery/acceptance-judge.d.ts.map +1 -1
- package/dist/delivery/acceptance-judge.js +45 -3
- package/dist/delivery/acceptance-judge.js.map +1 -1
- package/dist/delivery/agentic-executor.d.ts +12 -1
- package/dist/delivery/agentic-executor.d.ts.map +1 -1
- package/dist/delivery/agentic-executor.js +25 -5
- package/dist/delivery/agentic-executor.js.map +1 -1
- package/dist/delivery/bash-sweep.d.ts +12 -0
- package/dist/delivery/bash-sweep.d.ts.map +1 -1
- package/dist/delivery/bash-sweep.js +8 -1
- package/dist/delivery/bash-sweep.js.map +1 -1
- package/dist/delivery/convergence-loop.d.ts.map +1 -1
- package/dist/delivery/convergence-loop.js +6 -4
- package/dist/delivery/convergence-loop.js.map +1 -1
- package/dist/delivery/execution-gate.d.ts +1 -1
- package/dist/delivery/execution-gate.d.ts.map +1 -1
- package/dist/delivery/execution-gate.js +248 -5
- package/dist/delivery/execution-gate.js.map +1 -1
- package/dist/delivery/snapshot.d.ts +16 -0
- package/dist/delivery/snapshot.d.ts.map +1 -1
- package/dist/delivery/snapshot.js +113 -2
- package/dist/delivery/snapshot.js.map +1 -1
- package/dist/delivery/user-validation.d.ts.map +1 -1
- package/dist/delivery/user-validation.js +55 -10
- package/dist/delivery/user-validation.js.map +1 -1
- package/dist/delivery/verifier-ladder.d.ts +24 -0
- package/dist/delivery/verifier-ladder.d.ts.map +1 -1
- package/dist/delivery/verifier-ladder.js +119 -2
- package/dist/delivery/verifier-ladder.js.map +1 -1
- package/dist/delivery/visual-gate.d.ts +24 -0
- package/dist/delivery/visual-gate.d.ts.map +1 -1
- package/dist/delivery/visual-gate.js +70 -9
- package/dist/delivery/visual-gate.js.map +1 -1
- package/dist/generators/claude-md.js +17 -4
- package/dist/generators/claude-md.js.map +1 -1
- package/dist/policies/liveness.d.ts +105 -0
- package/dist/policies/liveness.d.ts.map +1 -0
- package/dist/policies/liveness.js +251 -0
- package/dist/policies/liveness.js.map +1 -0
- package/dist/policies/policy-memory.d.ts.map +1 -1
- package/dist/policies/policy-memory.js +3 -4
- package/dist/policies/policy-memory.js.map +1 -1
- package/dist/quality/baseline.d.ts +29 -0
- package/dist/quality/baseline.d.ts.map +1 -0
- package/dist/quality/baseline.js +79 -0
- package/dist/quality/baseline.js.map +1 -0
- package/dist/quality/complexity.d.ts +38 -0
- package/dist/quality/complexity.d.ts.map +1 -0
- package/dist/quality/complexity.js +239 -0
- package/dist/quality/complexity.js.map +1 -0
- package/dist/quality/config.d.ts +40 -0
- package/dist/quality/config.d.ts.map +1 -0
- package/dist/quality/config.js +77 -0
- package/dist/quality/config.js.map +1 -0
- package/dist/quality/crap.d.ts +11 -0
- package/dist/quality/crap.d.ts.map +1 -0
- package/dist/quality/crap.js +54 -0
- package/dist/quality/crap.js.map +1 -0
- package/dist/quality/languages.d.ts +25 -0
- package/dist/quality/languages.d.ts.map +1 -0
- package/dist/quality/languages.js +150 -0
- package/dist/quality/languages.js.map +1 -0
- package/dist/quality/report.d.ts +38 -0
- package/dist/quality/report.d.ts.map +1 -0
- package/dist/quality/report.js +251 -0
- package/dist/quality/report.js.map +1 -0
- package/dist/quality/scanner.d.ts +32 -0
- package/dist/quality/scanner.d.ts.map +1 -0
- package/dist/quality/scanner.js +127 -0
- package/dist/quality/scanner.js.map +1 -0
- package/dist/quality/tools.d.ts +28 -0
- package/dist/quality/tools.d.ts.map +1 -0
- package/dist/quality/tools.js +189 -0
- package/dist/quality/tools.js.map +1 -0
- package/dist/types/config.d.ts +148 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +35 -0
- package/dist/types/config.js.map +1 -1
- package/docs/ATTRIBUTION.md +0 -1
- package/docs/INDEX.md +38 -4
- package/docs/analysis/MARKET_POSITION.md +179 -0
- package/docs/architecture/OVERVIEW.md +82 -18
- package/docs/architecture/PROTOCOL.md +1 -1
- package/docs/benchmarks/PAIRED_FINDINGS.md +106 -0
- package/docs/benchmarks/PAIRED_HARNESS.md +16 -0
- package/docs/benchmarks/README.md +59 -0
- package/docs/design/UAP_REACTOR.md +0 -1
- package/docs/getting-started/INSTALLATION.md +1 -1
- package/docs/guides/AUTOMATIC.md +0 -14
- package/docs/guides/AUTOMATIC_FEATURES.md +1 -9
- package/docs/guides/COORDINATION.md +1 -1
- package/docs/guides/DELIVERY_PIPELINE.md +5 -0
- package/docs/guides/DEPLOY_BATCHING.md +1 -1
- package/docs/guides/DROIDS_AND_SKILLS.md +1 -1
- package/docs/guides/LOCAL_MODELS.md +6 -1
- package/docs/guides/MCP_ROUTER.md +1 -1
- package/docs/guides/MEMORY.md +1 -1
- package/docs/guides/MULTI_MODEL.md +1 -1
- package/docs/guides/ORCHESTRATOR.md +1 -1
- package/docs/guides/POLICIES.md +19 -3
- package/docs/guides/QWEN38_EXL3.md +114 -0
- package/docs/guides/WORKTREE_WORKFLOW.md +45 -1
- package/docs/integrations/MCP_ROUTER.md +1 -4
- package/docs/plans/deliver-hardening-plan-2026-07-13.md +173 -0
- package/docs/plans/deliver-hardening-review-response-2026-07-13.md +180 -0
- package/docs/plans/k3-uap-uplift-validation.md +216 -0
- package/docs/plans/qwen38-uap-retest-plan.md +196 -0
- package/docs/reference/API.md +1 -1
- package/docs/reference/CLI.md +49 -14
- package/docs/reference/COMPARISON.md +248 -0
- package/docs/reference/CONFIGURATION.md +1 -3
- package/docs/reference/DATABASE_SCHEMA.md +1 -1
- package/docs/reference/FEATURES.md +3 -3
- package/docs/reference/PATTERNS.md +1 -1
- package/docs/reference/PLATFORMS.md +1 -1
- package/package.json +2 -2
- package/scripts/maintenance/update-skills.py +0 -22
- package/scripts/maintenance/verify-compliance.sh +3 -3
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
- package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
- package/src/policies/enforcers/adr_guard.py +0 -0
- package/src/policies/enforcers/bearer_lockdown.py +0 -0
- package/src/policies/enforcers/branch_freshness.py +0 -0
- package/src/policies/enforcers/design_token_gate.py +0 -0
- package/src/policies/enforcers/enforcement_self_protect.py +70 -0
- package/src/policies/enforcers/expert_review_required.py +22 -0
- package/src/policies/enforcers/iac_plan_destruction_check.py +0 -0
- package/src/policies/enforcers/quality_metrics_gate.py +447 -0
- package/src/policies/enforcers/ship_loop_gate.py +0 -0
- package/src/policies/enforcers/validate_plan_on_change.py +0 -0
- package/src/policies/enforcers/visual_verification.py +0 -0
- package/src/policies/enforcers/workdir_scope.py +0 -0
- package/src/policies/schemas/policies/expert-review-required.md +9 -1
- package/src/policies/schemas/policies/quality-metrics-gate.md +74 -0
- package/templates/CLAUDE.template.md +1 -1
- package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
- package/templates/hooks/pre-tool-use-bash.sh +50 -3
- package/templates/hooks/pre-tool-use-edit-write.sh +31 -0
- package/templates/hooks/session-start.sh +15 -0
- package/templates/hooks/uap-policy-gate.sh +187 -5
- package/templates/stryker.config.json +14 -0
- package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
- package/tools/agents/scripts/anthropic_proxy.py +254 -28
- package/tools/agents/tests/run_acceptance.py +0 -0
- package/tools/agents/tests/test_client_disconnect.py +0 -0
- package/tools/agents/tests/test_cycle_break_exploration.py +0 -0
- package/tools/agents/tests/test_deferral_break.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_all_langs.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_exemptions.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_filepath.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_web_and_bash.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_worktree.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_write_complexity.py +0 -0
- package/tools/agents/tests/test_disconnect_watcher.py +0 -0
- package/tools/agents/tests/test_doubling_break.py +0 -0
- package/tools/agents/tests/test_empty_maxtokens_recovery.py +0 -0
- package/tools/agents/tests/test_empty_tool_loop_break.py +0 -0
- package/tools/agents/tests/test_enforcement_self_protect.py +90 -0
- package/tools/agents/tests/test_enforcer_escape_hatches.py +0 -0
- package/tools/agents/tests/test_error_loop_break.py +0 -0
- package/tools/agents/tests/test_expert_review_pr_scope.py +13 -5
- package/tools/agents/tests/test_fastpath_config.py +0 -0
- package/tools/agents/tests/test_finalize_suppression.py +0 -0
- package/tools/agents/tests/test_gate_evidence.py +0 -0
- package/tools/agents/tests/test_gate_failclosed_indirection.py +0 -0
- package/tools/agents/tests/test_gate_integrity.py +0 -0
- package/tools/agents/tests/test_live_deliver_kill.py +0 -0
- package/tools/agents/tests/test_malformed_unclosed_think.py +0 -0
- package/tools/agents/tests/test_mandate_beats_recon.py +0 -0
- package/tools/agents/tests/test_mandate_deliver.py +0 -0
- package/tools/agents/tests/test_non_stream_resp_log.py +0 -0
- package/tools/agents/tests/test_output_token_ceilings.py +0 -0
- package/tools/agents/tests/test_overflow_truncate_count_tokens.py +0 -0
- package/tools/agents/tests/test_path_containment.py +0 -0
- package/tools/agents/tests/test_path_normalizer_hardened.py +0 -0
- package/tools/agents/tests/test_repeat_call_guard.py +0 -0
- package/tools/agents/tests/test_repeat_guard.py +0 -0
- package/tools/agents/tests/test_session_admission.py +0 -0
- package/tools/agents/tests/test_stream_heartbeat.py +0 -0
- package/tools/agents/tests/test_stream_thinking_deltas.py +405 -0
- package/tools/agents/tests/test_stuck_break_hard.py +0 -0
- package/tools/agents/tests/test_stuck_break_reattach.py +0 -0
- package/tools/agents/tests/test_turn_count_breaker_periodic.py +0 -0
- package/tools/agents/tests/test_upstream_chokepoint.py +0 -0
- package/tools/agents/tests/test_upstream_model_aliases.py +0 -0
- package/tools/agents/tests/test_validate_plan_gate.py +0 -0
- package/tools/agents/tests/test_vision_passthrough.py +0 -0
- package/tools/agents/tests/test_workdir_scope_enforcer.py +0 -0
- package/dist/cli/rtk.d.ts +0 -34
- package/dist/cli/rtk.d.ts.map +0 -1
- package/dist/cli/rtk.js +0 -401
- package/dist/cli/rtk.js.map +0 -1
- package/docs/integrations/RTK.md +0 -113
- package/scripts/setup/install-rtk.sh +0 -184
- package/src/policies/enforcers/rtk_wrap.py +0 -205
- package/src/policies/schemas/policies/rtk-wrap.md +0 -50
- package/tools/agents/tests/test_rtk_wrap.py +0 -151
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Qwen3.8-27B — With-UAP vs Without-UAP Comparison Plan (UAP v1.224.x)
|
|
2
|
+
|
|
3
|
+
**Status:** Proposed (no benchmark runs start without an explicit go)
|
|
4
|
+
**Date:** 2026-09-02
|
|
5
|
+
**Supersedes:** nothing — extends [PAIRED_FINDINGS.md](../benchmarks/PAIRED_FINDINGS.md) to the current model and current UAP
|
|
6
|
+
|
|
7
|
+
## Goal
|
|
8
|
+
|
|
9
|
+
Run the **same Qwen3.8-27B model, same tasks, same seeds, twice — once with
|
|
10
|
+
UAP, once without** — and quantify the difference. The model under test is the
|
|
11
|
+
current production local stack: **Qwen3.8-27B (dense, UD-IQ4_XS, native
|
|
12
|
+
draft-mtp)** on llama.cpp, and the UAP under test is the **latest (v1.224.x)**.
|
|
13
|
+
|
|
14
|
+
Every experiment below produces one headline number: the **paired delta
|
|
15
|
+
(UAP-on minus UAP-off)** for accuracy, with the cost side of the ledger
|
|
16
|
+
(tokens, turns, latency) reported alongside it. Two questions the existing
|
|
17
|
+
findings cannot answer:
|
|
18
|
+
|
|
19
|
+
1. **Replication:** does the decisive non-agentic gate-loop result — **+20pp
|
|
20
|
+
accuracy [95% CI +8, +32], p=0.008**, measured on qwen36-35b-a3b — hold on
|
|
21
|
+
this denser, stronger 27B model, or was it partly a property of the older
|
|
22
|
+
MoE?
|
|
23
|
+
2. **Regression check:** the findings predate the two biggest recent ships —
|
|
24
|
+
the quality-metrics gate (v1.223.0) and the deliver-pipeline hardening
|
|
25
|
+
(v1.224.0: scoped rollback, declared gates, polyglot execution, config
|
|
26
|
+
routing, liveness, signed overrides). The paired harness's gate loop is the
|
|
27
|
+
`uap deliver` mechanism in miniature; confirm the hardened pipeline did not
|
|
28
|
+
regress the measured lift or its token economics.
|
|
29
|
+
|
|
30
|
+
## Why now
|
|
31
|
+
|
|
32
|
+
- **Model changed under the findings.** Production serving switched
|
|
33
|
+
2026-08-20 from qwen36-35b-a3b (MoE, ~3B active) to Qwen3.8-27B (dense,
|
|
34
|
+
qwen35-arch, native MTP head, 60–91% draft acceptance) — profile
|
|
35
|
+
`config/llama-profiles/qwen38-27b-mtp.env`, served as alias `Qwen3.8-27B`
|
|
36
|
+
on `:8080` (legacy aliases retained, so old client configs still resolve).
|
|
37
|
+
- **UAP changed under the findings.** The paired runs are from the v1.21x era;
|
|
38
|
+
the deliver loop they exercise has since been substantially hardened.
|
|
39
|
+
- **Newer suites exist that were not in the findings.** `real-gate-medium`,
|
|
40
|
+
`real-gate-power`, `real-gate-brutal`, and `real-gate-heldout` directly
|
|
41
|
+
address the findings' own ceiling-effect caveat (agentic baseline pinned at
|
|
42
|
+
100% on the older suites, so UAP showed 0pp there).
|
|
43
|
+
|
|
44
|
+
## Stack preflight (Phase 0 — before any measurement)
|
|
45
|
+
|
|
46
|
+
1. Bring up / verify the serving stack:
|
|
47
|
+
`scripts/bootstrap/bootstrap-uap-llama-proxy-stack.sh` (llama-server
|
|
48
|
+
`:8080` + anthropic proxy `:4100`). Server is currently live with
|
|
49
|
+
`Qwen3.8-27B` loaded (131072 ctx/slot, 2 slots); the proxy did not answer
|
|
50
|
+
`/v1/models` at plan time — confirm it is up and routing.
|
|
51
|
+
2. Confirm tool-call plumbing: `uap tool-calls status` (qwen-sharp.jinja
|
|
52
|
+
active, `--jinja` on).
|
|
53
|
+
3. Freeze the served model id used by every run (`Qwen3.8-27B` or the proxy's
|
|
54
|
+
advertised id — verify once via `/props`, then hold it fixed across all
|
|
55
|
+
arms and phases so the paired design is not contaminated by an alias swap).
|
|
56
|
+
4. Plumbing check with the deterministic mock adapter:
|
|
57
|
+
`uap bench paired --suite benchmarks/suites/smoke --adapter mock --epochs 8`.
|
|
58
|
+
5. Concurrency discipline: the box is a single RTX 3090 with **2 server
|
|
59
|
+
slots** — run the harness at `--concurrency 2` max and keep
|
|
60
|
+
`PROXY_CONCURRENCY_LIMIT` == slot count. Latency numbers remain
|
|
61
|
+
queue-confounded (known caveat from the prior findings); we read
|
|
62
|
+
correctness and token deltas, not wall-clock.
|
|
63
|
+
|
|
64
|
+
## Experimental design — the two arms
|
|
65
|
+
|
|
66
|
+
Every run pair toggles **only** the UAP surface. Model (`Qwen3.8-27B`),
|
|
67
|
+
serving stack, task fixture, seed, and prompt are identical in both arms.
|
|
68
|
+
|
|
69
|
+
| | **WITHOUT UAP** (baseline arm) | **WITH UAP** (treatment arm) |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| Raw (non-agentic) experiments | One raw completion endpoint call; whatever the model writes is final | The UAP gate loop (the `uap deliver` mechanism in miniature): execute → run the visible in-repo gate → feed failures back → regenerate until green |
|
|
72
|
+
| Agentic experiments (opencode adapter) | Bare opencode on the same model and prompt, no UAP files injected | Identical opencode run plus the paired-harness UAP surface: `AGENTS.md` operating protocol, `.uap-bench.json` manifest, `UAP_BENCH_COMPONENTS` env — the inspectable, diffable "treatment" |
|
|
73
|
+
| Deliver-path spot check (E4) | Model without the deliver pipeline | The actual hardened v1.224.0 `uap deliver` surface: scoped rollback, declared gates, liveness |
|
|
74
|
+
|
|
75
|
+
What "the difference" means, precisely, per run:
|
|
76
|
+
|
|
77
|
+
- **Accuracy Δ** — UAP-on success rate minus UAP-off success rate, with a
|
|
78
|
+
bootstrap 95% CI and permutation p-value; McNemar 2×2 ("UAP fixed" vs
|
|
79
|
+
"UAP regressed") on discordant pairs.
|
|
80
|
+
- **Cost Δ** — paired deltas for tokens, turns, tool-calls, latency. A win is
|
|
81
|
+
higher accuracy at acceptable cost, or equal accuracy at lower cost.
|
|
82
|
+
- **Ablation (E2)** — the WITH-UAP arm decomposed: leave-one-out per
|
|
83
|
+
component (gates / worktree / memory / experts / skills / patterns) so we
|
|
84
|
+
can see which parts of UAP earn their token overhead on this model.
|
|
85
|
+
|
|
86
|
+
All scoring is deterministic `verifyCmd` (no LLM judge). Artifacts land in
|
|
87
|
+
`benchmark-results/paired-qwen38-*`. Statistics per the established format:
|
|
88
|
+
bootstrap 95% CI (10k seeded resamples) + sign-flip permutation p.
|
|
89
|
+
|
|
90
|
+
## Experiments
|
|
91
|
+
|
|
92
|
+
| # | Question | Suite | Adapter | WITHOUT UAP | WITH UAP |
|
|
93
|
+
|---|---|---|---|---|---|
|
|
94
|
+
| E1 | Does the gate loop still rescue one-shot failures? | `real-gate-gated` × 10 epochs | raw | single-shot | gate loop |
|
|
95
|
+
| E2 | Does UAP cost or add anything on a self-verifying agent? | `real-gate-hard` × 4 epochs | opencode | bare opencode | opencode + UAP surface (+ per-component ablation) |
|
|
96
|
+
| E3 | Is there headroom for UAP lift on harder/held-out tasks? | `real-gate-heldout`, `-power`, `-medium`, `-brutal` | raw + opencode | both baselines | both treatments |
|
|
97
|
+
| E4 | Does the hardened v1.224.0 deliver path converge as well as the miniature? | `real-gate-gated` subset | raw → deliver | no deliver | full deliver surface |
|
|
98
|
+
|
|
99
|
+
### E1 — Headline replication (raw adapter, non-agentic gate value)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
UAP_RAW_TEMPERATURE=0.6 uap bench paired \
|
|
103
|
+
--adapter raw --model "Qwen3.8-27B" \
|
|
104
|
+
--suite benchmarks/suites/real-gate-gated \
|
|
105
|
+
--epochs 10 --concurrency 2
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Identical design to the decisive qwen36 run (5 edge-case tasks ×
|
|
109
|
+
{single-shot, gate-loop} × 10 epochs, temp 0.6). The comparison to beat:
|
|
110
|
+
**+20.0pp [+8.0, +32.0], McNemar net +10, +1,072 tokens / +0.3 turns.**
|
|
111
|
+
Hypotheses to distinguish: (a) lift replicates ≈ +20pp — gate value is
|
|
112
|
+
model-independent; (b) lift shrinks because the stronger model one-shots more
|
|
113
|
+
edge cases (baseline above 78%) — ceiling moves, gate still nets positive on
|
|
114
|
+
the remainder; (c) lift vanishes — report honestly.
|
|
115
|
+
|
|
116
|
+
### E2 — Agentic ceiling check + component ablation (opencode adapter)
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
uap bench paired --adapter opencode --model "Qwen3.8-27B" \
|
|
120
|
+
--suite benchmarks/suites/real-gate-hard --ablation --epochs 4
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Replicates the 0pp-at-ceiling agentic result and re-ranks per-component token
|
|
124
|
+
overhead (gates / worktree / memory / experts / skills / patterns) on the new
|
|
125
|
+
model. Watch for the known harness wedge (detached opencode process tree
|
|
126
|
+
surviving SIGTERM) — the process-group SIGKILL fix is in, but flag any
|
|
127
|
+
158–190/192-style shortfall.
|
|
128
|
+
|
|
129
|
+
### E3 — Headroom re-openers (the suites the findings never saw)
|
|
130
|
+
|
|
131
|
+
Paired runs (raw + opencode adapters) over, in priority order:
|
|
132
|
+
|
|
133
|
+
1. `real-gate-heldout` — held-out tasks; guards against suite overfitting of
|
|
134
|
+
the E1/E2 conclusions.
|
|
135
|
+
2. `real-gate-power` — designed for statistical power; the primary candidate
|
|
136
|
+
for a tighter CI on the agentic delta.
|
|
137
|
+
3. `real-gate-medium`, then `real-gate-brutal` — harder multi-file tasks
|
|
138
|
+
where even a self-verifying agentic baseline should drop below 100%,
|
|
139
|
+
re-opening the headroom the older suites lacked. This is the run that can
|
|
140
|
+
show UAP lift *inside* an agentic harness, which the prior findings could
|
|
141
|
+
not measure.
|
|
142
|
+
|
|
143
|
+
### E4 — Deliver-pipeline spot check (post-hardening)
|
|
144
|
+
|
|
145
|
+
E1's gate loop is the deliver mechanism in miniature; it does not exercise
|
|
146
|
+
the actual v1.224.0 deliver path (scoped rollback, declared gates, liveness).
|
|
147
|
+
Unit/integration coverage for those shipped with the feature (90+ tests), so
|
|
148
|
+
E4 is a small paired run where the UAP arm routes through the **current full
|
|
149
|
+
deliver surface** rather than the raw miniature, confirming the hardened loop
|
|
150
|
+
converges at least as well on the same suite. If the paired harness cannot
|
|
151
|
+
drive the real deliver path today, note the gap and scope the adapter
|
|
152
|
+
extension instead of hand-waving it.
|
|
153
|
+
|
|
154
|
+
## Analysis plan
|
|
155
|
+
|
|
156
|
+
- Primary claims are the **with-UAP vs without-UAP paired deltas** (E1–E4),
|
|
157
|
+
each with CI + p, in the `PAIRED_FINDINGS.md` report format. The summary
|
|
158
|
+
table leads with one row per experiment: suite, UAP-off accuracy, UAP-on
|
|
159
|
+
accuracy, Δ, CI, p, token Δ.
|
|
160
|
+
- Cross-model (qwen36 → qwen38) comparisons are **not paired** — report as
|
|
161
|
+
side-by-side findings with the confound named (model, serving stack, and
|
|
162
|
+
UAP version all moved).
|
|
163
|
+
- Success criteria, decided in advance: E1 CI excludes 0 with the same sign
|
|
164
|
+
as before; E3 shows at least one suite where the agentic baseline leaves
|
|
165
|
+
headroom (else the 0pp agentic conclusion stands, strengthened); E4 shows
|
|
166
|
+
no convergence regression vs E1's loop.
|
|
167
|
+
- Write-up lands as an update section in `docs/benchmarks/PAIRED_FINDINGS.md`
|
|
168
|
+
(new runs, same tables), not a parallel document.
|
|
169
|
+
|
|
170
|
+
## Cost
|
|
171
|
+
|
|
172
|
+
Local GPU, so the currency is wall-clock, not dollars. Rough budget on one
|
|
173
|
+
RTX 3090 at 2-slot concurrency: E1 ≈ 100 runs, E2 ≈ 192 runs (ablation), E3
|
|
174
|
+
similar order per suite. Expect several GPU-hours per experiment; schedule
|
|
175
|
+
sequentially, keep `--concurrency 2`, and watch the host's kernel OOM-kill
|
|
176
|
+
history at the 131072-ctx tier (~0.95 GiB free VRAM) — drop to 65536/slot if
|
|
177
|
+
instability appears, and re-derive `PROXY_CONTEXT_WINDOW` to match.
|
|
178
|
+
|
|
179
|
+
## Risks
|
|
180
|
+
|
|
181
|
+
| Risk | Mitigation |
|
|
182
|
+
|---|---|
|
|
183
|
+
| Proxy `:4100` not answering at plan time | Phase 0 preflight before any run |
|
|
184
|
+
| Stronger model lifts the non-agentic baseline, shrinking measurable headroom | Expected; report baseline→UAP pair regardless, lean on E3 suites for headroom |
|
|
185
|
+
| Thin VRAM headroom at 131072 ctx/slot under harness load | Drop to 65536/slot tier, re-derive proxy limits |
|
|
186
|
+
| Alias confusion (`Qwen3.8-27B` vs legacy qwen35/36 aliases on the same server) | Freeze one id in Phase 0, assert it in run metadata |
|
|
187
|
+
| Harness process-tree wedge under opencode adapter | Group-SIGKILL fix is in; verify completion counts per run |
|
|
188
|
+
|
|
189
|
+
## Deliverables when executed
|
|
190
|
+
|
|
191
|
+
1. `benchmark-results/paired-qwen38-*` artifacts (records.jsonl, report.json,
|
|
192
|
+
report.md) for E1–E4
|
|
193
|
+
2. An update to `docs/benchmarks/PAIRED_FINDINGS.md` adding the qwen38 /
|
|
194
|
+
UAP-v1.224.x tables alongside the qwen36 originals
|
|
195
|
+
3. If E4 surfaces the deliver-path adapter gap: a scoped follow-up task for
|
|
196
|
+
the paired-harness extension
|
package/docs/reference/API.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UAP Programmatic API Reference
|
|
2
2
|
|
|
3
|
-
> Public API of the `@miller-tech/uap` package. Version v1.
|
|
3
|
+
> Public API of the `@miller-tech/uap` package. Version v1.224.0.
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Cross-cutting — the machine parts behind the line.
|
|
6
6
|
> **What it delivers:** when the `uap` CLI isn't the right shape for your job,
|
package/docs/reference/CLI.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# UAP CLI Reference
|
|
2
2
|
|
|
3
3
|
> Complete command reference for the Universal Agent Protocol command-line interface (`uap`).
|
|
4
|
-
> Version v1.
|
|
4
|
+
> Version v1.224.0.
|
|
5
5
|
|
|
6
6
|
> **🏭 Where this fits:** Every station — this is the control panel for the whole
|
|
7
7
|
> line. **What it delivers:** one binary that drives each stage of your
|
|
@@ -36,6 +36,7 @@ runs, keeping `--help` fast.
|
|
|
36
36
|
| [`memory`](#memory) | Manage the agent memory system |
|
|
37
37
|
| [`patterns`](#patterns) | Manage pattern RAG (on-demand retrieval via Qdrant) |
|
|
38
38
|
| [`worktree`](#worktree) | Manage git worktrees |
|
|
39
|
+
| [`merge`](#merge) | Serialized landing of concurrent agent PRs |
|
|
39
40
|
| [`sync`](#sync) | Sync configuration between platforms |
|
|
40
41
|
| [`droids`](#droids) | Manage custom droids/agents |
|
|
41
42
|
| [`expert-route`](#expert-route) | Recommend an expert droid chain for a task |
|
|
@@ -67,10 +68,23 @@ runs, keeping `--help` fast.
|
|
|
67
68
|
| [`mcp-router`](#mcp-router) | Hierarchical MCP router for 98%+ token reduction |
|
|
68
69
|
| [`hooks`](#hooks) | Manage session hooks across platforms |
|
|
69
70
|
| [`tool-calls`](#tool-calls) | Manage Qwen3.5 tool call fixes and chat templates |
|
|
70
|
-
| [`rtk`](#rtk) | Manage RTK (Rust Token Killer) integration |
|
|
71
71
|
| [`mcp-setup`](#mcp-setup) | Configure MCP Router for all AI harnesses |
|
|
72
72
|
| [`schema-diff`](#schema-diff) | Detect breaking schema changes between branches |
|
|
73
73
|
| [`policy`](#policy) | UAP policy management |
|
|
74
|
+
| [`quality`](#quality) | Quality-metrics gate: complexity, coverage, CRAP, mutation, duplication, any-types |
|
|
75
|
+
| `plan` | Validate + record plan validation (validate-plan-on-change gate): `uap plan validate [file]` reviews the plan, then stamps |
|
|
76
|
+
| `principles` | Engineering principles: show them, and answer the backward-compatibility stance (`status \| ask \| compat \| maturity \| show`) |
|
|
77
|
+
| `fidelity` | Inspect or set the maximum-fidelity verification mode (raised gates + always-on visual/vision review) |
|
|
78
|
+
| `interaction` | Interaction gate: derive probes from the requirements and play the artifact through them |
|
|
79
|
+
| `harness card` | ETCSOVG harness disclosure card for the current configuration |
|
|
80
|
+
| `harness evidence` | Per-tool-call evidence corpus: failure classes, component attribution, edit-tool health |
|
|
81
|
+
| `ideate ideas` | Print the curated ideas produced for a project |
|
|
82
|
+
| `self-harness mine-prod` | Mine weaknesses from production traces (HALO + proxy log) and enqueue proposals for gated validation (never applies) |
|
|
83
|
+
| `self-harness pending` | List queued proposals awaiting validation + gate (from mine-prod) |
|
|
84
|
+
| `bench paired` | Run the paired A/B over a real-gate suite; reports accuracy + efficiency deltas with CIs |
|
|
85
|
+
| `self-harness prune` | Ablation-prune: drop stale / no-longer-paying-off transfer + pending entries |
|
|
86
|
+
| `self-harness run` | Autonomous loop: mine → propose → validate (real paired bench per Mod) → decide → (with `--apply`) commit + versioned snapshot |
|
|
87
|
+
| `self-harness transfer` | List the cross-model transfer store (accepted/rejected Mods keyed by failure signature) |
|
|
74
88
|
| [`uap-omp`](#uap-omp) | UAP integration commands for oh-my-pi (omp) users |
|
|
75
89
|
|
|
76
90
|
---
|
|
@@ -1000,18 +1014,6 @@ Manage Qwen3.5 tool call fixes and chat templates.
|
|
|
1000
1014
|
|
|
1001
1015
|
---
|
|
1002
1016
|
|
|
1003
|
-
## `rtk`
|
|
1004
|
-
|
|
1005
|
-
Manage RTK (Rust Token Killer) integration for token optimization.
|
|
1006
|
-
|
|
1007
|
-
| Subcommand | Key flags | Purpose |
|
|
1008
|
-
|------------|-----------|---------|
|
|
1009
|
-
| `install` | `--force`, `--method` (npm/cargo/binary) | Install the RTK CLI proxy for 60-90% token savings |
|
|
1010
|
-
| `status` | — | Check RTK installation and token savings |
|
|
1011
|
-
| `help` | — | Show RTK usage information |
|
|
1012
|
-
|
|
1013
|
-
---
|
|
1014
|
-
|
|
1015
1017
|
## `mcp-setup`
|
|
1016
1018
|
|
|
1017
1019
|
Configure MCP Router for all AI harnesses (Claude, Factory, VSCode, Cursor).
|
|
@@ -1080,6 +1082,39 @@ uap policy stage POL-1 -s pre-exec
|
|
|
1080
1082
|
|
|
1081
1083
|
---
|
|
1082
1084
|
|
|
1085
|
+
## `quality`
|
|
1086
|
+
|
|
1087
|
+
Quality-metrics gate: deterministic policing of complexity, coverage, CRAP,
|
|
1088
|
+
surviving mutants, duplication, dead code, and explicit `any`/`unknown` types.
|
|
1089
|
+
Activated by `.uap/quality-metrics.json`; existing debt is frozen in the
|
|
1090
|
+
ratchet baseline `.uap/quality-baseline.json` so only NEW or WORSENED
|
|
1091
|
+
violations block. The proxy enforcer `quality_metrics_gate.py` mirrors the fast
|
|
1092
|
+
path (LOC, complexity, any-types) so agent edits are blocked pre-exec with the
|
|
1093
|
+
same thresholds this command enforces at commit/CI time.
|
|
1094
|
+
|
|
1095
|
+
| Subcommand | Key flags | Purpose |
|
|
1096
|
+
|------------|-----------|---------|
|
|
1097
|
+
| `init` | — | Write `.uap/quality-metrics.json` with the default thresholds (activates the gate) |
|
|
1098
|
+
| `check` | `--staged`, `--files <list>`, `-f, --file <path>`, `--json` | Scan files for metric violations and ratchet against the baseline; exit 2 on blocking violations |
|
|
1099
|
+
| `baseline` | `--update` | Show, or with `--update` regenerate, `.uap/quality-baseline.json` from a fresh scan |
|
|
1100
|
+
| `report` | `--files <list>`, `--json` | Verbose report including grandfathered violations, improvements, and skips |
|
|
1101
|
+
| `mutate` | `--changed` | Stryker incremental mutation run scoped to files changed vs the upstream base (advisory when Stryker is not installed) |
|
|
1102
|
+
|
|
1103
|
+
Global flags: `-d, --project-dir <path>`.
|
|
1104
|
+
|
|
1105
|
+
```bash
|
|
1106
|
+
uap quality init # write the config
|
|
1107
|
+
uap quality baseline --update # freeze current debt (commit the diff — it is the reviewable record)
|
|
1108
|
+
uap quality check # full scan; fails on new/worsened violations
|
|
1109
|
+
uap quality check --staged # scan only files changed vs upstream
|
|
1110
|
+
uap quality check --file src/x.ts # single file (content may come from stdin — enforcer parity path)
|
|
1111
|
+
```
|
|
1112
|
+
|
|
1113
|
+
Escape hatch for agents: `UAP_QUALITY_GATE_OFF=1`. Regenerating the baseline is
|
|
1114
|
+
a deliberate act — do it only with reviewer sign-off.
|
|
1115
|
+
|
|
1116
|
+
---
|
|
1117
|
+
|
|
1083
1118
|
## `uap-omp`
|
|
1084
1119
|
|
|
1085
1120
|
UAP integration commands for oh-my-pi (omp) users. Thin wrappers over the
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# UAP vs Other Agent Harnesses and Tooling
|
|
2
|
+
|
|
3
|
+
> Applies to UAP v1.224.0. Competitor profiles reflect public sources as of
|
|
4
|
+
> September 2026; vendor-reported numbers are flagged as such, and claims we
|
|
5
|
+
> could not verify are marked or omitted. UAP's own claims in this document
|
|
6
|
+
> were verified against the code.
|
|
7
|
+
>
|
|
8
|
+
> Companion: [Market Position & Competitive Analysis](../analysis/MARKET_POSITION.md)
|
|
9
|
+
> (2026-09) — the dated, strategy-level read (market structure, moats, risks,
|
|
10
|
+
> options) above this feature-level comparison.
|
|
11
|
+
|
|
12
|
+
UAP is frequently miscast as "another agent harness." It isn't one — it's the
|
|
13
|
+
**discipline layer that sits underneath the harness you're already using**, and
|
|
14
|
+
that positioning determines what an honest comparison looks like. Against
|
|
15
|
+
harnesses (Claude Code, Codex, Cursor, Aider, …) UAP is *complementary*: it
|
|
16
|
+
installs into them. Against per-capability tooling (memory systems,
|
|
17
|
+
orchestration frameworks, spec-driven-development products, review bots,
|
|
18
|
+
policy engines) UAP is *comparable*: it ships its own answer to the same
|
|
19
|
+
problem. This document does both comparisons, then says plainly where UAP
|
|
20
|
+
loses.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## The one-slide version
|
|
25
|
+
|
|
26
|
+
| | Typical agent harness | Typical point tool | **UAP** |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| What it is | The agent's runtime/UI | One capability (memory OR review OR orchestration) | A process layer under the harness: memory + policy + verification + coordination |
|
|
29
|
+
| Model lock-in | Often (Claude Code, Codex, Jules) or partial (Cursor) | Usually none | None — frontier or local llama.cpp/Qwen |
|
|
30
|
+
| Rules are | Conventions in a context file | Config of the point tool | **Executable hooks that block** (exit 2), 32 enforcers |
|
|
31
|
+
| "Done" means | The model says so | N/A | Your **real gates pass**, judged by a different checker than the writer |
|
|
32
|
+
| Memory | Context files (CLAUDE.md / AGENTS.md / rules) | The product (Mem0, Zep, Letta) | 4-tier memory with write-gates + promotion, built in |
|
|
33
|
+
| Multi-agent | Subagents, cloud task pools | N/A or framework | Live file-claim blocking across worktrees + deploy batching |
|
|
34
|
+
| Cost | Subscription / API | Free tier → per-seat SaaS | MIT, self-hosted, free |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. UAP vs agent harnesses (complementary, not competitive)
|
|
39
|
+
|
|
40
|
+
UAP installs hooks into the harness and mediates its tool calls; it does not
|
|
41
|
+
replace the model, the UI, or the session runtime. It currently supports
|
|
42
|
+
[9 harnesses](PLATFORMS.md) — Claude Code, Factory, Cursor, VSCode, OpenCode,
|
|
43
|
+
Codex, ForgeCode, Oh-My-Pi, Hermes.
|
|
44
|
+
|
|
45
|
+
| Harness | Layer | Memory | Extensibility | Verification gate | Multi-agent | Models | License |
|
|
46
|
+
|---|---|---|---|---|---|---|---|
|
|
47
|
+
| **Claude Code** | CLI + IDE/web | CLAUDE.md, skills | Richest hook surface (PreToolUse etc.), MCP, subagents | Convention + hooks; `/verify` skill (2026) | Subagents, Agent SDK | Anthropic only | Proprietary |
|
|
48
|
+
| **OpenAI Codex** | CLI + cloud + IDE | AGENTS.md | MCP, skills, sandbox/approvals | Cloud sandbox + diffs; tests user-configured | Parallel cloud tasks | OpenAI only | CLI Apache-2.0, usage paid |
|
|
49
|
+
| **Cursor** | IDE + CLI | .cursor/rules, Memories | MCP, rules, BugBot | Prompt/rule-driven | Background/cloud agents | Multi + own Composer | Proprietary freemium |
|
|
50
|
+
| **Aider** | Terminal CLI | CONVENTIONS.md, config | Config, scripting (no MCP) | **Auto-lint/auto-test built in** — the closest to UAP's gate loop among harnesses | Single-session | Fully agnostic | Apache-2.0 |
|
|
51
|
+
| **OpenCode** | TUI + desktop + IDE | AGENTS.md | MCP, plugins, custom agents | In-session commands; no hard gate | Subagents, headless run | 75+ providers | Open source |
|
|
52
|
+
| **Cline** | IDE ext + CLI/SDK | .clinerules, Memory Bank | MCP (originated the marketplace), approvals | Human approval per step; checkpoints | Single; SDK scripting | BYOK 30+ providers | Apache-2.0 |
|
|
53
|
+
| **Factory Droid** | Harness platform | Sessions, instruction files, skills | Skills, MCP, plugins, Spec Mode | Spec Mode + CI droids; configurable | Missions, parallel droids, worktrees | Model-agnostic | Proprietary SaaS |
|
|
54
|
+
| **Gemini CLI / Jules → Antigravity** | CLI (sunset 2026) + async cloud | GEMINI.md | MCP, extensions | Jules runs tests in VM + PR approval | Task pool; Antigravity multi-agent | Gemini only | Mixed |
|
|
55
|
+
| **Devin (Cognition)** | Autonomous cloud agent + IDE (absorbed Windsurf, June 2026) | Playbooks, persistent VMs | API, webhooks | Runs tests in own VM before PR | Parallel sessions | Proprietary SWE + frontier | Commercial |
|
|
56
|
+
|
|
57
|
+
### What a harness gives you that UAP doesn't
|
|
58
|
+
|
|
59
|
+
The agent itself: the UI, the session loop, the tool surface, the model
|
|
60
|
+
subscription, and (for the commercial ones) support. If you have no harness,
|
|
61
|
+
UAP is not the thing to install first.
|
|
62
|
+
|
|
63
|
+
### What UAP adds underneath any of them
|
|
64
|
+
|
|
65
|
+
- **Executable policy, not conventions.** Every harness above persists guidance
|
|
66
|
+
as *context files* (CLAUDE.md, AGENTS.md, .cursor/rules) — prose the model
|
|
67
|
+
may honor or ignore. UAP turns the same rules into hook-bound Python
|
|
68
|
+
enforcers that return exit 2 and **block** the tool call: worktree isolation,
|
|
69
|
+
test deltas, schema diffs, expert review, quality budgets. The harness's own
|
|
70
|
+
hook surface (Claude Code's is the strongest) is the mounting point, not a
|
|
71
|
+
substitute.
|
|
72
|
+
- **A hard definition of done.** Aider's auto-test and Jules's VM runs are
|
|
73
|
+
real verification, but they answer "did the edit pass" for one edit. UAP's
|
|
74
|
+
`deliver` loop iterates against your *project's* gates (build → typecheck →
|
|
75
|
+
test → lint → declared custom gates → execution/polyglot gates) until they
|
|
76
|
+
pass, with a separate acceptance judge — the generator never grades its own
|
|
77
|
+
homework.
|
|
78
|
+
- **Cross-harness consistency.** The same policy file, memory, and gate set
|
|
79
|
+
applies whether today's session runs in Claude Code and tomorrow's in
|
|
80
|
+
OpenCode — harness choice becomes a preference, not a process change.
|
|
81
|
+
- **Local-model viability.** The inference proxy's guardrails (loop-breakers,
|
|
82
|
+
empty-output recovery, grammar constraints, model-slot leases) make cheap
|
|
83
|
+
local models (llama.cpp/Qwen) usable on the same floor as frontier models.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 2. UAP vs memory & context tooling
|
|
88
|
+
|
|
89
|
+
| Tool | Layer | Memory model | Write quality control | Consumption | Benchmarks | License |
|
|
90
|
+
|---|---|---|---|---|---|---|
|
|
91
|
+
| **Mem0** | Library + SaaS (+ MCP via OpenMemory) | Semantic facts, multi-scope; optional graph | LLM ADD/UPDATE/DELETE/NOOP gate with dedup | SDK, REST, MCP | LoCoMo 92.5, LongMemEval 94.4 *(vendor-reported)* | Apache-2.0 + paid tiers |
|
|
92
|
+
| **Zep / Graphiti** | Service + OSS engine | Temporal bi-temporal knowledge graph | Entity resolution + edge invalidation | SDK, REST, MCP | DMR > MemGPT (2025 paper) | Graphiti Apache-2.0; Zep commercial |
|
|
93
|
+
| **Letta** | Agent runtime | Core/archival/recall blocks, agent self-edits | Agent's own tool-call judgment; no auto-dedup | SDK, REST, ADE, MCP | No fresh 2026 public numbers | Apache-2.0 + cloud |
|
|
94
|
+
| **Context7** | MCP server | None — doc injection, not memory | Server-side curation | MCP | None published | OSS + freemium |
|
|
95
|
+
| **LLMLingua line** | Library | None — prompt compression | N/A | pip | 20× compression (EMNLP'23) | MIT; stable, low momentum |
|
|
96
|
+
| **LangMem / LlamaIndex memory** | Framework modules | Semantic/episodic/procedural | Configurable extractors | SDK | None public | OSS |
|
|
97
|
+
| **UAP memory** | Built into the discipline layer | **4 tiers**: working (SQLite FTS5) → session → semantic (Qdrant, 768-dim) → knowledge graph | Score-gated writes + consolidation + promotion; dedup by hash + embedding similarity | CLI + hook injection into 9 harnesses | Not independently benchmarked on LoCoMo/LongMemEval | MIT |
|
|
98
|
+
|
|
99
|
+
### Where the specialists win
|
|
100
|
+
|
|
101
|
+
Mem0, Zep, and Letta are *products about memory*: managed services, enterprise
|
|
102
|
+
compliance (Zep is SOC 2), published benchmark numbers (Mem0's are
|
|
103
|
+
vendor-reported), SDK ecosystems, and 20+ framework integrations. If you are
|
|
104
|
+
*building* an agent product and need a memory API, use one of them — UAP's
|
|
105
|
+
memory is not exposed as a general-purpose service, has no hosted tier, and
|
|
106
|
+
has not been run against the standard memory benchmarks.
|
|
107
|
+
|
|
108
|
+
### Where UAP differs
|
|
109
|
+
|
|
110
|
+
UAP's memory is **operational, not archival**: its tiers exist to keep a coding
|
|
111
|
+
agent's *workflow* honest (recent actions, open loops, promoted lessons), and
|
|
112
|
+
its distinguishing feature is the feedback loop — lessons graduate from
|
|
113
|
+
session notes to long-term memory only through a quality write-gate, and
|
|
114
|
+
patterns that stop paying off fade (pattern reinforcement). It is also the
|
|
115
|
+
only option in the table that arrives pre-wired into the agent's session
|
|
116
|
+
lifecycle (injected at session start, recorded per turn) across nine harnesses
|
|
117
|
+
with zero application code. Context7-style doc injection and LLMLingua-style
|
|
118
|
+
compression have their UAP analogues in the MCP Router (tool hiding + FTS5
|
|
119
|
+
BM25 output compression, ~98% smaller big-tool payloads) — again, hook-native
|
|
120
|
+
rather than an API you integrate.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 3. UAP vs orchestration frameworks
|
|
125
|
+
|
|
126
|
+
| Framework | Model-agnostic | Durable state | Human-in-loop | Executable gates | License | Maturity |
|
|
127
|
+
|---|---|---|---|---|---|---|
|
|
128
|
+
| **LangGraph** | Yes | Strong (checkpoints; Temporal plugin) | Strong (interrupts) | Advisory/external (LangSmith evals) | MIT | Very high — the default |
|
|
129
|
+
| **CrewAI** | Yes | Partial | Per-task | Output validators; enterprise governance tier | MIT + commercial | High |
|
|
130
|
+
| **AutoGen → MS Agent Framework** | Yes | Legacy → improved in successor | Yes | Advisory | MIT | AutoGen in maintenance; successor young |
|
|
131
|
+
| **OpenAI Agents SDK** | OpenAI-first | Sessions only | Patterns | Guardrails primitive (LLM-level) | MIT | High |
|
|
132
|
+
| **Google ADK** | Gemini-first | Pluggable sessions | Callbacks | Built-in eval framework (`adk eval`) | Apache-2.0 | High, growing |
|
|
133
|
+
| **UAP** | Yes (incl. local models) | SQLite task DAG + coordination DB + run state | Operator guidance channel mid-run | **Yes — exit-code-blocking enforcers + real-gate convergence loop** | MIT | Single-operator production use |
|
|
134
|
+
|
|
135
|
+
These frameworks answer "how do I *build* a multi-agent application in code";
|
|
136
|
+
UAP answers "how do I *govern* the coding agents I already run." The overlap
|
|
137
|
+
is real but narrow — if you use LangGraph to build an agent product, you could
|
|
138
|
+
still put UAP under the coding agents that maintain that product's repo. The
|
|
139
|
+
sharpest differences: none of the frameworks ship executable, deterministic
|
|
140
|
+
gates on what the agent may *do to a codebase* (their guardrails are LLM-level
|
|
141
|
+
validators), and none carry a verification loop tied to the project's real
|
|
142
|
+
build/test/lint. Conversely, UAP has no visual graph builder, no
|
|
143
|
+
checkpoint-replay durability à la LangGraph+Temporal, and no framework-level
|
|
144
|
+
abstractions for novel agent topologies.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 4. UAP vs spec-driven development & agent governance
|
|
149
|
+
|
|
150
|
+
| Tool | What it does | Enforcement mode | License |
|
|
151
|
+
|---|---|---|---|
|
|
152
|
+
| **GitHub spec-kit** | Structured specify → plan → tasks → implement workflow with a project "constitution" | Prompt-level templates and checklists | MIT |
|
|
153
|
+
| **AWS Kiro** | Spec workflow (EARS requirements → design → tasks) + event-driven agent hooks | **Mixed**: hooks are executable; specs/steering are prompt-level | Proprietary |
|
|
154
|
+
| **Tessl** | Pivoted Jan 2026 to an "Agent Enablement Platform" (skills registry); spec-driven skills remain | Prompt-level + eval scenarios | Proprietary |
|
|
155
|
+
| **AGENTS.md convention** | The de facto standard agent-readme; 60k+ repos, 20+ tools read it | None — convention only | Open format |
|
|
156
|
+
| **UAP** | Reads the same instruction files (CLAUDE.md/AGENTS.md) *and* binds their rules to hook-enforced gates; plan validation gate; P35 decoder-first pre-execution check | **Executable** for the rules it covers (edit/commit/ship plane); prompt-level for everything else | MIT |
|
|
157
|
+
|
|
158
|
+
The axis that matters here is *suggests vs blocks*. Spec-kit, AGENTS.md, and
|
|
159
|
+
Tessl's skills improve what the agent *knows*; Kiro's hooks and UAP's
|
|
160
|
+
enforcers constrain what the agent *does*. UAP and Kiro are the only two with
|
|
161
|
+
an executable component; Kiro's hooks automate *tasks* (on file save, run X),
|
|
162
|
+
while UAP's hooks *gate the action itself* (block the write, the push, the
|
|
163
|
+
merge). They compose fine — a spec-kit constitution can name UAP's gates as
|
|
164
|
+
the enforcement mechanism.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 5. UAP vs verification, review & policy engines
|
|
169
|
+
|
|
170
|
+
| Tool | What it gates | Where it sits | Executable? | License |
|
|
171
|
+
|---|---|---|---|---|
|
|
172
|
+
| **SWE-agent** | Nothing itself — research scaffold measured by SWE-bench | Task execution | N/A | MIT |
|
|
173
|
+
| **CodeRabbit** | PR review (bugs, security, custom rules) | **PR stage** | Via platform merge checks; findings advisory | Proprietary SaaS |
|
|
174
|
+
| **Greptile** | PR review with full-repo context | PR stage (self-host option in v3) | Via merge checks; advisory by default | Proprietary |
|
|
175
|
+
| **NeMo Guardrails** | Agent I/O: injection, dialog, tool-call constraints | Runtime middleware | Yes — blocking rails | Apache-2.0 |
|
|
176
|
+
| **OPA (agent use)** | Which tools an agent may call, with what parameters — now a first-class OPA use case (OWASP Agentic Top 10 write-ups) | Runtime middleware | Yes — deterministic Rego deny | Apache-2.0 (CNCF) |
|
|
177
|
+
| **UAP** | Codebase integrity: where edits land, whether tests/builds/schema/review gates ran, quality budgets, trust anchors | **Edit/commit/ship plane**, pre-PR | Yes — exit-2 hook enforcers, fail-closed | MIT |
|
|
178
|
+
|
|
179
|
+
### The real distinctions
|
|
180
|
+
|
|
181
|
+
- **Stage.** CodeRabbit/Greptile review *after* the code is written, at the PR.
|
|
182
|
+
UAP gates *while* the agent is writing — the violation never becomes a commit.
|
|
183
|
+
They compose well: UAP reduces what the PR reviewer has to catch.
|
|
184
|
+
- **Determinism.** OPA and UAP are the deterministic options: policy-as-code
|
|
185
|
+
with no LLM in the verdict path. OPA is the more general, more battle-tested
|
|
186
|
+
engine (CNCF-graduated, huge ecosystem) and the better choice for
|
|
187
|
+
platform-wide authorization. UAP's enforcers trade that generality for being
|
|
188
|
+
**pre-built for coding-agent failure modes** (worktree discipline, test
|
|
189
|
+
gates, self-protection against an agent disabling its own guardrails —
|
|
190
|
+
including interpreter-mediated tampering) and for hooking directly into
|
|
191
|
+
harness events with no sidecar to run.
|
|
192
|
+
- **Verification depth.** Nobody else in this table runs the project's real
|
|
193
|
+
build/test/lint as a convergence gate with a separate acceptance judge.
|
|
194
|
+
SWE-agent measures agents; UAP's paired harness (`uap bench paired`)
|
|
195
|
+
measures *its own* uplift with controlled A/B — see
|
|
196
|
+
[benchmarks](../benchmarks/PAIRED_FINDINGS.md).
|
|
197
|
+
- **UAP's quality gate vs review bots.** CodeRabbit-style review is LLM
|
|
198
|
+
judgment; UAP's `quality` gate is deterministic budgets (complexity, CRAP,
|
|
199
|
+
coverage, mutants, duplicates, `any` types) with a ratchet baseline — the
|
|
200
|
+
two catch different things.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 6. Where UAP loses — honest trade-offs
|
|
205
|
+
|
|
206
|
+
1. **Single-operator tool.** No user auth, no teams, no hosted service, no
|
|
207
|
+
enterprise compliance story (Zep/Mem0/Cognition all have one). The
|
|
208
|
+
dashboard binds unauthenticated; it's a local console.
|
|
209
|
+
2. **Not a harness.** You still need Claude Code/OpenCode/etc. underneath;
|
|
210
|
+
UAP alone runs no agent.
|
|
211
|
+
3. **Not a framework.** No graph builder, no replay durability, no agent-topology
|
|
212
|
+
abstractions — LangGraph/ADK territory.
|
|
213
|
+
4. **Memory is not benchmarked.** Mem0/Zep publish LoCoMo/LongMemEval/DMR
|
|
214
|
+
numbers (vendor caveats aside); UAP's memory has none. Its benchmark
|
|
215
|
+
discipline is applied to *delivery uplift* instead (paired A/B with CIs).
|
|
216
|
+
5. **Platform breadth.** The kernel sandbox is Linux-only (bubblewrap); hook
|
|
217
|
+
depth varies by harness; the full memory tier wants Docker/Qdrant.
|
|
218
|
+
6. **Ecosystem size.** One vendor, MIT, small community vs LangChain-scale
|
|
219
|
+
ecosystems; fewer integrations, fewer eyes.
|
|
220
|
+
7. **Enforcement has a known escape hatch.** `--dangerously-skip-permissions`
|
|
221
|
+
bypasses harness hooks by design; UAP's compensating control is the bwrap
|
|
222
|
+
sandbox, not the hook plane.
|
|
223
|
+
8. **Vendor momentum elsewhere.** The 2026 market moved fast (Windsurf → Devin
|
|
224
|
+
Desktop, Gemini CLI → Antigravity, AutoGen → Agent Framework, Tessl's
|
|
225
|
+
pivot); harness-specific UAP integrations can lag those shifts.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 7. Choosing
|
|
230
|
+
|
|
231
|
+
- **Building an agent product in code** → LangGraph / Google ADK (+ Mem0 or
|
|
232
|
+
Zep for memory). UAP is irrelevant to your runtime, useful for your repo.
|
|
233
|
+
- **Running coding agents on a real codebase and tired of unverified "done"** →
|
|
234
|
+
UAP under your current harness; add CodeRabbit/Greptile at the PR if you
|
|
235
|
+
want a second, post-hoc net.
|
|
236
|
+
- **Regulated / multi-tenant agent authorization** → OPA as the policy engine;
|
|
237
|
+
UAP's enforcers are the coding-agent-specific complement.
|
|
238
|
+
- **Local-model shop** → UAP's proxy + guardrails + routing are the differentiator;
|
|
239
|
+
nothing else in this document is built for that floor.
|
|
240
|
+
|
|
241
|
+
## Sources & method
|
|
242
|
+
|
|
243
|
+
UAP capabilities verified against the v1.224.0 codebase (see
|
|
244
|
+
[FEATURES.md](FEATURES.md), [architecture](../architecture/OVERVIEW.md)).
|
|
245
|
+
Competitor profiles compiled September 2026 from vendor docs and secondary
|
|
246
|
+
reviews; vendor-reported benchmark and adoption figures are flagged inline,
|
|
247
|
+
and market events we could not confirm from primary sources (e.g. a reported
|
|
248
|
+
Cursor–Continue acquisition) were omitted. Corrections welcome via PR.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Configuration Reference
|
|
2
2
|
|
|
3
|
-
> Universal Agent Protocol (UAP) v1.
|
|
3
|
+
> Universal Agent Protocol (UAP) v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Cross-cutting — the settings that tune every station.
|
|
6
6
|
> **What it delivers:** the dials that decide how your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)
|
|
@@ -111,8 +111,6 @@ Top level: `version`, `project`, `memory`, `worktree`, `costOptimization`,
|
|
|
111
111
|
| `FACTORY_API_KEY` / `DROID_API_KEY` | Factory/droid benchmark API key | — |
|
|
112
112
|
| `NODE_ENV` / `UAM_ENV` / `CI` | Serverless env detection | — |
|
|
113
113
|
| `HOME` | `~/.uap/omp`, droids dir resolution | — |
|
|
114
|
-
| `TMPDIR` | rtk temp dir | `/tmp` |
|
|
115
|
-
| `FORCE_INSTALL` | Force rtk reinstall | off |
|
|
116
114
|
| `APPDATA` / `USERPROFILE` | Windows MCP config path expansion | — |
|
|
117
115
|
|
|
118
116
|
Per-model API key env var names are configurable via the model config field
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Database Schema Reference
|
|
2
2
|
|
|
3
|
-
> Universal Agent Protocol (UAP) v1.
|
|
3
|
+
> Universal Agent Protocol (UAP) v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Cross-cutting — the shop's records and shift log.
|
|
6
6
|
> **What it delivers:** the durable memory of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Feature Catalog
|
|
2
2
|
|
|
3
|
-
> Universal Agent Protocol (UAP) v1.
|
|
3
|
+
> Universal Agent Protocol (UAP) v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Every station on the line — this catalog is the parts list for the whole factory. **What it delivers:** each feature below is mapped to the stage of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md) it protects, so you can see exactly where your agent's work stops being plausible-looking and starts being genuinely shippable.
|
|
6
6
|
|
|
@@ -153,7 +153,7 @@ DB-driven policy enforcement engine.
|
|
|
153
153
|
| Policy memory (`policy-memory.ts`) | Persists policies (`policies.db`). |
|
|
154
154
|
| Enforced tool router (`enforced-tool-router.ts`) | Routes tool calls through the gate. |
|
|
155
155
|
| CLAUDE.md conversion (`convert-policy-to-claude.ts`) | Renders policies into CLAUDE.md. |
|
|
156
|
-
| Enforcers (`enforcers/`) | ~20 Python enforcers (worktree_required, test_gate, schema_diff_gate, memory_before_plan, coord_overlap, mcp_router_first,
|
|
156
|
+
| Enforcers (`enforcers/`) | ~20 Python enforcers (worktree_required, test_gate, schema_diff_gate, memory_before_plan, coord_overlap, mcp_router_first, iac_parity, expert_review_required, etc.). |
|
|
157
157
|
|
|
158
158
|
## Delivery (`src/delivery/`) — Build & QC / Verify
|
|
159
159
|
|
|
@@ -284,5 +284,5 @@ The `uap` CLI is the single door into the whole factory (top-level commands):
|
|
|
284
284
|
`handsfree` (`hf`), `challenge`, `sandbox`, `react`, `ideate`, `coord`, `agent`,
|
|
285
285
|
`deploy`, `task`, `compliance`, `coordination`, `skill`, `update`,
|
|
286
286
|
`dashboard` (alias `dash`), `model`, `mcp-router`, `hooks`, `tool-calls`,
|
|
287
|
-
`
|
|
287
|
+
`mcp-setup`, `schema-diff`, `policy`, `uap-omp`. See
|
|
288
288
|
[CLI reference](CLI.md) for every command and flag.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Pattern Library Reference
|
|
2
2
|
|
|
3
|
-
> Universal Agent Protocol (UAP) v1.
|
|
3
|
+
> Universal Agent Protocol (UAP) v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Prep / Routing — before your agent starts cutting, it
|
|
6
6
|
> should pick the right technique for the job. **What it delivers:** the right
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Platform & Harness Reference
|
|
2
2
|
|
|
3
|
-
> Universal Agent Protocol (UAP) v1.
|
|
3
|
+
> Universal Agent Protocol (UAP) v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Cross-cutting — the same line, whichever floor you work
|
|
6
6
|
> on. **What it delivers:** every station of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)
|