refactor(desktop): split kernel_commands/pipeline_commands into modules, add SaaS client libs and gateway modules
Split monolithic kernel_commands.rs (2185 lines) and pipeline_commands.rs (1391 lines) into focused sub-modules under kernel_commands/ and pipeline_commands/ directories. Add gateway module (commands, config, io, runtime), health_check, and 15 new TypeScript client libraries for SaaS relay, auth, admin, telemetry, and kernel sub-systems (a2a, agent, chat, hands, skills, triggers). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,9 @@ import {
|
||||
arrayToBase64,
|
||||
base64ToArray,
|
||||
} from './crypto-utils';
|
||||
import { createLogger } from './logger';
|
||||
|
||||
const logger = createLogger('secure-storage');
|
||||
|
||||
// Cache for keyring availability check
|
||||
let keyringAvailable: boolean | null = null;
|
||||
@@ -145,7 +148,8 @@ function isEncrypted(value: string): boolean {
|
||||
try {
|
||||
const parsed = JSON.parse(value);
|
||||
return parsed && typeof parsed.iv === 'string' && typeof parsed.data === 'string';
|
||||
} catch {
|
||||
} catch (e) {
|
||||
logger.debug('isEncrypted check failed', { error: e });
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -157,7 +161,8 @@ function isV2Encrypted(value: string): boolean {
|
||||
try {
|
||||
const parsed = JSON.parse(value);
|
||||
return parsed && parsed.version === 2 && typeof parsed.salt === 'string' && typeof parsed.iv === 'string' && typeof parsed.data === 'string';
|
||||
} catch {
|
||||
} catch (e) {
|
||||
logger.debug('isV2Encrypted check failed', { error: e });
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -254,7 +259,8 @@ async function readEncryptedLocalStorage(key: string): Promise<string | null> {
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch {
|
||||
} catch (e) {
|
||||
logger.debug('readEncryptedLocalStorage failed', { error: e });
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -266,8 +272,8 @@ function clearLocalStorageBackup(key: string): void {
|
||||
try {
|
||||
localStorage.removeItem(ENCRYPTED_PREFIX + key);
|
||||
localStorage.removeItem(key);
|
||||
} catch {
|
||||
// Ignore localStorage failures
|
||||
} catch (e) {
|
||||
logger.debug('clearLocalStorageBackup failed', { error: e });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,15 +285,16 @@ function writeLocalStorageBackup(key: string, value: string): void {
|
||||
} else {
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
} catch {
|
||||
// Ignore localStorage failures
|
||||
} catch (e) {
|
||||
logger.debug('writeLocalStorageBackup failed', { error: e });
|
||||
}
|
||||
}
|
||||
|
||||
function readLocalStorageBackup(key: string): string | null {
|
||||
try {
|
||||
return localStorage.getItem(key);
|
||||
} catch {
|
||||
} catch (e) {
|
||||
logger.debug('readLocalStorageBackup failed', { error: e });
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -400,8 +407,8 @@ export async function storeDeviceKeys(
|
||||
// Clear legacy format if present
|
||||
try {
|
||||
localStorage.removeItem(DEVICE_KEYS_LEGACY);
|
||||
} catch {
|
||||
// Ignore
|
||||
} catch (e) {
|
||||
logger.debug('Failed to clear legacy device keys from localStorage', { error: e });
|
||||
}
|
||||
} else {
|
||||
// Fallback: store in localStorage (less secure, but better than nothing)
|
||||
@@ -477,8 +484,8 @@ export async function deleteDeviceKeys(): Promise<void> {
|
||||
localStorage.removeItem(DEVICE_KEYS_PUBLIC_KEY);
|
||||
localStorage.removeItem(DEVICE_KEYS_CREATED);
|
||||
localStorage.removeItem(DEVICE_KEYS_LEGACY);
|
||||
} catch {
|
||||
// Ignore localStorage errors
|
||||
} catch (e) {
|
||||
logger.debug('Failed to delete device keys from localStorage', { error: e });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -512,8 +519,8 @@ export async function getDeviceKeysCreatedAt(): Promise<number | null> {
|
||||
if (typeof parsed.createdAt === 'number' || typeof parsed.createdAt === 'string') {
|
||||
return parseInt(String(parsed.createdAt), 10);
|
||||
}
|
||||
} catch {
|
||||
// Ignore
|
||||
} catch (e) {
|
||||
logger.debug('Failed to parse legacy device keys createdAt', { error: e });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user