Compare commits

...

61 Commits

Author SHA1 Message Date
Evan Simkowitz a3fda80fe3 Trying to add react-dev-tools 2024-02-27 13:57:05 -08:00
Evan Simkowitz d9ca9394ac Adjust the active tab gradient to make it more visible with the new UI changes (#346) 2024-02-27 12:13:57 -08:00
Red J Adaya 3612bc3ae8 more on conversion to css vars (#345) 2024-02-27 09:09:03 -08:00
Mike Sawka 8a0df07b47 More UI Updates (sidebar, border radius, shelltag, colors, etc) (#344)
* tab hover

* border radius fix, and lighter scrollbar background

* tone down colors a bit

* fix shelltag

* hack collapsable sidebar (needs cleanup)
2024-02-26 23:55:45 -08:00
Cole Lashley f27f0d3958 upped timeout and changed error msg (#341) 2024-02-26 22:21:28 -08:00
Mike Sawka b120a7952d MainView UI updates (history, connections, settings, bookmarks) (#339)
* slight tab update

* sidebar separator / hightlight color restored

* fix mainviews, lots of history view fixes

* more mainview changes.  update for bottom-border, fix bookmarks
2024-02-26 15:28:59 -08:00
Mike Sawka 01e4106aa7 More UI Updates (flatter look, titlebar/tabs changes) (#338)
* updates for historyinfo

* cmdinput history fixups, scrollbars

* work with scrollbars

* create another drag region at the end of the tabs bar

* updates for header -- change title drag area, fix corner rounding, tabs spacing, etc.
2024-02-26 13:58:32 -08:00
Evan Simkowitz cbe9acf21b Update go-github to latest version and tidy up dependencies (#337) 2024-02-26 11:39:04 -08:00
sawka aeb7195eff quick fix for textarea input (fix merge) 2024-02-26 10:06:30 -08:00
Red J Adaya 19daffad56 Convert the rest of the colors to CSS variables (#333)
* css variables for sidebar

* type

* line css vars

* lines css vars

* bookmarks css vars

* clientsettings css vars

* button.less css vars

* checkbox.less css vars

* cmdstrcode.less css vars

* dropdown.less css vars

* markdown css vars

* status css vars

* convert all hex colors to rgb color

* textfield css vars

* toggle css vars

* tooltip css vars

* statusindicator css vars

* about modal css vars

* disconnected modal css vars

* editremoteconn modal css vars

* linesettings modal css vars

* tos modal css vars

* viewremoteconndetail modal css vars

* prompt css vars

* connections view css vars

* add colors comments

* history view css vars

* cmdinput css vars

* cmdinput css vars

* screenview css vars

* convert less vars to css vars
2024-02-25 23:21:23 -08:00
Cole Lashley 85d4259937 added enhanced prompt (#332) 2024-02-25 11:03:15 -08:00
Mike Sawka 7a4e1593b4 fix default term font family and style integration (#331)
* move root css vars to root.less (otherwise we get duplicate declarations).

* make the default term font family consistent (fix reload loop bug)
2024-02-24 13:13:57 -08:00
Red J Adaya 4d7212e945 implement css variables to line.less (#324) 2024-02-24 13:06:05 -08:00
Red J Adaya 1965493054 Lines css vars (#328)
* css variables for sidebar

* type

* line css vars

* lines css vars
2024-02-24 12:46:04 -08:00
Red J Adaya 1eb89e1982 css variables for sidebar (#326)
* css variables for sidebar

* type
2024-02-24 12:40:51 -08:00
Evan Simkowitz f0bb991a2e revert Dmg name to waveterm to play nice with homebrew
* revert Dmg name to waveterm to play nice with homebrew
2024-02-23 17:50:00 -08:00
Evan Simkowitz f85067998f Get version for build-universal from the build-helper output, use package.json for all versioning (#321)
* store version for build in txt file

* get version from version.txt

* remove quotes

* Use version.js for Go version too

* test

* test

* simplify things more

* rename zips to consistent waveterm name

* remove newline

* always use v

* always use Wave rather than waveterm
2024-02-23 17:44:00 -08:00
Evan Simkowitz 7e21b80af0 Update to latest checkout action in CodeQL pipeline (#325) 2024-02-23 16:43:32 -08:00
Mike Sawka 5a749d674d new layout / UI cleanup (#323)
* undo awkward backgrounds, transparencies, etc.  hope to sharpen up the active blocks and the grey/transparent backgrounds were getting in the way

* block UI and cmdinput UI overhaul

* updates for cmdinput spacing, input-sep fonts

* remove nth-child special case, fix sidebar margins

* sidebar styles

* bring back selected line

* codeedit fixes for layout / colors
2024-02-23 16:19:01 -08:00
Evan Simkowitz 6cd74028ef Make version.js read from package.json (#320) 2024-02-23 15:34:45 -08:00
Evan Simkowitz 0c3766c67b Set build version programmatically in build-helper, fix broken build-universal script (#319)
* Set build version programmatically in build-helper

* remove env var definition

* fix paths in helper scripts

* missing import

* missed some more relative paths
2024-02-23 15:14:25 -08:00
Evan Simkowitz 7b692e2644 Create zip of universal app package, clean up script (#318)
* Create zip of universal app package, clean up script

* add missing newlines
2024-02-23 12:32:52 -08:00
Mike Sawka 61de455b90 terminal font-size updates (margins, paddings, etc.) (#315)
* reorganize line styles, split lines.less into lines.less and line.less

* switch everyone to use termFontSize getter (easier to find usages)

* better font-family font-size update logic

* update line styles, clean up more

* replace icons, fix line heights

* make paddings/margins more consistent

* fix more margins, make command completions use termfontfamily

* updates for cmdinput margins, font sizes, etc.

* fix more font sizes and margins (mostly command input)

* add comment
2024-02-23 09:39:27 -08:00
Evan Simkowitz b7539a26c7 Make build-helper more generic (#314)
* Make build-helper more generic

* fix

* fix brew

* remove brew requirement since the instructions are the same

* oops

* fix

* simplify matrix
2024-02-22 18:24:28 -08:00
Sylvia Crowe a66319cfc6 fix: add missing type
The countdownactive field of the RemoteType was missed in a recent
merge. It is being added back here.
2024-02-22 16:59:47 -08:00
dependabot[bot] 3ae0589786 Bump ip from 2.0.0 to 2.0.1 (#312)
Bumps [ip](https://github.com/indutny/node-ip) from 2.0.0 to 2.0.1.
- [Commits](https://github.com/indutny/node-ip/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-22 16:32:34 -08:00
Evan Simkowitz 4aa3309c83 Update to latest Go action in build-helper
* Update to latest Go action in build-helper
2024-02-22 16:31:49 -08:00
Mike Sawka 3f83b30b06 add support for "Hack" font family (#309)
* testing hack font

* updates to allow font to be variable

* allow setting of font-family.  get initial font family from electron (needed for loading)

* add termfontfamily

* update wave logos for README

* hook up fontfamily setting, remove old dropdown active var

* get app to reload on font change.  reload fonts

* on termfontsize change, bump render version as well
2024-02-22 11:45:43 -08:00
Red J Adaya 743d6d8622 Persist line "minimized" status to DB (#306)
* backend implementation

* integrate minize linesate in UI

* remove debugging code

* change prompt:min key to wave:min
2024-02-22 11:45:08 -08:00
sawka 8bcb99fa35 update for logo margin size 2024-02-21 15:20:29 -08:00
sawka cccf6c435d update wave logos for README 2024-02-21 15:16:03 -08:00
sawka 51c0c00416 fix another special case ai-chat close + cmd focus issue 2024-02-20 23:43:56 -08:00
sawka 02d605a624 fix bug where we sometimes lose cmd focus on tab switching 2024-02-20 23:37:26 -08:00
Evan Simkowitz 96cabeff98 Fix sidebar middle div max-height calculation (#299)
* Fix sidebar middle div max-height calculation

* remove logs

* update bottom div padding
2024-02-20 12:23:39 -08:00
Red J Adaya 8cb449d2e7 remove old model (#307) 2024-02-20 12:22:09 -08:00
Mike Sawka 7b6025fd4b forward port v0.6.3 changes to main (#308) 2024-02-20 12:20:17 -08:00
Mike Sawka 07ad5f063e Fix #302 and clean up extraneous terminal margins (#303)
* font loading fix #302

* fix inconsistent paddings.  issue was that the first '[' feels indented (because of the fixed with font).  applying a negative 2px margin fixes it and allows us to remove the paddings on the other elements.
2024-02-18 17:58:22 -08:00
Evan Simkowitz fe3ffd1545 Use IsEmpty rather than nullcheck for scbus types
* Use IsEmpty rather than nullcheck for scbus types
2024-02-16 12:14:05 -08:00
Mike Sawka e2e71898c1 new wlog package to do distributed logging from waveshell back to wavesrv (#295) 2024-02-15 17:42:43 -08:00
Evan Simkowitz 07fa5bf9cb Remove verbose log from scbus (#296) 2024-02-15 16:50:03 -08:00
Evan Simkowitz 8acda3525b Break model update code out of sstore (#290)
* Break update code out of sstore

* add license disclaimers

* missed one

* add another

* fix regression in openai updates, remove unnecessary functions

* another copyright

* update casts

* fix issue with variadic updates

* remove logs

* remove log

* remove unnecessary log

* save work

* moved a bunch of stuff to scbus

* make modelupdate an object

* fix new screen not updating active screen

* add comment

* make updates into packet types

* different cast

* update comments, remove unused methods

* add one more comment

* add an IsEmpty() on model updates to prevent sending empty updates to client
2024-02-15 16:45:47 -08:00
Sylvie Crowe 158378a7ad Ssh Fixes and Improvements (#293)
* feat: parse multiple identity files in ssh

While this does not make it possible to discover multiple identity files
in every case, it does make it possible to parse them individually and
check for user input if it's required for each one.

* chore: remove unnecessary print in updatebus.go

* chore: remove unnecessary print in sshclient.go

* chore: remove old publicKey auth check

With the new callback in place, we no longer need this, so it has been
removed.

* refactor: move logic for wave and config options

The logic for making decisions between details made available from wave
and details made available from ssh_config was spread out. This change
condenses it into one function for gathering those details and one for
picking between them.

It also adds a few new keywords but the logic for those hasn't been
implemented yet.

* feat: allow attempting auth methods in any order

While waveterm does not provide the control over which order to attempt
yet, it is possible to provide that information in the ssh_config. This
change allows that order to take precedence in a case where it is set.

* feat: add batch mode support

BatchMode turns off user input to enter passwords for ssh. Because we
save passwords, we can still attempt these methods but we disable the
user interactive prompts in this case.

* fix: fix auth ordering and identity files

The last few commits introduced a few bugs that are fixed here. The
first is that the auth ordering is parsed as a single string and not a
list. This is fixed by manually splitting the string into a list. The
second is that the copy of identity files was not long enough to copy
the contents of the original. This is now updated to use the length of
the original in its construction.

* deactivate timer while connecting to new ssh

The new ssh setup handles timers differently from the old one due to the
possibility of asking for user input multiple times. This limited the
user input to entirely be done within 15 seconds. This removes that
restriction which will allow those timers to increase. It does not
impact the legacy ssh systems or the local connections on the new
system.

* merge branch 'main' into 'ssh--auth-control'

This was mostly straightforward, but it appears that a previous commit
to main broke the user input modals by deleting a function. This adds
that back in addition to the merge.

* fix: allow 60 second timeouts for ssh inputs

With the previous change, it is now possible to extend the timeout for
manual inputs. 60 seconds should be a reasonable starting point.

* fix: change size of dummy key to 2048

This fixes the CodeQL scan issue for using a weak key.
2024-02-15 15:58:50 -08:00
sawka 766b7b90ce fix directory names in build-linux.md. also fix reload accelerator for Linux (keybindings) 2024-02-15 10:01:18 -08:00
Mike Sawka b3ada77c39 create assets directory, update README with screenshot (#294) 2024-02-15 09:53:39 -08:00
sawka fb7f055449 do not try to set ZDOTDIR in rcfile (ignore). remove spurious log messages 2024-02-14 18:21:23 -08:00
Mike Sawka 3e4bd458b3 global shortcut for wave (#287)
* working on easy global shortcut for wave

* globalshortcut setting working

* cmd for macos, alt for others

* re-remove types.ts (was added back during merge)

* rename DDItem to DropdownItem, put into custom.d.ts

* make some consts
2024-02-13 17:43:02 -08:00
Red J Adaya 18fe3f3296 import aliass and configuration updates (#291) 2024-02-12 22:47:51 -08:00
Evan Simkowitz 2839179ced Fix History view not honoring sidebar width (#292)
* Fix History view not honoring sidebar width

* update comment
2024-02-12 22:34:49 -08:00
Red J Adaya 532e65c8ab Add main screens to Cmd-P search (#288)
* declare types as global

* remove mobx types aliases

* put back model_old.ts

* remove types.ts

* add main screens to Cmd-P search

* make viewData optional

* minor hint fix

* address improvements suggested by evan

* more on let to const
2024-02-12 17:54:12 -08:00
Red J Adaya 85f22a0733 Declare types as global (#282)
* declare types as global

* remove mobx types aliases

* put back model_old.ts

* remove types.ts
2024-02-12 16:39:29 -08:00
sawka 94de0460b4 fix history layout (item height and table width) 2024-02-11 23:14:29 -03:00
sawka 71b09cb44e fix typescript errors in emain.ts 2024-02-11 17:23:40 -03:00
sawka 07abaa92fa fix types for GlobalModel / GlobalCommandRunner so references work 2024-02-11 15:34:31 -03:00
Red J Adaya 2a4d85430a Fix term width in view connection detail modal (#274)
* fix term width

* add horizontal scroll to terminal when it overflows

* revert width of modal
2024-02-10 19:18:50 -03:00
Evan Simkowitz d319e72609 Refactor ModelUpdate to set up for decoupling sstore (#280)
This PR changes ModelUpdate mechanism from a statically-typed struct to an interface, allowing us to define the update mechanism and the update types separately. This sets us up to move app logic and update mechanisms into separate packages. Ultimately, sstore will only define low-level persistence logic.
2024-02-09 17:19:44 -08:00
sawka 7a5afccab3 do not unset ZDOTDIR otherwise interactive configs will be unnecessarily re-read (causing big performance problem for zsh command initialization) 2024-02-09 20:05:00 -03:00
sawka efe567398a fix ts warning 2024-02-09 18:57:07 -03:00
Sylvia Crowe 187509504d fix: type mismatch in userinput modal
A null was used in a place where a string should have been. It has been
updated to a string to remove the error associated with it.
2024-02-08 21:04:38 -08:00
Sylvie Crowe 903b26bfca Use ssh library: add user input (#281)
* feat: create backend for user input requests

This is the first part of a change that allows the backend to request
user input from the frontend. Essentially, the backend will send a
request for the user to answer some query, and the frontend will send
that answer back. It is blocking, so it needs to be used within a
goroutine.

There is some placeholder code in the frontend that will be updated in
future commits. Similarly, there is some debug code in the backend
remote.go file.

* feat: create frontend for user input requests

This is part of a change to allow the backend to request user input from
the frontend. This adds a component specifically for handling this
logic. It is only a starting point, and does not work perfectly yet.

* refactor: update user input backend/interface

This updates the user input backend to fix a few potential bugs. It also
refactors the user input request and response types to better handle
markdown and errors while making it more convenient to work with.

A couple frontend changes were made to keep everything compatible.

* fix: add props to user input request modal

There was a second place that the modals were created that I previously
missed. This fixes that second casel

* feat: complete user input modal

This rounds out the most immediate concerns for the new user input
modal. The frontend now includes a timer to show how much time is left
and will close itself once it reaches zero. Css
formatting has been cleaned up to be more reasonable.

There is still some test code present on the back end. This will be
removed once actuall examples of the new modal are in place.

* feat: create first pass known_hosts detection

Manually integrating with golang's ssh library means that the code must
authenticate known_hosts on its own. This is a first pass at creating a
system that parses the known hosts files and denys a connection if there
is a mismatch. This needs to be updated with a means to add keys to the
known-hosts file if the user requests it.

* feat: allow writing to known_hosts first pass

As a follow-up to the previous change, we now allow the user to respond
to interactive queries in order to determine if an unknown known hosts
key can be added to a known_hosts file if it is missing. This needs to
be refined further, but it gets the basic functionality there.

* feat: add user input for kbd-interactive auth

This adds a modal so the user can respond to prompts provided using the
keyboard interactive authentication method.

* feat: add interactive password authentication

This makes the ssh password authentication interactive with its own user
input modal. Unfortunately, this method does not allow trying a default
first. This will need to be expanded in the future to accomodate that.

* fix: allow automatic and interactive auth together

Previously, it was impossible to use to separate methods of the same
type to try ssh authentication. This made it impossible to make an auto
attempt before a manual one. This change restricts that by combining
them into one method where the auto attempt is tried once first and
cannot be tried again. Following that, interactive authentication can be
tried separately.

It also lowers the time limit on kbd interactive authentication to 15
seconds due to limitations on the library we are using.

* fix: set number of retries to one in ssh

Number of retries means number of attempts after the fact, not number of
total attempts. It has been adjusted from 2 to 1 to reflect this.

* refactor: change argument order in GetUserInput

This is a simple change to move the context to the first argument of
GetUserInput to match the convention used elsewhere in the code.

* fix: set number of retries to two again

I was wrong in my previous analysis. The number given is the total
number of tries. This is confusing when keyboard authentication and
password authentication are both available which usually doesn't happen.

* feat: create naive ui for ssh key passphrases

This isn't quite as reactive as the other methods, but it does attempt
to use publickey without a passphrase, then attempt to use the password
as the passphrase, and finally prompting the user for a passphrase. The
problem with this approach is that if multiple keys are used and they
all have passphrases, they need to all be checked up front. In practice,
this will not happen often, but it is something to be aware of.

* fix: add the userinput.tsx changes

These were missed in the previous commit. Adding them now.
2024-02-09 00:16:56 -03:00
Red J Adaya e692c7c180 Split model into separate files (#279)
* split settings modals

* init

* init

* remove styles not related to checkbox

* remove styles not related to CmdStrCode

* renderCmdText doesn't need styles

* remove styles not related to dropdown

* IconButton doesn't need styles because it extends Button

* remove old connections

* InfoMessage conmponent no longer needed

* fix import error

* remove styles not related to InlineSettingsTextEdit

* remove styles not related to InputDecoration

* LinkButton doesn't need styles cos it's extends Button component

* remove styles not related to markdown

* remove styles not related to modal

* NumberField doesn't need styles cos it extends TextField

* remove styles not related to PasswordField

* RemoteStatusLight no longer used. It's replaced by Status component.

* remove styles not related to ResizableSidebar

* SettingsError doesn't need styles cos it uses classnames in app.less

* remove styles not related to Status

* remove styles not related to TextField

* remove styles not related to Toggle

* remove styles not related to Tooltip

* init

* cleanup bookmarks model

* cleanup clientsettingsview model

* cleanup cmd model

* remove dayjs import from bookmarks model

* cleanup commandrunner model

* cleanup historyview model

* cleanup input model

* cleanup linecontainer model

* cleanup mainsidebar model

* cleanup main model

* cleanup plugins model

* cleanup remote model

* cleanup screen model

* cleanup screenlines model

* cleanup session model

* cleanup screenlinecontainer model

* cleanup connectionsview model

* add index.ts inside model dir

* replace /model_old imports with /model

* rename model to models

* move model_old to models

* fix ptyDataSource errors

* split models/model
2024-02-08 17:52:42 -03:00
Cole Lashley b37f7f722e Command to copy file from remote to local (#231)
* first pass of copy file

* first pass fixing up function

* fleshed out copy function, still working on display and parameters

* implemented scp like syntax

* finished implemententation of copy file - there are still issues

* more bug fixes, still running into error

* pushing waveshell concurrency and channel fixes - still need to do some qol fixes before merge

* aesthetic fixes and removed logs

* fixed bug in GetRemoteRuntimeState

* formatting small fix

* fixed pretty print bytes

* added local to local command

* small fix removing workaround

* added workaround back

* added some logs for debug

* added some more logs

* quick bug fix for update cmd race condition

* added fix for race condition

* added some more logs for debugging

* fixed up logs

* added proper fe state for dest parameter

* implemented setting status indicator output

* first pass at updating status indicators

* removed logs and small fix ups

* removed whitespace

* addressed review comments
2024-02-08 17:37:23 -03:00
210 changed files with 12119 additions and 9887 deletions
+36 -61
View File
@@ -1,69 +1,35 @@
name: "Build Helper"
on: workflow_dispatch
env:
WAVETERM_VERSION: 0.6.1
GO_VERSION: "1.21.5"
NODE_VERSION: "21.5.0"
jobs:
runbuild-darwin-x64:
name: "Build MacOS x64"
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ${{env.GO_VERSION}}
cache-dependency-path: |
wavesrv/go.sum
waveshell/go.sum
- run: brew tap scripthaus-dev/scripthaus
- run: brew install scripthaus
- uses: actions/setup-node@v4
with:
node-version: ${{env.NODE_VERSION}}
cache: "yarn"
- run: yarn --frozen-lockfile
- run: scripthaus run build-package
- uses: actions/upload-artifact@v4
with:
name: waveterm-build-darwin-x64
path: out/make/zip/darwin/x64/*.zip
retention-days: 2
runbuild-darwin-arm64:
name: "Build MacOS arm64"
runs-on: macos-latest-xlarge
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ${{env.GO_VERSION}}
cache-dependency-path: |
wavesrv/go.sum
waveshell/go.sum
- run: brew tap scripthaus-dev/scripthaus
- run: brew install scripthaus
- uses: actions/setup-node@v4
with:
node-version: ${{env.NODE_VERSION}}
cache: "yarn"
- run: yarn --frozen-lockfile
- run: scripthaus run build-package
- uses: actions/upload-artifact@v4
with:
name: waveterm-build-darwin-arm64
path: out/make/zip/darwin/arm64/*.zip
retention-days: 2
runbuild-linux:
name: "Build Linux x64"
runs-on: ubuntu-latest
needs: [runbuild-darwin-x64, runbuild-darwin-arm64]
runbuild:
outputs:
WAVETERM_VERSION: ${{ steps.set-version.outputs.WAVETERM_VERSION }}
strategy:
matrix:
include:
- platform: "darwin"
arch: "x64"
runner: "macos-latest"
scripthaus: "build-package"
- platform: "darwin"
arch: "arm64"
runner: "macos-latest-xlarge"
scripthaus: "build-package"
- platform: "linux"
arch: "x64"
runner: "ubuntu-latest"
scripthaus: "build-package-linux"
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
repository: scripthaus-dev/scripthaus
path: scripthaus
- uses: actions/setup-go@v4
- uses: actions/setup-go@v5
with:
go-version: ${{env.GO_VERSION}}
cache-dependency-path: |
@@ -79,22 +45,31 @@ jobs:
with:
node-version: ${{env.NODE_VERSION}}
cache: "yarn"
- id: set-version
run: |
VERSION=$(node -e 'console.log(require("./version.js"))')
echo "WAVETERM_VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
- run: yarn --frozen-lockfile
- run: ./scripthaus/scripthaus run build-package-linux
- run: ./scripthaus/scripthaus run ${{ matrix.scripthaus }}
- uses: actions/upload-artifact@v4
with:
name: waveterm-build-${{ matrix.platform }}-${{ matrix.arch }}
path: out/make/zip/${{ matrix.platform }}/${{ matrix.arch }}/*.zip
retention-days: 2
upload:
name: "Upload Builds"
runs-on: ubuntu-latest
needs: [runbuild]
steps:
- uses: actions/download-artifact@v4
with:
merge-multiple: true
path: buildtemp
- run: |
mv out/make/zip/linux/x64/Wave-linux-x64-$WAVETERM_VERSION.zip buildtemp/waveterm-linux-x64-v$WAVETERM_VERSION.zip
echo "${{ needs.runbuild.outputs.WAVETERM_VERSION }}" > buildtemp/version.txt
- run: (cd buildtemp; zip ../waveterm-builds.zip *)
- run: aws s3 cp waveterm-builds.zip s3://waveterm-github-artifacts/
env:
AWS_ACCESS_KEY_ID: "${{ secrets.S3_USERID }}"
AWS_SECRET_ACCESS_KEY: "${{ secrets.S3_SECRETKEY }}"
AWS_DEFAULT_REGION: us-west-2
- uses: actions/upload-artifact@v4
with:
name: waveterm-builds
path: buildtemp
retention-days: 2
+55 -56
View File
@@ -12,70 +12,69 @@
name: "CodeQL"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '36 5 * * 5'
push:
branches: ["main"]
pull_request:
branches: ["main"]
schedule:
- cron: "36 5 * * 5"
jobs:
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
actions: read
contents: read
security-events: write
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'go', 'javascript-typescript' ]
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
strategy:
fail-fast: false
matrix:
language: ["go", "javascript-typescript"]
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
+16 -11
View File
@@ -1,28 +1,31 @@
# Build Instructions for Wave Terminal
These instructions are for setting up the build on MacOS.
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.
If you install the production version of Wave, you'll see a semi-transparent gray 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:
- Node can be installed from [https://nodejs.org](https://nodejs.org).
- npm can install yarn using:
```
npm install -g yarn
@@ -40,16 +43,17 @@ git clone git@github.com:wavetermdev/waveterm.git
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.
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:
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
@@ -57,7 +61,7 @@ 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:
We use webpack to build both the React and Electron App Wrapper code. They are both run together using:
```
scripthaus run webpack-watch
@@ -65,15 +69,16 @@ 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:
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.
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).
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 "Option-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`.
You can use the regular Chrome DevTools to debug the frontend application. You can open the DevTools using the keyboard shortcut `Cmd-Option-I`.
+24 -24
View File
@@ -1,24 +1,25 @@
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="./src/app/assets/wave-logo_horizontal-coloronblack.svg">
<source media="(prefers-color-scheme: light)" srcset="./src/app/assets/wave-logo_horizontal-coloronwhite.svg">
<img alt="Wave Terminal Logo" src="./src/app/assets/wave-logo_horizontal-coloronwhite.svg" width="352" height="59" style="max-width: 100%;">
<source media="(prefers-color-scheme: dark)" srcset="./assets/waveterm-logo-horizontal-dark.png">
<source media="(prefers-color-scheme: light)" srcset="./assets/waveterm-logo-horizontal-light.png">
<img alt="Wave Terminal Logo" src="./assets/waveterm-logo-horizontal-light.png" width="240" height="80" style="max-width: 100%;">
</picture>
<br/>
</p>
# Wave Terminal
# Wave Terminal
A open-source, cross-platform, AI-integrated, 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.
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
* AI Integration with ChatGPT (or ChatGPT compatible APIs) to help write commands and get answers inline
- 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
- AI Integration with ChatGPT (or ChatGPT compatible APIs) to help write commands and get answers inline
![WaveTerm Screenshot](./assets/wave-screenshot.jpeg)
## Installation
@@ -27,31 +28,30 @@ Wave Terminal works with MacOS and Linux (preliminary).
Install Wave Terminal from: [www.waveterm.dev/download](https://www.waveterm.dev/download)
Also available as a homebrew cask for MacOS:
```
brew install --cask wave
```
## Links
* Homepage &mdash; https://www.waveterm.dev
* Download Page &mdash; https://www.waveterm.dev/download
* Documentation &mdash; https://docs.waveterm.dev/
* Blog &mdash; https://blog.waveterm.dev/
* Quick Start Guide &mdash; https://docs.waveterm.dev/quickstart/
* Discord Community &mdash; https://discord.gg/XfvZ334gwU
- Homepage &mdash; https://www.waveterm.dev
- Download Page &mdash; https://www.waveterm.dev/download
- Documentation &mdash; https://docs.waveterm.dev/
- Blog &mdash; https://blog.waveterm.dev/
- Quick Start Guide &mdash; https://docs.waveterm.dev/quickstart/
- Discord Community &mdash; https://discord.gg/XfvZ334gwU
## Building from Source
* [MacOS Build Instructions](./BUILD.md)
* [Linux Build Instructions](./build-linux.md)
- [MacOS Build Instructions](./BUILD.md)
- [Linux Build Instructions](./build-linux.md)
## Contributing
Wave uses Github Project for tracking issues.
Wave uses Github Project for tracking issues.
Find more information in our [Contributions Guide](CONTRIBUTING.md), which includes:
* [Ways to contribute](CONTRIBUTING.md#contributing-to-wave-terminal)
* [Contribution guidelines](CONTRIBUTING.md#before-you-start)
- [Ways to contribute](CONTRIBUTING.md#contributing-to-wave-terminal)
- [Contribution guidelines](CONTRIBUTING.md#before-you-start)
+4 -4
View File
@@ -179,11 +179,11 @@ THE SOFTWARE.
-----
## github.com/google/go-github/v57/github
## github.com/google/go-github/v59/github
* Name: github.com/google/go-github/v57/github
* Version: v57.0.0
* License: [BSD-3-Clause](https://github.com/google/go-github/blob/v57.0.0/LICENSE)
* Name: github.com/google/go-github/v59/github
* Version: v59.0.0
* License: [BSD-3-Clause](https://github.com/google/go-github/blob/v59.0.0/LICENSE)
```txt
Copyright (c) 2013 The go-github AUTHORS. All rights reserved.
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.8.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1000 175" style="enable-background:new 0 0 1000 175;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_00000091720229019135579030000007505974356775393451_);}
.st2{fill:#FFFFFF;}
.st3{fill:#58C142;}
.st4{fill:url(#SVGID_00000057844994756141690520000013392915125647203757_);}
.st5{fill:url(#SVGID_00000122684313424325124480000003010239515924857535_);}
.st6{fill:url(#SVGID_00000075883355893983351890000012882526639983753630_);}
.st7{fill:url(#SVGID_00000000207897583077398290000006853703841187474602_);}
.st8{fill:url(#SVGID_00000008108614519912429220000010116473681835506344_);}
.st9{fill:url(#SVGID_00000132058454267173112380000008245439973034275726_);}
.st10{fill:url(#SVGID_00000034804588790703597750000013460998990473107363_);}
.st11{fill:url(#SVGID_00000131349218605867433520000014539481291819864990_);}
.st12{fill:url(#SVGID_00000003071904852992499350000013371332860686737080_);}
.st13{fill:url(#SVGID_00000072278415138862792700000002042113538205077667_);}
</style>
<g>
<path class="st3" d="M339.7,20.6h26.5l30.9,100.8l33.5-100.8h22l33.5,100.8l31.2-100.8h26.5L497.9,156h-23.8L441.9,55.4L409.1,156
h-23.8L339.7,20.6z"/>
<path class="st3" d="M693.8,20.6V156h-25.9V133c-10.5,16.2-27.2,26.2-47.9,26.2c-35.9,0-62.3-29.3-62.3-71
c0-41.4,26.5-70.7,62.3-70.7c20.7,0,37.5,10,47.9,26.2v-23H693.8z M667.9,88.2c0-28.3-17.3-48.2-41.9-48.2
c-24.6,0-42.2,19.9-42.2,48.2c0,28.3,17.6,48.5,42.2,48.5C650.6,136.6,667.9,116.5,667.9,88.2z"/>
<path class="st3" d="M713.8,20.6h27.8l42.2,105.3l41.4-105.3h28L796,156h-24.4L713.8,20.6z"/>
<path class="st3" d="M970.7,122.2l15.2,16c-11.8,12.8-35.6,21-54.7,21c-37.5,0-69.9-29.6-69.9-71.2c0-40.6,30.6-70.5,68.1-70.5
c41.4,0,65.5,30.9,65.5,79.1H886.6c3.1,23.8,19.9,41.1,44,41.1C945.3,137.7,962.3,131.1,970.7,122.2z M886.9,77.5h82.8
c-2.6-21.7-16.2-38.5-39.8-38.5C908.1,38.9,890.8,54.1,886.9,77.5z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="5.2128" y1="58.9088" x2="240.4477" y2="58.9088">
<stop offset="0.1418" style="stop-color:#1F4D22"/>
<stop offset="0.8656" style="stop-color:#418D31"/>
</linearGradient>
<path class="st0" d="M83.6,80.8c-12.3,0-19.1,8-22.8,25.9l-55.6-8C12,40.1,34.8,11.7,79.9,11.7C113.3,11.7,146,37,162,37
c12.4,0,19.1-8.6,22.8-25.9l55.6,8c-6.2,58.7-29.6,87.1-74.7,87.1C131.8,106.1,100.3,80.8,83.6,80.8z"/>
</g>
<g>
<linearGradient id="SVGID_00000145018229965941010500000002424778669397199792_" gradientUnits="userSpaceOnUse" x1="20.9171" y1="116.0912" x2="256.1519" y2="116.0912">
<stop offset="0.2223" style="stop-color:#418D31"/>
<stop offset="0.7733" style="stop-color:#58C142"/>
</linearGradient>
<path style="fill:url(#SVGID_00000145018229965941010500000002424778669397199792_);" d="M99.3,138c-12.3,0-19.1,8-22.8,25.9
l-55.6-8c6.8-58.6,29.6-87.1,74.7-87.1c33.3,0,66.1,25.3,82.1,25.3c12.4,0,19.1-8.6,22.8-25.9l55.6,8
c-6.2,58.7-29.6,87.1-74.7,87.1C147.5,163.3,116,138,99.3,138z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.8.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1000 175" style="enable-background:new 0 0 1000 175;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_00000097467401116752621440000013265923851559160252_);}
.st2{fill:#FFFFFF;}
.st3{fill:#58C142;}
.st4{fill:url(#SVGID_00000026844058065691411450000001084298207851076753_);}
.st5{fill:url(#SVGID_00000140695609015829564530000017877493759276215708_);}
.st6{fill:url(#SVGID_00000172429467579424709090000016892278147863045285_);}
.st7{fill:url(#SVGID_00000111161844774090145740000012271107721736914070_);}
.st8{fill:url(#SVGID_00000159463458951391818050000007934417898368699555_);}
.st9{fill:url(#SVGID_00000114048161574266679140000001630328408055608234_);}
.st10{fill:url(#SVGID_00000181790832707237646570000012870231436607310721_);}
.st11{fill:url(#SVGID_00000182504551275047381220000018143622223532349093_);}
.st12{fill:url(#SVGID_00000182503296231706301150000015159284117431565225_);}
.st13{fill:url(#SVGID_00000157991892590648824540000004483708798912232327_);}
</style>
<g>
<path d="M339.7,20.6h26.5l30.9,100.8l33.5-100.8h22l33.5,100.8l31.2-100.8h26.5L497.9,156h-23.8L441.9,55.4L409.1,156h-23.8
L339.7,20.6z"/>
<path d="M693.8,20.6V156h-25.9V133c-10.5,16.2-27.2,26.2-47.9,26.2c-35.9,0-62.3-29.3-62.3-71c0-41.4,26.5-70.7,62.3-70.7
c20.7,0,37.5,10,47.9,26.2v-23H693.8z M667.9,88.2c0-28.3-17.3-48.2-41.9-48.2c-24.6,0-42.2,19.9-42.2,48.2
c0,28.3,17.6,48.5,42.2,48.5C650.6,136.6,667.9,116.5,667.9,88.2z"/>
<path d="M713.8,20.6h27.8l42.2,105.3l41.4-105.3h28L796,156h-24.4L713.8,20.6z"/>
<path d="M970.7,122.2l15.2,16c-11.8,12.8-35.6,21-54.7,21c-37.5,0-69.9-29.6-69.9-71.2c0-40.6,30.6-70.5,68.1-70.5
c41.4,0,65.5,30.9,65.5,79.1H886.6c3.1,23.8,19.9,41.1,44,41.1C945.3,137.7,962.3,131.1,970.7,122.2z M886.9,77.5h82.8
c-2.6-21.7-16.2-38.5-39.8-38.5C908.1,38.9,890.8,54.1,886.9,77.5z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="5.2128" y1="58.9088" x2="240.4477" y2="58.9088">
<stop offset="0.1418" style="stop-color:#1F4D22"/>
<stop offset="0.8656" style="stop-color:#418D31"/>
</linearGradient>
<path class="st0" d="M83.6,80.8c-12.3,0-19.1,8-22.8,25.9l-55.6-8C12,40.1,34.8,11.7,79.9,11.7C113.3,11.7,146,37,162,37
c12.4,0,19.1-8.6,22.8-25.9l55.6,8c-6.2,58.7-29.6,87.1-74.7,87.1C131.8,106.1,100.3,80.8,83.6,80.8z"/>
</g>
<g>
<linearGradient id="SVGID_00000055697211621202625680000016003686276294146176_" gradientUnits="userSpaceOnUse" x1="20.9171" y1="116.0912" x2="256.1519" y2="116.0912">
<stop offset="0.2223" style="stop-color:#418D31"/>
<stop offset="0.7733" style="stop-color:#58C142"/>
</linearGradient>
<path style="fill:url(#SVGID_00000055697211621202625680000016003686276294146176_);" d="M99.3,138c-12.3,0-19.1,8-22.8,25.9
l-55.6-8c6.8-58.6,29.6-87.1,74.7-87.1c33.3,0,66.1,25.3,82.1,25.3c12.4,0,19.1-8.6,22.8-25.9l55.6,8
c-6.2,58.7-29.6,87.1-74.7,87.1C147.5,163.3,116,138,99.3,138z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

+29
View File
@@ -0,0 +1,29 @@
<svg width="74" height="73" viewBox="0 0 74 73" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Icon Center Image Artwork">
<g id="Guide - Hide">
<rect x="1" width="44.7379" height="44.7379" fill="#EA33EC" fill-opacity="0.1"/>
<rect x="3.18447" y="2.18447" width="40.3689" height="40.3689" stroke="#EA33EC" stroke-opacity="0.09" stroke-width="4.36893"/>
</g>
<g id="wave-logo_appicon 1">
<path id="Vector" d="M73.8156 -0.808594H0.191406V72.8156H73.8156V-0.808594Z" fill="black"/>
<g id="Group">
<g id="Group_2">
<path id="Vector_2" d="M27.2969 34.6218C24.7516 34.6218 23.3523 36.2741 22.5859 39.9726L11.125 38.3132C12.5242 26.2194 17.2352 20.3624 26.5305 20.3624C33.407 20.3624 40.157 25.5866 43.4688 25.5866C46.0141 25.5866 47.4133 23.8007 48.1797 20.2358L59.6406 21.8882C58.368 33.9819 53.5305 39.846 44.2352 39.846C37.225 39.846 30.7352 34.6218 27.2969 34.6218Z" fill="url(#paint0_linear_1373_32879)"/>
</g>
<g id="Group_3">
<path id="Vector_3" d="M30.5312 46.4133C27.9859 46.4133 26.5867 48.0656 25.8203 51.7641L14.3594 50.1047C15.7586 38.0109 20.4695 32.1539 29.7648 32.1539C36.6414 32.1539 43.3914 37.3781 46.7031 37.3781C49.2484 37.3781 50.6477 35.5922 51.4141 32.0273L62.875 33.6797C61.6023 45.7734 56.7648 51.6375 47.4695 51.6375C40.4664 51.6375 33.9695 46.4133 30.5312 46.4133Z" fill="url(#paint1_linear_1373_32879)"/>
</g>
</g>
</g>
</g>
<defs>
<linearGradient id="paint0_linear_1373_32879" x1="11.1241" y1="30.1035" x2="59.6372" y2="30.1035" gradientUnits="userSpaceOnUse">
<stop offset="0.1418" stop-color="#1F4D22"/>
<stop offset="0.8656" stop-color="#418D31"/>
</linearGradient>
<linearGradient id="paint1_linear_1373_32879" x1="14.3628" y1="41.8964" x2="62.8759" y2="41.8964" gradientUnits="userSpaceOnUse">
<stop offset="0.2223" stop-color="#418D31"/>
<stop offset="0.7733" stop-color="#58C142"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

+42
View File
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.8.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 600 400" style="enable-background:new 0 0 600 400;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_00000112609801797065440120000009078644614516335013_);}
.st2{fill:#FFFFFF;}
.st3{fill:#58C142;}
.st4{fill:url(#SVGID_00000140705471064485508570000011374545427215048096_);}
.st5{fill:url(#SVGID_00000070096993167771140800000009230862614014512804_);}
.st6{fill:url(#SVGID_00000018927797001490499930000007907141601259141028_);}
.st7{fill:url(#SVGID_00000177467729764420216790000007105154932047940258_);}
.st8{fill:url(#SVGID_00000094609616810712664470000012347852020703354001_);}
.st9{fill:url(#SVGID_00000147904120639373224840000010231811793887454594_);}
.st10{fill:url(#SVGID_00000124156599372995293460000015010576141345595828_);}
.st11{fill:url(#SVGID_00000113335101732495131180000003771446430366466471_);}
.st12{fill:url(#SVGID_00000123421819715807053460000011277887084625979316_);}
.st13{fill:url(#SVGID_00000070797766435397124570000013813146128488798621_);}
</style>
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="7.3142" y1="133.3046" x2="556.0522" y2="133.3046">
<stop offset="0.1418" style="stop-color:#1F4D22"/>
<stop offset="0.8656" style="stop-color:#418D31"/>
</linearGradient>
<path class="st0" d="M190.2,184.4c-28.8,0-44.6,18.7-53.3,60.5L7.3,226.2C23.2,89.4,76.4,23.1,181.6,23.1
c77.8,0,154.1,59.1,191.6,59.1c28.8,0,44.7-20.2,53.3-60.5l129.6,18.7c-14.4,136.8-69.1,203.1-174.3,203.1
C302.6,243.5,229.1,184.4,190.2,184.4z"/>
</g>
<g>
<linearGradient id="SVGID_00000085247734223146048360000005883855174484422067_" gradientUnits="userSpaceOnUse" x1="43.9478" y1="266.6954" x2="592.6859" y2="266.6954">
<stop offset="0.2223" style="stop-color:#418D31"/>
<stop offset="0.7733" style="stop-color:#58C142"/>
</linearGradient>
<path style="fill:url(#SVGID_00000085247734223146048360000005883855174484422067_);" d="M226.8,317.8
c-28.8,0-44.6,18.7-53.3,60.5L43.9,359.6c15.8-136.8,69.1-203.1,174.3-203.1c77.8,0,154.1,59.1,191.6,59.1
c28.8,0,44.7-20.2,53.3-60.5l129.6,18.7c-14.4,136.8-69.1,203.1-174.3,203.1C339.2,376.9,265.7,317.8,226.8,317.8z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

+14 -14
View File
@@ -1,16 +1,16 @@
# Build Instructions for Wave Terminal on Linux
These instructions are for setting up the build on Linux (Ubuntu).
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.
If you install the production version of Wave, you'll see a semi-transparent gray 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). We also need gcc installed to run a CGO build (for Golang).
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).
```
@@ -36,7 +36,7 @@ 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):
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):
```
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
@@ -50,10 +50,9 @@ Now we can install yarn:
npm install -g yarn
```
## Clone the Wave Repo
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.
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
@@ -62,11 +61,12 @@ 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:
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
@@ -81,12 +81,11 @@ 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.
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:
We use webpack to build both the React and Electron App Wrapper code. They are both run together using:
```
scripthaus run webpack-watch
@@ -94,15 +93,16 @@ 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:
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.
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).
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`.
You can use the regular Chrome DevTools to debug the frontend application. You can open the DevTools using the keyboard shortcut `Cmd-Option-I`.
+2 -2
View File
@@ -1,3 +1,3 @@
temp/
*/
*.zip
*.dmg
*.dmg
+3 -3
View File
@@ -1,9 +1,9 @@
const eu = require("@electron/universal");
const path = require("path");
let x64Path = path.resolve(__dirname, "temp", "x64", "Wave.app")
let arm64Path = path.resolve(__dirname, "temp", "arm64", "Wave.app")
let outPath = path.resolve(__dirname, "temp", "Wave.app")
const x64Path = path.resolve(__dirname, "temp", "x64", "Wave.app");
const arm64Path = path.resolve(__dirname, "temp", "arm64", "Wave.app");
const outPath = path.resolve(__dirname, "temp", "Wave.app");
console.log("building universal package");
console.log("x64 path", x64Path);
+76 -41
View File
@@ -1,11 +1,19 @@
#!/bin/bash
# This script is used to build the universal app for macOS
# assumes we have Wave-darwin-x64-[version].zip and Wave-darwin-arm64-[version].zip in current directory
VERSION=0.6.1
rm -rf temp
rm -rf builds
mkdir temp
mkdir temp/x64
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
rm -f *.zip *.dmg
ZIP_DIR=$SCRIPT_DIR/zip
rm -rf $ZIP_DIR
mkdir $ZIP_DIR
TEMP_DIR=$SCRIPT_DIR/temp
rm -rf $TEMP_DIR
mkdir $TEMP_DIR
BUILDS_DIR=$SCRIPT_DIR/builds
rm -rf $BUILDS_DIR
# Download the builds zip
aws s3 cp s3://waveterm-github-artifacts/waveterm-builds.zip .
BUILDS_ZIP=waveterm-builds.zip
if ! [ -f $BUILDS_ZIP ]; then
@@ -13,40 +21,66 @@ if ! [ -f $BUILDS_ZIP ]; then
exit 1;
fi
echo "unzipping $BUILDS_ZIP"
unzip -q $BUILDS_ZIP -d builds
X64_ZIP="builds/Wave-darwin-x64-$VERSION.zip"
ARM64_ZIP="builds/Wave-darwin-arm64-$VERSION.zip"
if ! [ -f $X64_ZIP ]; then
echo "no $X64_ZIP found";
exit 1;
fi
if ! [ -f $ARM64_ZIP ]; then
echo "no $ARM64_ZIP found"
exit 1;
fi
unzip -q $BUILDS_ZIP -d $BUILDS_DIR
rm $BUILDS_ZIP
# Ensure we have exactly one of each build
find_build()
{
local BUILD_DIR=$1
local BUILD_PATTERN=$2
local BUILD_PATH=$(find $BUILD_DIR -type f -iname "$BUILD_PATTERN")
local NUM_MATCHES=$(echo $BUILD_PATH | wc -l)
if [ "0" -eq "$NUM_MATCHES" ]; then
echo "no $BUILD_NAME found in $BUILD_DIR"
exit 1
elif [ "1" -lt "$NUM_MATCHES" ]; then
echo "multiple $BUILD_NAME found in $BUILD_DIR"
exit 1
fi
echo $BUILD_PATH
}
X64_ZIP=$(find_build $BUILDS_DIR "Wave-darwin-x64-*.zip")
ARM64_ZIP=$(find_build $BUILDS_DIR "Wave-darwin-arm64-*.zip")
set -e
echo "unzipping version v$VERSION zip files"
ls -l "$X64_ZIP" "$ARM64_ZIP"
unzip -q $X64_ZIP -d temp/x64
mkdir temp/arm64
unzip -q $ARM64_ZIP -d temp/arm64
lipo -create -output temp/wavesrv temp/x64/Wave.app/Contents/Resources/app/bin/wavesrv temp/arm64/Wave.app/Contents/Resources/app/bin/wavesrv
rm -rf temp/arm64/Wave.app/Contents/Resources/app
mv temp/x64/Wave.app/Contents/Resources/app temp/
cp temp/wavesrv temp/app/bin/wavesrv
mkdir temp/x64/Wave.app/Contents/Resources/app
mkdir temp/arm64/Wave.app/Contents/Resources/app
node build-universal.js
rm -rf temp/Wave.app/Contents/Resources/app
mv temp/app temp/Wave.app/Contents/Resources/app
node osx-sign.js
DEBUG=electron-notarize node osx-notarize.js
echo "unzipping zip files"
unzip -q $X64_ZIP -d $TEMP_DIR/x64
unzip -q $ARM64_ZIP -d $TEMP_DIR/arm64
rm $ARM64_ZIP $X64_ZIP
# Create universal app and sign and notarize it
TEMP_WAVE_DIR_ARM=$TEMP_DIR/x64/Wave.app
TEMP_WAVE_DIR_X64=$TEMP_DIR/arm64/Wave.app
TEMP_WAVE_DIR_UNIVERSAL=$TEMP_DIR/Wave.app
lipo -create -output $TEMP_DIR/wavesrv $TEMP_WAVE_DIR_X64/Contents/Resources/app/bin/wavesrv $TEMP_WAVE_DIR_ARM/Contents/Resources/app/bin/wavesrv
rm -rf $TEMP_WAVE_DIR_ARM/Contents/Resources/app
mv $TEMP_WAVE_DIR_X64/Contents/Resources/app $TEMP_DIR
cp $TEMP_DIR/wavesrv $TEMP_DIR/app/bin/wavesrv
mkdir $TEMP_WAVE_DIR_ARM/Contents/Resources/app
mkdir $TEMP_WAVE_DIR_X64/Contents/Resources/app
node $SCRIPT_DIR/build-universal.js
rm -rf $TEMP_WAVE_DIR_UNIVERSAL/Contents/Resources/app
mv $TEMP_DIR/app $TEMP_WAVE_DIR_UNIVERSAL/Contents/Resources/app
node $SCRIPT_DIR/osx-sign.js
DEBUG=electron-notarize node $SCRIPT_DIR/osx-notarize.js
echo "universal app creation success (build/sign/notarize)"
UVERSION=$(cat $BUILDS_DIR/version.txt)
DMG_NAME="waveterm-macos-universal-${UVERSION}.dmg"
ZIP_NAME="Wave-macos-universal-${UVERSION}.zip"
echo "creating universal zip"
ditto $TEMP_WAVE_DIR_UNIVERSAL $ZIP_DIR/Wave.app
cd $ZIP_DIR
zip -9yqr $ZIP_NAME Wave.app
mv $ZIP_NAME $BUILDS_DIR/
cd $SCRIPT_DIR
# Expects create-dmg repo to be cloned in the same parent directory as the waveterm repo.
echo "creating universal dmg"
rm -f *.dmg
DMG_VERSION=$(node -e 'console.log(require("../version.js"))')
DMG_NAME="waveterm-macos-universal-${DMG_VERSION}.dmg"
../../create-dmg/create-dmg \
$SCRIPT_DIR/../../create-dmg/create-dmg \
--volname "WaveTerm" \
--window-pos 200 120 \
--window-size 600 300 \
@@ -55,8 +89,9 @@ DMG_NAME="waveterm-macos-universal-${DMG_VERSION}.dmg"
--hide-extension "Wave.app" \
--app-drop-link 400 125 \
$DMG_NAME \
"temp/Wave.app"
"$TEMP_WAVE_DIR_UNIVERSAL"
echo "success, created $DMG_NAME"
mv $DMG_NAME builds/
rm builds/Wave-darwin-*.zip
spctl -a -vvv -t install temp/Wave.app/
mv $DMG_NAME $BUILDS_DIR/
spctl -a -vvv -t install $TEMP_WAVE_DIR_UNIVERSAL/
rm -rf $TEMP_DIR $ZIP_DIR
+13 -9
View File
@@ -1,14 +1,18 @@
const { notarize } = require('@electron/notarize');
// DEBUG=electron-notarize
const { notarize } = require("@electron/notarize");
const path = require("path");
console.log("running osx-notarize");
const waveAppPath = path.resolve(__dirname, "temp", "Wave.app");
notarize({
appPath: "temp/Wave.app",
appPath: waveAppPath,
tool: "notarytool",
keychainProfile: "notarytool-creds",
}).then(() => {
console.log("notarize success");
}).catch((e) => {
console.log("notarize error", e);
process.exit(1);
});
})
.then(() => {
console.log("notarize success");
})
.catch((e) => {
console.log("notarize error", e);
process.exit(1);
});
+11 -9
View File
@@ -1,10 +1,10 @@
const { signAsync } = require("@electron/osx-sign");
// DEBUG="electron-osx-sign*"
const path = require("path");
console.log("running osx-sign");
let waveAppPath = "temp/Wave.app";
const waveAppPath = path.resolve(__dirname, "temp", "Wave.app");
signAsync({
app: "temp/Wave.app",
app: waveAppPath,
binaries: [
waveAppPath + "/Contents/Resources/app/bin/wavesrv",
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-linux.amd64",
@@ -12,9 +12,11 @@ signAsync({
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-darwin.amd64",
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-darwin.arm64",
],
}).then(() => {
console.log("signing success");
}).catch((e) => {
console.log("signing error", e);
process.exit(1);
});
})
.then(() => {
console.log("signing success");
})
.catch((e) => {
console.log("signing error", e);
process.exit(1);
});
+1
View File
@@ -1,3 +1,4 @@
github.com/aws/aws-sdk-go-v2/service/s3 v1.27.11 h1:3/gm/JTX9bX8CpzTgIlrtYpB3EVBDxyg/GY/QdcIEZw=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=

Some files were not shown because too many files have changed in this diff Show More