# SDK -> Event -> Handler Index

This page maps `packages/utils/transport/sdk/domains/*` to main-process handlers, and lists internal/private transport events that are not wrapped by the SDK.

## B1. App SDK (`packages/utils/transport/sdk/domains/app.ts`)

| SDK Method | Event Name | Main Handler (function-level) |
| --- | --- | --- |
| `close()` | `app:window:close` | `CommonChannel.registerTransportHandlers -> closeApp` |
| `hide()` | `app:window:hide` | `CommonChannel.registerTransportHandlers -> touchApp.window.window.hide` |
| `minimize()` | `app:window:minimize` | `CommonChannel.registerTransportHandlers -> touchApp.window.minimize` |
| `focus()` | `app:window:focus` | `CommonChannel.registerTransportHandlers -> touchApp.window.window.focus` |
| `openDevTools()` | `app:debug:open-devtools` | `CommonChannel.registerTransportHandlers -> touchApp.window.openDevTools` |
| `getCwd()` | `app:system:get-cwd` | `CommonChannel.registerTransportHandlers -> process.cwd()` |
| `getOS()` | `app:system:get-os` | `CommonChannel.registerTransportHandlers -> getOSInformation` |
| `getPackage()` | `app:system:get-package` | `CommonChannel.registerTransportHandlers -> packageJson` |
| `getPath(name)` | `app:system:get-path` | `CommonChannel.registerTransportHandlers -> electronApp.getPath` |
| `openExternal(url)` | `app:system:open-external` | `CommonChannel.registerTransportHandlers -> shell.openExternal` |
| `showInFolder(path)` | `app:system:show-in-folder` | `CommonChannel.registerTransportHandlers -> shell.showItemInFolder` |
| `openApp(options)` | `app:system:open-app` | `CommonChannel.registerTransportHandlers -> shell.openPath/openApp` |
| `executeCommand(options)` | `app:system:execute-command` | `CommonChannel.registerTransportHandlers -> exec` |
| `readFile(path)` | `app:system:read-file` | `CommonChannel.registerTransportHandlers -> readFile` |

## B2. Platform SDK (`packages/utils/transport/sdk/domains/platform.ts`)

| SDK Method | Event Name | Main Handler (function-level) |
| --- | --- | --- |
| `listCapabilities()` | `platform:capabilities:list` | `CommonChannel.registerTransportHandlers -> platformCapabilityRegistry.list` |

## B3. Download SDK (`packages/utils/transport/sdk/domains/download.ts`)

| SDK Method | Event Name | Main Handler (function-level) |
| --- | --- | --- |
| `addTask()` | `download:task:add` | `DownloadCenter.registerTransportHandlers -> addTask` |
| `pauseTask()` | `download:task:pause` | `DownloadCenter.registerTransportHandlers -> pauseTask` |
| `resumeTask()` | `download:task:resume` | `DownloadCenter.registerTransportHandlers -> resumeTask` |
| `cancelTask()` | `download:task:cancel` | `DownloadCenter.registerTransportHandlers -> cancelTask` |
| `retryTask()` | `download:task:retry` | `DownloadCenter.registerTransportHandlers -> retryTask` |
| `removeTask()` | `download:task:remove` | `DownloadCenter.registerTransportHandlers -> removeTask` |
| `updatePriority()` | `download:task:update-priority` | `DownloadCenter.registerTransportHandlers -> updateTaskPriority` |
| `pauseAll()` | `download:task:pause-all` | `DownloadCenter.registerTransportHandlers -> pauseAllTasks` |
| `resumeAll()` | `download:task:resume-all` | `DownloadCenter.registerTransportHandlers -> resumeAllTasks` |
| `cancelAll()` | `download:task:cancel-all` | `DownloadCenter.registerTransportHandlers -> cancelAllTasks` |
| `getAllTasks()` | `download:list:get` | `DownloadCenter.registerTransportHandlers -> getAllTasks` |
| `getTasksByStatus()` | `download:list:get-by-status` | `DownloadCenter.registerTransportHandlers -> getTasksByStatus` |
| `getTaskStatus()` | `download:task:get-status` | `DownloadCenter.registerTransportHandlers -> getTaskStatus` |
| `getConfig()` | `download:config:get` | `DownloadCenter.registerTransportHandlers -> getConfig` |
| `updateConfig()` | `download:config:update` | `DownloadCenter.registerTransportHandlers -> updateConfig` |
| `getNotificationConfig()` | `download:config:get-notification` | `DownloadCenter.registerTransportHandlers -> getNotificationConfig` |
| `updateNotificationConfig()` | `download:config:update-notification` | `DownloadCenter.registerTransportHandlers -> updateNotificationConfig` |
| `getHistory()` | `download:history:get` | `DownloadCenter.registerTransportHandlers -> getTaskHistory` |
| `clearHistory()` | `download:history:clear` | `DownloadCenter.registerTransportHandlers -> clearHistory` |
| `clearHistoryItem()` | `download:history:clear-item` | `DownloadCenter.registerTransportHandlers -> clearHistoryItem` |
| `openFile()` | `download:file:open` | `DownloadCenter.registerTransportHandlers -> openFile` |
| `showInFolder()` | `download:file:show-in-folder` | `DownloadCenter.registerTransportHandlers -> showInFolder` |
| `deleteFile()` | `download:file:delete` | `DownloadCenter.registerTransportHandlers -> deleteFile` |
| `cleanupTemp()` | `download:maintenance:cleanup-temp` | `DownloadCenter.registerTransportHandlers -> cleanupTempFiles` |
| `getTempStats()` | `download:temp:get-stats` | `DownloadCenter.registerTransportHandlers -> getTempStats` |
| `getLogs()` | `download:logs:get` | `DownloadCenter.registerTransportHandlers -> getLogs` |
| `getErrorStats()` | `download:logs:get-error-stats` | `DownloadCenter.registerTransportHandlers -> getErrorStats` |
| `clearLogs()` | `download:logs:clear` | `DownloadCenter.registerTransportHandlers -> clearLogs` |
| `getStats()` | `download:stats:get` | `DownloadCenter.registerTransportHandlers -> getStats` |
| `checkMigrationNeeded()` | `download:migration:check-needed` | `DownloadCenter.registerTransportHandlers -> checkMigrationNeeded` |
| `startMigration()` | `download:migration:start` | `DownloadCenter.registerTransportHandlers -> startMigration` |
| `retryMigration()` | `download:migration:retry` | `DownloadCenter.registerTransportHandlers -> retryMigration` |
| `getMigrationStatus()` | `download:migration:status` | `DownloadCenter.registerTransportHandlers -> getMigrationStatus` |
| `onTaskAdded()` | `download:push:task-added` | `DownloadCenter.broadcastTaskAdded` |
| `onTaskProgress()` | `download:push:task-progress` | `DownloadCenter.broadcastTaskProgress` |
| `onTaskCompleted()` | `download:push:task-completed` | `DownloadCenter.broadcastTaskCompleted` |
| `onTaskFailed()` | `download:push:task-failed` | `DownloadCenter.broadcastTaskFailed` |
| `onTaskUpdated()` | `download:push:task-updated` | `DownloadCenter.broadcastTaskUpdated` |
| `onTaskRetrying()` | `download:push:task-retrying` | `DownloadCenter.startDownloadTask (retryStrategy callback)` |
| `onNotificationClicked()` | `download:push:notification-clicked` | `DownloadCenter.handleNotificationClick` |

## B4. Notification SDK (`packages/utils/transport/sdk/domains/notification.ts`)

| SDK Method | Event Name | Main Handler (function-level) |
| --- | --- | --- |
| `notify()` | `notification:api:notify` | `NotificationModule.registerTransportHandlers -> handleNotify` |
| `update()` | `notification:api:update` | `NotificationModule.registerTransportHandlers -> handleUpdate` |
| `dismiss()` | `notification:api:dismiss` | `NotificationModule.registerTransportHandlers -> handleDismiss` |
| `reportAction()` | `notification:api:action` | `NotificationModule.registerTransportHandlers -> handleAction` |
| `listInbox()` | `notification:inbox:list` | `NotificationModule.registerTransportHandlers -> inbox.list` |
| `markRead()` | `notification:inbox:mark-read` | `NotificationModule.registerTransportHandlers -> handleInboxMarkRead` |
| `archive()` | `notification:inbox:archive` | `NotificationModule.registerTransportHandlers -> handleInboxArchive` |
| `delete()` | `notification:inbox:delete` | `NotificationModule.registerTransportHandlers -> inbox.delete` |
| `clear()` | `notification:inbox:clear` | `NotificationModule.registerTransportHandlers -> inbox.clear` |
| `onNotify()` | `notification:push:notify` | `NotificationModule.handleNotify -> transport.broadcast` |
| `onUpdate()` | `notification:push:update` | `NotificationModule.handleUpdate -> transport.broadcast` |
| `onDismiss()` | `notification:push:dismiss` | `NotificationModule.handleDismiss -> transport.broadcast` |
| `onAction()` | `notification:push:action` | `NotificationModule.handleAction -> transport.broadcast` |
| `onInboxUpdated()` | `notification:push:inbox-updated` | `NotificationModule.handleInbox* -> transport.broadcast` |

## B5. Store SDK (`packages/utils/transport/sdk/domains/store.ts`)

| SDK Method | Event Name | Main Handler (function-level) |
| --- | --- | --- |
| `checkUpdates()` | `store:check-updates` | `PluginModule.start -> triggerUpdateCheck` |
| `search()` | `store:search` | `PluginModule.start -> searchMarket` |
| `getPlugin()` | `store:get-plugin` | `PluginModule.start -> getMarketPlugin` |
| `httpRequest()` | `store:http-request` | `PluginModule.start -> performMarketHttpRequest` |
| `featured()` | `store:featured` | `PluginModule.start -> featured` |
| `npmList()` | `store:npm-list` | `PluginModule.start -> npmList` |
| `onUpdatesAvailable()` | `store:updates-available` | `startUpdateScheduler.onUpdatesFound -> transport.broadcast` |

## B6. Plugin SDK (`packages/utils/transport/sdk/domains/plugin.ts`)

| SDK Method | Event Name | Main Handler (function-level) |
| --- | --- | --- |
| `list()` | `plugin:api:list` | `PluginModule.start -> manager.plugins list` |
| `get()` | `plugin:api:get` | `PluginModule.start -> manager.plugins.get` |
| `getStatus()` | `plugin:api:get-status` | `PluginModule.start -> plugin.status` |
| `enable()` | `plugin:api:enable` | `PluginModule.start -> manager.enablePlugin` |
| `disable()` | `plugin:api:disable` | `PluginModule.start -> manager.disablePlugin` |
| `reload()` | `plugin:api:reload` | `PluginModule.start -> manager.reloadPlugin` |
| `install()` | `plugin:api:install` | `PluginModule.start -> pluginInstaller.install` |
| `uninstall()` | `plugin:api:uninstall` | `PluginModule.start -> manager.uninstallPlugin` |
| `triggerFeature()` | `plugin:api:trigger-feature` | `PluginModule.start -> manager.triggerFeature` |
| `registerWidget()` | `plugin:api:register-widget` | `PluginModule.start -> widgetManager.registerWidget` |
| `featureInputChanged()` | `plugin:api:feature-input-changed` | `PluginModule.start -> manager.featureInputChanged` |
| `openFolder()` | `plugin:api:open-folder` | `PluginModule.start -> shell.openPath` |
| `getOfficialList()` | `plugin:api:get-official-list` | `PluginModule.start -> getOfficialList` |
| `getManifest()` | `plugin:api:get-manifest` | `PluginModule.start -> readManifest` |
| `saveManifest()` | `plugin:api:save-manifest` | `PluginModule.start -> saveManifest` |
| `saveWidgetFile()` | `plugin:api:save-widget-file` | `PluginModule.start -> saveWidgetFile` |
| `getPaths()` | `plugin:api:get-paths` | `PluginModule.start -> resolvePluginPaths` |
| `openPath()` | `plugin:api:open-path` | `PluginModule.start -> shell.openPath` |
| `revealPath()` | `plugin:api:reveal-path` | `PluginModule.start -> shell.showItemInFolder` |
| `getPerformance()` | `plugin:api:get-performance` | `PluginModule.start -> plugin.getPerformanceMetrics` |
| `getRuntimeStats()` | `plugin:api:get-runtime-stats` | `PluginModule.start -> plugin.getRuntimeStats` |
| `reconnectDevServer()` | `plugin:reconnect-dev-server` | `PluginModule.start -> healthMonitor.reconnectDevServer` |
| `getDevServerStatus()` | `plugin:dev-server-status` | `PluginModule.start -> healthMonitor.getStatus` |
| `onStateChanged()` | `plugin:state-changed` | `createPluginManager -> transport.broadcast` |
| `onStatusUpdated()` | `plugin-status-updated` | `TouchPlugin.status setter -> transport.broadcast` |
| `onInstallProgress()` | `plugin:install-progress` | `PluginInstallQueue.emitProgress` |
| `onInstallConfirm()` | `plugin:install-confirm` | `PluginInstallQueue.requestConfirmation` |
| `sendInstallConfirmResponse()` | `plugin:install-confirm-response` | `PluginModule.start -> installQueue.handleConfirmResponse` |
| `installFromSource()` | `plugin:install-source` | `PluginModule.start -> installQueue.enqueue` |

## C. Internal / Private Transport (Non-SDK)

> Note: these events are usually called directly from renderer/plugin processes without SDK wrappers.

### C1. CoreBox raw events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `core-box:trigger` | `CoreBoxWindowManager.show/hide -> channel.broadcastTo` (`apps/core-app/src/main/modules/box-tool/core-box/window.ts`) | `useVisibility -> transport.on` (`apps/core-app/src/renderer/src/modules/box/adapter/hooks/useVisibility.ts`) |
| `core-box:ui-resume` | `CoreBoxWindowManager.attachUIView -> sendToPlugin` (`apps/core-app/src/main/modules/box-tool/core-box/window.ts`) | Plugin UI view process (not in repo) |
| `core-box:hide-input` | Caller: plugin/renderer raw event | `IpcManager.registerTransportHandlers -> setInputVisibility(false)` (`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`) |
| `core-box:show-input` | Caller: plugin/renderer raw event | `IpcManager.registerTransportHandlers -> setInputVisibility(true)` (`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`) |
| `core-box:allow-input` | Caller: plugin/renderer raw event | `IpcManager.registerTransportHandlers -> windowManager.enableInputMonitoring` (`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`) |
| `core-box:set-height` | Caller: plugin/renderer raw event | `IpcManager.registerTransportHandlers -> windowManager.setHeight` (`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`) |
| `core-box:get-bounds` | Caller: plugin/renderer raw event | `IpcManager.registerTransportHandlers -> window.getBounds` (`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`) |
| `core-box:set-position-offset` | Caller: plugin/renderer raw event | `IpcManager.registerTransportHandlers -> windowManager.setPositionOffset` (`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`) |
| `core-box:get-recommendations` | Caller: renderer/background | `SearchEngineCore.init -> recommendationEngine.recommend` (`apps/core-app/src/main/modules/box-tool/search-engine/search-core.ts`) |
| `core-box:aggregate-time-stats` | Caller: renderer/background | `SearchEngineCore.init -> timeStatsAggregator.aggregateTimeStats` (`apps/core-app/src/main/modules/box-tool/search-engine/search-core.ts`) |
| `core-box:is-pinned` | Caller: renderer | `SearchEngineCore.init -> dbUtils.isPinned` (`apps/core-app/src/main/modules/box-tool/search-engine/search-core.ts`) |
| `core-box:clipboard-change` | `ClipboardModule.checkClipboard -> sendToPlugin` (`apps/core-app/src/main/modules/clipboard.ts`) | Plugin UI view process (not in repo) |
| `core-box:clipboard-meta-updated` | `OcrService.broadcastMetaUpdate -> sendToPlugin` (`apps/core-app/src/main/modules/ocr/ocr-service.ts`) | Plugin UI view process (not in repo) |

### C2. Plugin-process raw events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `window:new` | Plugin process (Prelude) | `PluginModule.start -> transport.on(defineRawEvent('window:new'))` (`apps/core-app/src/main/modules/plugin/plugin-module.ts`) |
| `window:visible` | Plugin process (Prelude) | `PluginModule.start -> transport.on(defineRawEvent('window:visible'))` (`apps/core-app/src/main/modules/plugin/plugin-module.ts`) |

### C3. CommonChannel legacy/compat events (App/System)

#### C3.1 App/System

| Event Name | Sender | Handler |
| --- | --- | --- |
| `close` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> closeApp` (`apps/core-app/src/main/channel/common.ts`) |
| `hide` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> touchApp.window.window.hide` (`apps/core-app/src/main/channel/common.ts`) |
| `minimize` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> touchApp.window.minimize` (`apps/core-app/src/main/channel/common.ts`) |
| `dev-tools` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> touchApp.window.openDevTools` (`apps/core-app/src/main/channel/common.ts`) |
| `get-package` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> packageJson` (`apps/core-app/src/main/channel/common.ts`) |
| `open-external` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> shell.openExternal` (`apps/core-app/src/main/channel/common.ts`) |
| `get-os` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> getOSInformation` (`apps/core-app/src/main/channel/common.ts`) |
| `common:cwd` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> process.cwd()` (`apps/core-app/src/main/channel/common.ts`) |
| `common:get-path` | Caller: renderer/plugin (raw event) | `CommonChannel.registerTransportHandlers -> touchApp.app.getPath` (`apps/core-app/src/main/channel/common.ts`) |
| `folder:open` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> shell.showItemInFolder` (`apps/core-app/src/main/channel/common.ts`) |
| `app:open-prompts-folder` | Renderer (`apps/core-app/src/renderer/src/components/intelligence/IntelligencePrompts.vue`) | `CommonChannel.registerTransportHandlers -> shell.showItemInFolder/shell.openPath` (`apps/core-app/src/main/channel/common.ts`) |
| `module:folder` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> shell.openPath` (`apps/core-app/src/main/channel/common.ts`) |
| `execute:cmd` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> shell.openPath` (`apps/core-app/src/main/channel/common.ts`) |
| `app:open` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> shell.openPath` (`apps/core-app/src/main/channel/common.ts`) |
| `url:open` | Renderer (`apps/core-app/src/renderer/src/modules/hooks/application-hooks.ts`) | `CommonChannel.registerTransportHandlers -> onOpenUrl` (`apps/core-app/src/main/channel/common.ts`) |
| `files:index-progress` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> fileProvider.getIndexingProgress` (`apps/core-app/src/main/channel/common.ts`) |
| `app:system:get-active-app` | Caller: plugin SDK typed transport (`packages/utils/plugin/sdk/system.ts`) | `CommonChannel.registerTransportHandlers -> activeAppService.getActiveApp` (`apps/core-app/src/main/channel/common.ts`) |
| `system:get-storage-usage` | Renderer (`apps/core-app/src/renderer/src/views/storage/Storagable.vue`) | `CommonChannel.registerTransportHandlers -> getStorageUsageReport` (`apps/core-app/src/main/channel/common.ts`) |
| `build:get-verification-status` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> resolveBuildVerificationStatus` (`apps/core-app/src/main/channel/common.ts`) |

#### C3.2 Temp File / Storage Cleanup

| Event Name | Sender | Handler |
| --- | --- | --- |
| `temp-file:create` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> tempFileService.createFile` (`apps/core-app/src/main/channel/common.ts`) |
| `temp-file:delete` | Renderer (legacy touch-sdk: `packages/utils/renderer/touch-sdk/index.ts`) | `CommonChannel.registerTransportHandlers -> tempFileService.deleteFile` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:clipboard` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupClipboard` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:file-index` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupFileIndex` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:logs` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupLogs` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:temp` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupTemp` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:analytics` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupAnalytics` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:usage` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupUsage` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:ocr` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupOcr` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:downloads` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupDownloads` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:intelligence` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupIntelligence` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:config` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupConfig` (`apps/core-app/src/main/channel/common.ts`) |
| `storage:cleanup:updates` | Caller: renderer (raw event) | `CommonChannel.registerTransportHandlers -> cleanupUpdates` (`apps/core-app/src/main/channel/common.ts`) |

### C4. Storage legacy events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `storage:get` | Caller: renderer (legacy raw event) | `StorageModule.registerTransportHandlers -> getConfig` (`apps/core-app/src/main/modules/storage/index.ts`) |
| `storage:get-versioned` | Caller: renderer (legacy raw event) | `StorageModule.registerTransportHandlers -> getConfigWithVersion` (`apps/core-app/src/main/modules/storage/index.ts`) |
| `storage:save` | Caller: renderer (legacy raw event) | `StorageModule.registerTransportHandlers -> saveConfig` (`apps/core-app/src/main/modules/storage/index.ts`) |
| `storage:reload` | Caller: renderer (legacy raw event) | `StorageModule.registerTransportHandlers -> reloadConfig + broadcastUpdate` (`apps/core-app/src/main/modules/storage/index.ts`) |
| `storage:saveall` | Caller: renderer (legacy raw event) | `StorageModule.registerTransportHandlers -> StoragePollingService.forceSave` (`apps/core-app/src/main/modules/storage/index.ts`) |
| `storage:save-sync` | Caller: renderer (legacy raw event) | `StorageModule.registerTransportHandlers -> saveConfig + sync write` (`apps/core-app/src/main/modules/storage/index.ts`) |
| `storage:update` | `StorageModule.broadcastUpdate -> transport.broadcastToWindow` (`apps/core-app/src/main/modules/storage/index.ts`) | Renderer (storage subscribers) |

### C5. Clipboard legacy events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `clipboard:get-history` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> history query` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:set-favorite` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> setFavorite` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:delete-item` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> delete item` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:clear-history` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> clear history` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:apply-to-active-app` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> applyToActiveApp` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:write-text` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> writePayload(text)` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:write` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> writePayload` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:read` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> clipboard.read*` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:read-image` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> clipboard.readImage` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:read-files` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> clipboardHelper.readClipboardFiles` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:clear` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> clipboard.clear()` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:copy-and-paste` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> applyToActiveApp` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:query` | Caller: renderer (legacy raw event) | `ClipboardModule.registerTransportHandlers -> queryHistoryByMeta` (`apps/core-app/src/main/modules/clipboard.ts`) |
| `clipboard:new-item` | `ClipboardModule.checkClipboard -> transport.sendTo` (`apps/core-app/src/main/modules/clipboard.ts`) | Renderer (clipboard subscribers) |

### C6. BoxItem SDK internal channels (CoreBox Item)

| Event Name | Sender | Handler |
| --- | --- | --- |
| `box-item:create` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> create` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:update` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> update` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:upsert` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> upsert` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:delete` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> delete` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:batch-upsert` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> batchUpsert` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:batch-delete` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> batchDelete` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:clear` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> clear` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:sync` | Renderer (BoxItem SDK) | `BoxItemManager.registerTransportHandlers -> handleSyncRequest` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) |
| `box-item:sync-response` | `BoxItemManager.handleSyncRequest -> emitToRenderer` (`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`) | Renderer (BoxItem SDK) |

### C7. Shortcut (shortcon) internal events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `shortcon:update` | Renderer (`apps/core-app/src/renderer/src/modules/channel/main/shortcon.ts`) | `ShortcutModule.setupIpcListeners -> updateShortcut` (`apps/core-app/src/main/modules/global-shortcon.ts`) |
| `shortcon:disable-all` | Renderer (`apps/core-app/src/renderer/src/modules/channel/main/shortcon.ts`) | `ShortcutModule.setupIpcListeners -> disableAll` (`apps/core-app/src/main/modules/global-shortcon.ts`) |
| `shortcon:enable-all` | Renderer (`apps/core-app/src/renderer/src/modules/channel/main/shortcon.ts`) | `ShortcutModule.setupIpcListeners -> enableAll` (`apps/core-app/src/main/modules/global-shortcon.ts`) |
| `shortcon:get-all` | Renderer (`apps/core-app/src/renderer/src/modules/channel/main/shortcon.ts`) | `ShortcutModule.setupIpcListeners -> buildShortcutSnapshot` (`apps/core-app/src/main/modules/global-shortcon.ts`) |
| `shortcon:reg` | Plugin process (Prelude) | `ShortcutModule.setupIpcListeners -> registerRendererShortcut` (`apps/core-app/src/main/modules/global-shortcon.ts`) |
| `shortcon:trigger` | `ShortcutModule.handleTrigger -> transport.sendToPlugin/sendToWindow` (`apps/core-app/src/main/modules/global-shortcon.ts`) | Renderer/plugin (shortcut subscribers) |

### C8. Intelligence / Agents SDK events

#### C8.1 Intelligence

| Event Name | Sender | Handler |
| --- | --- | --- |
| `intelligence:api:invoke` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.invoke` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:chat-langchain` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.invoke('text.chat')` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:test-provider` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.testProvider` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-capability-test-meta` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> capabilityTesterRegistry.get` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:test-capability` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> tester.generateTestPayload + ai.invoke` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:fetch-models` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> fetchProviderModels` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-audit-logs` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.queryAuditLogs` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-today-stats` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.getTodayStats` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-month-stats` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.getMonthStats` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-usage-stats` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> ai.getUsageStats` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-quota` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> intelligenceQuotaManager.getQuota` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:set-quota` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> intelligenceQuotaManager.setQuota` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:delete-quota` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> intelligenceQuotaManager.deleteQuota` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-all-quotas` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> intelligenceQuotaManager.getAllQuotas` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:check-quota` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> intelligenceQuotaManager.checkQuota` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:get-current-usage` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> intelligenceQuotaManager.getCurrentUsage` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |
| `intelligence:api:reload-config` | Caller: renderer/plugin (Intelligence SDK typed event) | `IntelligenceModule.onInit -> reloadConfig` (`apps/core-app/src/main/modules/ai/intelligence-module.ts`) |

#### C8.2 Agents

| Event Name | Sender | Handler |
| --- | --- | --- |
| `agents:update-priority` | Renderer (raw event) | `registerAgentChannels -> agentManager.updateTaskPriority` (`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`) |
| `agents:task-started` | `agentManager.on('task:started') -> transport.broadcast` (`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`) | Renderer (agent status subscribers) |
| `agents:task-progress` | `agentManager.on('task:progress') -> transport.broadcast` (`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`) | Renderer (agent status subscribers) |
| `agents:task-completed` | `agentManager.on('task:completed') -> transport.broadcast` (`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`) | Renderer (agent status subscribers) |
| `agents:task-failed` | `agentManager.on('task:failed') -> transport.broadcast` (`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`) | Renderer (agent status subscribers) |
| `agents:task-cancelled` | `agentManager.on('task:cancelled') -> transport.broadcast` (`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`) | Renderer (agent status subscribers) |

### C9. Analytics events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `AppEvents.analytics.getSummary` | Renderer (`apps/core-app/src/renderer/src/views/base/settings/SettingAbout.vue`) | `AnalyticsModule.registerTransportHandlers -> startupAnalytics.getPerformanceSummary` (`apps/core-app/src/main/modules/analytics/analytics-module.ts`) |
| `AppEvents.analytics.export` | Renderer (`apps/core-app/src/renderer/src/views/base/settings/SettingAbout.vue`) | `AnalyticsModule.registerTransportHandlers -> startupAnalytics.exportMetrics` (`apps/core-app/src/main/modules/analytics/analytics-module.ts`) |

### C10. AddonOpener / Drop raw events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `auth:external-callback` | `AddonOpenerModule.schemaHandlers -> transport.sendTo` (`apps/core-app/src/main/modules/addon-opener.ts`) | Renderer (auth callback consumer) |
| `@open-plugin` | `AddonOpenerModule.open-file -> transport.sendTo` (`apps/core-app/src/main/modules/addon-opener.ts`) | Renderer (`apps/core-app/src/renderer/src/modules/hooks/dropper-resolver.ts`) |
| `@install-plugin` | Renderer (`apps/core-app/src/renderer/src/components/plugin/action/mention/PluginApplyInstall.vue`) | `AddonOpenerModule.on(installPluginEvent) -> PluginResolver` (`apps/core-app/src/main/modules/addon-opener.ts`) |
| `drop:plugin` | Renderer (`apps/core-app/src/renderer/src/modules/hooks/dropper-resolver.ts`) | `AddonOpenerModule.on(dropPluginEvent) -> PluginResolver` (`apps/core-app/src/main/modules/addon-opener.ts`) |
| `drop` | Renderer (raw event) | `DropManager.init -> transport.sendToPlugin` (`apps/core-app/src/main/modules/drop-manager.ts`) |

### C11. File provider raw events

| Event Name | Sender | Handler |
| --- | --- | --- |
| `everything:status` | Renderer (Everything settings) | `EverythingProvider.registerChannels -> status` (`apps/core-app/src/main/modules/box-tool/addon/files/everything-provider.ts`) |
| `everything:toggle` | Renderer (Everything settings) | `EverythingProvider.registerChannels -> toggle` (`apps/core-app/src/main/modules/box-tool/addon/files/everything-provider.ts`) |
| `everything:test` | Renderer (Everything settings) | `EverythingProvider.registerChannels -> test` (`apps/core-app/src/main/modules/box-tool/addon/files/everything-provider.ts`) |
| `openers:resolve` | Renderer (`apps/core-app/src/renderer/src/modules/openers/index.ts`) | `FileProvider.registerOpenersChannel -> getOpenerForExtension` (`apps/core-app/src/main/modules/box-tool/addon/files/file-provider.ts`) |
| `file-index:failed` | `FileProvider.notifyIndexingFailure -> transport.broadcast` (`apps/core-app/src/main/modules/box-tool/addon/files/file-provider.ts`) | Renderer (index status subscribers) |

### C12. System services raw events (Permission/Terminal/Logs/Dashboard)

#### C12.1 Permission

| Event Name | Sender | Handler |
| --- | --- | --- |
| `system:permission:check` | Renderer (`apps/core-app/src/renderer/src/views/base/begin/internal/SetupPermissions.vue`) | `PermissionChecker.setupChannels -> checker.checkAccessibility/checkNotifications/...` (`apps/core-app/src/main/modules/system/permission-checker.ts`) |
| `system:permission:request` | Renderer (`apps/core-app/src/renderer/src/views/base/begin/internal/SetupPermissions.vue`) | `PermissionChecker.setupChannels -> requestPermission` (`apps/core-app/src/main/modules/system/permission-checker.ts`) |
| `system:permission:open-settings` | Caller: renderer (raw event) | `PermissionChecker.setupChannels -> openSystemSettings` (`apps/core-app/src/main/modules/system/permission-checker.ts`) |

#### C12.2 Terminal

| Event Name | Sender | Handler |
| --- | --- | --- |
| `terminal:session:create` | `createTerminalSdk.create` (`packages/utils/transport/sdk/domains/terminal.ts`) | `TerminalModule.create` (`apps/core-app/src/main/modules/terminal/index.ts`) → shared `PtySessionCore.create` |
| `terminal:session:write` | `TerminalSessionHandle.write` | `TerminalModule.write` → shared PTY input |
| `terminal:session:resize` | `TerminalSessionHandle.resize` | `TerminalModule.resize` → PTY rows/columns |
| `terminal:session:close` | `TerminalSessionHandle.close` / SDK cancellation | `TerminalModule.close` → shared session disposal |
| `terminal:session:data` | Shared PTY core → owner-bound notification | SDK data listener registered before creation |
| `terminal:session:exit` | Shared PTY core → owner-bound notification | SDK exit listener; subscription cleanup |

All controls require `system.shell` and trusted transport ownership before spawning or touching a PTY. The owner binds the concrete sender and current plugin activation, not payload fields. Missing and foreign IDs are rejected identically. Creation passes an executable and separate arguments, never an implicitly interpreted shell command.

The shared core is `apps/core-app/src/main/modules/terminal/pty-session-core.ts`. It also owns AI CLI PTYs; the `local-ai-cli:terminal:*` business facade retains Provider/access/cwd/resume/lease gates. Output is complete and ordered. Close rejects further input, requests termination once and awaits native `onExit` before releasing listeners or the native-session lease. Signal termination preserves `signal`; a native zero code accompanied by a termination signal becomes `exitCode: null`, not a successful command result.

The SDK issues an internal `creationToken` and main reserves its trusted owner before asynchronous permission or Provider checks. Abort or a failed/lost creation reply sends the same typed close/kill event with that token: it cancels an unstarted reservation or awaits the real exit of its associated PTY. Late replies cannot recreate a cancelled session. Tokens do not authorize ownership, and missing/foreign tokens are rejected identically. The AI business SDK accepts `terminal.create(request, { signal })`; its event names and Provider request fields remain unchanged.

`TxTerminal` only displays output and emits input/size events; web or read-only log usage never starts a process. `EnvDetector` uses the domain SDK and cleans up on completion, failure or timeout.

#### C12.3 Plugin Logs

| Event Name | Sender | Handler |
| --- | --- | --- |
| `plugin-log:subscribe` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> subscribe` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log:unsubscribe` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> unsubscribe` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log:get-sessions` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> getSessions` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log:open-session-file` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> openSessionFile` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log:open-log-directory` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> openLogDirectory` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log:get-buffer` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> getBuffer` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log:get-session-log` | Renderer (`apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue`) | `PluginLogModule -> getSessionLog` (`apps/core-app/src/main/service/plugin-log.service.ts`) |
| `plugin-log-stream` | `PluginLogModule -> transport.sendTo` (`apps/core-app/src/main/service/plugin-log.service.ts`) | Renderer (log stream subscribers) |

#### C12.4 Dashboard / OCR

| Event Name | Sender | Handler |
| --- | --- | --- |
| `tuff:dashboard` | Caller: renderer (raw event) | `TuffDashboardModule.onInit -> buildSnapshot` (`apps/core-app/src/main/modules/system/tuff-dashboard.ts`) |
| `ocr:dashboard` | Caller: renderer (raw event) | `OcrService.registerChannels -> getDashboardSnapshot` (`apps/core-app/src/main/modules/ocr/ocr-service.ts`) |
