diff options
| -rw-r--r-- | Cargo.lock | 94 | ||||
| -rw-r--r-- | Cargo.toml | 8 | ||||
| -rw-r--r-- | README.md | 109 |
3 files changed, 151 insertions, 60 deletions
@@ -10,7 +10,7 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aichat" -version = "0.4.0" +version = "0.5.0" dependencies = [ "anyhow", "atty", @@ -182,6 +182,16 @@ dependencies = [ ] [[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] name = "core-foundation-sys" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -328,7 +338,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639" dependencies = [ "nix", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -456,7 +466,7 @@ checksum = "8ef1a30ae415c3a691a4f41afddc2dbcd6d70baf338368d85ebc1e8ed92cedb9" dependencies = [ "cfg-if", "rustix", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -749,7 +759,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -767,7 +777,7 @@ dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", "rustix", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -885,7 +895,7 @@ dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -987,6 +997,12 @@ dependencies = [ ] [[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] name = "os_str_bytes" version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1018,7 +1034,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -1157,6 +1173,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls", + "rustls-native-certs", "rustls-pemfile", "serde", "serde_json", @@ -1201,7 +1218,7 @@ dependencies = [ "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -1217,6 +1234,18 @@ dependencies = [ ] [[package]] +name = "rustls-native-certs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] name = "rustls-pemfile" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1247,6 +1276,15 @@ dependencies = [ ] [[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys 0.42.0", +] + +[[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1269,6 +1307,29 @@ dependencies = [ ] [[package]] +name = "security-framework" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] name = "serde" version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1529,7 +1590,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -1875,6 +1936,21 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-sys" version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" @@ -1,6 +1,6 @@ [package] name = "aichat" -version = "0.4.0" +version = "0.5.0" edition = "2021" authors = ["sigoden <sigoden@gmail.com>"] description = "A powerful chatgpt cli." @@ -20,7 +20,6 @@ futures-util = "0.3.26" inquire = "0.5.3" is-terminal = "0.4.4" reedline = "0.16.0" -reqwest = { version = "0.11.14", features = ["json", "stream", "socks", "rustls-tls"], default-features = false} serde = { version = "1.0.152", features = ["derive"] } serde_json = "1.0.93" serde_yaml = "0.9.17" @@ -33,6 +32,11 @@ unicode-width = "0.1.10" bincode = "1.3.3" ctrlc = "3.2.5" +[dependencies.reqwest] +version = "0.11.14" +features = ["json", "stream", "socks", "rustls-tls", "rustls-tls-native-roots"] +default-features = false + [dependencies.syntect] version = "5.0.0" default-features = false @@ -5,8 +5,7 @@ A powerful ChatGPT command line tool that allows easy chat with ChatGPT-3.5 in a terminal. - - + ## Install @@ -25,9 +24,9 @@ Download from [Github Releases](https://github.com/sigoden/aichat/releases), unz - Predefine AI [roles](#roles) - Use GPT prompt easily - Powerful [Chat REPL](#chat-repl) -- Markdown highlight -- Stream output -- Multiline input +- syntax highlighting markdown and other 200 languages. +- Stream output with hand typing effect +- Multiline input support and emacs-like editing experience - Proxy support - Save chat messages @@ -69,6 +68,7 @@ For example, we define a role. I want you to act as a linux shell expert. I want you to answer only with bash code. Do not write explanations. + # temperature: 0.3 ``` Let ChatGPT answer questions in the role of a linux shell expert. @@ -76,11 +76,11 @@ Let ChatGPT answer questions in the role of a linux shell expert. ``` 〉.role shell -〉resize app.png to 256x256 -convert app.png -resize 256x256 app.png - -〉 extract password protected app.zip to /tmp/app -unzip -P password app.zip -d /tmp/app +〉 extract encrypted zipfile app.zip to /tmp/app +``` +```bash +mkdir /tmp/app +unzip -P PASSWORD app.zip -d /tmp/app ``` ## CLI @@ -95,34 +95,40 @@ Arguments: Options: -H, --no-highlight Turn off highlight - -L, --list-roles List all roles + -S, --no-stream No stream output + --list-roles List all roles -r, --role <ROLE> Select a role -h, --help Print help -V, --version Print version ``` +### Command mode ```sh -aichat calculate 25.6 + 32.5 +aichat math 3.8x4 ``` +control highlighting and streaming + ```sh -aichat -r shell flip the image horizontally +aichat how to post a json in rust # highlight, streaming output +aichat -H -S how to post a json in rust # no highlight, output all at once ``` +pipe input/output +```sh +# convert toml to json +cat data.toml | aichat turn toml below to json > data.json +``` +### Chat mode + Enter Chat REPL if no text input. ``` $ aichat -Welcome to aichat 0.4.0 +Welcome to aichat 0.5.0 Type ".help" for more information. 〉 ``` -aichat can accept pipe. -```sh -# convert toml to json -cat Cargo.toml | aichat -H turn toml below to json -``` - ## Chat REPL aichat has a powerful Chat REPL. @@ -132,33 +138,30 @@ Tle Chat REPL supports: - command autocompletion - history search - fish-style history autosuggestion hints -- mulitline input +- edit/past multiline input - undo support - clipboard integration Chat REPL also provide many commands. ``` -Welcome to aichat 0.4.0 +Welcome to aichat 0.5.0 Type ".help" for more information. -〉.help .info Print the information .set Modify the configuration temporarily +.prompt Add a GPT prompt .role Select a role .clear role Clear the currently selected role -.prompt Add prompt, aka create a temporary role .history Print the history .clear history Clear the history -.clear screen Clear the screen -.multiline Enter multiline editor mode -.copy Copy last reply message +.editor Enter editor mode for multiline input .help Print this help message .exit Exit the REPL Press Ctrl+C to abort session, Ctrl+D to exit the REPL ``` -- View current configuration information. +### `.info` - view current configuration information. ``` 〉.info @@ -174,8 +177,7 @@ proxy - dry_run false ``` - -- Modify the configuration temporarily +### `.set` - modify the configuration temporarily ``` 〉.set highlight false @@ -183,21 +185,7 @@ dry_run false 〉.set temperature 1.2 ``` -- Input multiline text - -``` -〉.multiline {convert json below to toml -::: { -::: "an": [ -::: "arbitrarily", -::: "nested" -::: ], -::: "data": "structure" -::: } -::: } -``` - -- Use GPT Prompt +### `.prompt` - use GPT prompt When you set up a prompt, every message sent later will carry the prompt. @@ -216,16 +204,39 @@ Done 🙈😳 ``` -`.prompt` actually creates a temporary role called `%TEMP%` internally, so you run `.clear role` to clear the prompt. +`.prompt` actually creates a temporary role called `%TEMP%` internally, so **run `.clear role` to clear the prompt**. When you are satisfied with the prompt, add it to `roles.yaml` for later use. -- Copy last reply message +### `.role` - let the ai play a role + +Select a role. +``` +〉.role shell +``` + +Unselect a role. +``` +〉.clear role +``` + +Use `.info` to check current selected role. -The message may be highlighted, and when copied, you will find that they are different from the original Markdown text. +### `.editor` - input/paste multiline text -At this point you need to use `.copy` to copy the original text to the clipboard. +Type `.editor {` to enter editor mode, you can input/paste multiline text, quite editor mode with `}` +``` +〉.editor {convert json below to toml +::: { +::: "an": [ +::: "arbitrarily", +::: "nested" +::: ], +::: "data": "structure" +::: } +::: } +``` ## License |
