diff --git a/README.md b/README.md
index 43264ed..07a24cb 100644
--- a/README.md
+++ b/README.md
@@ -101,6 +101,8 @@ Attach file to the chat with the `-f` or `--file` parameter:
ai -f package.json -f package-lock.json -- "what's my package version and most complex transitive dependency?"
```
+You can also attach files interactively with the [Attach File Action](#attach-file-action).
+

### Attaching Images
@@ -111,11 +113,14 @@ Attach images to the chat with the `--image-file` parameter:
ai -f --image-file fish.jpg -- "what is this a picture of?"
```
-When you use `--image-file` rather than `--file`, the model's vision APIs will be used, meaning that in the chat you can ask questions about the content of the images.
+When you use `--image-file` rather than `--file`, the model's vision APIs will be used, meaning that in the chat you can ask questions about the content of the images. You can also attach files interactively with the [Attach File Action](#attach-file-action).
-
+
-Note that vision processing is required for the model which is being used. A reference is at [`ai-providers-and-models`](https://github.com/dwmkerr/ai-providers-and-models). If the model doesn't support vision a Compatibility Error will be raised.
+Notes:
+
+- Vision processing is required for the model which is being used. A reference is at [`ai-providers-and-models`](https://github.com/dwmkerr/ai-providers-and-models). If the model doesn't support vision a Compatibility Error will be raised.
+- You can also upload images using the `--file` parameter. In this case images are base 64 encoded and will be uploaded as text in the chat - meaning that although the provider will not be able to recognise the image, it could still answer questions such as what type of file does it appear to be, what is its size and so on.
### Copying to the Clipboard or Saving to a File
@@ -175,29 +180,15 @@ Tips:
- Suggested models and descriptions are loaded from [`ai-providers-and-models`](https://github.com/dwmkerr/ai-providers-and-models)
-### Advanced
-
-Advanced or experimental features.
-
-Force color output (useful if you are piping and need color codes):
-
-```bash
-# Force color output:
-# - set FORCE_COLOR=1
-# - ascii formatting will be applied even if stdout is not a tty
-# - use 'less -r' (-r = raw, render color codes) as a way to quickly test.
-FORCE_COLOR=1 ai 'show me some markdown features' | less -r
-```
-
-Example of how to interactively stage, generate a conventional commit:
+## Actions
-- [`aigac.sh`](./docs/casts/aigac.sh) - AI Git Add Commit shell script
+When you press `Enter` in the chat prompt, the Actions menu will pop up. These actions offer additional features to work with AI.
-
+### Attach File Action
-## Actions
+The 'Attach File' action allows you to interactively attach files to a chat message. Files can be processed as text or images (if supported by the currently selected model):
-When you press `Enter` in the chat prompt, the Actions menu will pop up. These actions offer additional features to work with AI.
+[Recording of the Attach File action](./docs/casts/attach-file-action/attach-file-action.svg)
### Change Model
diff --git a/docs/advanced.md b/docs/advanced.md
new file mode 100644
index 0000000..6de582b
--- /dev/null
+++ b/docs/advanced.md
@@ -0,0 +1,20 @@
+# Advanced
+
+Advanced features.
+
+Force color output (useful if you are piping and need color codes):
+
+```bash
+# Force color output:
+# - set FORCE_COLOR=1
+# - ascii formatting will be applied even if stdout is not a tty
+# - use 'less -r' (-r = raw, render color codes) as a way to quickly test.
+FORCE_COLOR=1 ai 'show me some markdown features' | less -r
+```
+
+Example of how to interactively stage, generate a conventional commit:
+
+- [`aigac.sh`](./docs/casts/aigac.sh) - AI Git Add Commit shell script
+
+
+
diff --git a/docs/casts/attach-file-action/attach-file-action-default.gif b/docs/casts/attach-file-action/attach-file-action-default.gif
new file mode 100644
index 0000000..0e25051
Binary files /dev/null and b/docs/casts/attach-file-action/attach-file-action-default.gif differ
diff --git a/docs/casts/attach-file-action/attach-file-action-github-dark.gif b/docs/casts/attach-file-action/attach-file-action-github-dark.gif
new file mode 100644
index 0000000..4e21287
Binary files /dev/null and b/docs/casts/attach-file-action/attach-file-action-github-dark.gif differ
diff --git a/docs/casts/attach-file-action/attach-file-action.cast b/docs/casts/attach-file-action/attach-file-action.cast
new file mode 100644
index 0000000..374423c
--- /dev/null
+++ b/docs/casts/attach-file-action/attach-file-action.cast
@@ -0,0 +1,774 @@
+{"version": 2, "width": 80, "height": 15, "timestamp": 1744022832, "env": {"SHELL": "/usr/local/bin/bash", "TERM": "xterm-256color"}, "title": "Terminal AI"}
+[1.238721, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mDave_Kerr/scratch/demo\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[2.209001, "o", "a"]
+[2.553873, "o", "i"]
+[2.948195, "o", "\r\n"]
+[2.948471, "o", "\u001b[?2004l\r"]
+[3.251871, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[4.243909, "o", "\u001b[1B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[4.246457, "o", "\u001b[1B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\u001b[9G"]
+[4.248058, "o", "\r\n\u001b[?25h"]
+[4.249028, "o", "\u001b[1A\u001b[K"]
+[4.251444, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m \u001b[2m(Use arrow keys)\u001b[22m\r\n\u001b[36m❯ Chat\u001b[39m\r\n Chat (Fullscreen)\r\n Attach File\r\n Change Model\r\n Quit\u001b[?25l\u001b[7G"]
+[4.873489, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n Chat\r\n\u001b[36m❯ Chat (Fullscreen)\u001b[39m\r\n Attach File\r\n Change Model\r\n Quit\u001b[?25l\u001b[7G"]
+[5.250041, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n Chat\r\n Chat (Fullscreen)\r\n\u001b[36m❯ Attach File\u001b[39m\r\n Change Model\r\n Quit\u001b[?25l\u001b[7G"]
+[5.717871, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m \u001b[36mAttach File\u001b[39m\u001b[20G"]
+[5.719077, "o", "\r\n\u001b[?25h"]
+[5.719453, "o", "\u001b[1A\u001b[K"]
+[5.761113, "o", "\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[36m├── recording/\u001b[39m\r\n\u001b[37m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[6.560652, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[33m├── recording/\u001b[39m\r\n\u001b[36m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[7.352096, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[36m├── recording/\u001b[39m\r\n\u001b[37m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[7.657936, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[33m├── recording/\u001b[39m\r\n\u001b[36m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[7.956553, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[33m├── recording/\u001b[39m\r\n\u001b[37m├── animal.jpg\u001b[39m\r\n\u001b[36m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[8.342441, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1mFile path:\u001b[22m \u001b[36m/Users/Dave_Kerr/scratch/demo/package.json\u001b[39m\u001b[56G"]
+[8.344219, "o", "\r\n\u001b[?25h"]
+[8.346153, "o", "\u001b[34m?\u001b[39m \u001b[1mFile processing mode:\u001b[22m \u001b[2m(Use arrow keys)\u001b[22m\r\n\u001b[36m❯ Text\u001b[39m\r\n Image\r\n\u001b[36mProcess as text. Ideal for code, documents, etc.\u001b[39m\u001b[?25l\u001b[49G"]
+[9.665021, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1mFile processing mode:\u001b[22m\r\n Text\r\n\u001b[36m❯ Image\u001b[39m\r\n\u001b[36mVision processing (model dependent). Enables image recognition, etc.\u001b[39m\u001b[?25l\u001b[69G"]
+[10.494859, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1mFile processing mode:\u001b[22m\r\n\u001b[36m❯ Text\u001b[39m\r\n Image\r\n\u001b[36mProcess as text. Ideal for code, documents, etc.\u001b[39m\u001b[?25l\u001b[49G"]
+[10.816956, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1mFile processing mode:\u001b[22m \u001b[36mText\u001b[39m\u001b[29G"]
+[10.817818, "o", "\r\n\u001b[?25h"]
+[10.81983, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[11.743784, "o", "\u001b[1B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[11.744994, "o", "\u001b[1B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\u001b[9G"]
+[11.745834, "o", "\r\n\u001b[?25h"]
+[11.746363, "o", "\u001b[1A\u001b[K"]
+[11.748636, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m \u001b[2m(Use arrow keys)\u001b[22m\r\n\u001b[36m❯ Chat\u001b[39m\r\n Chat (Fullscreen)\r\n Attach File\r\n Change Model\r\n Quit\u001b[?25l\u001b[7G"]
+[12.249097, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n Chat\r\n\u001b[36m❯ Chat (Fullscreen)\u001b[39m\r\n Attach File\r\n Change Model\r\n Quit\u001b[?25l\u001b[7G"]
+[12.599728, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n Chat\r\n Chat (Fullscreen)\r\n\u001b[36m❯ Attach File\u001b[39m\r\n Change Model\r\n Quit\u001b[?25l\u001b[7G"]
+[12.994641, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m \u001b[36mAttach File\u001b[39m\u001b[20G"]
+[12.995067, "o", "\r\n\u001b[?25h"]
+[12.995238, "o", "\u001b[1A\u001b[K"]
+[12.997013, "o", "\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[36m├── recording/\u001b[39m\r\n\u001b[37m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[13.959159, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[33m├── recording/\u001b[39m\r\n\u001b[36m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[14.433242, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[33m├── recording/\u001b[39m\r\n\u001b[37m├── animal.jpg\u001b[39m\r\n\u001b[36m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[15.271481, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[36m?\u001b[39m \u001b[1mFile path:\u001b[22m\r\n\u001b[35m/Users/Dave_Kerr/scratch/demo/\u001b[39m\r\n\u001b[33m├── recording/\u001b[39m\r\n\u001b[36m├── animal.jpg\u001b[39m\r\n\u001b[37m└── package.json\u001b[39m\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\u001b[36m↑↓\u001b[39m navigate, \u001b[36m\u001b[39m select\r\n\u001b[36m\u001b[39m open directory, \u001b[36m\u001b[39m go back\u001b[?25l\u001b[44G"]
+[15.728407, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1mFile path:\u001b[22m \u001b[36m/Users/Dave_Kerr/scratch/demo/animal.jpg\u001b[39m\u001b[54G"]
+[15.72905, "o", "\r\n\u001b[?25h"]
+[15.730706, "o", "\u001b[34m?\u001b[39m \u001b[1mFile processing mode:\u001b[22m \u001b[2m(Use arrow keys)\u001b[22m\r\n\u001b[36m❯ Text\u001b[39m\r\n Image\r\n\u001b[36mProcess as text. Ideal for code, documents, etc.\u001b[39m\u001b[?25l\u001b[49G"]
+[16.54871, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1mFile processing mode:\u001b[22m\r\n Text\r\n\u001b[36m❯ Image\u001b[39m\r\n\u001b[36mVision processing (model dependent). Enables image recognition, etc.\u001b[39m\u001b[?25l\u001b[69G"]
+[17.764741, "o", "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1mFile processing mode:\u001b[22m \u001b[36mImage\u001b[39m\u001b[30G"]
+[17.765428, "o", "\r\n\u001b[?25h"]
+[17.768088, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[18.598423, "o", "\u001b[10G"]
+[18.599315, "o", "\u001b[1B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m w\u001b[10G"]
+[18.729706, "o", "\u001b[11G"]
+[18.730187, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m wh\u001b[11G"]
+[18.871353, "o", "\u001b[12G"]
+[18.872157, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m wha\u001b[12G"]
+[18.973603, "o", "\u001b[13G"]
+[18.973816, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what\u001b[13G"]
+[19.122386, "o", "\u001b[14G"]
+[19.12312, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what\u001b[14G"]
+[19.273714, "o", "\u001b[15G"]
+[19.274934, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what a\u001b[15G"]
+[19.404785, "o", "\u001b[16G"]
+[19.405581, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what ar\u001b[16G"]
+[19.478306, "o", "\u001b[17G"]
+[19.478935, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are\u001b[17G"]
+[19.580935, "o", "\u001b[18G"]
+[19.581503, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are\u001b[18G"]
+[19.659836, "o", "\u001b[19G"]
+[19.660207, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are t\u001b[19G"]
+[19.833792, "o", "\u001b[20G"]
+[19.834286, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are th\u001b[20G"]
+[19.967811, "o", "\u001b[21G"]
+[19.968573, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are the\u001b[21G"]
+[20.109985, "o", "\u001b[22G"]
+[20.110781, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are thes\u001b[22G"]
+[20.200598, "o", "\u001b[23G"]
+[20.201136, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these\u001b[23G"]
+[20.310563, "o", "\u001b[24G"]
+[20.311246, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these\u001b[24G"]
+[20.452213, "o", "\u001b[25G"]
+[20.452397, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these f\u001b[25G"]
+[20.614928, "o", "\u001b[26G"]
+[20.615821, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these fi\u001b[26G"]
+[20.649598, "o", "\u001b[27G"]
+[20.650292, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these fil\u001b[27G"]
+[20.83897, "o", "\u001b[28G"]
+[20.8393, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these file\u001b[28G"]
+[21.019619, "o", "\u001b[29G"]
+[21.020545, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these files\u001b[29G"]
+[21.33165, "o", "\u001b[30G"]
+[21.332279, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these files?\u001b[30G"]
+[21.684913, "o", "\u001b[9G"]
+[21.685564, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what are these files?\u001b[30G"]
+[21.687324, "o", "\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m \u001b[34mwhat are these files?\u001b[39m\u001b[30G"]
+[21.687944, "o", "\r\n\u001b[?25h"]
+[21.699927, "o", "\u001b[90m(uploading: /Users/Dave_Kerr/scratch/demo/package.json...)\u001b[39m\r\n"]
+[21.70003, "o", "\u001b[90m(uploading image: /Users/Dave_Kerr/scratch/demo/animal.jpg...)\u001b[39m\r\n"]
+[21.726837, "o", "\u001b[?25l"]
+[21.726964, "o", "\u001b[1G"]
+[21.726975, "o", "\u001b[1G"]
+[21.727115, "o", "\u001b[36m⠋\u001b[39m "]
+[21.808412, "o", "\u001b[1G"]
+[21.808504, "o", "\u001b[0K\u001b[36m⠙\u001b[39m "]
+[21.889806, "o", "\u001b[1G\u001b[0K"]
+[21.889981, "o", "\u001b[36m⠹\u001b[39m "]
+[21.971204, "o", "\u001b[1G\u001b[0K"]
+[21.971299, "o", "\u001b[36m⠸\u001b[39m "]
+[22.05122, "o", "\u001b[1G\u001b[0K"]
+[22.051312, "o", "\u001b[36m⠼\u001b[39m "]
+[22.131598, "o", "\u001b[1G\u001b[0K"]
+[22.131935, "o", "\u001b[36m⠴\u001b[39m "]
+[22.212951, "o", "\u001b[1G\u001b[0K"]
+[22.213193, "o", "\u001b[36m⠦\u001b[39m "]
+[22.292786, "o", "\u001b[1G\u001b[0K"]
+[22.29293, "o", "\u001b[36m⠧\u001b[39m "]
+[22.3743, "o", "\u001b[1G\u001b[0K"]
+[22.374948, "o", "\u001b[36m⠇\u001b[39m "]
+[22.454852, "o", "\u001b[1G\u001b[0K"]
+[22.454932, "o", "\u001b[36m⠏\u001b[39m "]
+[22.536111, "o", "\u001b[1G\u001b[0K\u001b[36m⠋\u001b[39m "]
+[22.616325, "o", "\u001b[1G\u001b[0K\u001b[36m⠙\u001b[39m "]
+[22.697195, "o", "\u001b[1G\u001b[0K\u001b[36m⠹\u001b[39m "]
+[22.777391, "o", "\u001b[1G\u001b[0K\u001b[36m⠸\u001b[39m "]
+[22.858714, "o", "\u001b[1G\u001b[0K"]
+[22.858823, "o", "\u001b[36m⠼\u001b[39m "]
+[22.940234, "o", "\u001b[1G"]
+[22.940617, "o", "\u001b[0K\u001b[36m⠴\u001b[39m "]
+[23.020565, "o", "\u001b[1G\u001b[0K"]
+[23.020725, "o", "\u001b[36m⠦\u001b[39m "]
+[23.102094, "o", "\u001b[1G\u001b[0K"]
+[23.102225, "o", "\u001b[36m⠧\u001b[39m "]
+[23.182053, "o", "\u001b[1G\u001b[0K"]
+[23.182503, "o", "\u001b[36m⠇\u001b[39m "]
+[23.262816, "o", "\u001b[1G\u001b[0K"]
+[23.26312, "o", "\u001b[36m⠏\u001b[39m "]
+[23.344076, "o", "\u001b[1G\u001b[0K"]
+[23.344224, "o", "\u001b[36m⠋\u001b[39m "]
+[23.424417, "o", "\u001b[1G\u001b[0K\u001b[36m⠙\u001b[39m "]
+[23.504691, "o", "\u001b[1G\u001b[0K"]
+[23.505022, "o", "\u001b[36m⠹\u001b[39m "]
+[23.585673, "o", "\u001b[1G\u001b[0K"]
+[23.586052, "o", "\u001b[36m⠸\u001b[39m "]
+[23.666815, "o", "\u001b[1G\u001b[0K"]
+[23.666997, "o", "\u001b[36m⠼\u001b[39m "]
+[23.747391, "o", "\u001b[1G\u001b[0K"]
+[23.747818, "o", "\u001b[36m⠴\u001b[39m "]
+[23.828711, "o", "\u001b[1G\u001b[0K"]
+[23.829045, "o", "\u001b[36m⠦\u001b[39m "]
+[23.909984, "o", "\u001b[1G\u001b[0K\u001b[36m⠧\u001b[39m "]
+[23.99121, "o", "\u001b[1G\u001b[0K"]
+[23.991326, "o", "\u001b[36m⠇\u001b[39m "]
+[24.071486, "o", "\u001b[1G\u001b[0K"]
+[24.071779, "o", "\u001b[36m⠏\u001b[39m "]
+[24.152798, "o", "\u001b[1G\u001b[0K"]
+[24.153152, "o", "\u001b[36m⠋\u001b[39m "]
+[24.235203, "o", "\u001b[1G\u001b[0K\u001b[36m⠙\u001b[39m "]
+[24.284142, "o", "\u001b[1G\u001b[0K\u001b[?25h"]
+[24.300545, "o", "\u001b[37m\u001b[1mopenai:\u001b[22m\u001b[39m 1. \u001b[0m\u001b[0m\u001b[0m**package.json**: A JSON file for a Node.js project, detailing configurations, scripts, and dependencies.\u001b[0m\u001b[0m\u001b[0m\r\n 2. \u001b[0m\u001b[0m\u001b[0m**Image**: An illustration of a fish.\u001b[0m\u001b[0m\u001b[0m\r\n"]
+[24.301413, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[26.809821, "o", "\u001b[?25h"]
+[26.810265, "o", "\u001b[1B\r\n\u001b[?25h"]
+[26.811126, "o", "Goodbye!\r\n"]
+[26.860394, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mDave_Kerr/scratch/demo\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[28.241917, "o", "e"]
+[28.496413, "o", "x"]
+[29.813303, "o", "\b\u001b[K"]
+[29.938692, "o", "\b\u001b[K"]
+[30.062793, "o", "\u0007"]
+[30.173033, "o", "s"]
+[30.321338, "o", "v"]
+[30.915733, "o", "\u0007g"]
+[31.782972, "o", "\b\b\b\u001b[K"]
+[32.29819, "o", "c"]
+[32.373306, "o", "d"]
+[32.489412, "o", " "]
+[33.064196, "o", "r"]
+[33.135579, "o", "e"]
+[33.393048, "o", "cording/"]
+[33.788837, "o", "\r\n"]
+[33.789002, "o", "\u001b[?2004l\r"]
+[33.830695, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[34.041897, "o", "l"]
+[34.170402, "o", "s"]
+[34.29593, "o", "\r\n"]
+[34.296029, "o", "\u001b[?2004l\r"]
+[34.309543, "o", "attach-file-action.cast\r\n"]
+[34.345179, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[35.412898, "o", "c"]
+[35.705998, "o", "s"]
+[35.925629, "o", "\b\u001b[K"]
+[36.048505, "o", "\b\u001b[K"]
+[36.280728, "o", "c"]
+[36.400577, "o", "a"]
+[36.501937, "o", "s"]
+[36.722702, "o", "\u0007"]
+[37.330405, "o", "\b\u001b[K"]
+[37.449692, "o", "\b\u001b[K"]
+[37.556788, "o", "\b\u001b[K"]
+[40.58773, "o", "s"]
+[41.126292, "o", "v"]
+[41.391526, "o", "\u0007g"]
+[41.526677, "o", "\u0007"]
+[41.716529, "o", "\r\nsvg-term svgtopam \r\n\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m svg"]
+[41.870306, "o", "\r\nsvg-term svgtopam \r\n\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m svg"]
+[43.018106, "o", "\b\u001b[K"]
+[43.14381, "o", "\b\u001b[K"]
+[43.24941, "o", "\b\u001b[K"]
+[43.390264, "o", "c"]
+[43.519054, "o", "a"]
+[43.826534, "o", "\u0007"]
+[43.962683, "o", "\r\n"]
+[43.962822, "o", "caffeinate caller captoinfo catimg\r\ncairo-trace cameratopam case \r\ncal cancel cast_to_svg_gif \r\ncalendar cap_mkdb cat \r\n\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m ca"]
+[44.115535, "o", "\r\ncaffeinate caller captoinfo catimg\r\ncairo-trace cameratopam case \r\ncal cancel cast_to_svg_gif \r\n"]
+[44.11559, "o", "calendar cap_mkdb cat \r\n\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m ca"]
+[46.236442, "o", "s"]
+[46.291395, "o", "t"]
+[46.554251, "o", "_to_svg_gif "]
+[47.51172, "o", "attach-file-action.cast "]
+[48.239121, "o", "\r\n"]
+[48.239179, "o", "\u001b[?2004l\r"]
+[50.742146, "o", "\r1 / 137 [>--------------------------------------------------] 0.73 % 15.59/s 9s "]
+[50.752237, "o", "\r2 / 137 [>--------------------------------------------------] 1.46 % 26.92/s 5s "]
+[50.7559, "o", "\r3 / 137 [=>-------------------------------------------------] 2.19 % 38.48/s 3s "]
+[50.777125, "o", "\r4 / 137 [=>-------------------------------------------------] 2.92 % 40.34/s 3s "]
+[50.798079, "o", "\r5 / 137 [=>-------------------------------------------------] 3.65 % 41.62/s 3s "]
+[50.818027, "o", "\r6 / 137 [==>------------------------------------------------] 4.38 % 42.83/s 3s "]
+[50.839493, "o", "\r7 / 137 [==>------------------------------------------------] 5.11 % 43.33/s 3s "]
+[50.86045, "o", "\r8 / 137 [==>------------------------------------------------] 5.84 % 43.83/s 3s "]
+[50.877059, "o", "\r9 / 137 [===>-----------------------------------------------] 6.57 % 45.20/s 3s "]
+[50.894651, "o", "\r10 / 137 [===>----------------------------------------------] 7.30 % 46.15/s 3s "]
+[50.910152, "o", "\r11 / 137 [====>---------------------------------------------] 8.03 % 47.37/s 3s "]
+[50.924785, "o", "\r12 / 137 [====>---------------------------------------------] 8.76 % 48.61/s 3s "]
+[50.941555, "o", "\r13 / 137 [====>---------------------------------------------] 9.49 % 49.31/s 3s "]
+[50.957296, "o", "\r14 / 137 [=====>-------------------------------------------] 10.22 % 50.11/s 2s "]
+[50.972815, "o", "\r15 / 137 [=====>-------------------------------------------] 10.95 % 50.87/s 2s "]
+[51.000415, "o", "\r16 / 137 [=====>-------------------------------------------] 11.68 % 49.62/s 2s "]
+[51.02674, "o", "\r17 / 137 [======>------------------------------------------] 12.41 % 48.74/s 2s "]
+[51.05434, "o", "\r18 / 137 [======>------------------------------------------] 13.14 % 47.82/s 2s "]
+[51.082049, "o", "\r19 / 137 [======>------------------------------------------] 13.87 % 47.02/s 3s "]
+[51.105561, "o", "\r20 / 137 [=======>-----------------------------------------] 14.60 % 46.77/s 3s "]
+[51.129064, "o", "\r21 / 137 [=======>-----------------------------------------] 15.33 % 46.55/s 2s "]
+[51.150309, "o", "\r22 / 137 [=======>-----------------------------------------] 16.06 % 46.57/s 2s "]
+[51.169335, "o", "\r23 / 137 [========>----------------------------------------] 16.79 % 46.81/s 2s "]
+[51.187674, "o", "\r24 / 137 [========>----------------------------------------] 17.52 % 47.08/s 2s "]
+[51.206078, "o", "\r25 / 137 [========>----------------------------------------] 18.25 % 47.34/s 2s "]
+[51.224651, "o", "\r26 / 137 [=========>---------------------------------------] 18.98 % 47.56/s 2s "]
+[51.246304, "o", "\r27 / 137 [=========>---------------------------------------] 19.71 % 47.51/s 2s "]
+[51.262978, "o", "\r28 / 137 [==========>--------------------------------------] 20.44 % 47.86/s 2s "]
+[51.279544, "o", "\r29 / 137 [==========>--------------------------------------] 21.17 % 48.20/s 2s "]
+[51.29786, "o", "\r30 / 137 [==========>--------------------------------------] 21.90 % 48.39/s 2s "]
+[51.31666, "o", "\r31 / 137 [===========>-------------------------------------] 22.63 % 48.53/s 2s "]
+[51.335625, "o", "\r32 / 137 [===========>-------------------------------------] 23.36 % 48.66/s 2s "]
+[51.354508, "o", "\r33 / 137 [===========>-------------------------------------] 24.09 % 48.78/s 2s "]
+[51.373685, "o", "\r34 / 137 [============>------------------------------------] 24.82 % 48.87/s 2s "]
+[51.392529, "o", "\r35 / 137 [============>------------------------------------] 25.55 % 48.98/s 2s "]
+[51.411573, "o", "\r36 / 137 [============>------------------------------------] 26.28 % 49.07/s 2s "]
+[51.430534, "o", "\r37 / 137 [=============>-----------------------------------] 27.01 % 49.16/s 2s "]
+[51.449486, "o", "\r38 / 137 [=============>-----------------------------------] 27.74 % 49.25/s 2s "]
+[51.468457, "o", "\r39 / 137 [=============>-----------------------------------] 28.47 % 49.33/s 2s "]
+[51.487642, "o", "\r40 / 137 [==============>----------------------------------] 29.20 % 49.40/s 2s "]
+[51.50726, "o", "\r41 / 137 [==============>----------------------------------] 29.93 % 49.44/s 2s "]
+[51.526762, "o", "\r42 / 137 [===============>---------------------------------] 30.66 % 49.48/s 2s "]
+[51.546514, "o", "\r43 / 137 [===============>---------------------------------] 31.39 % 49.51/s 2s "]
+[51.575902, "o", "\r44 / 137 [===============>---------------------------------] 32.12 % 49.00/s 2s "]
+[51.608313, "o", "\r45 / 137 [================>--------------------------------] 32.85 % 48.37/s 2s "]
+[51.639259, "o", "\r46 / 137 [================>--------------------------------] 33.58 % 47.85/s 2s "]
+[51.670245, "o", "\r47 / 137 [================>--------------------------------] 34.31 % 47.36/s 2s "]
+[51.701348, "o", "\r48 / 137 [=================>-------------------------------] 35.04 % 46.90/s 2s "]
+[51.732351, "o", "\r49 / 137 [=================>-------------------------------] 35.77 % 46.47/s 2s "]
+[51.765244, "o", "\r50 / 137 [=================>-------------------------------] 36.50 % 45.99/s 2s "]
+[52.8218, "o", "\r51 / 137 [==================>------------------------------] 37.23 % 23.79/s 4s "]
+[52.863748, "o", "\r52 / 137 [==================>------------------------------] 37.96 % 23.79/s 4s \r53 / 137 [==================>------------------------------] 38.69 % 24.25/s 3s \r54 / 137 [===================>-----------------------------] 39.42 % 24.70/s 3s \r55 / 137 [===================>-----------------------------] 40.15 % 25.16/s 3s \r56 / 137 [====================>----------------------------] 40.88 % 25.62/s 3s \r57 / 137 [====================>----------------------------] 41.61 % 26.08/s 3s \r58 / 137 [====================>----------------------------] 42.34 % 26.53/s 3s \r59 / 137 [=====================>---------------------------] 43.07 % 26.99/s 3s \r60 / 137 [=====================>---------------------------] 43.80 % 27.45/s 3s "]
+[52.863827, "o", "\r61 / 137 [=====================>---------------------------] 44.53 % 27.91/s 3s \r62 / 137 [======================>--------------------------] 45.26 % 28.36/s 3s \r63 / 137 [======================>--------------------------] 45.99 % 28.82/s 3s \r64 / 137 [======================>--------------------------] 46.72 % 29.28/s 2s \r65 / 137 [=======================>-------------------------] 47.45 % 29.74/s 2s \r66 / 137 [=======================>-------------------------] 48.18 % 30.19/s 2s \r67 / 137 [=======================>-------------------------] 48.91 % 30.65/s 2s \r68 / 137 [========================>------------------------] 49.64 % 31.11/s 2s \r69 / 137 [========================>------------------------] 50.36 % 31.57/s 2s \r70 / 137 [=========================>-----------------------] 51.09 % 32.02/s 2s \r71 / 137 [=========================>-----------------------] 51.82 % 32.48/s 2s "]
+[52.863898, "o", "\r72 / 137 [=========================>-----------------------] 52.55 % 32.94/s 2s \r73 / 137 [==========================>----------------------] 53.28 % 33.40/s 2s \r74 / 137 [==========================>----------------------] 54.01 % 33.85/s 2s \r75 / 137 [==========================>----------------------] 54.74 % 34.31/s 2s \r76 / 137 [===========================>---------------------] 55.47 % 34.77/s 2s \r77 / 137 [===========================>---------------------] 56.20 % 35.23/s 2s \r78 / 137 [===========================>---------------------] 56.93 % 35.68/s 2s \r79 / 137 [============================>--------------------] 57.66 % 36.14/s 2s \r80 / 137 [============================>--------------------] 58.39 % 36.60/s 2s \r81 / 137 [============================>--------------------] 59.12 % 37.06/s 2s \r82 / 137 [=============================>-------------------] 59.85 % 37.51/s 1s \r83 / 137 [=============================>-------------------] 60.58 % 37.97/s 1s "]
+[52.906858, "o", "\r84 / 137 [==============================>------------------] 61.31 % 37.69/s 1s "]
+[52.950405, "o", "\r85 / 137 [==============================>------------------] 62.04 % 37.40/s 1s "]
+[52.99075, "o", "\r86 / 137 [==============================>------------------] 62.77 % 37.18/s 1s "]
+[53.027569, "o", "\r87 / 137 [===============================>-----------------] 63.50 % 37.03/s 1s "]
+[53.065114, "o", "\r88 / 137 [===============================>-----------------] 64.23 % 36.86/s 1s "]
+[53.107811, "o", "\r89 / 137 [===============================>-----------------] 64.96 % 36.63/s 1s "]
+[53.149528, "o", "\r90 / 137 [================================>----------------] 65.69 % 36.41/s 1s "]
+[53.192153, "o", "\r91 / 137 [================================>----------------] 66.42 % 36.19/s 1s "]
+[53.234773, "o", "\r92 / 137 [================================>----------------] 67.15 % 35.98/s 1s "]
+[53.277507, "o", "\r93 / 137 [=================================>---------------] 67.88 % 35.78/s 1s "]
+[53.318941, "o", "\r94 / 137 [=================================>---------------] 68.61 % 35.59/s 1s "]
+[53.355575, "o", "\r95 / 137 [=================================>---------------] 69.34 % 35.48/s 1s "]
+[53.39235, "o", "\r96 / 137 [==================================>--------------] 70.07 % 35.37/s 1s "]
+[53.429323, "o", "\r97 / 137 [==================================>--------------] 70.80 % 35.25/s 1s "]
+[53.46139, "o", "\r98 / 137 [===================================>-------------] 71.53 % 35.21/s 1s "]
+[53.484713, "o", "\r99 / 137 [===================================>-------------] 72.26 % 35.27/s 1s "]
+[53.508674, "o", "\r100 / 137 [===================================>------------] 72.99 % 35.33/s 1s "]
+[53.533397, "o", "\r101 / 137 [===================================>------------] 73.72 % 35.37/s 1s "]
+[53.556701, "o", "\r102 / 137 [===================================>------------] 74.45 % 35.43/s 1s "]
+[53.579023, "o", "\r103 / 137 [====================================>-----------] 75.18 % 35.50/s 1s "]
+[53.602056, "o", "\r104 / 137 [====================================>-----------] 75.91 % 35.57/s 1s "]
+[53.625693, "o", "\r105 / 137 [====================================>-----------] 76.64 % 35.62/s 1s "]
+[53.649636, "o", "\r106 / 137 [=====================================>----------] 77.37 % 35.67/s 1s "]
+[53.672178, "o", "\r107 / 137 [=====================================>----------] 78.10 % 35.74/s 1s "]
+[53.695909, "o", "\r108 / 137 [=====================================>----------] 78.83 % 35.79/s 1s "]
+[53.719251, "o", "\r109 / 137 [======================================>---------] 79.56 % 35.84/s 1s "]
+[53.742558, "o", "\r110 / 137 [======================================>---------] 80.29 % 35.89/s 1s "]
+[53.765944, "o", "\r111 / 137 [======================================>---------] 81.02 % 35.95/s 1s "]
+[53.78965, "o", "\r112 / 137 [=======================================>--------] 81.75 % 35.99/s 1s "]
+[53.808007, "o", "\r113 / 137 [=======================================>--------] 82.48 % 36.10/s 1s "]
+[53.826599, "o", "\r114 / 137 [=======================================>--------] 83.21 % 36.21/s 1s "]
+[53.844901, "o", "\r115 / 137 [========================================>-------] 83.94 % 36.31/s 1s "]
+[53.863146, "o", "\r116 / 137 [========================================>-------] 84.67 % 36.42/s 1s "]
+[53.882537, "o", "\r117 / 137 [========================================>-------] 85.40 % 36.51/s 1s "]
+[53.902265, "o", "\r118 / 137 [=========================================>------] 86.13 % 36.60/s 1s "]
+[53.924581, "o", "\r119 / 137 [=========================================>------] 86.86 % 36.65/s 0s "]
+[53.950922, "o", "\r120 / 137 [==========================================>-----] 87.59 % 36.66/s 0s "]
+[53.976812, "o", "\r121 / 137 [==========================================>-----] 88.32 % 36.68/s 0s "]
+[54.001678, "o", "\r122 / 137 [==========================================>-----] 89.05 % 36.71/s 0s "]
+[54.02685, "o", "\r123 / 137 [===========================================>----] 89.78 % 36.73/s 0s "]
+[54.053816, "o", "\r124 / 137 [===========================================>----] 90.51 % 36.73/s 0s "]
+[54.081931, "o", "\r125 / 137 [===========================================>----] 91.24 % 36.72/s 0s "]
+[54.109678, "o", "\r126 / 137 [============================================>---] 91.97 % 36.72/s 0s "]
+[54.117054, "o", "\r127 / 137 [============================================>---] 92.70 % 36.93/s 0s "]
+[54.11859, "o", "\r128 / 137 [============================================>---] 93.43 % 37.20/s 0s "]
+[54.119744, "o", "\r129 / 137 [=============================================>--] 94.16 % 37.48/s 0s "]
+[54.121765, "o", "\r130 / 137 [=============================================>--] 94.89 % 37.75/s 0s "]
+[54.123409, "o", "\r131 / 137 [=============================================>--] 95.62 % 38.02/s 0s "]
+[54.125037, "o", "\r132 / 137 [==============================================>-] 96.35 % 38.29/s 0s "]
+[54.128042, "o", "\r133 / 137 [==============================================>-] 97.08 % 38.55/s 0s "]
+[54.128427, "o", "\r137 / 137 [==================================================] 100.00 % 39.70/s \r\n"]
+[54.252238, "o", "\r1 / 192 [>--------------------------------------------------] 0.52 % 24.57/s 8s "]
+[54.258956, "o", "\r2 / 192 [>--------------------------------------------------] 1.04 % 42.16/s 5s "]
+[54.262194, "o", "\r3 / 192 [>--------------------------------------------------] 1.56 % 59.19/s 3s "]
+[54.280731, "o", "\r4 / 192 [=>-------------------------------------------------] 2.08 % 57.80/s 3s "]
+[54.299531, "o", "\r5 / 192 [=>-------------------------------------------------] 2.60 % 56.81/s 3s "]
+[54.318485, "o", "\r6 / 192 [=>-------------------------------------------------] 3.12 % 56.10/s 3s "]
+[54.340496, "o", "\r7 / 192 [=>-------------------------------------------------] 3.65 % 54.27/s 3s "]
+[54.361375, "o", "\r8 / 192 [==>------------------------------------------------] 4.17 % 53.38/s 3s "]
+[54.377933, "o", "\r9 / 192 [==>------------------------------------------------] 4.69 % 54.08/s 3s "]
+[54.395388, "o", "\r10 / 192 [==>-----------------------------------------------] 5.21 % 54.39/s 3s "]
+[54.410848, "o", "\r11 / 192 [==>-----------------------------------------------] 5.73 % 55.18/s 3s "]
+[54.425015, "o", "\r12 / 192 [===>----------------------------------------------] 6.25 % 56.20/s 3s "]
+[54.442633, "o", "\r13 / 192 [===>----------------------------------------------] 6.77 % 56.25/s 3s "]
+[54.458364, "o", "\r14 / 192 [===>----------------------------------------------] 7.29 % 56.72/s 3s "]
+[54.473872, "o", "\r15 / 192 [===>----------------------------------------------] 7.81 % 57.17/s 3s "]
+[54.501518, "o", "\r16 / 192 [====>---------------------------------------------] 8.33 % 55.17/s 3s "]
+[54.529028, "o", "\r17 / 192 [====>---------------------------------------------] 8.85 % 53.54/s 3s "]
+[54.556205, "o", "\r18 / 192 [====>---------------------------------------------] 9.38 % 52.22/s 3s "]
+[54.583938, "o", "\r19 / 192 [====>---------------------------------------------] 9.90 % 51.02/s 3s "]
+[54.606702, "o", "\r20 / 192 [=====>-------------------------------------------] 10.42 % 50.61/s 3s "]
+[54.629758, "o", "\r21 / 192 [=====>-------------------------------------------] 10.94 % 50.21/s 3s "]
+[54.651256, "o", "\r22 / 192 [=====>-------------------------------------------] 11.46 % 50.03/s 3s "]
+[54.67043, "o", "\r23 / 192 [=====>-------------------------------------------] 11.98 % 50.12/s 3s "]
+[54.688419, "o", "\r24 / 192 [======>------------------------------------------] 12.50 % 50.32/s 3s "]
+[54.706831, "o", "\r25 / 192 [======>------------------------------------------] 13.02 % 50.47/s 3s "]
+[54.725033, "o", "\r26 / 192 [======>------------------------------------------] 13.54 % 50.63/s 3s "]
+[54.744068, "o", "\r27 / 192 [======>------------------------------------------] 14.06 % 50.70/s 3s "]
+[54.762246, "o", "\r28 / 192 [=======>-----------------------------------------] 14.58 % 50.84/s 3s "]
+[54.780752, "o", "\r29 / 192 [=======>-----------------------------------------] 15.10 % 50.95/s 3s "]
+[54.798711, "o", "\r30 / 192 [=======>-----------------------------------------] 15.62 % 51.09/s 3s "]
+[54.817439, "o", "\r31 / 192 [=======>-----------------------------------------] 16.15 % 51.16/s 3s "]
+[54.835559, "o", "\r32 / 192 [========>----------------------------------------] 16.67 % 51.28/s 3s "]
+[54.854456, "o", "\r33 / 192 [========>----------------------------------------] 17.19 % 51.33/s 3s "]
+[54.872902, "o", "\r34 / 192 [========>----------------------------------------] 17.71 % 51.41/s 3s "]
+[54.891628, "o", "\r35 / 192 [========>----------------------------------------] 18.23 % 51.46/s 3s "]
+[54.910973, "o", "\r36 / 192 [=========>---------------------------------------] 18.75 % 51.47/s 3s "]
+[54.929813, "o", "\r37 / 192 [=========>---------------------------------------] 19.27 % 51.51/s 3s "]
+[54.948892, "o", "\r38 / 192 [=========>---------------------------------------] 19.79 % 51.53/s 3s "]
+[54.967826, "o", "\r39 / 192 [=========>---------------------------------------] 20.31 % 51.57/s 3s "]
+[54.986936, "o", "\r40 / 192 [==========>--------------------------------------] 20.83 % 51.58/s 3s "]
+[55.005645, "o", "\r41 / 192 [==========>--------------------------------------] 21.35 % 51.63/s 3s "]
+[55.024736, "o", "\r42 / 192 [==========>--------------------------------------] 21.88 % 51.65/s 3s "]
+[55.044361, "o", "\r43 / 192 [==========>--------------------------------------] 22.40 % 51.63/s 3s "]
+[55.074665, "o", "\r44 / 192 [===========>-------------------------------------] 22.92 % 50.98/s 3s "]
+[55.107963, "o", "\r45 / 192 [===========>-------------------------------------] 23.44 % 50.20/s 3s "]
+[55.138199, "o", "\r46 / 192 [===========>-------------------------------------] 23.96 % 49.64/s 3s "]
+[55.169318, "o", "\r47 / 192 [===========>-------------------------------------] 24.48 % 49.07/s 3s "]
+[55.200154, "o", "\r48 / 192 [============>------------------------------------] 25.00 % 48.55/s 3s "]
+[55.230884, "o", "\r49 / 192 [============>------------------------------------] 25.52 % 48.07/s 3s "]
+[55.261384, "o", "\r50 / 192 [============>------------------------------------] 26.04 % 47.62/s 3s "]
+[56.30892, "o", "\r51 / 192 [=============>-----------------------------------] 26.56 % 24.32/s 6s "]
+[56.351637, "o", "\r52 / 192 [=============>-----------------------------------] 27.08 % 24.30/s 6s \r53 / 192 [=============>-----------------------------------] 27.60 % 24.76/s 6s \r54 / 192 [=============>-----------------------------------] 28.12 % 25.23/s 5s \r55 / 192 [==============>----------------------------------] 28.65 % 25.70/s 5s "]
+[56.351669, "o", "\r56 / 192 [==============>----------------------------------] 29.17 % 26.17/s 5s \r57 / 192 [==============>----------------------------------] 29.69 % 26.63/s 5s \r58 / 192 [==============>----------------------------------] 30.21 % 27.10/s 5s \r59 / 192 [===============>---------------------------------] 30.73 % 27.57/s 5s \r60 / 192 [===============>---------------------------------] 31.25 % 28.04/s 5s \r61 / 192 [===============>---------------------------------] 31.77 % 28.50/s 5s \r62 / 192 [===============>---------------------------------] 32.29 % 28.97/s 4s \r63 / 192 [================>--------------------------------] 32.81 % 29.44/s 4s \r64 / 192 [================>--------------------------------] 33.33 % 29.90/s 4s \r65 / 192 [================>--------------------------------] 33.85 % 30.37/s 4s \r66 / 192 [================>--------------------------------] 34.38 % 30.84/s 4s \r67 / 192 [=================>-------------------------------] 34.90 % 31.31/s 4s \r68 / 192 [=================>-----------------------"]
+[56.351683, "o", "--------] 35.42 % 31.77/s 4s \r69 / 192 [=================>-------------------------------] 35.94 % 32.24/s 4s \r70 / 192 [=================>-------------------------------] 36.46 % 32.71/s 4s \r71 / 192 [==================>------------------------------] 36.98 % 33.17/s 4s \r72 / 192 [==================>------------------------------] 37.50 % 33.64/s 4s \r73 / 192 [==================>------------------------------] 38.02 % 34.11/s 3s \r74 / 192 [==================>------------------------------] 38.54 % 34.58/s 3s \r75 / 192 [===================>-----------------------------] 39.06 % 35.04/s 3s \r76 / 192 [===================>-----------------------------] 39.58 % 35.51/s 3s \r77 / 192 [===================>-----------------------------] 40.10 % 35.98/s 3s \r78 / 192 [===================>-----------------------------] 40.62 % 36.45/s 3s "]
+[56.351692, "o", "\r79 / 192 [====================>----------------------------] 41.15 % 36.91/s 3s \r80 / 192 [====================>----------------------------] 41.67 % 37.38/s 3s \r81 / 192 [====================>----------------------------] 42.19 % 37.85/s 3s "]
+[56.351822, "o", "\r82 / 192 [====================>----------------------------] 42.71 % 38.31/s 3s \r83 / 192 [=====================>---------------------------] 43.23 % 38.78/s 3s "]
+[56.393534, "o", "\r84 / 192 [=====================>---------------------------] 43.75 % 38.50/s 3s "]
+[56.437676, "o", "\r85 / 192 [=====================>---------------------------] 44.27 % 38.18/s 3s "]
+[56.479005, "o", "\r86 / 192 [=====================>---------------------------] 44.79 % 37.93/s 3s "]
+[56.520355, "o", "\r87 / 192 [======================>--------------------------] 45.31 % 37.68/s 3s "]
+[56.562483, "o", "\r88 / 192 [======================>--------------------------] 45.83 % 37.43/s 3s "]
+[56.604558, "o", "\r89 / 192 [======================>--------------------------] 46.35 % 37.19/s 3s "]
+[56.646689, "o", "\r90 / 192 [======================>--------------------------] 46.88 % 36.96/s 3s "]
+[56.68773, "o", "\r91 / 192 [=======================>-------------------------] 47.40 % 36.75/s 3s "]
+[56.732413, "o", "\r92 / 192 [=======================>-------------------------] 47.92 % 36.50/s 3s "]
+[56.775341, "o", "\r93 / 192 [=======================>-------------------------] 48.44 % 36.27/s 3s "]
+[56.816343, "o", "\r94 / 192 [=======================>-------------------------] 48.96 % 36.09/s 3s "]
+[56.853648, "o", "\r95 / 192 [========================>------------------------] 49.48 % 35.96/s 3s "]
+[56.891051, "o", "\r96 / 192 [========================>------------------------] 50.00 % 35.83/s 3s "]
+[56.928119, "o", "\r97 / 192 [========================>------------------------] 50.52 % 35.71/s 3s "]
+[56.960604, "o", "\r98 / 192 [=========================>-----------------------] 51.04 % 35.65/s 3s "]
+[56.983807, "o", "\r99 / 192 [=========================>-----------------------] 51.56 % 35.71/s 3s "]
+[57.007381, "o", "\r100 / 192 [========================>-----------------------] 52.08 % 35.77/s 3s "]
+[57.032547, "o", "\r101 / 192 [=========================>----------------------] 52.60 % 35.80/s 3s "]
+[57.056409, "o", "\r102 / 192 [=========================>----------------------] 53.12 % 35.85/s 3s "]
+[57.078784, "o", "\r103 / 192 [=========================>----------------------] 53.65 % 35.92/s 2s "]
+[57.10158, "o", "\r104 / 192 [=========================>----------------------] 54.17 % 35.99/s 2s "]
+[57.12656, "o", "\r105 / 192 [==========================>---------------------] 54.69 % 36.02/s 2s "]
+[57.150413, "o", "\r106 / 192 [==========================>---------------------] 55.21 % 36.07/s 2s "]
+[57.173349, "o", "\r107 / 192 [==========================>---------------------] 55.73 % 36.13/s 2s "]
+[57.196226, "o", "\r108 / 192 [==========================>---------------------] 56.25 % 36.18/s 2s "]
+[57.219239, "o", "\r109 / 192 [===========================>--------------------] 56.77 % 36.24/s 2s "]
+[57.242123, "o", "\r110 / 192 [===========================>--------------------] 57.29 % 36.30/s 2s "]
+[57.264373, "o", "\r111 / 192 [===========================>--------------------] 57.81 % 36.36/s 2s "]
+[57.287725, "o", "\r112 / 192 [===========================>--------------------] 58.33 % 36.41/s 2s "]
+[57.306321, "o", "\r113 / 192 [============================>-------------------] 58.85 % 36.51/s 2s "]
+[57.324902, "o", "\r114 / 192 [============================>-------------------] 59.38 % 36.62/s 2s "]
+[57.343241, "o", "\r115 / 192 [============================>-------------------] 59.90 % 36.72/s 2s "]
+[57.361657, "o", "\r116 / 192 [============================>-------------------] 60.42 % 36.82/s 2s "]
+[57.379511, "o", "\r117 / 192 [=============================>------------------] 60.94 % 36.93/s 2s "]
+[57.397491, "o", "\r118 / 192 [=============================>------------------] 61.46 % 37.04/s 2s "]
+[57.415849, "o", "\r119 / 192 [=============================>------------------] 61.98 % 37.14/s 2s "]
+[57.439061, "o", "\r120 / 192 [=============================>------------------] 62.50 % 37.18/s 2s "]
+[57.463797, "o", "\r121 / 192 [==============================>-----------------] 63.02 % 37.20/s 2s "]
+[57.488274, "o", "\r122 / 192 [==============================>-----------------] 63.54 % 37.23/s 2s "]
+[57.513123, "o", "\r123 / 192 [==============================>-----------------] 64.06 % 37.25/s 2s "]
+[57.539224, "o", "\r124 / 192 [==============================>-----------------] 64.58 % 37.26/s 2s "]
+[57.567419, "o", "\r125 / 192 [===============================>----------------] 65.10 % 37.25/s 2s "]
+[57.595028, "o", "\r126 / 192 [===============================>----------------] 65.62 % 37.24/s 2s "]
+[57.63031, "o", "\r127 / 192 [===============================>----------------] 66.15 % 37.15/s 2s "]
+[57.663909, "o", "\r128 / 192 [===============================>----------------] 66.67 % 37.08/s 2s "]
+[57.696236, "o", "\r129 / 192 [================================>---------------] 67.19 % 37.02/s 2s "]
+[57.730174, "o", "\r130 / 192 [================================>---------------] 67.71 % 36.95/s 2s "]
+[57.764146, "o", "\r131 / 192 [================================>---------------] 68.23 % 36.87/s 2s "]
+[57.798243, "o", "\r132 / 192 [================================>---------------] 68.75 % 36.80/s 2s "]
+[57.833652, "o", "\r133 / 192 [=================================>--------------] 69.27 % 36.72/s 2s "]
+[57.866495, "o", "\r134 / 192 [=================================>--------------] 69.79 % 36.66/s 2s "]
+[57.900393, "o", "\r135 / 192 [=================================>--------------] 70.31 % 36.60/s 2s "]
+[57.933271, "o", "\r136 / 192 [=================================>--------------] 70.83 % 36.54/s 2s "]
+[57.967845, "o", "\r137 / 192 [==================================>-------------] 71.35 % 36.47/s 2s "]
+[58.001586, "o", "\r138 / 192 [==================================>-------------] 71.88 % 36.41/s 1s "]
+[58.035669, "o", "\r139 / 192 [==================================>-------------] 72.40 % 36.35/s 1s "]
+[58.069713, "o", "\r140 / 192 [==================================>-------------] 72.92 % 36.29/s 1s "]
+[58.103264, "o", "\r141 / 192 [===================================>------------] 73.44 % 36.23/s 1s "]
+[58.136796, "o", "\r142 / 192 [===================================>------------] 73.96 % 36.18/s 1s "]
+[58.176255, "o", "\r143 / 192 [===================================>------------] 74.48 % 36.07/s 1s "]
+[58.215135, "o", "\r144 / 192 [===================================>------------] 75.00 % 35.97/s 1s "]
+[58.249619, "o", "\r145 / 192 [====================================>-----------] 75.52 % 35.91/s 1s "]
+[58.283488, "o", "\r146 / 192 [====================================>-----------] 76.04 % 35.85/s 1s "]
+[58.317842, "o", "\r147 / 192 [====================================>-----------] 76.56 % 35.80/s 1s "]
+[58.351923, "o", "\r148 / 192 [====================================>-----------] 77.08 % 35.75/s 1s "]
+[58.385731, "o", "\r149 / 192 [=====================================>----------] 77.60 % 35.70/s 1s "]
+[58.419683, "o", "\r150 / 192 [=====================================>----------] 78.12 % 35.64/s 1s "]
+[58.4546, "o", "\r151 / 192 [=====================================>----------] 78.65 % 35.59/s 1s "]
+[58.488609, "o", "\r152 / 192 [=====================================>----------] 79.17 % 35.54/s 1s "]
+[58.522835, "o", "\r153 / 192 [======================================>---------] 79.69 % 35.49/s 1s "]
+[58.557056, "o", "\r154 / 192 [======================================>---------] 80.21 % 35.44/s 1s "]
+[58.5906, "o", "\r155 / 192 [======================================>---------] 80.73 % 35.40/s 1s "]
+[58.624806, "o", "\r156 / 192 [======================================>---------] 81.25 % 35.35/s 1s "]
+[58.658779, "o", "\r157 / 192 [=======================================>--------] 81.77 % 35.30/s 1s "]
+[58.691819, "o", "\r158 / 192 [=======================================>--------] 82.29 % 35.27/s 1s "]
+[58.725647, "o", "\r159 / 192 [=======================================>--------] 82.81 % 35.22/s 1s "]
+[58.759791, "o", "\r160 / 192 [=======================================>--------] 83.33 % 35.18/s 1s "]
+[58.794076, "o", "\r161 / 192 [========================================>-------] 83.85 % 35.13/s 1s "]
+[58.828255, "o", "\r162 / 192 [========================================>-------] 84.38 % 35.09/s 1s "]
+[58.861878, "o", "\r163 / 192 [========================================>-------] 84.90 % 35.05/s 1s "]
+[58.895747, "o", "\r164 / 192 [========================================>-------] 85.42 % 35.01/s 1s "]
+[58.92964, "o", "\r165 / 192 [=========================================>------] 85.94 % 34.97/s 1s "]
+[58.96327, "o", "\r166 / 192 [=========================================>------] 86.46 % 34.93/s 1s "]
+[58.99724, "o", "\r167 / 192 [=========================================>------] 86.98 % 34.90/s 1s "]
+[59.031176, "o", "\r168 / 192 [=========================================>------] 87.50 % 34.86/s 1s "]
+[59.065432, "o", "\r169 / 192 [==========================================>-----] 88.02 % 34.82/s 1s "]
+[59.099623, "o", "\r170 / 192 [==========================================>-----] 88.54 % 34.78/s 1s "]
+[59.133369, "o", "\r171 / 192 [==========================================>-----] 89.06 % 34.74/s 1s "]
+[59.167764, "o", "\r172 / 192 [==========================================>-----] 89.58 % 34.70/s 1s "]
+[59.201626, "o", "\r173 / 192 [===========================================>----] 90.10 % 34.67/s 1s "]
+[59.235141, "o", "\r174 / 192 [===========================================>----] 90.62 % 34.64/s 1s "]
+[59.269205, "o", "\r175 / 192 [===========================================>----] 91.15 % 34.60/s 0s "]
+[59.302952, "o", "\r176 / 192 [===========================================>----] 91.67 % 34.57/s 0s "]
+[59.337511, "o", "\r177 / 192 [============================================>---] 92.19 % 34.53/s 0s "]
+[59.371292, "o", "\r178 / 192 [============================================>---] 92.71 % 34.50/s 0s "]
+[59.405874, "o", "\r179 / 192 [============================================>---] 93.23 % 34.46/s 0s "]
+[59.439597, "o", "\r180 / 192 [============================================>---] 93.75 % 34.43/s 0s "]
+[59.471, "o", "\r181 / 192 [=============================================>--] 94.27 % 34.41/s 0s "]
+[59.476653, "o", "\r182 / 192 [=============================================>--] 94.79 % 34.57/s 0s "]
+[59.478139, "o", "\r183 / 192 [=============================================>--] 95.31 % 34.75/s 0s "]
+[59.479746, "o", "\r184 / 192 [=============================================>--] 95.83 % 34.93/s 0s "]
+[59.481149, "o", "\r185 / 192 [==============================================>-] 96.35 % 35.11/s 0s "]
+[59.482555, "o", "\r186 / 192 [==============================================>-] 96.88 % 35.29/s 0s "]
+[59.483963, "o", "\r187 / 192 [==============================================>-] 97.40 % 35.47/s 0s "]
+[59.487517, "o", "\r188 / 192 [==============================================>-] 97.92 % 35.63/s 0s "]
+[59.487554, "o", "\r192 / 192 [==================================================] 100.00 % 36.39/s \r\n"]
+[59.615182, "o", "\r1 / 297 [>-------------------------------------------------] 0.34 % 24.31/s 12s "]
+[59.622314, "o", "\r2 / 297 [>--------------------------------------------------] 0.67 % 41.42/s 7s "]
+[59.62547, "o", "\r3 / 297 [>--------------------------------------------------] 1.01 % 58.31/s 5s "]
+[59.644769, "o", "\r4 / 297 [>--------------------------------------------------] 1.35 % 56.55/s 5s "]
+[59.664501, "o", "\r5 / 297 [>--------------------------------------------------] 1.68 % 55.26/s 5s "]
+[59.685528, "o", "\r6 / 297 [=>-------------------------------------------------] 2.02 % 53.81/s 5s "]
+[59.705197, "o", "\r7 / 297 [=>-------------------------------------------------] 2.36 % 53.37/s 5s "]
+[59.725159, "o", "\r8 / 297 [=>-------------------------------------------------] 2.69 % 52.93/s 5s "]
+[59.74129, "o", "\r9 / 297 [=>-------------------------------------------------] 3.03 % 53.81/s 5s "]
+[59.75802, "o", "\r10 / 297 [=>------------------------------------------------] 3.37 % 54.35/s 5s "]
+[59.773169, "o", "\r11 / 297 [=>------------------------------------------------] 3.70 % 55.24/s 5s "]
+[59.787703, "o", "\r12 / 297 [==>-----------------------------------------------] 4.04 % 56.16/s 5s "]
+[59.805378, "o", "\r13 / 297 [==>-----------------------------------------------] 4.38 % 56.19/s 5s "]
+[59.820806, "o", "\r14 / 297 [==>-----------------------------------------------] 4.71 % 56.73/s 5s "]
+[59.83591, "o", "\r15 / 297 [==>-----------------------------------------------] 5.05 % 57.28/s 5s "]
+[59.865136, "o", "\r16 / 297 [==>-----------------------------------------------] 5.39 % 54.96/s 5s "]
+[59.891905, "o", "\r17 / 297 [==>-----------------------------------------------] 5.72 % 53.48/s 5s "]
+[59.918349, "o", "\r18 / 297 [===>----------------------------------------------] 6.06 % 52.28/s 5s "]
+[59.945472, "o", "\r19 / 297 [===>----------------------------------------------] 6.40 % 51.15/s 5s "]
+[59.968449, "o", "\r20 / 297 [===>----------------------------------------------] 6.73 % 50.71/s 5s "]
+[59.991376, "o", "\r21 / 297 [===>----------------------------------------------] 7.07 % 50.32/s 5s "]
+[60.012226, "o", "\r22 / 297 [===>----------------------------------------------] 7.41 % 50.21/s 5s "]
+[60.031623, "o", "\r23 / 297 [===>----------------------------------------------] 7.74 % 50.26/s 5s "]
+[60.048522, "o", "\r24 / 297 [====>---------------------------------------------] 8.08 % 50.58/s 5s "]
+[60.066888, "o", "\r25 / 297 [====>---------------------------------------------] 8.42 % 50.72/s 5s "]
+[60.085659, "o", "\r26 / 297 [====>---------------------------------------------] 8.75 % 50.82/s 5s "]
+[60.105009, "o", "\r27 / 297 [====>---------------------------------------------] 9.09 % 50.85/s 5s "]
+[60.123154, "o", "\r28 / 297 [====>---------------------------------------------] 9.43 % 50.99/s 5s "]
+[60.141409, "o", "\r29 / 297 [====>---------------------------------------------] 9.76 % 51.11/s 5s "]
+[60.159736, "o", "\r30 / 297 [====>--------------------------------------------] 10.10 % 51.22/s 5s "]
+[60.178152, "o", "\r31 / 297 [=====>-------------------------------------------] 10.44 % 51.31/s 5s "]
+[60.196673, "o", "\r32 / 297 [=====>-------------------------------------------] 10.77 % 51.39/s 5s "]
+[60.215183, "o", "\r33 / 297 [=====>-------------------------------------------] 11.11 % 51.47/s 5s "]
+[60.234021, "o", "\r34 / 297 [=====>-------------------------------------------] 11.45 % 51.52/s 5s "]
+[60.253031, "o", "\r35 / 297 [=====>-------------------------------------------] 11.78 % 51.55/s 5s "]
+[60.271404, "o", "\r36 / 297 [=====>-------------------------------------------] 12.12 % 51.62/s 5s "]
+[60.292159, "o", "\r37 / 297 [======>------------------------------------------] 12.46 % 51.52/s 5s "]
+[60.31406, "o", "\r38 / 297 [======>------------------------------------------] 12.79 % 51.35/s 5s "]
+[60.333113, "o", "\r39 / 297 [======>------------------------------------------] 13.13 % 51.38/s 5s "]
+[60.351397, "o", "\r40 / 297 [======>------------------------------------------] 13.47 % 51.46/s 5s "]
+[60.370894, "o", "\r41 / 297 [======>------------------------------------------] 13.80 % 51.45/s 5s "]
+[60.390547, "o", "\r42 / 297 [======>------------------------------------------] 14.14 % 51.44/s 5s "]
+[60.409937, "o", "\r43 / 297 [=======>-----------------------------------------] 14.48 % 51.44/s 5s "]
+[60.441005, "o", "\r44 / 297 [=======>-----------------------------------------] 14.81 % 50.75/s 5s "]
+[60.477423, "o", "\r45 / 297 [=======>-----------------------------------------] 15.15 % 49.81/s 5s "]
+[60.510963, "o", "\r46 / 297 [=======>-----------------------------------------] 15.49 % 49.10/s 5s "]
+[60.542479, "o", "\r47 / 297 [=======>-----------------------------------------] 15.82 % 48.53/s 5s "]
+[60.572926, "o", "\r48 / 297 [=======>-----------------------------------------] 16.16 % 48.05/s 5s "]
+[60.60393, "o", "\r49 / 297 [========>----------------------------------------] 16.50 % 47.58/s 5s "]
+[60.635284, "o", "\r50 / 297 [========>----------------------------------------] 16.84 % 47.11/s 5s "]
+[61.673067, "o", "\r51 / 297 [========>---------------------------------------] 17.17 % 24.30/s 10s "]
+[61.714104, "o", "\r52 / 297 [========>---------------------------------------] 17.51 % 24.30/s 10s \r53 / 297 [========>---------------------------------------] 17.85 % 24.77/s 10s \r54 / 297 [========>---------------------------------------] 18.18 % 25.23/s 10s \r55 / 297 [=========>---------------------------------------] 18.52 % 25.70/s 9s \r56 / 297 [=========>---------------------------------------] 18.86 % 26.17/s 9s \r57 / 297 [=========>---------------------------------------] 19.19 % 26.63/s 9s \r58 / 297 [=========>---------------------------------------] 19.53 % 27.10/s 9s "]
+[61.71417, "o", "\r59 / 297 [=========>---------------------------------------] 19.87 % 27.57/s 9s \r60 / 297 [=========>---------------------------------------] 20.20 % 28.04/s 8s \r61 / 297 [==========>--------------------------------------] 20.54 % 28.50/s 8s \r62 / 297 [==========>--------------------------------------] 20.88 % 28.97/s 8s \r63 / 297 [==========>--------------------------------------] 21.21 % 29.44/s 8s \r64 / 297 [==========>--------------------------------------] 21.55 % 29.91/s 8s \r65 / 297 [==========>--------------------------------------] 21.89 % 30.37/s 8s \r66 / 297 [==========>--------------------------------------] 22.22 % 30.84/s 7s \r67 / 297 [===========>-------------------------------------] 22.56 % 31.31/s 7s \r68 / 297 [===========>-------------------------------------] 22.90 % 31.77/s 7s \r69 / 297 [===========>-------------------------------------] 23.23 % 32.24/s 7s \r70 / 297 [===========>-------------------------------------] 23.57 % 32.71/s 7s \r71 / 297 [===========>-----------------------------"]
+[61.714208, "o", "--------] 23.91 % 33.18/s 7s \r72 / 297 [===========>-------------------------------------] 24.24 % 33.64/s 7s \r73 / 297 [============>------------------------------------] 24.58 % 34.11/s 7s \r74 / 297 [============>------------------------------------] 24.92 % 34.58/s 6s \r75 / 297 [============>------------------------------------] 25.25 % 35.04/s 6s \r76 / 297 [============>------------------------------------] 25.59 % 35.51/s 6s \r77 / 297 [============>------------------------------------] 25.93 % 35.98/s 6s \r78 / 297 [============>------------------------------------] 26.26 % 36.45/s 6s \r79 / 297 [=============>-----------------------------------] 26.60 % 36.91/s 6s \r80 / 297 [=============>-----------------------------------] 26.94 % 37.38/s 6s \r81 / 297 [=============>-----------------------------------] 27.27 % 37.85/s 6s \r82 / 297 [=============>-----------------------------------] 27.61 % 38.32/s 6s \r83 / 297 [=============>-----------------------------------] 27.95 % 38.78/s 6s "]
+[61.755192, "o", "\r84 / 297 [=============>-----------------------------------] 28.28 % 38.51/s 6s "]
+[61.797524, "o", "\r85 / 297 [==============>----------------------------------] 28.62 % 38.23/s 6s "]
+[61.839374, "o", "\r86 / 297 [==============>----------------------------------] 28.96 % 37.96/s 6s "]
+[61.882034, "o", "\r87 / 297 [==============>----------------------------------] 29.29 % 37.69/s 6s "]
+[61.92071, "o", "\r88 / 297 [==============>----------------------------------] 29.63 % 37.50/s 6s "]
+[61.967379, "o", "\r89 / 297 [==============>----------------------------------] 29.97 % 37.19/s 6s "]
+[62.015688, "o", "\r90 / 297 [==============>----------------------------------] 30.30 % 36.86/s 6s "]
+[62.057889, "o", "\r91 / 297 [===============>---------------------------------] 30.64 % 36.64/s 6s "]
+[62.099585, "o", "\r92 / 297 [===============>---------------------------------] 30.98 % 36.43/s 6s "]
+[62.143302, "o", "\r93 / 297 [===============>---------------------------------] 31.31 % 36.20/s 6s "]
+[62.184489, "o", "\r94 / 297 [===============>---------------------------------] 31.65 % 36.01/s 6s "]
+[62.221636, "o", "\r95 / 297 [===============>---------------------------------] 31.99 % 35.88/s 6s "]
+[62.257853, "o", "\r96 / 297 [===============>---------------------------------] 32.32 % 35.77/s 6s "]
+[62.295682, "o", "\r97 / 297 [================>--------------------------------] 32.66 % 35.64/s 6s "]
+[62.327613, "o", "\r98 / 297 [================>--------------------------------] 33.00 % 35.59/s 6s "]
+[62.350428, "o", "\r99 / 297 [================>--------------------------------] 33.33 % 35.66/s 6s "]
+[62.37326, "o", "\r100 / 297 [================>-------------------------------] 33.67 % 35.72/s 6s "]
+[62.398265, "o", "\r101 / 297 [================>-------------------------------] 34.01 % 35.76/s 5s "]
+[62.423006, "o", "\r102 / 297 [================>-------------------------------] 34.34 % 35.80/s 5s "]
+[62.448487, "o", "\r103 / 297 [================>-------------------------------] 34.68 % 35.83/s 5s "]
+[62.476248, "o", "\r104 / 297 [================>-------------------------------] 35.02 % 35.83/s 5s "]
+[62.501704, "o", "\r105 / 297 [================>-------------------------------] 35.35 % 35.86/s 5s "]
+[62.525696, "o", "\r106 / 297 [=================>------------------------------] 35.69 % 35.91/s 5s "]
+[62.549166, "o", "\r107 / 297 [=================>------------------------------] 36.03 % 35.96/s 5s "]
+[62.571544, "o", "\r108 / 297 [=================>------------------------------] 36.36 % 36.03/s 5s "]
+[62.59476, "o", "\r109 / 297 [=================>------------------------------] 36.70 % 36.08/s 5s "]
+[62.617714, "o", "\r110 / 297 [=================>------------------------------] 37.04 % 36.14/s 5s "]
+[62.64107, "o", "\r111 / 297 [=================>------------------------------] 37.37 % 36.19/s 5s "]
+[62.663871, "o", "\r112 / 297 [==================>-----------------------------] 37.71 % 36.25/s 5s "]
+[62.682017, "o", "\r113 / 297 [==================>-----------------------------] 38.05 % 36.36/s 5s "]
+[62.700137, "o", "\r114 / 297 [==================>-----------------------------] 38.38 % 36.47/s 5s "]
+[62.717928, "o", "\r115 / 297 [==================>-----------------------------] 38.72 % 36.58/s 5s "]
+[62.73578, "o", "\r116 / 297 [==================>-----------------------------] 39.06 % 36.69/s 5s "]
+[62.753234, "o", "\r117 / 297 [==================>-----------------------------] 39.39 % 36.80/s 5s "]
+[62.771402, "o", "\r118 / 297 [===================>----------------------------] 39.73 % 36.91/s 5s "]
+[62.789713, "o", "\r119 / 297 [===================>----------------------------] 40.07 % 37.01/s 5s "]
+[62.812732, "o", "\r120 / 297 [===================>----------------------------] 40.40 % 37.05/s 5s "]
+[62.837281, "o", "\r121 / 297 [===================>----------------------------] 40.74 % 37.08/s 5s "]
+[62.861999, "o", "\r122 / 297 [===================>----------------------------] 41.08 % 37.11/s 5s "]
+[62.887118, "o", "\r123 / 297 [===================>----------------------------] 41.41 % 37.13/s 5s "]
+[62.912851, "o", "\r124 / 297 [====================>---------------------------] 41.75 % 37.14/s 5s "]
+[62.941416, "o", "\r125 / 297 [====================>---------------------------] 42.09 % 37.12/s 5s "]
+[62.969429, "o", "\r126 / 297 [====================>---------------------------] 42.42 % 37.11/s 5s "]
+[63.003766, "o", "\r127 / 297 [====================>---------------------------] 42.76 % 37.03/s 5s "]
+[63.036892, "o", "\r128 / 297 [====================>---------------------------] 43.10 % 36.96/s 5s "]
+[63.070352, "o", "\r129 / 297 [====================>---------------------------] 43.43 % 36.90/s 5s "]
+[63.105427, "o", "\r130 / 297 [=====================>--------------------------] 43.77 % 36.81/s 5s "]
+[63.142789, "o", "\r131 / 297 [=====================>--------------------------] 44.11 % 36.71/s 5s "]
+[63.179078, "o", "\r132 / 297 [=====================>--------------------------] 44.44 % 36.62/s 5s "]
+[63.21214, "o", "\r133 / 297 [=====================>--------------------------] 44.78 % 36.56/s 4s "]
+[63.242148, "o", "\r134 / 297 [=====================>--------------------------] 45.12 % 36.53/s 4s "]
+[63.273272, "o", "\r135 / 297 [=====================>--------------------------] 45.45 % 36.49/s 4s "]
+[63.304223, "o", "\r136 / 297 [=====================>--------------------------] 45.79 % 36.46/s 4s "]
+[63.335266, "o", "\r137 / 297 [======================>-------------------------] 46.13 % 36.42/s 4s "]
+[63.366699, "o", "\r138 / 297 [======================>-------------------------] 46.46 % 36.39/s 4s "]
+[63.397695, "o", "\r139 / 297 [======================>-------------------------] 46.80 % 36.35/s 4s "]
+[63.429846, "o", "\r140 / 297 [======================>-------------------------] 47.14 % 36.31/s 4s "]
+[63.461976, "o", "\r141 / 297 [======================>-------------------------] 47.47 % 36.27/s 4s "]
+[63.495263, "o", "\r142 / 297 [======================>-------------------------] 47.81 % 36.21/s 4s "]
+[63.528379, "o", "\r143 / 297 [=======================>------------------------] 48.15 % 36.16/s 4s "]
+[63.561349, "o", "\r144 / 297 [=======================>------------------------] 48.48 % 36.11/s 4s "]
+[63.594415, "o", "\r145 / 297 [=======================>------------------------] 48.82 % 36.07/s 4s "]
+[63.626455, "o", "\r146 / 297 [=======================>------------------------] 49.16 % 36.03/s 4s "]
+[63.65966, "o", "\r147 / 297 [=======================>------------------------] 49.49 % 35.98/s 4s "]
+[63.694107, "o", "\r148 / 297 [=======================>------------------------] 49.83 % 35.92/s 4s "]
+[63.727809, "o", "\r149 / 297 [========================>-----------------------] 50.17 % 35.87/s 4s "]
+[63.760557, "o", "\r150 / 297 [========================>-----------------------] 50.51 % 35.83/s 4s "]
+[63.79383, "o", "\r151 / 297 [========================>-----------------------] 50.84 % 35.78/s 4s "]
+[63.826785, "o", "\r152 / 297 [========================>-----------------------] 51.18 % 35.74/s 4s "]
+[63.859441, "o", "\r153 / 297 [========================>-----------------------] 51.52 % 35.70/s 4s "]
+[63.892514, "o", "\r154 / 297 [========================>-----------------------] 51.85 % 35.66/s 4s "]
+[63.926038, "o", "\r155 / 297 [=========================>----------------------] 52.19 % 35.62/s 4s "]
+[63.959359, "o", "\r156 / 297 [=========================>----------------------] 52.53 % 35.57/s 4s "]
+[63.992032, "o", "\r157 / 297 [=========================>----------------------] 52.86 % 35.54/s 4s "]
+[64.033486, "o", "\r158 / 297 [=========================>----------------------] 53.20 % 35.43/s 4s "]
+[64.068638, "o", "\r159 / 297 [=========================>----------------------] 53.54 % 35.38/s 4s "]
+[64.104521, "o", "\r160 / 297 [=========================>----------------------] 53.87 % 35.32/s 4s "]
+[64.13808, "o", "\r161 / 297 [==========================>---------------------] 54.21 % 35.28/s 4s "]
+[64.172531, "o", "\r162 / 297 [==========================>---------------------] 54.55 % 35.23/s 4s "]
+[64.206461, "o", "\r163 / 297 [==========================>---------------------] 54.88 % 35.19/s 4s "]
+[64.240466, "o", "\r164 / 297 [==========================>---------------------] 55.22 % 35.14/s 4s "]
+[64.274531, "o", "\r165 / 297 [==========================>---------------------] 55.56 % 35.10/s 4s "]
+[64.307963, "o", "\r166 / 297 [==========================>---------------------] 55.89 % 35.07/s 4s "]
+[64.341276, "o", "\r167 / 297 [==========================>---------------------] 56.23 % 35.03/s 4s "]
+[64.375261, "o", "\r168 / 297 [===========================>--------------------] 56.57 % 34.99/s 4s "]
+[64.409093, "o", "\r169 / 297 [===========================>--------------------] 56.90 % 34.95/s 4s "]
+[64.443454, "o", "\r170 / 297 [===========================>--------------------] 57.24 % 34.91/s 4s "]
+[64.47738, "o", "\r171 / 297 [===========================>--------------------] 57.58 % 34.87/s 4s "]
+[64.511901, "o", "\r172 / 297 [===========================>--------------------] 57.91 % 34.83/s 4s "]
+[64.546075, "o", "\r173 / 297 [===========================>--------------------] 58.25 % 34.79/s 4s "]
+[64.584327, "o", "\r174 / 297 [============================>-------------------] 58.59 % 34.73/s 4s "]
+[64.622522, "o", "\r175 / 297 [============================>-------------------] 58.92 % 34.66/s 4s "]
+[64.65649, "o", "\r176 / 297 [============================>-------------------] 59.26 % 34.63/s 3s "]
+[64.689365, "o", "\r177 / 297 [============================>-------------------] 59.60 % 34.60/s 3s "]
+[64.722432, "o", "\r178 / 297 [============================>-------------------] 59.93 % 34.57/s 3s "]
+[64.756159, "o", "\r179 / 297 [============================>-------------------] 60.27 % 34.54/s 3s "]
+[64.789359, "o", "\r180 / 297 [=============================>------------------] 60.61 % 34.51/s 3s "]
+[64.820614, "o", "\r181 / 297 [=============================>------------------] 60.94 % 34.50/s 3s "]
+[64.857726, "o", "\r182 / 297 [=============================>------------------] 61.28 % 34.45/s 3s "]
+[64.894922, "o", "\r183 / 297 [=============================>------------------] 61.62 % 34.39/s 3s "]
+[64.931654, "o", "\r184 / 297 [=============================>------------------] 61.95 % 34.34/s 3s "]
+[64.968745, "o", "\r185 / 297 [=============================>------------------] 62.29 % 34.29/s 3s "]
+[65.005976, "o", "\r186 / 297 [==============================>-----------------] 62.63 % 34.24/s 3s "]
+[65.042676, "o", "\r187 / 297 [==============================>-----------------] 62.96 % 34.19/s 3s "]
+[65.081017, "o", "\r188 / 297 [==============================>-----------------] 63.30 % 34.14/s 3s "]
+[65.116496, "o", "\r189 / 297 [==============================>-----------------] 63.64 % 34.10/s 3s "]
+[65.153071, "o", "\r190 / 297 [==============================>-----------------] 63.97 % 34.06/s 3s "]
+[65.189859, "o", "\r191 / 297 [==============================>-----------------] 64.31 % 34.01/s 3s "]
+[65.227084, "o", "\r192 / 297 [===============================>----------------] 64.65 % 33.96/s 3s "]
+[65.264077, "o", "\r193 / 297 [===============================>----------------] 64.98 % 33.92/s 3s "]
+[65.300446, "o", "\r194 / 297 [===============================>----------------] 65.32 % 33.88/s 3s "]
+[65.336927, "o", "\r195 / 297 [===============================>----------------] 65.66 % 33.84/s 3s "]
+[65.373232, "o", "\r196 / 297 [===============================>----------------] 65.99 % 33.80/s 3s "]
+[65.40892, "o", "\r197 / 297 [===============================>----------------] 66.33 % 33.76/s 3s "]
+[65.446345, "o", "\r198 / 297 [===============================>----------------] 66.67 % 33.72/s 3s "]
+[65.483593, "o", "\r199 / 297 [================================>---------------] 67.00 % 33.67/s 3s "]
+[65.52095, "o", "\r200 / 297 [================================>---------------] 67.34 % 33.63/s 3s "]
+[65.557599, "o", "\r201 / 297 [================================>---------------] 67.68 % 33.59/s 3s "]
+[65.594371, "o", "\r202 / 297 [================================>---------------] 68.01 % 33.55/s 3s "]
+[65.630351, "o", "\r203 / 297 [================================>---------------] 68.35 % 33.52/s 3s "]
+[65.667266, "o", "\r204 / 297 [================================>---------------] 68.69 % 33.48/s 3s "]
+[65.705418, "o", "\r205 / 297 [=================================>--------------] 69.02 % 33.43/s 3s "]
+[65.742507, "o", "\r206 / 297 [=================================>--------------] 69.36 % 33.40/s 3s "]
+[65.78337, "o", "\r207 / 297 [=================================>--------------] 69.70 % 33.34/s 3s "]
+[65.825589, "o", "\r208 / 297 [=================================>--------------] 70.03 % 33.27/s 3s "]
+[65.867014, "o", "\r209 / 297 [=================================>--------------] 70.37 % 33.21/s 3s "]
+[65.911277, "o", "\r210 / 297 [=================================>--------------] 70.71 % 33.14/s 3s "]
+[65.955155, "o", "\r211 / 297 [==================================>-------------] 71.04 % 33.07/s 3s "]
+[65.991233, "o", "\r212 / 297 [==================================>-------------] 71.38 % 33.04/s 3s "]
+[66.029424, "o", "\r213 / 297 [==================================>-------------] 71.72 % 33.00/s 3s "]
+[66.068666, "o", "\r214 / 297 [==================================>-------------] 72.05 % 32.95/s 3s "]
+[66.106598, "o", "\r215 / 297 [==================================>-------------] 72.39 % 32.91/s 2s "]
+[66.144754, "o", "\r216 / 297 [==================================>-------------] 72.73 % 32.87/s 2s "]
+[66.181134, "o", "\r217 / 297 [===================================>------------] 73.06 % 32.84/s 2s "]
+[66.218058, "o", "\r218 / 297 [===================================>------------] 73.40 % 32.81/s 2s "]
+[66.25573, "o", "\r219 / 297 [===================================>------------] 73.74 % 32.78/s 2s "]
+[66.293322, "o", "\r220 / 297 [===================================>------------] 74.07 % 32.74/s 2s "]
+[66.331408, "o", "\r221 / 297 [===================================>------------] 74.41 % 32.71/s 2s "]
+[66.369715, "o", "\r222 / 297 [===================================>------------] 74.75 % 32.67/s 2s "]
+[66.405852, "o", "\r223 / 297 [====================================>-----------] 75.08 % 32.64/s 2s "]
+[66.445497, "o", "\r224 / 297 [====================================>-----------] 75.42 % 32.60/s 2s "]
+[66.484597, "o", "\r225 / 297 [====================================>-----------] 75.76 % 32.56/s 2s "]
+[66.522573, "o", "\r226 / 297 [====================================>-----------] 76.09 % 32.52/s 2s "]
+[66.55924, "o", "\r227 / 297 [====================================>-----------] 76.43 % 32.50/s 2s "]
+[66.594507, "o", "\r228 / 297 [====================================>-----------] 76.77 % 32.48/s 2s "]
+[66.632462, "o", "\r229 / 297 [=====================================>----------] 77.10 % 32.44/s 2s "]
+[66.671432, "o", "\r230 / 297 [=====================================>----------] 77.44 % 32.41/s 2s "]
+[66.713638, "o", "\r231 / 297 [=====================================>----------] 77.78 % 32.35/s 2s "]
+[66.755274, "o", "\r232 / 297 [=====================================>----------] 78.11 % 32.31/s 2s "]
+[66.791615, "o", "\r233 / 297 [=====================================>----------] 78.45 % 32.28/s 2s "]
+[66.828132, "o", "\r234 / 297 [=====================================>----------] 78.79 % 32.26/s 2s "]
+[66.864204, "o", "\r235 / 297 [=====================================>----------] 79.12 % 32.24/s 2s "]
+[66.905043, "o", "\r236 / 297 [======================================>---------] 79.46 % 32.19/s 2s "]
+[66.943302, "o", "\r237 / 297 [======================================>---------] 79.80 % 32.16/s 2s "]
+[66.98161, "o", "\r238 / 297 [======================================>---------] 80.13 % 32.13/s 2s "]
+[67.019799, "o", "\r239 / 297 [======================================>---------] 80.47 % 32.10/s 2s "]
+[67.05774, "o", "\r240 / 297 [======================================>---------] 80.81 % 32.07/s 2s "]
+[67.096469, "o", "\r241 / 297 [======================================>---------] 81.14 % 32.04/s 2s "]
+[67.135092, "o", "\r242 / 297 [=======================================>--------] 81.48 % 32.01/s 2s "]
+[67.172907, "o", "\r243 / 297 [=======================================>--------] 81.82 % 31.98/s 2s "]
+[67.210735, "o", "\r244 / 297 [=======================================>--------] 82.15 % 31.95/s 2s "]
+[67.248164, "o", "\r245 / 297 [=======================================>--------] 82.49 % 31.93/s 2s "]
+[67.286464, "o", "\r246 / 297 [=======================================>--------] 82.83 % 31.90/s 2s "]
+[67.323783, "o", "\r247 / 297 [=======================================>--------] 83.16 % 31.87/s 2s "]
+[67.362106, "o", "\r248 / 297 [========================================>-------] 83.50 % 31.84/s 2s "]
+[67.398585, "o", "\r249 / 297 [========================================>-------] 83.84 % 31.82/s 2s "]
+[67.436073, "o", "\r250 / 297 [========================================>-------] 84.18 % 31.80/s 1s "]
+[67.473439, "o", "\r251 / 297 [========================================>-------] 84.51 % 31.77/s 1s "]
+[67.51071, "o", "\r252 / 297 [========================================>-------] 84.85 % 31.75/s 1s "]
+[67.546109, "o", "\r253 / 297 [========================================>-------] 85.19 % 31.74/s 1s "]
+[67.581724, "o", "\r254 / 297 [=========================================>------] 85.52 % 31.72/s 1s "]
+[67.616624, "o", "\r255 / 297 [=========================================>------] 85.86 % 31.71/s 1s "]
+[67.655098, "o", "\r256 / 297 [=========================================>------] 86.20 % 31.68/s 1s "]
+[67.693926, "o", "\r257 / 297 [=========================================>------] 86.53 % 31.65/s 1s "]
+[67.731768, "o", "\r258 / 297 [=========================================>------] 86.87 % 31.63/s 1s "]
+[67.770136, "o", "\r259 / 297 [=========================================>------] 87.21 % 31.60/s 1s "]
+[67.807098, "o", "\r260 / 297 [==========================================>-----] 87.54 % 31.58/s 1s "]
+[67.845272, "o", "\r261 / 297 [==========================================>-----] 87.88 % 31.56/s 1s "]
+[67.882545, "o", "\r262 / 297 [==========================================>-----] 88.22 % 31.53/s 1s "]
+[67.9196, "o", "\r263 / 297 [==========================================>-----] 88.55 % 31.51/s 1s "]
+[67.955913, "o", "\r264 / 297 [==========================================>-----] 88.89 % 31.50/s 1s "]
+[67.991326, "o", "\r265 / 297 [==========================================>-----] 89.23 % 31.48/s 1s "]
+[68.030224, "o", "\r266 / 297 [==========================================>-----] 89.56 % 31.46/s 1s "]
+[68.06889, "o", "\r267 / 297 [===========================================>----] 89.90 % 31.43/s 1s "]
+[68.108057, "o", "\r268 / 297 [===========================================>----] 90.24 % 31.40/s 1s "]
+[68.146507, "o", "\r269 / 297 [===========================================>----] 90.57 % 31.38/s 1s "]
+[68.185144, "o", "\r270 / 297 [===========================================>----] 90.91 % 31.35/s 1s "]
+[68.223278, "o", "\r271 / 297 [===========================================>----] 91.25 % 31.33/s 1s "]
+[68.261787, "o", "\r272 / 297 [===========================================>----] 91.58 % 31.31/s 1s "]
+[68.299819, "o", "\r273 / 297 [============================================>---] 91.92 % 31.29/s 1s "]
+[68.337703, "o", "\r274 / 297 [============================================>---] 92.26 % 31.27/s 1s "]
+[68.375564, "o", "\r275 / 297 [============================================>---] 92.59 % 31.24/s 1s "]
+[68.412598, "o", "\r276 / 297 [============================================>---] 92.93 % 31.23/s 1s "]
+[68.450835, "o", "\r277 / 297 [============================================>---] 93.27 % 31.20/s 1s "]
+[68.487793, "o", "\r278 / 297 [============================================>---] 93.60 % 31.19/s 1s "]
+[68.525715, "o", "\r279 / 297 [=============================================>--] 93.94 % 31.17/s 1s "]
+[68.56181, "o", "\r280 / 297 [=============================================>--] 94.28 % 31.15/s 1s "]
+[68.598297, "o", "\r281 / 297 [=============================================>--] 94.61 % 31.14/s 1s "]
+[68.634923, "o", "\r282 / 297 [=============================================>--] 94.95 % 31.12/s 0s "]
+[68.672476, "o", "\r283 / 297 [=============================================>--] 95.29 % 31.10/s 0s "]
+[68.707611, "o", "\r284 / 297 [=============================================>--] 95.62 % 31.09/s 0s "]
+[68.745113, "o", "\r285 / 297 [==============================================>-] 95.96 % 31.08/s 0s "]
+[68.779466, "o", "\r286 / 297 [==============================================>-] 96.30 % 31.07/s 0s "]
+[68.785099, "o", "\r287 / 297 [==============================================>-] 96.63 % 31.16/s 0s "]
+[68.786735, "o", "\r288 / 297 [==============================================>-] 96.97 % 31.26/s 0s "]
+[68.788319, "o", "\r289 / 297 [==============================================>-] 97.31 % 31.36/s 0s "]
+[68.790184, "o", "\r290 / 297 [==============================================>-] 97.64 % 31.47/s 0s "]
+[68.791872, "o", "\r291 / 297 [================================================] 97.98 % 31.57/s 0s "]
+[68.793683, "o", "\r292 / 297 [================================================] 98.32 % 31.67/s 0s "]
+[68.797074, "o", "\r293 / 297 [================================================] 98.65 % 31.77/s 0s "]
+[68.797243, "o", "\r297 / 297 [==================================================] 100.00 % 32.20/s \r\n"]
+[68.848272, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[109.435138, "o", "o"]
+[109.608119, "o", "e"]
+[109.691791, "o", "n"]
+[109.778275, "o", " "]
+[110.081676, "o", "\b\u001b[K"]
+[110.222771, "o", "\b\u001b[K"]
+[110.337042, "o", "\b\u001b[K"]
+[110.503913, "o", "p"]
+[110.595737, "o", "e"]
+[110.718684, "o", " "]
+[110.725438, "o", "n"]
+[111.217373, "o", "\b\u001b[K"]
+[111.352541, "o", "\b\u001b[K"]
+[111.491284, "o", "n"]
+[111.61368, "o", " "]
+[111.851399, "o", "."]
+[115.917676, "o", "\r\n"]
+[115.918091, "o", "\u001b[?2004l\r"]
+[116.075051, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mscratch/demo/recording\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
diff --git a/docs/casts/attach-file-action/attach-file-action.gif b/docs/casts/attach-file-action/attach-file-action.gif
new file mode 100644
index 0000000..788b7ea
Binary files /dev/null and b/docs/casts/attach-file-action/attach-file-action.gif differ
diff --git a/docs/casts/attach-file-action/attach-file-action.svg b/docs/casts/attach-file-action/attach-file-action.svg
new file mode 100644
index 0000000..ddd3a52
--- /dev/null
+++ b/docs/casts/attach-file-action/attach-file-action.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/casts/image-files/image-file-default.gif b/docs/casts/image-files/image-file-default.gif
new file mode 100644
index 0000000..ade6e85
Binary files /dev/null and b/docs/casts/image-files/image-file-default.gif differ
diff --git a/docs/casts/image-files/image-file-github-dark.gif b/docs/casts/image-files/image-file-github-dark.gif
new file mode 100644
index 0000000..4957272
Binary files /dev/null and b/docs/casts/image-files/image-file-github-dark.gif differ
diff --git a/docs/casts/image-files/image-file.cast b/docs/casts/image-files/image-file.cast
new file mode 100644
index 0000000..e652459
--- /dev/null
+++ b/docs/casts/image-files/image-file.cast
@@ -0,0 +1,163 @@
+{"version": 2, "width": 80, "height": 15, "timestamp": 1744018602, "env": {"SHELL": "/usr/local/bin/bash", "TERM": "xterm-256color"}, "title": "Terminal AI"}
+[1.274873, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mgithub/dwmkerr/terminal-ai\u001b(B\u001b[m \u001b[32m\u001b[4mmain\u001b(B\u001b[m \u001b[31m!\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[2.111344, "o", "i"]
+[2.213877, "o", "m"]
+[2.391691, "o", "g"]
+[2.88165, "o", "c"]
+[2.971737, "o", "a"]
+[3.174772, "o", "t"]
+[3.239301, "o", " "]
+[3.441868, "o", "a"]
+[3.55539, "o", "n"]
+[3.723647, "o", "imal.jpg "]
+[4.224106, "o", "\r\n"]
+[4.224215, "o", "\u001b[?2004l\r"]
+[4.246047, "o", "\u001b[?25l\r\n\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;253;253;253m▄\u001b[48;2;255;255;255m\u001b[38;2;251;251;251m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;248;248;248m▄\u001b[48;2;254;254;253m\u001b[38;2;138;137;129m▄\u001b[48;2;243;243;243m\u001b[38;2;142;135;115m▄\u001b[48;2;255;255;255m\u001b[38;2;242;238;232m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;253;252;252m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;253m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;25"]
+[4.246214, "o", "4;254m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;253;253;253m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[0m\r\n\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;252;252;252m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;254;254;254m\u001b[38;2"]
+[4.246245, "o", ";255;255;255m▄\u001b[48;2;252;252;252m\u001b[38;2;255;255;255m▄\u001b[48;2;252;252;252m\u001b[38;2;255;255;255m▄\u001b[48;2;255;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;243;244;244m▄\u001b[48;2;255;255;255m\u001b[38;2;225;225;226m▄\u001b[48;2;255;255;255m\u001b[38;2;207;207;208m▄\u001b[48;2;255;255;255m\u001b[38;2;174;173;175m▄\u001b[48;2;245;245;245m\u001b[38;2;89;89;90m▄\u001b[48;2;121;121;121m\u001b[38;2;58;58;55m▄\u001b[48;2;73;72;68m\u001b[38;2;76;74;69m▄\u001b[48;2;107;99;81m\u001b[38;2;82;79;74m▄\u001b[48;2;144;133;113m\u001b[38;2;85;80;71m▄\u001b[48;2;224;221;216m\u001b[38;2;127;121;112m▄\u001b[48;2;255;255;255m\u001b[38;2;210;209;207m▄\u001b[48;2;255;255;255m\u001b[38;2;222;221;220m▄\u001b[48;2;255;255;255m\u001b[38;2;233;233;232m▄\u001b[48;2;255;255;255m\u001b[38;2;244;244;243m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;252m\u001b[38;2;255;255;255m▄\u001b[48;2;252;252;252m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;253;253;253m▄\u001b[4"]
+[4.24633, "o", "8;2;255;255;255m\u001b[38;2;253;253;252m▄\u001b[48;2;255;255;255m\u001b[38;2;253;253;252m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;232;231;228m▄\u001b[48;2;255;255;255m\u001b[38;2;164;160;148m▄\u001b[48;2;225;225;224m\u001b[38;2;81;79;72m▄\u001b[48;2;214;214;213m\u001b[38;2;165;165;165m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[0m\r\n\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;232;232;232m▄\u001b[48;2;255;255;255m\u001b[38;2;181;182;182m▄\u001b[48;2;255;255;255m\u001b[38;2;122;124;127m▄\u001b[48;2;226;225;226m\u001b[38;2;90;93;97m▄\u001b[48;2;186;187;186m\u001b[38;2;84;84;85m▄\u001b[48;2;146;146;146m\u001b[38;2;90;90;92m▄\u001b[48;2;117;117;116m\u001b[38;2;99;100;100m▄\u001b[48;2;98;98;97m\u001b[38;2;108;107;103m▄\u001b[48;2;85;85;84m\u001b[38;2;115;113;108m▄\u001b[48;2;80;80;79m\u001b[38;2;119;117;111m▄\u001b[48;2;76;76;76m\u001b[38;2;123;120;112m▄\u001b[48;2;81;81;77m\u001b[38;2;120;116;106m▄\u001b[48;2;91;89;83m\u001b[38;2;1"]
+[4.246414, "o", "18;112;100m▄\u001b[48;2;89;87;79m\u001b[38;2;119;114;101m▄\u001b[48;2;89;86;77m\u001b[38;2;120;113;99m▄\u001b[48;2;88;85;77m\u001b[38;2;119;113;100m▄\u001b[48;2;90;88;80m\u001b[38;2;120;115;102m▄\u001b[48;2;85;82;73m\u001b[38;2;120;115;101m▄\u001b[48;2;87;87;80m\u001b[38;2;118;115;102m▄\u001b[48;2;90;89;84m\u001b[38;2;112;109;95m▄\u001b[48;2;100;99;93m\u001b[38;2;109;105;93m▄\u001b[48;2;112;110;102m\u001b[38;2;104;101;90m▄\u001b[48;2;129;127;120m\u001b[38;2;99;96;84m▄\u001b[48;2;151;150;145m\u001b[38;2;95;94;85m▄\u001b[48;2;170;169;167m\u001b[38;2;88;86;77m▄\u001b[48;2;128;127;122m\u001b[38;2;86;84;74m▄\u001b[48;2;131;127;118m\u001b[38;2;97;95;85m▄\u001b[48;2;245;244;242m\u001b[38;2;130;127;118m▄\u001b[48;2;255;255;255m\u001b[38;2;159;156;147m▄\u001b[48;2;255;255;255m\u001b[38;2;190;188;181m▄\u001b[48;2;255;255;255m\u001b[38;2;179;177;171m▄\u001b[48;2;251;251;251m\u001b[38;2;131;129;124m▄\u001b[48;2;182;181;177m\u001b[38;2;95;95;91m▄\u001b[48;2;111;107;93m\u001b[38;2;105;103;90m▄\u001b[48;2;111;101;80m\u001b[38;2;116;108;88m▄\u001b[48;2;105;100;91m\u001b[38;2;126;124;117m▄\u001b[48;2;227;228;229m\u001b[38;2;252;253;253m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[0m\r\n\u001b[48;2;254;254;254m\u001b[38;2;254"]
+[4.246496, "o", ";254;254m▄\u001b[48;2;253;253;253m\u001b[38;2;178;179;180m▄\u001b[48;2;209;210;212m\u001b[38;2;90;93;96m▄\u001b[48;2;139;141;144m\u001b[38;2;86;88;82m▄\u001b[48;2;90;93;94m\u001b[38;2;97;93;76m▄\u001b[48;2;87;90;89m\u001b[38;2;111;108;100m▄\u001b[48;2;101;102;99m\u001b[38;2;127;124;110m▄\u001b[48;2;117;121;124m\u001b[38;2;114;110;99m▄\u001b[48;2;125;127;128m\u001b[38;2;126;121;108m▄\u001b[48;2;125;122;114m\u001b[38;2;132;123;98m▄\u001b[48;2;126;123;113m\u001b[38;2;136;124;97m▄\u001b[48;2;128;122;109m\u001b[38;2;144;132;104m▄\u001b[48;2;131;124;109m\u001b[38;2;148;136;106m▄\u001b[48;2;133;127;111m\u001b[38;2;152;138;108m▄\u001b[48;2;131;122;104m\u001b[38;2;152;136;104m▄\u001b[48;2;134;126;107m\u001b[38;2;153;136;103m▄\u001b[48;2;134;124;104m\u001b[38;2;154;138;105m▄\u001b[48;2;133;123;102m\u001b[38;2;154;138;105m▄\u001b[48;2;136;126;105m\u001b[38;2;156;139;106m▄\u001b[48;2;139;129;107m\u001b[38;2;161;144;111m▄\u001b[48;2;138;129;107m\u001b[38;2;163;147;113m▄\u001b[48;2;140;133;112m\u001b[38;2;166;151;117m▄\u001b[48;2;142;136;114m\u001b[38;2;166;152;119m▄\u001b[48;2;139;133;110m\u001b[38;2;163;148;114m▄\u001b[48;2;140;134;112m\u001b[38;2;162;148;118m▄\u001b[48;2;141;136;116m\u001b[38;2;166;155;126m▄\u001b[48;2"]
+[4.246575, "o", ";140;136;117m\u001b[38;2;162;150;123m▄\u001b[48;2;137;135;120m\u001b[38;2;160;149;125m▄\u001b[48;2;136;135;123m\u001b[38;2;159;150;128m▄\u001b[48;2;133;131;117m\u001b[38;2;160;151;129m▄\u001b[48;2;130;128;114m\u001b[38;2;160;151;128m▄\u001b[48;2;123;120;105m\u001b[38;2;157;146;120m▄\u001b[48;2;116;111;92m\u001b[38;2;157;143;114m▄\u001b[48;2;112;105;85m\u001b[38;2;156;143;111m▄\u001b[48;2;106;100;81m\u001b[38;2;142;127;95m▄\u001b[48;2;108;100;83m\u001b[38;2;135;122;97m▄\u001b[48;2;117;116;111m\u001b[38;2;125;122;112m▄\u001b[48;2;113;110;98m\u001b[38;2;117;113;99m▄\u001b[48;2;99;93;78m\u001b[38;2;96;91;77m▄\u001b[48;2;159;160;157m\u001b[38;2;157;156;152m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;252;252;252m\u001b[38;2;253;252;252m▄\u001b[0m\r\n\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;205;203;199m\u001b[38;2;254;253;253m▄\u001b[48;2;180;180;174m\u001b[38;2;232;232;231m▄\u001b[48;2;147;147;142m\u001b[38;2;211;211;205m▄\u001b[48;2;129;119;100m\u001b[38;2;179;175;164m▄\u001b[48;2;127;115;91m\u001b[38;2;173;167;152m▄\u001b[48;2;135;122;95m\u001b[38;2;159;148;126m▄\u001b[48;2;126;116;98m\u001b[38;2;163;152;137m▄\u001b[48;2;137;128;113m\u001b[38;2;162;154;144m▄\u001b[48;2;143;126;9"]
+[4.246645, "o", "7m\u001b[38;2;128;119;95m▄\u001b[48;2;146;129;96m\u001b[38;2;134;123;99m▄\u001b[48;2;149;134;100m\u001b[38;2;140;122;94m▄\u001b[48;2;150;132;95m\u001b[38;2;153;131;96m▄\u001b[48;2;156;135;95m\u001b[38;2;165;143;104m▄\u001b[48;2;158;136;94m\u001b[38;2;164;140;101m▄\u001b[48;2;162;139;98m\u001b[38;2;169;145;105m▄\u001b[48;2;164;141;100m\u001b[38;2;172;148;108m▄\u001b[48;2;164;141;100m\u001b[38;2;175;151;110m▄\u001b[48;2;171;148;108m\u001b[38;2;179;156;117m▄\u001b[48;2;175;152;112m\u001b[38;2;180;156;117m▄\u001b[48;2;176;153;111m\u001b[38;2;184;158;117m▄\u001b[48;2;177;152;111m\u001b[38;2;189;162;116m▄\u001b[48;2;178;153;111m\u001b[38;2;195;167;119m▄\u001b[48;2;179;155;116m\u001b[38;2;196;166;119m▄\u001b[48;2;172;147;111m\u001b[38;2;197;167;120m▄\u001b[48;2;174;150;115m\u001b[38;2;200;171;128m▄\u001b[48;2;177;154;119m\u001b[38;2;197;175;144m▄\u001b[48;2;177;155;128m\u001b[38;2;181;164;144m▄\u001b[48;2;169;149;123m\u001b[38;2;165;150;129m▄\u001b[48;2;163;147;125m\u001b[38;2;156;142;120m▄\u001b[48;2;166;155;138m\u001b[38;2;164;151;126m▄\u001b[48;2;181;172;155m\u001b[38;2;234;231;227m▄\u001b[48;2;191;183;167m\u001b[38;2;255;255;255m▄\u001b[48;2;191;184;168m\u001b[38;2;255;255;255m▄\u001b[48;2;174;165;144m\u001b[38;2"]
+[4.246767, "o", ";255;255;255m▄\u001b[48;2;144;137;123m\u001b[38;2;234;235;235m▄\u001b[48;2;111;111;105m\u001b[38;2;177;176;173m▄\u001b[48;2;108;106;94m\u001b[38;2;109;107;95m▄\u001b[48;2;107;101;87m\u001b[38;2;103;96;80m▄\u001b[48;2;107;106;104m\u001b[38;2;87;86;82m▄\u001b[48;2;253;253;253m\u001b[38;2;221;222;224m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[0m\r\n\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;252;252;249m\u001b[38;2;255;255;255m▄\u001b[48;2;244;244;241m\u001b[38;2;255;255;255m▄\u001b[48;2;235;236;230m\u001b[38;2;255;255;255m▄\u001b[48;2;229;227;219m\u001b[38;2;255;255;255m▄\u001b[48;2;217;219;217m\u001b[38;2;255;255;254m▄\u001b[48;2;165;161;146m\u001b[38;2;255;255;253m▄\u001b[48;2;151;138;116m\u001b[38;2;246;246;242m▄\u001b[48;2;170;152;131m\u001b[38;2;242;244;240m▄\u001b[48;2;191;178;156m\u001b[38;2;240;242;237m▄\u001b[48;2;192;176;147m\u001b[38;2;236;237;230m▄\u001b[48;2;193;173;139m\u001b[38;2;234;233;221m▄\u001b[48;2;193;174;142m\u001b[38;2;232;231;218m▄\u001b[48;2;196;180;153m\u001b[38;2;235;234;227m▄\u001b[48;2;196;181;159m\u001b[38;2;"]
+[4.246882, "o", "215;217;217m▄\u001b[48;2;199;181;152m\u001b[38;2;180;170;153m▄\u001b[48;2;206;188;157m\u001b[38;2;175;158;123m▄\u001b[48;2;207;188;156m\u001b[38;2;218;212;191m▄\u001b[48;2;209;188;148m\u001b[38;2;241;239;227m▄\u001b[48;2;214;194;150m\u001b[38;2;244;244;235m▄\u001b[48;2;217;198;155m\u001b[38;2;249;250;246m▄\u001b[48;2;222;204;164m\u001b[38;2;254;255;255m▄\u001b[48;2;233;224;200m\u001b[38;2;255;255;255m▄\u001b[48;2;222;219;212m\u001b[38;2;255;255;255m▄\u001b[48;2;171;166;157m\u001b[38;2;255;255;255m▄\u001b[48;2;138;127;108m\u001b[38;2;228;225;221m▄\u001b[48;2;140;126;110m\u001b[38;2;195;185;178m▄\u001b[48;2;186;172;158m\u001b[38;2;235;231;229m▄\u001b[48;2;251;250;250m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;252m\u001b[38;2;254;254;254m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;253;253;253m▄\u001b[48;2;235;234;232m\u001b[38;2;255;255;255m▄\u001b[48;2;174;171;163m\u001b[38;2;255;255;255m▄\u001b[48;2;95;91;84m\u001b[38;2;242;242;240m▄\u001b[48;2;161;158;154m\u001b[38;2;231;230;227m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[0m\r\n\u001b[48;2;255;255;255m\u001b[3"]
+[4.24711, "o", "8;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;241;241;238m\u001b[38;2;255;255;255m▄\u001b[48;2;201;194;177m\u001b[38;2;255;255;255m▄\u001b[48;2;195;187;171m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;255m\u001b[38;2;254;253;253m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;254m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;254m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;254;254m\u001b["]
+[4.247169, "o", "38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;253;253m▄\u001b[48;2;255;255;255m\u001b[38;2;253;253;253m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[48;2;254;254;254m\u001b[38;2;255;255;255m▄\u001b[48;2;253;253;253m\u001b[38;2;255;255;255m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;254;254;254m▄\u001b[48;2;255;255;255m\u001b[38;2;255;255;255m▄\u001b[0m\r\n\u001b[?25h"]
+[4.315695, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mgithub/dwmkerr/terminal-ai\u001b(B\u001b[m \u001b[32m\u001b[4mmain\u001b(B\u001b[m \u001b[31m!\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[5.079797, "o", "a"]
+[5.18642, "o", "i"]
+[5.317855, "o", " "]
+[5.759029, "o", "-"]
+[5.940887, "o", "-"]
+[6.084394, "o", " "]
+[6.541384, "o", "\b\u001b[K"]
+[6.713334, "o", "i"]
+[6.753237, "o", "m"]
+[6.894108, "o", "a"]
+[6.965782, "o", "g"]
+[7.029848, "o", "e"]
+[7.157592, "o", "-"]
+[7.267238, "o", "f"]
+[7.373055, "o", "i"]
+[7.429546, "o", "l"]
+[7.567648, "o", "\u0007"]
+[8.247217, "o", "e"]
+[8.369882, "o", " "]
+[8.503776, "o", "a"]
+[8.574555, "o", "n"]
+[8.706206, "o", "i"]
+[8.812518, "o", "m"]
+[8.893717, "o", "al.jpg "]
+[9.325319, "o", "\r\n"]
+[9.325822, "o", "\u001b[?2004l\r"]
+[9.642787, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[10.325701, "o", "\u001b[10G"]
+[10.326806, "o", "\u001b[1B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m w\u001b[10G"]
+[10.466006, "o", "\u001b[11G"]
+[10.466677, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m wh\u001b[11G"]
+[10.577529, "o", "\u001b[12G"]
+[10.578667, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m wha\u001b[12G"]
+[10.653586, "o", "\u001b[13G"]
+[10.654842, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what\u001b[13G"]
+[10.74584, "o", "\u001b[14G"]
+[10.746447, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what\u001b[14G"]
+[10.804418, "o", "\u001b[15G"]
+[10.804704, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what i\u001b[15G"]
+[10.993598, "o", "\u001b[16G"]
+[10.993836, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is\u001b[16G"]
+[11.09838, "o", "\u001b[17G"]
+[11.099638, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is\u001b[17G"]
+[11.243223, "o", "\u001b[18G"]
+[11.244346, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is t\u001b[18G"]
+[11.345842, "o", "\u001b[19G"]
+[11.34648, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is th\u001b[19G"]
+[11.381994, "o", "\u001b[20G"]
+[11.382246, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is thi\u001b[20G"]
+[11.489978, "o", "\u001b[21G"]
+[11.490416, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this\u001b[21G"]
+[11.533358, "o", "\u001b[22G"]
+[11.533661, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this\u001b[22G"]
+[11.742584, "o", "\u001b[23G"]
+[11.743441, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a\u001b[23G"]
+[11.919535, "o", "\u001b[24G"]
+[11.920521, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a\u001b[24G"]
+[12.70164, "o", "\u001b[25G"]
+[12.702006, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a p\u001b[25G"]
+[12.853338, "o", "\u001b[26G"]
+[12.854235, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a pi\u001b[26G"]
+[13.000378, "o", "\u001b[27G"]
+[13.000866, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a pic\u001b[27G"]
+[13.174204, "o", "\u001b[28G"]
+[13.174576, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a pict\u001b[28G"]
+[13.231654, "o", "\u001b[29G"]
+[13.232036, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a pictu\u001b[29G"]
+[13.341789, "o", "\u001b[30G"]
+[13.342537, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a pictur\u001b[30G"]
+[13.392819, "o", "\u001b[31G"]
+[13.393092, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a picture\u001b[31G"]
+[13.428237, "o", "\u001b[32G"]
+[13.428525, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a picture\u001b[32G"]
+[13.557723, "o", "\u001b[33G"]
+[13.558571, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a picture o\u001b[33G"]
+[13.653931, "o", "\u001b[34G"]
+[13.654509, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a picture of\u001b[34G"]
+[14.063255, "o", "\u001b[9G"]
+[14.063956, "o", "\u001b[2K\u001b[G\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m what is this a picture of\u001b[34G"]
+[14.067347, "o", "\u001b[2K\u001b[G\u001b[32m✔\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m \u001b[34mwhat is this a picture of\u001b[39m\u001b[34G"]
+[14.069896, "o", "\r\n\u001b[?25h"]
+[14.076947, "o", "\u001b[90m(uploading image: animal.jpg...)\u001b[39m\r\n"]
+[14.113962, "o", "\u001b[?25l"]
+[14.114093, "o", "\u001b[1G\u001b[1G"]
+[14.114233, "o", "\u001b[36m⠋\u001b[39m "]
+[14.195357, "o", "\u001b[1G"]
+[14.195409, "o", "\u001b[0K\u001b[36m⠙\u001b[39m "]
+[14.27588, "o", "\u001b[1G\u001b[0K\u001b[36m⠹\u001b[39m "]
+[14.35759, "o", "\u001b[1G\u001b[0K\u001b[36m⠸\u001b[39m "]
+[14.438315, "o", "\u001b[1G\u001b[0K\u001b[36m⠼\u001b[39m "]
+[14.519407, "o", "\u001b[1G\u001b[0K"]
+[14.519627, "o", "\u001b[36m⠴\u001b[39m "]
+[14.600152, "o", "\u001b[1G\u001b[0K"]
+[14.6003, "o", "\u001b[36m⠦\u001b[39m "]
+[14.681377, "o", "\u001b[1G\u001b[0K"]
+[14.681744, "o", "\u001b[36m⠧\u001b[39m "]
+[14.762772, "o", "\u001b[1G\u001b[0K"]
+[14.763391, "o", "\u001b[36m⠇\u001b[39m "]
+[14.844638, "o", "\u001b[1G\u001b[0K"]
+[14.844909, "o", "\u001b[36m⠏\u001b[39m "]
+[14.925112, "o", "\u001b[1G\u001b[0K\u001b[36m⠋\u001b[39m "]
+[15.005366, "o", "\u001b[1G\u001b[0K"]
+[15.005515, "o", "\u001b[36m⠙\u001b[39m "]
+[15.086829, "o", "\u001b[1G\u001b[0K"]
+[15.087167, "o", "\u001b[36m⠹\u001b[39m "]
+[15.167623, "o", "\u001b[1G\u001b[0K\u001b[36m⠸\u001b[39m "]
+[15.247846, "o", "\u001b[1G\u001b[0K\u001b[36m⠼\u001b[39m "]
+[15.329268, "o", "\u001b[1G\u001b[0K"]
+[15.32962, "o", "\u001b[36m⠴\u001b[39m "]
+[15.410427, "o", "\u001b[1G\u001b[0K\u001b[36m⠦\u001b[39m "]
+[15.49173, "o", "\u001b[1G\u001b[0K"]
+[15.492052, "o", "\u001b[36m⠧\u001b[39m "]
+[15.572048, "o", "\u001b[1G\u001b[0K"]
+[15.572376, "o", "\u001b[36m⠇\u001b[39m "]
+[15.653299, "o", "\u001b[1G\u001b[0K\u001b[36m⠏\u001b[39m "]
+[15.734664, "o", "\u001b[1G\u001b[0K"]
+[15.73505, "o", "\u001b[36m⠋\u001b[39m "]
+[15.814765, "o", "\u001b[1G\u001b[0K"]
+[15.815184, "o", "\u001b[36m⠙\u001b[39m "]
+[15.895798, "o", "\u001b[1G\u001b[0K"]
+[15.896099, "o", "\u001b[36m⠹\u001b[39m "]
+[15.976191, "o", "\u001b[1G\u001b[0K"]
+[15.976529, "o", "\u001b[36m⠸\u001b[39m "]
+[16.057494, "o", "\u001b[1G\u001b[0K\u001b[36m⠼\u001b[39m "]
+[16.137871, "o", "\u001b[1G\u001b[0K\u001b[36m⠴\u001b[39m "]
+[16.219189, "o", "\u001b[1G\u001b[0K\u001b[36m⠦\u001b[39m "]
+[16.238978, "o", "\u001b[1G\u001b[0K"]
+[16.239099, "o", "\u001b[?25h"]
+[16.253742, "o", "\u001b[37m\u001b[1mopenai:\u001b[22m\u001b[39m \u001b[0mThis is an illustration of a fish, possibly a salmon or trout.\u001b[0m\r\n"]
+[16.254607, "o", "\u001b[34m?\u001b[39m \u001b[1m\u001b[37m\u001b[1mchat:\u001b[1m\u001b[39m\u001b[22m\r\n\u001b[90m\u001b[90m Menu openai: gpt-4o-2024-08-06\u001b[39m\u001b[90m\u001b[39m\u001b[1A\u001b[9G"]
+[18.317133, "o", "\u001b[?25h"]
+[18.317738, "o", "\u001b[1B\r\n\u001b[?25h"]
+[18.318708, "o", "Goodbye!\r\n"]
+[18.399546, "o", "\u001b[?2004h\r\n\u001b[1m\u001b[34mgithub/dwmkerr/terminal-ai\u001b(B\u001b[m \u001b[32m\u001b[4mmain\u001b(B\u001b[m \u001b[31m!\u001b(B\u001b[m \u001b[35mconda/\u001b[1mbase\u001b[0m\u001b(B\u001b[m \r\n\u001b[1m\u001b[37m$\u001b(B\u001b[m "]
+[18.957072, "o", "\u001b[?2004l\r\r\n"]
+[18.957119, "o", "exit\r\n"]
diff --git a/docs/casts/image-files/image-file.gif b/docs/casts/image-files/image-file.gif
new file mode 100644
index 0000000..5e9fd47
Binary files /dev/null and b/docs/casts/image-files/image-file.gif differ
diff --git a/docs/casts/image-files/image-file.svg b/docs/casts/image-files/image-file.svg
new file mode 100644
index 0000000..8907beb
--- /dev/null
+++ b/docs/casts/image-files/image-file.svg
@@ -0,0 +1 @@
+github/dwmkerr/terminal-aimain!conda/base$$imgcat$imgcatanimal.jpg▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄$ai$ai--$ai--image-fil$ai--image-file$ai--image-fileanimal.jpg?chat:<Enter>Menuopenai:gpt-4o-2024-08-06?chat:w?chat:wh?chat:wha?chat:what?chat:whati?chat:whatis?chat:whatist?chat:whatisth?chat:whatisthi?chat:whatisthis?chat:whatisthisa?chat:whatisthisap?chat:whatisthisapi?chat:whatisthisapic?chat:whatisthisapict?chat:whatisthisapictu?chat:whatisthisapictur?chat:whatisthisapicture?chat:whatisthisapictureo?chat:whatisthisapictureof✔chat:whatisthisapictureof(uploadingimage:animal.jpg...)⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏openai:Thisisanillustrationofafish,possiblyasalmonortrout.Goodbye!$i$im$img$imgc$imgca$imgcata$imgcatan▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄$a$ai-$ai--i$ai--im$ai--ima$ai--imag$ai--image$ai--image-$ai--image-f$ai--image-fi$ai--image-filea$ai--image-filean$ai--image-fileani$ai--image-fileanimexit
\ No newline at end of file
diff --git a/package.json b/package.json
index 6c35110..55174d5 100644
--- a/package.json
+++ b/package.json
@@ -47,6 +47,7 @@
"colors": "^1.4.0",
"commander": "^11.1.0",
"debug": "^4.3.4",
+ "inquirer-file-selector": "^0.6.2",
"isbinaryfile": "^5.0.4",
"js-yaml": "^4.1.0",
"langfuse": "^3.36.0",
diff --git a/src/chat-actions/AttachFileAction.ts b/src/chat-actions/AttachFileAction.ts
new file mode 100644
index 0000000..ea5eee1
--- /dev/null
+++ b/src/chat-actions/AttachFileAction.ts
@@ -0,0 +1,50 @@
+import { select } from "@inquirer/prompts";
+import { ChatPipelineParameters } from "../chat-pipeline/ChatPipelineParameters";
+import { ChatAction } from "./ChatAction";
+import { ErrorCode, TerminalAIError } from "../lib/errors";
+
+export const AttachFileAction: ChatAction = {
+ id: "attach_file",
+ displayNameInitial: "Attach File",
+ displayNameReply: "Attach File",
+ isInitialInteractionAction: true,
+ isDebugAction: false,
+ weight: 0,
+ execute: async (
+ params: ChatPipelineParameters,
+ ): Promise => {
+ const fileSelector = (await import("inquirer-file-selector")).default;
+ const path = await fileSelector({
+ message: "File path:",
+ type: "file",
+ });
+ const fileType = await select({
+ message: "File processing mode:",
+ choices: [
+ {
+ name: "Text",
+ value: "text",
+ description: "Process as text. Ideal for code, documents, etc.",
+ },
+ {
+ name: "Image",
+ value: "image",
+ description:
+ "Vision processing (model dependent). Enables image recognition, etc.",
+ },
+ ],
+ });
+ if (fileType === "text") {
+ params.chatContext.filePathsOutbox.push(path);
+ } else if (fileType === "image") {
+ params.chatContext.imageFilePathsOutbox.push(path);
+ } else {
+ throw new TerminalAIError(
+ ErrorCode.InvalidOperation,
+ "unknown file processing '${fileType}'",
+ );
+ }
+
+ return undefined;
+ },
+};
diff --git a/src/chat-actions/UploadFileAction.ts b/src/chat-actions/UploadFileAction.ts
deleted file mode 100644
index 7dacc00..0000000
--- a/src/chat-actions/UploadFileAction.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { ChatPipelineParameters } from "../chat-pipeline/ChatPipelineParameters";
-import { ChatAction } from "./ChatAction";
-import { selectModel } from "../commands/init/select/select-model";
-import { updateConfigurationFile } from "../configuration/update-configuration-file";
-
-export const ChangeModelAction: ChatAction = {
- id: "change_model",
- displayNameInitial: "Change Model",
- displayNameReply: "Change Model",
- isInitialInteractionAction: true,
- isDebugAction: false,
- weight: 0,
- execute: async (
- params: ChatPipelineParameters,
- ): Promise => {
- // Choose the model, update the context.
- const executionContext = params.executionContext;
- const provider = params.executionContext.provider;
- const model = await selectModel(provider.model, provider.type);
- provider.model = model;
-
- // Save the model. It's either a named provider or the root provider.
- if (provider.name !== "") {
- updateConfigurationFile(executionContext.configFilePath, {
- [`providers.${provider.name}.model`]: model,
- });
- } else {
- updateConfigurationFile(executionContext.configFilePath, {
- [`model`]: model,
- });
- }
-
- return undefined;
- },
-};
diff --git a/src/chat-actions/index.ts b/src/chat-actions/index.ts
index 044bb71..ddfcb7c 100644
--- a/src/chat-actions/index.ts
+++ b/src/chat-actions/index.ts
@@ -7,10 +7,12 @@ import { QuitAction } from "./QuitAction";
import { ReplyAction } from "./ReplyAction";
import { SaveResponseAction } from "./SaveResponseAction";
import { ChangeModelAction } from "./ChangeModelAction";
+import { AttachFileAction } from "./AttachFileAction";
export const ChatActions: ChatAction[] = [
ReplyAction,
FullscreenInputAction,
+ AttachFileAction,
ChangeModelAction,
CopyResponseAction,
SaveResponseAction,