* build manifest
* working on secrets injection (secretstore + secret-bindings.json)
* tool progress indicators
* build output and errors injected as the result of the edit calls so AI
gets instant feedback on edits
* change edits to not be atomic (allows AI to make better progress)
* updated binary location for waveapps
* publish button
* new partial json parser (for sending incremental tool progress
indication)
* updated tsunami view to use new embedded scaffold + config vars
* lots of work on cleaning up the output so it is more useful to users +
AI agents
* fix builder init flow
Create an AI Thinking Dropdown in Wave AI.
Quick, Balanced, or Deep which map to gpt-5-mini, gpt-5 (low thinking),
or gpt-5 (medium thinking). Also default down to Quick when no premium
requests.
## Plan: Add RenameLocalApp function to waveappstore
- [x] Analyze existing code patterns in waveappstore.go
- [x] Implement RenameLocalApp(appName string, newAppName string) error
function
- Validate newAppName using existing validation
- Check if local/[appname] exists and rename to local/[newAppName] if it
does
- Check if draft/[appname] exists and rename to draft/[newAppName] if it
does
- Handle errors appropriately including rollback on partial failure
- [x] Add documentation comments
- [x] Run security checks (CodeQL - no issues found)
## Summary
Successfully implemented `RenameLocalApp(appName string, newAppName
string) error` function that:
- Renames local apps in both `local/` and `draft/` namespaces
- Validates app names and checks for conflicts
- Implements proper error handling with rollback on partial failure
- Passes all security checks with zero vulnerabilities
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
Bumps
[github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2)
from 1.31.15 to 1.31.17.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="aacca0a210"><code>aacca0a</code></a>
Release 2025-11-04</li>
<li><a
href="f2f7085b91"><code>f2f7085</code></a>
Regenerated Clients</li>
<li><a
href="98ac357edf"><code>98ac357</code></a>
Update endpoints model</li>
<li><a
href="545573ffc3"><code>545573f</code></a>
Update API model</li>
<li><a
href="0c4b1ae238"><code>0c4b1ae</code></a>
upgrade to smithy-go v1.23.2 to track allocation improvements (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3222">#3222</a>)</li>
<li><a
href="bae1d689b9"><code>bae1d68</code></a>
Release 2025-11-03</li>
<li><a
href="67d7b9cb02"><code>67d7b9c</code></a>
Regenerated Clients</li>
<li><a
href="74be9b92bd"><code>74be9b9</code></a>
Update API model</li>
<li><a
href="3242971cac"><code>3242971</code></a>
Release 2025-10-31</li>
<li><a
href="2db47dca34"><code>2db47dc</code></a>
Regenerated Clients</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/config/v1.31.15...config/v1.31.17">compare
view</a></li>
</ul>
</details>
<br />
[](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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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>
Handle both types of paste data. Write utility functions to normalize
paste events to {text; image}[]. Fix duplication issue (call
preventDefault() early). Handle multiple image pasting (by adding a
slight delay). Convert Ctrl:Shift:v to use a *native paste* which allows
capturing of images!
## Summary
This PR includes three terminal input improvements that enhance the
experience when using interactive CLI tools and IME input:
1. **Shift+Enter newline support**: Enable Shift+Enter to insert
newlines by default
2. **Image paste support**: Allow pasting images by saving them as
temporary files and pasting the file path
3. **IME duplicate input fix**: Fix duplicate text when switching input
methods during composition
## Motivation
### Shift+Enter for newlines
Currently, pressing Shift+Enter in the terminal behaves the same as
Enter, making it difficult to input multi-line commands or text in
interactive CLI tools. This change enables Shift+Enter to insert
newlines by default, matching common terminal emulator behavior.
### Image paste support
Interactive AI tools like Claude Code support receiving images through
file paths, but Wave Terminal currently doesn't support pasting images.
This change implements image paste functionality similar to iTerm2's
behavior: when an image is pasted, it's saved to a temporary file and
the path is pasted into the terminal.
### IME duplicate input fix
When using Chinese/Japanese/Korean IME in the terminal, switching input
methods with Capslock during composition causes the composed text to be
sent twice, resulting in duplicate output (e.g., "你好" becomes "你好你好").
This issue severely impacts users who frequently switch between
languages.
## Changes
### Shift+Enter newline (`frontend/app/view/term/term-model.ts`)
- Change default `shiftenternewline` config from `false` to `true`
- Send standard newline character (`\n`) instead of escape sequence
(`\^[\n`)
### Image paste (`frontend/app/view/term/term-model.ts`,
`frontend/app/view/term/termwrap.ts`)
- Add `handlePaste()` method to intercept Cmd+Shift+V paste events
- Add `handleImagePasteBlob()` to save images to `/tmp` and paste the
file path
- Detect image data in clipboard using both
`ClipboardEvent.clipboardData` and Clipboard API
- Support both screenshot paste and file copy scenarios
- Add 5MB size limit for pasted images
- Temporary files are created with format:
`waveterm_paste_[timestamp].[ext]`
### IME duplicate input fix (`frontend/app/view/term/termwrap.ts`,
`frontend/app/view/term/term-model.ts`)
**IME Composition Handling:**
- Track composition state (isComposing, composingData, etc.) in TermWrap
- Register compositionstart/update/end event listeners on xterm.js
textarea
- Block all data sends during composition, only allow after
compositionend
- Prevents xterm.js from sending intermediate data during
compositionupdate phase
**Deduplication Logic:**
- Implement 50ms time window deduplication for both IME and paste
operations
- Track first send after composition, block duplicate sends from
Capslock switching
- Ensure Ctrl+Space and Fn switching work correctly (single send only)
**Edge Case Handling:**
- Add blur event handler to reset composition state on focus loss
- Add Escape key handling to cancel composition in progress
## Testing
### Shift+Enter
1. Open a terminal in Wave
2. Press Shift+Enter
3. Verify that a newline is inserted instead of executing the command
### Image paste
1. Take a screenshot and copy it to clipboard (or copy an image file in
Finder)
2. In a terminal running Claude Code, paste the image (Cmd+V or
Cmd+Shift+V)
3. Verify that the image path appears and Claude Code recognizes it
### IME Input Testing
**IME Input:**
- [x] macOS Zhuyin IME + Capslock switching - no duplicate output ✅
- [x] macOS Zhuyin IME + Ctrl+Space switching - normal single input ✅
- [x] macOS Zhuyin IME + Fn switching - normal single input ✅
**Regression Testing:**
- [x] English keyboard input - normal operation ✅
- [x] Shift+Enter multiline input - works correctly ✅
- [x] Text paste (Cmd+Shift+V) - no duplicates ✅
- [x] Image paste - works correctly ✅
- [x] Basic command execution (ls, echo, etc.) - normal ✅
- [x] Cmd+K clear terminal - works correctly ✅
- [x] Copy selected text (Cmd+Shift+C) - works correctly ✅
## Demo
https://github.com/user-attachments/assets/8341cdf9-6c57-413e-b940-89e50cc79ff0https://github.com/user-attachments/assets/d3a6e72a-f488-45c1-ab58-88391639455ahttps://github.com/user-attachments/assets/ac178abd-caf3-40bf-9ef7-7cc0567a32c3
All features have been tested successfully on macOS with Claude Code in
Wave Terminal.
Bumps
[github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2)
from 1.89.1 to 1.90.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f4b6813928"><code>f4b6813</code></a>
Release 2025-11-05</li>
<li><a
href="2d7b311712"><code>2d7b311</code></a>
Regenerated Clients</li>
<li><a
href="9e31119128"><code>9e31119</code></a>
Update API model</li>
<li><a
href="aacca0a210"><code>aacca0a</code></a>
Release 2025-11-04</li>
<li><a
href="f2f7085b91"><code>f2f7085</code></a>
Regenerated Clients</li>
<li><a
href="98ac357edf"><code>98ac357</code></a>
Update endpoints model</li>
<li><a
href="545573ffc3"><code>545573f</code></a>
Update API model</li>
<li><a
href="0c4b1ae238"><code>0c4b1ae</code></a>
upgrade to smithy-go v1.23.2 to track allocation improvements (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3222">#3222</a>)</li>
<li><a
href="bae1d689b9"><code>bae1d68</code></a>
Release 2025-11-03</li>
<li><a
href="67d7b9cb02"><code>67d7b9c</code></a>
Regenerated Clients</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.89.1...service/s3/v1.90.0">compare
view</a></li>
</ul>
</details>
<br />
[](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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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>
adds a new secret store protected by electron's safeStorage API.
currently just hooked up to the CLI via a new wsh command: `wsh secret`.
will be used to power secrets in tsunami later (and for config +
connections)
Removes the embedded Docusaurus build from the application. The help
view now always loads from https://docs.waveterm.dev/ instead of serving
a locally bundled copy. This eliminates package size constraints on
documentation content (e.g., videos) and removes unnecessary
build/packaging overhead.
**Backend changes:**
- Deleted `pkg/docsite` package entirely
- Removed docsite handler from `pkg/web/web.go`
- Simplified `emain/docsite.ts` to return constant URL instead of
probing for embedded docs
**Frontend changes:**
- Removed embedded URL translation logic from `helpview.tsx`
- Homepage URL now uses constant instead of IPC call
**Build configuration:**
- Removed `docsite:build:embedded` task and all references
- Removed `dist/docsite/**/*` from electron-builder asarUnpack
- Removed `build-embedded` script from docs package.json
Net result: -141 lines, +9 lines across 8 files.
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
> right now we build a docusaurus project to run both the online docs at
docs.waveterm.dev AND to embed into the application. but this limits
what we can show in the docs (especially large things like videos etc.)
>
> the internal docs already fall back to the website when it cannot find
the embedded docs.
>
> i'd like to update the build and packaging etc to no longer build the
embedded doc site. i'd also like to have the "help" view always render
the live doc site at https://docs.waveterm.dev.
</details>
<!-- 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>
New UI Setting: Launch On Fullscreen
A new option has been added to the view menu allowing users to
enable fullscreen mode automatically when Wave launches. This setting is
persistent and can be toggled on a per-user basis.
- Cleaned up unused imports across the project to improve code
readability and maintainability.
- Deleted empty or obsolete files that are no longer in use.
- No functional changes introduced.
Bumps the dev-dependencies-minor group with 3 updates in the /
directory:
[@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc),
[node-abi](https://github.com/electron/node-abi) and
[prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc).
Updates `@vitejs/plugin-react-swc` from 4.1.0 to 4.2.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/releases"><code>@vitejs/plugin-react-swc</code>'s
releases</a>.</em></p>
<blockquote>
<h2>plugin-react@4.2.0</h2>
<h3>Update peer dependency range to target Vite 5</h3>
<p>There were no breaking change that impacted this plugin, so any
combination of React plugins and Vite core version will work.</p>
<h3>Align jsx runtime for optimized dependencies</h3>
<p>This will only affect people using internal libraries that contains
untranspiled JSX. This change aligns the optimizer with the source code
and avoid issues when the published source don't have <code>React</code>
in the scope.</p>
<p>Reminder: While being partially supported in Vite, publishing TS
& JSX outside of internal libraries is highly discouraged.</p>
<h2>plugin-react-swc@4.2.0</h2>
<h3>Add <code>@vitejs/plugin-react-swc/preamble</code> virtual module
for SSR HMR (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/890">#890</a>)</h3>
<p>SSR applications can now initialize HMR runtime by importing
<code>@vitejs/plugin-react-swc/preamble</code> at the top of their
client entry instead of manually calling
<code>transformIndexHtml</code>. This simplifies SSR setup for
applications that don't use the <code>transformIndexHtml</code> API.</p>
<h3>Use SWC when useAtYourOwnRisk_mutateSwcOptions is provided (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/951">#951</a>)</h3>
<p>Previously, this plugin did not use SWC if plugins were not provided
even if <code>useAtYourOwnRisk_mutateSwcOptions</code> was provided.
This is now fixed.</p>
<h2>plugin-react@4.1.1</h2>
<ul>
<li>Enable retainLines to get correct line numbers for jsxDev (fix <a
href="https://redirect.github.com/vitejs/vite-plugin-react/issues/235">#235</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc/CHANGELOG.md"><code>@vitejs/plugin-react-swc</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>4.2.0 (2025-10-24)</h2>
<h3>Add <code>@vitejs/plugin-react-swc/preamble</code> virtual module
for SSR HMR (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/890">#890</a>)</h3>
<p>SSR applications can now initialize HMR runtime by importing
<code>@vitejs/plugin-react-swc/preamble</code> at the top of their
client entry instead of manually calling
<code>transformIndexHtml</code>. This simplifies SSR setup for
applications that don't use the <code>transformIndexHtml</code> API.</p>
<h3>Use SWC when useAtYourOwnRisk_mutateSwcOptions is provided (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/951">#951</a>)</h3>
<p>Previously, this plugin did not use SWC if plugins were not provided
even if <code>useAtYourOwnRisk_mutateSwcOptions</code> was provided.
This is now fixed.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitejs/vite-plugin-react/commits/v4.2.0/packages/plugin-react-swc">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 <code>@vitejs/plugin-react-swc</code>
since your current version.</p>
</details>
<br />
Updates `node-abi` from 4.14.0 to 4.17.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/electron/node-abi/releases">node-abi's
releases</a>.</em></p>
<blockquote>
<h2>v4.17.0</h2>
<h1><a
href="https://github.com/electron/node-abi/compare/v4.16.0...v4.17.0">4.17.0</a>
(2025-10-30)</h1>
<h3>Features</h3>
<ul>
<li>update ABI registry (<a
href="https://redirect.github.com/electron/node-abi/issues/243">#243</a>)
(<a
href="e1fbdddb1c">e1fbddd</a>)</li>
</ul>
<h2>v4.16.0</h2>
<h1><a
href="https://github.com/electron/node-abi/compare/v4.15.0...v4.16.0">4.16.0</a>
(2025-10-28)</h1>
<h3>Features</h3>
<ul>
<li>update ABI registry (<a
href="https://redirect.github.com/electron/node-abi/issues/233">#233</a>)
(<a
href="4614b6b467">4614b6b</a>)</li>
</ul>
<h2>v4.15.0</h2>
<h1><a
href="https://github.com/electron/node-abi/compare/v4.14.0...v4.15.0">4.15.0</a>
(2025-10-23)</h1>
<h3>Features</h3>
<ul>
<li>update ABI registry (<a
href="https://redirect.github.com/electron/node-abi/issues/227">#227</a>)
(<a
href="a0b95e07af">a0b95e0</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e1fbdddb1c"><code>e1fbddd</code></a>
feat: update ABI registry (<a
href="https://redirect.github.com/electron/node-abi/issues/243">#243</a>)</li>
<li><a
href="5e7b041ed8"><code>5e7b041</code></a>
ci: quick sleep before waiting on automated PR checks (<a
href="https://redirect.github.com/electron/node-abi/issues/240">#240</a>)</li>
<li><a
href="a0eb6a1b64"><code>a0eb6a1</code></a>
ci: tweak automated docs PR merging (<a
href="https://redirect.github.com/electron/node-abi/issues/239">#239</a>)</li>
<li><a
href="4614b6b467"><code>4614b6b</code></a>
feat: update ABI registry (<a
href="https://redirect.github.com/electron/node-abi/issues/233">#233</a>)</li>
<li><a
href="91c9478e5c"><code>91c9478</code></a>
ci: fix outputs syntax in release workflow (<a
href="https://redirect.github.com/electron/node-abi/issues/237">#237</a>)</li>
<li><a
href="7b12648e7c"><code>7b12648</code></a>
ci: update release environment name (<a
href="https://redirect.github.com/electron/node-abi/issues/236">#236</a>)</li>
<li><a
href="2e36924728"><code>2e36924</code></a>
ci: use new electron/secret-service-action (<a
href="https://redirect.github.com/electron/node-abi/issues/235">#235</a>)</li>
<li><a
href="e0c3ff071d"><code>e0c3ff0</code></a>
ci: use electron/secret-service action (<a
href="https://redirect.github.com/electron/node-abi/issues/234">#234</a>)</li>
<li><a
href="a0b95e07af"><code>a0b95e0</code></a>
feat: update ABI registry (<a
href="https://redirect.github.com/electron/node-abi/issues/227">#227</a>)</li>
<li><a
href="0683be1d61"><code>0683be1</code></a>
ci: bump electron/semantic-trusted-release to v1.0.1 (<a
href="https://redirect.github.com/electron/node-abi/issues/230">#230</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/electron/node-abi/compare/v4.14.0...v4.17.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `prettier-plugin-jsdoc` from 1.3.3 to 1.5.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/hosseinmd/prettier-plugin-jsdoc/blob/master/CHANGELOG.md">prettier-plugin-jsdoc's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<p>All notable changes to this project will be documented in this file.
See <a
href="https://github.com/conventional-changelog/standard-version">standard-version</a>
for commit guidelines.</p>
<h2><a
href="https://github.com/hosseinmd/prettier-plugin-jsdoc/compare/v1.3.3...v1.4.0">1.4.0</a>
(2025-10-29)</h2>
<h3>Features</h3>
<ul>
<li>add support for import tags (<a
href="https://redirect.github.com/hosseinmd/prettier-plugin-jsdoc/issues/252">#252</a>)
(<a
href="ab5c488b2d">ab5c488</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0260abfd71"><code>0260abf</code></a>
v1.5.0</li>
<li><a
href="4887997f86"><code>4887997</code></a>
chore(release): 1.4.0</li>
<li><a
href="ab5c488b2d"><code>ab5c488</code></a>
feat: add support for import tags (<a
href="https://redirect.github.com/hosseinmd/prettier-plugin-jsdoc/issues/252">#252</a>)</li>
<li><a
href="2c6d363f7f"><code>2c6d363</code></a>
test: prettier version bump into 3.6 (<a
href="https://redirect.github.com/hosseinmd/prettier-plugin-jsdoc/issues/248">#248</a>)</li>
<li>See full diff in <a
href="https://github.com/hosseinmd/prettier-plugin-jsdoc/compare/v1.3.3...v1.5.0">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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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>
Bumps
[github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2)
from 1.88.4 to 1.89.1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d8ed081e9b"><code>d8ed081</code></a>
Release 2025-10-30</li>
<li><a
href="a2c9cb4705"><code>a2c9cb4</code></a>
Regenerated Clients</li>
<li><a
href="7af054b46f"><code>7af054b</code></a>
Update endpoints model</li>
<li><a
href="2e5ed49bd2"><code>2e5ed49</code></a>
Update API model</li>
<li><a
href="f3a3b6c778"><code>f3a3b6c</code></a>
remove arbitrary response read timeout in kinesis GetRecords (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3221">#3221</a>)</li>
<li><a
href="56af155211"><code>56af155</code></a>
Release 2025-10-29</li>
<li><a
href="b23832ac9b"><code>b23832a</code></a>
Regenerated Clients</li>
<li><a
href="33ea965f3e"><code>33ea965</code></a>
Update API model</li>
<li><a
href="f70c7889fa"><code>f70c788</code></a>
Release 2025-10-28</li>
<li><a
href="f8aa1f373d"><code>f8aa1f3</code></a>
Regenerated Clients</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.88.4...service/s3/v1.89.1">compare
view</a></li>
</ul>
</details>
<br />
[](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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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>
also updates ROADMAP.md, and fixes a node pruning bug on the FE, and
adds a new diff viewer that we can view the write_text_file and
edit_text_file diffs in. adds a backup file system that can be used to restore AI edited files back to their original states.
Got preview hooked up, log output hooked up, environment tab hooked
up... the controller, restarting the apps. it is actually working! still
lots to do and lots of hard coding to fix, but it is coming together...
## Alert and Confirm Modal System for Tsunami
This PR implements a complete modal system for the tsunami app framework
as specified in the requirements.
### Implementation Summary
**Backend (Go) - 574 lines changed across 11 files:**
1. **Type Definitions** (`rpctypes/protocoltypes.go`):
- `ModalConfig`: Configuration for modal display with icon, title, text,
and button labels
- `ModalResult`: Result structure containing modal ID and confirmation
status
2. **Client State Management** (`engine/clientimpl.go`):
- Added `ModalState` to track open modals with result channels
- `OpenModals` map to track all currently open modals
- `ShowModal()`: Sends SSE event to display modal and returns result
channel
- `CloseModal()`: Processes modal result from frontend
- `CloseAllModals()`: Automatically cancels all modals when frontend
sends Resync flag (page refresh)
3. **API Endpoint** (`engine/serverhandlers.go`):
- `/api/modalresult` POST endpoint to receive modal results from
frontend
- Validates and processes `ModalResult` JSON payload
- Closes all modals on Resync (page refresh) before processing events
4. **User-Facing Hooks** (`app/hooks.go`):
- `UseAlertModal()`: Returns (isOpen, triggerAlert) for alert modals
- `UseConfirmModal()`: Returns (isOpen, triggerConfirm) for confirm
modals
- Both hooks manage local state and handle async modal lifecycle
**Frontend (TypeScript/React):**
1. **Type Definitions** (`types/vdom.d.ts`):
- Added `ModalConfig` and `ModalResult` TypeScript types
2. **Modal Components** (`element/modals.tsx`):
- `AlertModal`: Dark-mode styled alert with icon, title, text, and OK
button
- `ConfirmModal`: Dark-mode styled confirm with icon, title, text, OK
and Cancel buttons
- Both support keyboard (ESC) and backdrop click dismissal
- Fully accessible with focus management
3. **Model Integration** (`model/tsunami-model.tsx`):
- Added `currentModal` atom to track displayed modal
- SSE event handler for `showmodal` events
- `sendModalResult()`: Sends result to `/api/modalresult` and clears
modal
4. **UI Integration** (`vdom.tsx`):
- Integrated modal display in `VDomView` component
- Conditionally renders alert or confirm modal based on type
**Demo Application** (`demo/modaltest/`):
- Comprehensive demonstration of modal functionality
- Shows 4 different modal configurations:
- Alert with icon
- Simple alert with custom button text
- Confirm modal
- Delete confirmation with custom buttons
- Displays modal state and results in real-time
### Key Features
✅ **SSE-Based Modal Display**: Modals are pushed from backend to
frontend via SSE
✅ **API-Based Result Handling**: Results sent back via
`/api/modalresult` endpoint
✅ **Automatic Cleanup**: All open modals auto-cancel on page refresh
(when Resync flag is set)
✅ **Type-Safe Hooks**: Full TypeScript and Go type safety
✅ **Dark Mode UI**: Components styled for Wave Terminal's dark theme
✅ **Accessibility**: Keyboard navigation, ESC to dismiss, backdrop click
support
✅ **Zero Security Issues**: Passed CodeQL security analysis
✅ **Zero Code Review Issues**: Clean implementation following best
practices
### Testing
- ✅ Go code compiles without errors
- ✅ TypeScript/React builds without errors
- ✅ All existing tests pass
- ✅ Demo app created and compiles successfully
- ✅ CodeQL security scan: 0 vulnerabilities
- ✅ Code review: 0 issues
### Security Summary
No security vulnerabilities were introduced. All modal operations are
properly scoped to the client's SSE connection, and modal IDs are
generated server-side to prevent tampering.
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>