Commit graph

2492 commits

Author SHA1 Message Date
Mike Sawka
76f78f0f97
fix failing layout test (#2999) 2026-03-06 16:07:11 -08:00
Mike Sawka
c6f61247ce
update about, add sponsor and gradient (#3001) 2026-03-06 15:59:55 -08:00
wave-builder[bot]
f82845b5b6
chore: bump package version to 0.14.2-beta.0 2026-03-06 18:23:50 +00:00
Mike Sawka
ff673e1500
break out wsh editor and clarify behavior. also document -m flag... (#2988)
fix documentation issue #2948
2026-03-06 10:21:22 -08:00
Mike Sawka
0f60c70666
broadcast zoom changed notifications (#2989) 2026-03-06 10:19:14 -08:00
dependabot[bot]
1b3c7c708b
Bump tar from 7.5.9 to 7.5.10 (#2992)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.9 to 7.5.10.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2b72abc1d4"><code>2b72abc</code></a>
7.5.10</li>
<li><a
href="7bc755dd85"><code>7bc755d</code></a>
parse root off paths before sanitizing .. parts</li>
<li><a
href="c8cb84629d"><code>c8cb846</code></a>
update deps</li>
<li>See full diff in <a
href="https://github.com/isaacs/node-tar/compare/v7.5.9...v7.5.10">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tar&package-manager=npm_and_yarn&previous-version=7.5.9&new-version=7.5.10)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/wavetermdev/waveterm/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 10:07:38 -08:00
dependabot[bot]
5e6d33d10d
Bump github.com/shirou/gopsutil/v4 from 4.26.1 to 4.26.2 (#2993)
Bumps
[github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil) from
4.26.1 to 4.26.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/shirou/gopsutil/releases">github.com/shirou/gopsutil/v4's
releases</a>.</em></p>
<blockquote>
<h2>v4.26.2</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3>disk</h3>
<ul>
<li>[disk][linux]: fix Device set to &quot;none&quot; for virtual
filesystems by <a
href="https://github.com/skartikey"><code>@​skartikey</code></a> in <a
href="https://redirect.github.com/shirou/gopsutil/pull/2002">shirou/gopsutil#2002</a></li>
<li>fix(disk): skip drives returning ERROR_INVALID_FUNCTION or
ERROR_NOT_SUPPORTED in IOCounters on Windows by <a
href="https://github.com/jose-manuel-almaza"><code>@​jose-manuel-almaza</code></a>
in <a
href="https://redirect.github.com/shirou/gopsutil/pull/2003">shirou/gopsutil#2003</a></li>
<li>[linux][disk]: fix disk mountinfo parsing bug by <a
href="https://github.com/shirou"><code>@​shirou</code></a> in <a
href="https://redirect.github.com/shirou/gopsutil/pull/2007">shirou/gopsutil#2007</a></li>
</ul>
<h3>host</h3>
<ul>
<li>refactor: move timeSince and timeSinceMillis to common package by <a
href="https://github.com/Dylan-M"><code>@​Dylan-M</code></a> in <a
href="https://redirect.github.com/shirou/gopsutil/pull/1998">shirou/gopsutil#1998</a></li>
</ul>
<h3>process</h3>
<ul>
<li>[common][process]: fix gosec lint by <a
href="https://github.com/shirou"><code>@​shirou</code></a> in <a
href="https://redirect.github.com/shirou/gopsutil/pull/2006">shirou/gopsutil#2006</a></li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>[doc]: Update 'golang' to 'Go' for consistency by <a
href="https://github.com/alexandear"><code>@​alexandear</code></a> in <a
href="https://redirect.github.com/shirou/gopsutil/pull/1993">shirou/gopsutil#1993</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/alexandear"><code>@​alexandear</code></a> made
their first contribution in <a
href="https://redirect.github.com/shirou/gopsutil/pull/1993">shirou/gopsutil#1993</a></li>
<li><a
href="https://github.com/jose-manuel-almaza"><code>@​jose-manuel-almaza</code></a>
made their first contribution in <a
href="https://redirect.github.com/shirou/gopsutil/pull/2003">shirou/gopsutil#2003</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/shirou/gopsutil/compare/v4.26.1...v4.26.2">https://github.com/shirou/gopsutil/compare/v4.26.1...v4.26.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="33fab7d608"><code>33fab7d</code></a>
Merge pull request <a
href="https://redirect.github.com/shirou/gopsutil/issues/2009">#2009</a>
from shirou/dependabot/github_actions/actions/setup-...</li>
<li><a
href="6320f9ee4b"><code>6320f9e</code></a>
Merge pull request <a
href="https://redirect.github.com/shirou/gopsutil/issues/2007">#2007</a>
from shirou/fix/fix_disk_mountinfo_parsing_bugs</li>
<li><a
href="a69a8e2112"><code>a69a8e2</code></a>
chore(deps): bump actions/setup-go from 6.2.0 to 6.3.0</li>
<li><a
href="6a6e2157d2"><code>6a6e215</code></a>
Merge pull request <a
href="https://redirect.github.com/shirou/gopsutil/issues/2008">#2008</a>
from shirou/dependabot/go_modules/github.com/ebiteng...</li>
<li><a
href="e140450726"><code>e140450</code></a>
chore(deps): bump github.com/ebitengine/purego from 0.9.1 to 0.10.0</li>
<li><a
href="2ef7eb7835"><code>2ef7eb7</code></a>
[linux][disk]: fix disk mountinfo parsing bug</li>
<li><a
href="962bfd89f4"><code>962bfd8</code></a>
Merge pull request <a
href="https://redirect.github.com/shirou/gopsutil/issues/2000">#2000</a>
from shirou/dependabot/go_modules/golang.org/x/sys-0...</li>
<li><a
href="8de66e7a4f"><code>8de66e7</code></a>
Merge pull request <a
href="https://redirect.github.com/shirou/gopsutil/issues/2006">#2006</a>
from shirou/fix/fix_gosec_lint</li>
<li><a
href="a92742331b"><code>a927423</code></a>
fix: ignore s390x golangci-lint due to becoming always fail</li>
<li><a
href="4e9a8de427"><code>4e9a8de</code></a>
[common][process]: fix gosec lint</li>
<li>Additional commits viewable in <a
href="https://github.com/shirou/gopsutil/compare/v4.26.1...v4.26.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/shirou/gopsutil/v4&package-manager=go_modules&previous-version=4.26.1&new-version=4.26.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 10:06:57 -08:00
Mike Sawka
06bac333ae
handle second-instance events (auto-generated new window action on gnome) (#2998) 2026-03-06 10:06:14 -08:00
dependabot[bot]
73b2fb6be8
Bump postcss from 8.5.6 to 8.5.8 in the dev-dependencies-patch group (#2995)
Bumps the dev-dependencies-patch group with 1 update:
[postcss](https://github.com/postcss/postcss).

Updates `postcss` from 8.5.6 to 8.5.8
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.8</h2>
<ul>
<li>Fixed <code>Processor#version</code>.</li>
</ul>
<h2>8.5.7</h2>
<ul>
<li>Improved source map annotation cleaning performance (by CodeAnt
AI).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.8</h2>
<ul>
<li>Fixed <code>Processor#version</code>.</li>
</ul>
<h2>8.5.7</h2>
<ul>
<li>Improved source map annotation cleaning performance (by CodeAnt
AI).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="65de53745f"><code>65de537</code></a>
Release 8.5.8 version</li>
<li><a
href="b2c6d9786e"><code>b2c6d97</code></a>
Run git hook register</li>
<li><a
href="0ae0a492e9"><code>0ae0a49</code></a>
Update Processor#version</li>
<li><a
href="6ee9f14d3a"><code>6ee9f14</code></a>
Release 8.5.7 version</li>
<li><a
href="3fbc95172a"><code>3fbc951</code></a>
Fix uvu Node.js 25 support</li>
<li><a
href="52db53ea43"><code>52db53e</code></a>
Update dependencies</li>
<li><a
href="497daef797"><code>497daef</code></a>
Speed up source map annotation cleaning by moving from RegExp</li>
<li><a
href="41e739a940"><code>41e739a</code></a>
Remove banner</li>
<li><a
href="1329142fc7"><code>1329142</code></a>
chore: speed up space-only string check in lib/parser.js (<a
href="https://redirect.github.com/postcss/postcss/issues/2064">#2064</a>)</li>
<li><a
href="23beff9a7c"><code>23beff9</code></a>
Update dependencies</li>
<li>Additional commits viewable in <a
href="https://github.com/postcss/postcss/compare/8.5.6...8.5.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.6&new-version=8.5.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 10:01:18 -08:00
dependabot[bot]
aefd4dacc5
Bump globals from 17.3.0 to 17.4.0 in the dev-dependencies-minor group (#2996)
Bumps the dev-dependencies-minor group with 1 update:
[globals](https://github.com/sindresorhus/globals).

Updates `globals` from 17.3.0 to 17.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sindresorhus/globals/releases">globals's
releases</a>.</em></p>
<blockquote>
<h2>v17.4.0</h2>
<ul>
<li>Update globals (2026-03-01) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/338">#338</a>)
d43a051</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.3.0...v17.4.0">https://github.com/sindresorhus/globals/compare/v17.3.0...v17.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a9cfd7493f"><code>a9cfd74</code></a>
17.4.0</li>
<li><a
href="d43a051c48"><code>d43a051</code></a>
Update globals (2026-03-01) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/338">#338</a>)</li>
<li>See full diff in <a
href="https://github.com/sindresorhus/globals/compare/v17.3.0...v17.4.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=globals&package-manager=npm_and_yarn&previous-version=17.3.0&new-version=17.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 09:18:33 -08:00
Mike Sawka
f59fdb55db
Fix focusedWaveWindow (also fixes bug w/ save session as....) (#2987) 2026-03-05 11:33:56 -08:00
Copilot
1a1cd853f8
Add wave:term component with direct SSE output + /api/terminput input path (#2974)
This PR introduces a standalone Tsunami terminal element (`wave:term`)
and routes terminal IO outside the normal render/event loop for
lower-latency streaming. It adds imperative terminal output
(`TermWrite`) over SSE and terminal input/resize delivery over a
dedicated `/api/terminput` endpoint.

- **Frontend: new `wave:term` element**
  - Added `tsunami/frontend/src/element/tsunamiterm.tsx`.
  - Uses `@xterm/xterm` with `@xterm/addon-fit`.
- Renders as an outer `<div>` (style/class/ref target), with xterm
auto-fit to that container.
  - Supports ref passthrough on the outer element.

- **Frontend: terminal transport wiring**
  - Registered `wave:term` in `tsunami/frontend/src/vdom.tsx`.
- Added SSE listener handling for `termwrite` in
`tsunami/frontend/src/model/tsunami-model.tsx`, dispatched to the
terminal component via a local custom event.
- `onData` and `onResize` now POST directly to `/api/terminput` as JSON
payloads:
    - `id`
    - `data64` (base64 terminal input)
    - `termsize` (`rows`, `cols`) for resize updates

- **Backend: new terminal IO APIs**
- Added `/api/terminput` handler in `tsunami/engine/serverhandlers.go`.
  - Added protocol types in `tsunami/rpctypes/protocoltypes.go`:
    - `TermInputPacket`, `TermWritePacket`, `TermSize`
  - Added engine/client support in `tsunami/engine/clientimpl.go`:
    - `SendTermWrite(id, data64)` -> emits SSE event `termwrite`
    - `SetTermInputHandler(...)` and `HandleTermInput(...)`
  - Exposed app-level APIs in `tsunami/app/defaultclient.go`:
    - `TermWrite(id, data64) error`
    - `SetTermInputHandler(func(TermInputPacket))`

- **Example usage**
  ```go
  app.SetTermInputHandler(func(input app.TermInputPacket) {
      // input.Id, input.Data64, input.TermSize.Rows/Cols
  })

  _ = app.TermWrite("term1", "SGVsbG8gZnJvbSB0aGUgYmFja2VuZA0K")
  ```

- **<screenshot>**
- Provided screenshot URL:
https://github.com/user-attachments/assets/58c92ebb-0a52-43d2-b577-17c9cf92a19c

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-03-05 09:32:01 -08:00
Copilot
0ab26ef947
Add a mousedown handler to also signal user activity in the app (#2976)
`mousedown` activity signaling was structured such that async telemetry
concerns leaked into event handling. This change moves fire-and-forget
behavior to the model boundary and keeps telemetry failures non-fatal.

- **`mousedown` handler path**
- `AppKeyHandlers` now calls `GlobalModel.getInstance().setIsActive()`
directly (no async wrapper in the handler).

- **`GlobalModel.setIsActive` structure**
  - `setIsActive()` is now synchronous (`void`).
  - Throttle logic remains unchanged.
- Electron telemetry call is executed via `util.fireAndForget(...)`
inside `setIsActive()`.

- **Telemetry error containment**
- `getApi().setIsActive()` is wrapped in `try/catch` inside the
fire-and-forget callback.
- Errors are logged with `console.log("setIsActive error", e)` and do
not bubble.

- **Focused coverage**
  - Added `frontend/app/store/global-model.test.ts` for:
    - fire-and-forget invocation + throttling behavior
    - error logging/swallowing on rejected telemetry call

```ts
setIsActive(): void {
    const now = Date.now();
    if (now - this.lastSetIsActiveTs < GlobalModel.IsActiveThrottleMs) {
        return;
    }
    this.lastSetIsActiveTs = now;
    util.fireAndForget(async () => {
        try {
            await getApi().setIsActive();
        } catch (e) {
            console.log("setIsActive error", e);
        }
    });
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

🔒 GitHub Advanced Security automatically protects Copilot coding agent
pull requests. You can protect all pull requests by enabling Advanced
Security for your repositories. [Learn more about Advanced
Security.](https://gh.io/cca-advanced-security)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-03-04 16:25:53 -08:00
Copilot
7f5487d9ac
Remove mock-heavy OSC52 Vitest coverage (#2975)
The issue called out that the OSC52 unit tests were mostly validating
mock setup rather than meaningful behavior. This PR trims that
low-signal coverage by removing the Vitest suite for OSC52.

- **Scope**
  - Deleted `frontend/app/view/term/osc-handlers.test.ts`.
  - No production/runtime code changes.

- **Rationale reflected in changes**
- Removes brittle, mock-dominant tests for logic considered too simple
for this unit-test shape.
  - Keeps the codebase focused on higher-value test coverage.

```diff
- frontend/app/view/term/osc-handlers.test.ts
```

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/wavetermdev/waveterm/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-03-04 16:24:42 -08:00
Copilot
edc20f7ec0
Bring Anthropic usechat backend to OpenAI-level tool-use parity and stream robustness (#2971)
This updates `pkg/aiusechat/anthropic` from partial implementation to
full backend parity for core tool-use orchestration and stream behavior.
The main gaps were unimplemented tool lifecycle methods, missing
persisted tool-use UI state, and weaker disconnect/error handling versus
the OpenAI backend.

- **Tool-use lifecycle parity (critical path)**
  - Implemented Anthropic backend support for:
    - `UpdateToolUseData`
    - `RemoveToolUseCall`
    - `GetFunctionCallInputByToolCallId`
- Wired `pkg/aiusechat/usechat-backend.go` to call Anthropic
implementations instead of stubs.
- Added Anthropic run-step nil-message guard so `nil` responses are not
wrapped into `[]GenAIMessage{nil}`.

- **Persisted tool-use state in Anthropic native messages**
  - Added internal `ToolUseData` storage on Anthropic `tool_use` blocks.
- Ensured internal-only fields are stripped before API requests via
`Clean()`.

- **UI conversion parity for reloaded history**
- Extended `ConvertToUIMessage()` to emit `data-tooluse` parts when
tool-use metadata exists, in addition to `tool-{name}` parts.

- **Streaming UX parity for tool argument deltas**
  - Added `aiutil.SendToolProgress(...)` calls during:
    - `input_json_delta` (incremental updates)
    - `content_block_stop` for `tool_use` (final update)

- **Disconnect/stream robustness**
  - Added `sse.Err()` checks in event handling and decode-error path.
- Added partial-text extraction on client disconnect and deterministic
ordering of partial blocks.
- Cleans up completed blocks from in-flight state to avoid duplicate
partial extraction.

- **Correctness + hygiene alignment**
- Continuation model checks now use `AreModelsCompatible(...)` (instead
of strict string equality).
- Added hostname sanitization in Anthropic error paths (HTTP error
parsing and `httpClient.Do` failures).
- Replaced unconditional Anthropic debug `log.Printf` calls with
`logutil.DevPrintf`.

- **Targeted coverage additions**
  - Added Anthropic tests for:
    - function-call lookup by tool call id
    - tool-use data update + removal
    - `data-tooluse` UI conversion behavior

```go
// usechat-backend.go
func (b *anthropicBackend) RunChatStep(...) (..., []uctypes.GenAIMessage, ...) {
    stopReason, msg, rateLimitInfo, err := anthropic.RunAnthropicChatStep(ctx, sseHandler, chatOpts, cont)
    if msg == nil {
        return stopReason, nil, rateLimitInfo, err
    }
    return stopReason, []uctypes.GenAIMessage{msg}, rateLimitInfo, err
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/wavetermdev/waveterm/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-03-04 16:20:50 -08:00
Copilot
9d4acb7aad
Add builder-launch strip to AppsFloatingWindow (#2979)
AppsFloatingWindow currently lists local apps but does not provide an
in-context way to open the app builder picker. This change adds a bottom
ghost-style action strip (`+ Build/Edit Apps`) that launches the builder
via Electron preload with `openBuilder(null)`.

- **What changed**
  - Added a new bottom strip action inside `AppsFloatingWindow`:
    - Label: `+ Build/Edit Apps`
- Visual style: ghost-like footer strip with top border, hover state,
full-width click target
- Wired the strip to call the preload API and close the floating window:
    - `getApi().openBuilder(null)` (`null` app id opens the app picker)
- Kept the change scoped to `frontend/app/workspace/widgets.tsx` with no
behavior changes to app-grid item launching.

- **Implementation detail**
  - Imported `getApi` from `@/store/global`
  - Added a memoized handler for builder launch:
  
```tsx
const handleOpenBuilder = useCallback(() => {
    getApi().openBuilder(null);
    onClose();
}, [onClose]);
```

- **UI preview**
-
<screenshot>https://github.com/user-attachments/assets/1448588f-ff1d-41b5-af72-2849135ca1f3</screenshot>

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/wavetermdev/waveterm/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-03-04 16:18:29 -08:00
dependabot[bot]
73f7715245
Bump immutable from 5.1.3 to 5.1.5 (#2980)
Bumps [immutable](https://github.com/immutable-js/immutable-js) from
5.1.3 to 5.1.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/immutable-js/immutable-js/releases">immutable's
releases</a>.</em></p>
<blockquote>
<h2>v5.1.5</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix Improperly Controlled Modification of Object Prototype
Attributes ('Prototype Pollution') in immutable</li>
<li>Upgrade devtools and use immutable version by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2158">immutable-js/immutable-js#2158</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.4...v5.1.5">https://github.com/immutable-js/immutable-js/compare/v5.1.4...v5.1.5</a></p>
<h2>v5.1.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Migrate some files to TS by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2125">immutable-js/immutable-js#2125</a>
<ul>
<li>Iterator.ts</li>
<li>PairSorting.ts</li>
<li>toJS.ts</li>
<li>Math.ts</li>
<li>Hash.ts</li>
</ul>
</li>
<li>Extract CollectionHelperMethods and convert to TS by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2131">immutable-js/immutable-js#2131</a></li>
<li>Use npm <a href="https://docs.npmjs.com/trusted-publishers">trusted
publishing only</a> to avoid token stealing.</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix/a11y issues by <a
href="https://github.com/lyannel"><code>@​lyannel</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2136">immutable-js/immutable-js#2136</a></li>
<li>Doc add Map.get signature update by <a
href="https://github.com/borracciaBlu"><code>@​borracciaBlu</code></a>
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2138">immutable-js/immutable-js#2138</a></li>
<li>fix(doc):minor-issues#2132 by <a
href="https://github.com/JayMeDotDot"><code>@​JayMeDotDot</code></a> in
<a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2133">immutable-js/immutable-js#2133</a></li>
<li>Fix algolia search by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2135">immutable-js/immutable-js#2135</a></li>
<li>Typo in OrderedMap by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2144">immutable-js/immutable-js#2144</a></li>
</ul>
<h3>Internal</h3>
<ul>
<li>chore: Sort all imports and activate eslint import rule by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2119">immutable-js/immutable-js#2119</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/JayMeDotDot"><code>@​JayMeDotDot</code></a>
made their first contribution in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2133">immutable-js/immutable-js#2133</a></li>
<li><a href="https://github.com/lyannel"><code>@​lyannel</code></a> made
their first contribution in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2136">immutable-js/immutable-js#2136</a></li>
<li><a
href="https://github.com/borracciaBlu"><code>@​borracciaBlu</code></a>
made their first contribution in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2138">immutable-js/immutable-js#2138</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.3...v5.1.4">https://github.com/immutable-js/immutable-js/compare/v5.1.3...v5.1.4</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md">immutable's
changelog</a>.</em></p>
<blockquote>
<h2>5.1.5</h2>
<ul>
<li>Fix Improperly Controlled Modification of Object Prototype
Attributes ('Prototype Pollution') in immutable</li>
</ul>
<h2>5.1.4</h2>
<ul>
<li>Migrate some files to TS by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2125">immutable-js/immutable-js#2125</a>
<ul>
<li>Iterator.ts</li>
<li>PairSorting.ts</li>
<li>toJS.ts</li>
<li>Math.ts</li>
<li>Hash.ts</li>
</ul>
</li>
<li>Extract CollectionHelperMethods and convert to TS by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2131">immutable-js/immutable-js#2131</a></li>
<li>Use npm <a href="https://docs.npmjs.com/trusted-publishers">trusted
publishing only</a> to avoid token stealing.</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix/a11y issues by <a
href="https://github.com/lyannel"><code>@​lyannel</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2136">immutable-js/immutable-js#2136</a></li>
<li>Doc add Map.get signature update by <a
href="https://github.com/borracciaBlu"><code>@​borracciaBlu</code></a>
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2138">immutable-js/immutable-js#2138</a></li>
<li>fix(doc):minor-issues#2132 by <a
href="https://github.com/JayMeDotDot"><code>@​JayMeDotDot</code></a> in
<a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2133">immutable-js/immutable-js#2133</a></li>
<li>Fix algolia search by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2135">immutable-js/immutable-js#2135</a></li>
<li>Typo in OrderedMap by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2144">immutable-js/immutable-js#2144</a></li>
</ul>
<h3>Internal</h3>
<ul>
<li>chore: Sort all imports and activate eslint import rule by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2119">immutable-js/immutable-js#2119</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b37b855686"><code>b37b855</code></a>
5.1.5</li>
<li><a
href="16b3313fdf"><code>16b3313</code></a>
Merge commit from fork</li>
<li><a
href="fd2ef4977e"><code>fd2ef49</code></a>
fix new proto key injection</li>
<li><a
href="6734b7b2af"><code>6734b7b</code></a>
fix Prototype Pollution in mergeDeep, toJS, etc.</li>
<li><a
href="6f772de1e4"><code>6f772de</code></a>
Merge pull request <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2175">#2175</a>
from immutable-js/dependabot/npm_and_yarn/rollup-4.59.0</li>
<li><a
href="5f3dc61fd0"><code>5f3dc61</code></a>
Bump rollup from 4.34.8 to 4.59.0</li>
<li><a
href="049a594410"><code>049a594</code></a>
Merge pull request <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2173">#2173</a>
from immutable-js/dependabot/npm_and_yarn/lodash-4.1...</li>
<li><a
href="2481a77331"><code>2481a77</code></a>
Merge pull request <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2172">#2172</a>
from mrazauskas/update-tstyche</li>
<li><a
href="eb047790b4"><code>eb04779</code></a>
Bump lodash from 4.17.21 to 4.17.23</li>
<li><a
href="b973bf3b62"><code>b973bf3</code></a>
format</li>
<li>Additional commits viewable in <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.3...v5.1.5">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for immutable since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=immutable&package-manager=npm_and_yarn&previous-version=5.1.3&new-version=5.1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/wavetermdev/waveterm/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 16:17:35 -08:00
Mike Sawka
c65147da1b
add sponsor section to readme (#2978) 2026-03-04 13:12:55 -08:00
Mike Sawka
ceca94bc3c
add funding.yml file (#2977) 2026-03-04 13:05:40 -08:00
Copilot
f4acfc9456
Add virtualized flat-list TreeView component and preview sandbox (#2972)
This PR introduces a new frontend TreeView widget intended for
VSCode-style explorer use cases, without backend wiring yet. It provides
a reusable, backend-agnostic API with virtualization, flat visible-row
projection, and preview coverage under `frontend/preview`.

- **What this adds**
- New `TreeView` component in `frontend/app/treeview/treeview.tsx`
designed around:
    - flat `visibleRows` projection with `depth` (not recursive render)
    - TanStack Virtual row virtualization
    - responsive width constraints + horizontal/vertical scrolling
    - single-selection, expand/collapse, and basic keyboard navigation
- New preview: `frontend/preview/previews/treeview.preview.tsx` with
async mocked directory loading and width controls.
- Focused tests: `frontend/app/treeview/treeview.test.ts` for
projection/sorting/synthetic-row behavior.

- **Tree model + projection behavior**
- Defines a canonical `TreeNodeData` wrapper (separate from direct
`FileInfo` coupling) with:
- `id`, `parentId`, `isDirectory`, `mimeType`, flags, `childrenStatus`,
`childrenIds`, `capInfo`
- Builds `visibleRows` from `nodesById + expandedIds` and injects
synthetic rows for:
    - `loading`
    - `error`
    - `capped` (“Showing first N entries”)

- **Interaction model implemented**
  - Click: select row
  - Double-click directory (or chevron click): expand/collapse
  - Double-click file: emits `onOpenFile`
  - Keyboard:
    - Up/Down: move visible selection
    - Left: collapse selected dir or move to parent
    - Right: expand selected dir or move to first child

- **Sorting + icon strategy**
  - Child sorting is deterministic and stable:
    - directories first
    - case-insensitive label order
    - id/path tie-breaker
- Icon resolution supports directory/file/error states and simple
mimetype/extension fallbacks.

- **Example usage**
```tsx
<TreeView
    rootIds={["workspace:/"]}
    initialNodes={{ "workspace:/": { id: "workspace:/", isDirectory: true, childrenStatus: "unloaded" } }}
    fetchDir={async (id, limit) => ({ nodes: data[id].slice(0, limit), capped: data[id].length > limit })}
    maxDirEntries={120}
    minWidth={100}
    maxWidth={400}
    height={420}
    onSelectionChange={(id) => setSelection(id)}
/>
```

- **<screenshot>**
-
https://github.com/user-attachments/assets/6f8b8a2a-f9a1-454d-bf4f-1d4a97b6e123

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-03-03 18:25:42 -08:00
wave-builder[bot]
d47329d491
chore: bump package version to 0.14.1 2026-03-03 23:22:35 +00:00
Mike Sawka
98c374b8cd
quick updates to get apptype (#2969) 2026-03-03 15:19:23 -08:00
wave-builder[bot]
c411df40d5
chore: bump package version to 0.14.1-beta.1 2026-03-03 17:01:46 +00:00
Copilot
e2b2498741
UI component for vertical tab bar
Dragging in the vertical tab bar had two UX artifacts: the drop marker
reserved layout space (leaving a visible accent gap above selected
tabs), and hover styling could remain on the old row after drop until
the mouse moved. This updates drag visuals to be overlay-based and
forces hover recalculation at drag end.

- **Drop marker moved out of flow (no selected-tab accent gap)**
- Replaced per-row in-flow divider placeholders with a single absolutely
positioned drop line in the scroll container.
- Drop line now aligns to actual tab boundaries (`offsetTop` /
`offsetHeight`) so it covers the divider location directly.

- **Drop target rendering simplified**
- Container is `relative`; marker is conditionally rendered only while
reordering.
- `dropLineTop` is tracked during drag events and used to position the
marker without affecting layout.

- **Stale hover state cleared after drop**
- Added a minimal drag-lifecycle reset mechanism (`hoverResetVersion`)
and used it in `VTab` keys.
- On drag end/drop, rows remount once, clearing browser-retained
`:hover` on the old index immediately.

```tsx
<VTab key={`${tab.id}:${hoverResetVersion}`} ... />

{dragTabId != null && dropIndex != null && dropLineTop != null && (
    <div
        className="pointer-events-none absolute left-0 right-0 border-t-2 border-accent/80"
        style={{ top: dropLineTop, transform: "translateY(-1px)" }}
    />
)}
```

- **<screenshot>**
-
https://github.com/user-attachments/assets/8c25ef6f-c600-484e-a4fa-6ac83657b484

<!-- START COPILOT CODING AGENT TIPS -->
---

🔒 GitHub Advanced Security automatically protects Copilot coding agent
pull requests. You can protect all pull requests by enabling Advanced
Security for your repositories. [Learn more about Advanced
Security.](https://gh.io/cca-advanced-security)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-03-03 09:00:34 -08:00
Mike Sawka
b5d23e544e
v0.14.1 Release Notes and Onboarding (#2966) 2026-03-03 08:58:31 -08:00
Copilot
df24959e23
Add native 2+ arg RPC support and wire a concrete TestMultiArgCommand through server, generated clients, and CLI (#2963)
This PR extends WSH RPC command signatures to support `ctx + 2+ typed
args` while preserving existing `ctx` and `ctx + 1 arg` behavior. It
also adds a concrete `TestMultiArgCommand` end-to-end so the generated
Go/TS client surfaces can be inspected and exercised from CLI.

- **RPC wire + dispatch model**
- Added `wshrpc.MultiArg` (`args []any`) as the over-the-wire envelope
for 2+ arg commands.
- Extended RPC metadata to track all command arg types
(`CommandDataTypes`) and exposed a helper for normalized access.
  - Updated server adapter unmarshalling to:
    - decode `MultiArg` for 2+ arg commands,
    - validate arg count,
- re-unmarshal each arg into its declared type before invoking typed
handlers.
  - Kept single-arg commands on the existing non-`MultiArg` path.

- **Code generation (Go + TS)**
- Go codegen now emits multi-parameter wrappers for 2+ arg methods and
packs payload as `wshrpc.MultiArg`.
- TS codegen now emits multi-parameter API methods and packs payload as
`{ args: [...] }`.
  - 0/1-arg generation remains unchanged to avoid wire/API churn.

- **Concrete command added for validation**
  - Added to `WshRpcInterface`:
- `TestMultiArgCommand(ctx context.Context, arg1 string, arg2 int, arg3
bool) (string, error)`
- Implemented in `wshserver` with deterministic formatted return output
including source + all args.
- Updated `wsh test` command to call `TestMultiArgCommand` and print the
returned string.

- **Focused coverage**
- Added/updated targeted tests around RPC metadata and Go/TS multi-arg
codegen behavior, including command declaration for `testmultiarg`.

Example generated call shape:

```go
func TestMultiArgCommand(w *wshutil.WshRpc, arg1 string, arg2 int, arg3 bool, opts *wshrpc.RpcOpts) (string, error) {
    return sendRpcRequestCallHelper[string](
        w,
        "testmultiarg",
        wshrpc.MultiArg{Args: []any{arg1, arg2, arg3}},
        opts,
    )
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-03-02 12:29:04 -08:00
Copilot
9d89f4372c
Complete onboarding preview coverage for init/telemetry-star flow and align preview state wiring (#2965)
The onboarding preview was missing the first two pages in the
new-install flow (`InitPage` and `NoTelemetryStarPage`). This update
adds those views to the preview and aligns state access with the current
store pattern so they render correctly in preview mode.

- **Preview coverage**
- Added `InitPage` and `NoTelemetryStarPage` to
`frontend/preview/previews/onboarding.preview.tsx` so the full early
onboarding path is visible in the preview server.

- **Settings access modernization**
- Replaced full `settingsAtom` usage in `InitPage` with targeted
`useSettingsKeyAtom("telemetry:enabled")`.
- Removes broad settings dependency and uses the existing preview-safe
settings path.

- **Preview bootstrap state init**
- Added `ClientModel.getInstance().initialize(null)` in
`frontend/preview/preview.tsx` to ensure `clientAtom` is initialized in
preview runtime without backend client data.

```tsx
// onboarding.tsx
const telemetrySetting = useSettingsKeyAtom("telemetry:enabled");
const clientData = useAtomValue(ClientModel.getInstance().clientAtom);
const [telemetryEnabled, setTelemetryEnabled] = useState<boolean>(!!telemetrySetting);

// preview.tsx
setWaveWindowType("preview");
ClientModel.getInstance().initialize(null);
```

- **<screenshot>**
- ![Onboarding
preview](https://github.com/user-attachments/assets/bf1aeb3d-3fd0-4169-bd3b-a79e1a865ca8)

<!-- START COPILOT CODING AGENT TIPS -->
---

🔒 GitHub Advanced Security automatically protects Copilot coding agent
pull requests. You can protect all pull requests by enabling Advanced
Security for your repositories. [Learn more about Advanced
Security.](https://gh.io/cca-advanced-security)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-03-02 12:28:29 -08:00
Copilot
4ec09cb611
Centralize proxy HTTP client creation in aiutil and remove redundant backend tests (#2961)
`makeHTTPClient(proxyURL)` had been duplicated across AI backends with
equivalent behavior. This change consolidates the logic into a single
helper in `aiutil` and updates backends to consume it, then removes
backend-local tests that only re-verified that shared utility behavior.

- **Shared client construction**
- Added `aiutil.MakeHTTPClient(proxyURL string) (*http.Client, error)`
in `pkg/aiusechat/aiutil/aiutil.go`.
- Standardizes proxy parsing and `http.Transport.Proxy` setup in one
place.
- Keeps streaming-safe client semantics (`Timeout: 0`) and existing
invalid proxy URL error behavior.

- **Backend refactor**
  - Removed duplicated client/proxy setup blocks from:
    - `pkg/aiusechat/openaichat/openaichat-backend.go`
    - `pkg/aiusechat/gemini/gemini-backend.go`
    - `pkg/aiusechat/openai/openai-backend.go`
    - `pkg/aiusechat/anthropic/anthropic-backend.go`
  - Replaced with direct calls to the shared helper.

- **Test cleanup**
- Deleted backend tests that only covered basic proxy client creation
and no backend-specific behavior:
    - `pkg/aiusechat/openaichat/openaichat-backend_test.go`
    - `pkg/aiusechat/gemini/gemini-backend_test.go`

```go
httpClient, err := aiutil.MakeHTTPClient(chatOpts.Config.ProxyURL)
if err != nil {
    return nil, nil, nil, err
}
resp, err := httpClient.Do(req)
```

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-03-02 11:16:50 -08:00
Copilot
95a97ca932
Add Onboarding Flows to Preview Server (#2960)
`FilesPage` was previously previewed through a special path because
`EditBashrcCommand` (Monaco via `CodeEditor`) threw in preview mode.
With preview/global handling now fixed, preview can run the real Files
onboarding flow end-to-end without command overrides.

- **Files preview now uses the real FilesPage path**
  - `OnboardingPreview` renders `FilesPage` directly.
- Removed preview-only command injection/override behavior for Files
onboarding.

- **Reverted FilesPage customization**
  - Dropped optional command renderer plumbing added for preview.
  - Restored FilesPage to its original internal command rotation:
    `EditBashrcCommand -> ViewShortcutsCommand -> ViewLogoCommand`.

- **Result**
  - No Files-specific preview fork remains.
  - Preview and production use the same FilesPage command lifecycle.

```tsx
const commands = [
    (onComplete: () => void) => <EditBashrcCommand onComplete={onComplete} />,
    (onComplete: () => void) => <ViewShortcutsCommand isMac={isMac} onComplete={onComplete} />,
    (onComplete: () => void) => <ViewLogoCommand onComplete={onComplete} />,
];
```

<screenshot>

![Onboarding FilesPage preview using default
commands](https://github.com/user-attachments/assets/c5baf015-6204-41da-b72b-408ef137f32b)

</screenshot>

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/wavetermdev/waveterm/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-03-02 11:06:01 -08:00
Mike Sawka
cff84773a6
minor changes (#2962) 2026-02-28 15:48:52 -08:00
wave-builder[bot]
e8d6ff5b05
chore: bump package version to 0.14.1-beta.0 2026-02-28 02:08:29 +00:00
Copilot
9c3cf984e8
Make frontend CSS color validation Chromium-only (remove DOM style fallback) (#2946)
The new color validator is used exclusively in the Electron/Chromium
frontend, so fallback parsing via temporary DOM elements is unnecessary.
This update tightens the implementation to rely on the browser-native
CSS capability check only.

- **Scope**
- Keep `validateCssColor(color: string): string` behavior unchanged
(returns normalized type for valid colors, throws on invalid).
  - Remove non-Chromium fallback logic from validation path.

- **Implementation**
  - **`frontend/util/color-validator.ts`**
    - `isValidCssColor` now exclusively uses:
      - `CSS.supports("color", color)`
- Removed fallback using `document.createElement(...).style.color`
assignment/parsing.

- **Behavioral contract (unchanged)**
- Valid values still return specific type strings (`hex`, `hex8`, `rgb`,
`rgba`, `hsl`, `keyword`, etc.).
  - Invalid values still throw `Error("Invalid CSS color: ...")`.

```ts
function isValidCssColor(color: string): boolean {
    if (typeof CSS == "undefined" || typeof CSS.supports != "function") {
        return false;
    }
    return CSS.supports("color", color);
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/wavetermdev/waveterm/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-02-27 15:48:56 -08:00
Mike Sawka
b1d11f72c4
add noprofile/noninteractive to all powershell commands (#2959) 2026-02-27 15:46:36 -08:00
dependabot[bot]
350242d7b3
Bump rollup from 4.50.1 to 4.59.0 (#2958)
Bumps [rollup](https://github.com/rollup/rollup) from 4.50.1 to 4.59.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rollup/rollup/releases">rollup's
releases</a>.</em></p>
<blockquote>
<h2>v4.59.0</h2>
<h2>4.59.0</h2>
<p><em>2026-02-22</em></p>
<h3>Features</h3>
<ul>
<li>Throw when the generated bundle contains paths that would leave the
output directory (<a
href="https://redirect.github.com/rollup/rollup/issues/6276">#6276</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6275">#6275</a>:
Validate bundle stays within output dir (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<h2>v4.58.0</h2>
<h2>4.58.0</h2>
<p><em>2026-02-20</em></p>
<h3>Features</h3>
<ul>
<li>Also support <code>__NO_SIDE_EFFECTS__</code> annotation before
variable declarations declaring function expressions (<a
href="https://redirect.github.com/rollup/rollup/issues/6272">#6272</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6256">#6256</a>:
docs: document PreRenderedChunk properties including isDynamicEntry and
isImplicitEntry (<a
href="https://github.com/njg7194"><code>@​njg7194</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6259">#6259</a>:
docs: Correct typo and improve sentence structure in docs for
<code>output.experimentalMinChunkSize</code> (<a
href="https://github.com/millerick"><code>@​millerick</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6260">#6260</a>:
fix(deps): update rust crate swc_compiler_base to v47 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6261">#6261</a>:
fix(deps): lock file maintenance minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6262">#6262</a>:
Avoid unnecessary cloning of the code string (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6263">#6263</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6265">#6265</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6267">#6267</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6268">#6268</a>:
chore(deps): update dependency eslint-plugin-unicorn to v63 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6269">#6269</a>:
chore(deps): update dependency lru-cache to v11 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6270">#6270</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6272">#6272</a>:
forward NO_SIDE_EFFECTS annotations to function expressions in variable
declarations (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<h2>v4.57.1</h2>
<h2>4.57.1</h2>
<p><em>2026-01-30</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Fix heap corruption issue in Windows (<a
href="https://redirect.github.com/rollup/rollup/issues/6251">#6251</a>)</li>
<li>Ensure exports of a dynamic import are fully included when called
from a try...catch (<a
href="https://redirect.github.com/rollup/rollup/issues/6254">#6254</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6251">#6251</a>:
fix: Isolate and cache <code>process.report.getReport()</code> calls in
a child process for robust environment detection (<a
href="https://github.com/alan-agius4"><code>@​alan-agius4</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rollup/rollup/blob/master/CHANGELOG.md">rollup's
changelog</a>.</em></p>
<blockquote>
<h2>4.59.0</h2>
<p><em>2026-02-22</em></p>
<h3>Features</h3>
<ul>
<li>Throw when the generated bundle contains paths that would leave the
output directory (<a
href="https://redirect.github.com/rollup/rollup/issues/6276">#6276</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6275">#6275</a>:
Validate bundle stays within output dir (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<h2>4.58.0</h2>
<p><em>2026-02-20</em></p>
<h3>Features</h3>
<ul>
<li>Also support <code>__NO_SIDE_EFFECTS__</code> annotation before
variable declarations declaring function expressions (<a
href="https://redirect.github.com/rollup/rollup/issues/6272">#6272</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6256">#6256</a>:
docs: document PreRenderedChunk properties including isDynamicEntry and
isImplicitEntry (<a
href="https://github.com/njg7194"><code>@​njg7194</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6259">#6259</a>:
docs: Correct typo and improve sentence structure in docs for
<code>output.experimentalMinChunkSize</code> (<a
href="https://github.com/millerick"><code>@​millerick</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6260">#6260</a>:
fix(deps): update rust crate swc_compiler_base to v47 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6261">#6261</a>:
fix(deps): lock file maintenance minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6262">#6262</a>:
Avoid unnecessary cloning of the code string (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6263">#6263</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6265">#6265</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6267">#6267</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6268">#6268</a>:
chore(deps): update dependency eslint-plugin-unicorn to v63 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6269">#6269</a>:
chore(deps): update dependency lru-cache to v11 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6270">#6270</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6272">#6272</a>:
forward NO_SIDE_EFFECTS annotations to function expressions in variable
declarations (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<h2>4.57.1</h2>
<p><em>2026-01-30</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Fix heap corruption issue in Windows (<a
href="https://redirect.github.com/rollup/rollup/issues/6251">#6251</a>)</li>
<li>Ensure exports of a dynamic import are fully included when called
from a try...catch (<a
href="https://redirect.github.com/rollup/rollup/issues/6254">#6254</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6251">#6251</a>:
fix: Isolate and cache <code>process.report.getReport()</code> calls in
a child process for robust environment detection (<a
href="https://github.com/alan-agius4"><code>@​alan-agius4</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6252">#6252</a>:
chore(deps): update dependency lru-cache to v11 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6253">#6253</a>:
chore(deps): lock file maintenance minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6254">#6254</a>:
Fully include dynamic imports in a try-catch (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ae846957f1"><code>ae84695</code></a>
4.59.0</li>
<li><a
href="b39616e917"><code>b39616e</code></a>
Update audit-resolve</li>
<li><a
href="c60770d7aa"><code>c60770d</code></a>
Validate bundle stays within output dir (<a
href="https://redirect.github.com/rollup/rollup/issues/6275">#6275</a>)</li>
<li><a
href="33f39c1f20"><code>33f39c1</code></a>
4.58.0</li>
<li><a
href="b61c40803b"><code>b61c408</code></a>
forward NO_SIDE_EFFECTS annotations to function expressions in variable
decla...</li>
<li><a
href="7f00689ec9"><code>7f00689</code></a>
Extend agent instructions</li>
<li><a
href="e7b2b85af0"><code>e7b2b85</code></a>
chore(deps): lock file maintenance (<a
href="https://redirect.github.com/rollup/rollup/issues/6270">#6270</a>)</li>
<li><a
href="2aa5da9baf"><code>2aa5da9</code></a>
fix(deps): update minor/patch updates (<a
href="https://redirect.github.com/rollup/rollup/issues/6267">#6267</a>)</li>
<li><a
href="4319837c54"><code>4319837</code></a>
chore(deps): update dependency lru-cache to v11 (<a
href="https://redirect.github.com/rollup/rollup/issues/6269">#6269</a>)</li>
<li><a
href="c3b6b4bdc4"><code>c3b6b4b</code></a>
chore(deps): update dependency eslint-plugin-unicorn to v63 (<a
href="https://redirect.github.com/rollup/rollup/issues/6268">#6268</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/rollup/rollup/compare/v4.50.1...v4.59.0">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for rollup since your current version.</p>
</details>
<details>
<summary>Install script changes</summary>
<p>This version modifies <code>prepare</code> script that runs during
installation. Review the package contents before updating.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rollup&package-manager=npm_and_yarn&previous-version=4.50.1&new-version=4.59.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/wavetermdev/waveterm/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 15:44:33 -08:00
Copilot
4956c92c55
Make Wave home config writes atomic and serialized to avoid watcher partial reads (#2945)
`WriteWaveHomeConfigFile()` previously used direct `os.WriteFile`, which
can expose truncation/partial-write states to the JSON file watcher.
This change switches config persistence to temp-file + rename semantics
and serializes writes through a single process-wide lock for config file
writes.

- **Atomic file write helper**
  - Added `AtomicWriteFile()` in `pkg/util/fileutil/fileutil.go`.
- Writes to `<filename>.tmp` in the same directory, then renames to the
target path.
  - Performs temp-file cleanup on error paths.
- Introduced a shared suffix constant (`TempFileSuffix`) used by
implementation/tests.

- **Config write path update**
- Updated `WriteWaveHomeConfigFile()` in `pkg/wconfig/settingsconfig.go`
to:
- Use a package-level mutex (`configWriteLock`) so only one config write
runs at a time (across all config files).
- Call `fileutil.AtomicWriteFile(...)` instead of direct
`os.WriteFile(...)`.

- **Focused coverage for atomic behavior**
  - Added `pkg/util/fileutil/fileutil_test.go` with tests for:
- Successful atomic write (target file contains expected payload and no
leftover `.tmp` file).
    - Rename-failure path cleanup (temp file is removed).

```go
func WriteWaveHomeConfigFile(fileName string, m waveobj.MetaMapType) error {
    configWriteLock.Lock()
    defer configWriteLock.Unlock()

    fullFileName := filepath.Join(wavebase.GetWaveConfigDir(), fileName)
    barr, err := jsonMarshalConfigInOrder(m)
    if err != nil {
        return err
    }
    return fileutil.AtomicWriteFile(fullFileName, barr, 0644)
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

🔒 GitHub Advanced Security automatically protects Copilot coding agent
pull requests. You can protect all pull requests by enabling Advanced
Security for your repositories. [Learn more about Advanced
Security.](https://gh.io/cca-advanced-security)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-02-27 15:43:37 -08:00
Mike Sawka
e8ebe88651
Fix for Claude Code Scroll to Top Bug (#2956)
There may be more cases here that I don't know about, but this fixes a
good chunk of them. This catches the CC "repaint" transaction and forces
a scrollToBottom. That should handle context repaints and resize
repaints.

Also adds a new (hidden) terminal escape sequence debugger, and (in dev
mode) adds a last 50 writes cache that can be used to look at and debug
output.
2026-02-27 15:34:35 -08:00
Mike Sawka
1ab58ea98a
Fix bugs with connection switching (#2957)
* Add per blockId mutex to block controller resync
* Pass initial termsize through to startJob
2026-02-27 15:23:55 -08:00
dependabot[bot]
27f77f23d6
Bump the dev-dependencies-minor group with 4 updates (#2953)
Bumps the dev-dependencies-minor group with 4 updates:
[@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite),
[tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss),
[eslint-plugin-mdx](https://github.com/mdx-js/eslint-mdx) and
[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli).

Updates `@tailwindcss/vite` from 4.1.18 to 4.2.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@​tailwindcss/vite</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v4.2.1</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>v4.2.0</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@​tailwindcss/vite</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.1] - 2026-02-23</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>[4.2.0] - 2026-02-18</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1dce64ee7e"><code>1dce64e</code></a>
4.2.1 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19714">#19714</a>)</li>
<li><a
href="1b16411919"><code>1b16411</code></a>
4.2.0 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19695">#19695</a>)</li>
<li><a
href="d9fff9f595"><code>d9fff9f</code></a>
docs: update package README CI badge to main (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19692">#19692</a>)</li>
<li><a
href="bc6e4b85bf"><code>bc6e4b8</code></a>
Fallback to <code>config.createResolver</code> for <code>client</code>
and <code>ssr</code> environments in `@...</li>
<li><a
href="f212b0fc22"><code>f212b0f</code></a>
fix: restore full page reload for watched external files on Vite 7.1+
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19670">#19670</a>)</li>
<li><a
href="8ed67bf551"><code>8ed67bf</code></a>
Fix Tailwind CSS package README GitHub links (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19644">#19644</a>)</li>
<li><a
href="e3e85b364f"><code>e3e85b3</code></a>
[tailwindcss-vite] Add Register dependency messages logline (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19611">#19611</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/@tailwindcss-vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `tailwindcss` from 4.1.18 to 4.2.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases">tailwindcss's
releases</a>.</em></p>
<blockquote>
<h2>v4.2.1</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>v4.2.0</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md">tailwindcss's
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.1] - 2026-02-23</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>[4.2.0] - 2026-02-18</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1dce64ee7e"><code>1dce64e</code></a>
4.2.1 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19714">#19714</a>)</li>
<li><a
href="d15d92ca60"><code>d15d92c</code></a>
Allow trailing dash in functional utility names (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19696">#19696</a>)</li>
<li><a
href="1b16411919"><code>1b16411</code></a>
4.2.0 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19695">#19695</a>)</li>
<li><a
href="6118f4f6a7"><code>6118f4f</code></a>
Fix/misc docs and tests (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19652">#19652</a>)</li>
<li><a
href="5a4a7eba3a"><code>5a4a7eb</code></a>
fix(canonicalize): prevent collapse cache pollution across calls (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19675">#19675</a>)</li>
<li><a
href="d0a5612872"><code>d0a5612</code></a>
Add mauve, olive, mist, and taupe color palettes (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19627">#19627</a>)</li>
<li><a
href="d9fff9f595"><code>d9fff9f</code></a>
docs: update package README CI badge to main (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19692">#19692</a>)</li>
<li><a
href="ed52d3e6c9"><code>ed52d3e</code></a>
feat: handle backslash in <code>@utility</code> name (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19626">#19626</a>)</li>
<li><a
href="6eb3b32434"><code>6eb3b32</code></a>
Allow multiples of <code>.25</code> in <code>aspect-*</code> fractions
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19688">#19688</a>)</li>
<li><a
href="8ed67bf551"><code>8ed67bf</code></a>
Fix Tailwind CSS package README GitHub links (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19644">#19644</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/tailwindcss">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for tailwindcss since your current version.</p>
</details>
<br />

Updates `eslint-plugin-mdx` from 3.6.2 to 3.7.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mdx-js/eslint-mdx/releases">eslint-plugin-mdx's
releases</a>.</em></p>
<blockquote>
<h2>eslint-plugin-mdx@3.7.0</h2>
<h3>Minor Changes</h3>
<ul>
<li><a
href="https://redirect.github.com/mdx-js/eslint-mdx/pull/602">#602</a>
<a
href="e189e74c4a"><code>e189e74</code></a>
Thanks <a
href="https://github.com/astrochemx"><code>@​astrochemx</code></a>! -
feat: <code>eslint</code> 10 support</li>
</ul>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a
href="https://redirect.github.com/mdx-js/eslint-mdx/pull/606">#606</a>
<a
href="a38199079b"><code>a381990</code></a>
Thanks <a
href="https://github.com/remcohaszing"><code>@​remcohaszing</code></a>!
- chore: use OIDC for publishing</p>
</li>
<li>
<p>Updated dependencies [<a
href="a38199079b"><code>a381990</code></a>,
<a
href="00a836938f"><code>00a8369</code></a>]:</p>
<ul>
<li>eslint-mdx@3.7.0</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f717ff284a"><code>f717ff2</code></a>
chore: release package(s) (<a
href="https://redirect.github.com/mdx-js/eslint-mdx/issues/603">#603</a>)</li>
<li><a
href="a38199079b"><code>a381990</code></a>
chore: use OIDC for publishing (<a
href="https://redirect.github.com/mdx-js/eslint-mdx/issues/606">#606</a>)</li>
<li><a
href="00a836938f"><code>00a8369</code></a>
fix: remove unneeded dependency upon uvu (<a
href="https://redirect.github.com/mdx-js/eslint-mdx/issues/600">#600</a>)</li>
<li><a
href="e189e74c4a"><code>e189e74</code></a>
feat: <code>eslint</code> 10 support (<a
href="https://redirect.github.com/mdx-js/eslint-mdx/issues/602">#602</a>)</li>
<li>See full diff in <a
href="https://github.com/mdx-js/eslint-mdx/compare/eslint-plugin-mdx@3.6.2...eslint-plugin-mdx@3.7.0">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for eslint-plugin-mdx since your current
version.</p>
</details>
<br />

Updates `@tailwindcss/cli` from 4.1.18 to 4.2.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@​tailwindcss/cli</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v4.2.1</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>v4.2.0</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@​tailwindcss/cli</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.1] - 2026-02-23</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>[4.2.0] - 2026-02-18</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1dce64ee7e"><code>1dce64e</code></a>
4.2.1 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19714">#19714</a>)</li>
<li><a
href="1b16411919"><code>1b16411</code></a>
4.2.0 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19695">#19695</a>)</li>
<li><a
href="d9c4cd8c7c"><code>d9c4cd8</code></a>
Update enhanced-resolve 5.18.4 → 5.19.0 (minor) (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19658">#19658</a>)</li>
<li><a
href="d9fff9f595"><code>d9fff9f</code></a>
docs: update package README CI badge to main (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19692">#19692</a>)</li>
<li><a
href="8ed67bf551"><code>8ed67bf</code></a>
Fix Tailwind CSS package README GitHub links (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19644">#19644</a>)</li>
<li><a
href="d6ad8dddcf"><code>d6ad8dd</code></a>
Update enhanced-resolve 5.18.3 → 5.18.4 (patch) (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19462">#19462</a>)</li>
<li><a
href="219e019b24"><code>219e019</code></a>
CLI: Emit comment when source maps are saved to files (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/19447">#19447</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/@tailwindcss-cli">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 15:09:58 -08:00
dependabot[bot]
237dfa71c7
Bump google.golang.org/api from 0.267.0 to 0.269.0 (#2951)
Bumps
[google.golang.org/api](https://github.com/googleapis/google-api-go-client)
from 0.267.0 to 0.269.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/google-api-go-client/releases">google.golang.org/api's
releases</a>.</em></p>
<blockquote>
<h2>v0.269.0</h2>
<h2><a
href="https://github.com/googleapis/google-api-go-client/compare/v0.268.0...v0.269.0">0.269.0</a>
(2026-02-24)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3512">#3512</a>)
(<a
href="7565f1ce32">7565f1c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>generator:</strong> Handle preview version pkg name (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3511">#3511</a>)
(<a
href="2a249ce376">2a249ce</a>)</li>
</ul>
<h2>v0.268.0</h2>
<h2><a
href="https://github.com/googleapis/google-api-go-client/compare/v0.267.0...v0.268.0">0.268.0</a>
(2026-02-23)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3502">#3502</a>)
(<a
href="5ccf9b931d">5ccf9b9</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3505">#3505</a>)
(<a
href="f405df9cfc">f405df9</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3506">#3506</a>)
(<a
href="cda923ae8e">cda923a</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3507">#3507</a>)
(<a
href="e9015cc268">e9015cc</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3508">#3508</a>)
(<a
href="20fbcc1321">20fbcc1</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3509">#3509</a>)
(<a
href="20c1e0f7c7">20c1e0f</a>)</li>
<li>Update to go 1.26 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3504">#3504</a>)
(<a
href="cc5baec2a4">cc5baec</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md">google.golang.org/api's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/google-api-go-client/compare/v0.268.0...v0.269.0">0.269.0</a>
(2026-02-24)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3512">#3512</a>)
(<a
href="7565f1ce32">7565f1c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>generator:</strong> Handle preview version pkg name (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3511">#3511</a>)
(<a
href="2a249ce376">2a249ce</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/google-api-go-client/compare/v0.267.0...v0.268.0">0.268.0</a>
(2026-02-23)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3502">#3502</a>)
(<a
href="5ccf9b931d">5ccf9b9</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3505">#3505</a>)
(<a
href="f405df9cfc">f405df9</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3506">#3506</a>)
(<a
href="cda923ae8e">cda923a</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3507">#3507</a>)
(<a
href="e9015cc268">e9015cc</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3508">#3508</a>)
(<a
href="20fbcc1321">20fbcc1</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3509">#3509</a>)
(<a
href="20c1e0f7c7">20c1e0f</a>)</li>
<li>Update to go 1.26 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3504">#3504</a>)
(<a
href="cc5baec2a4">cc5baec</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="312ac01a52"><code>312ac01</code></a>
chore(main): release 0.268.1 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3513">#3513</a>)</li>
<li><a
href="7565f1ce32"><code>7565f1c</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3512">#3512</a>)</li>
<li><a
href="2a249ce376"><code>2a249ce</code></a>
fix(generator): handle preview version pkg name (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3511">#3511</a>)</li>
<li><a
href="26ea8895bb"><code>26ea889</code></a>
chore(all): update all (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3498">#3498</a>)</li>
<li><a
href="5b078d9393"><code>5b078d9</code></a>
chore(main): release 0.268.0 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3503">#3503</a>)</li>
<li><a
href="20c1e0f7c7"><code>20c1e0f</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3509">#3509</a>)</li>
<li><a
href="20fbcc1321"><code>20fbcc1</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3508">#3508</a>)</li>
<li><a
href="e9015cc268"><code>e9015cc</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3507">#3507</a>)</li>
<li><a
href="cc5baec2a4"><code>cc5baec</code></a>
feat: update to go 1.26 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3504">#3504</a>)</li>
<li><a
href="cda923ae8e"><code>cda923a</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3506">#3506</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/google-api-go-client/compare/v0.267.0...v0.269.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/api&package-manager=go_modules&previous-version=0.267.0&new-version=0.269.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 15:08:43 -08:00
dependabot[bot]
aa7befb5f1
Bump electron-builder from 26.8.0 to 26.8.1 in the electron-patch group (#2954)
Bumps the electron-patch group with 1 update:
[electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder).

Updates `electron-builder` from 26.8.0 to 26.8.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/electron-userland/electron-builder/releases">electron-builder's
releases</a>.</em></p>
<blockquote>
<h2>electron-builder@26.8.1</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: always use package key when reading from dependency list
instead of package <code>name</code> by <a
href="https://github.com/mmaietta"><code>@​mmaietta</code></a> in <a
href="https://redirect.github.com/electron-userland/electron-builder/pull/9583">electron-userland/electron-builder#9583</a></li>
<li>chore: add logging summary to end of node collector to flag any
special cases/alerts by <a
href="https://github.com/mmaietta"><code>@​mmaietta</code></a> in <a
href="https://redirect.github.com/electron-userland/electron-builder/pull/9587">electron-userland/electron-builder#9587</a></li>
<li>chore: adding tolerance threshold (within 10 bytes) to vitest
snapshots to adjust for package manager instabilities by <a
href="https://github.com/mmaietta"><code>@​mmaietta</code></a> in <a
href="https://redirect.github.com/electron-userland/electron-builder/pull/9591">electron-userland/electron-builder#9591</a></li>
<li>chore: update node_modules snapshots due to transitive fixture
dependency changed by <a
href="https://github.com/mmaietta"><code>@​mmaietta</code></a> in <a
href="https://redirect.github.com/electron-userland/electron-builder/pull/9592">electron-userland/electron-builder#9592</a></li>
<li>fix(appimage): fix mime type directory in AppDir by <a
href="https://github.com/sabonerune"><code>@​sabonerune</code></a> in <a
href="https://redirect.github.com/electron-userland/electron-builder/pull/9589">electron-userland/electron-builder#9589</a></li>
<li>chore(deploy): Release (next) by <a
href="https://github.com/electron-builder-release-bot"><code>@​electron-builder-release-bot</code></a>[bot]
in <a
href="https://redirect.github.com/electron-userland/electron-builder/pull/9585">electron-userland/electron-builder#9585</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/electron-userland/electron-builder/compare/electron-builder@26.8.0...electron-builder@26.8.1">https://github.com/electron-userland/electron-builder/compare/electron-builder@26.8.0...electron-builder@26.8.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md">electron-builder's
changelog</a>.</em></p>
<blockquote>
<h2>26.8.1</h2>
<h3>Patch Changes</h3>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p><a
href="4edd695045"><code>4edd695</code></a>
<a
href="8940ec63ba"><code>8940ec6</code></a>
<a
href="4edd695045"><code>4edd695</code></a>
<a
href="dde4309b91"><code>dde4309</code></a></p>
<!-- raw HTML omitted -->
<ul>
<li><code>app-builder-lib@26.8.1</code></li>
<li><code>builder-util@26.8.1</code></li>
<li><code>dmg-builder@26.8.1</code></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9418d2c0fb"><code>9418d2c</code></a>
chore(deploy): Release v26.8.1 (<a
href="https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder/issues/9585">#9585</a>)</li>
<li>See full diff in <a
href="https://github.com/electron-userland/electron-builder/commits/electron-builder@26.8.1/packages/electron-builder">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=electron-builder&package-manager=npm_and_yarn&previous-version=26.8.0&new-version=26.8.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 15:08:16 -08:00
Copilot
b2f3129aa0
Add wsh debugterm (#2947)
`wsh debugterm` currently decodes terminal bytes sourced from backend
block files. This extends it with a stdin-driven path so FE-emitted
payloads like `["...", "..."]` can be decoded directly without requiring
block lookup/RPC in that mode.

- **CLI surface**
  - Added new mode: `--mode stdin`
  - Updated mode help text to: `hex`, `decode`, `stdin`
  - Centralized mode validation via `getDebugTermMode()`

- **Execution path split**
  - Added mode-aware pre-run (`debugTermPreRun`):
    - `stdin` mode: skips RPC setup
    - `hex`/`decode`: keeps existing RPC setup behavior
  - `stdin` mode now:
    - reads all stdin
    - parses JSON as `[]string`
    - concatenates entries and runs existing decode formatter

- **Parsing support**
  - Added `parseDebugTermStdinData([]byte) ([]byte, error)`
  - Error messaging explicitly requires a JSON array of strings

- **Tests**
  - Added focused coverage for:
    - valid stdin JSON array parsing + decoded output
    - invalid stdin JSON input

```go
stdinData, _ := io.ReadAll(WrappedStdin)
termData, err := parseDebugTermStdinData(stdinData) // expects []string JSON
if err != nil { return err }
WriteStdout("%s", formatDebugTermDecode(termData))
```

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/wavetermdev/waveterm/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-02-27 10:24:26 -08:00
Mike Sawka
c5afeb8747
simplify scrollbar code in terminal, simplify fit code (#2944) 2026-02-26 16:07:52 -08:00
Copilot
f1e06c7ef9
Add groq AI mode provider defaults and docs (#2942)
This change adds first-class `groq` provider support to Wave AI mode
resolution and documents it in the Wave AI modes guide. Users can now
configure Groq modes via `ai:provider` with provider defaults applied
automatically.

- **Provider support in backend config resolution**
  - Added `groq` as a recognized AI provider constant.
  - Added Groq provider defaults in mode resolution:
    - `ai:apitype`: `openai-chat`
    - `ai:endpoint`: `https://api.groq.com/openai/v1/chat/completions`
    - `ai:apitokensecretname`: `GROQ_KEY`

- **Schema/config surface update**
- Extended `AIModeConfigType` provider enum to include `groq`, so
`ai:provider: "groq"` is valid in Wave AI config.

- **Documentation updates (`waveai-modes.mdx`)**
  - Added `groq` to supported providers.
- Added a Groq-specific configuration example and default behavior
notes.
  - Updated provider reference and capability guidance to include Groq.

- **Focused coverage**
- Added a targeted unit test for Groq provider default application in
`applyProviderDefaults`.

```json
{
  "groq-kimi-k2": {
    "display:name": "Groq - Kimi K2",
    "ai:provider": "groq",
    "ai:model": "moonshotai/kimi-k2-instruct"
  }
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-02-26 09:50:05 -08:00
우연
46ab0ad1c8
docs: add Korean README translation (#2943)
## Summary
- Add `README.ko.md` as a Korean translation of the root README.
- Add a centered language switcher block to `README.md` and
`README.ko.md`.
- Keep the change small and docs-only (no code/runtime behavior
changes).

## Motivation
I am a Korean developer and a frequent Wave Terminal user.
I read the README often, and noticed there was no Korean README
available, so I prepared this translation to improve accessibility for
Korean users.

## Ongoing Contribution Intent
As an active Wave Terminal user, I can continue contributing incremental
Korean localization updates after this PR is reviewed.

## Scope Notes
- One logical change in a single PR.
- Focused only on documentation, aligned with the contribution guide for
small, obvious docs improvements.
2026-02-26 09:49:35 -08:00
Mike Sawka
cfbdc2554c
keep the terminal scrolled to the bottom across resizes if it was at the bottom (#2941) 2026-02-25 22:39:46 -08:00
Mike Sawka
296760d2cd
Fix IME issues (#2938) 2026-02-25 16:07:56 -08:00
Mike Sawka
8306c6bbe7
remove orphaned style.scss, make windowtype.ts, small CSS cleanup (#2939)
also duplicates rules.md for kilocode which was not picking it up from
the .roo directory
2026-02-25 16:07:13 -08:00
Mike Sawka
ba7aea715e
Better integration for terminal links (better context-menu and add a tooltip) (#2934)
addresses issue #2901
2026-02-25 13:03:41 -08:00
Copilot
ed7fa40300
Refine RemoteFileMultiInfoCommand semantics: dedup inputs, per-path stat errors, and cancellation (#2935)
This follow-up tightens the new multi-file remote stat RPC behavior to
match expected usage: duplicate input paths are skipped, per-path stat
failures no longer fail the entire call, and cancellation is respected
during iteration.

- **RPC response model**
  - Added `staterror` to `FileInfo`:
    - `StatError string \`json:"staterror,omitempty"\``
  - Generated TS type now exposes `staterror?: string` on `FileInfo`.

- **`RemoteFileMultiInfoCommand` behavior updates**
- **Dedup:** if an input path key is already present in the result map,
the loop continues.
- **Non-fatal stat failures:** on `fileInfoInternal` error, the command
now emits a `FileInfo` entry for that input with:
    - resolved `path`, `dir`, `name`
    - `staterror` populated with `err.Error()`
    - continues processing remaining paths.
- **Cancellation:** checks `ctx.Err()` at the top of each iteration and
returns immediately if canceled.

- **PR scope cleanup**
  - Removed the previously added test file from this PR per request.

```go
if _, found := rtn[path]; found {
    continue
}
if ctx.Err() != nil {
    return nil, ctx.Err()
}
fileInfo, err := impl.fileInfoInternal(cleanedPath, false)
if err != nil {
    rtn[path] = wshrpc.FileInfo{
        Path:      wavebase.ReplaceHomeDir(cleanedPath),
        Dir:       computeDirPart(cleanedPath),
        Name:      filepath.Base(cleanedPath),
        StatError: err.Error(),
    }
    continue
}
```

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2026-02-25 12:52:50 -08:00
Copilot
624476fa33
Add terminal cursor style/blink config with block-level overrides (#2933)
Adds support for configuring terminal cursor style and blink behavior in
terminal blocks, with hierarchical resolution (block metadata →
connection overrides → global settings). New keys are `term:cursor`
(`block`/`underline`/`bar`, default `block`) and `term:cursorblink`
(`bool`, default `false`).

- **Config surface: new terminal keys**
  - Added to global settings schema/types:
    - `pkg/wconfig/settingsconfig.go`
  - Added to block metadata typing:
    - `pkg/waveobj/wtypemeta.go`
  - Added default values:
    - `pkg/wconfig/defaultconfig/settings.json`
      - `"term:cursor": "block"`
      - `"term:cursorblink": false`

- **Frontend terminal behavior (xterm options)**
  - `frontend/app/view/term/termwrap.ts`
- Added `setCursorStyle()` with value normalization (`underline`/`bar`
else fallback `block`)
    - Added `setCursorBlink()`
- Applies both options on terminal construction via
`getOverrideConfigAtom(...)`
  - `frontend/app/view/term/term-model.ts`
    - Subscribes to `term:cursor` and `term:cursorblink` override atoms
- Propagates live updates to `term.options.cursorStyle` /
`term.options.cursorBlink`
    - Cleans up subscriptions in `dispose()`

- **Generated artifacts**
  - Regenerated config/type outputs after Go type additions:
    - `schema/settings.json`
    - `pkg/wconfig/metaconsts.go`
    - `pkg/waveobj/metaconsts.go`
    - `frontend/types/gotypes.d.ts`

- **Docs**
  - Updated config reference and default config example:
    - `docs/docs/config.mdx`

```ts
// termwrap.ts
this.setCursorStyle(globalStore.get(getOverrideConfigAtom(this.blockId, "term:cursor")));
this.setCursorBlink(globalStore.get(getOverrideConfigAtom(this.blockId, "term:cursorblink")) ?? false);

// term-model.ts (live updates)
const termCursorAtom = getOverrideConfigAtom(blockId, "term:cursor");
this.termCursorUnsubFn = globalStore.sub(termCursorAtom, () => {
    this.termRef.current?.setCursorStyle(globalStore.get(termCursorAtom));
});
```

<!-- START COPILOT CODING AGENT TIPS -->
---

🔒 GitHub Advanced Security automatically protects Copilot coding agent
pull requests. You can protect all pull requests by enabling Advanced
Security for your repositories. [Learn more about Advanced
Security.](https://gh.io/cca-advanced-security)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
2026-02-25 12:40:20 -08:00