Compare commits

...

9 Commits

Author SHA1 Message Date
sawka ffcc18a74f cleanup line-height/padding for code blocks 2024-03-11 12:03:15 -07:00
sawka 14b5101f6a fix tooltip (should be Ctrl-Space) 2024-03-11 11:56:43 -07:00
sawka 09e5b1842d update wording on disconnected modal (restart wave backend instead of restart server) 2024-03-11 11:50:39 -07:00
sawka 19410b0024 fix background color on code blocks in markdown in light mode 2024-03-11 11:47:22 -07:00
sawka 898594f7c1 update mask color for tabswitcher to work on lightmode 2024-03-11 11:46:49 -07:00
Evan Simkowitz eab2cb616d output dl links (#414) 2024-03-08 15:16:55 -08:00
Evan Simkowitz a6f2e0b26e Fix buildres script auth (#413) 2024-03-08 14:52:46 -08:00
Evan Simkowitz 358ffb6d50 Add pacman artifact and update product tagline (#412)
This adds support for Arch Linux via pacman. It also updates the product tagline in package.json and the "About" modal. It also removes the unused "Help" menu and updates the copyright year in About and fixes the window icon display on Linux.
2024-03-08 14:05:21 -08:00
Mike Sawka a2795fb74d indicator fixup (mismatch of increments/decrements) (#411)
* addLineForCmd should only increment for running commands.  also openai lines should increment

* small fix for openai chat styles
2024-03-08 10:33:10 -08:00
17 changed files with 60 additions and 36 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ jobs:
if: matrix.platform == 'linux'
run: |
sudo apt-get update
sudo apt-get install rpm
sudo apt-get install --no-install-recommends -y libarchive-tools libopenjp2-tools rpm
- uses: actions/setup-go@v5
with:
go-version: ${{env.GO_VERSION}}
+4 -3
View File
@@ -9,7 +9,7 @@
# Wave Terminal
An open-source, cross-platform, AI-integrated, modern terminal for seamless workflows.
Wave is an open-source AI-native terminal built for seamless workflows.
Wave isn't just another terminal emulator; it's a rethink on how terminals are built. Wave combines command line with the power of the open web to help veteran CLI users and new developers alike.
@@ -17,13 +17,14 @@ 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
- Searchable contextual command history across all remote sessions (saved locally)
- Workspaces, tabs, and command blocks to keep you organized
- CodeEdit, to edit local and remote files with a VSCode-like inline editor
- AI Integration with ChatGPT (or ChatGPT compatible APIs) to help write commands and get answers inline
![WaveTerm Screenshot](./assets/wave-screenshot.jpeg)
## Installation
Wave Terminal works with MacOS and Linux (preliminary).
Wave Terminal works with MacOS and Linux.
Install Wave Terminal from: [www.waveterm.dev/download](https://www.waveterm.dev/download)
@@ -49,7 +50,7 @@ brew install --cask wave
## Contributing
Wave uses Github Project for tracking issues.
Wave uses Github Issues for issue tracking.
Find more information in our [Contributions Guide](CONTRIBUTING.md), which includes:
+1 -1
View File
@@ -13,4 +13,4 @@ fi
DOWNLOAD_DIR=$VERSION-staged
rm -rf $DOWNLOAD_DIR
mkdir -p $DOWNLOAD_DIR
aws s3 cp s3://waveterm-github-artifacts/staging/$VERSION/ $DOWNLOAD_DIR/ --recursive
aws s3 cp s3://waveterm-github-artifacts/staging/$VERSION/ $DOWNLOAD_DIR/ --recursive --profile $AWS_PROFILE
+10 -1
View File
@@ -9,4 +9,13 @@ if [ -z "$VERSION" ]; then
exit
fi
aws s3 cp s3://waveterm-github-artifacts/staging/$VERSION/ s3://dl.waveterm.dev/releases/ --recursive
ORIGIN="waveterm-github-artifacts/staging/$VERSION/"
DESTINATION="dl.waveterm.dev/releases/"
OUTPUT=$(aws s3 cp s3://$ORIGIN s3://$DESTINATION --recursive --profile $AWS_PROFILE)
for line in $OUTPUT; do
PREFIX=${line%%${DESTINATION}*}
SUFFIX=${line:${#PREFIX}}
echo "https://$SUFFIX"
done
+1 -1
View File
@@ -73,7 +73,7 @@ const config = {
executableName: pkg.productName,
category: "TerminalEmulator",
icon: "public/waveterm.icns",
target: ["zip", "deb", "rpm", "AppImage"],
target: ["zip", "deb", "rpm", "AppImage", "pacman"],
synopsis: pkg.description,
description: null,
desktop: {
+1 -1
View File
@@ -5,7 +5,7 @@
"email": "info@commandline.dev"
},
"productName": "Wave",
"description": "An open-source, cross-platform, AI-integrated, modern terminal for seamless workflows.",
"description": "An Open-Source, AI-Native, Terminal Built for Seamless Workflows",
"version": "0.7.0",
"main": "dist/emain.js",
"license": "Apache-2.0",
+1
View File
@@ -60,6 +60,7 @@
--app-panel-bg-color-dev: rgb(21, 23, 48);
--app-icon-color: rgb(139, 145, 138);
--app-icon-hover-color: #fff;
--app-selected-mask-color: rgba(255, 255, 255, 0.06);
/* icon colors */
+3
View File
@@ -17,6 +17,7 @@
--app-panel-bg-color-dev: #e0e0e0;
--app-icon-color: rgb(80, 80, 80);
--app-icon-hover-color: rgb(100, 100, 100);
--app-selected-mask-color: rgba(0, 0, 0, 0.06);
--input-bg-color: #eeeeee;
@@ -50,6 +51,8 @@
--form-element-disabled-text-color: #b7b7b7;
--form-element-placeholder-color: #b7b7b7;
--markdown-bg-color: rgb(0, 0, 0, 0.1);
/* modal colors */
--modal-header-bottom-border-color: rgba(0, 0, 0, 0.3);
+16 -14
View File
@@ -8,19 +8,6 @@
margin-bottom: 10px;
}
code {
background-color: var(--markdown-bg-color);
color: var(--app-text-color);
font-family: var(--termfontfamily);
border-radius: 4px;
}
code.inline {
padding-top: 0;
padding-bottom: 0;
font-family: var(--termfontfamily);
}
.title {
color: var(--app-text-color);
margin-top: 16px;
@@ -62,14 +49,29 @@
pre {
background-color: var(--markdown-bg-color);
margin: 4px 10px 4px 10px;
padding: 6px 6px 6px 10px;
padding: 0.7em;
border-radius: 4px;
code {
background-color: transparent;
padding: 0;
line-height: normal;
}
}
pre.selected {
outline: 2px solid var(--markdown-outline-color);
}
code {
color: var(--app-text-color);
font-family: var(--termfontfamily);
border-radius: 4px;
background-color: var(--markdown-bg-color);
padding: 0.15em 0.5em;
line-height: 1.5;
}
.title {
font-weight: semibold;
padding-top: 6px;
+1 -1
View File
@@ -24,7 +24,7 @@ function HeaderRenderer(props: any, hnum: number): any {
}
function CodeRenderer(props: any): any {
return <code className={cn({ inline: props.inline })}>{props.children}</code>;
return <code>{props.children}</code>;
}
@mobxReact.observer
+6 -3
View File
@@ -75,6 +75,7 @@ class AboutModal extends React.Component<{}, {}> {
}
render() {
const currentDate = new Date();
return (
<Modal className="about-modal">
<Modal.Header onClose={this.closeModal} title="About" />
@@ -86,9 +87,9 @@ class AboutModal extends React.Component<{}, {}> {
<div className="text-wrapper">
<div>Wave Terminal</div>
<div className="text-standard">
Modern Terminal for
Open-Source AI-Native Terminal
<br />
Seamless Workflow
Built for Seamless Workflows
</div>
</div>
</div>
@@ -122,7 +123,9 @@ class AboutModal extends React.Component<{}, {}> {
Acknowledgements
</LinkButton>
</div>
<div className="about-section text-standard">&copy; 2023 Command Line Inc.</div>
<div className="about-section text-standard">
&copy; {currentDate.getFullYear()} Command Line Inc.
</div>
</div>
</Modal>
);
+1 -1
View File
@@ -90,7 +90,7 @@ class DisconnectedModal extends React.Component<{}, {}> {
onClick={this.restartServer}
leftIcon={<i className="fa-sharp fa-solid fa-triangle-exclamation"></i>}
>
Restart Server
Restart Wave Backend
</Button>
</div>
</Modal>
+1 -1
View File
@@ -74,7 +74,7 @@
.focused-option {
border: 1px solid rgba(241, 246, 243, 0.15);
border-radius: 4px;
background: rgba(255, 255, 255, 0.06);
background: var(--app-selected-mask-color);
}
}
}
+1 -1
View File
@@ -161,7 +161,7 @@ class CmdInput extends React.Component<{}, {}> {
</CenteredIcon>
</div>
</If>
<div key="ai" title="Wave AI (Cmd-Space)" className="cmdinput-icon" onClick={this.clickAIAction}>
<div key="ai" title="Wave AI (Ctrl-Space)" className="cmdinput-icon" onClick={this.clickAIAction}>
<i className="fa-sharp fa-regular fa-sparkles fa-fw" />
</div>
<div
+4 -4
View File
@@ -279,9 +279,6 @@ const menuTemplate: Electron.MenuItemConstructorOptions[] = [
{
role: "windowMenu",
},
{
role: "help",
},
];
const menu = electron.Menu.buildFromTemplate(menuTemplate);
@@ -330,7 +327,10 @@ function createMainWindow(clientData: ClientDataType | null): Electron.BrowserWi
height: bounds.height,
minWidth: 800,
minHeight: 600,
icon: unamePlatform == "linux" ? "public/logos/wave-logo-dark.png" : undefined,
icon:
unamePlatform == "linux"
? path.join(getElectronAppBasePath(), "public/logos/wave-logo-dark.png")
: undefined,
webPreferences: {
preload: path.join(getElectronAppBasePath(), DistDir, "preload.js"),
},
+2 -1
View File
@@ -11,9 +11,9 @@
.openai-role {
color: var(--term-bright-green);
font-weight: bold;
width: 100px;
flex-shrink: 0;
font: var(--base-font);
}
.openai-role.openai-role-assistant {
@@ -24,6 +24,7 @@
color: var(--app-text-color);
font-family: var(--markdown-font);
font-weight: normal;
font-size: var(--markdown-font-size);
}
.openai-content-assistant {
+6 -2
View File
@@ -2858,10 +2858,13 @@ func OpenAICommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scbus
if promptStr == "" {
return nil, fmt.Errorf("openai error, prompt string is blank")
}
update := scbus.MakeUpdatePacket()
sstore.IncrementNumRunningCmds_Update(update, cmd.ScreenId, 1)
line, err := sstore.AddOpenAILine(ctx, ids.ScreenId, DefaultUserId, cmd)
if err != nil {
return nil, fmt.Errorf("cannot add new line: %v", err)
}
if resolveBool(pk.Kwargs["stream"], true) {
go doOpenAIStreamCompletion(cmd, clientData.ClientId, opts, prompt)
} else {
@@ -2876,7 +2879,6 @@ func OpenAICommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scbus
// ignore error again (nothing to do)
log.Printf("openai error updating screen selected line: %v\n", err)
}
update := scbus.MakeUpdatePacket()
sstore.AddLineUpdate(update, line, cmd)
update.AddUpdate(*screen)
return update, nil
@@ -3011,7 +3013,9 @@ func addLineForCmd(ctx context.Context, metaCmd string, shouldFocus bool, ids re
update := scbus.MakeUpdatePacket()
sstore.AddLineUpdate(update, rtnLine, cmd)
update.AddUpdate(*screen)
sstore.IncrementNumRunningCmds_Update(update, cmd.ScreenId, 1)
if cmd.Status == sstore.CmdStatusRunning {
sstore.IncrementNumRunningCmds_Update(update, cmd.ScreenId, 1)
}
updateHistoryContext(ctx, rtnLine, cmd, cmd.FeState)
return update, nil
}