* better osrelease parsing (ignore garbage at end of string)
* add defaultshelltype to telemetry input
* track reinit errors by shelltype to see if zsh integration is working
Readonly variables cannot be reset and attempting to do so causes errors
on my machine. The `keymaps` and `widgets` variables caused problems, so
they have been added to the list of variables to ignore.
* Tweak the color of the output status indicator, adjust the placement of the tab end-icons a bit
* adjust the margins a bit more
* a few more slight adjustments to even out the spacing
* save work
* fix nullref, some smaller tweaks to the front icon
* made the tab slightly smaller so that the ratios made more sense
* remove unnecessary width
* format fix
Adds job status indicators that will show any updates to running commands while you are focused away from a tab. These will show up as status icons in the tab view.
These indicators will reset for a given tab when you focus back to it.
I've updated the inner formatting of the tab to use flexboxes, allowing the title to display more text when there are no icons to display.
Also includes some miscellaneous for-loop pattern improvements in model.ts and removing of unused variables, etc.
---------
Co-authored-by: sawka <mike.sawka@gmail.com>
adds zsh support to waveterm. big change, lots going on here. lots of other improvements and bug fixes added while debugging and building out the feature.
Commits:
* refactor shexec parser.go into new package shellenv. separate out bash specific parsing from generic functions
* checkpoint
* work on refactoring shexec. created two new packages shellapi (for bash/zsh specific stuff), and shellutil (shared between shellapi and shexec)
* more refactoring
* create shellapi interface to abstract bash specific functionality
* more refactoring, move bash shell state parsing to shellapi
* move makeRcFile to shellapi. remove all of the 'client' options CLI options from waveshell
* get shellType passed through to server/single paths for waveshell
* add a local shelltype detector
* mock out a zshapi
* move shelltype through more of the code
* get a command to run via zsh
* zsh can now switch directories. poc, needs cleanup
* working on ShellState encoding differences between zsh/bash. Working on parsing zsh decls. move utilfn package into waveshell (shouldn't have been in wavesrv)
* switch to use []byte for vardecl serialization + diffs
* progress on zsh environment. still have issues reconciling init environment with trap environment
* fix typeset argument parsing
* parse promptvars, more zsh specific ignores
* fix bug with promptvar not getting set (wrong check in FeState func)
* add sdk (issue #188) to list of rtnstate commands
* more zsh compatibility -- working with a larger ohmyzsh environment. ignore more variables, handle exit trap better. unique path/fpath. add a processtype variable to base.
* must return a value
* zsh alias parsing/restoring. diff changes (and rtnstate changes). introduces linediff v1.
* force zmodload of zsh/parameter
* starting work on zsh functions
* need a v1 of mapdiff as well (to handle null chars)
* pack/unpack of ints was wrong (one used int and one use uint). turned out we only ever encoded '0' so it worked. that also means it is safe to change unpack to unpackUInt
* reworking for binary encoding of aliases and functions (because of zsh allows any character, including nulls, in names and values)
* fixes, working on functions, issue with line endings
* zsh functions. lots of ugliness here around dealing with line dicipline and cooked stty. new runcommand function to grab output from a non-tty fd. note that we still to run the actual command in a stty to get the proper output.
* write uuid tempdir, cleanup with tmprcfilename code
* hack in some simple zsh function declaration finding code for rtnstate. create function diff for rtnstate that supports zsh
* make sure key order is constant so shell hashes are consistent
* fix problems with state diffs to support new zsh formats. add diff/apply code to shellapi (moved from shellenv), that is now specific to zsh or bash
* add log packet and new shellstate packets
* switch to shellstate map that's also keyed by shelltype
* add shelltype to remoteinstance
* remove shell argument from waveshell
* added new shelltype statemap to remote.go (msh), deal with fallout
* move shellstate out of init packet, and move to an explicit reinit call. try to initialize all of the active shell states
* change dont always store init state (only store on demand). initialize shell states on demand (if not already initialized). allow reset to change shells
* add shellpref field to remote table. use to drive the default shell choice for new tabs
* show shelltag on cmdinput, pass through ri and remote (defaultshellstate)
* bump mshell version to v0.4
* better version validation for shellstate. also relax compatibility requirements for diffing states (shelltype + major version need to match)
* better error handling, check shellstate compatibility during run (on waveshell server)
* add extra separator for bash shellstate processing to deal with spurious output from rc files
* special migration for v30 -- flag invalid bash shell states and show special button in UI to fix
* format
* remove zsh-decls (unused)
* remove test code
* remove debug print
* fix typo
* init
* client settings view
* add some extra padding and a border below the header
* move settings-field classes under the main class to prevent conflicts
* fix style overrides
* first draft at ui
* first draft connecting openai to cmd info ui
* added more updates and added prompt engineering
* focus textarea on mount
* fix aichat layout issue
* added focus back to input after closing cmd info chat
* added ability to clear chat history, closes on command enter, better initial greeting message, and small things like user can refocus the help textarea by pressing ctrl + space again
* added a bunch of small upgrades
* added context for chatgpt info command
* added context to chatgpt cmd info command
* added ability to use arrow keys to grab code markdown
* added error handling as well as fixed the text area outline bug
* slightly changed the ui for selecting
* revamped ui and added correct scroll behavior
* changed ui, fixed up code block selection, some other small changes
* deep copied cmd info chat when we return
* added error checking and removed logs
* made deep copy code more clear
* prettier with the right version
* more prettier changes
* removed extraneous comment
* init
* diconnected and clientstop modals
* alert and createremoteconn modals
* tabswitcher, view and edit remoteconn modals
* migrate clientstop modal to Modal
* LinkButton
* import styles for createremoteconn modal
* import tabswitcher modal styles
* disable buttons while status is 'connecting'
* minor refactor
* apply changes to viewremoteconn modal from main
* init
* integrate showShellPrompt flag
* renive debugging code
* remove debugging code
* run gofmt. add migration files.
* remove debugging code
* remove migrations and adjust code. show prompt on import ssh configs as well.
* fix show/hide logic
* reset mmap.go
* use resolveBool and utilfn.ContainsStr
* make AlertModal take a generic 'confirmkey' instead of hard coding hideShellPrompt
* rename confirmkey to confirmflag (to be consistent). move confirmflag checking into the alertmodal. short circuit with Promise.resolve(true) if noConfirm checked.
* disable buttons while status is 'connecting'
* minor refactor
The ssh_config library only loaded the config data the first time
certain functions are used. After that, cached values are used instead.
This library has been updated in a fork to add a method that allows the
configuration files to be reloaded. This update takes advantage of that
change so the config files can be updated without restarting waveterm.
* add an alert modal for the sshconfig import button
When the sshconfig import button is pressed, there currently is no
visual indicator of what changed. This adds an alert modal to pop up
only in the case where the gui button is used.
* improve alert modal for sshconfig imports
The previous message for SSH configuration imports was vague and did not
provide detailed information as what happened during the import. This
clarifies that by specifying which remotes were deleted, created, and
updated. Updates are only ran and recorded if they would actually change
something.
* fix port value limiting
The SSH config import port limiting was correct but set off a warning in
linters. It has been updated to do the same behavior in a different way.
Also, port limiting was never added to manually adding a new remote.
This change adds it there as well.
* change user-facing term to connection
Previously, the ssh configuration alert modal used to use the word
"remote" to describe connections. "Remote" is the internal name but it
isn't consistent with what is being displayed to users. So it has been
replaced with "Connection" instead to match.
* change remote to connection for ssh import buttons
Like the previous change, the word "remote" was used instead of
"connection." This was for the tooltips added to connections that had
been imported in the connections menu.
* update one more remote -> connection
* work on cmd-d to delete a selected line
* call stoppropagation when code.tsx captures keyboard input
* finish up with line delete. add a trash icon to line. prevent delete when cmd is running (show error msg)
* remove byte sanitization for user commands
When serializing jsonBytes in packet.go::MarshalPacket, a step existed
that attempted to manually sanitize the bytes before sending them. This
was initially done to avoid invalid characters in json; however, go
should handle this for us. But this sanitization broke
internationalization because it excluded characters required for unicode
in other languages. Because of that, it has been removed.
* properly decode non-ascii on frontend
The functions atob and btoa do not convert base 64 to strings in the
expected way. The base64ToArray function handles it properly but other
cases do not. These other cases have been replaced with a helper
function that makes use of the base64-js package. This package has
already been included as a dependency of another package we use, but it
was added to the package.json file to make the inclusion explicit.
* automatically set/share LANG var with waveshell
Waveterm previously did not set the LANG environment variable which
caused problems for international users. On Linux, this is done
automatically, but it needs to be done manually on macos.
Even on linux, the wavesrv LANG variable is shared with waveshell to
ensure the same one is used on remotes.
* only set the lang var if not previously set
In order to prevent waveterm from overriding the lang var entirely, this
ensures that it is only manually determined if it hasn't previously been
set.
* use envMap instead of os to determine var
This is slightly more performant and relies more directly on our code
instead of external code.