chore: remov unwanted/mobile references and update skills submodule (#45)
* refactor: remove mobile platform support and update documentation - Updated CONTRIBUTING.md and SECURITY.md to reflect the removal of Android and iOS support, focusing on desktop platforms only. - Modified AGENTS.md and MEMORY.md to clarify the platform capabilities of OpenHuman as a desktop application. - Adjusted various Rust files to eliminate references to mobile platforms, including socket management and platform detection logic. - Removed mobile-specific code from SkillsGrid and Skills components, ensuring the application is tailored for desktop usage. - Deleted unused iOS and Android assets and configurations from the Tauri project structure. * chore: remove zeroclaw mentions and mobile support paths
@@ -28,7 +28,7 @@ This project adheres to the [Contributor Covenant Code of Conduct](CODE_OF_CONDU
|
|||||||
|
|
||||||
- [Node.js](https://nodejs.org/) (LTS) and [Yarn](https://yarnpkg.com/)
|
- [Node.js](https://nodejs.org/) (LTS) and [Yarn](https://yarnpkg.com/)
|
||||||
- [Rust](https://rustup.rs/) (for Tauri and the Rust backend)
|
- [Rust](https://rustup.rs/) (for Tauri and the Rust backend)
|
||||||
- Platform-specific tools for the targets you care about (e.g., Xcode for macOS/iOS, Android SDK for Android)
|
- Platform-specific tools for the desktop targets you care about
|
||||||
|
|
||||||
### Clone and Install
|
### Clone and Install
|
||||||
|
|
||||||
@@ -44,8 +44,6 @@ Use your own fork in place of `YOUR_USERNAME` when cloning.
|
|||||||
|
|
||||||
- **Web only**: `yarn dev` (Vite dev server, typically port 1420)
|
- **Web only**: `yarn dev` (Vite dev server, typically port 1420)
|
||||||
- **Desktop (Tauri)**: `yarn tauri dev` or `yarn dev:app` for enhanced debugging
|
- **Desktop (Tauri)**: `yarn tauri dev` or `yarn dev:app` for enhanced debugging
|
||||||
- **Android**: `yarn tauri android dev`
|
|
||||||
- **iOS**: `yarn tauri ios dev`
|
|
||||||
|
|
||||||
See the main [README](README.md) and project docs for more commands (e.g., `yarn skills:build`, `yarn skills:watch`).
|
See the main [README](README.md) and project docs for more commands (e.g., `yarn skills:build`, `yarn skills:watch`).
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ We are especially interested in:
|
|||||||
- Data exfiltration or exposure (credentials, messages, user data)
|
- Data exfiltration or exposure (credentials, messages, user data)
|
||||||
- Remote code execution (frontend, Tauri/Rust backend, or skills runtime)
|
- Remote code execution (frontend, Tauri/Rust backend, or skills runtime)
|
||||||
- Issues in dependency chain (npm, Cargo) that affect our build or runtime
|
- Issues in dependency chain (npm, Cargo) that affect our build or runtime
|
||||||
- Platform-specific issues (macOS, Windows, Linux, Android, iOS) that compromise user data or device security
|
- Platform-specific issues (macOS, Windows, Linux) that compromise user data or device security
|
||||||
|
|
||||||
Out-of-scope for this process: general bugs, feature requests, and issues in third-party services we integrate with (e.g., Telegram, Notion) unless they are specific to how OpenHuman uses them.
|
Out-of-scope for this process: general bugs, feature requests, and issues in third-party services we integrate with (e.g., Telegram, Notion) unless they are specific to how OpenHuman uses them.
|
||||||
|
|
||||||
|
|||||||
@@ -79,3 +79,10 @@ Activated for workflow creation, scheduled tasks, and skill management.
|
|||||||
## PR Authoring Rule
|
## PR Authoring Rule
|
||||||
|
|
||||||
When an agent prepares or suggests pull request content, it must follow `.github/pull_request_template.md` and keep all sections/checklists intact.
|
When an agent prepares or suggests pull request content, it must follow `.github/pull_request_template.md` and keep all sections/checklists intact.
|
||||||
|
|
||||||
|
## Engineering Ownership Rules
|
||||||
|
|
||||||
|
- Prefer writing core business logic in `rust-core/`.
|
||||||
|
- Keep user interaction logic in the UI layer (`src/`), and validate user flows with UI E2E tests.
|
||||||
|
- Keep functionality validation in Rust tests for `rust-core`.
|
||||||
|
- Keep `src-tauri/` focused on command registration and bridge code only, so frontend and `rust-core` communicate reliably.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Platform Capabilities
|
## Platform Capabilities
|
||||||
|
|
||||||
OpenHuman is a cross-platform crypto community platform built with Tauri (React + Rust). It runs on Windows, macOS, Android, and iOS.
|
OpenHuman is a desktop crypto community platform built with Tauri (React + Rust). It runs on Windows, macOS, and Linux.
|
||||||
|
|
||||||
**Core features:**
|
**Core features:**
|
||||||
|
|
||||||
|
|||||||
@@ -499,7 +499,7 @@ pub fn all_integrations() -> Vec<IntegrationEntry> {
|
|||||||
},
|
},
|
||||||
IntegrationEntry {
|
IntegrationEntry {
|
||||||
name: "Apple Notes",
|
name: "Apple Notes",
|
||||||
description: "Native macOS/iOS notes",
|
description: "Native macOS notes",
|
||||||
category: IntegrationCategory::Productivity,
|
category: IntegrationCategory::Productivity,
|
||||||
status_fn: |_| IntegrationStatus::ComingSoon,
|
status_fn: |_| IntegrationStatus::ComingSoon,
|
||||||
},
|
},
|
||||||
@@ -707,18 +707,6 @@ pub fn all_integrations() -> Vec<IntegrationEntry> {
|
|||||||
category: IntegrationCategory::Platform,
|
category: IntegrationCategory::Platform,
|
||||||
status_fn: |_| IntegrationStatus::Available,
|
status_fn: |_| IntegrationStatus::Available,
|
||||||
},
|
},
|
||||||
IntegrationEntry {
|
|
||||||
name: "iOS",
|
|
||||||
description: "Chat via Telegram/Discord",
|
|
||||||
category: IntegrationCategory::Platform,
|
|
||||||
status_fn: |_| IntegrationStatus::Available,
|
|
||||||
},
|
|
||||||
IntegrationEntry {
|
|
||||||
name: "Android",
|
|
||||||
description: "Chat via Telegram/Discord",
|
|
||||||
category: IntegrationCategory::Platform,
|
|
||||||
status_fn: |_| IntegrationStatus::Available,
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ pub fn get_platform() -> &'static str {
|
|||||||
"macos" => "macos",
|
"macos" => "macos",
|
||||||
"windows" => "windows",
|
"windows" => "windows",
|
||||||
"linux" => "linux",
|
"linux" => "linux",
|
||||||
"android" => "android",
|
|
||||||
"ios" => "ios",
|
|
||||||
_ => "unknown",
|
_ => "unknown",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,9 +18,6 @@ pub fn send_notification(
|
|||||||
title: &str,
|
title: &str,
|
||||||
body: &str,
|
body: &str,
|
||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
if matches!(get_platform(), "android" | "ios") {
|
|
||||||
return Err("Notifications not available on this platform".to_string());
|
|
||||||
}
|
|
||||||
log::info!("[runtime] notification requested: {title} - {body}");
|
log::info!("[runtime] notification requested: {title} - {body}");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ pub struct SkillManifest {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub setup: Option<SkillSetup>,
|
pub setup: Option<SkillSetup>,
|
||||||
/// Platform filter. When present, only these platforms will load the skill.
|
/// Platform filter. When present, only these platforms will load the skill.
|
||||||
/// Valid values: "windows", "macos", "linux", "android", "ios".
|
/// Valid values: "windows", "macos", "linux".
|
||||||
/// When absent or empty, the skill is available on all platforms.
|
/// When absent or empty, the skill is available on all platforms.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub platforms: Option<Vec<String>>,
|
pub platforms: Option<Vec<String>>,
|
||||||
@@ -75,8 +75,6 @@ fn current_platform() -> &'static str {
|
|||||||
"windows" => "windows",
|
"windows" => "windows",
|
||||||
"macos" => "macos",
|
"macos" => "macos",
|
||||||
"linux" => "linux",
|
"linux" => "linux",
|
||||||
"android" => "android",
|
|
||||||
"ios" => "ios",
|
|
||||||
_ => "unknown",
|
_ => "unknown",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,8 +96,6 @@ pub fn register<'js>(
|
|||||||
"windows" => "windows",
|
"windows" => "windows",
|
||||||
"macos" => "macos",
|
"macos" => "macos",
|
||||||
"linux" => "linux",
|
"linux" => "linux",
|
||||||
"android" => "android",
|
|
||||||
"ios" => "ios",
|
|
||||||
_ => "unknown",
|
_ => "unknown",
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
//! - Connection state emitted to the frontend via Tauri events
|
//! - Connection state emitted to the frontend via Tauri events
|
||||||
//! - Automatic reconnection with exponential backoff
|
//! - Automatic reconnection with exponential backoff
|
||||||
//!
|
//!
|
||||||
//! Note: On Android, this is a stub. The frontend handles its own Socket.io connection.
|
//! Desktop runtime Socket.IO manager.
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ use tauri::{AppHandle, Emitter};
|
|||||||
|
|
||||||
use crate::models::socket::{ConnectionStatus, SocketState};
|
use crate::models::socket::{ConnectionStatus, SocketState};
|
||||||
|
|
||||||
// WebSocket-based Socket.IO client (desktop + iOS)
|
// WebSocket-based Socket.IO client (desktop)
|
||||||
use {
|
use {
|
||||||
futures_util::{SinkExt, StreamExt},
|
futures_util::{SinkExt, StreamExt},
|
||||||
tokio::sync::{mpsc, watch},
|
tokio::sync::{mpsc, watch},
|
||||||
@@ -53,13 +53,13 @@ struct SharedState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// WebSocket stream type alias (desktop + iOS)
|
// WebSocket stream type alias (desktop)
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
type WsStream =
|
type WsStream =
|
||||||
tokio_tungstenite::WebSocketStream<tokio_tungstenite::MaybeTlsStream<tokio::net::TcpStream>>;
|
tokio_tungstenite::WebSocketStream<tokio_tungstenite::MaybeTlsStream<tokio::net::TcpStream>>;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Connection outcome (desktop + iOS)
|
// Connection outcome (desktop)
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
enum ConnectionOutcome {
|
enum ConnectionOutcome {
|
||||||
/// Clean shutdown requested.
|
/// Clean shutdown requested.
|
||||||
@@ -122,7 +122,7 @@ impl SocketManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
// Connection lifecycle (desktop + iOS)
|
// Connection lifecycle (desktop)
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
pub async fn connect(&self, url: &str, token: &str) -> Result<(), String> {
|
pub async fn connect(&self, url: &str, token: &str) -> Result<(), String> {
|
||||||
self.disconnect().await?;
|
self.disconnect().await?;
|
||||||
@@ -220,7 +220,7 @@ impl Default for SocketManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// WebSocket Engine.IO/Socket.IO implementation (desktop + iOS)
|
// WebSocket Engine.IO/Socket.IO implementation (desktop)
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
async fn ws_loop(
|
async fn ws_loop(
|
||||||
url: String,
|
url: String,
|
||||||
|
|||||||
@@ -37,14 +37,14 @@ tauri-plugin-os = "2"
|
|||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
|
||||||
# HTTP client: rustls for cross-platform TLS (Android), native-tls for desktop skill HTTP
|
# HTTP client: rustls + native-tls for desktop skill HTTP compatibility
|
||||||
# (some APIs/CDNs use TLS configs that rustls can't negotiate — native-tls uses OS TLS stack)
|
# (some APIs/CDNs use TLS configs that rustls can't negotiate — native-tls uses OS TLS stack)
|
||||||
reqwest = { version = "0.12", default-features = false, features = ["json", "blocking", "rustls-tls", "native-tls", "stream", "http2", "multipart", "socks"] }
|
reqwest = { version = "0.12", default-features = false, features = ["json", "blocking", "rustls-tls", "native-tls", "stream", "http2", "multipart", "socks"] }
|
||||||
|
|
||||||
# Async runtime
|
# Async runtime
|
||||||
tokio = { version = "1", features = ["full", "sync"] }
|
tokio = { version = "1", features = ["full", "sync"] }
|
||||||
|
|
||||||
# keyring moved to desktop-only target section (not supported on Android/iOS)
|
# Keyring is used for desktop credential storage.
|
||||||
|
|
||||||
# Concurrency utilities
|
# Concurrency utilities
|
||||||
once_cell = "1.19"
|
once_cell = "1.19"
|
||||||
@@ -72,7 +72,7 @@ hex = "0.4"
|
|||||||
tokio-util = { version = "0.7", features = ["rt"] }
|
tokio-util = { version = "0.7", features = ["rt"] }
|
||||||
landlock = { version = "0.4", optional = true }
|
landlock = { version = "0.4", optional = true }
|
||||||
|
|
||||||
# V8 JavaScript runtime moved to desktop-only (not available on Android/iOS)
|
# V8 JavaScript runtime is desktop-only in this host.
|
||||||
|
|
||||||
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] }
|
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] }
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ cron = "0.12"
|
|||||||
# Stream/Sink utilities for WebSocket and HTTP streaming
|
# Stream/Sink utilities for WebSocket and HTTP streaming
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
|
|
||||||
# Android uses a simpler approach - no persistent Socket.io (use web socket from frontend)
|
# Socket manager is persistent in the desktop host.
|
||||||
|
|
||||||
# OpenHuman config + observability
|
# OpenHuman config + observability
|
||||||
directories = "6"
|
directories = "6"
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
xcuserdata/
|
|
||||||
build/
|
|
||||||
Externals/
|
|
||||||
|
Before Width: | Height: | Size: 612 B |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 984 B |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
@@ -1,116 +0,0 @@
|
|||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-20x20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-20x20@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-29x29@2x-1.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-29x29@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-40x40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-40x40@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-60x60@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "AppIcon-60x60@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-20x20@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-20x20@2x-1.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-29x29@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-29x29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-40x40@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-40x40@2x-1.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-76x76@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-76x76@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "83.5x83.5",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "AppIcon-83.5x83.5@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "1024x1024",
|
|
||||||
"idiom" : "ios-marketing",
|
|
||||||
"filename" : "AppIcon-512@2x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>method</key>
|
|
||||||
<string>debugging</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17150" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Y6W-OH-hqX">
|
|
||||||
<dependencies>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17122"/>
|
|
||||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
|
||||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<scenes>
|
|
||||||
<!--View Controller-->
|
|
||||||
<scene sceneID="s0d-6b-0kx">
|
|
||||||
<objects>
|
|
||||||
<viewController id="Y6W-OH-hqX" sceneMemberID="viewController">
|
|
||||||
<view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
|
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
|
||||||
</view>
|
|
||||||
</viewController>
|
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
|
||||||
</objects>
|
|
||||||
</scene>
|
|
||||||
</scenes>
|
|
||||||
<resources>
|
|
||||||
<systemColor name="systemBackgroundColor">
|
|
||||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
|
||||||
</systemColor>
|
|
||||||
</resources>
|
|
||||||
</document>
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# Uncomment the next line to define a global platform for your project
|
|
||||||
|
|
||||||
target 'tauri-app_iOS' do
|
|
||||||
platform :ios, '14.0'
|
|
||||||
# Pods for tauri-app_iOS
|
|
||||||
end
|
|
||||||
|
|
||||||
target 'tauri-app_macOS' do
|
|
||||||
platform :osx, '11.0'
|
|
||||||
# Pods for tauri-app_macOS
|
|
||||||
end
|
|
||||||
|
|
||||||
# Delete the deployment target for iOS and macOS, causing it to be inherited from the Podfile
|
|
||||||
post_install do |installer|
|
|
||||||
installer.pods_project.targets.each do |target|
|
|
||||||
target.build_configurations.each do |config|
|
|
||||||
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
|
|
||||||
config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace ffi {
|
|
||||||
extern "C" {
|
|
||||||
void start_app();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#include "bindings/bindings.h"
|
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
|
||||||
ffi::start_app();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
name: tauri-app
|
|
||||||
options:
|
|
||||||
bundleIdPrefix: com.openhuman.app
|
|
||||||
deploymentTarget:
|
|
||||||
iOS: 14.0
|
|
||||||
fileGroups: [../../src]
|
|
||||||
configs:
|
|
||||||
debug: debug
|
|
||||||
release: release
|
|
||||||
settingGroups:
|
|
||||||
app:
|
|
||||||
base:
|
|
||||||
PRODUCT_NAME: tauri-app
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER: com.openhuman.app
|
|
||||||
targetTemplates:
|
|
||||||
app:
|
|
||||||
type: application
|
|
||||||
sources:
|
|
||||||
- path: Sources
|
|
||||||
scheme:
|
|
||||||
environmentVariables:
|
|
||||||
RUST_BACKTRACE: full
|
|
||||||
RUST_LOG: info
|
|
||||||
settings:
|
|
||||||
groups: [app]
|
|
||||||
targets:
|
|
||||||
tauri-app_iOS:
|
|
||||||
type: application
|
|
||||||
platform: iOS
|
|
||||||
sources:
|
|
||||||
- path: Sources
|
|
||||||
- path: Assets.xcassets
|
|
||||||
- path: Externals
|
|
||||||
- path: tauri-app_iOS
|
|
||||||
- path: assets
|
|
||||||
buildPhase: resources
|
|
||||||
type: folder
|
|
||||||
- path: LaunchScreen.storyboard
|
|
||||||
info:
|
|
||||||
path: tauri-app_iOS/Info.plist
|
|
||||||
properties:
|
|
||||||
LSRequiresIPhoneOS: true
|
|
||||||
UILaunchStoryboardName: LaunchScreen
|
|
||||||
UIRequiredDeviceCapabilities: [arm64, metal]
|
|
||||||
UISupportedInterfaceOrientations:
|
|
||||||
- UIInterfaceOrientationPortrait
|
|
||||||
- UIInterfaceOrientationLandscapeLeft
|
|
||||||
- UIInterfaceOrientationLandscapeRight
|
|
||||||
UISupportedInterfaceOrientations~ipad:
|
|
||||||
- UIInterfaceOrientationPortrait
|
|
||||||
- UIInterfaceOrientationPortraitUpsideDown
|
|
||||||
- UIInterfaceOrientationLandscapeLeft
|
|
||||||
- UIInterfaceOrientationLandscapeRight
|
|
||||||
CFBundleShortVersionString: 0.1.0
|
|
||||||
CFBundleVersion: "0.1.0"
|
|
||||||
entitlements:
|
|
||||||
path: tauri-app_iOS/tauri-app_iOS.entitlements
|
|
||||||
scheme:
|
|
||||||
environmentVariables:
|
|
||||||
RUST_BACKTRACE: full
|
|
||||||
RUST_LOG: info
|
|
||||||
settings:
|
|
||||||
base:
|
|
||||||
ENABLE_BITCODE: false
|
|
||||||
ARCHS: [arm64]
|
|
||||||
VALID_ARCHS: arm64
|
|
||||||
LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
|
|
||||||
LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
|
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true
|
|
||||||
EXCLUDED_ARCHS[sdk=iphoneos*]: x86_64
|
|
||||||
groups: [app]
|
|
||||||
dependencies:
|
|
||||||
- framework: libapp.a
|
|
||||||
embed: false
|
|
||||||
- sdk: CoreGraphics.framework
|
|
||||||
- sdk: Metal.framework
|
|
||||||
- sdk: MetalKit.framework
|
|
||||||
- sdk: QuartzCore.framework
|
|
||||||
- sdk: Security.framework
|
|
||||||
- sdk: UIKit.framework
|
|
||||||
- sdk: WebKit.framework
|
|
||||||
preBuildScripts:
|
|
||||||
- script: npm run -- tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths "${FRAMEWORK_SEARCH_PATHS:?}" --header-search-paths "${HEADER_SEARCH_PATHS:?}" --gcc-preprocessor-definitions "${GCC_PREPROCESSOR_DEFINITIONS:-}" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}
|
|
||||||
name: Build Rust Code
|
|
||||||
basedOnDependencyAnalysis: false
|
|
||||||
outputFiles:
|
|
||||||
- $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a
|
|
||||||
- $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a
|
|
||||||
@@ -1,458 +0,0 @@
|
|||||||
// !$*UTF8*$!
|
|
||||||
{
|
|
||||||
archiveVersion = 1;
|
|
||||||
classes = {
|
|
||||||
};
|
|
||||||
objectVersion = 77;
|
|
||||||
objects = {
|
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
|
||||||
094A1ECD90ECD007825D95B3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E625C1ABDB2D39CB77BF29 /* Security.framework */; };
|
|
||||||
1524BBF419A24C289873FCE0 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA1A066F7EDD869BC014BB9C /* Metal.framework */; };
|
|
||||||
5DCFDCE0989E0655641185BE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BA38F7BF7C28E04DBA849965 /* LaunchScreen.storyboard */; };
|
|
||||||
5DDC8F8949AE56AB4B683F62 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5384EE0C649F19A31B462538 /* QuartzCore.framework */; };
|
|
||||||
6495EEEF2DFC12CB82351B2B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C42C09CE350D0304EDF85C59 /* UIKit.framework */; };
|
|
||||||
7425A66C523CC66EFF87A16E /* libapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 46600E42EDBD4E2F9CFFB94E /* libapp.a */; };
|
|
||||||
74C25A7912AFE30DBE96B590 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 234C7D371C7B526F7E893B15 /* assets */; };
|
|
||||||
7A50F9841502955D69915755 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8DBF813DB5FCB214283D94D /* MetalKit.framework */; };
|
|
||||||
7E5D9DF6134425B5314935DE /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A66A4769E0B428DFFE16 /* main.mm */; };
|
|
||||||
824033B5A7F94F13A4C63E6E /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF0F15D9837DA9743995496A /* WebKit.framework */; };
|
|
||||||
8A272DD02B0D36ACBCE73E26 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CFDCAF660F4CA93110C8FB02 /* Assets.xcassets */; };
|
|
||||||
CA00951E60FA3594F396EEEC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC56A11F310BBFF30CCFEB63 /* CoreGraphics.framework */; };
|
|
||||||
/* End PBXBuildFile section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
|
||||||
234C7D371C7B526F7E893B15 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
|
|
||||||
415CE9B61EE711FB11882F1B /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
|
|
||||||
46600E42EDBD4E2F9CFFB94E /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; };
|
|
||||||
5384EE0C649F19A31B462538 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
|
||||||
6B62CCFCDED0CBE851A51E4F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
|
||||||
75C0A66A4769E0B428DFFE16 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
|
|
||||||
7A62F8DA3ACF6DA66CB9785D /* tauri-app_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "tauri-app_iOS.entitlements"; sourceTree = "<group>"; };
|
|
||||||
84E625C1ABDB2D39CB77BF29 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
|
|
||||||
9B11C2C873FB5A7B97B0605A /* tauri-app_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "tauri-app_iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
AC56A11F310BBFF30CCFEB63 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
|
||||||
B8DBF813DB5FCB214283D94D /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
|
|
||||||
BA38F7BF7C28E04DBA849965 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
|
||||||
C42C09CE350D0304EDF85C59 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
|
||||||
CA1A066F7EDD869BC014BB9C /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
|
|
||||||
CF0F15D9837DA9743995496A /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
|
||||||
CFDCAF660F4CA93110C8FB02 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
|
||||||
D96C5A0C6EF1CFC067A1C008 /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; };
|
|
||||||
E486419C84C58B66E0FC1383 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
|
||||||
6EEA0490763EB982F7701E3D /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
7425A66C523CC66EFF87A16E /* libapp.a in Frameworks */,
|
|
||||||
CA00951E60FA3594F396EEEC /* CoreGraphics.framework in Frameworks */,
|
|
||||||
1524BBF419A24C289873FCE0 /* Metal.framework in Frameworks */,
|
|
||||||
7A50F9841502955D69915755 /* MetalKit.framework in Frameworks */,
|
|
||||||
5DDC8F8949AE56AB4B683F62 /* QuartzCore.framework in Frameworks */,
|
|
||||||
094A1ECD90ECD007825D95B3 /* Security.framework in Frameworks */,
|
|
||||||
6495EEEF2DFC12CB82351B2B /* UIKit.framework in Frameworks */,
|
|
||||||
824033B5A7F94F13A4C63E6E /* WebKit.framework in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXFrameworksBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
|
||||||
2ECFA35AFF2D5945783C3B8D /* Externals */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
);
|
|
||||||
path = Externals;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
4261FD71066ABB203F1B3741 /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
9B11C2C873FB5A7B97B0605A /* tauri-app_iOS.app */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
48DF3F622809E7EBA4ED342A /* src */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
E486419C84C58B66E0FC1383 /* lib.rs */,
|
|
||||||
D96C5A0C6EF1CFC067A1C008 /* main.rs */,
|
|
||||||
);
|
|
||||||
name = src;
|
|
||||||
path = ../../src;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
5FCA5E244F4BE4C93672F978 /* bindings */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
415CE9B61EE711FB11882F1B /* bindings.h */,
|
|
||||||
);
|
|
||||||
path = bindings;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
86E4D2974D6FC803E43026BD /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
AC56A11F310BBFF30CCFEB63 /* CoreGraphics.framework */,
|
|
||||||
46600E42EDBD4E2F9CFFB94E /* libapp.a */,
|
|
||||||
CA1A066F7EDD869BC014BB9C /* Metal.framework */,
|
|
||||||
B8DBF813DB5FCB214283D94D /* MetalKit.framework */,
|
|
||||||
5384EE0C649F19A31B462538 /* QuartzCore.framework */,
|
|
||||||
84E625C1ABDB2D39CB77BF29 /* Security.framework */,
|
|
||||||
C42C09CE350D0304EDF85C59 /* UIKit.framework */,
|
|
||||||
CF0F15D9837DA9743995496A /* WebKit.framework */,
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
90B7B06659AD5A7A7EE39662 /* Sources */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
9A6A58EE8A3E239B0E7BDD81 /* tauri-app */,
|
|
||||||
);
|
|
||||||
path = Sources;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
9A6A58EE8A3E239B0E7BDD81 /* tauri-app */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
75C0A66A4769E0B428DFFE16 /* main.mm */,
|
|
||||||
5FCA5E244F4BE4C93672F978 /* bindings */,
|
|
||||||
);
|
|
||||||
path = "tauri-app";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A17B869C1C261C5F8DF765C9 /* tauri-app_iOS */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
6B62CCFCDED0CBE851A51E4F /* Info.plist */,
|
|
||||||
7A62F8DA3ACF6DA66CB9785D /* tauri-app_iOS.entitlements */,
|
|
||||||
);
|
|
||||||
path = "tauri-app_iOS";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
E8C7C60131D2B902F3255A8F = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
234C7D371C7B526F7E893B15 /* assets */,
|
|
||||||
CFDCAF660F4CA93110C8FB02 /* Assets.xcassets */,
|
|
||||||
BA38F7BF7C28E04DBA849965 /* LaunchScreen.storyboard */,
|
|
||||||
2ECFA35AFF2D5945783C3B8D /* Externals */,
|
|
||||||
90B7B06659AD5A7A7EE39662 /* Sources */,
|
|
||||||
48DF3F622809E7EBA4ED342A /* src */,
|
|
||||||
A17B869C1C261C5F8DF765C9 /* tauri-app_iOS */,
|
|
||||||
86E4D2974D6FC803E43026BD /* Frameworks */,
|
|
||||||
4261FD71066ABB203F1B3741 /* Products */,
|
|
||||||
);
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
|
||||||
067C19C8047A2326EE93616E /* tauri-app_iOS */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = 492FB4942D220065AF299C12 /* Build configuration list for PBXNativeTarget "tauri-app_iOS" */;
|
|
||||||
buildPhases = (
|
|
||||||
4CFF21EFA1FFE4D2AB9D6998 /* Build Rust Code */,
|
|
||||||
D8D571D7BDCA1ABF2E0CB9D6 /* Sources */,
|
|
||||||
A4D85C1726744E26D8F01FD3 /* Resources */,
|
|
||||||
6EEA0490763EB982F7701E3D /* Frameworks */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = "tauri-app_iOS";
|
|
||||||
packageProductDependencies = (
|
|
||||||
);
|
|
||||||
productName = "tauri-app_iOS";
|
|
||||||
productReference = 9B11C2C873FB5A7B97B0605A /* tauri-app_iOS.app */;
|
|
||||||
productType = "com.apple.product-type.application";
|
|
||||||
};
|
|
||||||
/* End PBXNativeTarget section */
|
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
|
||||||
90D4CFD39CFBBAA5E9883AD5 /* Project object */ = {
|
|
||||||
isa = PBXProject;
|
|
||||||
attributes = {
|
|
||||||
BuildIndependentTargetsInParallel = YES;
|
|
||||||
LastUpgradeCheck = 1430;
|
|
||||||
};
|
|
||||||
buildConfigurationList = 15AD1887792B155C6905ADD6 /* Build configuration list for PBXProject "tauri-app" */;
|
|
||||||
compatibilityVersion = "Xcode 14.0";
|
|
||||||
developmentRegion = en;
|
|
||||||
hasScannedForEncodings = 0;
|
|
||||||
knownRegions = (
|
|
||||||
Base,
|
|
||||||
en,
|
|
||||||
);
|
|
||||||
mainGroup = E8C7C60131D2B902F3255A8F;
|
|
||||||
minimizedProjectReferenceProxies = 1;
|
|
||||||
preferredProjectObjectVersion = 77;
|
|
||||||
projectDirPath = "";
|
|
||||||
projectRoot = "";
|
|
||||||
targets = (
|
|
||||||
067C19C8047A2326EE93616E /* tauri-app_iOS */,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
/* End PBXProject section */
|
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */
|
|
||||||
A4D85C1726744E26D8F01FD3 /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
8A272DD02B0D36ACBCE73E26 /* Assets.xcassets in Resources */,
|
|
||||||
5DCFDCE0989E0655641185BE /* LaunchScreen.storyboard in Resources */,
|
|
||||||
74C25A7912AFE30DBE96B590 /* assets in Resources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXResourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
|
||||||
4CFF21EFA1FFE4D2AB9D6998 /* Build Rust Code */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
alwaysOutOfDate = 1;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Build Rust Code";
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
"$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a",
|
|
||||||
"$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "npm run -- tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}";
|
|
||||||
};
|
|
||||||
/* End PBXShellScriptBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
|
||||||
D8D571D7BDCA1ABF2E0CB9D6 /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
7E5D9DF6134425B5314935DE /* main.mm in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXSourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
|
||||||
421E0640619ED5B0C0B13B4E /* debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
||||||
ARCHS = (
|
|
||||||
arm64,
|
|
||||||
);
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
||||||
CODE_SIGN_ENTITLEMENTS = "tauri-app_iOS/tauri-app_iOS.entitlements";
|
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
||||||
ENABLE_BITCODE = NO;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\".\"",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = "tauri-app_iOS/Info.plist";
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"@executable_path/Frameworks",
|
|
||||||
);
|
|
||||||
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
|
||||||
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.openhuman.app";
|
|
||||||
PRODUCT_NAME = "tauri-app";
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
VALID_ARCHS = arm64;
|
|
||||||
};
|
|
||||||
name = debug;
|
|
||||||
};
|
|
||||||
62330632B84ED41E941EFCF6 /* release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
||||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_COMMA = YES;
|
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
|
||||||
MTL_FAST_MATH = YES;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
SWIFT_COMPILATION_MODE = wholemodule;
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
};
|
|
||||||
name = release;
|
|
||||||
};
|
|
||||||
62D98D8CE88586901FBBF6C0 /* debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
||||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_COMMA = YES;
|
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
||||||
ENABLE_TESTABILITY = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"DEBUG=1",
|
|
||||||
);
|
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
|
||||||
MTL_FAST_MATH = YES;
|
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
};
|
|
||||||
name = debug;
|
|
||||||
};
|
|
||||||
D2A4FF1B078298AC78D0EBD3 /* release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
||||||
ARCHS = (
|
|
||||||
arm64,
|
|
||||||
);
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
||||||
CODE_SIGN_ENTITLEMENTS = "tauri-app_iOS/tauri-app_iOS.entitlements";
|
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
||||||
ENABLE_BITCODE = NO;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\".\"",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = "tauri-app_iOS/Info.plist";
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"@executable_path/Frameworks",
|
|
||||||
);
|
|
||||||
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
|
||||||
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.openhuman.app";
|
|
||||||
PRODUCT_NAME = "tauri-app";
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
VALID_ARCHS = arm64;
|
|
||||||
};
|
|
||||||
name = release;
|
|
||||||
};
|
|
||||||
/* End XCBuildConfiguration section */
|
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
|
||||||
15AD1887792B155C6905ADD6 /* Build configuration list for PBXProject "tauri-app" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
62D98D8CE88586901FBBF6C0 /* debug */,
|
|
||||||
62330632B84ED41E941EFCF6 /* release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = debug;
|
|
||||||
};
|
|
||||||
492FB4942D220065AF299C12 /* Build configuration list for PBXNativeTarget "tauri-app_iOS" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
421E0640619ED5B0C0B13B4E /* debug */,
|
|
||||||
D2A4FF1B078298AC78D0EBD3 /* release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = debug;
|
|
||||||
};
|
|
||||||
/* End XCConfigurationList section */
|
|
||||||
};
|
|
||||||
rootObject = 90D4CFD39CFBBAA5E9883AD5 /* Project object */;
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>BuildSystemType</key>
|
|
||||||
<string>Original</string>
|
|
||||||
<key>DisableBuildSystemDeprecationDiagnostic</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Scheme
|
|
||||||
LastUpgradeVersion = "1430"
|
|
||||||
version = "1.7">
|
|
||||||
<BuildAction
|
|
||||||
parallelizeBuildables = "YES"
|
|
||||||
buildImplicitDependencies = "YES"
|
|
||||||
runPostActionsOnFailure = "NO">
|
|
||||||
<BuildActionEntries>
|
|
||||||
<BuildActionEntry
|
|
||||||
buildForTesting = "YES"
|
|
||||||
buildForRunning = "YES"
|
|
||||||
buildForProfiling = "YES"
|
|
||||||
buildForArchiving = "YES"
|
|
||||||
buildForAnalyzing = "YES">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "067C19C8047A2326EE93616E"
|
|
||||||
BuildableName = "tauri-app_iOS.app"
|
|
||||||
BlueprintName = "tauri-app_iOS"
|
|
||||||
ReferencedContainer = "container:tauri-app.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildActionEntry>
|
|
||||||
</BuildActionEntries>
|
|
||||||
</BuildAction>
|
|
||||||
<TestAction
|
|
||||||
buildConfiguration = "debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "NO"
|
|
||||||
onlyGenerateCoverageForSpecifiedTargets = "NO">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "067C19C8047A2326EE93616E"
|
|
||||||
BuildableName = "tauri-app_iOS.app"
|
|
||||||
BlueprintName = "tauri-app_iOS"
|
|
||||||
ReferencedContainer = "container:tauri-app.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<Testables>
|
|
||||||
</Testables>
|
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<EnvironmentVariables>
|
|
||||||
<EnvironmentVariable
|
|
||||||
key = "RUST_BACKTRACE"
|
|
||||||
value = "full"
|
|
||||||
isEnabled = "YES">
|
|
||||||
</EnvironmentVariable>
|
|
||||||
<EnvironmentVariable
|
|
||||||
key = "RUST_LOG"
|
|
||||||
value = "info"
|
|
||||||
isEnabled = "YES">
|
|
||||||
</EnvironmentVariable>
|
|
||||||
</EnvironmentVariables>
|
|
||||||
</TestAction>
|
|
||||||
<LaunchAction
|
|
||||||
buildConfiguration = "debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
launchStyle = "0"
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
|
||||||
debugDocumentVersioning = "YES"
|
|
||||||
debugServiceExtension = "internal"
|
|
||||||
allowLocationSimulation = "YES">
|
|
||||||
<BuildableProductRunnable
|
|
||||||
runnableDebuggingMode = "0">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "067C19C8047A2326EE93616E"
|
|
||||||
BuildableName = "tauri-app_iOS.app"
|
|
||||||
BlueprintName = "tauri-app_iOS"
|
|
||||||
ReferencedContainer = "container:tauri-app.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildableProductRunnable>
|
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<EnvironmentVariables>
|
|
||||||
<EnvironmentVariable
|
|
||||||
key = "RUST_BACKTRACE"
|
|
||||||
value = "full"
|
|
||||||
isEnabled = "YES">
|
|
||||||
</EnvironmentVariable>
|
|
||||||
<EnvironmentVariable
|
|
||||||
key = "RUST_LOG"
|
|
||||||
value = "info"
|
|
||||||
isEnabled = "YES">
|
|
||||||
</EnvironmentVariable>
|
|
||||||
</EnvironmentVariables>
|
|
||||||
</LaunchAction>
|
|
||||||
<ProfileAction
|
|
||||||
buildConfiguration = "release"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "NO"
|
|
||||||
savedToolIdentifier = ""
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
debugDocumentVersioning = "YES">
|
|
||||||
<BuildableProductRunnable
|
|
||||||
runnableDebuggingMode = "0">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "067C19C8047A2326EE93616E"
|
|
||||||
BuildableName = "tauri-app_iOS.app"
|
|
||||||
BlueprintName = "tauri-app_iOS"
|
|
||||||
ReferencedContainer = "container:tauri-app.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildableProductRunnable>
|
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<EnvironmentVariables>
|
|
||||||
<EnvironmentVariable
|
|
||||||
key = "RUST_BACKTRACE"
|
|
||||||
value = "full"
|
|
||||||
isEnabled = "YES">
|
|
||||||
</EnvironmentVariable>
|
|
||||||
<EnvironmentVariable
|
|
||||||
key = "RUST_LOG"
|
|
||||||
value = "info"
|
|
||||||
isEnabled = "YES">
|
|
||||||
</EnvironmentVariable>
|
|
||||||
</EnvironmentVariables>
|
|
||||||
</ProfileAction>
|
|
||||||
<AnalyzeAction
|
|
||||||
buildConfiguration = "debug">
|
|
||||||
</AnalyzeAction>
|
|
||||||
<ArchiveAction
|
|
||||||
buildConfiguration = "release"
|
|
||||||
revealArchiveInOrganizer = "YES">
|
|
||||||
</ArchiveAction>
|
|
||||||
</Scheme>
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>0.1.0</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>0.1.0</string>
|
|
||||||
<key>LSRequiresIPhoneOS</key>
|
|
||||||
<true/>
|
|
||||||
<key>UILaunchStoryboardName</key>
|
|
||||||
<string>LaunchScreen</string>
|
|
||||||
<key>UIRequiredDeviceCapabilities</key>
|
|
||||||
<array>
|
|
||||||
<string>arm64</string>
|
|
||||||
<string>metal</string>
|
|
||||||
</array>
|
|
||||||
<key>UISupportedInterfaceOrientations</key>
|
|
||||||
<array>
|
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
|
||||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
|
||||||
<array>
|
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
|
||||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict/>
|
|
||||||
</plist>
|
|
||||||
@@ -17,25 +17,25 @@ use crate::runtime::qjs_engine::RuntimeEngine;
|
|||||||
use crate::runtime::types::{SkillSnapshot, ToolResult};
|
use crate::runtime::types::{SkillSnapshot, ToolResult};
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// ZeroClaw Format Compatibility Types
|
// OpenClaw Format Compatibility Types
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct ZeroClawToolSchema {
|
pub struct OpenClawToolSchema {
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
pub type_field: String,
|
pub type_field: String,
|
||||||
pub function: ZeroClawFunction,
|
pub function: OpenClawFunction,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct ZeroClawFunction {
|
pub struct OpenClawFunction {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub description: String,
|
pub description: String,
|
||||||
pub parameters: serde_json::Value,
|
pub parameters: serde_json::Value,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct ZeroClawToolResult {
|
pub struct OpenClawToolResult {
|
||||||
pub success: bool,
|
pub success: bool,
|
||||||
pub output: String,
|
pub output: String,
|
||||||
pub error: Option<String>,
|
pub error: Option<String>,
|
||||||
@@ -260,16 +260,16 @@ mod desktop {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// ZeroClaw Format Compatibility Commands
|
// OpenClaw Format Compatibility Commands
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
/// Generate ZeroClaw-compatible tool schemas from all available QuickJS tools.
|
/// Generate OpenClaw-compatible tool schemas from all available QuickJS tools.
|
||||||
/// This bridges the gap between QuickJS runtime and OpenAI function calling format.
|
/// This bridges the gap between QuickJS runtime and OpenAI function calling format.
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn runtime_get_tool_schemas(
|
pub async fn runtime_get_tool_schemas(
|
||||||
engine: State<'_, Arc<RuntimeEngine>>,
|
engine: State<'_, Arc<RuntimeEngine>>,
|
||||||
) -> Result<Vec<ZeroClawToolSchema>, String> {
|
) -> Result<Vec<OpenClawToolSchema>, String> {
|
||||||
log::info!("🔧 [RUNTIME] Generating ZeroClaw-compatible tool schemas");
|
log::info!("🔧 [RUNTIME] Generating OpenClaw-compatible tool schemas");
|
||||||
|
|
||||||
let tools = engine.all_tools();
|
let tools = engine.all_tools();
|
||||||
log::info!("🔧 [RUNTIME] Found {} tools from engine", tools.len());
|
log::info!("🔧 [RUNTIME] Found {} tools from engine", tools.len());
|
||||||
@@ -290,9 +290,9 @@ mod desktop {
|
|||||||
// Convert input schema to OpenAI-compatible format
|
// Convert input schema to OpenAI-compatible format
|
||||||
let openai_parameters = convert_to_openai_schema(tool.input_schema)?;
|
let openai_parameters = convert_to_openai_schema(tool.input_schema)?;
|
||||||
|
|
||||||
let schema = ZeroClawToolSchema {
|
let schema = OpenClawToolSchema {
|
||||||
type_field: "function".to_string(),
|
type_field: "function".to_string(),
|
||||||
function: ZeroClawFunction {
|
function: OpenClawFunction {
|
||||||
name: tool_name,
|
name: tool_name,
|
||||||
description,
|
description,
|
||||||
parameters: openai_parameters,
|
parameters: openai_parameters,
|
||||||
@@ -303,7 +303,7 @@ mod desktop {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log::info!(
|
log::info!(
|
||||||
"🔧 [RUNTIME] Generated {} ZeroClaw tool schemas",
|
"🔧 [RUNTIME] Generated {} OpenClaw tool schemas",
|
||||||
schemas.len()
|
schemas.len()
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -324,17 +324,17 @@ mod desktop {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Execute a specific tool based on agent decision with enhanced validation.
|
/// Execute a specific tool based on agent decision with enhanced validation.
|
||||||
/// This wraps the existing runtime_call_tool with ZeroClaw format compatibility.
|
/// This wraps the existing runtime_call_tool with OpenClaw format compatibility.
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn runtime_execute_tool(
|
pub async fn runtime_execute_tool(
|
||||||
engine: State<'_, Arc<RuntimeEngine>>,
|
engine: State<'_, Arc<RuntimeEngine>>,
|
||||||
tool_id: String,
|
tool_id: String,
|
||||||
args: serde_json::Value,
|
args: serde_json::Value,
|
||||||
) -> Result<ZeroClawToolResult, String> {
|
) -> Result<OpenClawToolResult, String> {
|
||||||
let start_time = std::time::Instant::now();
|
let start_time = std::time::Instant::now();
|
||||||
|
|
||||||
log::info!(
|
log::info!(
|
||||||
"🔧 [RUNTIME] Executing ZeroClaw tool: {} with args: {}",
|
"🔧 [RUNTIME] Executing OpenClaw tool: {} with args: {}",
|
||||||
tool_id,
|
tool_id,
|
||||||
args
|
args
|
||||||
);
|
);
|
||||||
@@ -352,7 +352,7 @@ mod desktop {
|
|||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("🔧 [RUNTIME] Failed to parse tool_id '{}': {}", tool_id, e);
|
log::error!("🔧 [RUNTIME] Failed to parse tool_id '{}': {}", tool_id, e);
|
||||||
let execution_time = start_time.elapsed().as_millis() as u64;
|
let execution_time = start_time.elapsed().as_millis() as u64;
|
||||||
return Ok(ZeroClawToolResult {
|
return Ok(OpenClawToolResult {
|
||||||
success: false,
|
success: false,
|
||||||
output: String::new(),
|
output: String::new(),
|
||||||
error: Some(format!("Invalid tool ID format: {}", e)),
|
error: Some(format!("Invalid tool ID format: {}", e)),
|
||||||
@@ -421,7 +421,7 @@ mod desktop {
|
|||||||
error_message
|
error_message
|
||||||
);
|
);
|
||||||
|
|
||||||
Ok(ZeroClawToolResult {
|
Ok(OpenClawToolResult {
|
||||||
success: false,
|
success: false,
|
||||||
output: String::new(),
|
output: String::new(),
|
||||||
error: Some(error_message),
|
error: Some(error_message),
|
||||||
@@ -441,9 +441,9 @@ mod desktop {
|
|||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
log::info!("ZeroClaw tool execution completed in {}ms", execution_time);
|
log::info!("OpenClaw tool execution completed in {}ms", execution_time);
|
||||||
|
|
||||||
Ok(ZeroClawToolResult {
|
Ok(OpenClawToolResult {
|
||||||
success: true,
|
success: true,
|
||||||
output,
|
output,
|
||||||
error: None,
|
error: None,
|
||||||
@@ -455,7 +455,7 @@ mod desktop {
|
|||||||
let execution_time = start_time.elapsed().as_millis() as u64;
|
let execution_time = start_time.elapsed().as_millis() as u64;
|
||||||
log::error!("🔧 [RUNTIME] Engine call_tool failed: {}", e);
|
log::error!("🔧 [RUNTIME] Engine call_tool failed: {}", e);
|
||||||
|
|
||||||
Ok(ZeroClawToolResult {
|
Ok(OpenClawToolResult {
|
||||||
success: false,
|
success: false,
|
||||||
output: String::new(),
|
output: String::new(),
|
||||||
error: Some(e),
|
error: Some(e),
|
||||||
@@ -571,9 +571,9 @@ mod tests {
|
|||||||
// In a real test environment, you would mock the engine or use a test instance
|
// In a real test environment, you would mock the engine or use a test instance
|
||||||
|
|
||||||
// For now, we'll test the struct format and serialization
|
// For now, we'll test the struct format and serialization
|
||||||
let schema = ZeroClawToolSchema {
|
let schema = OpenClawToolSchema {
|
||||||
type_field: "function".to_string(),
|
type_field: "function".to_string(),
|
||||||
function: ZeroClawFunction {
|
function: OpenClawFunction {
|
||||||
name: "test_tool".to_string(),
|
name: "test_tool".to_string(),
|
||||||
description: "A test tool".to_string(),
|
description: "A test tool".to_string(),
|
||||||
parameters: serde_json::json!({
|
parameters: serde_json::json!({
|
||||||
@@ -596,15 +596,15 @@ mod tests {
|
|||||||
assert!(json.contains("A test tool"));
|
assert!(json.contains("A test tool"));
|
||||||
|
|
||||||
// Test deserialization
|
// Test deserialization
|
||||||
let deserialized: ZeroClawToolSchema =
|
let deserialized: OpenClawToolSchema =
|
||||||
serde_json::from_str(&json).expect("Should deserialize from JSON");
|
serde_json::from_str(&json).expect("Should deserialize from JSON");
|
||||||
assert_eq!(deserialized.type_field, "function");
|
assert_eq!(deserialized.type_field, "function");
|
||||||
assert_eq!(deserialized.function.name, "test_tool");
|
assert_eq!(deserialized.function.name, "test_tool");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_zeroclaw_tool_result_format() {
|
async fn test_openclaw_tool_result_format() {
|
||||||
let result = ZeroClawToolResult {
|
let result = OpenClawToolResult {
|
||||||
success: true,
|
success: true,
|
||||||
output: "Test output".to_string(),
|
output: "Test output".to_string(),
|
||||||
error: None,
|
error: None,
|
||||||
@@ -618,7 +618,7 @@ mod tests {
|
|||||||
assert!(json.contains("1500"));
|
assert!(json.contains("1500"));
|
||||||
|
|
||||||
// Test error case
|
// Test error case
|
||||||
let error_result = ZeroClawToolResult {
|
let error_result = OpenClawToolResult {
|
||||||
success: false,
|
success: false,
|
||||||
output: String::new(),
|
output: String::new(),
|
||||||
error: Some("Tool not found".to_string()),
|
error: Some("Tool not found".to_string()),
|
||||||
@@ -702,11 +702,11 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_zeroclaw_format_compliance() {
|
fn test_openclaw_format_compliance() {
|
||||||
// Test that our ZeroClaw format matches expected OpenAI structure
|
// Test that our OpenClaw format matches expected OpenAI structure
|
||||||
let schema = ZeroClawToolSchema {
|
let schema = OpenClawToolSchema {
|
||||||
type_field: "function".to_string(),
|
type_field: "function".to_string(),
|
||||||
function: ZeroClawFunction {
|
function: OpenClawFunction {
|
||||||
name: "github_list_issues".to_string(),
|
name: "github_list_issues".to_string(),
|
||||||
description: "List GitHub issues for a repository".to_string(),
|
description: "List GitHub issues for a repository".to_string(),
|
||||||
parameters: serde_json::json!({
|
parameters: serde_json::json!({
|
||||||
@@ -740,9 +740,9 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_zeroclaw_struct_defaults() {
|
fn test_openclaw_struct_defaults() {
|
||||||
// Test that ZeroClaw structs can be created with serde_json
|
// Test that OpenClaw structs can be created with serde_json
|
||||||
let tool_schema: ZeroClawToolSchema = serde_json::from_value(serde_json::json!({
|
let tool_schema: OpenClawToolSchema = serde_json::from_value(serde_json::json!({
|
||||||
"type": "function",
|
"type": "function",
|
||||||
"function": {
|
"function": {
|
||||||
"name": "test",
|
"name": "test",
|
||||||
@@ -756,7 +756,7 @@ mod tests {
|
|||||||
assert_eq!(tool_schema.function.name, "test");
|
assert_eq!(tool_schema.function.name, "test");
|
||||||
|
|
||||||
// Test tool result
|
// Test tool result
|
||||||
let tool_result: ZeroClawToolResult = serde_json::from_value(serde_json::json!({
|
let tool_result: OpenClawToolResult = serde_json::from_value(serde_json::json!({
|
||||||
"success": true,
|
"success": true,
|
||||||
"output": "result",
|
"output": "result",
|
||||||
"error": null,
|
"error": null,
|
||||||
@@ -772,7 +772,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_error_handling_structures() {
|
fn test_error_handling_structures() {
|
||||||
// Test that error scenarios can be properly serialized
|
// Test that error scenarios can be properly serialized
|
||||||
let error_result = ZeroClawToolResult {
|
let error_result = OpenClawToolResult {
|
||||||
success: false,
|
success: false,
|
||||||
output: String::new(),
|
output: String::new(),
|
||||||
error: Some("Connection timeout".to_string()),
|
error: Some("Connection timeout".to_string()),
|
||||||
@@ -785,7 +785,7 @@ mod tests {
|
|||||||
assert!(json.contains("30000"));
|
assert!(json.contains("30000"));
|
||||||
|
|
||||||
// Test deserialization back
|
// Test deserialization back
|
||||||
let parsed: ZeroClawToolResult =
|
let parsed: OpenClawToolResult =
|
||||||
serde_json::from_str(&json).expect("Should parse error result");
|
serde_json::from_str(&json).expect("Should parse error result");
|
||||||
assert!(!parsed.success);
|
assert!(!parsed.success);
|
||||||
assert_eq!(parsed.error, Some("Connection timeout".to_string()));
|
assert_eq!(parsed.error, Some("Connection timeout".to_string()));
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
//! - Secure session storage
|
//! - Secure session storage
|
||||||
//! - Native notifications
|
//! - Native notifications
|
||||||
|
|
||||||
#[cfg(any(target_os = "android", target_os = "ios"))]
|
#[cfg(not(any(target_os = "windows", target_os = "macos", target_os = "linux")))]
|
||||||
compile_error!("src-tauri host is desktop-only. Android/iOS support has been removed.");
|
compile_error!("src-tauri host is desktop-only. Non-desktop targets are not supported.");
|
||||||
|
|
||||||
mod commands;
|
mod commands;
|
||||||
mod core_process;
|
mod core_process;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { invoke } from '@tauri-apps/api/core';
|
import { invoke } from '@tauri-apps/api/core';
|
||||||
import { platform } from '@tauri-apps/plugin-os';
|
|
||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
@@ -111,7 +110,6 @@ export default function SkillsGrid() {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [skillsList, setSkillsList] = useState<SkillListEntry[]>([]);
|
const [skillsList, setSkillsList] = useState<SkillListEntry[]>([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [isMobile, setIsMobile] = useState(false);
|
|
||||||
const [generating, setGenerating] = useState(false);
|
const [generating, setGenerating] = useState(false);
|
||||||
const [selfEvolveOpen, setSelfEvolveOpen] = useState(false);
|
const [selfEvolveOpen, setSelfEvolveOpen] = useState(false);
|
||||||
const [setupModalOpen, setSetupModalOpen] = useState(false);
|
const [setupModalOpen, setSetupModalOpen] = useState(false);
|
||||||
@@ -181,17 +179,6 @@ export default function SkillsGrid() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Detect mobile platform
|
|
||||||
const detectMobile = async () => {
|
|
||||||
try {
|
|
||||||
const currentPlatform = await platform();
|
|
||||||
setIsMobile(currentPlatform === 'android' || currentPlatform === 'ios');
|
|
||||||
} catch {
|
|
||||||
// If we can't detect platform, assume desktop
|
|
||||||
setIsMobile(false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
detectMobile();
|
|
||||||
refreshSkills();
|
refreshSkills();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -219,38 +206,6 @@ export default function SkillsGrid() {
|
|||||||
})
|
})
|
||||||
.filter(s => IS_DEV || !s.ignoreInProduction);
|
.filter(s => IS_DEV || !s.ignoreInProduction);
|
||||||
}, [skillsList, skillsState, skillStates]);
|
}, [skillsList, skillsState, skillStates]);
|
||||||
|
|
||||||
// Show mobile-only message on mobile platforms
|
|
||||||
if (!loading && isMobile) {
|
|
||||||
return (
|
|
||||||
<div className="animate-fade-up mt-4 mb-8 relative">
|
|
||||||
<h3 className="text-sm font-semibold text-white mb-3 px-1 opacity-80 text-center">
|
|
||||||
Skills
|
|
||||||
</h3>
|
|
||||||
<div className="glass rounded-xl p-4 text-center">
|
|
||||||
<div className="flex flex-col items-center gap-2">
|
|
||||||
<svg
|
|
||||||
className="w-8 h-8 text-stone-400"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
viewBox="0 0 24 24">
|
|
||||||
<path
|
|
||||||
strokeLinecap="round"
|
|
||||||
strokeLinejoin="round"
|
|
||||||
strokeWidth={1.5}
|
|
||||||
d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
<p className="text-sm text-stone-400">Skills are available on desktop only</p>
|
|
||||||
<p className="text-xs text-stone-500">
|
|
||||||
Use the desktop app to configure and run skills
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If loading or no skills on desktop, don't render
|
// If loading or no skills on desktop, don't render
|
||||||
if (loading || skillsList.length === 0) {
|
if (loading || skillsList.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
// Skill Manifest (from manifest.json)
|
// Skill Manifest (from manifest.json)
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
export type SkillPlatform = "windows" | "macos" | "linux" | "android" | "ios";
|
export type SkillPlatform = "windows" | "macos" | "linux";
|
||||||
|
|
||||||
/** Unified registry skill type discriminant. */
|
/** Unified registry skill type discriminant. */
|
||||||
export type SkillType = 'openhuman' | 'openclaw';
|
export type SkillType = 'openhuman' | 'openclaw';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { invoke } from '@tauri-apps/api/core';
|
import { invoke } from '@tauri-apps/api/core';
|
||||||
import { platform } from '@tauri-apps/plugin-os';
|
|
||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -203,17 +202,6 @@ export default function Skills() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const loadSkills = async () => {
|
const loadSkills = async () => {
|
||||||
try {
|
try {
|
||||||
// Check if mobile
|
|
||||||
try {
|
|
||||||
const p = await platform();
|
|
||||||
if (p === 'android' || p === 'ios') {
|
|
||||||
setSkillsLoading(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// not Tauri env
|
|
||||||
}
|
|
||||||
|
|
||||||
const manifests = await invoke<Array<Record<string, unknown>>>('runtime_discover_skills');
|
const manifests = await invoke<Array<Record<string, unknown>>>('runtime_discover_skills');
|
||||||
const ALLOWED_SKILLS = new Set(['gmail', 'notion']);
|
const ALLOWED_SKILLS = new Set(['gmail', 'notion']);
|
||||||
const validManifests = manifests.filter(m => {
|
const validManifests = manifests.filter(m => {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ describe('AgentToolRegistry', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('loadToolSchemas', () => {
|
describe('loadToolSchemas', () => {
|
||||||
test('should load tool schemas from Tauri using ZeroClaw format', async () => {
|
test('should load tool schemas from Tauri using OpenClaw format', async () => {
|
||||||
const mockSchemas = [
|
const mockSchemas = [
|
||||||
{
|
{
|
||||||
type: 'function',
|
type: 'function',
|
||||||
@@ -128,7 +128,7 @@ describe('AgentToolRegistry', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('executeTool', () => {
|
describe('executeTool', () => {
|
||||||
test('should execute tool using ZeroClaw format with success', async () => {
|
test('should execute tool using OpenClaw format with success', async () => {
|
||||||
const mockResult = {
|
const mockResult = {
|
||||||
success: true,
|
success: true,
|
||||||
output: '{"issues": [{"title": "Bug fix", "number": 1}]}',
|
output: '{"issues": [{"title": "Bug fix", "number": 1}]}',
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ import { invoke } from '@tauri-apps/api/core';
|
|||||||
|
|
||||||
import type { AgentToolExecution, AgentToolSchema, IAgentToolRegistry } from '../types/agent';
|
import type { AgentToolExecution, AgentToolSchema, IAgentToolRegistry } from '../types/agent';
|
||||||
|
|
||||||
// ZeroClaw format types from Rust
|
// OpenClaw format types from Rust
|
||||||
interface ZeroClawToolSchema {
|
interface OpenClawToolSchema {
|
||||||
type: string;
|
type: string;
|
||||||
function: { name: string; description: string; parameters: Record<string, unknown> };
|
function: { name: string; description: string; parameters: Record<string, unknown> };
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ZeroClawToolResult {
|
interface OpenClawToolResult {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
output: string;
|
output: string;
|
||||||
error?: string;
|
error?: string;
|
||||||
@@ -58,7 +58,7 @@ export class AgentToolRegistry implements IAgentToolRegistry {
|
|||||||
// 2. Load other tools from skill system (fallback for non-Telegram)
|
// 2. Load other tools from skill system (fallback for non-Telegram)
|
||||||
try {
|
try {
|
||||||
console.log('🔧 Loading non-Telegram tools from skill system...');
|
console.log('🔧 Loading non-Telegram tools from skill system...');
|
||||||
const skillTools = await invoke<ZeroClawToolSchema[]>('runtime_get_tool_schemas');
|
const skillTools = await invoke<OpenClawToolSchema[]>('runtime_get_tool_schemas');
|
||||||
|
|
||||||
// Filter out telegram tools to avoid duplicates
|
// Filter out telegram tools to avoid duplicates
|
||||||
const nonTelegramTools = skillTools.filter(
|
const nonTelegramTools = skillTools.filter(
|
||||||
@@ -141,7 +141,7 @@ export class AgentToolRegistry implements IAgentToolRegistry {
|
|||||||
toolName.includes('tg') ||
|
toolName.includes('tg') ||
|
||||||
this.extractCategoryFromSkillId(skillId).includes('Telegram');
|
this.extractCategoryFromSkillId(skillId).includes('Telegram');
|
||||||
|
|
||||||
let result: ZeroClawToolResult;
|
let result: OpenClawToolResult;
|
||||||
|
|
||||||
if (isTelegramTool) {
|
if (isTelegramTool) {
|
||||||
// Telegram tools no longer available
|
// Telegram tools no longer available
|
||||||
@@ -159,7 +159,7 @@ export class AgentToolRegistry implements IAgentToolRegistry {
|
|||||||
console.log(` args: ${toolArguments}`);
|
console.log(` args: ${toolArguments}`);
|
||||||
console.log(` args type: ${typeof toolArguments}`);
|
console.log(` args type: ${typeof toolArguments}`);
|
||||||
|
|
||||||
result = await invoke<ZeroClawToolResult>('runtime_execute_tool', {
|
result = await invoke<OpenClawToolResult>('runtime_execute_tool', {
|
||||||
toolId,
|
toolId,
|
||||||
args: toolArguments,
|
args: toolArguments,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export const store = configureStore({
|
|||||||
setStoreForApiClient(() => store.getState().auth.token);
|
setStoreForApiClient(() => store.getState().auth.token);
|
||||||
|
|
||||||
export const persistor = persistStore(store, null, () => {
|
export const persistor = persistStore(store, null, () => {
|
||||||
// Dev-only: auto-inject JWT token for testing (e.g. Android without login flow)
|
// Dev-only: auto-inject JWT token for local testing without login flow.
|
||||||
const devToken = import.meta.env.VITE_DEV_JWT_TOKEN;
|
const devToken = import.meta.env.VITE_DEV_JWT_TOKEN;
|
||||||
if (devToken && !store.getState().auth.token) {
|
if (devToken && !store.getState().auth.token) {
|
||||||
store.dispatch(setToken(devToken));
|
store.dispatch(setToken(devToken));
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* Agent Tool Registry Types
|
* Agent Tool Registry Types
|
||||||
*
|
*
|
||||||
* Minimal type definitions for agent tool registry functionality.
|
* Minimal type definitions for agent tool registry functionality.
|
||||||
* Based on ZeroClaw compatibility requirements.
|
* Based on OpenClaw compatibility requirements.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||