ZIm/crates
Nate Butler f8672289fc
Add prompt library (#11910)
This PR adds a Prompt Library to Zed, powering custom prompts and any
default prompts we want to package with the assistant.

These are useful for:

- Creating a "default prompt" - a super prompt that includes a
collection of things you want the assistant to know in every
conversation.
- Adding single prompts to your current context to help guide the
assistant's responses.
- (In the future) dynamically adding certain prompts to the assistant
based on the current context, such as the presence of Rust code or a
specific async runtime you want to work with.

These will also be useful for populating the assistant actions typeahead
we plan to build in the near future.

## Prompt Library

The prompt library is a registry of prompts. Initially by default when
opening the assistant, the prompt manager will load any custom prompts
present in your `~/.config/zed/prompts` directory.

Checked prompts are included in your "default prompt", which can be
inserted into the assitant by running `assistant: insert default prompt`
or clicking the `Insert Default Prompt` button in the assistant panel's
more menu.

When the app starts, no prompts are set to default. You can add prompts
to the default by checking them in the Prompt Library.

I plan to improve this UX in the future, allowing your default prompts
to be remembered, and allowing creating, editing and exporting prompts
from the Library.

### Creating a custom prompt

Prompts have a simple format:

```json
{
  // ~/.config/zed/prompts/no-comments.json
  "title": "No comments in code",
  "version": "1.0",
  "author": "Nate Butler <iamnbutler@gmail.com>",
  "languages": ["*"],
  "prompt": "Do not add inline or doc comments to any returned code. Avoid removing existing comments unless they are no longer accurate due to changes in the code."
}
```

Ensure you properly escape your prompt string when creating a new prompt
file.

Example:

```json
{
  // ...
  "prompt": "This project using the gpui crate as it's UI framework for building UI in Rust. When working in Rust files with gpui components, import it's dependencies using `use gpui::{*, prelude::*}`.\n\nWhen a struct has a `#[derive(IntoElement)]` attribute, it is a UI component that must implement `RenderOnce`. Example:\n\n```rust\n#[derive(IntoElement)]\nstruct MyComponent {\n    id: ElementId,\n}\n\nimpl MyComponent {\n    pub fn new(id: impl Into<ElementId>) -> Self {\n        Self { id.into() }\n    }\n}\n\nimpl RenderOnce for MyComponent {\n    fn render(self, cx: &mut WindowContext) -> impl IntoElement {\n        div().id(self.id.clone()).child(text(\"Hello, world!\"))\n    }\n}\n```"
}
```


Release Notes:

- N/A

---------

Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
2024-05-16 16:55:54 -04:00
..
activity_indicator linux: Store binary path before restart to handle deleted binary file (#11568) 2024-05-08 19:13:28 +02:00
anthropic Sanitize messages before sending them to Anthropic (#11810) 2024-05-14 17:47:33 +02:00
assets New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
assistant Add prompt library (#11910) 2024-05-16 16:55:54 -04:00
assistant2 Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
assistant_tooling Bring the Tool Calling README up to date (#11683) 2024-05-12 04:47:19 -07:00
audio Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
auto_update Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
breadcrumbs Break typography styles out of StyledExt (#11013) 2024-04-25 17:42:53 -04:00
call Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
channel Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
cli cli: Support --foreground for debugging (#11819) 2024-05-14 16:05:40 -06:00
client Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
clock Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
collab Stop sending hangs to slack for a bit (#11933) 2024-05-16 14:11:00 -06:00
collab_ui chat: Only autocomplete active people (#11892) 2024-05-16 09:14:08 -06:00
collections gpui: Add SVG rendering to img element and generic asset cache (#9931) 2024-03-29 17:09:49 -07:00
color Fix hex_to_hsla inside the color crate (#9412) 2024-03-15 16:58:46 -04:00
command_palette Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
command_palette_hooks Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
copilot Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
db Clean up whitespace (#10755) 2024-04-23 13:31:21 -04:00
dev_server_projects Add xtask for finding crates with missing licenses (#11776) 2024-05-13 18:52:12 -04:00
diagnostics Introduce DisplayRow, MultiBufferRow newtypes and BufferRow type alias (#11656) 2024-05-11 00:06:51 +03:00
editor Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
extension Add basic proxy settings (#11852) 2024-05-16 19:43:26 +03:00
extension_api Improve extension API documentation (#10322) 2024-04-09 10:38:29 -04:00
extension_cli Add git blame (#8889) 2024-03-28 18:32:11 +01:00
extensions_ui Extract Ruby extension (#11360) 2024-05-10 11:53:11 -04:00
feature_flags WIP: remoting (#10085) 2024-04-11 15:36:35 -06:00
feedback Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
file_finder Remove 'Destructive' prompts (#11631) 2024-05-09 18:52:09 -06:00
file_icons gpui: Fix Global trait (#11187) 2024-04-29 16:37:37 -04:00
fs linux: Handle modification events from file watcher (#11778) 2024-05-14 11:00:26 -07:00
fsevent Retain run loop (#11241) 2024-04-30 23:31:59 -06:00
fuzzy Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
git Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
git_hosting_providers Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
go_to_line Introduce DisplayRow, MultiBufferRow newtypes and BufferRow type alias (#11656) 2024-05-11 00:06:51 +03:00
google_ai Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
gpui Wayland: Implement text_input_v3 and xkb compose (#11712) 2024-05-16 11:42:43 -07:00
gpui_macros Adjust names of negated style methods (#11453) 2024-05-06 13:56:25 -04:00
headless Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
http Add basic proxy settings (#11852) 2024-05-16 19:43:26 +03:00
image_viewer Add xtask for finding crates with missing licenses (#11776) 2024-05-13 18:52:12 -04:00
inline_completion_button Supermaven (#10788) 2024-05-03 12:50:42 -07:00
install_cli Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
journal Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
language Autodetect parser name with prettier by default (#11558) 2024-05-15 22:51:46 +03:00
language_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
language_tools Return prettier entry back to LSP logs (#11563) 2024-05-08 18:21:43 +03:00
languages Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
live_kit_client Hoist nanoid to workspace-level (#11029) 2024-04-25 22:37:40 -04:00
live_kit_server Vendor LiveKit protocol (#11672) 2024-05-10 14:18:40 -04:00
lsp lsp: More information in error if server fails to start (#11343) 2024-05-03 13:23:52 +02:00
markdown Add xtask for finding crates with missing licenses (#11776) 2024-05-13 18:52:12 -04:00
markdown_preview markdown preview: Break up list items into individual blocks (#10852) 2024-04-26 21:34:45 +02:00
media Revert "Revert "Revert dependency updates in #9836 (#10089)"" 2024-04-02 13:12:38 -06:00
menu Fix the linux keymap (#9829) 2024-03-26 16:10:09 -07:00
multi_buffer Introduce DisplayRow, MultiBufferRow newtypes and BufferRow type alias (#11656) 2024-05-11 00:06:51 +03:00
node_runtime Add basic proxy settings (#11852) 2024-05-16 19:43:26 +03:00
notifications Fix mention notifications are not updated after message change and not removed after a message is deleted (#9847) 2024-04-02 20:40:00 -06:00
open_ai Add GPT-4o as possible model (#11764) 2024-05-14 10:43:24 +02:00
outline Introduce DisplayRow, MultiBufferRow newtypes and BufferRow type alias (#11656) 2024-05-11 00:06:51 +03:00
picker new path picker (#11015) 2024-04-26 13:25:25 -06:00
prettier Autodetect parser name with prettier by default (#11558) 2024-05-15 22:51:46 +03:00
project Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
project_panel project panel: Allow confirming prompt with keyboard (#11346) 2024-05-03 15:15:39 +02:00
project_symbols Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
quick_action_bar Do not show tooltip for editor controls if clicked (#10679) 2024-04-17 13:20:47 +02:00
recent_projects Auto-open remote projects on creation (#11826) 2024-05-14 16:05:26 -06:00
refineable Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
release_channel linux cli (#11585) 2024-05-09 21:08:49 -06:00
rich_text New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
rope Revert "Revert "language: Remove buffer fingerprinting (#9007)"" (#9671) 2024-04-12 18:40:35 +02:00
rpc remoting: Edit dev server (#11344) 2024-05-06 12:58:11 +02:00
search Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
semantic_index Add basic proxy settings (#11852) 2024-05-16 19:43:26 +03:00
semantic_version Extract SemanticVersion into its own crate (#9956) 2024-03-29 12:11:57 -04:00
settings Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
snippet Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez Rename RemoteProject -> DevServerProject (#11301) 2024-05-02 11:00:08 -06:00
sqlez_macros Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
story Introduce a new markdown crate (#11556) 2024-05-09 11:03:33 +02:00
storybook Add WithRemSize element (#11928) 2024-05-16 14:37:55 -04:00
sum_tree Update docstring for SumTree (#10927) 2024-04-24 14:01:10 +02:00
supermaven Add xtask for finding crates with missing licenses (#11776) 2024-05-13 18:52:12 -04:00
supermaven_api Add xtask for finding crates with missing licenses (#11776) 2024-05-13 18:52:12 -04:00
tab_switcher Introduce recent files ambient context for assistant (#11791) 2024-05-14 13:48:36 +02:00
task tasks: Refresh available tasks in editor when tasks.json changes (#11811) 2024-05-14 21:26:35 +02:00
tasks_ui tasks: Wire through click handlers in new tasks modal (#11854) 2024-05-15 14:38:19 +02:00
telemetry_events Upload panics via collab instead of zed.dev (#11932) 2024-05-16 14:10:49 -06:00
terminal Make primary clipboard Linux only (#11843) 2024-05-15 10:44:47 -07:00
terminal_view gpui: Pass Style by value to request_layout (#11597) 2024-05-09 11:38:53 +02:00
text Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
theme theme: Properly merge SyntaxTheme styles to allow for partial overrides (#11911) 2024-05-16 09:58:47 -04:00
theme_importer Rust 1.78 (#11314) 2024-05-05 15:02:50 +02:00
theme_selector Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
time_format Inline git blame (#10398) 2024-04-15 14:21:52 +02:00
ui Add prompt library (#11910) 2024-05-16 16:55:54 -04:00
ui_text_field Make border methods always require an explicit width (#11450) 2024-05-06 13:22:47 -04:00
util Add prompt library (#11910) 2024-05-16 16:55:54 -04:00
vcs_menu vcs menu: Use project's repositories, do not open directly (#11652) 2024-05-10 11:06:32 +02:00
vim Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
welcome Supermaven (#10788) 2024-05-03 12:50:42 -07:00
workspace Disallow multiple save modals for the same pane item (#11931) 2024-05-16 22:55:05 +03:00
worktree git: Support git repos with .git folder above project root (#11550) 2024-05-14 18:34:51 +02:00
zed Upload panics via collab instead of zed.dev (#11932) 2024-05-16 14:10:49 -06:00
zed_actions Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00