Commit Graph

66971 Commits

Author SHA1 Message Date
Vincent Koc
bd52ff5f5f test(android): cover settings model localization 2026-07-12 13:26:39 +02:00
Vincent Koc
4c6f171b9b fix(android): localize remaining settings actions 2026-07-12 13:26:39 +02:00
Vincent Koc
6dbcbd49fa fix(android): apply localization formatting 2026-07-12 13:26:39 +02:00
Vincent Koc
08cf91606d test(android): align localization helper indentation 2026-07-12 13:26:39 +02:00
Vincent Koc
5e3f04248d test(android): satisfy localization helper formatting 2026-07-12 13:26:39 +02:00
Vincent Koc
37c4b740b2 fix(i18n): exclude generated Android resources 2026-07-12 13:26:39 +02:00
Vincent Koc
2a32dcafea build(android): regenerate localization resources 2026-07-12 13:26:39 +02:00
Vincent Koc
b5844bbba2 test(android): harden localization coverage checks 2026-07-12 13:26:39 +02:00
Vincent Koc
f8bcf1d1d6 fix(android): localize settings and cron helpers 2026-07-12 13:26:39 +02:00
Vincent Koc
bd81763cd0 fix(android): localize connection chat and voice states 2026-07-12 13:26:39 +02:00
Vincent Koc
26e28ab2e3 fix(android): format localization fallbacks 2026-07-12 13:26:39 +02:00
Vincent Koc
ea8cadaf75 feat(android): localize chat sessions and voice 2026-07-12 13:26:39 +02:00
Vincent Koc
fc96ddf0e0 feat(android): localize settings surfaces 2026-07-12 13:26:39 +02:00
Vincent Koc
2c19c8d4d2 feat(android): localize onboarding and navigation 2026-07-12 13:26:39 +02:00
Vincent Koc
869d1b0238 feat(android): localize platform feedback 2026-07-12 13:26:39 +02:00
Vincent Koc
c03d64558f feat(android): generate native localization resources 2026-07-12 13:26:39 +02:00
Peter Steinberger
e864155d74 ci(performance): accept disabled gateway health proof (#105324) 2026-07-12 12:22:13 +01:00
Vincent Koc
871a92e5d9 fix(qa): use graceful Matrix replay restart (#105317) 2026-07-12 13:18:27 +02:00
Peter Steinberger
91175d0662 fix(gateway): accept shared macOS platform pins (#105311)
* fix(gateway): accept shared macOS platform pins

* chore(pr): keep release notes in PR body
2026-07-12 12:12:58 +01:00
Vincent Koc
98f2dc89df refactor(gateway): remove stale testing aliases (#105312) 2026-07-12 13:11:35 +02:00
Peter Steinberger
6bf84e0eb4 fix(ui): preserve current worktree branches (#105313) 2026-07-12 12:10:52 +01:00
Peter Steinberger
f94a359338 improve(ui): fold the New session target controls into click menus (#105265)
* improve(ui): fold the new-session targets into click menus

The /new target controls become Cursor-style trigger menus instead of an
inline control row: a folder trigger opens the directory browser as a
floating panel (with editable path in its head for manual entry), and a
where trigger opens one menu holding Gateway/node selection plus the
worktree toggle with labeled base-branch/name fields; the agent picker
becomes a menu when several agents exist. Triggers show live labels
(folder basename, node name, a branch badge when a worktree is on), so
the row stays one quiet line even on phones. Menus reuse the shared
session-menu item styles and the chat composer's details/summary
dismissal contract (outside pointerdown, Escape restores trigger focus).
Node-bound drafts no longer show an inert worktree toggle; the item
disappears because managed worktrees are Gateway-only.

* fix(ui): harden the new-session trigger menus

Review fixes: the folder trigger no longer shows the Gateway workspace
basename for node sessions (an empty node folder means that node's
default directory); sibling menus now close on the details toggle so
keyboard-opened menus stay mutually exclusive; and phone menus anchor to
the trigger row full-width so a wide browser panel under a non-leftmost
trigger cannot overflow the viewport.

* fix(ui): keep filesystem roots visible in the folder trigger

folderDisplayName falls back to the raw path so picking '/' (or a drive
root) labels the trigger instead of leaving it blank.

* fix(ui): give the new-session menus the native-select keyboard contract

Opening a menu moves focus to its first item, ArrowUp/Down wrap through
the items (browser rows included), and Home/End jump to the edges,
restoring what the replaced native selects provided. Re-picking the
checked agent no longer resets the draft (the native select never fired
change for the same option).

* fix(ui): keep native key behavior in menu text fields

Menu arrow/Home/End navigation now ignores events from text inputs so
the browser path, base-branch (datalist), and worktree-name fields keep
their native caret and picker behavior.

* fix(ui): let typed paths apply without a directory listing

Admins on hosts without a working fs.listDir keep manual folder entry:
the browser head input tracks a draft path and Use this folder applies a
typed absolute path even when listing fails; shapeless fs.listDir
payloads render as an empty directory instead of crashing the render.
The folder menu also initializes browser state before the focus hook
captures updateComplete, so keyboard-opened menus focus their first row
as advertised.

* fix(ui): apply exactly the shown browser path

Use this folder now applies the head input's absolute path only; the
draft syncs to every listed directory, so browsing is unchanged while an
edited path can never lose to a stale listing.

* fix(ui): let the browser express host-default directories

Review fixes: a cleared path input now applies '' — the host's default
directory (workspace on the Gateway, home on a node) — restoring the
state the replaced clearable folder textbox could express, and directory
results no longer overwrite a path the user typed while the listing was
in flight. E2E covers clearing back to the node default.

* fix(ui): apply the requested directory during browser navigation

loadBrowser assigns the head input the destination it is fetching, so a
mid-flight Use this folder applies where the user is heading instead of
the directory they just left.
2026-07-12 12:09:53 +01:00
Vincent Koc
6f820f9e6c fix(qa): wait for Control UI composer readiness (#105309) 2026-07-12 13:05:32 +02:00
Peter Steinberger
04e8aeb784 fix(ui): default worktrees to current branch (#105304) 2026-07-12 11:54:15 +01:00
Peter Steinberger
66d9ec535e test(memory): repair SQLite session fixtures (#105303) 2026-07-12 11:53:35 +01:00
Peter Steinberger
eb2669cefd ci(performance): accept optional Kova cleanup evidence (#105292) 2026-07-12 11:53:09 +01:00
Vincent Koc
71a10846df fix(qa): assert goal context from provider input (#105123) 2026-07-12 12:48:49 +02:00
Vyctor H. Brzezowski
2c5715238d fix(ui): turn large pasted text into compact composer attachments (#100929)
* fix(ui): compact large pasted text in composer

* fix(ui): turn large pasted text into compact composer attachments

* fix(ui): turn large pasted text into compact composer attachments

* Fix large paste composer CI

* Use translated restore label

* Fix large paste review findings

* Mark generated paste attachments by identity

---------

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-07-12 07:48:24 -03:00
Peter Steinberger
a20314d6cc ci: preserve frozen Android build contract (#105299) 2026-07-12 11:48:02 +01:00
Vincent Koc
ff4b4517d2 refactor(agents): remove stale testing aliases (#105293) 2026-07-12 12:47:30 +02:00
Peter Steinberger
5f856a26ba fix(release): package unreleased ref candidates (#105291)
* fix(release): package unreleased ref candidates

* docs(agents): preserve PR artifact enums
2026-07-12 11:45:03 +01:00
Peter Steinberger
7303f42917 fix(macos): fail fast during node lifecycle cleanup (#105282) 2026-07-12 11:41:21 +01:00
Peter Steinberger
4249cdb8fe fix(discord): keep slash commands deployed at the application limit (#105280)
* fix(discord): reconcile commands at the application cap

* docs(changelog): note Discord command cap fix

* chore: keep release changelog unchanged

* fix(discord): narrow command deployment errors
2026-07-12 11:37:29 +01:00
Peter Steinberger
75f0960b71 fix(ui): recover worktree creation after reconnect (#105285) 2026-07-12 11:36:54 +01:00
Peter Steinberger
c5208f9dfe feat(tooling): enforce indexed access checks in UI tests (#105283) 2026-07-12 11:35:00 +01:00
Vincent Koc
2148c3bf7e fix(active-memory): restore SQLite recall sessions (#105255)
* fix(qa): seed memory scenarios through SQLite

* fix(active-memory): initialize SQLite recall sessions

* test(active-memory): model missing harness reservation

* fix(active-memory): clean up transient recall sessions

* fix(active-memory): isolate concurrent recall sessions

* fix(active-memory): discard transient SQLite recalls

* fix(active-memory): preserve transient recall boundaries

* fix(active-memory): retry transient recall cleanup

* fix(active-memory): always clean transient recall workspaces

* chore: drop release-owned changelog entry
2026-07-12 18:29:23 +08:00
Peter Steinberger
e6cba86509 chore(plugin-sdk): refresh API baseline 2026-07-12 11:24:42 +01:00
Peter Steinberger
feff4c7824 fix(plugin-sdk): isolate expect declaration surface 2026-07-12 11:23:43 +01:00
Vincent Koc
4d8b201371 refactor(plugins): remove dead channel helpers (#105276) 2026-07-12 18:21:11 +08:00
Peter Steinberger
f4659b7d4d fix(updater): scope restart log audits to managed checkout (#105030)
* fix(updater): scope restart log audits

* test(updater): declare log source argument

* fix(updater): preserve configured plugin logs

* fix(updater): normalize plugin log sources

* fix(updater): reuse managed plugin config

* fix(updater): resolve relative plugin roots

* fix(updater): handle unset gateway workdir

* fix(updater): audit effective plugin roots

* fix(updater): bind logs to managed runtime

* fix(updater): canonicalize log source roots
2026-07-12 11:21:00 +01:00
Peter Steinberger
0350b87f06 test(ci): repair plugin prerelease contracts (#105272)
* test(ci): repair plugin prerelease contracts

* docs(agents): clarify stale Testbox recovery

* docs(agents): require Bash for Testbox compounds
2026-07-12 11:13:08 +01:00
Peter Steinberger
a824078101 fix(channels): tombstone corrupt ingress rows (#105259)
* fix(infra): guard channel ingress queue parseJson against corrupted JSON

* fix(infra): fix type assertion in ingress queue test

* fix(infra): use tagged parse result and validate payload before claiming

* fix(infra): remove unnecessary non-null assertion in ingress queue test

* fix(infra): scan corrupt ingress rows in claimNext

* test(gateway): avoid typed empty mock call tuple access

* fix(infra): tombstone corrupt ingress rows on duplicate enqueue and stale recovery

Two P1 gaps: enqueue() threw on duplicate when the existing row had corrupt
payload_json, and recoverStaleClaims() silently skipped corrupt claimed rows,
leaving them invisible to recovery. Both paths now tombstone the unrecoverable
row as failed with reason "corrupt_payload" and return a proper result.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(infra): resolve lint shadow and await-thenable in recoverStaleClaims

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(channels): tombstone corrupt ingress rows

* test(channels): use explicit placeholder claim tokens

* refactor(channels): name claim token values

* refactor(channels): keep claim projection direct

* fix(channels): preserve active ingress claims

* fix(channels): make corrupt recovery policy-aware

* refactor(channels): name corrupt claim token

* fix(channels): bound corrupt ingress reconciliation

* fix(channels): paginate pending ingress by key

* refactor(telegram): return live owner check directly

* build(plugin-sdk): refresh public export budget

---------

Co-authored-by: Pick-cat <huang.ting3@xydigit.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-12 11:09:52 +01:00
Peter Steinberger
dba78584ff fix(ui): preserve rejected first message when session send fails (#105261)
* fix(ui): preserve rejected first session message

* chore: leave changelog to release closeout

* fix(protocol): regenerate session create result
2026-07-12 11:09:38 +01:00
Vincent Koc
4c077df1b1 fix(sqlite): repair canonical unique index drift (#105260)
* fix(sqlite): repair canonical unique index drift

* chore(sqlite): allow schema repair DDL
2026-07-12 18:08:16 +08:00
Vincent Koc
34205aabf9 refactor(plugins): remove obsolete runtime helpers (#105273) 2026-07-12 18:05:22 +08:00
Peter Steinberger
7bb59c4511 ci: pin release validation Go toolchain (#105270) 2026-07-12 11:02:04 +01:00
Peter Steinberger
1999935108 fix(config): restore canonical flat streaming-key resolution and preserve discord preview mode in doctor migration (#105054)
* fix(config): keep flat streaming keys resolving for canonical-flat channels and pin discord preview default in doctor migration

* fix(discord): pin inherited streaming mode for account alias migration and align core streaming test
2026-07-12 11:00:24 +01:00
Peter Steinberger
566043eb54 feat(tooling): enforce noUncheckedIndexedAccess from the base tsconfig (NUIA endgame) (#105239)
* feat(tooling): enforce noUncheckedIndexedAccess from the base tsconfig

Completes #104600: the flag moves to tsconfig.json, the five per-lane
copies are removed, and test lanes carry one documented opt-out at their
shared parent (the ~4,400 fixture-indexing sites are a tracked
lane-by-lane follow-up). Any future lane inherits the flag by default.
Synthetic probes verify src rejects unchecked reads while test files
compile; all nine lane commands green.

* fix(memory-core): give the batch-call sort a defined element type

Type-aware lint analyzes test files under the base flag (its tsconfig
extends the root, not the test parent), so the widened call[0] made the
bare toSorted() fire require-array-sort-compare.
2026-07-12 10:57:26 +01:00
Peter Steinberger
916d43c9b9 docs(agents): clarify Testbox cleanup syntax (#105268) 2026-07-12 10:55:36 +01:00
Peter Steinberger
5fe350c668 fix(docs): keep Dutch address informal 2026-07-12 05:55:10 -04:00