mirror of
https://github.com/wavetermdev/waveterm
synced 2026-05-24 09:18:27 +00:00
2492 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
76f78f0f97
|
fix failing layout test (#2999) | ||
|
|
c6f61247ce
|
update about, add sponsor and gradient (#3001) | ||
|
|
f82845b5b6
|
chore: bump package version to 0.14.2-beta.0 | ||
|
|
ff673e1500
|
break out wsh editor and clarify behavior. also document -m flag... (#2988)
fix documentation issue #2948 |
||
|
|
0f60c70666
|
broadcast zoom changed notifications (#2989) | ||
|
|
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=" |
||
|
|
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 "none" 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=" |
||
|
|
06bac333ae
|
handle second-instance events (auto-generated new window action on gnome) (#2998) | ||
|
|
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=" |
||
|
|
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=" |
||
|
|
f59fdb55db
|
Fix focusedWaveWindow (also fixes bug w/ save session as....) (#2987) | ||
|
|
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>
|
||
|
|
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>
|
||
|
|
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> |
||
|
|
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>
|
||
|
|
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>
|
||
|
|
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=" |
||
|
|
c65147da1b
|
add sponsor section to readme (#2978) | ||
|
|
ceca94bc3c
|
add funding.yml file (#2977) | ||
|
|
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>
|
||
|
|
d47329d491
|
chore: bump package version to 0.14.1 | ||
|
|
98c374b8cd
|
quick updates to get apptype (#2969) | ||
|
|
c411df40d5
|
chore: bump package version to 0.14.1-beta.1 | ||
|
|
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>
|
||
|
|
b5d23e544e
|
v0.14.1 Release Notes and Onboarding (#2966) | ||
|
|
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>
|
||
|
|
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>**
- 
<!-- 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>
|
||
|
|
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>
|
||
|
|
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>

</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>
|
||
|
|
cff84773a6
|
minor changes (#2962) | ||
|
|
e8d6ff5b05
|
chore: bump package version to 0.14.1-beta.0 | ||
|
|
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>
|
||
|
|
b1d11f72c4
|
add noprofile/noninteractive to all powershell commands (#2959) | ||
|
|
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=" |
||
|
|
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>
|
||
|
|
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. |
||
|
|
1ab58ea98a
|
Fix bugs with connection switching (#2957)
* Add per blockId mutex to block controller resync * Pass initial termsize through to startJob |
||
|
|
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=" |
||
|
|
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=" |
||
|
|
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=" |
||
|
|
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>
|
||
|
|
c5afeb8747
|
simplify scrollbar code in terminal, simplify fit code (#2944) | ||
|
|
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>
|
||
|
|
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. |
||
|
|
cfbdc2554c
|
keep the terminal scrolled to the bottom across resizes if it was at the bottom (#2941) | ||
|
|
296760d2cd
|
Fix IME issues (#2938) | ||
|
|
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 |
||
|
|
ba7aea715e
|
Better integration for terminal links (better context-menu and add a tooltip) (#2934)
addresses issue #2901 |
||
|
|
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>
|
||
|
|
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>
|