From 890b20e876fbed69a64eb3dd23102cd5c4a83305 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Fri, 6 Feb 2026 11:24:57 +0530 Subject: [PATCH] Refactor to QuickJS Integration and Update Documentation - Replaced TDLib references with QuickJS in the CLAUDE.md documentation. - Updated service paths and imports in the Rust codebase to reflect the transition to QuickJS. - Added a new bootstrap.js file for QuickJS runtime, providing necessary browser-like API shims. - Enhanced the TODO list with tasks for allowing bundling of unverified skills and coding new skills independently. - Introduced a new storage layer for IndexedDB emulation and updated related operations for QuickJS compatibility. --- CLAUDE.md | 2 +- TODO.md | 2 ++ src-tauri/src/runtime/qjs_engine.rs | 2 +- src-tauri/src/runtime/qjs_skill_instance.rs | 6 +++--- src-tauri/src/services/mod.rs | 3 ++- .../src/services/{tdlib_v8 => quickjs-libs}/bootstrap.js | 6 ++++-- src-tauri/src/services/{tdlib_v8 => quickjs-libs}/mod.rs | 0 .../src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/mod.rs | 2 +- .../services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_core.rs | 0 .../{tdlib_v8 => quickjs-libs}/qjs_ops/ops_model.rs | 0 .../services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_net.rs | 0 .../{tdlib_v8 => quickjs-libs}/qjs_ops/ops_state.rs | 0 .../{tdlib_v8 => quickjs-libs}/qjs_ops/ops_storage.rs | 2 +- .../{tdlib_v8 => quickjs-libs}/qjs_ops/ops_tdlib.rs | 0 .../services/{tdlib_v8 => quickjs-libs}/qjs_ops/types.rs | 0 .../src/services/{tdlib_v8 => quickjs-libs}/service.rs | 0 .../src/services/{tdlib_v8 => quickjs-libs}/storage.rs | 0 17 files changed, 15 insertions(+), 10 deletions(-) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/bootstrap.js (99%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/mod.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/mod.rs (96%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_core.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_model.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_net.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_state.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_storage.rs (99%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/ops_tdlib.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/qjs_ops/types.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/service.rs (100%) rename src-tauri/src/services/{tdlib_v8 => quickjs-libs}/storage.rs (100%) diff --git a/CLAUDE.md b/CLAUDE.md index 459ee7209..99350058e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -193,7 +193,7 @@ Advanced JavaScript execution engine for skills using V8 (via deno_core): - `log_bridge.rs` — Structured logging from skills - `cron_bridge.rs` — Cron job scheduling and management -**TDLib Integration (`src-tauri/src/services/tdlib_v8/`):** +**Quickjs Integration (`src-tauri/src/services/quickjs/`):** - `service.rs` — High-level TDLib client management with V8 integration - `bootstrap.js` — V8 JavaScript bootstrap environment diff --git a/TODO.md b/TODO.md index 20a9e9785..0902c9807 100644 --- a/TODO.md +++ b/TODO.md @@ -12,3 +12,5 @@ todo [] - get background proceeses done [] - get ai to summarize messages in the device and upload to the cloud [] - get all the remaining skills working +[] - allow bundling of unverified skills +[] - allow for new skills to be coded on their own diff --git a/src-tauri/src/runtime/qjs_engine.rs b/src-tauri/src/runtime/qjs_engine.rs index cada75935..43d7ae1c8 100644 --- a/src-tauri/src/runtime/qjs_engine.rs +++ b/src-tauri/src/runtime/qjs_engine.rs @@ -15,7 +15,7 @@ use crate::runtime::preferences::PreferencesStore; use crate::runtime::skill_registry::SkillRegistry; use crate::runtime::types::{events, SkillSnapshot, SkillStatus, ToolResult}; use crate::runtime::qjs_skill_instance::{BridgeDeps, QjsSkillInstance}; -use crate::services::tdlib_v8::storage::IdbStorage; +use crate::services::quickjs_libs::storage::IdbStorage; /// The central runtime engine using QuickJS. pub struct RuntimeEngine { diff --git a/src-tauri/src/runtime/qjs_skill_instance.rs b/src-tauri/src/runtime/qjs_skill_instance.rs index 12f50d65f..6b784ee3e 100644 --- a/src-tauri/src/runtime/qjs_skill_instance.rs +++ b/src-tauri/src/runtime/qjs_skill_instance.rs @@ -21,7 +21,7 @@ use crate::runtime::skill_registry::SkillRegistry; use crate::runtime::types::{ SkillConfig, SkillMessage, SkillSnapshot, SkillStatus, ToolContent, ToolDefinition, ToolResult, }; -use crate::services::tdlib_v8::{qjs_ops, IdbStorage}; +use crate::services::quickjs_libs::{qjs_ops, IdbStorage}; /// Dependencies passed to a skill instance for bridge installation. #[allow(dead_code)] @@ -109,7 +109,7 @@ impl QjsSkillInstance { state.write().status = SkillStatus::Initializing; // Create storage - let storage = match IdbStorage::new(&data_dir) { + let storage: IdbStorage = match IdbStorage::new(&data_dir) { Ok(s) => s, Err(e) => { let mut s = state.write(); @@ -191,7 +191,7 @@ impl QjsSkillInstance { } // Load bootstrap - let bootstrap_code = include_str!("../services/tdlib_v8/bootstrap.js"); + let bootstrap_code = include_str!("../services/quickjs-libs/bootstrap.js"); if let Err(e) = js_ctx.eval::(bootstrap_code) { let detail = format_js_exception(&js_ctx, &e); return Err(format!("Bootstrap failed: {detail}")); diff --git a/src-tauri/src/services/mod.rs b/src-tauri/src/services/mod.rs index a049eb28f..790558885 100644 --- a/src-tauri/src/services/mod.rs +++ b/src-tauri/src/services/mod.rs @@ -5,7 +5,8 @@ pub mod socket_service; #[cfg(not(any(target_os = "android", target_os = "ios")))] pub mod tdlib; #[cfg(not(any(target_os = "android", target_os = "ios")))] -pub mod tdlib_v8; +#[path = "quickjs-libs/mod.rs"] +pub mod quickjs_libs; #[cfg(desktop)] pub mod notification_service; diff --git a/src-tauri/src/services/tdlib_v8/bootstrap.js b/src-tauri/src/services/quickjs-libs/bootstrap.js similarity index 99% rename from src-tauri/src/services/tdlib_v8/bootstrap.js rename to src-tauri/src/services/quickjs-libs/bootstrap.js index 6bac1ddaa..480499f87 100644 --- a/src-tauri/src/services/tdlib_v8/bootstrap.js +++ b/src-tauri/src/services/quickjs-libs/bootstrap.js @@ -976,7 +976,8 @@ globalThis.tdlib = { * @returns {Promise} TDLib response object. */ send: async function (request) { - return await __ops.tdlib_send(request); + const resultJson = await __ops.tdlib_send(JSON.stringify(request)); + return JSON.parse(resultJson); }, /** @@ -985,7 +986,8 @@ globalThis.tdlib = { * @returns {Promise} Update object or null if timeout. */ receive: async function (timeoutMs = 1000) { - return await __ops.tdlib_receive(timeoutMs); + const resultJson = await __ops.tdlib_receive(timeoutMs); + return resultJson ? JSON.parse(resultJson) : null; }, /** diff --git a/src-tauri/src/services/tdlib_v8/mod.rs b/src-tauri/src/services/quickjs-libs/mod.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/mod.rs rename to src-tauri/src/services/quickjs-libs/mod.rs diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/mod.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/mod.rs similarity index 96% rename from src-tauri/src/services/tdlib_v8/qjs_ops/mod.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/mod.rs index ba6baec73..60edca54c 100644 --- a/src-tauri/src/services/tdlib_v8/qjs_ops/mod.rs +++ b/src-tauri/src/services/quickjs-libs/qjs_ops/mod.rs @@ -24,7 +24,7 @@ use parking_lot::RwLock; use rquickjs::{Ctx, Object, Result as JsResult}; use std::sync::Arc; -use crate::services::tdlib_v8::storage::IdbStorage; +use crate::services::quickjs_libs::storage::IdbStorage; use types::SkillContext as SC; /// Register all ops on `globalThis.__ops`. diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_core.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_core.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/qjs_ops/ops_core.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/ops_core.rs diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_model.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_model.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/qjs_ops/ops_model.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/ops_model.rs diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_net.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_net.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/qjs_ops/ops_net.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/ops_net.rs diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_state.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_state.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/qjs_ops/ops_state.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/ops_state.rs diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_storage.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_storage.rs similarity index 99% rename from src-tauri/src/services/tdlib_v8/qjs_ops/ops_storage.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/ops_storage.rs index 0d2466094..69f21c67b 100644 --- a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_storage.rs +++ b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_storage.rs @@ -3,7 +3,7 @@ use rquickjs::{Ctx, Function, Object}; use super::types::{js_err, SkillContext}; -use crate::services::tdlib_v8::storage::IdbStorage; +use crate::services::quickjs_libs::storage::IdbStorage; pub fn register<'js>(ctx: &Ctx<'js>, ops: &Object<'js>, storage: IdbStorage, skill_context: SkillContext) -> rquickjs::Result<()> { // ======================================================================== diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/ops_tdlib.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/ops_tdlib.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/qjs_ops/ops_tdlib.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/ops_tdlib.rs diff --git a/src-tauri/src/services/tdlib_v8/qjs_ops/types.rs b/src-tauri/src/services/quickjs-libs/qjs_ops/types.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/qjs_ops/types.rs rename to src-tauri/src/services/quickjs-libs/qjs_ops/types.rs diff --git a/src-tauri/src/services/tdlib_v8/service.rs b/src-tauri/src/services/quickjs-libs/service.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/service.rs rename to src-tauri/src/services/quickjs-libs/service.rs diff --git a/src-tauri/src/services/tdlib_v8/storage.rs b/src-tauri/src/services/quickjs-libs/storage.rs similarity index 100% rename from src-tauri/src/services/tdlib_v8/storage.rs rename to src-tauri/src/services/quickjs-libs/storage.rs