chore: Extract PromptStore out of prompt_library (#25837)

Piotr Osiewicz created

One step closer to removing long pole with assistant/assistant2 builds

Release Notes:

- N/A

Change summary

Cargo.lock                                                   | 45 ++++-
Cargo.toml                                                   |  2 
crates/assistant/Cargo.toml                                  |  1 
crates/assistant/src/assistant.rs                            |  2 
crates/assistant/src/assistant_panel.rs                      |  3 
crates/assistant/src/inline_assistant.rs                     |  2 
crates/assistant/src/terminal_inline_assistant.rs            |  2 
crates/assistant2/Cargo.toml                                 |  1 
crates/assistant2/src/assistant.rs                           |  2 
crates/assistant2/src/assistant_panel.rs                     |  3 
crates/assistant2/src/buffer_codegen.rs                      |  2 
crates/assistant2/src/inline_assistant.rs                    |  2 
crates/assistant2/src/terminal_inline_assistant.rs           |  2 
crates/assistant_context_editor/Cargo.toml                   |  2 
crates/assistant_context_editor/src/context.rs               |  2 
crates/assistant_context_editor/src/context/context_tests.rs |  4 
crates/assistant_context_editor/src/context_store.rs         |  2 
crates/assistant_slash_commands/Cargo.toml                   |  2 
crates/assistant_slash_commands/src/default_command.rs       |  2 
crates/assistant_slash_commands/src/project_command.rs       |  2 
crates/assistant_slash_commands/src/prompt_command.rs        |  2 
crates/collab/Cargo.toml                                     |  2 
crates/collab/src/tests/integration_tests.rs                 |  2 
crates/prompt_library/Cargo.toml                             | 12 -
crates/prompt_library/src/prompt_library.rs                  |  6 
crates/prompt_store/Cargo.toml                               | 33 ++++
crates/prompt_store/LICENSE-GPL                              |  1 
crates/prompt_store/src/prompt_store.rs                      |  3 
crates/prompt_store/src/prompts.rs                           |  0 
crates/zed/Cargo.toml                                        |  2 
crates/zed/src/main.rs                                       |  2 
crates/zed/src/zed.rs                                        |  2 
32 files changed, 99 insertions(+), 53 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -405,6 +405,7 @@ dependencies = [
  "pretty_assertions",
  "project",
  "prompt_library",
+ "prompt_store",
  "proto",
  "rand 0.8.5",
  "rope",
@@ -472,6 +473,7 @@ dependencies = [
  "picker",
  "project",
  "prompt_library",
+ "prompt_store",
  "proto",
  "rand 0.8.5",
  "rope",
@@ -526,7 +528,7 @@ dependencies = [
  "picker",
  "pretty_assertions",
  "project",
- "prompt_library",
+ "prompt_store",
  "rand 0.8.5",
  "regex",
  "rope",
@@ -617,7 +619,7 @@ dependencies = [
  "log",
  "pretty_assertions",
  "project",
- "prompt_library",
+ "prompt_store",
  "rope",
  "schemars",
  "semantic_index",
@@ -2842,7 +2844,7 @@ dependencies = [
  "pretty_assertions",
  "project",
  "prometheus",
- "prompt_library",
+ "prompt_store",
  "prost 0.9.0",
  "rand 0.8.5",
  "recent_projects",
@@ -10313,12 +10315,36 @@ dependencies = [
 [[package]]
 name = "prompt_library"
 version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "collections",
+ "editor",
+ "gpui",
+ "language",
+ "language_model",
+ "log",
+ "menu",
+ "picker",
+ "prompt_store",
+ "release_channel",
+ "rope",
+ "serde",
+ "settings",
+ "theme",
+ "ui",
+ "util",
+ "workspace",
+ "zed_actions",
+]
+
+[[package]]
+name = "prompt_store"
+version = "0.1.0"
 dependencies = [
  "anyhow",
  "assets",
  "chrono",
  "collections",
- "editor",
  "fs",
  "futures 0.3.31",
  "fuzzy",
@@ -10326,23 +10352,14 @@ dependencies = [
  "handlebars 4.5.0",
  "heed",
  "language",
- "language_model",
  "log",
- "menu",
  "parking_lot",
  "paths",
- "picker",
- "release_channel",
  "rope",
  "serde",
- "settings",
  "text",
- "theme",
- "ui",
  "util",
  "uuid",
- "workspace",
- "zed_actions",
 ]
 
 [[package]]
@@ -16828,7 +16845,7 @@ dependencies = [
  "project",
  "project_panel",
  "project_symbols",
- "prompt_library",
+ "prompt_store",
  "proto",
  "recent_projects",
  "release_channel",

Cargo.toml 🔗

@@ -103,6 +103,7 @@ members = [
     "crates/project_panel",
     "crates/project_symbols",
     "crates/prompt_library",
+    "crates/prompt_store",
     "crates/proto",
     "crates/recent_projects",
     "crates/refineable",
@@ -308,6 +309,7 @@ project = { path = "crates/project" }
 project_panel = { path = "crates/project_panel" }
 project_symbols = { path = "crates/project_symbols" }
 prompt_library = { path = "crates/prompt_library" }
+prompt_store = { path = "crates/prompt_store" }
 proto = { path = "crates/proto" }
 recent_projects = { path = "crates/recent_projects" }
 refineable = { path = "crates/refineable" }

crates/assistant/Cargo.toml 🔗

@@ -51,6 +51,7 @@ parking_lot.workspace = true
 paths.workspace = true
 project.workspace = true
 prompt_library.workspace = true
+prompt_store.workspace = true
 proto.workspace = true
 rope.workspace = true
 schemars.workspace = true

crates/assistant/src/assistant.rs 🔗

@@ -19,7 +19,7 @@ use gpui::{actions, App, Global, UpdateGlobal};
 use language_model::{
     LanguageModelId, LanguageModelProviderId, LanguageModelRegistry, LanguageModelResponseMessage,
 };
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use semantic_index::{CloudEmbeddingProvider, SemanticDb};
 use serde::Deserialize;
 use settings::{Settings, SettingsStore};

crates/assistant/src/assistant_panel.rs 🔗

@@ -24,7 +24,8 @@ use language_model::{
     AuthenticateError, LanguageModelProviderId, LanguageModelRegistry, ZED_CLOUD_PROVIDER_ID,
 };
 use project::Project;
-use prompt_library::{open_prompt_library, PromptBuilder, PromptLibrary};
+use prompt_library::{open_prompt_library, PromptLibrary};
+use prompt_store::PromptBuilder;
 use search::{buffer_search::DivRegistrar, BufferSearchBar};
 use settings::{update_settings_file, Settings};
 use smol::stream::StreamExt;

crates/assistant/src/inline_assistant.rs 🔗

@@ -39,7 +39,7 @@ use language_model_selector::{InlineLanguageModelSelector, LanguageModelSelector
 use multi_buffer::MultiBufferRow;
 use parking_lot::Mutex;
 use project::{CodeAction, ProjectTransaction};
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use rope::Rope;
 use settings::{update_settings_file, Settings, SettingsStore};
 use smol::future::FutureExt;

crates/assistant/src/terminal_inline_assistant.rs 🔗

@@ -20,7 +20,7 @@ use language_model::{
     LanguageModelRequestMessage, Role,
 };
 use language_model_selector::{InlineLanguageModelSelector, LanguageModelSelector};
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use settings::{update_settings_file, Settings};
 use std::{
     cmp,

crates/assistant2/Cargo.toml 🔗

@@ -56,6 +56,7 @@ paths.workspace = true
 picker.workspace = true
 project.workspace = true
 prompt_library.workspace = true
+prompt_store.workspace = true
 proto.workspace = true
 rope.workspace = true
 serde.workspace = true

crates/assistant2/src/assistant.rs 🔗

@@ -27,7 +27,7 @@ use command_palette_hooks::CommandPaletteFilter;
 use feature_flags::{Assistant2FeatureFlag, FeatureFlagAppExt};
 use fs::Fs;
 use gpui::{actions, App};
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use settings::Settings as _;
 
 pub use crate::assistant_panel::{AssistantPanel, ConcreteAssistantPanelDelegate};

crates/assistant2/src/assistant_panel.rs 🔗

@@ -20,7 +20,8 @@ use gpui::{
 use language::LanguageRegistry;
 use language_model::{LanguageModelProviderTosView, LanguageModelRegistry};
 use project::Project;
-use prompt_library::{open_prompt_library, PromptBuilder, PromptLibrary};
+use prompt_library::{open_prompt_library, PromptLibrary};
+use prompt_store::PromptBuilder;
 use settings::{update_settings_file, Settings};
 use time::UtcOffset;
 use ui::{prelude::*, ContextMenu, KeyBinding, PopoverMenu, PopoverMenuHandle, Tab, Tooltip};

crates/assistant2/src/buffer_codegen.rs 🔗

@@ -14,7 +14,7 @@ use language_model::{
 };
 use multi_buffer::MultiBufferRow;
 use parking_lot::Mutex;
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use rope::Rope;
 use smol::future::FutureExt;
 use std::{

crates/assistant2/src/inline_assistant.rs 🔗

@@ -28,7 +28,7 @@ use language_model::{report_assistant_event, LanguageModelRegistry};
 use multi_buffer::MultiBufferRow;
 use parking_lot::Mutex;
 use project::{CodeAction, ProjectTransaction};
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use settings::{Settings, SettingsStore};
 use telemetry_events::{AssistantEvent, AssistantKind, AssistantPhase};
 use terminal_view::{terminal_panel::TerminalPanel, TerminalView};

crates/assistant2/src/terminal_inline_assistant.rs 🔗

@@ -16,7 +16,7 @@ use language_model::{
     report_assistant_event, LanguageModelRegistry, LanguageModelRequest,
     LanguageModelRequestMessage, Role,
 };
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use std::sync::Arc;
 use telemetry_events::{AssistantEvent, AssistantKind, AssistantPhase};
 use terminal_view::TerminalView;

crates/assistant_context_editor/Cargo.toml 🔗

@@ -37,7 +37,7 @@ parking_lot.workspace = true
 paths.workspace = true
 picker.workspace = true
 project.workspace = true
-prompt_library.workspace = true
+prompt_store.workspace = true
 regex.workspace = true
 rope.workspace = true
 rpc.workspace = true

crates/assistant_context_editor/src/context.rs 🔗

@@ -27,7 +27,7 @@ use language_model::{
 use open_ai::Model as OpenAiModel;
 use paths::contexts_dir;
 use project::Project;
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use serde::{Deserialize, Serialize};
 use smallvec::SmallVec;
 use std::{

crates/assistant_context_editor/src/context/context_tests.rs 🔗

@@ -20,7 +20,7 @@ use language_model::{LanguageModelCacheConfiguration, LanguageModelRegistry, Rol
 use parking_lot::Mutex;
 use pretty_assertions::assert_eq;
 use project::Project;
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use rand::prelude::*;
 use serde_json::json;
 use settings::SettingsStore;
@@ -671,7 +671,7 @@ async fn test_slash_commands(cx: &mut TestAppContext) {
 
 #[gpui::test]
 async fn test_workflow_step_parsing(cx: &mut TestAppContext) {
-    cx.update(prompt_library::init);
+    cx.update(prompt_store::init);
     let mut settings_store = cx.update(SettingsStore::test);
     cx.update(|cx| {
         settings_store

crates/assistant_context_editor/src/context_store.rs 🔗

@@ -16,7 +16,7 @@ use gpui::{App, AppContext as _, AsyncApp, Context, Entity, EventEmitter, Task,
 use language::LanguageRegistry;
 use paths::contexts_dir;
 use project::Project;
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use regex::Regex;
 use rpc::AnyProtoClient;
 use std::sync::LazyLock;

crates/assistant_slash_commands/Cargo.toml 🔗

@@ -32,7 +32,7 @@ language.workspace = true
 language_model.workspace = true
 log.workspace = true
 project.workspace = true
-prompt_library.workspace = true
+prompt_store.workspace = true
 rope.workspace = true
 schemars.workspace = true
 semantic_index.workspace = true

crates/assistant_slash_commands/src/default_command.rs 🔗

@@ -5,7 +5,7 @@ use assistant_slash_command::{
 };
 use gpui::{Task, WeakEntity};
 use language::{BufferSnapshot, LspAdapterDelegate};
-use prompt_library::PromptStore;
+use prompt_store::PromptStore;
 use std::{
     fmt::Write,
     sync::{atomic::AtomicBool, Arc},

crates/assistant_slash_commands/src/project_command.rs 🔗

@@ -13,7 +13,7 @@ use feature_flags::FeatureFlag;
 use gpui::{App, Task, WeakEntity};
 use language::{Anchor, CodeLabel, LspAdapterDelegate};
 use language_model::{LanguageModelRegistry, LanguageModelTool};
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use schemars::JsonSchema;
 use semantic_index::SemanticDb;
 use serde::Deserialize;

crates/assistant_slash_commands/src/prompt_command.rs 🔗

@@ -5,7 +5,7 @@ use assistant_slash_command::{
 };
 use gpui::{Task, WeakEntity};
 use language::{BufferSnapshot, LspAdapterDelegate};
-use prompt_library::PromptStore;
+use prompt_store::PromptStore;
 use std::sync::{atomic::AtomicBool, Arc};
 use ui::prelude::*;
 use workspace::Workspace;

crates/collab/Cargo.toml 🔗

@@ -111,7 +111,7 @@ node_runtime.workspace = true
 notifications = { workspace = true, features = ["test-support"] }
 pretty_assertions.workspace = true
 project = { workspace = true, features = ["test-support"] }
-prompt_library.workspace = true
+prompt_store.workspace = true
 recent_projects = { workspace = true }
 release_channel.workspace = true
 remote = { workspace = true, features = ["test-support"] }

crates/collab/src/tests/integration_tests.rs 🔗

@@ -14,7 +14,7 @@ use client::{User, RECEIVE_TIMEOUT};
 use collections::{HashMap, HashSet};
 use fs::{FakeFs, Fs as _, RemoveOptions};
 use futures::{channel::mpsc, StreamExt as _};
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 
 use git::status::{FileStatus, StatusCode, TrackedStatus, UnmergedStatus, UnmergedStatusCode};
 use gpui::{

crates/prompt_library/Cargo.toml 🔗

@@ -13,31 +13,21 @@ path = "src/prompt_library.rs"
 
 [dependencies]
 anyhow.workspace = true
-assets.workspace = true
-chrono.workspace = true
 collections.workspace = true
 editor.workspace = true
-fs.workspace = true
-futures.workspace = true
-fuzzy.workspace = true
 gpui.workspace = true
-handlebars.workspace = true
-heed.workspace = true
 language.workspace = true
 language_model.workspace = true
 log.workspace = true
 menu.workspace = true
-parking_lot.workspace = true
-paths.workspace = true
 picker.workspace = true
+prompt_store.workspace = true
 release_channel.workspace = true
 rope.workspace = true
 serde.workspace = true
 settings.workspace = true
-text.workspace = true
 theme.workspace = true
 ui.workspace = true
 util.workspace = true
-uuid.workspace = true
 workspace.workspace = true
 zed_actions.workspace = true

crates/prompt_library/src/prompt_library.rs 🔗

@@ -1,6 +1,3 @@
-mod prompt_store;
-mod prompts;
-
 use anyhow::Result;
 use collections::{HashMap, HashSet};
 use editor::CompletionProvider;
@@ -29,8 +26,7 @@ use util::{ResultExt, TryFutureExt};
 use workspace::Workspace;
 use zed_actions::assistant::InlineAssist;
 
-pub use crate::prompt_store::*;
-pub use crate::prompts::*;
+use prompt_store::*;
 
 pub fn init(cx: &mut App) {
     prompt_store::init(cx);

crates/prompt_store/Cargo.toml 🔗

@@ -0,0 +1,33 @@
+[package]
+name = "prompt_store"
+version = "0.1.0"
+edition.workspace = true
+publish.workspace = true
+license = "GPL-3.0-or-later"
+
+[lints]
+workspace = true
+
+[lib]
+path = "src/prompt_store.rs"
+
+[dependencies]
+anyhow.workspace = true
+assets.workspace = true
+chrono.workspace = true
+collections.workspace = true
+fs.workspace = true
+futures.workspace = true
+fuzzy.workspace = true
+gpui.workspace = true
+handlebars.workspace = true
+heed.workspace = true
+language.workspace = true
+log.workspace = true
+parking_lot.workspace = true
+paths.workspace = true
+rope.workspace = true
+serde.workspace = true
+text.workspace = true
+util.workspace = true
+uuid.workspace = true

crates/prompt_library/src/prompt_store.rs → crates/prompt_store/src/prompt_store.rs 🔗

@@ -1,3 +1,5 @@
+mod prompts;
+
 use anyhow::{anyhow, Result};
 use chrono::{DateTime, Utc};
 use collections::HashMap;
@@ -10,6 +12,7 @@ use heed::{
     Database, RoTxn,
 };
 use parking_lot::RwLock;
+pub use prompts::*;
 use rope::Rope;
 use serde::{Deserialize, Serialize};
 use std::{

crates/zed/Cargo.toml 🔗

@@ -90,7 +90,7 @@ profiling.workspace = true
 project.workspace = true
 project_panel.workspace = true
 project_symbols.workspace = true
-prompt_library.workspace = true
+prompt_store.workspace = true
 proto.workspace = true
 recent_projects.workspace = true
 release_channel.workspace = true

crates/zed/src/main.rs 🔗

@@ -23,7 +23,7 @@ use gpui::{App, AppContext as _, Application, AsyncApp, UpdateGlobal as _};
 use gpui_tokio::Tokio;
 use http_client::{read_proxy_from_env, Uri};
 use language::LanguageRegistry;
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use reqwest_client::ReqwestClient;
 
 use assets::Assets;

crates/zed/src/zed.rs 🔗

@@ -37,7 +37,7 @@ use outline_panel::OutlinePanel;
 use paths::{local_settings_file_relative_path, local_tasks_file_relative_path};
 use project::{DirectoryLister, ProjectItem};
 use project_panel::ProjectPanel;
-use prompt_library::PromptBuilder;
+use prompt_store::PromptBuilder;
 use quick_action_bar::QuickActionBar;
 use recent_projects::open_ssh_project;
 use release_channel::{AppCommitSha, ReleaseChannel};