11use crate :: plugin_events:: CliPluginEventBridge ;
2+ use include_dir:: { Dir , include_dir} ;
3+ use std:: fs;
24use std:: path:: { Path , PathBuf } ;
35use std:: sync:: Arc ;
46use tokio:: sync:: Mutex ;
@@ -9,6 +11,13 @@ use yaak_models::query_manager::QueryManager;
911use yaak_plugins:: events:: PluginContext ;
1012use yaak_plugins:: manager:: PluginManager ;
1113
14+ const EMBEDDED_PLUGIN_RUNTIME : & str = include_str ! ( concat!(
15+ env!( "CARGO_MANIFEST_DIR" ) ,
16+ "/../../crates-tauri/yaak-app/vendored/plugin-runtime/index.cjs"
17+ ) ) ;
18+ static EMBEDDED_VENDORED_PLUGINS : Dir < ' _ > =
19+ include_dir ! ( "$CARGO_MANIFEST_DIR/../../crates-tauri/yaak-app/vendored/plugins" ) ;
20+
1221pub struct CliContext {
1322 data_dir : PathBuf ,
1423 query_manager : QueryManager ,
@@ -33,10 +42,13 @@ impl CliContext {
3342 let installed_plugin_dir = data_dir. join ( "installed-plugins" ) ;
3443 let node_bin_path = PathBuf :: from ( "node" ) ;
3544
45+ prepare_embedded_vendored_plugins ( & vendored_plugin_dir)
46+ . expect ( "Failed to prepare bundled plugins" ) ;
47+
3648 let plugin_runtime_main =
3749 std:: env:: var ( "YAAK_PLUGIN_RUNTIME" ) . map ( PathBuf :: from) . unwrap_or_else ( |_| {
38- PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) )
39- . join ( "../../crates-tauri/yaak-app/vendored/ plugin- runtime/index.cjs ")
50+ prepare_embedded_plugin_runtime ( & data_dir )
51+ . expect ( "Failed to prepare embedded plugin runtime")
4052 } ) ;
4153
4254 let plugin_manager = Arc :: new (
@@ -50,6 +62,13 @@ impl CliContext {
5062 . await ,
5163 ) ;
5264
65+ {
66+ let db = query_manager. connect ( ) ;
67+ if let Err ( err) = plugin_manager. ensure_bundled_plugins_registered ( & db) . await {
68+ eprintln ! ( "Warning: Failed to register bundled plugins: {err}" ) ;
69+ }
70+ }
71+
5372 let plugins = query_manager. connect ( ) . list_plugins ( ) . unwrap_or_default ( ) ;
5473 if !plugins. is_empty ( ) {
5574 let errors = plugin_manager
@@ -113,3 +132,17 @@ impl CliContext {
113132 }
114133 }
115134}
135+
136+ fn prepare_embedded_plugin_runtime ( data_dir : & Path ) -> std:: io:: Result < PathBuf > {
137+ let runtime_dir = data_dir. join ( "vendored" ) . join ( "plugin-runtime" ) ;
138+ fs:: create_dir_all ( & runtime_dir) ?;
139+ let runtime_main = runtime_dir. join ( "index.cjs" ) ;
140+ fs:: write ( & runtime_main, EMBEDDED_PLUGIN_RUNTIME ) ?;
141+ Ok ( runtime_main)
142+ }
143+
144+ fn prepare_embedded_vendored_plugins ( vendored_plugin_dir : & Path ) -> std:: io:: Result < ( ) > {
145+ fs:: create_dir_all ( vendored_plugin_dir) ?;
146+ EMBEDDED_VENDORED_PLUGINS . extract ( vendored_plugin_dir) ?;
147+ Ok ( ( ) )
148+ }
0 commit comments