mirror of
https://github.com/wavetermdev/backup.git
synced 2026-04-22 15:26:58 -07:00
Compare commits
85 Commits
evan/newton
...
pluginapi
| Author | SHA1 | Date | |
|---|---|---|---|
| 8af0b0b7ae | |||
| fb7f055449 | |||
| 3e4bd458b3 | |||
| 18fe3f3296 | |||
| 2839179ced | |||
| 532e65c8ab | |||
| 85f22a0733 | |||
| 94de0460b4 | |||
| 71b09cb44e | |||
| 07abaa92fa | |||
| 2a4d85430a | |||
| d319e72609 | |||
| 7a5afccab3 | |||
| efe567398a | |||
| 187509504d | |||
| 903b26bfca | |||
| e692c7c180 | |||
| b37f7f722e | |||
| ff855cf308 | |||
| bf1b556537 | |||
| fc65e65f11 | |||
| cedebe2196 | |||
| 3a9f6dec6d | |||
| 51ee7bef61 | |||
| 5ce7b92232 | |||
| 81a9e74991 | |||
| 679e85a84a | |||
| da69a0f583 | |||
| 37ab1bca90 | |||
| 40757fa7f4 | |||
| e576f7f07d | |||
| 9e804232c2 | |||
| d3dbac6e77 | |||
| 198de02a65 | |||
| 8f64d6a589 | |||
| 1a51d93a54 | |||
| 9ab3b2a5b7 | |||
| 856c879cdf | |||
| ea3f744d93 | |||
| dd3d52e47d | |||
| 32499f0421 | |||
| b136c915df | |||
| 0648d48ba1 | |||
| b97423268c | |||
| 34ec4ff39f | |||
| 018bb14b6a | |||
| 99f5c094d2 | |||
| f23da6a476 | |||
| 3ae38b4aa4 | |||
| 2f57a6e067 | |||
| b762df179f | |||
| 6bcd37c28e | |||
| 9879fe4d11 | |||
| 1b81b2906c | |||
| 974275bcb4 | |||
| 57f07994e4 | |||
| 713acb664d | |||
| 613cd30c36 | |||
| c0309f1796 | |||
| 1d18a47f72 | |||
| d3e821af1c | |||
| 467664af85 | |||
| 0feaa57662 | |||
| 6ea70ff788 | |||
| f8e2aadf98 | |||
| f21a9e2aa1 | |||
| 13d3d3a180 | |||
| 5216f58e2f | |||
| 7b9287316d | |||
| 781ed2e57e | |||
| 4ac5d93ed2 | |||
| a7afefc340 | |||
| fc12dcac2f | |||
| aeacfb094e | |||
| 14da9b76e0 | |||
| 2f32d89b85 | |||
| 2e3e07d24b | |||
| e2d0664901 | |||
| 5638e7857b | |||
| 6c9dbabd56 | |||
| 13cd9dfe50 | |||
| 6fa799daf5 | |||
| 422338c04b | |||
| 76988a5277 | |||
| da69c0411d |
@@ -0,0 +1,100 @@
|
|||||||
|
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]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: scripthaus-dev/scripthaus
|
||||||
|
path: scripthaus
|
||||||
|
- uses: actions/setup-go@v4
|
||||||
|
with:
|
||||||
|
go-version: ${{env.GO_VERSION}}
|
||||||
|
cache-dependency-path: |
|
||||||
|
wavesrv/go.sum
|
||||||
|
waveshell/go.sum
|
||||||
|
scripthaus/go.sum
|
||||||
|
- run: |
|
||||||
|
go work use ./scripthaus;
|
||||||
|
cd scripthaus;
|
||||||
|
go get ./...;
|
||||||
|
CGO_ENABLED=1 go build -o scripthaus cmd/main.go
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: ${{env.NODE_VERSION}}
|
||||||
|
cache: "yarn"
|
||||||
|
- run: yarn --frozen-lockfile
|
||||||
|
- run: ./scripthaus/scripthaus run build-package-linux
|
||||||
|
- 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
|
||||||
|
- 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
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
name: "Build MacOS x64"
|
|
||||||
on: workflow_dispatch
|
|
||||||
env:
|
|
||||||
WAVETERM_VERSION: 0.5.3
|
|
||||||
GO_VERSION: '1.21.5'
|
|
||||||
NODE_VERSION: '21.5.0'
|
|
||||||
jobs:
|
|
||||||
runbuild-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@v3
|
|
||||||
with:
|
|
||||||
name: waveterm-build-darwin-x64
|
|
||||||
path: out/make/zip/darwin/x64/*.zip
|
|
||||||
retention-days: 2
|
|
||||||
runbuild-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@v3
|
|
||||||
with:
|
|
||||||
name: waveterm-build-darwin-arm64
|
|
||||||
path: out/make/zip/darwin/arm64/*.zip
|
|
||||||
retention-days: 2
|
|
||||||
|
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ jobs:
|
|||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -63,7 +63,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
# 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)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ 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
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
@@ -76,6 +76,6 @@ jobs:
|
|||||||
# ./location_of_script_within_repo/buildscript.sh
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
with:
|
with:
|
||||||
category: "/language:${{matrix.language}}"
|
category: "/language:${{matrix.language}}"
|
||||||
|
|||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["esbenp.prettier-vscode", "golang.go", "dbaeumer.vscode-eslint"]
|
||||||
|
}
|
||||||
Vendored
+21
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[javascriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[less]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[css]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Wave Terminal
|
# Wave Terminal
|
||||||
|
|
||||||
A open-source, cross-platform, modern terminal for seamless workflows.
|
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.
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ Wave isn't just another terminal emulator; it's a rethink on how terminals are b
|
|||||||
* Persistent sessions that can restore state across network disconnections and reboots
|
* Persistent sessions that can restore state across network disconnections and reboots
|
||||||
* Searchable contextual command history across all remote sessions (saved locally)
|
* Searchable contextual command history across all remote sessions (saved locally)
|
||||||
* Workspaces, tabs, and command blocks to keep you organized
|
* 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
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ brew install --cask wave
|
|||||||
* Homepage — https://www.waveterm.dev
|
* Homepage — https://www.waveterm.dev
|
||||||
* Download Page — https://www.waveterm.dev/download
|
* Download Page — https://www.waveterm.dev/download
|
||||||
* Documentation — https://docs.waveterm.dev/
|
* Documentation — https://docs.waveterm.dev/
|
||||||
|
* Blog — https://blog.waveterm.dev/
|
||||||
* Quick Start Guide — https://docs.waveterm.dev/quickstart/
|
* Quick Start Guide — https://docs.waveterm.dev/quickstart/
|
||||||
* Discord Community — https://discord.gg/XfvZ334gwU
|
* Discord Community — https://discord.gg/XfvZ334gwU
|
||||||
|
|
||||||
|
|||||||
@@ -1131,6 +1131,67 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice
|
|||||||
OTHER DEALINGS IN THE SOFTWARE.
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
## github.com/kevinburke/ssh_config
|
||||||
|
|
||||||
|
* Name: github.com/kevinburke/ssh_config
|
||||||
|
* Version: v0.0.0-20240109090616-36c8da3d7376
|
||||||
|
* License: [MIT](https://github.com/wavetermdev/ssh_config/blob/36c8da3d7376/LICENSE)
|
||||||
|
|
||||||
|
```txt
|
||||||
|
Copyright (c) 2017 Kevin Burke.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
===================
|
||||||
|
|
||||||
|
The lexer and parser borrow heavily from github.com/pelletier/go-toml. The
|
||||||
|
license for that project is copied below.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,12 +1,21 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# assumes we have Wave-darwin-x64-[version].zip and Wave-darwin-arm64-[version].zip in current directory
|
# assumes we have Wave-darwin-x64-[version].zip and Wave-darwin-arm64-[version].zip in current directory
|
||||||
VERSION=0.5.3
|
VERSION=0.6.1
|
||||||
rm -rf temp
|
rm -rf temp
|
||||||
|
rm -rf builds
|
||||||
mkdir temp
|
mkdir temp
|
||||||
mkdir temp/x64
|
mkdir temp/x64
|
||||||
X64_ZIP="Wave-darwin-x64-$VERSION.zip"
|
aws s3 cp s3://waveterm-github-artifacts/waveterm-builds.zip .
|
||||||
ARM64_ZIP="Wave-darwin-arm64-$VERSION.zip"
|
BUILDS_ZIP=waveterm-builds.zip
|
||||||
|
if ! [ -f $BUILDS_ZIP ]; then
|
||||||
|
echo "no $BUILDS_ZIP found";
|
||||||
|
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
|
if ! [ -f $X64_ZIP ]; then
|
||||||
echo "no $X64_ZIP found";
|
echo "no $X64_ZIP found";
|
||||||
exit 1;
|
exit 1;
|
||||||
@@ -48,4 +57,6 @@ DMG_NAME="waveterm-macos-universal-${DMG_VERSION}.dmg"
|
|||||||
$DMG_NAME \
|
$DMG_NAME \
|
||||||
"temp/Wave.app"
|
"temp/Wave.app"
|
||||||
echo "success, created $DMG_NAME"
|
echo "success, created $DMG_NAME"
|
||||||
|
mv $DMG_NAME builds/
|
||||||
|
rm builds/Wave-darwin-*.zip
|
||||||
spctl -a -vvv -t install temp/Wave.app/
|
spctl -a -vvv -t install temp/Wave.app/
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ signAsync({
|
|||||||
app: "temp/Wave.app",
|
app: "temp/Wave.app",
|
||||||
binaries: [
|
binaries: [
|
||||||
waveAppPath + "/Contents/Resources/app/bin/wavesrv",
|
waveAppPath + "/Contents/Resources/app/bin/wavesrv",
|
||||||
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.3-linux.amd64",
|
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-linux.amd64",
|
||||||
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.3-linux.arm64",
|
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-linux.arm64",
|
||||||
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.3-darwin.amd64",
|
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-darwin.amd64",
|
||||||
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.3-darwin.arm64",
|
waveAppPath + "/Contents/Resources/app/bin/mshell/mshell-v0.4-darwin.arm64",
|
||||||
],
|
],
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
console.log("signing success");
|
console.log("signing success");
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
"name": "waveterm",
|
"name": "waveterm",
|
||||||
"author": "Command Line Inc",
|
"author": "Command Line Inc",
|
||||||
"productName": "Wave",
|
"productName": "Wave",
|
||||||
"version": "0.5.3",
|
"version": "0.6.1",
|
||||||
"main": "dist/emain.js",
|
"main": "dist/emain.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
+12
-12
@@ -44,10 +44,10 @@ rm -rf bin/
|
|||||||
rm -rf build/
|
rm -rf build/
|
||||||
node_modules/.bin/webpack --env prod
|
node_modules/.bin/webpack --env prod
|
||||||
GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-darwin.amd64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-darwin.amd64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-darwin.arm64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-darwin.arm64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-linux.amd64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.amd64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-linux.arm64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.arm64 main-waveshell.go)
|
||||||
(cd wavesrv; CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflags "-X main.BuildTime=$(date +'%Y%m%d%H%M')" -o ../bin/wavesrv ./cmd)
|
(cd wavesrv; CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflags "-X main.BuildTime=$(date +'%Y%m%d%H%M')" -o ../bin/wavesrv ./cmd)
|
||||||
node_modules/.bin/electron-forge make
|
node_modules/.bin/electron-forge make
|
||||||
```
|
```
|
||||||
@@ -60,10 +60,10 @@ rm -rf bin/
|
|||||||
rm -rf build/
|
rm -rf build/
|
||||||
node_modules/.bin/webpack --env prod
|
node_modules/.bin/webpack --env prod
|
||||||
GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-darwin.amd64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-darwin.amd64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-darwin.arm64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-darwin.arm64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-linux.amd64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.amd64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-linux.arm64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.arm64 main-waveshell.go)
|
||||||
# adds -extldflags=-static, *only* on linux (macos does not support fully static binaries) to avoid a glibc dependency
|
# adds -extldflags=-static, *only* on linux (macos does not support fully static binaries) to avoid a glibc dependency
|
||||||
(cd wavesrv; CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflags "-linkmode 'external' -extldflags=-static $GO_LDFLAGS" -o ../bin/wavesrv ./cmd)
|
(cd wavesrv; CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflags "-linkmode 'external' -extldflags=-static $GO_LDFLAGS" -o ../bin/wavesrv ./cmd)
|
||||||
node_modules/.bin/electron-forge make
|
node_modules/.bin/electron-forge make
|
||||||
@@ -86,10 +86,10 @@ CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflag
|
|||||||
set -e
|
set -e
|
||||||
cd waveshell
|
cd waveshell
|
||||||
GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
||||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-linux.amd64 main-waveshell.go
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.amd64 main-waveshell.go
|
||||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-linux.arm64 main-waveshell.go
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.arm64 main-waveshell.go
|
||||||
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-darwin.amd64 main-waveshell.go
|
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-darwin.amd64 main-waveshell.go
|
||||||
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.3-darwin.arm64 main-waveshell.go
|
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-darwin.arm64 main-waveshell.go
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
+208
-8
@@ -99,9 +99,6 @@ body a {
|
|||||||
|
|
||||||
body code {
|
body code {
|
||||||
font-family: @terminal-font;
|
font-family: @terminal-font;
|
||||||
}
|
|
||||||
|
|
||||||
body code {
|
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,11 +120,19 @@ svg.icon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.hideScrollbarUntillHover {
|
.hideScrollbarUntillHover {
|
||||||
overflow: hidden;
|
overflow: scroll;
|
||||||
&:hover,
|
|
||||||
&:focus,
|
&::-webkit-scrollbar-thumb,
|
||||||
&:focus-within {
|
&::-webkit-scrollbar-track {
|
||||||
overflow: auto;
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-corner {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover::-webkit-scrollbar-thumb {
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -622,3 +627,198 @@ a.a-block {
|
|||||||
.text-selectable {
|
.text-selectable {
|
||||||
user-select: text;
|
user-select: text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.spin {
|
||||||
|
animation: infiniteRotate 2s linear infinite;
|
||||||
|
|
||||||
|
@keyframes infiniteRotate {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.view {
|
||||||
|
background-color: @background-session;
|
||||||
|
flex-grow: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
overflow: auto;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid rgba(241, 246, 243, 0.08);
|
||||||
|
|
||||||
|
.header {
|
||||||
|
margin: 24px 18px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.close-div {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-field {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&.settings-field.sub-field {
|
||||||
|
.settings-label {
|
||||||
|
font-weight: normal;
|
||||||
|
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.settings-error {
|
||||||
|
color: @term-red;
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: #200707;
|
||||||
|
border: 1px solid @term-red;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
.error-dismiss {
|
||||||
|
padding: 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-label {
|
||||||
|
font-weight: bold;
|
||||||
|
width: 12em;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
.info-message {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-input {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
color: @term-white;
|
||||||
|
|
||||||
|
&.settings-clickable {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.inline-edit.edit-active {
|
||||||
|
input.input {
|
||||||
|
padding: 0;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
padding: 4px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control {
|
||||||
|
.icon {
|
||||||
|
width: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-icon.color-default path {
|
||||||
|
fill: @tab-green;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-green path {
|
||||||
|
fill: @tab-green;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-orange path {
|
||||||
|
fill: @tab-orange;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-red path {
|
||||||
|
fill: @tab-red;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-yellow path {
|
||||||
|
fill: @tab-yellow;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-blue path {
|
||||||
|
fill: @tab-blue;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-mint path {
|
||||||
|
fill: @tab-mint;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-cyan path {
|
||||||
|
fill: @tab-cyan;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-white path {
|
||||||
|
fill: @tab-white;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-violet path {
|
||||||
|
fill: @tab-violet;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-pink path {
|
||||||
|
fill: @tab-pink;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-colors,
|
||||||
|
.tab-icons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.tab-color-sep,
|
||||||
|
.tab-icon-sep {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-icon,
|
||||||
|
.tab-icon-icon {
|
||||||
|
width: 1.1em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-name,
|
||||||
|
.tab-icon-name {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-select,
|
||||||
|
.tab-icon-select {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 5px;
|
||||||
|
&:hover {
|
||||||
|
outline: 2px solid white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-text {
|
||||||
|
margin-left: 20px;
|
||||||
|
|
||||||
|
color: @term-red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-share-link {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+17
-10
@@ -7,15 +7,15 @@ import * as mobx from "mobx";
|
|||||||
import { boundMethod } from "autobind-decorator";
|
import { boundMethod } from "autobind-decorator";
|
||||||
import { If } from "tsx-control-statements/components";
|
import { If } from "tsx-control-statements/components";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import type { ContextMenuOpts } from "../types/types";
|
|
||||||
import localizedFormat from "dayjs/plugin/localizedFormat";
|
import localizedFormat from "dayjs/plugin/localizedFormat";
|
||||||
import { GlobalModel } from "../model/model";
|
import { GlobalModel } from "@/models";
|
||||||
import { isBlank } from "../util/util";
|
import { isBlank } from "@/util/util";
|
||||||
import { WorkspaceView } from "./workspace/workspaceview";
|
import { WorkspaceView } from "./workspace/workspaceview";
|
||||||
import { PluginsView } from "./pluginsview/pluginsview";
|
import { PluginsView } from "./pluginsview/pluginsview";
|
||||||
import { BookmarksView } from "./bookmarks/bookmarks";
|
import { BookmarksView } from "./bookmarks/bookmarks";
|
||||||
import { HistoryView } from "./history/history";
|
import { HistoryView } from "./history/history";
|
||||||
import { ConnectionsView } from "./connections/connections";
|
import { ConnectionsView } from "./connections/connections";
|
||||||
|
import { ClientSettingsView } from "./clientsettings/clientsettings";
|
||||||
import { MainSideBar } from "./sidebar/sidebar";
|
import { MainSideBar } from "./sidebar/sidebar";
|
||||||
import { DisconnectedModal, ClientStopModal } from "./common/modals";
|
import { DisconnectedModal, ClientStopModal } from "./common/modals";
|
||||||
import { ModalsProvider } from "./common/modals/provider";
|
import { ModalsProvider } from "./common/modals/provider";
|
||||||
@@ -24,13 +24,12 @@ import "./app.less";
|
|||||||
|
|
||||||
dayjs.extend(localizedFormat);
|
dayjs.extend(localizedFormat);
|
||||||
|
|
||||||
type OV<V> = mobx.IObservableValue<V>;
|
|
||||||
|
|
||||||
@mobxReact.observer
|
@mobxReact.observer
|
||||||
class App extends React.Component<{}, {}> {
|
class App extends React.Component<{}, {}> {
|
||||||
dcWait: OV<boolean> = mobx.observable.box(false, { name: "dcWait" });
|
dcWait: OV<boolean> = mobx.observable.box(false, { name: "dcWait" });
|
||||||
|
mainContentRef: React.RefObject<HTMLDivElement> = React.createRef();
|
||||||
|
|
||||||
constructor(props: any) {
|
constructor(props: {}) {
|
||||||
super(props);
|
super(props);
|
||||||
if (GlobalModel.isDev) document.body.className = "is-dev";
|
if (GlobalModel.isDev) document.body.className = "is-dev";
|
||||||
}
|
}
|
||||||
@@ -74,6 +73,13 @@ class App extends React.Component<{}, {}> {
|
|||||||
let hasClientStop = GlobalModel.getHasClientStop();
|
let hasClientStop = GlobalModel.getHasClientStop();
|
||||||
let dcWait = this.dcWait.get();
|
let dcWait = this.dcWait.get();
|
||||||
let platform = GlobalModel.getPlatform();
|
let platform = GlobalModel.getPlatform();
|
||||||
|
let clientData = GlobalModel.clientData.get();
|
||||||
|
|
||||||
|
// Previously, this is done in sidebar.tsx but it causes flicker when clientData is null cos screen-view shifts around.
|
||||||
|
// Doing it here fixes the flicker cos app is not rendered until clientData is populated.
|
||||||
|
if (clientData == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (disconnected || hasClientStop) {
|
if (disconnected || hasClientStop) {
|
||||||
if (!dcWait) {
|
if (!dcWait) {
|
||||||
@@ -81,8 +87,8 @@ class App extends React.Component<{}, {}> {
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div id="main" className={"platform-" + platform} onContextMenu={this.handleContextMenu}>
|
<div id="main" className={"platform-" + platform} onContextMenu={this.handleContextMenu}>
|
||||||
<div className="main-content">
|
<div ref={this.mainContentRef} className="main-content">
|
||||||
<MainSideBar />
|
<MainSideBar parentRef={this.mainContentRef} clientData={clientData} />
|
||||||
<div className="session-view" />
|
<div className="session-view" />
|
||||||
</div>
|
</div>
|
||||||
<If condition={dcWait}>
|
<If condition={dcWait}>
|
||||||
@@ -101,14 +107,15 @@ class App extends React.Component<{}, {}> {
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div id="main" className={"platform-" + platform} onContextMenu={this.handleContextMenu}>
|
<div id="main" className={"platform-" + platform} onContextMenu={this.handleContextMenu}>
|
||||||
<div className="main-content">
|
<div ref={this.mainContentRef} className="main-content">
|
||||||
<MainSideBar />
|
<MainSideBar parentRef={this.mainContentRef} clientData={clientData} />
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<PluginsView />
|
<PluginsView />
|
||||||
<WorkspaceView />
|
<WorkspaceView />
|
||||||
<HistoryView />
|
<HistoryView />
|
||||||
<BookmarksView />
|
<BookmarksView />
|
||||||
<ConnectionsView model={remotesModel} />
|
<ConnectionsView model={remotesModel} />
|
||||||
|
<ClientSettingsView model={remotesModel} />
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
</div>
|
</div>
|
||||||
<ModalsProvider />
|
<ModalsProvider />
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export const SESSION_SETTINGS = "sessionSettings";
|
|||||||
export const LINE_SETTINGS = "lineSettings";
|
export const LINE_SETTINGS = "lineSettings";
|
||||||
export const CLIENT_SETTINGS = "clientSettings";
|
export const CLIENT_SETTINGS = "clientSettings";
|
||||||
export const TAB_SWITCHER = "tabSwitcher";
|
export const TAB_SWITCHER = "tabSwitcher";
|
||||||
|
export const USER_INPUT = "userInput";
|
||||||
|
|
||||||
export const LineContainer_Main = "main";
|
export const LineContainer_Main = "main";
|
||||||
export const LineContainer_History = "history";
|
export const LineContainer_History = "history";
|
||||||
@@ -16,3 +17,43 @@ export const LineContainer_Sidebar = "sidebar";
|
|||||||
export const ConfirmKey_HideShellPrompt = "hideshellprompt";
|
export const ConfirmKey_HideShellPrompt = "hideshellprompt";
|
||||||
|
|
||||||
export const NoStrPos = -1;
|
export const NoStrPos = -1;
|
||||||
|
|
||||||
|
export const RemotePtyRows = 8; // also in main.tsx
|
||||||
|
export const RemotePtyCols = 80;
|
||||||
|
export const ProdServerEndpoint = "http://127.0.0.1:1619";
|
||||||
|
export const ProdServerWsEndpoint = "ws://127.0.0.1:1623";
|
||||||
|
export const DevServerEndpoint = "http://127.0.0.1:8090";
|
||||||
|
export const DevServerWsEndpoint = "ws://127.0.0.1:8091";
|
||||||
|
export const DefaultTermFontSize = 12;
|
||||||
|
export const MinFontSize = 8;
|
||||||
|
export const MaxFontSize = 24;
|
||||||
|
export const InputChunkSize = 500;
|
||||||
|
export const RemoteColors = ["red", "green", "yellow", "blue", "magenta", "cyan", "white", "orange"];
|
||||||
|
export const TabColors = ["red", "orange", "yellow", "green", "mint", "cyan", "blue", "violet", "pink", "white"];
|
||||||
|
export const TabIcons = [
|
||||||
|
"sparkle",
|
||||||
|
"fire",
|
||||||
|
"ghost",
|
||||||
|
"cloud",
|
||||||
|
"compass",
|
||||||
|
"crown",
|
||||||
|
"droplet",
|
||||||
|
"graduation-cap",
|
||||||
|
"heart",
|
||||||
|
"file",
|
||||||
|
];
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
export const VERSION = __WAVETERM_VERSION__;
|
||||||
|
// @ts-ignore
|
||||||
|
export const BUILD = __WAVETERM_BUILD__;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Levels for the screen status indicator
|
||||||
|
*/
|
||||||
|
export enum StatusIndicatorLevel {
|
||||||
|
None = 0,
|
||||||
|
Output = 1,
|
||||||
|
Success = 2,
|
||||||
|
Error = 3,
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg width="440" height="440" version="1.1" viewBox="0 0 116.42 116.42" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle id="indicator" cx="58.266" cy="58.266" r="28.311" stroke-width=".19016"/>
|
||||||
|
<path id="spinner" d="m107.2 58.21a48.988 48.988 0 0 1-48.988 48.988" fill="none" stroke="#000" stroke-width="16.856" style="paint-order:normal"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 443 B |
@@ -1,4 +1,4 @@
|
|||||||
@import "../../app/common/themes/themes.less";
|
@import "@/common/themes/themes.less";
|
||||||
|
|
||||||
.bookmarks-view {
|
.bookmarks-view {
|
||||||
background-color: @background-session;
|
background-color: @background-session;
|
||||||
|
|||||||
@@ -7,20 +7,27 @@ import * as mobx from "mobx";
|
|||||||
import { boundMethod } from "autobind-decorator";
|
import { boundMethod } from "autobind-decorator";
|
||||||
import { If, For } from "tsx-control-statements/components";
|
import { If, For } from "tsx-control-statements/components";
|
||||||
import cn from "classnames";
|
import cn from "classnames";
|
||||||
import type { BookmarkType } from "../../types/types";
|
import { GlobalModel } from "@/models";
|
||||||
import { GlobalModel } from "../../model/model";
|
import { CmdStrCode, Markdown } from "@/common/elements";
|
||||||
import { CmdStrCode, Markdown } from "../common/common";
|
|
||||||
|
|
||||||
import { ReactComponent as XmarkIcon } from "../assets/icons/line/xmark.svg";
|
import { ReactComponent as XmarkIcon } from "@/assets/icons/line/xmark.svg";
|
||||||
import { ReactComponent as CopyIcon } from "../assets/icons/favourites/copy.svg";
|
import { ReactComponent as CopyIcon } from "@/assets/icons/favourites/copy.svg";
|
||||||
import { ReactComponent as PenIcon } from "../assets/icons/favourites/pen.svg";
|
import { ReactComponent as PenIcon } from "@/assets/icons/favourites/pen.svg";
|
||||||
import { ReactComponent as TrashIcon } from "../assets/icons/favourites/trash.svg";
|
import { ReactComponent as TrashIcon } from "@/assets/icons/favourites/trash.svg";
|
||||||
import { ReactComponent as FavoritesIcon } from "../assets/icons/favourites.svg";
|
import { ReactComponent as FavoritesIcon } from "@/assets/icons/favourites.svg";
|
||||||
|
|
||||||
import "./bookmarks.less";
|
import "./bookmarks.less";
|
||||||
|
|
||||||
|
type BookmarkProps = {
|
||||||
|
bookmark: BookmarkType;
|
||||||
|
};
|
||||||
|
|
||||||
@mobxReact.observer
|
@mobxReact.observer
|
||||||
class Bookmark extends React.Component<{ bookmark: BookmarkType }, {}> {
|
class Bookmark extends React.Component<BookmarkProps, {}> {
|
||||||
|
constructor(props: BookmarkProps) {
|
||||||
|
super(props);
|
||||||
|
}
|
||||||
|
|
||||||
@boundMethod
|
@boundMethod
|
||||||
handleDeleteClick(): void {
|
handleDeleteClick(): void {
|
||||||
let { bookmark } = this.props;
|
let { bookmark } = this.props;
|
||||||
@@ -179,6 +186,10 @@ class Bookmark extends React.Component<{ bookmark: BookmarkType }, {}> {
|
|||||||
|
|
||||||
@mobxReact.observer
|
@mobxReact.observer
|
||||||
class BookmarksView extends React.Component<{}, {}> {
|
class BookmarksView extends React.Component<{}, {}> {
|
||||||
|
constructor(props: {}) {
|
||||||
|
super(props);
|
||||||
|
}
|
||||||
|
|
||||||
@boundMethod
|
@boundMethod
|
||||||
closeView(): void {
|
closeView(): void {
|
||||||
GlobalModel.bookmarksModel.closeView();
|
GlobalModel.bookmarksModel.closeView();
|
||||||
|
|||||||
@@ -0,0 +1,200 @@
|
|||||||
|
@import "@/common/themes/themes.less";
|
||||||
|
|
||||||
|
.clientsettings-view {
|
||||||
|
background-color: @background-session;
|
||||||
|
flex-grow: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
overflow: auto;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid rgba(241, 246, 243, 0.08);
|
||||||
|
background: rgba(13, 13, 13, 0.85);
|
||||||
|
|
||||||
|
.header {
|
||||||
|
margin: 24px 18px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
border-bottom: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding: 0 18px 0 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// just marked these as important since we're keeping the
|
||||||
|
// settings-field styles below this intact until we figure out what do with them
|
||||||
|
.settings-field {
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 15px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-label {
|
||||||
|
width: 250px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @TODO: These styles are duplicated in the settings modals
|
||||||
|
.settings-field {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&.settings-field.sub-field {
|
||||||
|
.settings-label {
|
||||||
|
font-weight: normal;
|
||||||
|
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.settings-error {
|
||||||
|
color: @term-red;
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: #200707;
|
||||||
|
border: 1px solid @term-red;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
.error-dismiss {
|
||||||
|
padding: 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-label {
|
||||||
|
font-weight: bold;
|
||||||
|
width: 12em;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
.info-message {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-input {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&.settings-clickable {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.inline-edit.edit-active {
|
||||||
|
input.input {
|
||||||
|
padding: 0;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
padding: 4px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control {
|
||||||
|
.icon {
|
||||||
|
width: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-icon.color-default path {
|
||||||
|
fill: @tab-green;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-green path {
|
||||||
|
fill: @tab-green;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-orange path {
|
||||||
|
fill: @tab-orange;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-red path {
|
||||||
|
fill: @tab-red;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-yellow path {
|
||||||
|
fill: @tab-yellow;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-blue path {
|
||||||
|
fill: @tab-blue;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-mint path {
|
||||||
|
fill: @tab-mint;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-cyan path {
|
||||||
|
fill: @tab-cyan;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-white path {
|
||||||
|
fill: @tab-white;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-violet path {
|
||||||
|
fill: @tab-violet;
|
||||||
|
}
|
||||||
|
.tab-color-icon.color-pink path {
|
||||||
|
fill: @tab-pink;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-colors,
|
||||||
|
.tab-icons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.tab-color-sep,
|
||||||
|
.tab-icon-sep {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-icon,
|
||||||
|
.tab-icon-icon {
|
||||||
|
width: 1.1em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-name,
|
||||||
|
.tab-icon-name {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-color-select,
|
||||||
|
.tab-icon-select {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 5px;
|
||||||
|
&:hover {
|
||||||
|
outline: 2px solid white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-text {
|
||||||
|
margin-left: 20px;
|
||||||
|
|
||||||
|
color: @term-red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-share-link {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,250 @@
|
|||||||
|
// Copyright 2023, Command Line Inc.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import * as React from "react";
|
||||||
|
import * as mobxReact from "mobx-react";
|
||||||
|
import * as mobx from "mobx";
|
||||||
|
import { boundMethod } from "autobind-decorator";
|
||||||
|
import cn from "classnames";
|
||||||
|
import { GlobalModel, GlobalCommandRunner, RemotesModel } from "@/models";
|
||||||
|
import { Toggle, InlineSettingsTextEdit, SettingsError, Dropdown } from "@/common/elements";
|
||||||
|
import { commandRtnHandler, isBlank } from "@/util/util";
|
||||||
|
import * as appconst from "@/app/appconst";
|
||||||
|
|
||||||
|
import "./clientsettings.less";
|
||||||
|
|
||||||
|
@mobxReact.observer
|
||||||
|
class ClientSettingsView extends React.Component<{ model: RemotesModel }, { hoveredItemId: string }> {
|
||||||
|
fontSizeDropdownActive: OV<boolean> = mobx.observable.box(false, {
|
||||||
|
name: "clientSettings-fontSizeDropdownActive",
|
||||||
|
});
|
||||||
|
errorMessage: OV<string> = mobx.observable.box(null, { name: "ClientSettings-errorMessage" });
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
dismissError(): void {
|
||||||
|
mobx.action(() => {
|
||||||
|
this.errorMessage.set(null);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
handleChangeFontSize(fontSize: string): void {
|
||||||
|
const newFontSize = Number(fontSize);
|
||||||
|
this.fontSizeDropdownActive.set(false);
|
||||||
|
if (GlobalModel.termFontSize.get() == newFontSize) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const prtn = GlobalCommandRunner.setTermFontSize(newFontSize, false);
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
togglefontSizeDropdown(): void {
|
||||||
|
mobx.action(() => {
|
||||||
|
this.fontSizeDropdownActive.set(!this.fontSizeDropdownActive.get());
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
handleChangeTelemetry(val: boolean): void {
|
||||||
|
let prtn: Promise<CommandRtnType> = null;
|
||||||
|
if (val) {
|
||||||
|
prtn = GlobalCommandRunner.telemetryOn(false);
|
||||||
|
} else {
|
||||||
|
prtn = GlobalCommandRunner.telemetryOff(false);
|
||||||
|
}
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
handleChangeReleaseCheck(val: boolean): void {
|
||||||
|
let prtn: Promise<CommandRtnType> = null;
|
||||||
|
if (val) {
|
||||||
|
prtn = GlobalCommandRunner.releaseCheckAutoOn(false);
|
||||||
|
} else {
|
||||||
|
prtn = GlobalCommandRunner.releaseCheckAutoOff(false);
|
||||||
|
}
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
getFontSizes(): DropdownItem[] {
|
||||||
|
const availableFontSizes: DropdownItem[] = [];
|
||||||
|
for (let s = appconst.MinFontSize; s <= appconst.MaxFontSize; s++) {
|
||||||
|
availableFontSizes.push({ label: s + "px", value: String(s) });
|
||||||
|
}
|
||||||
|
return availableFontSizes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
inlineUpdateOpenAIModel(newModel: string): void {
|
||||||
|
const prtn = GlobalCommandRunner.setClientOpenAISettings({ model: newModel });
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
inlineUpdateOpenAIToken(newToken: string): void {
|
||||||
|
const prtn = GlobalCommandRunner.setClientOpenAISettings({ apitoken: newToken });
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
inlineUpdateOpenAIMaxTokens(newMaxTokensStr: string): void {
|
||||||
|
const prtn = GlobalCommandRunner.setClientOpenAISettings({ maxtokens: newMaxTokensStr });
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
setErrorMessage(msg: string): void {
|
||||||
|
mobx.action(() => {
|
||||||
|
this.errorMessage.set(msg);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
handleClose(): void {
|
||||||
|
GlobalModel.clientSettingsViewModel.closeView();
|
||||||
|
}
|
||||||
|
|
||||||
|
@boundMethod
|
||||||
|
handleChangeShortcut(newShortcut: string): void {
|
||||||
|
const prtn = GlobalCommandRunner.setGlobalShortcut(newShortcut);
|
||||||
|
commandRtnHandler(prtn, this.errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
getFKeys(): DropdownItem[] {
|
||||||
|
const opts: DropdownItem[] = [];
|
||||||
|
opts.push({ label: "Disabled", value: "" });
|
||||||
|
const platform = GlobalModel.getPlatform();
|
||||||
|
for (let i = 1; i <= 12; i++) {
|
||||||
|
const shortcut = (platform == "darwin" ? "Cmd" : "Alt") + "+F" + String(i);
|
||||||
|
opts.push({ label: shortcut, value: shortcut });
|
||||||
|
}
|
||||||
|
return opts;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCurrentShortcut(): string {
|
||||||
|
const clientData = GlobalModel.clientData.get();
|
||||||
|
return clientData?.clientopts?.globalshortcut ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const isHidden = GlobalModel.activeMainView.get() != "clientsettings";
|
||||||
|
if (isHidden) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cdata: ClientDataType = GlobalModel.clientData.get();
|
||||||
|
const openAIOpts = cdata.openaiopts ?? {};
|
||||||
|
const apiTokenStr = isBlank(openAIOpts.apitoken) ? "(not set)" : "********";
|
||||||
|
const maxTokensStr = String(
|
||||||
|
openAIOpts.maxtokens == null || openAIOpts.maxtokens == 0 ? 1000 : openAIOpts.maxtokens
|
||||||
|
);
|
||||||
|
const curFontSize = GlobalModel.termFontSize.get();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={cn("view clientsettings-view")}>
|
||||||
|
<header className="header">
|
||||||
|
<div className="clientsettings-title text-primary">Client Settings</div>
|
||||||
|
<div className="close-div hoverEffect" title="Close (Escape)" onClick={this.handleClose}>
|
||||||
|
<i className="fa-sharp fa-solid fa-xmark"></i>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div className="content">
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">Term Font Size</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<Dropdown
|
||||||
|
className="font-size-dropdown"
|
||||||
|
options={this.getFontSizes()}
|
||||||
|
defaultValue={`${curFontSize}px`}
|
||||||
|
onChange={this.handleChangeFontSize}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">Client ID</div>
|
||||||
|
<div className="settings-input">{cdata.clientid}</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">Client Version</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
{appconst.VERSION} {appconst.BUILD}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">DB Version</div>
|
||||||
|
<div className="settings-input">{cdata.dbversion}</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">Basic Telemetry</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<Toggle checked={!cdata.clientopts.notelemetry} onChange={this.handleChangeTelemetry} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">Check for Updates</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<Toggle
|
||||||
|
checked={!cdata.clientopts.noreleasecheck}
|
||||||
|
onChange={this.handleChangeReleaseCheck}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">OpenAI Token</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<InlineSettingsTextEdit
|
||||||
|
placeholder=""
|
||||||
|
text={apiTokenStr}
|
||||||
|
value={""}
|
||||||
|
onChange={this.inlineUpdateOpenAIToken}
|
||||||
|
maxLength={100}
|
||||||
|
showIcon={true}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">OpenAI Model</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<InlineSettingsTextEdit
|
||||||
|
placeholder="gpt-3.5-turbo"
|
||||||
|
text={isBlank(openAIOpts.model) ? "gpt-3.5-turbo" : openAIOpts.model}
|
||||||
|
value={openAIOpts.model ?? ""}
|
||||||
|
onChange={this.inlineUpdateOpenAIModel}
|
||||||
|
maxLength={100}
|
||||||
|
showIcon={true}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">OpenAI MaxTokens</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<InlineSettingsTextEdit
|
||||||
|
placeholder=""
|
||||||
|
text={maxTokensStr}
|
||||||
|
value={maxTokensStr}
|
||||||
|
onChange={this.inlineUpdateOpenAIMaxTokens}
|
||||||
|
maxLength={10}
|
||||||
|
showIcon={true}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="settings-field">
|
||||||
|
<div className="settings-label">Global Hotkey</div>
|
||||||
|
<div className="settings-input">
|
||||||
|
<Dropdown
|
||||||
|
className="hotkey-dropdown"
|
||||||
|
options={this.getFKeys()}
|
||||||
|
defaultValue={this.getCurrentShortcut()}
|
||||||
|
onChange={this.handleChangeShortcut}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<SettingsError errorMessage={this.errorMessage} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { ClientSettingsView };
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user