hangwin--mcp-chrome
89 行
2.7 KiB
TypeScript
89 行
2.7 KiB
TypeScript
/**
|
|
* Composable for user-facing input preferences in AgentChat.
|
|
* Preferences are persisted in chrome.storage.local.
|
|
*/
|
|
import { ref, type Ref } from 'vue';
|
|
|
|
// =============================================================================
|
|
// Constants
|
|
// =============================================================================
|
|
|
|
const STORAGE_KEY_FAKE_CARET = 'agent-chat-fake-caret-enabled';
|
|
|
|
// =============================================================================
|
|
// Types
|
|
// =============================================================================
|
|
|
|
export interface UseAgentInputPreferences {
|
|
/** Whether the fake caret + comet trail is enabled (opt-in). Default: false */
|
|
fakeCaretEnabled: Ref<boolean>;
|
|
/** Whether preferences have been loaded from storage */
|
|
ready: Ref<boolean>;
|
|
/** Load preferences from chrome.storage.local (call on mount) */
|
|
init: () => Promise<void>;
|
|
/** Persist and update fake caret preference */
|
|
setFakeCaretEnabled: (enabled: boolean) => Promise<void>;
|
|
}
|
|
|
|
// =============================================================================
|
|
// Composable
|
|
// =============================================================================
|
|
|
|
/**
|
|
* Composable for managing user input preferences.
|
|
*
|
|
* Features:
|
|
* - Fake caret toggle (opt-in, default off)
|
|
* - Persistence via chrome.storage.local
|
|
* - Graceful fallback when storage is unavailable
|
|
*/
|
|
export function useAgentInputPreferences(): UseAgentInputPreferences {
|
|
const fakeCaretEnabled = ref(false);
|
|
const ready = ref(false);
|
|
|
|
/**
|
|
* Load preferences from chrome.storage.local.
|
|
* Should be called during component mount.
|
|
*/
|
|
async function init(): Promise<void> {
|
|
try {
|
|
if (typeof chrome === 'undefined' || !chrome.storage?.local) {
|
|
ready.value = true;
|
|
return;
|
|
}
|
|
|
|
const result = await chrome.storage.local.get(STORAGE_KEY_FAKE_CARET);
|
|
const stored = result[STORAGE_KEY_FAKE_CARET];
|
|
|
|
if (typeof stored === 'boolean') {
|
|
fakeCaretEnabled.value = stored;
|
|
}
|
|
} catch (error) {
|
|
console.error('[useAgentInputPreferences] Failed to load preferences:', error);
|
|
} finally {
|
|
ready.value = true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update and persist the fake caret preference.
|
|
*/
|
|
async function setFakeCaretEnabled(enabled: boolean): Promise<void> {
|
|
fakeCaretEnabled.value = enabled;
|
|
|
|
try {
|
|
if (typeof chrome === 'undefined' || !chrome.storage?.local) return;
|
|
await chrome.storage.local.set({ [STORAGE_KEY_FAKE_CARET]: enabled });
|
|
} catch (error) {
|
|
console.error('[useAgentInputPreferences] Failed to save fake caret preference:', error);
|
|
}
|
|
}
|
|
|
|
return {
|
|
fakeCaretEnabled,
|
|
ready,
|
|
init,
|
|
setFakeCaretEnabled,
|
|
};
|
|
}
|