activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Crawler Summary
Build production Solana mobile apps with React Native. Setup, Mobile Wallet Adapter, transactions, tokens, NFTs, and dApp Store publishing. --- name: sol-mobile description: Build production Solana mobile apps with React Native. Setup, Mobile Wallet Adapter, transactions, tokens, NFTs, and dApp Store publishing. metadata: {"openclaw":{"requires":{"bins":["npx","node"]}}} --- Sol Mobile — Solana Mobile Development You are an expert Solana mobile developer who builds production-ready React Native apps that connect to Solana wallets and interact with the bl Capability contract not published. No trust telemetry is available yet. Last updated 4/14/2026.
Freshness
Last checked 4/14/2026
Best For
sol-mobile is best for cryptographically, mwa workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB OPENCLEW, runtime-metrics, public facts pack
Build production Solana mobile apps with React Native. Setup, Mobile Wallet Adapter, transactions, tokens, NFTs, and dApp Store publishing. --- name: sol-mobile description: Build production Solana mobile apps with React Native. Setup, Mobile Wallet Adapter, transactions, tokens, NFTs, and dApp Store publishing. metadata: {"openclaw":{"requires":{"bins":["npx","node"]}}} --- Sol Mobile — Solana Mobile Development You are an expert Solana mobile developer who builds production-ready React Native apps that connect to Solana wallets and interact with the bl
Public facts
4
Change events
1
Artifacts
0
Freshness
Apr 14, 2026
Capability contract not published. No trust telemetry is available yet. Last updated 4/14/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Apr 14, 2026
Vendor
Jusscubs
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. Last updated 4/14/2026.
Setup snapshot
git clone https://github.com/JussCubs/sol-mobile-skills.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Jusscubs
Protocol compatibility
OpenClaw
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
typescript
import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
await transact(async (wallet) => {
// 1. SESSION OPENS - wallet app comes to foreground
// 2. AUTHORIZE - get user approval + accounts
const { accounts, auth_token } = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
// 3. SIGN/SEND - perform operations
const signatures = await wallet.signAndSendTransactions({
transactions: [transaction],
});
// 4. SESSION CLOSES - automatically when callback ends
});bash
yarn add @solana-mobile/mobile-wallet-adapter-protocol-web3js \
@solana-mobile/mobile-wallet-adapter-protocol \
@solana/web3.js \
react-native-quick-base64javascript
import 'react-native-get-random-values';
import { Buffer } from 'buffer';
global.Buffer = global.Buffer || Buffer;json
// app.json
{
"expo": {
"plugins": [
[
"expo-build-properties",
{
"android": {
"minSdkVersion": 23
}
}
]
]
}
}gradle
android {
compileSdkVersion 34
defaultConfig {
minSdkVersion 23
targetSdkVersion 34
}
}typescript
export const APP_IDENTITY = {
name: 'MyDApp',
uri: 'https://mydapp.com',
icon: 'favicon.ico', // Relative to uri
};Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Build production Solana mobile apps with React Native. Setup, Mobile Wallet Adapter, transactions, tokens, NFTs, and dApp Store publishing. --- name: sol-mobile description: Build production Solana mobile apps with React Native. Setup, Mobile Wallet Adapter, transactions, tokens, NFTs, and dApp Store publishing. metadata: {"openclaw":{"requires":{"bins":["npx","node"]}}} --- Sol Mobile — Solana Mobile Development You are an expert Solana mobile developer who builds production-ready React Native apps that connect to Solana wallets and interact with the bl
You are an expert Solana mobile developer who builds production-ready React Native apps that connect to Solana wallets and interact with the blockchain.
Native mobile dApps for Android (and iOS) using React Native that:
Mobile Wallet Adapter (MWA) is the foundation. Unlike web wallets that inject into browser context, mobile wallets run as separate, isolated apps. MWA creates encrypted communication channels between your dApp and wallet apps.
| Web Wallets | Mobile Wallets (MWA) | |-------------|---------------------| | Persistent connection | Session-based | | Browser extensions | Standalone apps | | Direct function calls | Inter-app messaging | | Connect once → sign many | Open session → authorize → sign → close |
Every wallet interaction follows this pattern:
import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
await transact(async (wallet) => {
// 1. SESSION OPENS - wallet app comes to foreground
// 2. AUTHORIZE - get user approval + accounts
const { accounts, auth_token } = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
// 3. SIGN/SEND - perform operations
const signatures = await wallet.signAndSendTransactions({
transactions: [transaction],
});
// 4. SESSION CLOSES - automatically when callback ends
});
Add the core MWA packages:
yarn add @solana-mobile/mobile-wallet-adapter-protocol-web3js \
@solana-mobile/mobile-wallet-adapter-protocol \
@solana/web3.js \
react-native-quick-base64
Mobile environments lack browser APIs. Add these polyfills to your index.js (before App import):
import 'react-native-get-random-values';
import { Buffer } from 'buffer';
global.Buffer = global.Buffer || Buffer;
For Expo projects, you need a custom development build:
// app.json
{
"expo": {
"plugins": [
[
"expo-build-properties",
{
"android": {
"minSdkVersion": 23
}
}
]
]
}
}
Add to android/app/build.gradle:
android {
compileSdkVersion 34
defaultConfig {
minSdkVersion 23
targetSdkVersion 34
}
}
Every dApp must define its identity for wallet display:
export const APP_IDENTITY = {
name: 'MyDApp',
uri: 'https://mydapp.com',
icon: 'favicon.ico', // Relative to uri
};
Wallets show this to users during authorization. On Android, wallets can cryptographically verify the requesting app matches this identity.
const authorizeWallet = async () => {
const authResult = await transact(async (wallet) => {
return await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet', // or 'solana:mainnet-beta'
});
});
// Store for silent re-auth
await AsyncStorage.setItem('auth_token', authResult.auth_token);
return authResult.accounts[0].address;
};
const connectWithToken = async () => {
const savedToken = await AsyncStorage.getItem('auth_token');
return await transact(async (wallet) => {
return await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
auth_token: savedToken || undefined, // Skip prompt if valid
});
});
};
const disconnectWallet = async () => {
const savedToken = await AsyncStorage.getItem('auth_token');
await transact(async (wallet) => {
await wallet.deauthorize({
auth_token: savedToken,
});
});
await AsyncStorage.removeItem('auth_token');
};
Wallet handles both signing and network submission:
const sendTransaction = async (instruction) => {
return await transact(async (wallet) => {
const { accounts } = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
const fromPubkey = new PublicKey(toByteArray(accounts[0].address));
// Build transaction
const txMessage = new TransactionMessage({
payerKey: fromPubkey,
recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
instructions: [instruction],
}).compileToV0Message();
const transaction = new VersionedTransaction(txMessage);
// Wallet signs and submits
const signatures = await wallet.signAndSendTransactions({
transactions: [transaction],
});
return signatures[0];
});
};
For custom submission logic:
const signTransaction = async (transaction) => {
return await transact(async (wallet) => {
await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
const signedTxs = await wallet.signTransactions({
transactions: [transaction],
});
return signedTxs[0];
});
};
// Submit yourself
const signedTx = await signTransaction(transaction);
await connection.sendTransaction(signedTx);
import { SystemProgram, LAMPORTS_PER_SOL } from '@solana/web3.js';
const transferSOL = async (toPubkey, amount) => {
const instruction = SystemProgram.transfer({
fromPubkey: authorizedPubkey,
toPubkey,
lamports: amount * LAMPORTS_PER_SOL,
});
return await sendTransaction(instruction);
};
import { getAssociatedTokenAddress, createTransferInstruction } from '@solana/spl-token';
const transferToken = async (mintAddress, toPubkey, amount, decimals) => {
const fromTokenAccount = await getAssociatedTokenAddress(
new PublicKey(mintAddress),
authorizedPubkey
);
const toTokenAccount = await getAssociatedTokenAddress(
new PublicKey(mintAddress),
new PublicKey(toPubkey)
);
const instruction = createTransferInstruction(
fromTokenAccount,
toTokenAccount,
authorizedPubkey,
amount * (10 ** decimals)
);
return await sendTransaction(instruction);
};
const getTokenBalance = async (mintAddress, ownerAddress) => {
const tokenAccount = await getAssociatedTokenAddress(
new PublicKey(mintAddress),
new PublicKey(ownerAddress)
);
try {
const balance = await connection.getTokenAccountBalance(tokenAccount);
return balance.value.uiAmount;
} catch (error) {
return 0; // Account doesn't exist
}
};
const signMessage = async (message) => {
const messageBuffer = new Uint8Array(
message.split('').map(c => c.charCodeAt(0))
);
return await transact(async (wallet) => {
const { accounts } = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
const signedMessages = await wallet.signMessages({
addresses: [accounts[0].address],
payloads: [messageBuffer],
});
return signedMessages[0];
});
};
const signInWithSolana = async () => {
return await transact(async (wallet) => {
const authResult = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
sign_in_payload: {
domain: 'mydapp.com',
statement: 'Sign in to MyDApp',
uri: 'https://mydapp.com',
},
});
return authResult.sign_in_result;
});
};
// Verify the signature
import { verifySignIn } from '@solana/wallet-standard-util';
const isValid = verifySignIn(input, signInResult);
Create a context for wallet state:
// contexts/AuthorizationProvider.tsx
import React, { createContext, useContext, useState } from 'react';
interface AuthContextType {
selectedAccount: string | null;
isAuthorized: boolean;
authorize: () => Promise<void>;
deauthorize: () => Promise<void>;
}
const AuthContext = createContext<AuthContextType | null>(null);
export const AuthorizationProvider = ({ children }) => {
const [selectedAccount, setSelectedAccount] = useState<string | null>(null);
const authorize = async () => {
try {
const authResult = await transact(async (wallet) => {
return await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
});
setSelectedAccount(authResult.accounts[0].address);
await AsyncStorage.setItem('auth_token', authResult.auth_token);
} catch (error) {
console.error('Authorization failed:', error);
}
};
const deauthorize = async () => {
const savedToken = await AsyncStorage.getItem('auth_token');
await transact(async (wallet) => {
await wallet.deauthorize({ auth_token: savedToken });
});
setSelectedAccount(null);
await AsyncStorage.removeItem('auth_token');
};
return (
<AuthContext.Provider value={{
selectedAccount,
isAuthorized: !!selectedAccount,
authorize,
deauthorize,
}}>
{children}
</AuthContext.Provider>
);
};
export const useAuthorization = () => {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuthorization must be used within AuthorizationProvider');
}
return context;
};
const WalletScreen = () => {
const { selectedAccount, isAuthorized, authorize, deauthorize } = useAuthorization();
if (!isAuthorized) {
return (
<View style={styles.container}>
<Button title="Connect Wallet" onPress={authorize} />
</View>
);
}
return (
<View style={styles.container}>
<Text>Connected: {selectedAccount}</Text>
<Button title="Disconnect" onPress={deauthorize} />
</View>
);
};
const handleTransactionError = async (operation) => {
try {
return await operation();
} catch (error) {
if (error instanceof Error) {
switch (true) {
case error.message.includes('User declined'):
Alert.alert('Transaction Cancelled', 'You declined the transaction.');
break;
case error.message.includes('Insufficient funds'):
Alert.alert('Insufficient Funds', 'Not enough SOL for this transaction.');
break;
case error.message.includes('Blockhash not found'):
Alert.alert('Network Error', 'Transaction expired. Please try again.');
break;
default:
Alert.alert('Transaction Failed', error.message);
}
}
throw error;
}
};
const withRetry = async (operation, maxRetries = 3) => {
for (let i = 0; i < maxRetries; i++) {
try {
return await operation();
} catch (error) {
if (i === maxRetries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
}
}
};
MWA requires a real Android device with a Solana wallet installed. Popular options:
npx react-native run-android// Add extensive logging
await transact(async (wallet) => {
console.log('Starting wallet session');
const authResult = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
console.log('Authorized accounts:', authResult.accounts);
console.log('Auth token received:', !!authResult.auth_token);
// ... rest of operations
});
// Monitor network calls
const connection = new Connection(
clusterApiUrl('devnet'),
'confirmed',
{
commitment: 'confirmed',
disableRetryOnRateLimit: false,
}
);
# Generate signed APK
cd android
./gradlew assembleRelease
# Generate AAB (preferred)
./gradlew bundleRelease
# iOS builds require Xcode
npx react-native run-ios --configuration Release
import * as anchor from '@project-serum/anchor';
const callProgram = async (programId, instruction) => {
return await transact(async (wallet) => {
const { accounts } = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
const provider = new anchor.AnchorProvider(
connection,
{
publicKey: new PublicKey(toByteArray(accounts[0].address)),
signTransaction: async (tx) => {
const signed = await wallet.signTransactions({
transactions: [tx],
});
return signed[0];
},
signAllTransactions: async (txs) => {
return await wallet.signTransactions({
transactions: txs,
});
},
},
{ commitment: 'confirmed' }
);
const program = new anchor.Program(idl, programId, provider);
return await program.methods[instruction]().rpc();
});
};
// Singleton connection instance
class SolanaConnection {
private static instance: Connection;
static getInstance() {
if (!this.instance) {
this.instance = new Connection(
clusterApiUrl('devnet'),
'confirmed'
);
}
return this.instance;
}
}
const sendBatchTransactions = async (instructions) => {
return await transact(async (wallet) => {
const { accounts } = await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
const transactions = instructions.map(ix => {
const txMessage = new TransactionMessage({
payerKey: new PublicKey(toByteArray(accounts[0].address)),
recentBlockhash: latestBlockhash.blockhash,
instructions: [ix],
}).compileToV0Message();
return new VersionedTransaction(txMessage);
});
return await wallet.signAndSendTransactions({
transactions,
});
});
};
const validateAddress = (address: string): boolean => {
try {
new PublicKey(address);
return true;
} catch {
return false;
}
};
// Preferred: Versioned transactions with address lookup tables
const buildVersionedTransaction = async (instructions) => {
const txMessage = new TransactionMessage({
payerKey: authorizedPubkey,
recentBlockhash: latestBlockhash.blockhash,
instructions,
}).compileToV0Message();
return new VersionedTransaction(txMessage);
};
const getCluster = () => {
return __DEV__ ? 'devnet' : 'mainnet-beta';
};
const getRPCEndpoint = () => {
return __DEV__
? clusterApiUrl('devnet')
: 'https://your-mainnet-rpc.com';
};
const getAvailableWallets = async () => {
// MWA automatically detects installed wallet apps
// Your app connects to whichever the user selects
return await transact(async (wallet) => {
// This will show wallet selection if multiple installed
return await wallet.authorize({
identity: APP_IDENTITY,
chain: 'solana:devnet',
});
});
};
# Add to android/app/src/main/AndroidManifest.xml
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="mydapp.com" />
</intent-filter>
transact() callsFor Full Implementation: See references/ folder for detailed guides on:
You now have everything needed to build production Solana mobile apps. Start with a simple wallet connection, then add transactions, tokens, and program interactions as needed.
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/contract"
curl -s "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
The Frontend for Agents & Generative UI. React + Angular
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/snapshot",
"contractUrl": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/contract",
"trustUrl": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/trust"
},
"curlExamples": [
"curl -s \"https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/snapshot\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/contract\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-10-09T02:25:49.752Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "cryptographically",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "mwa",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile capability:cryptographically|supported|profile capability:mwa|supported|profile"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Jusscubs",
"href": "https://github.com/JussCubs/sol-mobile-skills",
"sourceUrl": "https://github.com/JussCubs/sol-mobile-skills",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-14T22:24:48.183Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-04-14T22:24:48.183Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/jusscubs-sol-mobile-skills/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to sol-mobile and adjacent AI workflows.