diff --git a/.github/workflows/package-and-publish.yml b/.github/workflows/package-and-publish.yml
index 4320ab74b..e4552b3cc 100644
--- a/.github/workflows/package-and-publish.yml
+++ b/.github/workflows/package-and-publish.yml
@@ -10,6 +10,9 @@ name: Package and publish
on:
workflow_dispatch:
+ push:
+ branches:
+ - develop
workflow_run:
workflows: ["Version Bump"]
types:
@@ -19,6 +22,7 @@ on:
pull_request:
branches:
- main
+ - develop
env:
IS_PR: ${{ github.event_name == 'pull_request' }}
diff --git a/package.json b/package.json
index 31b61619e..73c1c5d14 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
"dev": "vite",
"dev:web": "vite",
"build": "tsc && vite build",
+ "build:app": "yarn skills:build && tsc && vite build",
"compile": "tsc --noEmit",
"preview": "vite preview",
"tauri": "tauri",
diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs
index b1f5bfd80..2c9d94105 100644
--- a/src-tauri/src/lib.rs
+++ b/src-tauri/src/lib.rs
@@ -311,6 +311,12 @@ pub fn run() {
match runtime::v8_engine::RuntimeEngine::new(skills_data_dir) {
Ok(engine) => {
engine.set_app_handle(app.handle().clone());
+
+ // Set resource directory for bundled skills (production builds)
+ if let Ok(resource_dir) = app.path().resource_dir() {
+ engine.set_resource_dir(resource_dir);
+ }
+
let engine = std::sync::Arc::new(engine);
// Wire the SkillRegistry into the SocketManager for MCP
diff --git a/src-tauri/src/runtime/v8_engine.rs b/src-tauri/src/runtime/v8_engine.rs
index 16110c347..d54d5f8b9 100644
--- a/src-tauri/src/runtime/v8_engine.rs
+++ b/src-tauri/src/runtime/v8_engine.rs
@@ -29,6 +29,8 @@ pub struct RuntimeEngine {
skills_data_dir: PathBuf,
/// Directory containing skill source files.
skills_source_dir: RwLock