* add icon for Linux
The app icon previously did not show up in Linux. This change fixes that
by providing the wave-logo-dark.png to the electron Browser Window.
* set the icon to only use the direct path on linux
The previous change was only required on linux and not on mac. This
ensures the old behavior will continue to be done on mac while using the
new behavior on linux.
* add filter button to the command input box
This will become a button that temporarily filters out the non-running
commands from your screen. At the moment it is only a placeholder design
that will likely change with more feedback. It does not have any
functionality at the moment.
* add view indication of active filter
This will become a clickable notification to let users know that a
filter is being applied. It displays the number of lines that are being
filtered. The plan is for it to be clickable to remove the filter. The
current version is a placeholder that is likely to change. It has no
functionality at the moment.
* add basic state to the filtering buttons
The filtering buttons up until this point haven't done anything. Now
they can be clicked and unclick causing them to render differently
depending on if they're selected. They still have no functionality
outside of their own appearance.
* add filtering functionality to filter button
The filter button now hides all non-running commands. And pressing it
again or pressing the other filter button will bring
back the hidden commands.
There are currently some formatting issues with the second button as it
jumps to the top of the screen if the filter is on and no running
commands are present.
An additional change was made to remove a variable accidentally
introduced in the last commit.
* add count for number of lines filtered out
The secondary filter button now lists the number of non-running commands
that have been filtered out. This count is added to the screen model in
case it is needed elsewhere.
* fix the style on the secondary buttons
This fixes the margin an the button to bring it in line with the line
items. It also fixes empty window screen to use a different css class.
Previously, the window-view class being used would cover the button. It
is now using the window-empty class instead.
* change formatting for secondary filter button
The button is now yellow with a border style instead of red with a solid
style. The border-radius has been changed to give the button a pill
shape.
Additionally, a style tab has been added to the button component to
provide it with custom styling. It should be changed to a custom class
design in the future.
* update style on primary filter button
This is being changed to simpler hover text in line with other text in
the cmd box.
* add number display as text for first filter button
The main filter button originally displayed a somewhat vague message.
Now it displays the number of running tasks with the rotating arrow
symbol.
* remove numLinesHidden count from model
This numLineHidden count is no longer needed with the new button design.
Furthermore, it created several warnings in react due to its
implementation. For both of these reasons, it has been removed.
* update filter functionality to better utilize mobx
This consisted of a few changes. The first was to move the filter state
from the GlobalModel to ScreenLines in order to track state separately
for each screen. Then several of the functions had to be rewritten to
wrap setting variables in the mobx.action wrapper.
As is, there are still a few issues with this design:
- the filter is not remembered when switching tabs
- if all running tasks expire, the second filter button is still present
* move filtering observable to Screen model
The previous observable did not persist when changing tabs because
ScreenLines did not persist. By moving it to Screen, the ovservable now
persists after changing tabs.
* init
* connections table
* view styles
* new components. header and status.
* action buttons
* use Button component in other modals
* hook add connection button
* RemoteConnDetailModal component
* refactor remotes model. read connection modal.
* remote conn detail modal layout and styles
* fix xterm styles
* use correct status message in xterm
* tone down color of settings input
* clean up
* edit remote conn modal
* fix buttons gap
* change button label
* archive and force install features
* use classnames
* add some class names and also set some widths / maxwidth for the table. too hard to read on large screens.
* small style updates
* fix some typescript errors, other small fixups
* fix type error
* move add button to the bottom of the table
* more improvements
* adjust layout, behavior, and style accrdg to mike's feedback
* set table max-width in css
* open detail modal after creation of new remote
* new modal component. migrate about modal to new modal component.
* migrate create remote conn modal to modal component
* working modals stack
* update some working (remote -> connection). fix typescript error in connections. remove some console.logs
* fix a couple of mobx warnings (need to wrap in action)
* register create conn modal
* follow model naming convention
* register edit remote conn modal
* reset
* reset
* reset
* reset
* use remotes model methods and wrap pushModal calls in mobx action
* only close connect modal after update for remotes returns
* register alert modal
* fix type error in app.tsx
* migrate remote detail and alert modal to base modal component
* Revert "fix conflicts"
This reverts commit 962da77918b97c09e0b85532915df374fec16d42, reversing
changes made to 34cbe34ba58f0b32dedddf6a292de6c9fef09e2e.
* only wrapper ModalProvider with mobx provider
* change archive label to delete
* fix error where isOpen method does not exist
* remove registry modal
* rename ModalStoreModel to ModalsModal
* fix issue where edit remote conn modal doesn't show
* simplify modal component
* grab remoteModel from within the remote modals
* fix edit modal
* minor change
* cleanup
* more cleanup
* change confirm wording to 'delete' instead of 'archive'. remove or-equals since isBlank is designed to check for exactly that.
* undo some of the strict typescript fixes
* undo more typescript fixes
* cleanup
* fix import
* revert build.md change
* fix clear so it doesn't archive running commands
Clear previously archived every command that existed in the current tab.
This change alters this behavior so the commands with a status of running
or detached are not archived by clear. As things currently stand,
detached is not used so the only immediate effect will be with running
commands. As before, the clear command only affects the current tab.
* remove unnecessary print
A print statement for debug still existed in the ArchiveScreenLines
function. It has been removed.
* remove isWebShare from ArchiveScreenLines
The isWebShare feature is currently unused and there is not a plan to
add it back soon. For this reason, it has been removed from the
ArchiveScreenLines function.
* clean up query formatting
* add link to terms of service
The welcome page previously referenced the terms of service without
providing a link to them. This change adds a hyperlink which allows
users to easily navigate to them.
* remove the tos checkbox
Additionally, small cleanups have been made to the formatting of the
source code.
* update color name from prompt-green to wave-green
Previously, the name prompt-green was used for the green color
associated with the branding. It has now been changed to wave-green.
This is in response to the terminal being renamed from prompt to
waveterm.
As a part of this, change the css class is-prompt-green has also been
changed. It is renamed to is-wave-green.
* update anchor tags to use wave-green color
Previously, anchor tags used the blue color that comes as default with
bulma css. They are now changed to be the wave-green color that matches
the rest of the branding.
This also involved updating the hover text to be the same color.
Note that hover links had to be specified but focus links did not. I
imagine this is because of bulma css defaults. Regardless, the previous
.content overwrite that we used for hovering hyperlinks was removed as
it is no longer necessary.
* init
* connections table
* view styles
* new components. header and status.
* action buttons
* use Button component in other modals
* hook add connection button
* RemoteConnDetailModal component
* refactor remotes model. read connection modal.
* remote conn detail modal layout and styles
* fix xterm styles
* use correct status message in xterm
* tone down color of settings input
* clean up
* edit remote conn modal
* fix buttons gap
* change button label
* archive and force install features
* use classnames
* add some class names and also set some widths / maxwidth for the table. too hard to read on large screens.
* small style updates
* fix some typescript errors, other small fixups
* fix type error
* move add button to the bottom of the table
* more improvements
* adjust layout, behavior, and style accrdg to mike's feedback
* set table max-width in css
* open detail modal after creation of new remote
* update some working (remote -> connection). fix typescript error in connections. remove some console.logs
* fix a couple of mobx warnings (need to wrap in action)
* various improvements
* animation menu on close
* finish custom dropdown
* minor change
* minor fix
* add error support for dropdown
* create remote modal
* NumberField component and more on add remote connection modal implementation
* extend TextField instead. dobounce should be handled by the user not the component
* PasswordField
* remove used code. fix ssh key file field issue
* style buttons. fix modal height issue
* use react portal for dropdown menu
* remove debugging code
* tooltip implementation
* put back modal background
* (sawka) add autofocus attribute to textfield. change label color to color-secondary. fix file menu name. fix typescript error in basicrenderer
* init
* init
* error handling
* use css
* minor improvements
* fix some issues and tabicon init
* show error indicator when empty and is required
* debounce input
* fix decorator linting issue
* icon system init
* fix bugs
* color custom icons and fix regression
* remove debugging code
* remove @tab-magenta. fix formatting.
* swap magenta for mint
* change tab color order
* testing universal build
* arch files not required anymore
* use CGO_ENABLED for wavesrv. write out notes about the universal build problems/solution
* script and updates for universal build
* more updates for sign/notarize flow for universal app
* put in prod migration check
* build prompt to wave migration into emain. updates to macos build scripts
* update some packages
* successful universal build
* remove unused code
* menu item and send event to renderer
* wire up everything
* update content
* modal content
* add mising text
* minor fix
* style fixes
* figma design init
* about header, content, and general styles
* css refactor
* more on refactor
* reuse styles from app.less in about modal
* dynamic status
* external linkn
* finish about modal
* update links
* update license link
* init
* telemetry toggle
* finish styling and functionality
* remove unused style
* rever some styles
* use goroutine in sending telementry updates
* remove wave-modal class from AlertModal
* icons and button state fixes
* minor change with goroutines
* use default cursor not not-allowed
* update newtab screen to make it match the figma mockup (still waiting on UI for name)
* fix all typescript errors
* update for new build
* remove old import
* can open / close Apps view
* gotten app list to load dynamically
* updated icons bizzare that they all have the same bg
color
* can select an app form left bar
* could not get ImageViewer to work :(
* getting rid of screenshots
* readme.md works
* fixed the color problems for icons
* more fixes
* add delay and slight opacity animation
* cleanup
* focus support
* use savedHeight as initial tbody height
* cleanup
* set container to savedHeight initially
* fix calc issue
* more calc fixes
* more calc fixes
* please sync
* can select connection. now need add conection
* latest for discussion
* solved "autoselect connection" issue
* ready for PR
* pair programming, fix some issues with new tab flow
* final updates for new connection flow. integrate add new connection with error messages. add an option to cr to not create the line/history (non-interactive use)
---------
Co-authored-by: sawka
* RPC for remote file streaming -- just implemented 'stat' for now (streaming to come)
* allow RPC iterators for MShell RPCs. implement two test commands to test viewing files
* implement read-file handler
* read-file: allow overriding of content-type and use line's cwd not remote instance cwd
* checkpoint on write-file impl
* implemented metacommand version of write file
* checkpoint, untested write-file impl
* multipart handling for write-file data
* add usetemp param to writefile
* new remote file streaming API packets. implemented 'stat' for remote files
* introduce filedata packets. allow streaming RPCs. fix RPC bug with combined packet parsers. implement file streaming for filestream RPC.
* checkpoint on adding write-file
* completely untested write-file impl -- writefilecontext, condition var for signaling new data packets, cleanup goroutine, ready/done states.
* better error messages, also unlock MServer before calling done on wfcs
* fix bug with perm json tag. change constant name
These instructions are for setting up the build on MacOS.
If you're developing on Linux please use the [Linux Build Instructions](./build-linux.md).
## Running the Development Version of Wave
If you install the production version of Wave, you'll see a semi-transparent sidebar, and the data for Wave is stored in the directory ~/.waveterm. The development version has a blue sidebar and stores its data in ~/.waveterm-dev. This allows the production and development versions to be run simultaneously with no conflicts. If the dev database is corrupted by development bugs, or the schema changes in development it will not affect the production copy.
## Prereqs and Tools
Download and install Go (must be at least go 1.18):
```
brew install go
```
Download and install ScriptHaus (to run the build commands):
```
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:
```
npm install -g yarn
```
## Clone the Repo
```
git clone git@github.com:wavetermdev/waveterm.git
```
## Building WaveShell / WaveSrv
```
scripthaus run build-backend
```
This builds the Golang backends for Wave. The binaries will put in waveshell/bin and wavesrv/bin respectively. If you're working on a new plugin or other pure frontend changes to Wave, you won't need to rebuild these unless you pull new code from the Wave Repository.
## One-Time Setup
Install modules (we use yarn):
```
yarn
```
Electron also requires specific builds of node_modules to work (because Electron embeds a specific node.js version that might not match your development node.js version). We use a special electron command to cross-compile those modules:
```
scripthaus run electron-rebuild
```
## Running WebPack
We use webpack to build both the React and Electron App Wrapper code. They are both run together using:
```
scripthaus run webpack-watch
```
## Running the WaveTerm Dev Client
Now that webpack is running (and watching for file changes) we can finally run the WaveTerm Dev Client! To start the client run:
```
scripthaus run electron
```
To kill the client, either exit the Electron App normally or just Ctrl-C the ```scripthaus run electron``` command.
Because we're running webpack in watch mode, any changes you make to the typescript will be automatically picked up by the client after a refresh. Note that I've disabled hot-reloading in the webpack config, so to pick up new changes you'll have to manually refresh the WaveTerm Client window. To do that use "Command-Shift-R" (Command-R is used internally by WaveTerm and will not force a refresh).
## Debugging the Dev Client
You can use the regular Chrome DevTools to debug the frontend application. You can open the DevTools using the keyboard shortcut `Cmd-Option-I`.
We welcome and value contributions to Wave Terminal! Wave is an open source project, always open for contributors. There are several ways you can contribute:
* Submit issues related to bugs or new feature requests
* Fix outstanding [issues](https://github.com/wavetermdev/waveterm/issues) with the existing code
* Contribute to [documentation](https://github.com/wavetermdev/waveterm-docs)
* Spread the word on social media (tag us on [LinkedIn](https://www.linkedin.com/company/commandlinedev), [Twitter/X](https://twitter.com/commandlinedev))
* Or simply ⭐️ the repository to show your appreciation
However you choose to contribute, please be mindful and respect our [code of conduct](./CODE_OF_CONDUCT.md).
> All contributions are highly appreciated! 🥰
## Before You Start
We accept patches in the form of github pull requests. If you are new to github, please review this [github pull request guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
### Contributor License Agreement
Contributions to this project must be accompanied by a Contributor License Agreement (CLA). You (or your employer) retain the copyright to your contribution, this simply gives us permission to use and redistribute your contributions as part of the project.
> On submission of your first pull request you will be prompted to sign the CLA confirming your original code contribution and that you own the intellectual property.
### Style guide
The project uses American English.
Coding style and formatting is automated for each pull request. We use [Prettier](https://prettier.io/).
## How to contribute
* For minor changes, you are welcome to [open a pull request](https://github.com/wavetermdev/waveterm/pulls).
* For major changes, please [create an issue](https://github.com/wavetermdev/waveterm/issues/new) first.
* If you are looking for a place to start take a look at [open issues](https://github.com/wavetermdev/waveterm/issues).
* Join the [Discord channel](https://discord.gg/XfvZ334gwU) to collaborate with the community on your contribution.
### Development Environment
To build and run wave term locally see instructions below:
* [MacOS build instructions](./BUILD.md)
* [Linux build instructions](./build-linux.md)
### Create a Pull Request
Guidelines:
* Before writing any code, please look through existing PRs or issues to make sure nobody is already working on the same thing.
* Develop features on a branch - do not work on the main branch
* For anything but minor fixes, please submit tests and documentation
A open-source, cross-platform, modern terminal 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.
* Inline renderers to cut down on context switching. Render code, images, markdown, and CSV files without ever leaving the terminal.
* Persistent sessions that can restore state across network disconnections and reboots
* Searchable contextual command history across all remote sessions (saved locally)
* Workspaces, tabs, and command blocks to keep you organized
## Installation
Wave Terminal works with MacOS and Linux (preliminary).
These instructions are for setting up the build on Linux (Ubuntu).
If you're developing on MacOS please use the [MacOS Build Instructions](./BUILD.md).
If you are working on a different Linux distribution, you may need to adapt some of these instructions to fit your environment.
## Running the Development Version of Wave
If you install the production version of Wave, you'll see a semi-transparent sidebar, and the data for Wave is stored in the directory ~/prompt. The development version has a red/brown sidebar and stores its data in ~/prompt-dev. This allows the production and development versions to be run simultaneously with no conflicts. If the dev database is corrupted by development bugs, or the schema changes in development it will not affect the production copy.
## Prereqs and Tools
Download and install Go (must be at least go 1.18). We also need gcc installed to run a CGO build (for Golang).
zip is required to build linux deployment packages (not required for running and debugging dev builds).
```
sudo snap install go --classic
sudo apt-get update
sudo apt-get install gcc
sudo apt-get install zip
```
Download and install [ScriptHaus](https://github.com/scripthaus-dev/scripthaus) (to run the build commands):
You'll now have to move the built `scripthaus` binary to a directory in your path (e.g. /usr/local/bin):
```
sudo cp scripthaus /usr/local/bin
```
## Install nodejs, npm, 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):
Move out of the `scripthaus` directory if you're still in it. Clone the wave repository into the directory that you'd like to use for development.
```
git clone git@github.com:wavetermdev/waveterm.git
```
## One-Time Setup
Install Wave modules (we use yarn):
```
yarn
```
Electron also requires specific builds of node_modules to work (because Electron embeds a specific node.js version that might not match your development node.js version). We use a special electron command to cross-compile those modules:
```
scripthaus run electron-rebuild
```
## Building WaveShell / WaveSrv
cd into the waveterm directory (if you haven't already) and run the build-backend command using `scripthaus`.
```
cd waveterm
scripthaus run build-backend
```
This builds the Golang backends for Wave. The binaries will put in waveshell/bin and wavesrv/bin respectively. If you're working on a new plugin or other pure frontend changes to Wave, you won't need to rebuild these unless you pull new code from the Wave Repository.
## Running WebPack
We use webpack to build both the React and Electron App Wrapper code. They are both run together using:
```
scripthaus run webpack-watch
```
## Running the WaveTerm Dev Client
Now that webpack is running (and watching for file changes) we can finally run the WaveTerm Dev Client! To start the client run:
```
scripthaus run electron
```
To kill the client, either exit the Electron App normally or just Ctrl-C the ```scripthaus run electron``` command.
Because we're running webpack in watch mode, any changes you make to the typescript will be automatically picked up by the client after a refresh. Note that I've disabled hot-reloading in the webpack config, so to pick up new changes you'll have to manually refresh the WaveTerm Client window. To do that use "Command-Shift-R" (Command-R is used internally by Wave and will not force a refresh).
## Debugging the Dev Client
You can use the regular Chrome DevTools to debug the frontend application. You can open the DevTools using the keyboard shortcut `Cmd-Option-I`.
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.