@r1-runtime/apis
Advanced tools
+3
-3
@@ -1,4 +0,4 @@ | ||
| import { KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin } from '@r1/kernel'; | ||
| import { VFS } from '@r1/kernel'; | ||
| import { KernelHandler } from '../../kernel/src/index.ts'; | ||
| import { KernelPlugin } from '../../kernel/src/index.ts'; | ||
| import { VFS } from '../../kernel/src/index.ts'; | ||
@@ -5,0 +5,0 @@ export declare const appCacheDir: () => Promise<string>; |
+1
-1
| var __defProp = Object.defineProperty; | ||
| var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
| var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); | ||
| import { VFS } from "@r1/kernel"; | ||
| import { VFS } from "@r1-runtime/kernel"; | ||
| class FsPlugin { | ||
@@ -6,0 +6,0 @@ constructor(vfs) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../src/fs.ts","../src/path_util.ts","../src/event.ts","../src/core.ts","../src/store.ts","../src/os.ts","../src/http.ts","../src/main_bridge.ts","../src/window.ts","../src/clipboard/index.ts","../src/notification.ts","../src/dialog/index.ts","../src/shell.ts","../src/sql.ts"],"sourcesContent":["import { KernelPlugin, KernelHandler, VFS } from '@r1/kernel';\n\n// ─── Plugin (handles invoke() calls) ─────────────────────────────────────────\n\nexport class FsPlugin implements KernelPlugin {\n name = 'fs';\n private vfs: VFS;\n\n constructor(vfs: VFS) {\n this.vfs = vfs;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('read_text_file', async (payload: { path: string }) => {\n return this.vfs.readText(payload.path);\n });\n\n commands.set('write_text_file', async (payload: { path: string; contents: string }) => {\n await this.vfs.writeText(payload.path, payload.contents);\n return null;\n });\n\n commands.set('read_file', async (payload: { path: string }) => {\n const bytes = await this.vfs.read(payload.path);\n return Array.from(bytes);\n });\n\n commands.set('write_file', async (payload: { path: string; contents: number[] }) => {\n await this.vfs.write(payload.path, new Uint8Array(payload.contents));\n return null;\n });\n\n commands.set('exists', async (payload: { path: string }) => {\n return this.vfs.exists(payload.path);\n });\n\n commands.set('read_dir', async (payload: { path: string; recursive?: boolean }) => {\n const entries = await this.vfs.list(payload.path);\n return entries.map((p: string) => ({\n name: p.split('/').pop() || p,\n path: p,\n isDirectory: !p.includes('.'),\n }));\n });\n\n commands.set('create_dir', async (payload: { path: string; recursive?: boolean }) => {\n await this.vfs.mkdir(payload.path);\n return null;\n });\n\n commands.set('remove_file', async (payload: { path: string }) => {\n await this.vfs.delete(payload.path);\n return null;\n });\n\n commands.set('remove_dir', async (payload: { path: string }) => {\n await this.vfs.delete(payload.path);\n return null;\n });\n\n commands.set('rename', async (payload: { oldPath: string; newPath: string }) => {\n const data = await this.vfs.read(payload.oldPath);\n await this.vfs.write(payload.newPath, data);\n await this.vfs.delete(payload.oldPath);\n return null;\n });\n\n commands.set('copy_file', async (payload: { source: string; destination: string }) => {\n const data = await this.vfs.read(payload.source);\n await this.vfs.write(payload.destination, data);\n return null;\n });\n\n return commands;\n }\n}\n\n// ─── Direct JS exports ────────────────────────────────────────────────────────\n// Tauri apps import these directly:\n// import { readDir, readTextFile } from '@tauri-apps/api/fs'\n// The Vite plugin rewrites that import to @r1/apis/fs.\n// These named exports must exist here so the import resolves.\n\nlet _vfs: VFS | null = null;\nlet _initPromise: Promise<VFS> | null = null;\n\nasync function getVfs(): Promise<VFS> {\n if (_vfs) return _vfs;\n if (!_initPromise) {\n _initPromise = (async () => {\n const instance = new VFS();\n await instance.init();\n _vfs = instance;\n return instance;\n })();\n }\n return _initPromise;\n}\n\nexport interface FileEntry {\n name: string;\n path: string;\n isDirectory?: boolean;\n children?: FileEntry[];\n}\n\nexport async function readDir(\n path: string,\n _options?: { recursive?: boolean }\n): Promise<FileEntry[]> {\n const vfs = await getVfs();\n const entries = await vfs.list(path);\n return entries.map((p: string) => ({\n name: p.split('/').pop() || p,\n path: p,\n isDirectory: !p.split('/').pop()?.includes('.'),\n }));\n}\n\nexport async function readTextFile(\n path: string,\n _options?: object\n): Promise<string> {\n const vfs = await getVfs();\n return vfs.readText(path);\n}\n\nexport async function writeTextFile(\n path: string,\n contents: string,\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.writeText(path, contents);\n}\n\nexport async function readBinaryFile(\n path: string,\n _options?: object\n): Promise<Uint8Array> {\n const vfs = await getVfs();\n return vfs.read(path);\n}\n\nexport async function writeBinaryFile(\n path: string,\n contents: Uint8Array | number[],\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n const data = contents instanceof Uint8Array\n ? contents\n : new Uint8Array(contents);\n return vfs.write(path, data);\n}\n\nexport async function exists(path: string): Promise<boolean> {\n const vfs = await getVfs();\n return vfs.exists(path);\n}\n\nexport async function removeFile(\n path: string,\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.delete(path);\n}\n\nexport async function removeDir(\n path: string,\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.delete(path);\n}\n\nexport async function createDir(\n path: string,\n _options?: { recursive?: boolean }\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.mkdir(path);\n}\n\nexport async function renameFile(\n oldPath: string,\n newPath: string\n): Promise<void> {\n const vfs = await getVfs();\n const data = await vfs.read(oldPath);\n await vfs.write(newPath, data);\n await vfs.delete(oldPath);\n}\n\nexport async function copyFile(\n source: string,\n destination: string\n): Promise<void> {\n const vfs = await getVfs();\n const data = await vfs.read(source);\n await vfs.write(destination, data);\n}","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction posixJoin(...parts: string[]): string {\n return parts\n .filter(p => !!p)\n .join('/')\n .replace(/\\/+/g, '/');\n}\n\nfunction posixNormalize(path: string): string {\n if (!path) return '.';\n const isAbsolute = path.startsWith('/');\n const trailingSlash = path.endsWith('/') && path !== '/';\n \n const parts = path.split('/');\n const result: string[] = [];\n \n for (const p of parts) {\n if (p === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n result.pop();\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else if (p !== '.' && p !== '') {\n result.push(p);\n }\n }\n \n let normalized = result.join('/');\n if (isAbsolute) normalized = '/' + normalized;\n if (normalized === '' && !isAbsolute) normalized = '.';\n if (trailingSlash && !normalized.endsWith('/')) normalized += '/';\n \n return normalized || '/';\n}\n\nfunction posixRelative(from: string, to: string): string {\n const fromParts = posixNormalize(from).split('/').filter(p => !!p);\n const toParts = posixNormalize(to).split('/').filter(p => !!p);\n \n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n \n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] !== toParts[i]) break;\n commonLength++;\n }\n \n const upCount = fromParts.length - commonLength;\n const downParts = toParts.slice(commonLength);\n \n const result = [];\n for (let i = 0; i < upCount; i++) result.push('..');\n result.push(...downParts);\n \n return result.join('/') || '.';\n}\n\nconst VFS_DIRS: Record<string, string> = {\n home: '/home/user',\n app: '/app',\n appData: '/app/data',\n appConfig: '/app/config',\n appLog: '/app/logs',\n appCache: '/app/cache',\n appLocalData: '/app/local',\n desktop: '/home/user/Desktop',\n document: '/home/user/Documents',\n download: '/home/user/Downloads',\n picture: '/home/user/Pictures',\n video: '/home/user/Videos',\n audio: '/home/user/Music',\n temp: '/tmp',\n resource: '/app/resources',\n runtime: '/tmp/runtime',\n config: '/app/config',\n data: '/app/data',\n cache: '/app/cache',\n log: '/app/logs',\n};\n\nexport class PathPlugin implements KernelPlugin {\n name = 'path';\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('join', async (payload: { paths: string[] }) => {\n return posixJoin(...(payload.paths || []));\n });\n\n commands.set('resolve', async (payload: { pathSegments: string[] }) => {\n let resolved = '';\n for (const seg of (payload.pathSegments || [])) {\n if (!seg) continue;\n if (seg.startsWith('/')) resolved = seg;\n else resolved = posixJoin(resolved, seg);\n }\n return posixNormalize(resolved || '/');\n });\n\n commands.set('relative', async (payload: { from: string; to: string }) => {\n return posixRelative(payload.from || '/', payload.to || '/');\n });\n\n commands.set('normalize', async (payload: { path: string }) => {\n return posixNormalize(payload.path || '.');\n });\n\n commands.set('basename', async (payload: { path: string; ext?: string }) => {\n const path = payload.path || '';\n if (!path) return '';\n const p = path.endsWith('/') && path.length > 1 ? path.slice(0, -1) : path;\n let base = p.split('/').pop() || '';\n if (payload.ext && base.endsWith(payload.ext)) {\n base = base.slice(0, -payload.ext.length);\n }\n return base;\n });\n\n commands.set('dirname', async (payload: { path: string }) => {\n if (!payload.path) return '/';\n const parts = payload.path.split('/');\n parts.pop();\n return parts.join('/') || '/';\n });\n\n commands.set('extname', async (payload: { path: string }) => {\n const path = payload.path || '';\n const base = path.split('/').pop() || '';\n const dot = base.lastIndexOf('.');\n return dot > 0 ? base.slice(dot) : '';\n });\n\n commands.set('isAbsolute', async (payload: { path: string }) => {\n const path = payload.path || '';\n return path.startsWith('/') || path.startsWith('\\\\');\n });\n\n for (const [key, vfsPath] of Object.entries(VFS_DIRS)) {\n commands.set(`${key}Dir`, async () => vfsPath);\n }\n\n commands.set('sep', async () => '/');\n commands.set('delimiter', async () => ':');\n\n return commands;\n }\n}\n\nexport const homeDir = () => Promise.resolve(VFS_DIRS.home);\nexport const appDir = () => Promise.resolve(VFS_DIRS.app);\nexport const appDataDir = () => Promise.resolve(VFS_DIRS.appData);\nexport const appConfigDir = () => Promise.resolve(VFS_DIRS.appConfig);\nexport const appLogDir = () => Promise.resolve(VFS_DIRS.appLog);\nexport const appCacheDir = () => Promise.resolve(VFS_DIRS.appCache);\nexport const appLocalDataDir = () => Promise.resolve(VFS_DIRS.appLocalData);\nexport const desktopDir = () => Promise.resolve(VFS_DIRS.desktop);\nexport const documentDir = () => Promise.resolve(VFS_DIRS.document);\nexport const downloadDir = () => Promise.resolve(VFS_DIRS.download);\nexport const pictureDir = () => Promise.resolve(VFS_DIRS.picture);\nexport const videoDir = () => Promise.resolve(VFS_DIRS.video);\nexport const audioDir = () => Promise.resolve(VFS_DIRS.audio);\nexport const tempDir = () => Promise.resolve(VFS_DIRS.temp);\nexport const resourceDir = () => Promise.resolve(VFS_DIRS.resource);\nexport const runtimeDir = () => Promise.resolve(VFS_DIRS.runtime);\nexport const configDir = () => Promise.resolve(VFS_DIRS.config);\nexport const dataDir = () => Promise.resolve(VFS_DIRS.data);\nexport const cacheDir = () => Promise.resolve(VFS_DIRS.cache);\nexport const logDir = () => Promise.resolve(VFS_DIRS.log);\n\nexport const resolve = (...paths: string[]) => {\n let resolved = '';\n for (const seg of paths) {\n if (!seg) continue;\n if (seg.startsWith('/')) resolved = seg;\n else resolved = posixJoin(resolved, seg);\n }\n return Promise.resolve(posixNormalize(resolved || '/'));\n};\n\nexport const normalize = (path: string) => Promise.resolve(posixNormalize(path || '.'));\nexport const join = (...paths: string[]) => Promise.resolve(posixJoin(...paths.filter(Boolean)));\nexport const relative = (from: string, to: string) => Promise.resolve(posixRelative(from || '/', to || '/'));\n\nexport const basename = (path: string, ext?: string) => {\n if (!path) return Promise.resolve('');\n const p = path.endsWith('/') && path.length > 1 ? path.slice(0, -1) : path;\n let base = p.split('/').pop() || '';\n if (ext && base.endsWith(ext)) base = base.slice(0, -ext.length);\n return Promise.resolve(base);\n};\n\nexport const dirname = (path: string) => {\n if (!path) return Promise.resolve('/');\n const parts = path.split('/');\n parts.pop();\n return Promise.resolve(parts.join('/') || '/');\n};\n\nexport const extname = (path: string) => {\n if (!path) return Promise.resolve('');\n const base = path.split('/').pop() || '';\n const dot = base.lastIndexOf('.');\n return Promise.resolve(dot > 0 ? base.slice(dot) : '');\n};\n\nexport const isAbsolute = (path: string) => Promise.resolve(!!path && (path.startsWith('/') || path.startsWith('\\\\')));\nexport const sep = '/';\nexport const delimiter = ':';\r\n","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\nexport class EventPlugin implements KernelPlugin {\n name = 'event';\n private onEmit: (event: string, payload: any) => void;\n\n constructor(onEmit: (event: string, payload: any) => void) {\n this.onEmit = onEmit;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n // Note: JS -> Rust events usually go through invoke(\"event:emit\", ...)\n commands.set('emit', async (payload: { event: string; payload: any }) => {\n this.onEmit(payload.event, payload.payload);\n return null;\n });\n\n // listen and unlisten are handled on the main thread via IPC Bridge patching,\n // as it's purely a JS-to-JS event registration on the main EventBus.\n // But we can add stubs here if needed for cross-plugin events.\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/api/event imports) ────────────────\n\nexport interface Event<T> {\n event: string;\n windowLabel: string;\n id: number;\n payload: T;\n}\n\nexport type EventCallback<T> = (event: Event<T>) => void;\nexport type UnlistenFn = () => void;\n\n/**\n * Global Event Bus singleton access. \n * We use window.__TAURI_INTERNALS__.listen which is patched by the IPC Bridge.\n */\nexport async function listen<T>(\n event: string,\n handler: EventCallback<T>\n): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(event, handler);\n}\n\nexport async function once<T>(\n event: string,\n handler: EventCallback<T>\n): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.once(event, handler);\n}\n\nexport async function emit(\n event: string,\n payload?: unknown\n): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('event:emit', { event, payload });\n}\n\nexport async function unlisten(\n event: string,\n eventId: number\n): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.unlisten(event, eventId);\n}\n\n/**\n * TauriEvent enum — commonly used constants\n */\nexport enum TauriEvent {\n WINDOW_RESIZED = 'tauri://resize',\n WINDOW_MOVED = 'tauri://move',\n WINDOW_CLOSE_REQUESTED = 'tauri://close-requested',\n WINDOW_FOCUS = 'tauri://focus',\n WINDOW_BLUR = 'tauri://blur',\n}\n","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\nexport class CorePlugin implements KernelPlugin {\n name = 'core';\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('get_app_info', async () => {\n return {\n name: 'r1-app',\n version: '0.1.0',\n tauriVersion: '2.0.0-r1',\n };\n });\n\n return commands;\n }\n}\n\n// invoke — the primary way to call Rust commands\nexport async function invoke<T = unknown>(\n cmd: string,\n args?: Record<string, unknown>\n): Promise<T> {\n return (window as any).__TAURI_INTERNALS__.invoke(cmd, args);\n}\n\n// transformCallback — used internally by Tauri's event system\nexport function transformCallback(\n callback: (response: unknown) => void,\n once = false\n): number {\n return (window as any).__TAURI_INTERNALS__.transformCallback(callback, once);\n}\n\n// convertFileSrc — converts a VFS path to an asset URL\nexport function convertFileSrc(filePath: string, _protocol = 'asset'): string {\n return (window as any).__TAURI_INTERNALS__?.convertFileSrc?.(filePath)\n ?? `https://r1-asset.localhost${filePath}`;\n}\n","import { KernelPlugin, KernelHandler, VFS } from '@r1/kernel';\n\n/**\n * A JSON-backed key-value store that persists to the VFS.\n * Maps closely to the @tauri-apps/plugin-store.\n */\nexport class StorePlugin implements KernelPlugin {\n name = 'store';\n private vfs: VFS;\n private caches: Map<string, Record<string, any>> = new Map();\n\n constructor(vfs: VFS) {\n this.vfs = vfs;\n }\n\n private async getStore(name: string): Promise<Record<string, any>> {\n if (this.caches.has(name)) return this.caches.get(name)!;\n\n const path = `/.r1-store/${name}.json`;\n if (await this.vfs.exists(path)) {\n try {\n const text = await this.vfs.readText(path);\n const data = JSON.parse(text);\n this.caches.set(name, data);\n return data;\n } catch (e) {\n console.error(`[StorePlugin] Failed to parse store ${name}:`, e);\n }\n }\n\n const initial = {};\n this.caches.set(name, initial);\n return initial;\n }\n\n private async saveStore(name: string, data: Record<string, any>): Promise<void> {\n const path = `/.r1-store/${name}.json`;\n await this.vfs.writeText(path, JSON.stringify(data));\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('set', async (payload: { name: string; key: string; value: any }) => {\n const store = await this.getStore(payload.name);\n store[payload.key] = payload.value;\n await this.saveStore(payload.name, store);\n return null;\n });\n\n commands.set('get', async (payload: { name: string; key: string }) => {\n const store = await this.getStore(payload.name);\n return store[payload.key];\n });\n\n commands.set('has', async (payload: { name: string; key: string }) => {\n const store = await this.getStore(payload.name);\n return payload.key in store;\n });\n\n commands.set('delete', async (payload: { name: string; key: string }) => {\n const store = await this.getStore(payload.name);\n delete store[payload.key];\n await this.saveStore(payload.name, store);\n return null;\n });\n\n commands.set('keys', async (payload: { name: string }) => {\n const store = await this.getStore(payload.name);\n return Object.keys(store);\n });\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/plugin-store imports) ─────────────\n\n/**\n * A client-side proxy for the Store plugin.\n * Every method invokes the kernel equivalent.\n */\nexport class Store {\n path: string;\n\n constructor(path: string) {\n this.path = path;\n }\n\n async set(key: string, value: any): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:set', { name: this.path, key, value });\n }\n\n async get<T>(key: string): Promise<T | null> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:get', { name: this.path, key });\n }\n\n async has(key: string): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:has', { name: this.path, key });\n }\n\n async delete(key: string): Promise<boolean> {\n await (window as any).__TAURI_INTERNALS__.invoke('store:delete', { name: this.path, key });\n return true;\n }\n\n async clear(): Promise<void> {\n const keys = await this.keys();\n for (const key of keys) {\n await this.delete(key);\n }\n }\n\n async keys(): Promise<string[]> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:keys', { name: this.path });\n }\n\n async values(): Promise<any[]> {\n const keys = await this.keys();\n const values = [];\n for (const key of keys) {\n values.push(await this.get(key));\n }\n return values;\n }\n\n async entries<T>(): Promise<Array<[string, T]>> {\n const keys = await this.keys();\n const entries: Array<[string, T]> = [];\n for (const key of keys) {\n entries.push([key, await this.get<T>(key) as T]);\n }\n return entries;\n }\n\n async save(): Promise<void> {\n // In our implementation, every set() is already persisted to VFS.\n return Promise.resolve();\n }\n\n async load(): Promise<void> {\n // In our implementation, every method automatically interacts dynamically with getStore.\n return Promise.resolve();\n }\n\n async length(): Promise<number> {\n const k = await this.keys();\n return k.length;\n }\n}\n","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\nexport class OsPlugin implements KernelPlugin {\n name = 'os';\n private onMainThreadCall: (api: string, method: string, args: any) => Promise<any>;\n\n constructor(onMainThreadCall: (api: string, method: string, args: any) => Promise<any>) {\n this.onMainThreadCall = onMainThreadCall;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('platform', async (args) => this.onMainThreadCall('os', 'platform', args));\n commands.set('arch', async (args) => this.onMainThreadCall('os', 'arch', args));\n commands.set('version', async (args) => this.onMainThreadCall('os', 'version', args));\n commands.set('locale', async (args) => this.onMainThreadCall('os', 'locale', args));\n commands.set('hostname', async (args) => this.onMainThreadCall('os', 'hostname', args));\n commands.set('type', async (args) => this.onMainThreadCall('os', 'type', args));\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/api/os imports) ───────────────────\n\nexport const platform = () => (window as any).__TAURI_INTERNALS__.invoke('os:platform');\nexport const arch = () => (window as any).__TAURI_INTERNALS__.invoke('os:arch');\nexport const version = () => (window as any).__TAURI_INTERNALS__.invoke('os:version');\nexport const locale = () => (window as any).__TAURI_INTERNALS__.invoke('os:locale');\nexport const hostname = () => (window as any).__TAURI_INTERNALS__.invoke('os:hostname');\n\nexport type Platform = 'linux' | 'macos' | 'windows' | 'ios' | 'android';\n","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\nexport class HttpPlugin implements KernelPlugin {\n name = 'http';\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n /**\n * Proxies fetch from the guest app.\n * Note: This is subject to CORS of the browser environment.\n */\n commands.set('fetch', async (payload: { url: string; options?: any }) => {\n const response = await fetch(payload.url, payload.options);\n \n const headers: Record<string, string> = {};\n response.headers.forEach((val, key) => headers[key] = val);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers,\n data: await response.text() // We return text by default, can expand to binary\n };\n });\n\n return commands;\n }\n}\n","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\n/**\n * A generic plugin that forwards calls to the Main Thread.\n * Used for APIs not available in Web Workers (Dialog, Clipboard, etc.)\n */\nexport class MainBridgePlugin implements KernelPlugin {\n name: string;\n private onMainThreadCall: (api: string, method: string, args: any) => Promise<any>;\n\n constructor(name: string, onMainThreadCall: (api: string, method: string, args: any) => Promise<any>) {\n this.name = name;\n this.onMainThreadCall = onMainThreadCall;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n // We can't know the methods ahead of time easily, so we handle them dynamically\n // or register them manually based on the Tauri API specs.\n \n if (this.name === 'dialog') {\n commands.set('message', async (args) => this.onMainThreadCall('dialog', 'message', args));\n commands.set('ask', async (args) => this.onMainThreadCall('dialog', 'ask', args));\n commands.set('confirm', async (args) => this.onMainThreadCall('dialog', 'confirm', args));\n }\n\n if (this.name === 'clipboard') {\n commands.set('write_text', async (args) => this.onMainThreadCall('clipboard', 'write_text', args));\n commands.set('read_text', async (args) => this.onMainThreadCall('clipboard', 'read_text', args));\n }\n\n if (this.name === 'notification') {\n commands.set('notify', async (args) => this.onMainThreadCall('notification', 'notify', args));\n commands.set('request_permission', async (args) => this.onMainThreadCall('notification', 'request_permission', args));\n }\n\n if (this.name === 'shell') {\n commands.set('open', async (args) => this.onMainThreadCall('shell', 'open', args));\n }\n\n return commands;\n }\n}\n","import { KernelPlugin, KernelHandler } from '@r1/kernel';\n\n/**\n * Allows the guest app (WASM/JS) to control its own window.\n */\nexport class WindowPlugin implements KernelPlugin {\n name = 'window';\n private onMainThreadCall: (api: string, method: string, args: any) => Promise<any>;\n\n constructor(onMainThreadCall: (api: string, method: string, args: any) => Promise<any>) {\n this.onMainThreadCall = onMainThreadCall;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n // These commands are proxied to the main thread via the bridge\n commands.set('set_title', async (args) => this.onMainThreadCall('window', 'set_title', args));\n commands.set('close', async (args) => this.onMainThreadCall('window', 'close', args));\n commands.set('maximize', async (args) => this.onMainThreadCall('window', 'maximize', args));\n commands.set('minimize', async (args) => this.onMainThreadCall('window', 'minimize', args));\n commands.set('focus', async (args) => this.onMainThreadCall('window', 'focus', args));\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/api/window imports) ───────────────\n\n/**\n * Interface for unlistening to events.\n */\nexport type UnlistenFn = () => void;\n\n/**\n * Interface for screen size.\n */\nexport interface PhysicalSize {\n width: number;\n height: number;\n}\n\n/**\n * Interface for screen position.\n */\nexport interface PhysicalPosition {\n x: number;\n y: number;\n}\n\n/**\n * Represents a window in the R1 environment.\n * Maps closely to Tauri's WebviewWindow.\n */\nexport class WebviewWindow {\n label: string;\n\n constructor(label: string) {\n this.label = label;\n }\n\n async setTitle(title: string): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_title', { label: this.label, title });\n }\n\n async minimize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:minimize', { label: this.label });\n }\n\n async maximize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:maximize', { label: this.label });\n }\n\n async unmaximize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:unmaximize', { label: this.label });\n }\n\n async toggleMaximize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:toggle_maximize', { label: this.label });\n }\n\n async close(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:close', { label: this.label });\n }\n\n async show(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:show', { label: this.label });\n }\n\n async hide(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:hide', { label: this.label });\n }\n\n async setFocus(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:focus', { label: this.label });\n }\n\n async setSize(size: PhysicalSize): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_size', { label: this.label, width: size.width, height: size.height });\n }\n\n async setPosition(position: PhysicalPosition): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_position', { label: this.label, x: position.x, y: position.y });\n }\n\n async setResizable(resizable: boolean): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_resizable', { label: this.label, resizable });\n }\n\n async setAlwaysOnTop(alwaysOnTop: boolean): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_always_on_top', { label: this.label, alwaysOnTop });\n }\n\n async innerSize(): Promise<PhysicalSize> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:inner_size', { label: this.label });\n }\n\n async outerSize(): Promise<PhysicalSize> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:outer_size', { label: this.label });\n }\n\n async isMaximized(): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:is_maximized', { label: this.label });\n }\n\n async isMinimized(): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:is_minimized', { label: this.label });\n }\n\n async isVisible(): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:is_visible', { label: this.label });\n }\n\n /**\n * Listen for window events.\n */\n async onCloseRequested(handler: () => void): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(`tauri://close-requested`, handler);\n }\n\n async onResized(handler: (size: PhysicalSize) => void): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(`tauri://resize`, (e: any) => handler(e.payload));\n }\n\n async onMoved(handler: (position: PhysicalPosition) => void): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(`tauri://move`, (e: any) => handler(e.payload));\n }\n\n async onFocusChanged(handler: (focused: boolean) => void): Promise<UnlistenFn> {\n const l1 = await (window as any).__TAURI_INTERNALS__.listen(`tauri://focus`, () => handler(true));\n const l2 = await (window as any).__TAURI_INTERNALS__.listen(`tauri://blur`, () => handler(false));\n return () => { l1(); l2(); };\n }\n\n /**\n * Static factory to get a window by label.\n */\n static getByLabel(label: string): WebviewWindow | null {\n // In our single-webview runtime, we only really have 'main'\n if (label === 'main') return appWindow;\n return new WebviewWindow(label);\n }\n}\n\n/**\n * The default window singleton.\n */\nexport const appWindow = new WebviewWindow('main');\n\n// Type aliases Tauri uses\nexport type { WebviewWindow as Window };\n","/**\n * R1 Frontend Shim for @tauri-apps/api/clipboard\n */\n\nexport const writeText = async (text: string): Promise<void> => {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.writeText(text);\n }\n \n // Support HTTP environments\n const textArea = document.createElement(\"textarea\");\n textArea.value = text;\n Object.assign(textArea.style, {\n position: \"fixed\",\n left: \"-999999px\",\n top: \"-999999px\"\n });\n \n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n console.error('[R1 Clipboard] Fallback copy failed', err);\n }\n document.body.removeChild(textArea);\n};\n\nexport const readText = async (): Promise<string | null> => {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.readText();\n }\n return null;\n};\n","/**\n * R1 Frontend Shim for @tauri-apps/api/notification\n */\n\nexport async function sendNotification(options: { title: string; body?: string }): Promise<void> {\n if ('Notification' in window && Notification.permission === 'granted') {\n new Notification(options.title, { body: options.body });\n }\n}\n\nexport async function requestPermission(): Promise<string> {\n if (!('Notification' in window)) return 'denied';\n return Notification.requestPermission();\n}\n\nexport async function isPermissionGranted(): Promise<boolean> {\n if (!('Notification' in window)) return false;\n return Notification.permission === 'granted';\n}\n","/**\n * R1 Frontend Shim for @tauri-apps/api/dialog\n */\n\nexport interface OpenDialogOptions {\n title?: string;\n filters?: Array<{ name: string; extensions: string[] }>;\n defaultPath?: string;\n multiple?: boolean;\n directory?: boolean;\n}\n\nexport interface SaveDialogOptions {\n title?: string;\n filters?: Array<{ name: string; extensions: string[] }>;\n defaultPath?: string;\n}\n\nexport interface MessageDialogOptions {\n title?: string;\n type?: 'info' | 'warning' | 'error';\n okLabel?: string;\n}\n\nexport interface ConfirmDialogOptions extends MessageDialogOptions {\n cancelLabel?: string;\n}\n\n// File picker — uses <input type=\"file\"> under the hood\nexport async function open(\n options?: OpenDialogOptions\n): Promise<string | string[] | null> {\n return new Promise((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n if (options?.multiple) input.multiple = true;\n if (options?.directory) (input as any).webkitdirectory = true;\n if (options?.filters?.length) {\n input.accept = options.filters\n .flatMap((f) => f.extensions.map((e) => `.${e}`))\n .join(',');\n }\n input.onchange = () => {\n if (!input.files?.length) return resolve(null);\n const paths = Array.from(input.files).map((f) => f.name);\n resolve(options?.multiple ? paths : paths[0]);\n };\n input.oncancel = () => resolve(null);\n input.click();\n });\n}\n\n// Save dialog — simulated fallback since native \"Save As\" is not supported outside OPFS natively\nexport async function save(\n options?: SaveDialogOptions\n): Promise<string | null> {\n return new Promise((resolve) => {\n const filename = options?.defaultPath\n ? options.defaultPath.split(/[/\\\\]/).pop()\n : 'download.file';\n resolve(filename || null);\n });\n}\n\n// Custom OS-themed modal framework\nasync function showModal(opts: {\n message: string;\n title?: string;\n type?: 'info' | 'warning' | 'error';\n buttons: string[];\n}): Promise<number> {\n // Returns index of clicked button\n return new Promise((resolve) => {\n const overlay = document.createElement('div');\n overlay.className = 'r1-dialog-overlay';\n Object.assign(overlay.style, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: '999999',\n });\n\n const dialog = document.createElement('div');\n dialog.className = 'r1-dialog-modal';\n Object.assign(dialog.style, {\n backgroundColor: '#ffffff',\n color: '#333333',\n padding: '20px',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n minWidth: '300px',\n fontFamily: 'system-ui, sans-serif',\n });\n\n if (opts.title) {\n const titleEl = document.createElement('h3');\n titleEl.textContent = opts.title;\n Object.assign(titleEl.style, { marginTop: '0', marginBottom: '10px' });\n dialog.appendChild(titleEl);\n }\n\n const msgEl = document.createElement('div');\n msgEl.textContent = opts.message;\n Object.assign(msgEl.style, { marginBottom: '20px', whiteSpace: 'pre-wrap' });\n dialog.appendChild(msgEl);\n\n const btnContainer = document.createElement('div');\n Object.assign(btnContainer.style, {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '10px',\n });\n\n opts.buttons.forEach((btnText, index) => {\n const btn = document.createElement('button');\n btn.textContent = btnText;\n Object.assign(btn.style, {\n padding: '6px 16px',\n borderRadius: '4px',\n border: '1px solid #ccc',\n backgroundColor: index === 0 ? '#007aff' : '#f0f0f0',\n color: index === 0 ? '#ffffff' : '#333333',\n cursor: 'pointer',\n });\n btn.onclick = () => {\n document.body.removeChild(overlay);\n resolve(index);\n };\n btnContainer.appendChild(btn);\n });\n\n dialog.appendChild(btnContainer);\n overlay.appendChild(dialog);\n document.body.appendChild(overlay);\n });\n}\n\n// Message dialog — OS-themed modal\nexport async function message(\n msg: string,\n options?: MessageDialogOptions\n): Promise<void> {\n await showModal({\n message: msg,\n title: options?.title || 'Message',\n type: options?.type,\n buttons: [options?.okLabel || 'OK'],\n });\n}\n\n// Ask dialog — returns true (Yes) or false (No)\nexport async function ask(\n msg: string,\n options?: ConfirmDialogOptions\n): Promise<boolean> {\n const btnIndex = await showModal({\n message: msg,\n title: options?.title || 'Question',\n type: options?.type,\n buttons: [options?.okLabel || 'Yes', options?.cancelLabel || 'No'],\n });\n return btnIndex === 0;\n}\n\n// Confirm dialog — returns true (OK) or false (Cancel)\nexport async function confirm(\n msg: string,\n options?: ConfirmDialogOptions\n): Promise<boolean> {\n const btnIndex = await showModal({\n message: msg,\n title: options?.title || 'Confirm',\n type: options?.type,\n buttons: [options?.okLabel || 'OK', options?.cancelLabel || 'Cancel'],\n });\n return btnIndex === 0;\n}\n","/**\n * R1 Frontend Shim for @tauri-apps/api/shell\n */\n\nexport async function open(path: string): Promise<void> {\n window.open(path, '_blank');\n}\n\nexport class Command {\n static create() { return new Command(); }\n async execute() {\n console.warn('[R1] shell.Command.execute() is not supported in the browser');\n return { code: 1, stdout: '', stderr: 'Not supported in browser' };\n }\n}\n","import { invoke } from './core';\n\n/**\n * Result of a database execution that doesn't return rows.\n */\nexport interface QueryResult {\n /** The last inserted row ID. */\n lastInsertId: number;\n /** The number of rows affected by the query. */\n rowsAffected: number;\n}\n\n/**\n * A high-performance SQLite Database instance.\n * \n * This class provides a promise-based API for interacting with SQLite databases\n * in the R1 Runtime. It maintains compatibility with the @tauri-apps/plugin-sql interface\n * while using @sqlite.org/sqlite-wasm and OPFS for persistent storage.\n * \n * @example\n * ```typescript\n * const db = await Database.load('sqlite:test.db');\n * await db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');\n * await db.execute('INSERT INTO users (name) VALUES (?)', ['Alice']);\n * const users = await db.select('SELECT * FROM users');\n * ```\n */\nexport class Database {\n private path: string;\n\n constructor(path: string) {\n this.path = path;\n }\n\n /**\n * Loads or creates a database from the given path.\n * \n * @param path - The database path. Should be prefixed with 'sqlite:' (e.g. 'sqlite:production.db').\n * Use ':memory:' for a volatile, in-memory database.\n * @returns A promise resolving to a new Database instance.\n */\n static async load(path: string): Promise<Database> {\n await invoke('plugin:sql|load', { db: path });\n return new Database(path);\n }\n\n /**\n * Executes a query that doesn't return rows, such as INSERT, UPDATE, or DELETE.\n * \n * @param query - The SQL query to execute.\n * @param values - Optional array of values to bind to the query parameters (?).\n * @returns A promise resolving to information about the execution (lastInsertId, rowsAffected).\n */\n async execute(query: string, values: any[] = []): Promise<QueryResult> {\n return await invoke('plugin:sql|execute', {\n db: this.path,\n query,\n values,\n });\n }\n\n /**\n * Executes a SELECT query and returns the resulting rows.\n * \n * @param query - The SQL query to execute.\n * @param values - Optional array of values to bind to the query parameters (?).\n * @returns A promise resolving to an array of objects representing the rows.\n */\n async select<T>(query: string, values: any[] = []): Promise<T> {\n return await invoke('plugin:sql|select', {\n db: this.path,\n query,\n values,\n });\n }\n\n /**\n * Closes the database connection.\n * \n * @returns A promise resolving to true if the database was closed successfully.\n */\n async close(): Promise<boolean> {\n return await invoke('plugin:sql|close', { db: this.path });\n }\n}\n\nexport default Database;\n\n"],"names":["isAbsolute","TauriEvent","once","open","resolve","_a"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sources":["../src/fs.ts","../src/path_util.ts","../src/event.ts","../src/core.ts","../src/store.ts","../src/os.ts","../src/http.ts","../src/main_bridge.ts","../src/window.ts","../src/clipboard/index.ts","../src/notification.ts","../src/dialog/index.ts","../src/shell.ts","../src/sql.ts"],"sourcesContent":["import { KernelPlugin, KernelHandler, VFS } from '@r1-runtime/kernel';\n\n// ─── Plugin (handles invoke() calls) ─────────────────────────────────────────\n\nexport class FsPlugin implements KernelPlugin {\n name = 'fs';\n private vfs: VFS;\n\n constructor(vfs: VFS) {\n this.vfs = vfs;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('read_text_file', async (payload: { path: string }) => {\n return this.vfs.readText(payload.path);\n });\n\n commands.set('write_text_file', async (payload: { path: string; contents: string }) => {\n await this.vfs.writeText(payload.path, payload.contents);\n return null;\n });\n\n commands.set('read_file', async (payload: { path: string }) => {\n const bytes = await this.vfs.read(payload.path);\n return Array.from(bytes);\n });\n\n commands.set('write_file', async (payload: { path: string; contents: number[] }) => {\n await this.vfs.write(payload.path, new Uint8Array(payload.contents));\n return null;\n });\n\n commands.set('exists', async (payload: { path: string }) => {\n return this.vfs.exists(payload.path);\n });\n\n commands.set('read_dir', async (payload: { path: string; recursive?: boolean }) => {\n const entries = await this.vfs.list(payload.path);\n return entries.map((p: string) => ({\n name: p.split('/').pop() || p,\n path: p,\n isDirectory: !p.includes('.'),\n }));\n });\n\n commands.set('create_dir', async (payload: { path: string; recursive?: boolean }) => {\n await this.vfs.mkdir(payload.path);\n return null;\n });\n\n commands.set('remove_file', async (payload: { path: string }) => {\n await this.vfs.delete(payload.path);\n return null;\n });\n\n commands.set('remove_dir', async (payload: { path: string }) => {\n await this.vfs.delete(payload.path);\n return null;\n });\n\n commands.set('rename', async (payload: { oldPath: string; newPath: string }) => {\n const data = await this.vfs.read(payload.oldPath);\n await this.vfs.write(payload.newPath, data);\n await this.vfs.delete(payload.oldPath);\n return null;\n });\n\n commands.set('copy_file', async (payload: { source: string; destination: string }) => {\n const data = await this.vfs.read(payload.source);\n await this.vfs.write(payload.destination, data);\n return null;\n });\n\n return commands;\n }\n}\n\n// ─── Direct JS exports ────────────────────────────────────────────────────────\n// Tauri apps import these directly:\n// import { readDir, readTextFile } from '@tauri-apps/api/fs'\n// The Vite plugin rewrites that import to @r1/apis/fs.\n// These named exports must exist here so the import resolves.\n\nlet _vfs: VFS | null = null;\nlet _initPromise: Promise<VFS> | null = null;\n\nasync function getVfs(): Promise<VFS> {\n if (_vfs) return _vfs;\n if (!_initPromise) {\n _initPromise = (async () => {\n const instance = new VFS();\n await instance.init();\n _vfs = instance;\n return instance;\n })();\n }\n return _initPromise;\n}\n\nexport interface FileEntry {\n name: string;\n path: string;\n isDirectory?: boolean;\n children?: FileEntry[];\n}\n\nexport async function readDir(\n path: string,\n _options?: { recursive?: boolean }\n): Promise<FileEntry[]> {\n const vfs = await getVfs();\n const entries = await vfs.list(path);\n return entries.map((p: string) => ({\n name: p.split('/').pop() || p,\n path: p,\n isDirectory: !p.split('/').pop()?.includes('.'),\n }));\n}\n\nexport async function readTextFile(\n path: string,\n _options?: object\n): Promise<string> {\n const vfs = await getVfs();\n return vfs.readText(path);\n}\n\nexport async function writeTextFile(\n path: string,\n contents: string,\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.writeText(path, contents);\n}\n\nexport async function readBinaryFile(\n path: string,\n _options?: object\n): Promise<Uint8Array> {\n const vfs = await getVfs();\n return vfs.read(path);\n}\n\nexport async function writeBinaryFile(\n path: string,\n contents: Uint8Array | number[],\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n const data = contents instanceof Uint8Array\n ? contents\n : new Uint8Array(contents);\n return vfs.write(path, data);\n}\n\nexport async function exists(path: string): Promise<boolean> {\n const vfs = await getVfs();\n return vfs.exists(path);\n}\n\nexport async function removeFile(\n path: string,\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.delete(path);\n}\n\nexport async function removeDir(\n path: string,\n _options?: object\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.delete(path);\n}\n\nexport async function createDir(\n path: string,\n _options?: { recursive?: boolean }\n): Promise<void> {\n const vfs = await getVfs();\n return vfs.mkdir(path);\n}\n\nexport async function renameFile(\n oldPath: string,\n newPath: string\n): Promise<void> {\n const vfs = await getVfs();\n const data = await vfs.read(oldPath);\n await vfs.write(newPath, data);\n await vfs.delete(oldPath);\n}\n\nexport async function copyFile(\n source: string,\n destination: string\n): Promise<void> {\n const vfs = await getVfs();\n const data = await vfs.read(source);\n await vfs.write(destination, data);\n}","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\n// --- Helpers ----------------------------------------------------------------\n\nfunction posixJoin(...parts: string[]): string {\n return parts\n .filter(p => !!p)\n .join('/')\n .replace(/\\/+/g, '/');\n}\n\nfunction posixNormalize(path: string): string {\n if (!path) return '.';\n const isAbsolute = path.startsWith('/');\n const trailingSlash = path.endsWith('/') && path !== '/';\n \n const parts = path.split('/');\n const result: string[] = [];\n \n for (const p of parts) {\n if (p === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n result.pop();\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else if (p !== '.' && p !== '') {\n result.push(p);\n }\n }\n \n let normalized = result.join('/');\n if (isAbsolute) normalized = '/' + normalized;\n if (normalized === '' && !isAbsolute) normalized = '.';\n if (trailingSlash && !normalized.endsWith('/')) normalized += '/';\n \n return normalized || '/';\n}\n\nfunction posixRelative(from: string, to: string): string {\n const fromParts = posixNormalize(from).split('/').filter(p => !!p);\n const toParts = posixNormalize(to).split('/').filter(p => !!p);\n \n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n \n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] !== toParts[i]) break;\n commonLength++;\n }\n \n const upCount = fromParts.length - commonLength;\n const downParts = toParts.slice(commonLength);\n \n const result = [];\n for (let i = 0; i < upCount; i++) result.push('..');\n result.push(...downParts);\n \n return result.join('/') || '.';\n}\n\nconst VFS_DIRS: Record<string, string> = {\n home: '/home/user',\n app: '/app',\n appData: '/app/data',\n appConfig: '/app/config',\n appLog: '/app/logs',\n appCache: '/app/cache',\n appLocalData: '/app/local',\n desktop: '/home/user/Desktop',\n document: '/home/user/Documents',\n download: '/home/user/Downloads',\n picture: '/home/user/Pictures',\n video: '/home/user/Videos',\n audio: '/home/user/Music',\n temp: '/tmp',\n resource: '/app/resources',\n runtime: '/tmp/runtime',\n config: '/app/config',\n data: '/app/data',\n cache: '/app/cache',\n log: '/app/logs',\n};\n\nexport class PathPlugin implements KernelPlugin {\n name = 'path';\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('join', async (payload: { paths: string[] }) => {\n return posixJoin(...(payload.paths || []));\n });\n\n commands.set('resolve', async (payload: { pathSegments: string[] }) => {\n let resolved = '';\n for (const seg of (payload.pathSegments || [])) {\n if (!seg) continue;\n if (seg.startsWith('/')) resolved = seg;\n else resolved = posixJoin(resolved, seg);\n }\n return posixNormalize(resolved || '/');\n });\n\n commands.set('relative', async (payload: { from: string; to: string }) => {\n return posixRelative(payload.from || '/', payload.to || '/');\n });\n\n commands.set('normalize', async (payload: { path: string }) => {\n return posixNormalize(payload.path || '.');\n });\n\n commands.set('basename', async (payload: { path: string; ext?: string }) => {\n const path = payload.path || '';\n if (!path) return '';\n const p = path.endsWith('/') && path.length > 1 ? path.slice(0, -1) : path;\n let base = p.split('/').pop() || '';\n if (payload.ext && base.endsWith(payload.ext)) {\n base = base.slice(0, -payload.ext.length);\n }\n return base;\n });\n\n commands.set('dirname', async (payload: { path: string }) => {\n if (!payload.path) return '/';\n const parts = payload.path.split('/');\n parts.pop();\n return parts.join('/') || '/';\n });\n\n commands.set('extname', async (payload: { path: string }) => {\n const path = payload.path || '';\n const base = path.split('/').pop() || '';\n const dot = base.lastIndexOf('.');\n return dot > 0 ? base.slice(dot) : '';\n });\n\n commands.set('isAbsolute', async (payload: { path: string }) => {\n const path = payload.path || '';\n return path.startsWith('/') || path.startsWith('\\\\');\n });\n\n for (const [key, vfsPath] of Object.entries(VFS_DIRS)) {\n commands.set(`${key}Dir`, async () => vfsPath);\n }\n\n commands.set('sep', async () => '/');\n commands.set('delimiter', async () => ':');\n\n return commands;\n }\n}\n\nexport const homeDir = () => Promise.resolve(VFS_DIRS.home);\nexport const appDir = () => Promise.resolve(VFS_DIRS.app);\nexport const appDataDir = () => Promise.resolve(VFS_DIRS.appData);\nexport const appConfigDir = () => Promise.resolve(VFS_DIRS.appConfig);\nexport const appLogDir = () => Promise.resolve(VFS_DIRS.appLog);\nexport const appCacheDir = () => Promise.resolve(VFS_DIRS.appCache);\nexport const appLocalDataDir = () => Promise.resolve(VFS_DIRS.appLocalData);\nexport const desktopDir = () => Promise.resolve(VFS_DIRS.desktop);\nexport const documentDir = () => Promise.resolve(VFS_DIRS.document);\nexport const downloadDir = () => Promise.resolve(VFS_DIRS.download);\nexport const pictureDir = () => Promise.resolve(VFS_DIRS.picture);\nexport const videoDir = () => Promise.resolve(VFS_DIRS.video);\nexport const audioDir = () => Promise.resolve(VFS_DIRS.audio);\nexport const tempDir = () => Promise.resolve(VFS_DIRS.temp);\nexport const resourceDir = () => Promise.resolve(VFS_DIRS.resource);\nexport const runtimeDir = () => Promise.resolve(VFS_DIRS.runtime);\nexport const configDir = () => Promise.resolve(VFS_DIRS.config);\nexport const dataDir = () => Promise.resolve(VFS_DIRS.data);\nexport const cacheDir = () => Promise.resolve(VFS_DIRS.cache);\nexport const logDir = () => Promise.resolve(VFS_DIRS.log);\n\nexport const resolve = (...paths: string[]) => {\n let resolved = '';\n for (const seg of paths) {\n if (!seg) continue;\n if (seg.startsWith('/')) resolved = seg;\n else resolved = posixJoin(resolved, seg);\n }\n return Promise.resolve(posixNormalize(resolved || '/'));\n};\n\nexport const normalize = (path: string) => Promise.resolve(posixNormalize(path || '.'));\nexport const join = (...paths: string[]) => Promise.resolve(posixJoin(...paths.filter(Boolean)));\nexport const relative = (from: string, to: string) => Promise.resolve(posixRelative(from || '/', to || '/'));\n\nexport const basename = (path: string, ext?: string) => {\n if (!path) return Promise.resolve('');\n const p = path.endsWith('/') && path.length > 1 ? path.slice(0, -1) : path;\n let base = p.split('/').pop() || '';\n if (ext && base.endsWith(ext)) base = base.slice(0, -ext.length);\n return Promise.resolve(base);\n};\n\nexport const dirname = (path: string) => {\n if (!path) return Promise.resolve('/');\n const parts = path.split('/');\n parts.pop();\n return Promise.resolve(parts.join('/') || '/');\n};\n\nexport const extname = (path: string) => {\n if (!path) return Promise.resolve('');\n const base = path.split('/').pop() || '';\n const dot = base.lastIndexOf('.');\n return Promise.resolve(dot > 0 ? base.slice(dot) : '');\n};\n\nexport const isAbsolute = (path: string) => Promise.resolve(!!path && (path.startsWith('/') || path.startsWith('\\\\')));\nexport const sep = '/';\nexport const delimiter = ':';\r\n","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\nexport class EventPlugin implements KernelPlugin {\n name = 'event';\n private onEmit: (event: string, payload: any) => void;\n\n constructor(onEmit: (event: string, payload: any) => void) {\n this.onEmit = onEmit;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n // Note: JS -> Rust events usually go through invoke(\"event:emit\", ...)\n commands.set('emit', async (payload: { event: string; payload: any }) => {\n this.onEmit(payload.event, payload.payload);\n return null;\n });\n\n // listen and unlisten are handled on the main thread via IPC Bridge patching,\n // as it's purely a JS-to-JS event registration on the main EventBus.\n // But we can add stubs here if needed for cross-plugin events.\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/api/event imports) ────────────────\n\nexport interface Event<T> {\n event: string;\n windowLabel: string;\n id: number;\n payload: T;\n}\n\nexport type EventCallback<T> = (event: Event<T>) => void;\nexport type UnlistenFn = () => void;\n\n/**\n * Global Event Bus singleton access. \n * We use window.__TAURI_INTERNALS__.listen which is patched by the IPC Bridge.\n */\nexport async function listen<T>(\n event: string,\n handler: EventCallback<T>\n): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(event, handler);\n}\n\nexport async function once<T>(\n event: string,\n handler: EventCallback<T>\n): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.once(event, handler);\n}\n\nexport async function emit(\n event: string,\n payload?: unknown\n): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('event:emit', { event, payload });\n}\n\nexport async function unlisten(\n event: string,\n eventId: number\n): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.unlisten(event, eventId);\n}\n\n/**\n * TauriEvent enum — commonly used constants\n */\nexport enum TauriEvent {\n WINDOW_RESIZED = 'tauri://resize',\n WINDOW_MOVED = 'tauri://move',\n WINDOW_CLOSE_REQUESTED = 'tauri://close-requested',\n WINDOW_FOCUS = 'tauri://focus',\n WINDOW_BLUR = 'tauri://blur',\n}\n","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\nexport class CorePlugin implements KernelPlugin {\n name = 'core';\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('get_app_info', async () => {\n return {\n name: 'r1-app',\n version: '0.1.0',\n tauriVersion: '2.0.0-r1',\n };\n });\n\n return commands;\n }\n}\n\n// invoke — the primary way to call Rust commands\nexport async function invoke<T = unknown>(\n cmd: string,\n args?: Record<string, unknown>\n): Promise<T> {\n return (window as any).__TAURI_INTERNALS__.invoke(cmd, args);\n}\n\n// transformCallback — used internally by Tauri's event system\nexport function transformCallback(\n callback: (response: unknown) => void,\n once = false\n): number {\n return (window as any).__TAURI_INTERNALS__.transformCallback(callback, once);\n}\n\n// convertFileSrc — converts a VFS path to an asset URL\nexport function convertFileSrc(filePath: string, _protocol = 'asset'): string {\n return (window as any).__TAURI_INTERNALS__?.convertFileSrc?.(filePath)\n ?? `https://r1-asset.localhost${filePath}`;\n}\n","import { KernelPlugin, KernelHandler, VFS } from '@r1-runtime/kernel';\n\n/**\n * A JSON-backed key-value store that persists to the VFS.\n * Maps closely to the @tauri-apps/plugin-store.\n */\nexport class StorePlugin implements KernelPlugin {\n name = 'store';\n private vfs: VFS;\n private caches: Map<string, Record<string, any>> = new Map();\n\n constructor(vfs: VFS) {\n this.vfs = vfs;\n }\n\n private async getStore(name: string): Promise<Record<string, any>> {\n if (this.caches.has(name)) return this.caches.get(name)!;\n\n const path = `/.r1-store/${name}.json`;\n if (await this.vfs.exists(path)) {\n try {\n const text = await this.vfs.readText(path);\n const data = JSON.parse(text);\n this.caches.set(name, data);\n return data;\n } catch (e) {\n console.error(`[StorePlugin] Failed to parse store ${name}:`, e);\n }\n }\n\n const initial = {};\n this.caches.set(name, initial);\n return initial;\n }\n\n private async saveStore(name: string, data: Record<string, any>): Promise<void> {\n const path = `/.r1-store/${name}.json`;\n await this.vfs.writeText(path, JSON.stringify(data));\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('set', async (payload: { name: string; key: string; value: any }) => {\n const store = await this.getStore(payload.name);\n store[payload.key] = payload.value;\n await this.saveStore(payload.name, store);\n return null;\n });\n\n commands.set('get', async (payload: { name: string; key: string }) => {\n const store = await this.getStore(payload.name);\n return store[payload.key];\n });\n\n commands.set('has', async (payload: { name: string; key: string }) => {\n const store = await this.getStore(payload.name);\n return payload.key in store;\n });\n\n commands.set('delete', async (payload: { name: string; key: string }) => {\n const store = await this.getStore(payload.name);\n delete store[payload.key];\n await this.saveStore(payload.name, store);\n return null;\n });\n\n commands.set('keys', async (payload: { name: string }) => {\n const store = await this.getStore(payload.name);\n return Object.keys(store);\n });\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/plugin-store imports) ─────────────\n\n/**\n * A client-side proxy for the Store plugin.\n * Every method invokes the kernel equivalent.\n */\nexport class Store {\n path: string;\n\n constructor(path: string) {\n this.path = path;\n }\n\n async set(key: string, value: any): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:set', { name: this.path, key, value });\n }\n\n async get<T>(key: string): Promise<T | null> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:get', { name: this.path, key });\n }\n\n async has(key: string): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:has', { name: this.path, key });\n }\n\n async delete(key: string): Promise<boolean> {\n await (window as any).__TAURI_INTERNALS__.invoke('store:delete', { name: this.path, key });\n return true;\n }\n\n async clear(): Promise<void> {\n const keys = await this.keys();\n for (const key of keys) {\n await this.delete(key);\n }\n }\n\n async keys(): Promise<string[]> {\n return (window as any).__TAURI_INTERNALS__.invoke('store:keys', { name: this.path });\n }\n\n async values(): Promise<any[]> {\n const keys = await this.keys();\n const values = [];\n for (const key of keys) {\n values.push(await this.get(key));\n }\n return values;\n }\n\n async entries<T>(): Promise<Array<[string, T]>> {\n const keys = await this.keys();\n const entries: Array<[string, T]> = [];\n for (const key of keys) {\n entries.push([key, await this.get<T>(key) as T]);\n }\n return entries;\n }\n\n async save(): Promise<void> {\n // In our implementation, every set() is already persisted to VFS.\n return Promise.resolve();\n }\n\n async load(): Promise<void> {\n // In our implementation, every method automatically interacts dynamically with getStore.\n return Promise.resolve();\n }\n\n async length(): Promise<number> {\n const k = await this.keys();\n return k.length;\n }\n}\n","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\nexport class OsPlugin implements KernelPlugin {\n name = 'os';\n private onMainThreadCall: (api: string, method: string, args: any) => Promise<any>;\n\n constructor(onMainThreadCall: (api: string, method: string, args: any) => Promise<any>) {\n this.onMainThreadCall = onMainThreadCall;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n commands.set('platform', async (args) => this.onMainThreadCall('os', 'platform', args));\n commands.set('arch', async (args) => this.onMainThreadCall('os', 'arch', args));\n commands.set('version', async (args) => this.onMainThreadCall('os', 'version', args));\n commands.set('locale', async (args) => this.onMainThreadCall('os', 'locale', args));\n commands.set('hostname', async (args) => this.onMainThreadCall('os', 'hostname', args));\n commands.set('type', async (args) => this.onMainThreadCall('os', 'type', args));\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/api/os imports) ───────────────────\n\nexport const platform = () => (window as any).__TAURI_INTERNALS__.invoke('os:platform');\nexport const arch = () => (window as any).__TAURI_INTERNALS__.invoke('os:arch');\nexport const version = () => (window as any).__TAURI_INTERNALS__.invoke('os:version');\nexport const locale = () => (window as any).__TAURI_INTERNALS__.invoke('os:locale');\nexport const hostname = () => (window as any).__TAURI_INTERNALS__.invoke('os:hostname');\n\nexport type Platform = 'linux' | 'macos' | 'windows' | 'ios' | 'android';\n","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\nexport class HttpPlugin implements KernelPlugin {\n name = 'http';\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n /**\n * Proxies fetch from the guest app.\n * Note: This is subject to CORS of the browser environment.\n */\n commands.set('fetch', async (payload: { url: string; options?: any }) => {\n const response = await fetch(payload.url, payload.options);\n \n const headers: Record<string, string> = {};\n response.headers.forEach((val, key) => headers[key] = val);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers,\n data: await response.text() // We return text by default, can expand to binary\n };\n });\n\n return commands;\n }\n}\n","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\n/**\n * A generic plugin that forwards calls to the Main Thread.\n * Used for APIs not available in Web Workers (Dialog, Clipboard, etc.)\n */\nexport class MainBridgePlugin implements KernelPlugin {\n name: string;\n private onMainThreadCall: (api: string, method: string, args: any) => Promise<any>;\n\n constructor(name: string, onMainThreadCall: (api: string, method: string, args: any) => Promise<any>) {\n this.name = name;\n this.onMainThreadCall = onMainThreadCall;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n // We can't know the methods ahead of time easily, so we handle them dynamically\n // or register them manually based on the Tauri API specs.\n \n if (this.name === 'dialog') {\n commands.set('message', async (args) => this.onMainThreadCall('dialog', 'message', args));\n commands.set('ask', async (args) => this.onMainThreadCall('dialog', 'ask', args));\n commands.set('confirm', async (args) => this.onMainThreadCall('dialog', 'confirm', args));\n }\n\n if (this.name === 'clipboard') {\n commands.set('write_text', async (args) => this.onMainThreadCall('clipboard', 'write_text', args));\n commands.set('read_text', async (args) => this.onMainThreadCall('clipboard', 'read_text', args));\n }\n\n if (this.name === 'notification') {\n commands.set('notify', async (args) => this.onMainThreadCall('notification', 'notify', args));\n commands.set('request_permission', async (args) => this.onMainThreadCall('notification', 'request_permission', args));\n }\n\n if (this.name === 'shell') {\n commands.set('open', async (args) => this.onMainThreadCall('shell', 'open', args));\n }\n\n return commands;\n }\n}\n","import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel';\n\n/**\n * Allows the guest app (WASM/JS) to control its own window.\n */\nexport class WindowPlugin implements KernelPlugin {\n name = 'window';\n private onMainThreadCall: (api: string, method: string, args: any) => Promise<any>;\n\n constructor(onMainThreadCall: (api: string, method: string, args: any) => Promise<any>) {\n this.onMainThreadCall = onMainThreadCall;\n }\n\n getCommands(): Map<string, KernelHandler> {\n const commands = new Map<string, KernelHandler>();\n\n // These commands are proxied to the main thread via the bridge\n commands.set('set_title', async (args) => this.onMainThreadCall('window', 'set_title', args));\n commands.set('close', async (args) => this.onMainThreadCall('window', 'close', args));\n commands.set('maximize', async (args) => this.onMainThreadCall('window', 'maximize', args));\n commands.set('minimize', async (args) => this.onMainThreadCall('window', 'minimize', args));\n commands.set('focus', async (args) => this.onMainThreadCall('window', 'focus', args));\n\n return commands;\n }\n}\n\n// ─── Direct JS exports (used by @tauri-apps/api/window imports) ───────────────\n\n/**\n * Interface for unlistening to events.\n */\nexport type UnlistenFn = () => void;\n\n/**\n * Interface for screen size.\n */\nexport interface PhysicalSize {\n width: number;\n height: number;\n}\n\n/**\n * Interface for screen position.\n */\nexport interface PhysicalPosition {\n x: number;\n y: number;\n}\n\n/**\n * Represents a window in the R1 environment.\n * Maps closely to Tauri's WebviewWindow.\n */\nexport class WebviewWindow {\n label: string;\n\n constructor(label: string) {\n this.label = label;\n }\n\n async setTitle(title: string): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_title', { label: this.label, title });\n }\n\n async minimize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:minimize', { label: this.label });\n }\n\n async maximize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:maximize', { label: this.label });\n }\n\n async unmaximize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:unmaximize', { label: this.label });\n }\n\n async toggleMaximize(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:toggle_maximize', { label: this.label });\n }\n\n async close(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:close', { label: this.label });\n }\n\n async show(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:show', { label: this.label });\n }\n\n async hide(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:hide', { label: this.label });\n }\n\n async setFocus(): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:focus', { label: this.label });\n }\n\n async setSize(size: PhysicalSize): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_size', { label: this.label, width: size.width, height: size.height });\n }\n\n async setPosition(position: PhysicalPosition): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_position', { label: this.label, x: position.x, y: position.y });\n }\n\n async setResizable(resizable: boolean): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_resizable', { label: this.label, resizable });\n }\n\n async setAlwaysOnTop(alwaysOnTop: boolean): Promise<void> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:set_always_on_top', { label: this.label, alwaysOnTop });\n }\n\n async innerSize(): Promise<PhysicalSize> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:inner_size', { label: this.label });\n }\n\n async outerSize(): Promise<PhysicalSize> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:outer_size', { label: this.label });\n }\n\n async isMaximized(): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:is_maximized', { label: this.label });\n }\n\n async isMinimized(): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:is_minimized', { label: this.label });\n }\n\n async isVisible(): Promise<boolean> {\n return (window as any).__TAURI_INTERNALS__.invoke('window:is_visible', { label: this.label });\n }\n\n /**\n * Listen for window events.\n */\n async onCloseRequested(handler: () => void): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(`tauri://close-requested`, handler);\n }\n\n async onResized(handler: (size: PhysicalSize) => void): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(`tauri://resize`, (e: any) => handler(e.payload));\n }\n\n async onMoved(handler: (position: PhysicalPosition) => void): Promise<UnlistenFn> {\n return (window as any).__TAURI_INTERNALS__.listen(`tauri://move`, (e: any) => handler(e.payload));\n }\n\n async onFocusChanged(handler: (focused: boolean) => void): Promise<UnlistenFn> {\n const l1 = await (window as any).__TAURI_INTERNALS__.listen(`tauri://focus`, () => handler(true));\n const l2 = await (window as any).__TAURI_INTERNALS__.listen(`tauri://blur`, () => handler(false));\n return () => { l1(); l2(); };\n }\n\n /**\n * Static factory to get a window by label.\n */\n static getByLabel(label: string): WebviewWindow | null {\n // In our single-webview runtime, we only really have 'main'\n if (label === 'main') return appWindow;\n return new WebviewWindow(label);\n }\n}\n\n/**\n * The default window singleton.\n */\nexport const appWindow = new WebviewWindow('main');\n\n// Type aliases Tauri uses\nexport type { WebviewWindow as Window };\n","/**\n * R1 Frontend Shim for @tauri-apps/api/clipboard\n */\n\nexport const writeText = async (text: string): Promise<void> => {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.writeText(text);\n }\n \n // Support HTTP environments\n const textArea = document.createElement(\"textarea\");\n textArea.value = text;\n Object.assign(textArea.style, {\n position: \"fixed\",\n left: \"-999999px\",\n top: \"-999999px\"\n });\n \n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n console.error('[R1 Clipboard] Fallback copy failed', err);\n }\n document.body.removeChild(textArea);\n};\n\nexport const readText = async (): Promise<string | null> => {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.readText();\n }\n return null;\n};\n","/**\n * R1 Frontend Shim for @tauri-apps/api/notification\n */\n\nexport async function sendNotification(options: { title: string; body?: string }): Promise<void> {\n if ('Notification' in window && Notification.permission === 'granted') {\n new Notification(options.title, { body: options.body });\n }\n}\n\nexport async function requestPermission(): Promise<string> {\n if (!('Notification' in window)) return 'denied';\n return Notification.requestPermission();\n}\n\nexport async function isPermissionGranted(): Promise<boolean> {\n if (!('Notification' in window)) return false;\n return Notification.permission === 'granted';\n}\n","/**\n * R1 Frontend Shim for @tauri-apps/api/dialog\n */\n\nexport interface OpenDialogOptions {\n title?: string;\n filters?: Array<{ name: string; extensions: string[] }>;\n defaultPath?: string;\n multiple?: boolean;\n directory?: boolean;\n}\n\nexport interface SaveDialogOptions {\n title?: string;\n filters?: Array<{ name: string; extensions: string[] }>;\n defaultPath?: string;\n}\n\nexport interface MessageDialogOptions {\n title?: string;\n type?: 'info' | 'warning' | 'error';\n okLabel?: string;\n}\n\nexport interface ConfirmDialogOptions extends MessageDialogOptions {\n cancelLabel?: string;\n}\n\n// File picker — uses <input type=\"file\"> under the hood\nexport async function open(\n options?: OpenDialogOptions\n): Promise<string | string[] | null> {\n return new Promise((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n if (options?.multiple) input.multiple = true;\n if (options?.directory) (input as any).webkitdirectory = true;\n if (options?.filters?.length) {\n input.accept = options.filters\n .flatMap((f) => f.extensions.map((e) => `.${e}`))\n .join(',');\n }\n input.onchange = () => {\n if (!input.files?.length) return resolve(null);\n const paths = Array.from(input.files).map((f) => f.name);\n resolve(options?.multiple ? paths : paths[0]);\n };\n input.oncancel = () => resolve(null);\n input.click();\n });\n}\n\n// Save dialog — simulated fallback since native \"Save As\" is not supported outside OPFS natively\nexport async function save(\n options?: SaveDialogOptions\n): Promise<string | null> {\n return new Promise((resolve) => {\n const filename = options?.defaultPath\n ? options.defaultPath.split(/[/\\\\]/).pop()\n : 'download.file';\n resolve(filename || null);\n });\n}\n\n// Custom OS-themed modal framework\nasync function showModal(opts: {\n message: string;\n title?: string;\n type?: 'info' | 'warning' | 'error';\n buttons: string[];\n}): Promise<number> {\n // Returns index of clicked button\n return new Promise((resolve) => {\n const overlay = document.createElement('div');\n overlay.className = 'r1-dialog-overlay';\n Object.assign(overlay.style, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: '999999',\n });\n\n const dialog = document.createElement('div');\n dialog.className = 'r1-dialog-modal';\n Object.assign(dialog.style, {\n backgroundColor: '#ffffff',\n color: '#333333',\n padding: '20px',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n minWidth: '300px',\n fontFamily: 'system-ui, sans-serif',\n });\n\n if (opts.title) {\n const titleEl = document.createElement('h3');\n titleEl.textContent = opts.title;\n Object.assign(titleEl.style, { marginTop: '0', marginBottom: '10px' });\n dialog.appendChild(titleEl);\n }\n\n const msgEl = document.createElement('div');\n msgEl.textContent = opts.message;\n Object.assign(msgEl.style, { marginBottom: '20px', whiteSpace: 'pre-wrap' });\n dialog.appendChild(msgEl);\n\n const btnContainer = document.createElement('div');\n Object.assign(btnContainer.style, {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '10px',\n });\n\n opts.buttons.forEach((btnText, index) => {\n const btn = document.createElement('button');\n btn.textContent = btnText;\n Object.assign(btn.style, {\n padding: '6px 16px',\n borderRadius: '4px',\n border: '1px solid #ccc',\n backgroundColor: index === 0 ? '#007aff' : '#f0f0f0',\n color: index === 0 ? '#ffffff' : '#333333',\n cursor: 'pointer',\n });\n btn.onclick = () => {\n document.body.removeChild(overlay);\n resolve(index);\n };\n btnContainer.appendChild(btn);\n });\n\n dialog.appendChild(btnContainer);\n overlay.appendChild(dialog);\n document.body.appendChild(overlay);\n });\n}\n\n// Message dialog — OS-themed modal\nexport async function message(\n msg: string,\n options?: MessageDialogOptions\n): Promise<void> {\n await showModal({\n message: msg,\n title: options?.title || 'Message',\n type: options?.type,\n buttons: [options?.okLabel || 'OK'],\n });\n}\n\n// Ask dialog — returns true (Yes) or false (No)\nexport async function ask(\n msg: string,\n options?: ConfirmDialogOptions\n): Promise<boolean> {\n const btnIndex = await showModal({\n message: msg,\n title: options?.title || 'Question',\n type: options?.type,\n buttons: [options?.okLabel || 'Yes', options?.cancelLabel || 'No'],\n });\n return btnIndex === 0;\n}\n\n// Confirm dialog — returns true (OK) or false (Cancel)\nexport async function confirm(\n msg: string,\n options?: ConfirmDialogOptions\n): Promise<boolean> {\n const btnIndex = await showModal({\n message: msg,\n title: options?.title || 'Confirm',\n type: options?.type,\n buttons: [options?.okLabel || 'OK', options?.cancelLabel || 'Cancel'],\n });\n return btnIndex === 0;\n}\n","/**\n * R1 Frontend Shim for @tauri-apps/api/shell\n */\n\nexport async function open(path: string): Promise<void> {\n window.open(path, '_blank');\n}\n\nexport class Command {\n static create() { return new Command(); }\n async execute() {\n console.warn('[R1] shell.Command.execute() is not supported in the browser');\n return { code: 1, stdout: '', stderr: 'Not supported in browser' };\n }\n}\n","import { invoke } from './core';\n\n/**\n * Result of a database execution that doesn't return rows.\n */\nexport interface QueryResult {\n /** The last inserted row ID. */\n lastInsertId: number;\n /** The number of rows affected by the query. */\n rowsAffected: number;\n}\n\n/**\n * A high-performance SQLite Database instance.\n * \n * This class provides a promise-based API for interacting with SQLite databases\n * in the R1 Runtime. It maintains compatibility with the @tauri-apps/plugin-sql interface\n * while using @sqlite.org/sqlite-wasm and OPFS for persistent storage.\n * \n * @example\n * ```typescript\n * const db = await Database.load('sqlite:test.db');\n * await db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');\n * await db.execute('INSERT INTO users (name) VALUES (?)', ['Alice']);\n * const users = await db.select('SELECT * FROM users');\n * ```\n */\nexport class Database {\n private path: string;\n\n constructor(path: string) {\n this.path = path;\n }\n\n /**\n * Loads or creates a database from the given path.\n * \n * @param path - The database path. Should be prefixed with 'sqlite:' (e.g. 'sqlite:production.db').\n * Use ':memory:' for a volatile, in-memory database.\n * @returns A promise resolving to a new Database instance.\n */\n static async load(path: string): Promise<Database> {\n await invoke('plugin:sql|load', { db: path });\n return new Database(path);\n }\n\n /**\n * Executes a query that doesn't return rows, such as INSERT, UPDATE, or DELETE.\n * \n * @param query - The SQL query to execute.\n * @param values - Optional array of values to bind to the query parameters (?).\n * @returns A promise resolving to information about the execution (lastInsertId, rowsAffected).\n */\n async execute(query: string, values: any[] = []): Promise<QueryResult> {\n return await invoke('plugin:sql|execute', {\n db: this.path,\n query,\n values,\n });\n }\n\n /**\n * Executes a SELECT query and returns the resulting rows.\n * \n * @param query - The SQL query to execute.\n * @param values - Optional array of values to bind to the query parameters (?).\n * @returns A promise resolving to an array of objects representing the rows.\n */\n async select<T>(query: string, values: any[] = []): Promise<T> {\n return await invoke('plugin:sql|select', {\n db: this.path,\n query,\n values,\n });\n }\n\n /**\n * Closes the database connection.\n * \n * @returns A promise resolving to true if the database was closed successfully.\n */\n async close(): Promise<boolean> {\n return await invoke('plugin:sql|close', { db: this.path });\n }\n}\n\nexport default Database;\n\n"],"names":["isAbsolute","TauriEvent","once","open","resolve","_a"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "@r1-runtime/apis", | ||
| "version": "0.3.1", | ||
| "version": "0.3.2", | ||
| "description": "Tauri API shims for R1 — fs, path, event, dialog, clipboard, os, window, store, and SQL.", | ||
@@ -5,0 +5,0 @@ "type": "module", |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ export class CorePlugin implements KernelPlugin { |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ export class EventPlugin implements KernelPlugin { |
+1
-1
| import { describe, it, expect, beforeEach } from 'vitest'; | ||
| import { readDir, readTextFile, writeTextFile, exists, createDir, FileEntry } from './fs'; | ||
| import { VFS } from '@r1/kernel'; | ||
| import { VFS } from '@r1-runtime/kernel'; | ||
@@ -5,0 +5,0 @@ // Mock VFS for testing |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler, VFS } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler, VFS } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ // ─── Plugin (handles invoke() calls) ───────────────────────────────────────── |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ export class HttpPlugin implements KernelPlugin { |
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ /** |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ export class OsPlugin implements KernelPlugin { |
+2
-2
@@ -1,4 +0,4 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
| // ─── Helpers ──────────────────────────────────────────────────────────────── | ||
| // --- Helpers ---------------------------------------------------------------- | ||
@@ -5,0 +5,0 @@ function posixJoin(...parts: string[]): string { |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler, VFS } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler, VFS } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ /** |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { KernelPlugin, KernelHandler } from '@r1/kernel'; | ||
| import { KernelPlugin, KernelHandler } from '@r1-runtime/kernel'; | ||
@@ -3,0 +3,0 @@ /** |
171807
-0.04%