@miller-tech/uap 1.163.13 → 1.165.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 (142) 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/browser/web-browser.d.ts +7 -0
  6. package/dist/browser/web-browser.d.ts.map +1 -1
  7. package/dist/browser/web-browser.js +15 -0
  8. package/dist/browser/web-browser.js.map +1 -1
  9. package/dist/cli/deliver.d.ts +32 -3
  10. package/dist/cli/deliver.d.ts.map +1 -1
  11. package/dist/cli/deliver.js +198 -31
  12. package/dist/cli/deliver.js.map +1 -1
  13. package/dist/cli/guided-setup.d.ts.map +1 -1
  14. package/dist/cli/guided-setup.js +13 -1
  15. package/dist/cli/guided-setup.js.map +1 -1
  16. package/dist/cli/model.d.ts.map +1 -1
  17. package/dist/cli/model.js +9 -1
  18. package/dist/cli/model.js.map +1 -1
  19. package/dist/cli/proxy-lifecycle.d.ts +66 -13
  20. package/dist/cli/proxy-lifecycle.d.ts.map +1 -1
  21. package/dist/cli/proxy-lifecycle.js +116 -49
  22. package/dist/cli/proxy-lifecycle.js.map +1 -1
  23. package/dist/cli/proxy.d.ts +46 -0
  24. package/dist/cli/proxy.d.ts.map +1 -1
  25. package/dist/cli/proxy.js +353 -23
  26. package/dist/cli/proxy.js.map +1 -1
  27. package/dist/cli/verify.d.ts +6 -0
  28. package/dist/cli/verify.d.ts.map +1 -1
  29. package/dist/cli/verify.js +64 -0
  30. package/dist/cli/verify.js.map +1 -1
  31. package/dist/cli/wizard-config.d.ts +4 -0
  32. package/dist/cli/wizard-config.d.ts.map +1 -1
  33. package/dist/cli/wizard-config.js +14 -3
  34. package/dist/cli/wizard-config.js.map +1 -1
  35. package/dist/config/settings-registry.d.ts.map +1 -1
  36. package/dist/config/settings-registry.js +25 -0
  37. package/dist/config/settings-registry.js.map +1 -1
  38. package/dist/coordination/effort-profile.d.ts +39 -0
  39. package/dist/coordination/effort-profile.d.ts.map +1 -0
  40. package/dist/coordination/effort-profile.js +74 -0
  41. package/dist/coordination/effort-profile.js.map +1 -0
  42. package/dist/dashboard/server.d.ts.map +1 -1
  43. package/dist/dashboard/server.js +68 -10
  44. package/dist/dashboard/server.js.map +1 -1
  45. package/dist/delivery/agentic-executor.d.ts +15 -0
  46. package/dist/delivery/agentic-executor.d.ts.map +1 -1
  47. package/dist/delivery/agentic-executor.js +64 -3
  48. package/dist/delivery/agentic-executor.js.map +1 -1
  49. package/dist/delivery/convergence-loop.d.ts +76 -1
  50. package/dist/delivery/convergence-loop.d.ts.map +1 -1
  51. package/dist/delivery/convergence-loop.js +71 -6
  52. package/dist/delivery/convergence-loop.js.map +1 -1
  53. package/dist/delivery/critic.d.ts +7 -0
  54. package/dist/delivery/critic.d.ts.map +1 -1
  55. package/dist/delivery/critic.js.map +1 -1
  56. package/dist/delivery/decompose.d.ts +9 -0
  57. package/dist/delivery/decompose.d.ts.map +1 -1
  58. package/dist/delivery/decompose.js +11 -0
  59. package/dist/delivery/decompose.js.map +1 -1
  60. package/dist/delivery/execution-gate.d.ts +4 -0
  61. package/dist/delivery/execution-gate.d.ts.map +1 -1
  62. package/dist/delivery/execution-gate.js +194 -2
  63. package/dist/delivery/execution-gate.js.map +1 -1
  64. package/dist/delivery/graph-safety.d.ts +75 -0
  65. package/dist/delivery/graph-safety.d.ts.map +1 -0
  66. package/dist/delivery/graph-safety.js +98 -0
  67. package/dist/delivery/graph-safety.js.map +1 -0
  68. package/dist/delivery/mission-acceptance.d.ts.map +1 -1
  69. package/dist/delivery/mission-acceptance.js +69 -21
  70. package/dist/delivery/mission-acceptance.js.map +1 -1
  71. package/dist/delivery/per-phase-escalation-controller.d.ts +37 -0
  72. package/dist/delivery/per-phase-escalation-controller.d.ts.map +1 -0
  73. package/dist/delivery/per-phase-escalation-controller.js +68 -0
  74. package/dist/delivery/per-phase-escalation-controller.js.map +1 -0
  75. package/dist/delivery/per-phase-escalation.d.ts +53 -0
  76. package/dist/delivery/per-phase-escalation.d.ts.map +1 -0
  77. package/dist/delivery/per-phase-escalation.js +57 -0
  78. package/dist/delivery/per-phase-escalation.js.map +1 -0
  79. package/dist/delivery/reflect.d.ts +56 -0
  80. package/dist/delivery/reflect.d.ts.map +1 -0
  81. package/dist/delivery/reflect.js +79 -0
  82. package/dist/delivery/reflect.js.map +1 -0
  83. package/dist/delivery/user-paths.d.ts +42 -0
  84. package/dist/delivery/user-paths.d.ts.map +1 -1
  85. package/dist/delivery/user-paths.js +254 -6
  86. package/dist/delivery/user-paths.js.map +1 -1
  87. package/dist/delivery/user-validation.d.ts.map +1 -1
  88. package/dist/delivery/user-validation.js +21 -1
  89. package/dist/delivery/user-validation.js.map +1 -1
  90. package/dist/delivery/verification-provenance.d.ts +47 -0
  91. package/dist/delivery/verification-provenance.d.ts.map +1 -0
  92. package/dist/delivery/verification-provenance.js +48 -0
  93. package/dist/delivery/verification-provenance.js.map +1 -0
  94. package/dist/delivery/vision-judge.d.ts.map +1 -1
  95. package/dist/delivery/vision-judge.js +8 -1
  96. package/dist/delivery/vision-judge.js.map +1 -1
  97. package/dist/models/complexity.d.ts +36 -0
  98. package/dist/models/complexity.d.ts.map +1 -0
  99. package/dist/models/complexity.js +75 -0
  100. package/dist/models/complexity.js.map +1 -0
  101. package/dist/models/openai-compat-client.d.ts +26 -0
  102. package/dist/models/openai-compat-client.d.ts.map +1 -1
  103. package/dist/models/openai-compat-client.js +60 -8
  104. package/dist/models/openai-compat-client.js.map +1 -1
  105. package/dist/models/router.d.ts.map +1 -1
  106. package/dist/models/router.js +39 -10
  107. package/dist/models/router.js.map +1 -1
  108. package/dist/models/types.d.ts +60 -10
  109. package/dist/models/types.d.ts.map +1 -1
  110. package/dist/models/types.js +128 -11
  111. package/dist/models/types.js.map +1 -1
  112. package/dist/self-tuning/prompt-variants.d.ts +93 -0
  113. package/dist/self-tuning/prompt-variants.d.ts.map +1 -0
  114. package/dist/self-tuning/prompt-variants.js +143 -0
  115. package/dist/self-tuning/prompt-variants.js.map +1 -0
  116. package/dist/tasks/types.d.ts +2 -2
  117. package/dist/types/config.d.ts +8 -0
  118. package/dist/types/config.d.ts.map +1 -1
  119. package/docs/INDEX.md +1 -1
  120. package/docs/benchmarks/COMPREHENSIVE_BENCHMARKS.md +47 -53
  121. package/docs/benchmarks/VALIDATION_RESULTS.md +0 -2
  122. package/docs/guides/COORDINATION.md +1 -1
  123. package/docs/guides/DEPLOY_BATCHING.md +1 -1
  124. package/docs/guides/DROIDS_AND_SKILLS.md +3 -2
  125. package/docs/guides/LOCAL_MODELS.md +1 -1
  126. package/docs/guides/MCP_ROUTER.md +1 -1
  127. package/docs/guides/MEMORY.md +2 -2
  128. package/docs/guides/MULTI_MODEL.md +1 -1
  129. package/docs/guides/POLICIES.md +1 -1
  130. package/docs/guides/PROXY.md +47 -4
  131. package/docs/guides/SANDBOX.md +1 -1
  132. package/docs/guides/WORKTREE_WORKFLOW.md +1 -1
  133. package/docs/reference/CLI.md +16 -3
  134. package/docs/reference/CONFIGURATION.md +1 -1
  135. package/docs/reference/FEATURES.md +1 -1
  136. package/package.json +1 -1
  137. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  138. package/src/policies/enforcers/iac_plan_destruction_check.py +32 -4
  139. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  140. package/templates/hooks/session-end.sh +9 -0
  141. package/templates/hooks/session-start.sh +10 -0
  142. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
@@ -50,6 +50,28 @@ def branch_touches_iac() -> bool:
50
50
  return rc == 0 and "infra/terraform/" in out
51
51
 
52
52
 
53
+ def repo_selector(cmd: str) -> list[str]:
54
+ """The `--repo` args to reuse when looking up the PR, mirroring whatever
55
+ repo the merge command itself targets.
56
+
57
+ `gh pr merge <N> --repo owner/name` merges in THAT repo, but a bare
58
+ `gh pr view <N>` resolves against the local checkout. Without mirroring the
59
+ selector, a cross-repo merge looks the number up in the wrong repo; that
60
+ miss then falls back to branch_touches_iac(), which scans a local tree with
61
+ nothing to do with the PR — so an unrelated untracked infra/terraform tf
62
+ file in the current checkout blocks a merge that touches no infrastructure
63
+ at all. Observed blocking every cross-repo merge from pay2u.
64
+ """
65
+ m = re.search(r"(?:--repo|-R)[=\s]+([\w.-]+/[\w.-]+)", cmd)
66
+ if m:
67
+ return ["--repo", m.group(1)]
68
+ # A `gh api` merge call carries owner/name in its path instead of a flag.
69
+ m = re.search(r"repos/([\w.-]+/[\w.-]+)/pulls/\d+/merge", cmd)
70
+ if m:
71
+ return ["--repo", m.group(1)]
72
+ return []
73
+
74
+
53
75
  def merge_touches_iac(cmd: str) -> bool:
54
76
  """Decide whether a `gh pr merge`/`gh api .../merge` command touches IaC by
55
77
  inspecting the FILES OF THE PR BEING MERGED — not the local working tree.
@@ -61,13 +83,16 @@ def merge_touches_iac(cmd: str) -> bool:
61
83
  own file list instead, and only fall back to the local check when no PR
62
84
  number can be parsed or the lookup fails.
63
85
  """
64
- m = re.search(r"gh\s+pr\s+merge\s+(\d+)", cmd) or re.search(r"/pulls/(\d+)/merge", cmd)
86
+ m = re.search(r"gh\s+pr\s+merge\s+(\d+)", cmd, re.I) or re.search(
87
+ r"/pulls/(\d+)/merge", cmd
88
+ )
65
89
  if not m:
66
90
  # e.g. `gh pr merge` on the current branch with no number — use local diff.
67
91
  return branch_touches_iac()
68
92
  pr = m.group(1)
69
93
  rc, out, _ = run(
70
- ["gh", "pr", "view", pr, "--json", "files", "-q", ".files[].path"], timeout=20
94
+ ["gh", "pr", "view", pr, *repo_selector(cmd), "--json", "files", "-q", ".files[].path"],
95
+ timeout=20,
71
96
  )
72
97
  if rc != 0:
73
98
  # Lookup failed (offline / auth) — fail safe by keeping the gate on.
@@ -91,7 +116,10 @@ def main() -> None:
91
116
  op, args = parse_cli()
92
117
  if op not in ("Bash", "bash"):
93
118
  emit(True, "not a bash op")
94
- cmd = (args.get("command") or "").lower()
119
+ raw_cmd = args.get("command") or ""
120
+ # Markers are matched case-insensitively, but repo_selector() needs the
121
+ # original case of an owner/name argument — so keep both forms.
122
+ cmd = raw_cmd.lower()
95
123
 
96
124
  is_tf_apply = any(m in cmd for m in APPLY_MARKERS)
97
125
  is_wf_apply = any(m in cmd for m in WORKFLOW_APPLY) and "iac-terraform" in cmd and "apply" in cmd
@@ -104,7 +132,7 @@ def main() -> None:
104
132
  # Merges/pushes only gated when IaC is actually touched. For `gh pr merge`
105
133
  # inspect the PR's own files; for local pushes use the working-tree diff.
106
134
  if (is_merge or is_push_main) and not (is_tf_apply or is_wf_apply):
107
- touches = merge_touches_iac(cmd) if is_merge else branch_touches_iac()
135
+ touches = merge_touches_iac(raw_cmd) if is_merge else branch_touches_iac()
108
136
  if not touches:
109
137
  emit(True, "merge/push does not touch infra/terraform")
110
138
 
@@ -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