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
2 changes: 2 additions & 0 deletions docs/docs/releasenotes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Wave Terminal v0.12.0 introduces a completely redesigned AI experience powered b
- **New Slide-Out Chat Panel** - Access Wave AI via hotkeys (Cmd-Shift-A or Ctrl-Shift-0) from the left side of your screen
- **Multi-Modal Input** - Support for images, PDFs, and text file attachments
- **Drag & Drop Files** - Simply drag files into the chat to attach them
- **Command-Line Integration** - Send files and command output directly to Wave AI using `wsh ai`
- **Smart Context Switching** - Enable Wave AI to see into your widgets and file system
- **Built-in Tools:**
- Web search capabilities
Expand All @@ -30,6 +31,7 @@ For more information and upcoming features, visit our [Wave AI documentation](ht

**Other Improvements:**
- New onboarding flow showcasing block magnification, Wave AI, and wsh view/edit capabilities
- New `wsh blocks list` command for listing and filtering blocks by workspace, tab, or view type
- Continued migration from SCSS to Tailwind v4
- Package upgrades and dependency updates
- Internal code cleanup and refactoring
Expand Down
38 changes: 38 additions & 0 deletions docs/docs/wsh-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -857,4 +857,42 @@ The command will show you the full path to:
Use the `-t` flag with the log path to quickly view recent log entries without having to open the full file. This is particularly useful for troubleshooting.
:::

---

## blocks

The `blocks` command provides operations for listing and querying blocks across workspaces, windows, and tabs. Primarily useful for debugging and scripting.

### list

```sh
wsh blocks list [flags]
```

List all blocks with optional filtering by workspace, window, tab, or view type. Output can be formatted as a table (default) or JSON for scripting.

Flags:
- `--workspace <id>` - restrict to specific workspace id
- `--window <id>` - restrict to specific window id
- `--tab <id>` - restrict to specific tab id
- `--view <type>` - filter by view type (term, web, preview, edit, sysinfo, waveai)
- `--json` - output results as JSON
- `--timeout <ms>` - RPC timeout in milliseconds (default: 5000)

Examples:

```sh
# List all blocks
wsh blocks list

# List only terminal blocks
wsh blocks list --view=term

# Filter by workspace
wsh blocks list --workspace=12d0c067-378e-454c-872e-77a314248114

# Output as JSON for scripting
wsh blocks list --json
```

</PlatformProvider>
8 changes: 5 additions & 3 deletions frontend/app/modals/about.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@ const AboutModal = ({}: AboutModalProps) => {
</div>
<div className="flex items-start gap-[10px] self-stretch w-full text-center">
<a
href="https://github.com/wavetermdev/waveterm"
href="https://github.com/wavetermdev/waveterm?ref=about"
target="_blank"
rel="noopener"
className="inline-flex items-center px-4 py-2 rounded border border-border hover:bg-hoverbg transition-colors duration-200"
>
<i className="fa-brands fa-github mr-2"></i>Github
</a>
<a
href="https://www.waveterm.dev/"
href="https://www.waveterm.dev/?ref=about"
target="_blank"
rel="noopener"
className="inline-flex items-center px-4 py-2 rounded border border-border hover:bg-hoverbg transition-colors duration-200"
Expand All @@ -60,7 +60,9 @@ const AboutModal = ({}: AboutModalProps) => {
<i className="fa-sharp fa-light fa-heart mr-2"></i>Acknowledgements
</a>
</div>
<div className="items-center gap-4 self-stretch w-full text-center">&copy; {currentDate.getFullYear()} Command Line Inc.</div>
<div className="items-center gap-4 self-stretch w-full text-center">
&copy; {currentDate.getFullYear()} Command Line Inc.
</div>
</div>
</Modal>
);
Expand Down
14 changes: 13 additions & 1 deletion frontend/app/onboarding/onboarding-upgrade.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,24 @@ const UpgradeOnboardingModal = () => {
}, []);

const handleStarClick = async () => {
RpcApi.RecordTEventCommand(TabRpcClient, {
event: "onboarding:githubstar",
props: { "onboarding:githubstar": "star" },
}, { noresponse: true });
const clientId = globalStore.get(atoms.clientId);
await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", clientId),
meta: { "onboarding:githubstar": true },
});
window.open("https://github.com/wavetermdev/waveterm", "_blank");
window.open("https://github.com/wavetermdev/waveterm?ref=upgrade", "_blank");
setPageName("features");
};

const handleAlreadyStarred = async () => {
RpcApi.RecordTEventCommand(TabRpcClient, {
event: "onboarding:githubstar",
props: { "onboarding:githubstar": "already" },
}, { noresponse: true });
const clientId = globalStore.get(atoms.clientId);
await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", clientId),
Expand All @@ -70,6 +78,10 @@ const UpgradeOnboardingModal = () => {
};

const handleMaybeLater = async () => {
RpcApi.RecordTEventCommand(TabRpcClient, {
event: "onboarding:githubstar",
props: { "onboarding:githubstar": "later" },
}, { noresponse: true });
const clientId = globalStore.get(atoms.clientId);
await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", clientId),
Expand Down
14 changes: 11 additions & 3 deletions frontend/app/onboarding/onboarding.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,11 @@ const InitPage = ({ isCompact }: { isCompact: boolean }) => {
<div className="flex flex-col items-start gap-8 w-full mb-5 unselectable">
<div className="flex w-full items-center gap-[18px]">
<div>
<a target="_blank" href="https://github.com/wavetermdev/waveterm" rel={"noopener"}>
<a
target="_blank"
href="https://github.com/wavetermdev/waveterm?ref=install"
rel={"noopener"}
>
<i className="text-[32px] text-white/50 fa-brands fa-github"></i>
</a>
</div>
Expand All @@ -81,7 +85,11 @@ const InitPage = ({ isCompact }: { isCompact: boolean }) => {
<div className="text-secondary leading-5">
We're <i>open source</i> and committed to providing a free terminal for individual
users. Please show your support by giving us a star on{" "}
<a target="_blank" href="https://github.com/wavetermdev/waveterm" rel={"noopener"}>
<a
target="_blank"
href="https://github.com/wavetermdev/waveterm?ref=install"
rel={"noopener"}
>
Github&nbsp;(wavetermdev/waveterm)
</a>
</div>
Expand Down Expand Up @@ -152,7 +160,7 @@ const NoTelemetryStarPage = ({ isCompact }: { isCompact: boolean }) => {
oref: WOS.makeORef("client", clientId),
meta: { "onboarding:githubstar": true },
});
window.open("https://github.com/wavetermdev/waveterm", "_blank");
window.open("https://github.com/wavetermdev/waveterm?ref=not", "_blank");
setPageName("features");
};

Expand Down
1 change: 1 addition & 0 deletions frontend/types/gotypes.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,7 @@ declare global {
"conn:conntype"?: string;
"onboarding:feature"?: "waveai" | "magnify" | "wsh";
"onboarding:version"?: string;
"onboarding:githubstar"?: "already" | "star" | "later";
"display:height"?: number;
"display:width"?: number;
"display:dpr"?: number;
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 13 additions & 10 deletions pkg/telemetry/telemetrydata/telemetrydata.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ var ValidEventNames = map[string]bool{
"onboarding:start": true,
"onboarding:skip": true,
"onboarding:fire": true,
"onboarding:githubstar": true,
}

type TEvent struct {
Expand Down Expand Up @@ -81,16 +82,18 @@ type TEventProps struct {
AppFirstDay bool `json:"app:firstday,omitempty"`
AppFirstLaunch bool `json:"app:firstlaunch,omitempty"`

ActionInitiator string `json:"action:initiator,omitempty" tstype:"\"keyboard\" | \"mouse\""`
PanicType string `json:"debug:panictype,omitempty"`
BlockView string `json:"block:view,omitempty"`
AiBackendType string `json:"ai:backendtype,omitempty"`
AiLocal bool `json:"ai:local,omitempty"`
WshCmd string `json:"wsh:cmd,omitempty"`
WshHadError bool `json:"wsh:haderror,omitempty"`
ConnType string `json:"conn:conntype,omitempty"`
OnboardingFeature string `json:"onboarding:feature,omitempty" tstype:"\"waveai\" | \"magnify\" | \"wsh\""`
OnboardingVersion string `json:"onboarding:version,omitempty"`
ActionInitiator string `json:"action:initiator,omitempty" tstype:"\"keyboard\" | \"mouse\""`
PanicType string `json:"debug:panictype,omitempty"`
BlockView string `json:"block:view,omitempty"`
AiBackendType string `json:"ai:backendtype,omitempty"`
AiLocal bool `json:"ai:local,omitempty"`
WshCmd string `json:"wsh:cmd,omitempty"`
WshHadError bool `json:"wsh:haderror,omitempty"`
ConnType string `json:"conn:conntype,omitempty"`

OnboardingFeature string `json:"onboarding:feature,omitempty" tstype:"\"waveai\" | \"magnify\" | \"wsh\""`
OnboardingVersion string `json:"onboarding:version,omitempty"`
OnboardingGithubStar string `json:"onboarding:githubstar,omitempty" tstype:"\"already\" | \"star\" | \"later\""`

DisplayHeight int `json:"display:height,omitempty"`
DisplayWidth int `json:"display:width,omitempty"`
Expand Down
6 changes: 3 additions & 3 deletions pkg/wconfig/settingsconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -832,18 +832,18 @@ func (fc *FullConfigType) CountCustomAIPresets() int {
}

// CountCustomSettings returns the number of settings in the user's settings file.
// This excludes telemetry:enabled which doesn't count as a customization.
// This excludes telemetry:enabled and autoupdate:channel which don't count as customizations.
func CountCustomSettings() int {
// Load user settings
userSettings, _ := ReadWaveHomeConfigFile("settings.json")
if userSettings == nil {
return 0
}

// Count all keys except telemetry:enabled
// Count all keys except telemetry:enabled and autoupdate:channel
count := 0
for key := range userSettings {
if key == "telemetry:enabled" {
if key == "telemetry:enabled" || key == "autoupdate:channel" {
continue
}
count++
Expand Down
Loading