Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/docs/gettingstarted.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ id: "gettingstarted"
title: "Getting Started"
---

import { PlatformProvider, PlatformSelectorButton, PlatformItem } from "@site/src/components/platformcontext.tsx";
import { Kbd } from "@site/src/components/kbd.tsx";
import { PlatformProvider, PlatformSelectorButton, PlatformItem } from "@site/src/components/platformcontext";
import { Kbd } from "@site/src/components/kbd";

Wave Terminal is a modern terminal that includes graphical capabilities like web browsing, file previews, and AI assistance alongside traditional terminal features. This guide will help you get started.

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ hide_title: true
hide_table_of_contents: true
---

import { Card, CardGroup } from "@site/src/components/card.tsx";
import { Card, CardGroup } from "@site/src/components/card";

# Welcome to Wave Terminal

Expand Down
10 changes: 6 additions & 4 deletions docs/docs/keybindings.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ id: "keybindings"
title: "Key Bindings"
---

import { Kbd, KbdChord } from "@site/src/components/kbd.tsx";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext.tsx";
import { Kbd, KbdChord } from "@site/src/components/kbd";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext";

<PlatformProvider>

Expand All @@ -26,6 +26,7 @@ Chords are shown with a + between the keys. You have 2 seconds to hit the 2nd ch
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <Kbd k="Cmd:t"/> | Open a new tab |
| <Kbd k="Cmd:n"/> | Open a new block (defaults to a terminal block with the same connection and working directory). Switch to launcher using `app:defaultnewblock` setting |
| <Kbd k="Cmd:Shift:a"/> | Toggle WaveAI panel visibility |
| <Kbd k="Cmd:d"/> | Split horizontally, open a new block to the right |
| <Kbd k="Cmd:Shift:d"/> | Split vertically, open a new block below |
| <KbdChord karr={["Ctrl:Shift:s", "ArrowUp"]}/> | Split vertically, open a new block above |
Expand All @@ -39,12 +40,13 @@ Chords are shown with a + between the keys. You have 2 seconds to hit the 2nd ch
| <Kbd k="Cmd:g"/> | Open the "connection" switcher |
| <Kbd k="Cmd:i"/> | Refocus the current block (useful if the block has lost input focus) |
| <Kbd k="Ctrl:Shift"/> | Show block numbers |
| <Kbd k="Ctrl:Shift:0"/> | Focus WaveAI input |
| <Kbd k="Ctrl:Shift:1-9"/> | Switch to block number |
| <Kbd k="Ctrl:Shift:Arrows"/> | Move left, right, up, down between blocks |
| <Kbd k="Ctrl:Shift:k"/> | Replace the current block with a launcher block |
| <Kbd k="Cmd:1-9"/> | Switch to tab number |
| <Kbd k="Cmd:["/> | Switch tab left |
| <Kbd k="Cmd:]"/> | Switch tab right |
| <Kbd k="Cmd:["/> / <Kbd k="Shift:Cmd:["/> | Switch tab left |
| <Kbd k="Cmd:]"/> / <Kbd k="Shift:Cmd:]"/> | Switch tab right |
| <Kbd k="Cmd:Ctrl:1-9"/> | Switch to workspace number |
| <Kbd k="Cmd:Shift:r"/> | Refresh the UI |
| <Kbd k="Ctrl:Shift:i"/> | Toggle terminal multi-input mode |
Expand Down
6 changes: 3 additions & 3 deletions docs/docs/tabs.mdx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
sidebar_position: 3.2
sidebar_position: 3.25
id: "tabs"
title: "Tabs"
---

import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext.tsx";
import { Kbd } from "@site/src/components/kbd.tsx";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext";
import { Kbd } from "@site/src/components/kbd";

<PlatformProvider>

Expand Down
82 changes: 82 additions & 0 deletions docs/docs/waveai.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
sidebar_position: 3.4
id: "waveai"
title: "Wave AI"
---

import { Kbd } from "@site/src/components/kbd";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext";

<PlatformProvider>

<PlatformSelectorButton />

<br/><br/>
Context-aware terminal assistant with access to terminal output, widgets, and filesystem.

## Keyboard Shortcuts

| Shortcut | Action |
|----------|--------|
| <Kbd k="Cmd:Shift:a"/> | Toggle AI panel |
| <Kbd k="Ctrl:Shift:0"/> | Focus AI input |
| <Kbd k="Cmd:k"/> | Clear chat / start new |
| <Kbd k="Enter"/> | Send message |
| <Kbd k="Shift:Enter"/> | New line |

## Widget Context Toggle

Controls AI's access to your workspace:

**ON**: AI can read terminal output, capture widget screenshots, access files/directories (with approval), navigate web widgets, and use custom widget tools. Use for debugging, code analysis, and workspace tasks.

**OFF**: AI only sees your messages and attached files. Standard chat mode for general questions.

## File Attachments

Drag files onto the AI panel to attach:

| Type | Formats | Size Limit | Notes |
|------|---------|------------|-------|
| Images | JPEG, PNG, GIF, WebP, SVG | 10 MB | Auto-resized to 4096px max, converted to WebP |
| PDFs | `.pdf` | 5 MB | Text extraction for analysis |
| Text/Code | `.js`, `.ts`, `.py`, `.go`, `.md`, `.json`, `.yaml`, etc. | 200 KB | All common languages and configs |

## AI Tools (Widget Context Enabled)

### Terminal
- **Read Terminal Output**: Fetches scrollback from terminal widgets, supports line ranges

### File System
- **Read Files**: Reads text files with line range support (requires approval)
- **List Directories**: Returns file info, sizes, permissions, timestamps (requires approval)

### Web
- **Navigate Web**: Changes URLs in web browser widgets

### All Widgets
- **Capture Screenshots**: Takes screenshots of any widget for visual analysis

:::warning Security
File system operations require explicit approval. You control all file access.
:::

## Privacy

- Messages are proxied through the Wave Cloud AI service (powered by OpenAI)
- Wave does not store your chats, attachments, or use them for training
- Usage counters included in anonymous telemetry
- File access requires explicit approval

:::info Under Active Development
Wave AI is in active beta with included AI credits while we refine the experience. BYOK will be available once we've stabilized core features and gathered feedback on what works best. Share feedback in our [Discord](https://discord.gg/XfvZ334gwU).

**Coming Soon:**
- **CLI Integration**: Send files and chat prompts directly from the command line
- **Remote File Access**: Read files on SSH-connected systems
- **Command Execution**: Run terminal commands with approval
- **File Editing**: Modify files with approval or open in editor widgets
- **Web Content**: Extract text from web pages (currently screenshots only)
:::

</PlatformProvider>
4 changes: 2 additions & 2 deletions docs/docs/widgets.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ id: "widgets"
title: "Widgets"
---

import { Kbd } from "@site/src/components/kbd.tsx";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext.tsx";
import { Kbd } from "@site/src/components/kbd";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext";

<PlatformProvider>

Expand Down
4 changes: 2 additions & 2 deletions docs/docs/wsh-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ id: "wsh-reference"
title: "wsh reference"
---

import { Kbd } from "@site/src/components/kbd.tsx";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext.tsx";
import { Kbd } from "@site/src/components/kbd";
import { PlatformProvider, PlatformSelectorButton } from "@site/src/components/platformcontext";

<PlatformProvider>

Expand Down
46 changes: 46 additions & 0 deletions frontend/app/element/emojibutton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// Copyright 2025, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0

import { cn } from "@/util/util";
import { useLayoutEffect, useRef, useState } from "react";

export const EmojiButton = ({ emoji, isClicked, onClick, className }: { emoji: string; isClicked: boolean; onClick: () => void; className?: string }) => {
const [showFloating, setShowFloating] = useState(false);
const prevClickedRef = useRef(isClicked);

useLayoutEffect(() => {
if (isClicked && !prevClickedRef.current) {
setShowFloating(true);
setTimeout(() => setShowFloating(false), 600);
}
prevClickedRef.current = isClicked;
}, [isClicked]);

return (
<div className="relative inline-block">
<button
onClick={onClick}
className={cn(
"px-2 py-1 rounded border cursor-pointer transition-colors",
isClicked
? "bg-accent/20 border-accent text-accent"
: "bg-transparent border-border/50 text-foreground/70 hover:border-border",
className
)}
>
{emoji}
</button>
{showFloating && (
<span
className="absolute pointer-events-none animate-[float-up_0.6s_ease-out_forwards]"
style={{
left: "50%",
bottom: "100%",
}}
>
{emoji}
</span>
)}
</div>
);
};
Loading
Loading