@miller-tech/uap 1.163.13 → 1.164.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.
Files changed (108) hide show
  1. package/README.md +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/bin/cli.js +5 -4
  4. package/dist/bin/cli.js.map +1 -1
  5. package/dist/cli/deliver.d.ts +5 -3
  6. package/dist/cli/deliver.d.ts.map +1 -1
  7. package/dist/cli/deliver.js +95 -19
  8. package/dist/cli/deliver.js.map +1 -1
  9. package/dist/cli/guided-setup.d.ts.map +1 -1
  10. package/dist/cli/guided-setup.js +13 -1
  11. package/dist/cli/guided-setup.js.map +1 -1
  12. package/dist/cli/model.d.ts.map +1 -1
  13. package/dist/cli/model.js +9 -1
  14. package/dist/cli/model.js.map +1 -1
  15. package/dist/cli/proxy-lifecycle.d.ts +66 -13
  16. package/dist/cli/proxy-lifecycle.d.ts.map +1 -1
  17. package/dist/cli/proxy-lifecycle.js +116 -49
  18. package/dist/cli/proxy-lifecycle.js.map +1 -1
  19. package/dist/cli/proxy.d.ts +46 -0
  20. package/dist/cli/proxy.d.ts.map +1 -1
  21. package/dist/cli/proxy.js +353 -23
  22. package/dist/cli/proxy.js.map +1 -1
  23. package/dist/cli/wizard-config.d.ts +4 -0
  24. package/dist/cli/wizard-config.d.ts.map +1 -1
  25. package/dist/cli/wizard-config.js +14 -3
  26. package/dist/cli/wizard-config.js.map +1 -1
  27. package/dist/config/settings-registry.d.ts.map +1 -1
  28. package/dist/config/settings-registry.js +25 -0
  29. package/dist/config/settings-registry.js.map +1 -1
  30. package/dist/coordination/effort-profile.d.ts +39 -0
  31. package/dist/coordination/effort-profile.d.ts.map +1 -0
  32. package/dist/coordination/effort-profile.js +74 -0
  33. package/dist/coordination/effort-profile.js.map +1 -0
  34. package/dist/dashboard/server.d.ts.map +1 -1
  35. package/dist/dashboard/server.js +68 -10
  36. package/dist/dashboard/server.js.map +1 -1
  37. package/dist/delivery/convergence-loop.d.ts +37 -0
  38. package/dist/delivery/convergence-loop.d.ts.map +1 -1
  39. package/dist/delivery/convergence-loop.js +51 -4
  40. package/dist/delivery/convergence-loop.js.map +1 -1
  41. package/dist/delivery/critic.d.ts +7 -0
  42. package/dist/delivery/critic.d.ts.map +1 -1
  43. package/dist/delivery/critic.js.map +1 -1
  44. package/dist/delivery/decompose.d.ts +9 -0
  45. package/dist/delivery/decompose.d.ts.map +1 -1
  46. package/dist/delivery/decompose.js +11 -0
  47. package/dist/delivery/decompose.js.map +1 -1
  48. package/dist/delivery/graph-safety.d.ts +75 -0
  49. package/dist/delivery/graph-safety.d.ts.map +1 -0
  50. package/dist/delivery/graph-safety.js +98 -0
  51. package/dist/delivery/graph-safety.js.map +1 -0
  52. package/dist/delivery/per-phase-escalation-controller.d.ts +37 -0
  53. package/dist/delivery/per-phase-escalation-controller.d.ts.map +1 -0
  54. package/dist/delivery/per-phase-escalation-controller.js +68 -0
  55. package/dist/delivery/per-phase-escalation-controller.js.map +1 -0
  56. package/dist/delivery/per-phase-escalation.d.ts +53 -0
  57. package/dist/delivery/per-phase-escalation.d.ts.map +1 -0
  58. package/dist/delivery/per-phase-escalation.js +57 -0
  59. package/dist/delivery/per-phase-escalation.js.map +1 -0
  60. package/dist/delivery/reflect.d.ts +56 -0
  61. package/dist/delivery/reflect.d.ts.map +1 -0
  62. package/dist/delivery/reflect.js +79 -0
  63. package/dist/delivery/reflect.js.map +1 -0
  64. package/dist/delivery/verification-provenance.d.ts +47 -0
  65. package/dist/delivery/verification-provenance.d.ts.map +1 -0
  66. package/dist/delivery/verification-provenance.js +48 -0
  67. package/dist/delivery/verification-provenance.js.map +1 -0
  68. package/dist/models/complexity.d.ts +36 -0
  69. package/dist/models/complexity.d.ts.map +1 -0
  70. package/dist/models/complexity.js +75 -0
  71. package/dist/models/complexity.js.map +1 -0
  72. package/dist/models/router.d.ts.map +1 -1
  73. package/dist/models/router.js +39 -10
  74. package/dist/models/router.js.map +1 -1
  75. package/dist/models/types.d.ts +60 -10
  76. package/dist/models/types.d.ts.map +1 -1
  77. package/dist/models/types.js +128 -11
  78. package/dist/models/types.js.map +1 -1
  79. package/dist/self-tuning/prompt-variants.d.ts +93 -0
  80. package/dist/self-tuning/prompt-variants.d.ts.map +1 -0
  81. package/dist/self-tuning/prompt-variants.js +143 -0
  82. package/dist/self-tuning/prompt-variants.js.map +1 -0
  83. package/dist/tasks/types.d.ts +2 -2
  84. package/dist/types/config.d.ts +8 -0
  85. package/dist/types/config.d.ts.map +1 -1
  86. package/docs/INDEX.md +1 -1
  87. package/docs/benchmarks/COMPREHENSIVE_BENCHMARKS.md +47 -53
  88. package/docs/benchmarks/VALIDATION_RESULTS.md +0 -2
  89. package/docs/guides/COORDINATION.md +1 -1
  90. package/docs/guides/DEPLOY_BATCHING.md +1 -1
  91. package/docs/guides/DROIDS_AND_SKILLS.md +1 -1
  92. package/docs/guides/LOCAL_MODELS.md +1 -1
  93. package/docs/guides/MCP_ROUTER.md +1 -1
  94. package/docs/guides/MEMORY.md +2 -2
  95. package/docs/guides/MULTI_MODEL.md +1 -1
  96. package/docs/guides/POLICIES.md +1 -1
  97. package/docs/guides/PROXY.md +47 -4
  98. package/docs/guides/SANDBOX.md +1 -1
  99. package/docs/guides/WORKTREE_WORKFLOW.md +1 -1
  100. package/docs/reference/CLI.md +16 -3
  101. package/docs/reference/CONFIGURATION.md +1 -1
  102. package/docs/reference/FEATURES.md +1 -1
  103. package/package.json +1 -1
  104. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  105. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  106. package/templates/hooks/session-end.sh +9 -0
  107. package/templates/hooks/session-start.sh +10 -0
  108. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
@@ -1,6 +1,6 @@
1
1
  # Droids and Skills
2
2
 
3
- > Applies to UAP **v1.93.1**
3
+ > Applies to UAP **v1.163**
4
4
 
5
5
  > **🏭 Where this fits:** PREP/ROUTING — this is the station where a
6
6
  > generalist agent takes the wrong approach on specialist work: reviewing
@@ -1,6 +1,6 @@
1
1
  # Running UAP Against Local Models
2
2
 
3
- > UAP v1.93.1
3
+ > UAP v1.163
4
4
 
5
5
  > **🏭 Where this fits:** BUILD — this is the station where a cheap local model
6
6
  > flails: plausible-but-wrong code, empty output, or a loop that never lands a
@@ -1,6 +1,6 @@
1
1
  # MCP Router
2
2
 
3
- > UAP v1.93.1
3
+ > UAP v1.163
4
4
 
5
5
  > **🏭 Where this fits:** CROSS-CUTTING — keeping the context window lean at every station of the [delivery pipeline](./DELIVERY_PIPELINE.md). In a normal agentic workflow every tool call dumps its full result into context, so mostly-irrelevant output crowds out the details your agent actually needs. **What it delivers:** a proxy that compresses tool output before it reaches the model — up to 98% fewer tokens on large results — so the agent keeps room for real work and you spend less per session.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Memory System
2
2
 
3
- > UAP v1.93.1
3
+ > UAP v1.163
4
4
 
5
5
  > **🏭 Where this fits:** INTAKE + FEEDBACK — the front and back doors of the [delivery pipeline](./DELIVERY_PIPELINE.md). At intake, a fresh agent forgets everything the last session learned and re-hallucinates scope; at feedback, nobody records the lesson, so the same mistake ships again next week. **What it delivers:** a persistent, searchable memory that hands each new agent the relevant past learnings on the way in, and captures durable lessons on the way out — so your team of agents gets smarter every run instead of starting from zero.
6
6
 
@@ -199,7 +199,7 @@ uap memory correct <search> [options]
199
199
  ```bash
200
200
  uap memory correct "uses pgvector" \
201
201
  --correction "uses Qdrant for semantic recall" \
202
- --reason "migrated in v1.26"
202
+ --reason "superseded by newer approach"
203
203
  ```
204
204
 
205
205
  ### Maintain
@@ -1,6 +1,6 @@
1
1
  # Multi-Model Routing
2
2
 
3
- > Applies to UAP **v1.93.1**
3
+ > Applies to UAP **v1.163**
4
4
 
5
5
  > **🏭 Where this fits:** PREP/ROUTING — this is the station where a normal
6
6
  > agentic workflow sends *everything* to one model: paying premium-model rates
@@ -1,6 +1,6 @@
1
1
  # Policies
2
2
 
3
- > Applies to UAP v1.93.1
3
+ > Applies to UAP v1.163
4
4
 
5
5
  > **🏭 Where this fits:** CROSS-CUTTING — the executable rules bolted to every station of the [delivery pipeline](./DELIVERY_PIPELINE.md). In a normal agentic workflow the "rules" live in a prose prompt the model is free to ignore; that's how work escapes isolation, skips tests, or ships without review. **What it delivers:** each rule is a Python enforcer that actually inspects an operation and can *block* it before it runs — worktree isolation, test deltas, expert review, schema diffs, artifact hygiene, and more — so the guardrails hold instead of merely being suggested.
6
6
 
@@ -51,16 +51,17 @@ the last session leaves — but it **never** kills a proxy that systemd manages
51
51
  that other sessions are still using.
52
52
 
53
53
  ```
54
- uap proxy [ensure | release | status | start | stop | restart | enable | disable]
54
+ uap proxy [ensure | release | status | start | stop | restart | enable | disable | dashboard [on|off]]
55
55
  ```
56
56
 
57
57
  | Subcommand | What it does |
58
58
  |---|---|
59
- | `ensure` | Start the proxy if none is running, or **adopt** a running one; register this session as a client |
60
- | `release` | Deregister this session; stop the proxy **only if** we spawned it as a plain process and no other client remains |
61
- | `status` | Report whether it's running, how (systemd vs spawned), the port, and client count (`--json` for machine-readable) |
59
+ | `ensure` | Start the proxy if none is running, or **adopt** a running one; register this session as a client; start-or-adopt the dashboard |
60
+ | `release` | Deregister this session; stop the proxy (and dashboard) **only if** we spawned it as a plain process and no other client remains |
61
+ | `status` | Report whether the proxy and dashboard are running, how (systemd vs spawned), ports, URL, and client count (`--json` for machine-readable) |
62
62
  | `start` / `stop` / `restart` | Explicit control (e.g. `restart` after changing `PROXY_*` in `.uap/proxy.env`) |
63
63
  | `enable` / `disable` | Toggle `.uap.json` `proxy.autostart` so hooks auto-start it (or not) |
64
+ | `dashboard [on\|off]` | Show or toggle the ride-along dashboard (`.uap.json` `proxy.dashboard`) |
64
65
 
65
66
  | Flag | Purpose |
66
67
  |---|---|
@@ -68,8 +69,50 @@ uap proxy [ensure | release | status | start | stop | restart | enable | disable
68
69
  | `--client-pid <n>` | Long-lived agent pid for liveness (hooks pass `$PPID`) |
69
70
  | `--port <n>` | Proxy port (default `4000` / `$PROXY_PORT`) |
70
71
  | `--if-enabled` | No-op unless `.uap.json` `proxy.autostart` is `true` (hook-safe) |
72
+ | `--no-dashboard` | Don't *start* the ride-along dashboard on this `ensure`/`start` (teardown still reaps a dashboard we own) |
71
73
  | `--quiet` / `--json` | Suppress output (hooks) / machine-readable status |
72
74
 
75
+ ### Ride-along dashboard
76
+
77
+ **The operational dashboard starts with the proxy** — no second command. `ensure`
78
+ and `start` also start-or-adopt `uap dashboard serve` (default
79
+ <http://localhost:3847>), concurrently with the proxy so session start isn't
80
+ serialized behind two health waits. Teardown follows ownership: a dashboard **we**
81
+ spawned stops when the last client leaves (`release`) or immediately on an
82
+ explicit `stop`; one you started yourself is adopted and **never** stopped. If a
83
+ foreign process holds the port, UAP declines to spawn (fast, no stall) and tells
84
+ you to run `uap dash serve` manually.
85
+
86
+ | Setting | Where | Default |
87
+ |---|---|---|
88
+ | enabled | `.uap.json` `proxy.dashboard` (bool or `{enabled, port, host}`) / `UAP_PROXY_DASHBOARD=0\|1` | on |
89
+ | port | `proxy.dashboard.port` / `UAP_DASH_PORT` | `3847` |
90
+ | host | `proxy.dashboard.host` / `UAP_DASH_HOST` | `localhost` |
91
+ | startup wait | `UAP_DASH_HEALTH_WAIT_MS` | `10000` |
92
+
93
+ Env wins over config. These govern the **ride-along** only — `uap dash serve`
94
+ still takes its own `--port`/`--host`.
95
+
96
+ **Identification.** Liveness is `GET /health`, which returns
97
+ `{"ok":true,"service":"uap-dashboard","port":…,"root":"<project dir>"}`. UAP adopts
98
+ a dashboard only when that marker is present *and* `root` matches the current
99
+ project — a dashboard is per-project (every panel reads its own working
100
+ directory), even though the proxy client registry is per-user. A dashboard from an
101
+ older UAP has no `/health`; it is recognised by its `UAP Dashboard` page title and
102
+ adopted as-is, since it cannot state which project it serves.
103
+
104
+ ```bash
105
+ uap proxy dashboard # is it on, and where?
106
+ uap proxy dashboard off # opt this project out
107
+ uap proxy start --no-dashboard
108
+ ```
109
+
110
+ **Security note.** Because the dashboard is now up for the whole session rather
111
+ than only while you run it by hand, the page carrying the policy-mutation token is
112
+ served same-origin only, WebSocket upgrades require a same-origin `Origin`, and the
113
+ token is not echoed into the ride-along log. Binding beyond loopback
114
+ (`UAP_DASH_HOST`) is reported with a warning — set `UAP_DASHBOARD_TOKEN` if you do.
115
+
73
116
  **How it's managed.** When available, the proxy runs as the systemd unit
74
117
  `uap-anthropic-proxy.service`, reading its environment from
75
118
  `~/.config/uap/anthropic-proxy.env`; a plain spawned proxy seeds the same file
@@ -65,7 +65,7 @@ it and calls `_strip_sandbox_unreachable_tools` (`anthropic_proxy.py:4393`), rem
65
65
  tool whose name starts with a prefix in `PROXY_SANDBOX_UNREACHABLE_PREFIXES` (default
66
66
  `mcp__claude-in-chrome__`). The model never sees the unreachable browser tools and falls
67
67
  back to `WebFetch` / local reads instead. (This is the "strip unreachable browser MCP tools
68
- from sandboxed sessions" change from v1.63.0.)
68
+ from sandboxed sessions" behavior.)
69
69
 
70
70
  ## Escape hatches (operator-only)
71
71
 
@@ -1,6 +1,6 @@
1
1
  # Worktree Workflow
2
2
 
3
- > Applies to UAP v1.93.1
3
+ > Applies to UAP v1.163
4
4
 
5
5
  > **🏭 Where this fits:** ISOLATION — the station where a normal agentic workflow smears half-finished edits across `main`, clobbers files, and lets parallel agents collide into corrupt merge state. **What it delivers:** every agent works on its own branch in its own checkout, so the project root stays clean, each unit of work has a tidy PR boundary, and any number of agents can run at once without stepping on each other.
6
6
 
@@ -126,7 +126,7 @@ uap setup [options]
126
126
  | `--no-self-update` | Skip the automatic UAP CLI version check / self-update (also `UAP_NO_SELF_UPDATE=1`) |
127
127
  | `--systemd-services` | Scaffold user systemd services for llama.cpp + anthropic proxy |
128
128
  | `-d, --project-dir <path>` | Target project directory (defaults to cwd) |
129
- | `-i, --interactive` | Run the guided wizard (now the default; kept for back-compat) |
129
+ | `-i, --interactive` | Run the guided wizard (the default) |
130
130
 
131
131
  The guided wizard (default) prompts for harnesses, memory tiers, coordination,
132
132
  patterns, policies, model provider/profile, hooks, and browser — with smart
@@ -534,7 +534,18 @@ Anthropic-compatible gateway in front of a local llama.cpp/Qwen). Hooks
534
534
  session leaves — but it never kills a proxy that systemd manages or that other
535
535
  sessions still use.
536
536
 
537
- `uap proxy [ensure | release | status | start | stop | restart | enable | disable]`
537
+ `uap proxy [ensure | release | status | start | stop | restart | enable | disable | dashboard [on|off]]`
538
+
539
+ The **operational dashboard rides along**: `ensure`/`start` also start-or-adopt
540
+ `uap dashboard serve` (default <http://localhost:3847>), so monitoring never needs
541
+ a second command. `release` stops it when the last client leaves; `stop` shuts it
542
+ down immediately (ownership only — it does not consult the client count). A
543
+ dashboard you started yourself, or one serving a different project, is never
544
+ touched. Opt out per project with `uap proxy dashboard off`, per `ensure`/`start`
545
+ with `--no-dashboard`, or globally with `UAP_PROXY_DASHBOARD=0`.
546
+ Ports/hosts: `UAP_DASH_PORT` (3847), `UAP_DASH_HOST` (localhost),
547
+ `UAP_DASH_HEALTH_WAIT_MS` (10000) — these govern the ride-along, not
548
+ `uap dash serve`.
538
549
 
539
550
  | Flag | Purpose |
540
551
  |------|---------|
@@ -542,11 +553,13 @@ sessions still use.
542
553
  | `--client-pid <n>` | Long-lived agent pid for liveness (hooks pass `$PPID`) |
543
554
  | `--port <n>` | Proxy port (default 4000 / `$PROXY_PORT`) |
544
555
  | `--if-enabled` | No-op unless `.uap.json` `proxy.autostart` is true (hook-safe) |
556
+ | `--no-dashboard` | Don't start the ride-along dashboard on this `ensure`/`start` |
545
557
  | `--quiet` / `--json` | Suppress output (hooks) / machine-readable status |
546
558
 
547
559
  ```bash
548
- uap proxy status --json
560
+ uap proxy status --json # includes a `dashboard` block (port, url, healthy, owner)
549
561
  uap proxy restart # e.g. after changing PROXY_* in .uap/proxy.env
562
+ uap proxy dashboard off # opt out of the ride-along dashboard
550
563
  ```
551
564
 
552
565
  The proxy binds `127.0.0.1` by default; see the proxy `PROXY_*` settings in the
@@ -1,6 +1,6 @@
1
1
  # Configuration Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.93.1
3
+ > Universal Agent Protocol (UAP) v1.163
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)
@@ -1,6 +1,6 @@
1
1
  # Feature Catalog
2
2
 
3
- > Universal Agent Protocol (UAP) v1.93.1
3
+ > Universal Agent Protocol (UAP) v1.163
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miller-tech/uap",
3
- "version": "1.163.13",
3
+ "version": "1.164.0",
4
4
  "description": "Autonomous AI agent memory system with CLAUDE.md protocol enforcement",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -58,4 +58,13 @@ if [ -d "$BACKUP_DIR" ]; then
58
58
  find "$BACKUP_DIR" -maxdepth 1 -mindepth 1 -type d -mtime +7 -exec rm -rf {} \; 2>/dev/null || true
59
59
  fi
60
60
 
61
+ # Session-scoped proxy + dashboard release: stop them ONLY if THIS session
62
+ # started them and no other client remains (adopted/externally-managed services
63
+ # are never killed; other active clients keep them alive). Fail-open; never
64
+ # blocks exit.
65
+ if command -v uap >/dev/null 2>&1; then
66
+ _uap_pc="${CLAUDE_SESSION_ID:-${FACTORY_SESSION_ID:-${CURSOR_SESSION_ID:-${UAP_SESSION_ID:-ppid-$PPID}}}}"
67
+ ( cd "$PROJECT_DIR" 2>/dev/null && timeout 20 uap proxy release --if-enabled --quiet --client "$_uap_pc" --client-pid "$PPID" ) >/dev/null 2>&1 || true
68
+ fi
69
+
61
70
  exit 0
@@ -250,6 +250,16 @@ if command -v uap >/dev/null 2>&1; then
250
250
  fi
251
251
  fi
252
252
 
253
+ # Session-scoped proxy autostart (opt-in via .uap.json proxy.autostart). Starts
254
+ # the proxy if none is running, or ADOPTS an already-running one, and brings the
255
+ # operational dashboard up with it (http://localhost:3847 — opt out with
256
+ # `uap proxy dashboard off`). Reference-counted: released only when the last
257
+ # client leaves. Fail-open, never blocks.
258
+ if command -v uap >/dev/null 2>&1; then
259
+ _uap_pc="${CLAUDE_SESSION_ID:-${FACTORY_SESSION_ID:-${CURSOR_SESSION_ID:-${UAP_SESSION_ID:-ppid-$PPID}}}}"
260
+ ( cd "$PROJECT_DIR" 2>/dev/null && timeout 30 uap proxy ensure --if-enabled --quiet --client "$_uap_pc" --client-pid "$PPID" ) >/dev/null 2>&1 || true
261
+ fi
262
+
253
263
  if [ -n "$output" ]; then
254
264
  echo "$output"
255
265
  fi