Skip to content

Releases: Maitham16/UR

UR-Nexus 1.68.18

Choose a tag to compare

@github-actions github-actions released this 31 Jul 03:29
  • The shell is presentational and imports only ink and useTerminalSize. A first
    version read live state itself (settings, provider registry, app state, git),
    and importing it from REPL changed REPL's module graph enough to flip a
    command from hidden to visible — caught by commandRegistryIntegrity, which
    passed with the REPL edit stashed and failed with it applied. Loading a module
    is not free here; some register on load. Session values now arrive as props
    from a caller that already holds them.

  • Reconstructed three more stub type files, clearing 177 further errors:
    keybindings/types.ts (six empty interfaces), ink/cursor.ts, and
    commands/plugin/unifiedTypes.ts. Same defect as the MCP types in 1.68.14 —
    an empty interface means "has no members" to TypeScript, not "shape unknown",
    so every property access on one was an error and the consuming files carried
    @ts-nocheck as a result.

  • KeybindingBlock.bindings is keyed by chord string, not an array. A first
    attempt typed it ParsedBinding[], which made every entry in the default
    binding table an error — the declaration form ('ctrl+d': 'app:exit') and the
    parsed form (chord resolved into keystrokes) are different shapes, and
    conflating them broke a file that had been fine.

  • KeybindingAction is a string rather than a union of known actions:
    defaultBindings.ts assembles entries conditionally from feature flags, so a
    value missing from a union would turn a working binding into an error.

  • Suppression list: 140 -> 132. Eight keybinding and ink files came off.

  • Totals for the sweep so far: 223 -> 132 files, 868 -> 563 errors, and almost
    none of it file-by-file. Four stub files accounted for 258 errors on their
    own.

UR-Nexus 1.68.10

Choose a tag to compare

@github-actions github-actions released this 30 Jul 21:16
  • ToolSearchTool no longer registers on runtimes where it cannot work. Its
    purpose is fetching schemas for tools whose definitions were deferred, and
    deferral needs the runtime to expand tool_reference blocks — an
    Anthropic-native beta shape that no UR runtime supports (UR runs on Ollama,
    OpenAI-compatible servers and vendor CLIs). isEnabled() consulted only
    isToolSearchEnabledOptimistic(), which reads the mode, and the mode
    defaults to 'tst' (on). The tool therefore registered on every run: its
    description shipped with each request, and the model was offered a tool that
    could not function, because nothing was ever deferred for it to fetch.
  • Audit note on the surface as a whole: 168 commands, of which 8 touch a
    feature flag that is not compiled in, and in each case the flag gates a
    sub-feature rather than the command. 89 of 91 flags are absent from shipped
    builds. Two of those (CONTEXT_COLLAPSE, REACTIVE_COMPACT) would have
    failed on the first turn if enabled and were fixed in 1.68.2.

UR-Nexus 1.68.9

Choose a tag to compare

@github-actions github-actions released this 30 Jul 20:57
  • Narrowed that allowlist entry from ur.com to ur.com/docs. Replacing a
    docs-only host with a bare domain widened what WebFetch retrieves without
    asking, on a list whose own header warns that broad entries are dangerous
    where a host may serve user-supplied content — and the domain in question
    does not exist yet, so whatever ends up hosted there would have inherited
    that trust. The matcher enforces path-segment boundaries, so /docs-evil/x
    does not match. Caught by apiTool, which asserted the old entry.

UR-Nexus 1.68.7

Choose a tag to compare

@github-actions github-actions released this 30 Jul 17:33
  • Corrected the ur.ai -> ur.com replacement, which had rewritten identifiers as
    well as URLs. 'ur.ai' served two roles in this codebase: a domain in links
    such as https://ur.ai/settings/billing, and a discriminant value in
    authTokenSource === 'ur.ai', authMethod = 'ur.ai' and
    source: 'ur.ai' as const. A blanket replace changed both, which typechecked
    and looked internally consistent but altered command availability — one
    command that should have been hidden became visible, caught by
    commandRegistryIntegrity. The 39 URLs now point at ur.com; the 11 auth
    discriminants are back to their original values, which also keeps any
    "ur.ai" already persisted in a user's auth state matching.

UR-Nexus 1.68.3

Choose a tag to compare

@github-actions github-actions released this 30 Jul 13:05
  • Ollama request failed (400): http: request body too large now explains
    itself. That string comes from Go's net/http MaxBytesReader rejecting the
    payload on byte size, which is a different limit from the model's context
    window — so the token-based context warning added in 1.66.2 never fires for
    it, and a couple of screenshots can breach it while the token estimate still
    looks comfortable. The request body is now measured at the send site, and the
    error reports its actual size, names images as the usual cause (base64 adds
    roughly a third, and every image persists in the transcript on later turns),
    offers /compact or a fresh session, and notes that a reverse proxy in front
    of Ollama enforces its own limit (client_max_body_size for nginx) which
    tuning Ollama would not affect.
  • The classifier matches the 413 spellings a proxy returns as well as the Go
    400, and is tested against unrelated 400s so it cannot replace a correct error
    with confident, irrelevant advice.

UR-Nexus 1.68.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 09:44
  • Removed @ts-nocheck from 73 files, putting 21,503 previously unchecked lines
    under tsc. Every one of those files produced zero errors once the
    suppression was lifted — they were not suppressed because they were broken,
    they were suppressed and then fixed, or never needed it. The blind spot was
    33% larger than the actual debt. Typecheck remains clean at exit 0.

  • Added test/typeCheckCoverage.test.ts, a ratchet: the @ts-nocheck count may
    fall but never rise, and the budget must be lowered when files come off the
    list so it cannot silently stop ratcheting. It also asserts that query.ts,
    permissions.ts, filesystem.ts and toolExecution.ts are still suppressed
    — a standing reminder that the highest-consequence files are the unchecked
    ones, with instructions to delete the test when that stops being true.

  • Remaining debt, measured rather than estimated: 150 files, ~870 errors, but
    concentrated — 3 files hold 231 of them, while 95 files have 3 or fewer each
    and 135 have 10 or fewer. Of the total, 32 are dead build-constant comparisons
    from the fork ('external' === 'ant') and 562 are property-access-on-any.
    The 95 cheap files are the next batch.

  • Restored the worked examples in the TodoWrite tool prompt, with their
    narrated tool use removed. After 1.65.5 that
    prompt was cut from 184 lines to 48, which removed every demonstration and
    left only abstract rules ("work is non-trivial when it needs planning,
    investigation, multiple deliverables..."). A large model infers intent from
    rules; a small local model pattern-matches on examples. Task lists stopped
    being produced, and the task-list gate was then hardened over five successive
    commits to force what the prompt no longer taught — which is what produced
    refused writes and retry loops on small models. The newer lifecycle rules are
    good and are kept; what returns is seven worked examples covering when to use
    the list, when not to, and why, including the single-file case where one Write
    call still warrants a plan.

Also in this release (was staged as 1.67.0)

  • Two subsystems loaded behind feature flags were not merely disabled, they
    were broken in a way that only showed if you enabled them.
    services/compact/reactiveCompact.ts did not exist on disk at all, yet
    query.ts requires it by path and /compact calls two functions on it;
    services/contextCollapse/index.ts was a stub exporting four names while
    query.ts called four different ones, three of which were absent. Setting
    either flag would have failed on the first turn with MODULE_NOT_FOUND or
    "is not a function" rather than degrading to "feature off". Both modules now
    export the full surface their callers use, returning result-shaped objects
    instead of null so property access on the result cannot throw.

  • Neither was reachable in shipped builds — the bundler passes only VOICE_MODE
    and CHICAGO_MCP, and live context management runs through
    services/compact/autoCompact.ts, which is real and unaffected.

  • Added test/optionalSubsystems.test.ts, which derives the required exports
    from what query.ts actually calls rather than from a hand-written list, so
    a new call site cannot reintroduce the gap. It also asserts autoCompact has
    not itself become a stub.

  • Audit note: 223 files carry @ts-nocheck and are invisible to
    tsc --noEmit. Stripping the suppressions in a scratch copy surfaces 872
    errors across ~108k lines, including query.ts, permissions.ts and
    filesystem.ts. Both defects above sat inside that blind spot.

  • The original examples narrated tool use as prose ("* Uses the Edit tool to
    add a comment *", "Executes: npm install"), which is the exact anti-pattern
    the same prompt forbids in its closing paragraph — and what a small model
    copies when it reports a file as written without calling Write. That is why
    the examples were cut, and cutting them was not baseless; it just took the
    decision guidance with it. They now return without the narration.

UR-Nexus 1.67.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 09:24
  • Two subsystems loaded behind feature flags were not merely disabled, they
    were broken in a way that only showed if you enabled them.
    services/compact/reactiveCompact.ts did not exist on disk at all, yet
    query.ts requires it by path and /compact calls two functions on it;
    services/contextCollapse/index.ts was a stub exporting four names while
    query.ts called four different ones, three of which were absent. Setting
    either flag would have failed on the first turn with MODULE_NOT_FOUND or
    "is not a function" rather than degrading to "feature off". Both modules now
    export the full surface their callers use, returning result-shaped objects
    instead of null so property access on the result cannot throw.
  • Neither was reachable in shipped builds — the bundler passes only VOICE_MODE
    and CHICAGO_MCP, and live context management runs through
    services/compact/autoCompact.ts, which is real and unaffected.
  • Added test/optionalSubsystems.test.ts, which derives the required exports
    from what query.ts actually calls rather than from a hand-written list, so
    a new call site cannot reintroduce the gap. It also asserts autoCompact has
    not itself become a stub.
  • Audit note: 223 files carry @ts-nocheck and are invisible to
    tsc --noEmit. Stripping the suppressions in a scratch copy surfaces 872
    errors across ~108k lines, including query.ts, permissions.ts and
    filesystem.ts. Both defects above sat inside that blind spot.

UR-Nexus 1.66.1

Choose a tag to compare

@github-actions github-actions released this 30 Jul 06:43
  • Corrected the warning-state result used by reactive compaction and context
    collapse when a custom proactive threshold is configured. Their
    effective-window override can no longer report that the separate proactive
    auto-compact trigger was crossed.

UR-Nexus 1.65.14

Choose a tag to compare

@github-actions github-actions released this 30 Jul 05:02
  • Restored the proactive task-first behavior that was present in v1.65.0 and
    removed a prompt/gate contradiction introduced later. For any non-trivial
    state change, including a feature-rich single-file build, the model is now
    told at system, task-tool, approved-plan, Ollama/Kimi, file, notebook,
    shell, and worker boundaries to complete the available task setup, inspect
    its result, mark the selected task in_progress, inspect that result, and
    only then mutate state.
  • Made the ordering unambiguous for weaker models: task setup cannot be batched
    with the mutation it enables, approved-plan handoffs require task calls as
    the next state-changing calls, terminal task lists must be reopened or
    extended before new work, and task guidance appears before file-tool
    selection guidance.
  • Closed planner availability and control-flow gaps across tool modes. Legacy
    TodoWrite now follows the same feature-rich/terminal-list lifecycle and is
    preferred when Task V2 is incomplete; bare/simple, REPL-simple, coordinator,
    custom-agent, and override-prompt paths all receive a usable planner and the
    task-state contract. Coordinator workers must be task-bound before launch;
    an explicitly planner-less custom tool pool now fails closed with honest
    configuration recovery instead of naming a missing tool.
  • Prevented task-gate deadlocks and false mutations in supporting tools.
    Team creation/deletion, shutdown/plan control messages, and emergency task
    stop are narrow control transitions; skill loading and desktop screenshots
    are read-only while downstream skill work, desktop input, and arbitrary
    state-changing tools remain gated.

UR-Nexus 1.65.13

Choose a tag to compare

@github-actions github-actions released this 30 Jul 04:15
  • Recovered otherwise valid AskUserQuestion calls whose UI header exceeds
    the 12-character chip width. Native structured calls, bare/wrapped JSON, and
    explicit-choice recovery now compact only that bounded presentation field;
    questions, choices, labels, descriptions, previews, metadata, and selection
    behavior remain unchanged, while unsafe or grossly oversized headers still
    fail validation.
  • Allowed strictly parsed syntax verification after a task-free one-shot
    Write. node --check <file> and the bounded transcript-produced HTML script
    checker bypass only the task-list requirement; arbitrary Node evaluation,
    extra commands, redirects, backgrounding, sandbox overrides, and
    permission-time rewrites fail closed, and normal Bash permission/sandbox
    checks still apply.