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
This commit is contained in:
Steven Enamakel
2026-03-27 14:38:48 -07:00
committed by GitHub
parent 5ecc7cbc75
commit 249aedfc04
53 changed files with 72 additions and 1086 deletions
-45
View File
@@ -1,5 +1,4 @@
import { invoke } from '@tauri-apps/api/core';
import { platform } from '@tauri-apps/plugin-os';
import { useEffect, useMemo, useState } from 'react';
import { useNavigate } from 'react-router-dom';
@@ -111,7 +110,6 @@ export default function SkillsGrid() {
const navigate = useNavigate();
const [skillsList, setSkillsList] = useState<SkillListEntry[]>([]);
const [loading, setLoading] = useState(true);
const [isMobile, setIsMobile] = useState(false);
const [generating, setGenerating] = useState(false);
const [selfEvolveOpen, setSelfEvolveOpen] = useState(false);
const [setupModalOpen, setSetupModalOpen] = useState(false);
@@ -181,17 +179,6 @@ export default function SkillsGrid() {
};
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();
}, []);
@@ -219,38 +206,6 @@ export default function SkillsGrid() {
})
.filter(s => IS_DEV || !s.ignoreInProduction);
}, [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 || skillsList.length === 0) {
return null;
+1 -1
View File
@@ -7,7 +7,7 @@
// Skill Manifest (from manifest.json)
// ---------------------------------------------------------------------------
export type SkillPlatform = "windows" | "macos" | "linux" | "android" | "ios";
export type SkillPlatform = "windows" | "macos" | "linux";
/** Unified registry skill type discriminant. */
export type SkillType = 'openhuman' | 'openclaw';
-12
View File
@@ -1,5 +1,4 @@
import { invoke } from '@tauri-apps/api/core';
import { platform } from '@tauri-apps/plugin-os';
import { useEffect, useMemo, useState } from 'react';
import {
@@ -203,17 +202,6 @@ export default function Skills() {
useEffect(() => {
const loadSkills = async () => {
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 ALLOWED_SKILLS = new Set(['gmail', 'notion']);
const validManifests = manifests.filter(m => {
@@ -17,7 +17,7 @@ describe('AgentToolRegistry', () => {
});
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 = [
{
type: 'function',
@@ -128,7 +128,7 @@ describe('AgentToolRegistry', () => {
});
describe('executeTool', () => {
test('should execute tool using ZeroClaw format with success', async () => {
test('should execute tool using OpenClaw format with success', async () => {
const mockResult = {
success: true,
output: '{"issues": [{"title": "Bug fix", "number": 1}]}',
+6 -6
View File
@@ -10,13 +10,13 @@ import { invoke } from '@tauri-apps/api/core';
import type { AgentToolExecution, AgentToolSchema, IAgentToolRegistry } from '../types/agent';
// ZeroClaw format types from Rust
interface ZeroClawToolSchema {
// OpenClaw format types from Rust
interface OpenClawToolSchema {
type: string;
function: { name: string; description: string; parameters: Record<string, unknown> };
}
interface ZeroClawToolResult {
interface OpenClawToolResult {
success: boolean;
output: string;
error?: string;
@@ -58,7 +58,7 @@ export class AgentToolRegistry implements IAgentToolRegistry {
// 2. Load other tools from skill system (fallback for non-Telegram)
try {
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
const nonTelegramTools = skillTools.filter(
@@ -141,7 +141,7 @@ export class AgentToolRegistry implements IAgentToolRegistry {
toolName.includes('tg') ||
this.extractCategoryFromSkillId(skillId).includes('Telegram');
let result: ZeroClawToolResult;
let result: OpenClawToolResult;
if (isTelegramTool) {
// Telegram tools no longer available
@@ -159,7 +159,7 @@ export class AgentToolRegistry implements IAgentToolRegistry {
console.log(` args: ${toolArguments}`);
console.log(` args type: ${typeof toolArguments}`);
result = await invoke<ZeroClawToolResult>('runtime_execute_tool', {
result = await invoke<OpenClawToolResult>('runtime_execute_tool', {
toolId,
args: toolArguments,
});
+1 -1
View File
@@ -126,7 +126,7 @@ export const store = configureStore({
setStoreForApiClient(() => store.getState().auth.token);
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;
if (devToken && !store.getState().auth.token) {
store.dispatch(setToken(devToken));
+1 -1
View File
@@ -2,7 +2,7 @@
* Agent Tool Registry Types
*
* Minimal type definitions for agent tool registry functionality.
* Based on ZeroClaw compatibility requirements.
* Based on OpenClaw compatibility requirements.
*/
/**