Commit graph

182 commits

Author SHA1 Message Date
Copilot
0d04b99b46
Add Google AI file summarization package (#2455)
- [x] Create new directory pkg/aiusechat/google
- [x] Implement SummarizeFile function with:
  - Context parameter for timeout
  - File validation (images, PDFs, text files only)
  - Use gemini-2.5-flash-lite model
  - Configurable API URL and prompt as constants
  - Return (string, usage, error)
- [x] Define Google-specific usage struct
- [x] Test the implementation (all tests pass)
- [x] Verify with existing linting and build
- [x] Run CodeQL security check (no issues found)
- [x] Revert unintended tsunami demo dependency changes

## Summary

Successfully implemented a new Google AI package at
`pkg/aiusechat/google` with:

1. **SummarizeFile function** - A simple request-response API (not
streaming, not SSE)
   - Takes context for timeout
   - Validates file types (images, PDFs, text only) 
   - Enforces file size limits matching wshcmd-ai.go
   - Uses gemini-2.5-flash-lite model
   - Returns (summary string, usage stats, error)

2. **GoogleUsage struct** - Tracks token consumption:
   - PromptTokenCount
   - CachedContentTokenCount  
   - CandidatesTokenCount
   - TotalTokenCount

3. **Configurable constants**:
   - GoogleAPIURL (for reference)
   - SummarizePrompt (customizable prompt)
   - SummarizeModel (gemini-2.5-flash-lite)

4. **Comprehensive tests** - 41.7% coverage with all tests passing
5. **Security verified** - No CodeQL alerts
6. **Package documentation** - doc.go with usage examples

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sawka <2722291+sawka@users.noreply.github.com>
2025-10-17 17:24:06 -07:00
Mike Sawka
6a173a6227
working on more terminal context (#2444)
* add automatic OSC 7 support to bash and zsh
* add new wave OSC 16162 (planck length) to get up-to-date shell
information into blockrtinfo. currently implemented only for zsh. bash
will not support as rich of data as zsh, but we'll be able to do some.
* new rtinfo will be used to provide better context for AI in the
future, and to make sure AI is running safe commands.
* added a small local machine description to tab context (so AI knows
we're running on MacOS, Linux, or Windows)
2025-10-17 12:19:40 -07:00
Mike Sawka
af3279b411
handle reasoning deltas and display them in the UI (#2443) 2025-10-16 11:17:24 -07:00
Mike Sawka
0fd0daf134
Reimplement wsh ai, fix text file attaching format (#2435) 2025-10-15 17:28:56 -07:00
Mike Sawka
7451294f11
onboarding and polish for v0.12 (#2411) 2025-10-09 16:29:09 -07:00
Oleksandr Hreshchuk
7681214fa1
feat(cli): add blocks list with filtering and JSON output (#2337)
### What This Does
Adds a new `wsh blocks list` subcommand that lists all blocks in all or
specified workspace, window, or tab. Includes filtering options and JSON
output for automation.

### Motivation
Wave users had no simple way to programmatically discover block IDs for
scripting and automation. This feature:
- Enables workflows like syncing Preview widgets with `cd` changes.
- Simplifies debugging and introspection.
- Provides a foundation for future CLI enhancements (focus/close
blocks).

### Usage
```wsh blocks [list|ls|get] [--workspace=<workspace-id>] [--window=<window-id>] [--tab=<tab-id>] [--view=<view-type>] [--json]```

Where `<view-type>` can be one of: term, terminal, shell, console, web, browser, url, preview, edit, sysinfo, sys, system, waveai, ai, or assistant.

### Notes
- Fully backward compatible.
- Code follows existing CLI patterns.
2025-10-08 13:41:24 -07:00
Mike Sawka
d272a4ec03
New AIPanel (#2370)
Massive PR, over 13k LOC updated, 128 commits to implement the first pass at the new Wave AI panel.  Two backend adapters (OpenAI and Anthropic), layout changes to support the panel, keyboard shortcuts, and a huge focus/layout change to integrate the panel seamlessly into the UI.

Also fixes some small issues found during the Wave AI journey (zoom fixes, documentation, more scss removal, circular dependency issues, settings, etc)
2025-10-07 13:32:10 -07:00
Mike Sawka
6e3554407b
AI SDK Backend (#2336)
Working on AI SDK compatible backends for OpenAI and Anthropic. Thinking + ToolUse etc.  For use with AI SDK useChat on frontend.  Still needs more testing, WIP, but this is a good start.  Want to get this committed to so I can work on more integrations.
2025-09-12 12:56:24 -07:00
Mike Sawka
a38413193a
detect firstlaunch, also remove old history migration code (#2298) 2025-08-28 14:15:31 -07:00
Mike Sawka
56f03896cb
implement cmd:jwt and fix remote execution of commands (#2292) 2025-08-26 16:23:48 -07:00
Mike Sawka
b81b824b7d
fix some telemetry events (#2289) 2025-08-26 16:08:39 -07:00
Mike Sawka
5befc962eb
fix wsh ai arg handling after "-" (for stdin) (#2129) 2025-04-28 11:00:58 -07:00
Mike Sawka
58eb56408f
remove panic, and revert connserver from using non-blocking drainchannel safe (#2049) 2025-03-08 12:07:16 -08:00
Evan Simkowitz
71e126072e
Add S3 fileshare implementation, improve cp behavior (#1896)
Adds the S3 `fileshare` implementation

This also updates `wsh file cp` so it behaves more like `cp` for things
like copying directories and directory entries. It's not meant to align
with `cp` on everything, though. Our `wsh cp` will be recursive and will
create intermediate directories by default.

This also adds new aliases for `wsh view`: `wsh preview` and `wsh open`

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: sawka <mike@commandline.dev>
Co-authored-by: Sylvia Crowe <software@oneirocosm.com>
2025-02-14 17:27:02 -08:00
Mike Sawka
c53c3d0f85
osc9283 and term bg (#1959) 2025-02-14 13:31:31 -08:00
Mike Sawka
e126463029
keyboard chord support, split up/down/left/right, and clear block (#1957) 2025-02-14 13:25:25 -08:00
Sylvie Crowe
36bf4af5c9
feat: add a --new option to ssh command (#1946)
This feature adds a -n or --new flag to the wsh ssh command which allows
the connection to open in a new block.
2025-02-11 13:37:38 -08:00
Sylvie Crowe
4ca775c225
feat: add a wsh launch command (#1947)
This creates a new command `wsh launch` that will launch a widget that
has been defined in the widgets.json file.
2025-02-11 11:43:28 -08:00
Mike Sawka
d36bd388e4
new replace, split-horizontal, and split-vertical layout actions... hook up cmd-d and cmd-shift-d... (#1931)
Co-authored-by: Evan Simkowitz <esimkowitz@users.noreply.github.com>
2025-02-10 16:32:23 -08:00
Sylvie Crowe
3e0712c55e
feat: add schema for widgets.json (#1929) 2025-02-07 15:39:57 -08:00
Sylvie Crowe
43a7451e8f
feat: add ai presets schema (#1928) 2025-02-07 14:56:11 -08:00
Sylvie Crowe
134a1f1ab8
Embedded Structs in Code Generation (#1909)
This allows code generation to properly embed structs when embedded in
the original types. It affects the generation of `gotypes.d.ts` and
`metaconsts.go`.

Additionally, the `AiSettingsType` has been split off and embedded into
the original `SettingsType` to make schema generation easier.
2025-02-07 13:13:47 -08:00
Evan Simkowitz
fba85051aa
Return error for not found with wsh file info (#1907) 2025-02-05 21:35:29 -08:00
Sylvie Crowe
affd846388
feat: add connections schema (#1900)
This adds the schema needed for the connections.json file
2025-02-04 15:48:42 -08:00
Mike Sawka
d7a9006f13
new tevents analytics framework (#1894) 2025-02-03 15:32:44 -08:00
Sylvie Crowe
fc298f2a50
settings schema.json (#1874)
Adds schema.json support to the settings file to provide type hints and
other eventual details. This also adds a system to easily add more
schema files for other type of configurations.
2025-02-03 14:20:50 -08:00
Evan Simkowitz
902ff9baf1
enable wsh file cross-remote copy/move (#1725)
This adds the ability to stream `tar` archives over channels between
`wsh` instances. The main use cases for this are remote copy and move
operations.

It also completes the `wavefs` implementation of the FileShare interface
to allow copy/move interoperability between wavefiles and other storage
types.

The tar streaming functionality has been broken out into the new
`tarcopy` package for easy reuse.

New `fileshare` functions are added for `CopyInternal`, which allows
copying files internal to a filesystem to bypass the expensive interop
layer, and `MoveInternal`, which does the same for moving a file within
a filesystem. Copying between remotes is now handled by `CopyRemote`,
which accepts the source `FileShareClient` as a parameter. `wsh`
connections use the same implementation for `CopyInternal` and
`CopyRemote` as they need to request the channel on the remote
destination, since we don't offer a way to pass channels as a parameter
to a remote call.

This also adds a recursive `-r` flag to `wsh file rm` to allow for
deleting a directory and all its contents.

S3 support will be addressed in a future PR.

---------

Co-authored-by: sawka <mike@commandline.dev>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-01-31 10:42:39 -08:00
Evan Simkowitz
8bf6755375
Don't attempt to build SIGUSR1 handler for Windows, add it to WSH (#1871) 2025-01-29 12:42:55 -08:00
Evan Simkowitz
50c3710d4b
Update WSH command reference docs (#1865)
Fix formatting errors, update `wsh file` docs
2025-01-28 19:27:02 -08:00
Mike Sawka
5418e5ad24
fail any rpc call which blocks the runServer loop for more than 1s (#1861) 2025-01-27 22:38:19 -08:00
Mike Sawka
02e4bdc1e6
send SIGUSR1 to dump all goroutines (for debugging) (#1860) 2025-01-27 18:01:02 -08:00
Mike Sawka
bba94a62d0
add jwt token back to wsl connections (#1841)
Co-authored-by: Evan Simkowitz <esimkowitz@users.noreply.github.com>
2025-01-24 14:24:15 -08:00
Mike Sawka
1913cc5c99
initscript -- support for local files, and overrides in connections.json (#1818) 2025-01-23 15:41:13 -08:00
Evan Simkowitz
50b80a10fd
Add license identifiers to missing files (#1806) 2025-01-22 20:06:36 -08:00
Mike Sawka
ec07b172e5
pull cmd:env and initscripts into wave terminals (#1793) 2025-01-22 16:04:08 -08:00
Evan Simkowitz
286783fb8e
Adjust wsh file help text so it's 80 cols max width (#1795) 2025-01-22 15:39:57 -08:00
Evan Simkowitz
11fec5695c
wsh file overhaul without cross-remote copy and S3 (#1790) 2025-01-22 14:50:09 -08:00
Evan Simkowitz
4fba9e6caa
Default to current connection for wsh conn reinstall (#1782) 2025-01-20 19:49:43 -08:00
Sylvie Crowe
ff5f26709c
WSL Updates for New Architecture (#1756)
This adapts most of the WSL code to follow the new architecture that ssh
uses.

---------

Co-authored-by: sawka <mike@commandline.dev>
2025-01-16 15:54:58 -08:00
Mike Sawka
9dc9066a81
conn updates 5 (#1755)
* token swap
* setting environment variables for different local/remote shells
* bug fixes for init scripts
* more logging
* update connserver startup flow
2025-01-16 11:17:29 -08:00
Sylvie Crowe
c1eacb6d61
fix: set wsh ssh rpc timeout to 60 seconds (#1732)
This is required so connections that require user input give the full 60
seconds for the user to type in a password or passphrase.
2025-01-14 16:17:53 -08:00
Mike Sawka
a24fe750c5
conn updates 4 (#1726) 2025-01-14 14:09:26 -08:00
Sylvie Crowe
99e122d724
RcFileInstall RPC Command (#1720)
Creates an RPC command for installing shell rcfiles instead of relying
on a separate installation session.
2025-01-12 16:31:00 -08:00
Sylvie Crowe
0174e7cd07
RemoteInfo Rpc (#1719)
Adds an Rpc Command for getting RemoteInfo. This is used to replace the
session that was used to determine the shell on remote machines.
2025-01-12 15:22:07 -08:00
Sylvie Crowe
5a7771bf40
Update Wsh Command (#1715)
This adds an RPC command for updating wsh on a remote machine without
starting a new session. It is not being used yet, but will be used for
connections using a single server in the future.
2025-01-10 21:29:06 -08:00
Mike Sawka
ba5f929b3f
conn updates 3 (#1711)
lots of misc connection refactoring / fixes:

* adds blocklogger as a way to writing logging information from the backend directly to the a terminal block
* use blocklogger in conncontroller
* use blocklogger in sshclient
* fix remote name in password prompt
* use sh -c to get around shell weirdness
* remove cmd.exe special cases
* use GetWatcher().GetFullConfig() rather than re-reading the config file
* change order of things we do when establishing a connection.  ask for wsh up front.  then do domain socket, then connserver
* reduce number of sessions required in the common case when wsh is already installed.  running the connserver is now a "multi-command" which checks if it is installed, then asks for the version
* send jwt token over stdin instead of in initial command string
* fix focus bug for frontend conn modal
* track more information in connstatus
* simplify wshinstall function
* add nowshreason
* other misc cleanup
2025-01-10 14:09:32 -08:00
Evan Simkowitz
b51ff834b2
Happy new year! (#1684)
Update all 2024 references to 2025
2025-01-04 20:56:57 -08:00
Mike Sawka
4fd6d36d8e
conn updates 2 (#1660)
* use pwsh over powershell if installed (on windows) for default shell
* refactor blockcontroller.DoRunShellCommand into a "setup" and "manage" phase
* fix wshcmd-conn to also disconnect wsl connections
* new genconn interfaces to make a standardized environment to run SSH/WSL commands via `sh -c`.  also create better quoting functions that are composable
* replace html/template with text/template for shell command templating (avoids special chars getting turned into HTML entities, breaking the commands)
* do not reinstall wsh if the installed version has a higher version (prevents flip-flopping on shared systems)
* simplify clientOs/clientArch detection.  use `uname -sm`.  also validate the os/arch combo as compatible with our builds.
* replace CpHostToRemote with CpWshToRemote. hard codes wsh paths inside of the function instead of having them passed in (quoting restrictions)
* new SyncBuffer class to use with commands that properly synchronizes Writes/String output
* fix setTermSize to actually update DB with terminal size
2025-01-02 14:15:32 -08:00
Mike Sawka
fe91d167b6
fix all panichandlers for the new format (inline recover()) (#1659) 2024-12-31 09:31:55 -08:00
Sylvie Crowe
7d0fb0391f
Improved Shell Detection (#1658)
Use the SHELL environment variable instead of the /etc/passwd file for
determining the shell on Linux.
2024-12-30 22:18:56 -08:00