ur-agent 1.73.0 → 1.74.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/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 1.73.0
3
+ ## 1.74.0
4
4
 
5
5
  - Provider API key entry no longer renders one character per line. The field in
6
6
  the provider picker omitted `columns`, `cursorOffset` and
@@ -30,6 +30,62 @@
30
30
  entries (four choices plus "Other") pushed the tail below the footer divider
31
31
  and read as a detached second group. The list is now sized to the terminal
32
32
  and only windows when the height genuinely cannot fit it.
33
+ - Cached and reasoning tokens are no longer discarded, and the cached prefix is
34
+ no longer counted twice. OpenAI-shaped providers report `prompt_tokens` as
35
+ the whole input including `prompt_tokens_details.cached_tokens`, while the
36
+ internal counters are disjoint and summed for the context total. Every
37
+ provider adapter now goes through one normalisation pass that partitions the
38
+ counters correctly and carries `reasoning_tokens` separately, since it is
39
+ already inside `completion_tokens`.
40
+ - OpenRouter turns report usage at all. OpenRouter returns no usage block
41
+ unless `usage: { include: true }` is sent, which it never was — the direct
42
+ cause of "0 tokens" on that provider.
43
+ - Model lists carry the metadata the provider actually returns. The id-only
44
+ mapping discarded the human name, context length and pricing, so OpenRouter's
45
+ rotating free tier was invisible. Free models are detected from pricing
46
+ (falling back to the `:free` suffix), listed first, and deprecated entries
47
+ listed last. Concurrent discovery requests for the same provider now share
48
+ one call, a stale cache reports its age instead of being shown as current,
49
+ and ctrl+r re-runs discovery from the picker.
50
+ - Tool schemas no longer forward `$schema`, `$defs`/`$ref`, or vendor keys
51
+ nested below the root. A recursive tool schema emitted `{"$ref": "#"}`, which
52
+ Gemini cannot express and non-OpenAI compatible servers frequently fail to
53
+ resolve; references are inlined instead. Gemini receives a narrowed dialect
54
+ with its unsupported keywords removed and `anyOf: [T, null]` folded into
55
+ `nullable`. Prepared schemas are validated before sending, so a malformed one
56
+ fails with a specific message instead of being retried unchanged.
57
+ - Bash reports the command's own exit code and always records its working
58
+ directory. The `pwd -P` capture was chained after the command with `&&`, so
59
+ it never ran when the command failed (losing a preceding `cd`), its own
60
+ failure masked a successful command as failed when the command removed its
61
+ working directory, and a command containing `exit` terminated the shell
62
+ before the capture ran. The capture now runs from an `EXIT` trap.
63
+ - A streaming provider that goes silent mid-response now fails with a stated
64
+ reason. The total-request timeout is cleared once headers arrive, which for a
65
+ streaming request left no timeout at all — the stream stayed open and the UI
66
+ showed work in progress indefinitely. An inactivity watchdog aborts after a
67
+ gap between chunks; a long stream that keeps producing is never interrupted.
68
+ - AskUserQuestion repairs duplicate questions and option labels instead of
69
+ rejecting them. The uniqueness rule failed the whole call, so a recoverable
70
+ formatting slip cost a round trip and showed the user nothing.
71
+ - The question view no longer rules a line between the choices and the
72
+ numbered actions below them. The footer entries continue the same numbering
73
+ as the choices ("1..N" choices, then "N+1 Chat about this"), so a full-width
74
+ divider cut them off from the list they belong to and they read as a detached
75
+ second group. The duplicate rule above the planning path is gone too.
76
+ - `TaskUpdate` no longer fails an entire call because one dependency points at
77
+ its own task. A self-edge carries no ordering information, so it is dropped
78
+ and the status change and remaining valid dependencies still apply; the
79
+ previous behaviour discarded all of them. An unknown dependency target now
80
+ names the missing id and lists the tasks that do exist, instead of returning
81
+ a bare `task_not_found` the caller could only retry unchanged.
82
+ - The status bar is field-based and width-aware. Fields are declared with a
83
+ priority and dropped lowest-first when the terminal is narrow, rather than
84
+ being cut mid-word with everything to the right silently lost. Task progress
85
+ reports completed-of-total, pending tasks are no longer counted as active,
86
+ and a field with nothing to report is omitted rather than rendered as zero.
87
+ `/status-bar` chooses which fields are shown; the choice persists in
88
+ `statusBarFields`.
33
89
 
34
90
  ## 1.72.0
35
91