Commit Graph

912 Commits

Author SHA1 Message Date
github-actions[bot] eee2d9807d release: v1.4.124-rc.2 2026-07-05 22:39:26 +00:00
github-actions[bot] dbf1da0f44 release: v1.4.124-rc.1 2026-07-05 19:51:20 +00:00
github-actions[bot] 4b2e4735d7 release: v1.4.124-rc.0 2026-07-05 19:29:31 +00:00
github-actions[bot] 17d5eff5d6 release: v1.4.123-rc.1 2026-07-05 06:02:14 +00:00
github-actions[bot] 85adb2ddad release: v1.4.123-rc.0 2026-07-05 00:22:51 +00:00
github-actions[bot] ad329e2f26 release: v1.4.122-rc.4 2026-07-04 22:41:11 +00:00
github-actions[bot] 8070e65778 release: v1.4.122-rc.3 2026-07-04 07:27:11 +00:00
github-actions[bot] 7595baccef release: v1.4.122-rc.2 2026-07-04 06:21:22 +00:00
github-actions[bot] 19bb7df93a release: v1.4.122-rc.1 2026-07-04 05:49:42 +00:00
Brennan Benson 1282f5c2da
Add reliability gate manifest (#7001)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:26:00 -07:00
github-actions[bot] 266defab34 release: v1.4.122-rc.0 2026-07-04 02:25:39 +00:00
github-actions[bot] 41e395b66b release: v1.4.121-rc.6 2026-07-04 00:24:44 +00:00
github-actions[bot] 0bc417e04d release: v1.4.121-rc.5 2026-07-03 23:41:58 +00:00
github-actions[bot] f3e103ebe7 release: v1.4.121-rc.3 2026-07-03 21:28:43 +00:00
github-actions[bot] a4f9dda71a release: v1.4.121-rc.1 [rc-slot:2026-07-03-03] 2026-07-03 10:57:58 +00:00
github-actions[bot] 0ab4d8925c release: v1.4.120 2026-07-03 07:06:43 +00:00
github-actions[bot] 8e1ce20289 release: v1.4.120-rc.6 2026-07-03 06:44:20 +00:00
github-actions[bot] bf6a39987c release: v1.4.120-rc.5 2026-07-03 05:50:01 +00:00
github-actions[bot] f7ec1c727e release: v1.4.120-rc.4 2026-07-03 04:28:04 +00:00
github-actions[bot] 777b757cdb release: v1.4.120-rc.3 2026-07-03 01:25:04 +00:00
github-actions[bot] 025448f06b release: v1.4.120-rc.2 2026-07-02 23:43:43 +00:00
github-actions[bot] ce997b001d release: v1.4.120-rc.0 [rc-slot:2026-07-02-15] 2026-07-02 22:35:04 +00:00
github-actions[bot] 4782b8d3bf release: v1.4.119 2026-07-02 22:21:07 +00:00
github-actions[bot] 2d4b46b44f release: v1.4.119-rc.0 2026-07-02 21:51:38 +00:00
github-actions[bot] 98a78f1e0c release: v1.4.118 2026-07-02 20:12:17 +00:00
github-actions[bot] a81629e862 release: v1.4.118-rc.5 2026-07-02 19:35:52 +00:00
github-actions[bot] 6bca68ae09 release: v1.4.118-rc.3 2026-07-02 19:13:04 +00:00
github-actions[bot] 33fda893e9 release: v1.4.118-rc.2 2026-07-02 18:43:30 +00:00
github-actions[bot] 1ac6de1ccb release: v1.4.118-rc.1 2026-07-02 18:01:05 +00:00
github-actions[bot] dbf80864fe release: v1.4.118-rc.0 [rc-slot:2026-07-02-03] 2026-07-02 10:58:11 +00:00
github-actions[bot] ab3878ffa0 release: v1.4.117-rc.3 2026-07-02 07:17:22 +00:00
github-actions[bot] b157c0d5b3 release: v1.4.117-rc.2 2026-07-02 06:36:13 +00:00
github-actions[bot] d6578af833 release: v1.4.117-rc.1 2026-07-02 05:14:59 +00:00
github-actions[bot] de807c5a8c release: v1.4.117-rc.0 2026-07-02 03:58:34 +00:00
github-actions[bot] d7322ec1f2 release: v1.4.116 2026-07-01 23:11:35 +00:00
github-actions[bot] 126aae7734 release: v1.4.116-rc.0 2026-07-01 22:12:14 +00:00
github-actions[bot] c1fae31a3f release: v1.4.115-rc.4 2026-07-01 10:04:28 +00:00
github-actions[bot] e083932018 release: v1.4.115-rc.3 2026-07-01 10:00:57 +00:00
github-actions[bot] d52e5814d5 release: v1.4.115-rc.0 2026-07-01 05:28:16 +00:00
github-actions[bot] c53a730886 release: v1.4.114 2026-07-01 04:07:33 +00:00
github-actions[bot] c26a23d173 release: v1.4.114-rc.0 2026-07-01 02:15:51 +00:00
github-actions[bot] b9d961e11c release: v1.4.113 2026-07-01 01:33:42 +00:00
github-actions[bot] 2b04c81c87 release: v1.4.112-rc.2 2026-07-01 01:12:01 +00:00
github-actions[bot] 355d943451 release: v1.4.112-rc.1 2026-06-30 23:41:46 +00:00
github-actions[bot] 043731e934 release: v1.4.112-rc.0 2026-06-30 22:52:44 +00:00
github-actions[bot] 4e6a8b914e release: v1.4.111-rc.3 2026-06-30 21:59:25 +00:00
github-actions[bot] 2c0ac2a75f release: v1.4.111-rc.2 2026-06-30 20:56:32 +00:00
github-actions[bot] e8f29945b7 release: v1.4.111-rc.1 2026-06-30 20:22:29 +00:00
github-actions[bot] 01070198fa release: v1.4.111-rc.0 2026-06-30 19:30:41 +00:00
Jinjing d4084ba982
fix(terminal): force model clear when webgl texture atlas is reset (#6868)
Patch @xterm/addon-webgl so clearTexture() and page merge/delete operations
request a model clear and bump a generation counter. Without this, the renderer
keeps drawing glyphs against a stale atlas after the texture is reset, leaving
garbled or blank cells until the next full repaint.

Co-authored-by: Orca <help@stably.ai>
2026-06-30 01:06:45 -07:00
Neil 46646d7ff1
chore(lint): upgrade oxlint to 1.71 + enable 7 new rules (autofixed backlog) (#6841)
* chore(lint): upgrade oxlint to 1.71 and enable 7 new rules

Upgrade oxlint 1.67.0 -> 1.71.0 (1.72 was blocked by the repo's 3-day
minimum-release-age supply-chain guard; nothing here needs it). The
bump is a no-op on the existing config.

Enable 3 error rules (backlog autofixed to zero in this commit) and
4 warn rules (surface signal without gating CI):

error (autofixed, behavior-preserving):
- unicorn/prefer-node-protocol        (~1531 sites: bare builtin -> node:)
- typescript/no-import-type-side-effects (~36: all-inline-type -> import type)
- unicorn/no-array-reverse            (19: copy-then-reverse -> toReversed)

warn (real signal, current fires are test-only/correct):
- unicorn/no-array-fill-with-reference-type  (aliasing footgun guard)
- typescript/no-unsafe-function-type         (bans bare Function type)
- unicorn/prefer-array-flat-map              (map().flat() -> flatMap())
- unicorn/prefer-regexp-test                 (.match() in bool ctx -> .test())

mobile/.oxlintrc.json extends root, so it inherits all 7; the autofix
ran from root and covered mobile/ too.

Verification (all green): oxlint 0 errors (root+mobile+aux configs),
oxfmt clean, typecheck (node+cli+web), vitest 22795 passed / 0 failed,
builds (electron-vite + web + cli) succeed. node: rewrites confirmed to
skip embedded SSH/CLI string payloads (AST-only); all toReversed sites
verified to operate on fresh copies or write-once locals.

* chore(lint): bump mobile oxlint to 1.71 so inherited rules parse

mobile/ is a standalone pnpm project pinning its own oxlint@1.67, which
lacks unicorn/no-array-fill-with-reference-type (needs >=1.70). Since
mobile/.oxlintrc.json extends the root config, mobile CI's 'cd mobile &&
oxlint' failed to parse the new rule. Bump mobile to match root (1.71).

Verified in mobile/: oxlint 0 errors, oxfmt --check clean, tsc --noEmit
pass, vitest 978 passed / 0 failed.

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-29 22:38:29 -07:00
github-actions[bot] 8c49426224 release: v1.4.109-rc.0 2026-06-30 00:18:10 +00:00
github-actions[bot] ab1aac2bda release: v1.4.108-rc.1 [rc-slot:2026-06-29-15] 2026-06-29 22:27:49 +00:00
github-actions[bot] 004b4d2991 release: v1.4.108-rc.0 2026-06-29 20:39:08 +00:00
github-actions[bot] 13ea799c91 release: v1.4.107 2026-06-29 19:19:08 +00:00
github-actions[bot] 1d7198fc31 release: v1.4.107-rc.0 2026-06-29 19:14:15 +00:00
github-actions[bot] d877d9483b release: v1.4.105-rc.4 2026-06-29 08:50:22 +00:00
github-actions[bot] ffe50add49 release: v1.4.105-rc.3 2026-06-29 08:15:01 +00:00
ppw-stack 299bc421e2
feat(mobile-pairing): combobox with manual network address entry (#6501)
* docs(spec): manual network address entry for mobile pairing

* docs(plan): manual network address entry for mobile pairing

* docs(plan): fix two test-spec issues in Task 1

* feat(mobile-pairing): add parseManualNetworkAddress validator

* docs(plan): fix buildComboboxEntries filter rule

* feat(mobile-pairing): buildComboboxEntries for network interface combobox

* feat(mobile-pairing): combobox with manual address entry

* docs(spec): align buildComboboxEntries behavior with corrected plan

* fix(mobile-pairing): use text-destructive token for inline error

* fix(mobile-pairing): route Use row through translate() with i18next interpolation

* refactor(mobile-pairing): extract NetworkInterfaceCombobox shared by MobileHero and Settings section

The Popover + Command + manual-entry UX lived only in the Settings →
Mobile → Network Interface section. The mobile pairing screen
("Step 2 of 2 — Pair this computer") had its own copy of the same
Select-based dropdown that did not support manual address entry. A
user trying to pair with a Tailscale MagicDNS hostname from the
pairing screen could not enter it.

Extract the typeable combobox into a shared
`NetworkInterfaceCombobox` component. Both surfaces now render the
same Popover + Command with manual address entry, the `Use "..."`
row, the inline validation error, and the `(custom)` trigger label.
Settings keeps its own Generate QR button, Refresh + Tooltip, and
Tailnet accordion around the combobox. The pairing screen keeps its
existing layout (label + combobox + refresh icon).

Net deletion: ~160 lines. Net behavior gain: manual address entry is
now reachable from both surfaces, not only Settings.

* style(ui): give CommandInput a visible background so the search box is not lost

The Popover content above the CommandList renders the cmdk CommandInput
with only a thin bottom border. Against a white popover background it
visually disappears, especially in the mobile pairing screen where the
popover sits inside a dark phone mockup. Add a subtle `bg-muted/30` +
`py-1` so the input row is unambiguous, without changing the input's
shape or behavior.

* fix(mobile-pairing): drop cmdk CommandItem, use plain buttons inside Popover

In `pnpm dev` HMR cycle the cmdk CommandItem `onSelect` dispatch was
unreliable — clicking the item fired the synthetic event but the parent
React state never received it, so the trigger label never updated after
the user picked a manual address or a refreshed interface.

Replace the `Command` + `CommandItem` primitives inside
NetworkInterfaceCombobox with a native `<input>` + `<button>` list
wrapped by Radix `Popover`. The list now responds to the user's first
click without any intermediate effect that could be skipped in dev mode.
The combobox keeps the same props contract, the same placeholder, the
same inline validation, and the same `Use "<address>"` row at the
bottom of the list.

Update MobileNetworkInterfaceSection.test.tsx selectors from
`role=option` (cmdk's) to `role=button` so the integration test still
asserts the right element. All 479 feature tests still pass.

* debug(mobile-pairing): log handleSelect* invocations to confirm click path

* fix(mobile-pairing): commit on pointerdown to beat Radix Popover close race

In dev mode Radix Popover's close-on-pointerdown handler occasionally
fires before React's synthetic click dispatch reaches the option button,
so the parent's selectedAddress never updates after the user picks a
manual address. Bind the commit handler to pointerdown (synchronous,
before any pointer-up / click synthesis) and call event.preventDefault()
to avoid text-selection side effects. Keep onClick as a fallback so
keyboard / touch / programmatic-dispatch paths still work.

* fix(mobile-pairing): keep manually-typed addresses across network refresh

`selectRefreshedNetworkAddress` used to fall back to the first OS
interface whenever `currentAddress` wasn't in the OS-enumerated
list — so a user who typed a Tailscale MagicDNS name saw their
selection snap back to LAN every time `loadNetworkInterfaces`
returned. Treat manual entries as sticky by passing an
`isManual` flag from the caller; `selectRefreshedNetworkAddress`
now keeps the address when the caller says the user typed it.

`MobilePage` tracks `addressIsManual` alongside
`selectedAddress`: `handleAddressChange` flips it on when the
picked address is not in the OS list, and `loadNetworkInterfaces`
passes it through so refresh keeps the choice.

* chore(mobile-pairing): remove debug logs and sync new-combobox-listbox i18n key

* fix(mobile-pairing): address CodeRabbit review on manual-address lifecycle

Three real bugs from review, plus a regression test:

1. NetworkInterfaceCombobox in MobileHero was disabled when
   `networkInterfaces.length === 0`, which locked users out of the
   only path to type a manual address during a transient empty
   discovery. Pass `disabled={false}` and let the combobox's
   own empty-state copy explain the situation.

2. `selectRefreshedNetworkAddress` returned `undefined` whenever
   `interfaces.length === 0`, even if the user had a manual
   address and `currentAddressIsManual` was true. Keep the manual
   address so a recovering discovery doesn't clobber it.

3. `loadNetworkInterfaces` could rewrite `selectedAddress` (e.g.
   when a refresh swaps to a freshly-discovered tailnet) but never
   updated `addressIsManual`, so the next refresh could revert
   the user back to LAN. Re-derive `addressIsManual` from the
   new address after every refresh.

Adds a regression test in
`mobile-network-interface-selection.test.ts` exercising the
empty-refresh + manual path.

* style(mobile-pairing): trim disabled-false comment to two lines

* refactor(mobile-pairing): replace typeable combobox with select + custom-address dialog

The Settings/MobileHero network selector used a Popover+search-input hybrid
that looked uneven and hid its validation error behind the open popover.

Replace it with a plain Select of discovered interfaces plus an
'Add custom address…' footer row that opens a small dialog for entering a
Tailscale hostname or static IP. Drops the 'MagicDNS' jargon for plainer
copy, keeps the '(custom)' trigger label, and routes all strings through
translate() with real es/ja/ko/zh translations. Removes the now-dead
buildComboboxEntries helper. Also adds the missing scrollbar-sleek class
the old list omitted (was failing pnpm lint).

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: ppw-stack <ppw-stack@users.noreply.github.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-29 00:32:36 -07:00
mehmet turac 19eeacfad3
fix: pin CLI build output to CommonJS (#6656) 2026-06-28 22:58:27 -07:00
github-actions[bot] 8e292c5960 release: v1.4.105-rc.2 2026-06-29 05:35:59 +00:00
github-actions[bot] 8c51ab12fa release: v1.4.105-rc.1 2026-06-28 23:44:09 +00:00
github-actions[bot] bcbcf4126b release: v1.4.105-rc.0 [rc-slot:2026-06-28-15] 2026-06-28 22:26:44 +00:00
github-actions[bot] d3e6449373 release: v1.4.104-rc.6 2026-06-28 20:58:59 +00:00
github-actions[bot] ca6c3c207a release: v1.4.104-rc.5 2026-06-28 20:11:27 +00:00
github-actions[bot] b38e88a5cc release: v1.4.104-rc.4 2026-06-28 19:49:57 +00:00
github-actions[bot] 0f46d395fe release: v1.4.104-rc.3 [rc-slot:2026-06-28-03] 2026-06-28 10:49:22 +00:00
github-actions[bot] e51b2dfe3d release: v1.4.104-rc.2 2026-06-28 06:23:08 +00:00
Neil 47f66f53f5
chore(deps): bump vite/esbuild/dompurify to clear Dependabot alerts (#6538)
Resolve security advisories without pnpm overrides:

Root:
- vite 7.3.5 -> 7.3.6 (widened esbuild range to ^0.27 || ^0.28)
- esbuild 0.27.7 -> 0.28.1 (GHSA dev-server advisory)
- dompurify 3.4.10 -> 3.4.11 (direct devDep)

Mobile:
- tsx ^4.21.0 -> ^4.22.4 (only hard esbuild consumer; pulls esbuild 0.28.1)
- vitest ^4.1.5 -> ^4.1.9, add explicit vite ^8.0.16 (-> 8.1.0)

Verified: typecheck:web, build:web, and full vitest suite (21246 passed)
all green.

Deferred (override-only, no plain-update path exists):
- dompurify 3.2.7 x18 — monaco-editor@0.55.1 hard-pins it exactly
- js-yaml@3 — @istanbuljs/load-nyc-config; uuid@7 — xcode@3.0.1;
  postcss@8.4 — @expo/metro-config (Expo SDK 55 lock)

Co-authored-by: Orca <help@stably.ai>
2026-06-27 22:01:16 -07:00
github-actions[bot] 70d49af5cd release: v1.4.104-rc.1 [rc-slot:2026-06-27-15] 2026-06-27 22:27:08 +00:00
github-actions[bot] a0e7004059 release: v1.4.104-rc.0 2026-06-27 21:55:54 +00:00
github-actions[bot] 9f3cd6b934 release: v1.4.103 2026-06-27 18:48:05 +00:00
github-actions[bot] c7153a51b4 release: v1.4.103-rc.4 2026-06-27 17:49:27 +00:00
github-actions[bot] 62918129d8 release: v1.4.103-rc.3 [rc-slot:2026-06-27-03] 2026-06-27 10:43:49 +00:00
Neil 5363fcd668
Update xterm beta packages (#6486) 2026-06-27 02:37:23 -07:00
github-actions[bot] 85ef5871da release: v1.4.103-rc.2 2026-06-27 09:08:01 +00:00
github-actions[bot] ba88e27cdc release: v1.4.103-rc.1 2026-06-27 01:55:20 +00:00
github-actions[bot] b899aef1f9 release: v1.4.103-rc.0 2026-06-27 00:55:18 +00:00
github-actions[bot] e2bf3e4466 release: v1.4.102 2026-06-27 00:12:32 +00:00
github-actions[bot] c6bd599ce1 release: v1.4.102-rc.1 2026-06-26 22:07:50 +00:00
github-actions[bot] 14a742eeed release: v1.4.102-rc.0 2026-06-26 10:48:51 +00:00
github-actions[bot] cdb45d1af8 release: v1.4.101 2026-06-26 09:33:43 +00:00
github-actions[bot] 74a012c27d release: v1.4.100 2026-06-26 06:10:56 +00:00
github-actions[bot] dad24f67cd release: v1.4.98-rc.10 2026-06-26 05:44:30 +00:00
github-actions[bot] ec8799562c release: v1.4.98-rc.9 2026-06-26 05:00:18 +00:00
github-actions[bot] 01417f689e release: v1.4.98-rc.8 2026-06-26 03:55:14 +00:00
github-actions[bot] 412ee329f4 release: v1.4.98-rc.7 2026-06-26 02:25:38 +00:00
github-actions[bot] 5f995df942 release: v1.4.98-rc.6 2026-06-26 02:17:14 +00:00
github-actions[bot] a83e973e24 release: v1.4.98-rc.5 2026-06-26 00:44:38 +00:00
github-actions[bot] db0865ce2c release: v1.4.98-rc.4 2026-06-25 23:19:41 +00:00
github-actions[bot] 4a4d774986 release: v1.4.98-rc.3 [rc-slot:2026-06-25-15] 2026-06-25 22:35:19 +00:00
github-actions[bot] 15996c4617 release: v1.4.98-rc.2 2026-06-25 20:48:56 +00:00
github-actions[bot] 830d04f185 release: v1.4.98-rc.1 2026-06-25 08:51:35 +00:00
github-actions[bot] f864fc5bc6 release: v1.4.98-rc.0 2026-06-25 07:30:08 +00:00
github-actions[bot] a82859020f release: v1.4.97 2026-06-24 23:32:41 +00:00
github-actions[bot] e55b0e1d76 release: v1.4.96-rc.2 [rc-slot:2026-06-24-15] 2026-06-24 22:32:20 +00:00
github-actions[bot] 67b1564adf release: v1.4.96-rc.1 2026-06-24 21:25:50 +00:00
github-actions[bot] ab2db04c43 release: v1.4.97-rc.0 2026-06-24 20:25:47 +00:00
github-actions[bot] 52b0f8bf68 release: v1.4.96 2026-06-24 18:57:52 +00:00
github-actions[bot] 7369c4c957 release: v1.4.96-rc.0 2026-06-24 16:19:28 +00:00