This will attempt to use the ssh agent before trying other ssh keys in
case other integrations are being used through it.
---------
Co-authored-by: Evan Simkowitz <esimkowitz@users.noreply.github.com>
This fix makes it possible to differentiate between keys when multiple
are provided by the remote server. It does not solve the case of
multiple keys of the same type being shared, but it handles multiple
keys of different types being shared, which is much more common. This
should address most issues similar to
https://github.com/wavetermdev/waveterm/issues/707.
**Action Required:**
We've moved to an authenticated system and you must now provide an
authentication key within our script.
1. Create an account or log into https://app.dashcam.io.
2. Copy the API key from https://app.dashcam.io/team. You must be the
team "owner"
3. Add the API key as `DASHCAM_API_KEY` within GitHub actions by
following the guide
[here](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions).
This PR moves to our v3 system which includes
- Faster and more stable tests. Notice we're using a `yml` file to guide
the test rather than open prompts. This means the AI will follow the
same steps every time.
- Smarter AI. Better text matching, and more commands. We optimized how
the AI matches text and images, making it way faster and more
fault-tolerant.
- Better summaries. The AI will summarize the full test execution as
well as errors
- Assertions. We can now explicitly ask the AI to verify things on
screen
- Embedded tests. We can nest scripts for reusable components.
---------
Co-authored-by: orliesaurus <orliesaurus@users.noreply.github.com>
Bumps the npm_and_yarn group with 1 update in the / directory:
[ws](https://github.com/websockets/ws).
Updates `ws` from 7.5.9 to 7.5.10
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/websockets/ws/releases">ws's
releases</a>.</em></p>
<blockquote>
<h2>7.5.10</h2>
<h1>Bug fixes</h1>
<ul>
<li>Backported e55e5106 to the 7.x release line (22c28763).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/websockets/ws/commit/d962d70649e393841ee1ed726a8f7ffbe90d0c06"><code>d962d70</code></a>
[dist] 7.5.10</li>
<li><a
href="https://github.com/websockets/ws/commit/22c28763234aa75a7e1b76f5c01c181260d7917f"><code>22c2876</code></a>
[security] Fix crash when the Upgrade header cannot be read (<a
href="https://redirect.github.com/websockets/ws/issues/2231">#2231</a>)</li>
<li>See full diff in <a
href="https://github.com/websockets/ws/compare/7.5.9...7.5.10">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 <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
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/wavetermdev/waveterm/network/alerts).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
**Description:**
I recently installed waveterm and I just love it. I like to use my
terminal without titlebar, So I removed the titlebar of waveterm in my
ubuntu desktop but the menu bar is showing constantly. So I look into
the code and made the changes. This pull request adds a simple feature
which will hide/show the menubar using `ALT` key.
**Changes Made:**
1. When initializing electron's BrowserWindow, I added a parameter
`autoHideMenuBar: true`.
**Testing Done:**
Tested the feature by pressing `ALT` Key. It works perfectly.
I've reworked the autocomplete parser to more closely match Newton, the
Fig-compatible parser I prototyped earlier this year. I was able to move
a lot faster by reusing patterns that inshellisense proved out, such as
for templates and generators.
I also support some features that inshellisense doesn't, like proper
combining of Posix-compatible flags, handling of option argument
separators, and handling of cursors in insertValues.
This continues the work to unblock multiple window support. `emain.ts`
now contains no more references to a "main" window, instead all event
handlers will dispatch to either the window that triggered the event,
the currently focused window, or the first window to be spun up.
The hour long interval that I set was being subjected to background
throttling and wasn't reliably getting invoked. I am shortening the
inteval to 10 mins and adding a check within it to see if an hour has
passed since the last update check. I am also running the same logic
every time the main window is activated. This should ensure that the
auto update check happens more reliably and not just on first launch.
I am removing the Yarn cache from our Build Helper. The
actions/node-setup cache option is not compatible with Yarn Modern. With
Yarn Modern, the `yarn install` command that sets up our
project-specific yarn config will also install all the module
dependencies, meaning we don't need a separate call to resolve these.
Altogether, even without the cache, it only takes 21s for Yarn Modern to
install and resolve dependencies.
This Pull Request introduces the corepack dependency, necessary for the
Testdriver infrastructure to run.
## Rationale:
Corepack enables faster installations and is required for `yarn`
By default, corepack is not installed on the testdriver infrastructure,
necessitating this addition.
## Benefits:
Allows better handling of `yarn` installation.
## Testing:
Local testing has confirmed successful corepack installation and
functionality within the testdriver infrastructure.
This begins the process of renaming mshell to waveshell everywhere by
making the most simple changes. There will need to be additional changes
in the future, but the hope is to merge simple changes in now to reduce
the number of future merge conflicts.
We were using Yarn Classic. While this is not deprecated, Yarn is moving
in a different direction with Yarn Modern (read more
[here](https://yarnpkg.com/migration/overview)) and we should align with
that. The migration mainly requires rebuilding our lockfile. We will
still use `node_modules` for now, though in the future we may want to
adopt the new [Plug'n'Play model](https://yarnpkg.com/features/pnp).
RotateIcon wasn't actually binding the ref that it was passing to SyncSpin, meaning it wasn't actually syncing properly. This fixes that, along with making SyncSpin compatible with more than just div types
Contains the implementation of the block store
In this pr is a simple way to send and receive data through a database
I have implemented the base functionality as well as quite a few tests
to make sure that everything works
There are a few methods that have yet to be implemented, but
theoretically they should be implemented as calls to the other
functions, ie append should just be a call to WriteAt
This doesn't affect anything yet so it can safely be merged whenever. I
don't want this pr to stagnate like file view, so I'm happy to write
multiple prs for this
This improves the ephemeral command runner to allow for honoring of
timeouts and proper handling of overriding the current working
directory. It also fixes some partially transparent font colors in light
mode, making them solid instead. It also updates the InputModel to be
auto-observable and utilize some getters to ensure the cmdinput is
getting updated whenever necessary state changes take place.
* feat: add gui elements to configure ssh pw cache
This adds a dropdown for on/off/notimeout, a number entry box for a
timeout value, and a toggle for clearing when the computer sleeps.
* fix: improve password timeout entry
This makes the password timeout more consistent by using an inline
settings element. It also creates the inline settings element to parse
the input.
* feat: turn sudo password caching on and off
* feat: use configurable sudo timeout
This makes it possible to control how long waveterm stores your sudo
password. Note that if it changes, it immediately clears the cached
passwords.
* fix: clear existing sudo passwords if switched off
When the sudo password store state is changed to "off", all existing
passwords must immediately be cleared automatically.
* feat: allow clearing sudo passwords on suspend
This option makes it so the sudo passwords will be cleared when the
computer falls asleep. It will never be used in the case where the
password is set to never time out.
* feat: allow notimeout to prevent sudo pw clear
This option allows the sudo timeout to be ignored while it is selected.
* feat: adjust current deadline based on user config
This allows the deadline to update as changes to the config are
happening.
* fix: reject a sudopwtimeout of 0 on the backend
* fix: use the default sudoPwTimeout for empty input
* fix: specify the timeout length is minutes
* fix: store sudopwtimeout in ms instead of minutes
* fix: formatting the default sudo timeout
By changing the order of operations, this no longer shows up as NaN if
the default is used.
* refactor: consolidate inlinesettingstextedit
This removes the number variant and combines them into the same class
with an option to switch between the two behaviors.
* refactor: consolidate textfield and numberfield
This removes the number variant of textfield. The textfield component
can now act as a numberfield when the optional isNumber prop is true.
* added ai timeout setting
* addressed review comments
* fixed baseurl gating for telemetry
* updated copy
* addressed review comments
* removed prefix for client:show and added units to timeout
* changed timeout to use ms precision
* save work
* reusable StyleBlock component
* StyleBlock in elements dir
* root level
* ability to inherit root styles
* change prop from classname to selector
* selector should always be :root
* remove selector prop from StyleBlock
* working
* cleanup
* loadThemeStyles doesn't have to be async
* revert changes in tabs2.less
* remove old implementation
* cleanup
* remove file from another branch
* fix issue where line in history view doesn't reflect the terminal theme
* add key and value validation
* add label to tab settings terminal theme dropdown
* save work
* save work
* save work
* working
* trigger componentDidUpdate when switching tabs and sessions
* cleanup
* save work
* save work
* use UpdatePacket for theme changes as well
* make methods cohesive
* use themes coming from backend
* reload terminal when styel block is unmounted and mounted
* fix validation
* re-render terminal when theme is updated
* remove test styles
* cleanup
* more cleanup
* revert unneeded change
* more cleanup
* fix type
* more cleanup
* render style blocks in the header instead of body using portal
* add ability to reuse and dispose TermThemes instance and file watcher
* remove comment
* minor change
* separate filewatcher as singleton
* do not render app when term theme style blocks aren't rendered first
* only render main when termstyles have been rendered already
* add comment
* use DoUpdate to send themes to front-end
* support to watch subdirectories
* added support for watch subdirectories
* make watcher more flexible so it can be closed anywhere
* cleanup
* undo the app/main split
* use TermThemesType in creating initial value for Themes field
* simplify code
* fix issue where dropdown label doesn't float when the theme selected is Inherit
* remove unsed var
* start watcher in main, merge themes (don't overwrite) on event.
* ensure terminal-themes directory is created on startup
* ah, wait for termThemes to be set (the connect packet needs to have been processed to proceed with rendering)
* Simplify scrollHistoryItemIntoView
* remove unnecessary block argument
* actually the block nearest is necessary, otherwise the scroll will jump even if the item is already in view
* keybinding fixes
* changed screen and session commands to functions rather than slash commands to avoid printing errors
* added a static wait for console commands
* added sleep hardcode
* add an isArray check for commandStr
* Make the auxView tilebar optional and make sure it flows as part of the flexbox
* simplify condition
* fix ai chat scroll direction
* remove unnecessary change
* remove unused class
* fix: ignore computer sleep for telemetry clock
This uses unix time with regular integer comparisons to prevent the
telemetry clock from needing to wait for 8 hours of the program running.
Now, it only needs to wait 8 real-time hours instead.
* drop telemetry time to 4 hours, tick every 10 minutes
* create tab context menu (for close tab)
* small update to ctx menu, also make all tab deletes (including keybinding) not popup confirm modal if less than 10 blocks
* feat: share sudo between pty sessions
This is a first pass at a feature to cache the sudo password and share
it between different pty sessions. This makes it possible to not require
manual password entry every time sudo is used.
* feat: allow error handling and canceling sudo cmds
This adds the missing functionality that prevented failed sudo commands
from automatically closing.
* feat: restrict sudo caching to dev mode for now
* modify fullCmdStr not pk.Command
* refactor: condense ecdh encryptor creation
This refactors the common pieces needed to create an encryptor from an
ecdh key pair into a common function.
* refactor: rename promptenc to waveenc
* feat: add command to clear sudo password
We currently do not provide use of the sudo -k and sudo -K commands to
clear the sudo password. This adds a /sudo:clear command to handle it in
the meantime.
* feat: add kwarg to force sudo
In cases where parsing for sudo doesn't work, this provides an alternate
wave kwarg to use instead. It can be used with [sudo=1] at the beginning
of a command.
* refactor: simplify sudoArg parsing
* feat: allow user to clear all sudo passwords
This introduces the "all" kwarg for the sudo:clear command in order to
clear all sudo passwords.
* fix: handle deadline with real time
Golang's time module uses monatomic time by default, but that is not
desired for the password timeout since we want the timer to continue
even if the computer is asleep. We now avoid this by directly comparing
the unix timestamps.
* fix: remove sudo restriction to dev mode
This allows it to be used in regular builds as well.
* fix: switch to password timeout without wait group
This removes an unnecessary waiting period for sudo password entry.
* fix: update deadline in sudo:clear
This allows sudo:clear to cancel the goroutine for watching the password
timer.
* fix: pluralize sudo:clear message when all=1
This changes the output message for /sudo:clear to indicate multiple
passwords cleared if the all=1 kwarg is used.
* fix: use GetRemoteMap for getting remotes in clear
The sudo:clear command was directly looping over the GlobalStore.Map
which is not thread safe. Switched to GetRemoteMap which uses a lock
internally.
* fix: allow sudo metacmd to set sudo false
This fixes the logic for resolving if a command is a sudo command. This
change makes it possible for the sudo metacmd kwarg to force sudo to be
false.
* starting work on new dynamic context menu system
* untested contextmenu model integrated with electron api
* implement custom line context menu, copy visible output + copy full output
* implement minimize/maximize, restart, and delete
* add command validation to shellapi. mock out bash/zsh versions
* implement validate command fn bash and zsh
* test validate command
* change rtnstate commands to always end with a builtin, so we always get our exit trap to run
* simplify the rtnstate modification, don't add the 'wait' (as this is a different problem/feature)
* update schema
* cop button
* cleanup
* fix wrong type
* updates to try to set the cmdinput position (as well as text). fix button alignment, change checkmark to green (and extend), and remove the transition from parent component and move to copy (sawka)
* fix: add vix for missing known_hosts file
In a recent cleanup, I accidentally deleted this fix from before. This
adds it back.
* chore: clarify that the ssh should use private key
* Clean up cmdinput
* Remove unused css styles, clicking on textarea will focus back to textarea without closing history
* cleanup logic for activating textarea
* actions buttons should always show, should properly disable inactive views
* clicking actions toggles the view
* remove titlebar spacer, clean up padding
* Make AIChat and HistoryInfo share a common layout
* fix ai chat scroll
* clean up formatting
* fix chat textarea resizing
* align prompt and input
* update infomsg to use auxview
* update comments
* fix widths and key error
* add todo
* adjust padding for input, remove debug
* Don't capture clicks on the prompt area
* have initial run-command return faster to the frontend for quicker updating. cuts time from 70-80ms down to 20ms for an average command
* remove wlogs
* more logging cleanup
* fix focus for when start cmd returns an error
* initial
* save work, starting to add backend types
* save work
* save work
* Add EphemeralWriteCloser
* Command pipes thru, triggers infinite loop
* save debugging
* fix bad merge
* save debug statements
* fixing spaghetti
* clean up code
* got cwd override working
* Add separate paths for stdout and stderr writers
* fix stdout/stderr
* env vars are now working
* revert waveshell changes
* Making EphemeralWriteCloser into a more generic BufferedPipe
* formatting
* comment
* delete unused package
* more naming changes
* add package comment
* add UsePty to EphemeralRunOpts
* document UsePty
* ensure only one downstream writer can read from the buffer
* store pointer to syncs
* remove inshellisense stuff for now
* remove debugs
* revert yarn
* remove unnecessary debugs in main-server
* more debugging removed
* revert tsconfig
* init
* use setStyleVar
* backend implementation. scrope level terminal theming.
* only invoke this.applyTermTheme for keys that are updated. command runner for global term theme
* invoke applyTermTheme for global terminal themes as well
* fix nil error
* fix issue were theme can't be found
* fix issue where selected termtheme is not set as default value
* term theme switcher for session
* do not force reload after setting css vars
* fix issues. screenview terminal theme switcher
* remove debugging code
* move getTermThemes to util
* fix global theme reset
* fix workspace theme reset
* fix screenview terminal theme reset issue
* cleanup
* do not apply theme if theme hasn't changed
* do not apply theme if theme hasn't changed in workspace view
* cleanup
* cleanup
* force reload terminal
* fix inconsistency
* fix reset issue
* add a mobx reaction so that theming working when switching sessions
* workig reset
* simplify and cleanup
* refactor
* working global and session terminal theming
* add check
* perf improvement
* more perf improvements
* put reaction componentDidUpdate to make sure ref is already associated to the element
* cleanup
* fix issue where session theme is overriden by global theme on reload
* reduce flickering on reload
* more on reducing flickering on reload
* cleanup
* more cleanup
* fix file not found when no global theme is set
* screen level terminal theming
* update comment
* re-render terminal in history view. cleanup.
* cleanup
* merge main
* remote statemap from waveshell server (diff against initial state)
* move ShellStatePtr from sstore to packet so it can be passed over the wire
* add finalstatebaseptr to cmddone
* much improved diff computation code on wavesrv side
* fix displayname -- now using hash
* add comments, change a couple msh.WriteToPtyBuffer calls to log.Printfs
* added domain callback for every layer
* added domain callback for every layer
* switched dump logs to false
* dropdown fixes
* moved uuid back to constructor
A recent change made it possible to get stuck in a loop when connecting
to a remote. This reverts the part of it that caused this while
retaining the other behavior. This makes it possible to add to blank
known_host files again. It also adds a printout to display when a
connection is complete.
- name:Install FPM# The version of FPM that comes bundled with electron-builder doesn't include a Linux ARM target. Installing Gems onto the runner is super quick so we'll just do this for all targets.
@@ -11,35 +11,43 @@ If you install the production version of Wave, you'll see a semi-transparent gra
Download and install Go (must be at least go 1.18):
```
```sh
brew install go
```
Download and install ScriptHaus (to run the build commands):
```
```sh
brew tap scripthaus-dev/scripthaus
brew install scripthaus
```
You also need a relatively modern nodejs with npm and yarn installed.
-Node can be installed from [https://nodejs.org](https://nodejs.org).
- npm can install yarn using:
Node can be installed from [https://nodejs.org](https://nodejs.org).
```
npm install -g yarn
We use Yarn Modern to manage our packages. The recommended way to install Yarn Modern is using Corepack, a new utility shipped by NodeJS that lets you manage your package manager versioning as you would any packages.
If you installed NodeJS from the official feed (via the website or using NVM), this should come preinstalled. If you use Homebrew or some other feed, you may need to manually install Corepack using `npm install -g corepack`.
For more information on Corepack, check out [this link](https://yarnpkg.com/corepack).
Once you've verified that you have Corepack installed, run the following script to set up Yarn for the repository:
```sh
corepack enable
yarn install
```
## Clone the Repo
```
```sh
git clone git@github.com:wavetermdev/waveterm.git
```
## Building WaveShell / WaveSrv
```
```sh
scripthaus run build-backend
```
@@ -49,7 +57,7 @@ This builds the Golang backends for Wave. The binaries will put in waveshell/bin
Install modules (we use yarn):
```
```sh
yarn
```
@@ -57,7 +65,7 @@ yarn
We use webpack to build both the React and Electron App Wrapper code. They are both run together using:
```
```sh
scripthaus run webpack-watch
```
@@ -65,7 +73,7 @@ scripthaus run webpack-watch
Now that webpack is running (and watching for file changes) we can finally run the WaveTerm Dev Client! To start the client run:
Wave is an open-source AI-native terminal built for seamless workflows.
Wave isn't just another terminal emulator; it's a rethink on how terminals are built. Wave combines command line with the power of the open web to help veteran CLI users and new developers alike.
@@ -56,3 +62,7 @@ Find more information in our [Contributions Guide](CONTRIBUTING.md), which inclu
- [Ways to contribute](CONTRIBUTING.md#contributing-to-wave-terminal)
We make use of many amazing open-source projects to build Wave Terminal. Here are the links to the latest acknowledgements for each of our components, including license disclaimers for each dependency:
We make use of many amazing open-source projects to build Wave Terminal. We automatically generate license reports via FOSSA to comply with the license distribution requirements of our dependencies. Below is a summary of the licenses used by our product. For a full report, see [here](https://app.fossa.com/reports/24d13570-624b-4450-8c22-756e513060c9?full=true) (the page may take 20-30s to load).
- [Frontend](./disclaimers/frontend.md)
- [Backend](./disclaimers/backend.md)
## Generating license disclaimers
The license disclaimers for the backend are generated using the [go-licenses](https://github.com/google/go-licenses) tool. We supply a template file ([`go_licenses_report.tpl`](./go_licenses_report.tpl)) to generate a pretty print of the disclaimers for each dependency. This outputs to the file [`backend.md`](./disclaimers/backend.md).
The license disclaimers for the frontend are generated using the [`yarn licenses` tool](https://classic.yarnpkg.com/lang/en/docs/cli/licenses/). This outputs to the file [`frontend.md`](./disclaimers/frontend.md).
These disclaimer files linked above will be periodically regenerated to reflect new dependencies.
The [`scripthaus.md` file](../scripthaus.md) contains scripts to generate the disclaimers and package them. To manually generate the disclaimers, run the following from the repository root directory:
@@ -34,20 +34,23 @@ You'll now have to move the built `scripthaus` binary to a directory in your pat
sudo cp scripthaus /usr/local/bin
```
## Install nodejs, npm, and yarn
## Install nodejs and yarn
We use [nvm](https://github.com/nvm-sh/nvm) to install nodejs on Linux (you can use an alternate installer if you wish). You must have a relatively recent version of node in order to build the terminal. Different distributions and shells will require different setup instructions. These instructions work for Ubuntu 22 using bash (will install node v20.8.1):
You also need a relatively modern nodejs with npm and yarn installed.
Node can be installed from [https://nodejs.org](https://nodejs.org).
Now we can install yarn:
We use Yarn Modern to manage our packages. The recommended way to install Yarn Modern is using Corepack, a new utility shipped by NodeJS that lets you manage your package manager versioning as you would any packages.
```
npm install -g yarn
If you installed NodeJS from the official feed (via the website or using NVM), this should come preinstalled. If you use Homebrew or some other feed, you may need to manually install Corepack using `npm install -g corepack`.
For more information on Corepack, check out [this link](https://yarnpkg.com/corepack).
Once you've verified that you have Corepack installed, run the following script to set up Yarn for the repository:
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.