# SDK -> 事件 -> 处理器索引

本页整理 `packages/utils/transport/sdk/domains/*` 与主进程处理器的映射，并补充内部/私有 transport 的非 SDK 通道。

## B1. App SDK（`packages/utils/transport/sdk/domains/app.ts`）

| SDK 方法 | 事件名 | 主处理器（函数级） |
| --- | --- | --- |
| `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 方法 | 事件名 | 主处理器（函数级） |
| --- | --- | --- |
| `listCapabilities()` | `platform:capabilities:list` | `CommonChannel.registerTransportHandlers -> platformCapabilityRegistry.list` |

## B3. Download SDK（`packages/utils/transport/sdk/domains/download.ts`）

| SDK 方法 | 事件名 | 主处理器（函数级） |
| --- | --- | --- |
| `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 方法 | 事件名 | 主处理器（函数级） |
| --- | --- | --- |
| `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 方法 | 事件名 | 主处理器（函数级） |
| --- | --- | --- |
| `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 方法 | 事件名 | 主处理器（函数级） |
| --- | --- | --- |
| `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. 内部/私有 Transport（非 SDK）

> 说明：这些事件通常由渲染进程或插件进程直接调用，不经过 SDK 封装。

### C1. CoreBox 内部 raw 事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `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`） | 插件进程 UI View（非仓库代码） |
| `core-box:hide-input` | 调用方：插件/渲染器（raw event） | `IpcManager.registerTransportHandlers -> setInputVisibility(false)`（`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`） |
| `core-box:show-input` | 调用方：插件/渲染器（raw event） | `IpcManager.registerTransportHandlers -> setInputVisibility(true)`（`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`） |
| `core-box:allow-input` | 调用方：插件/渲染器（raw event） | `IpcManager.registerTransportHandlers -> windowManager.enableInputMonitoring`（`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`） |
| `core-box:set-height` | 调用方：插件/渲染器（raw event） | `IpcManager.registerTransportHandlers -> windowManager.setHeight`（`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`） |
| `core-box:get-bounds` | 调用方：插件/渲染器（raw event） | `IpcManager.registerTransportHandlers -> window.getBounds`（`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`） |
| `core-box:set-position-offset` | 调用方：插件/渲染器（raw event） | `IpcManager.registerTransportHandlers -> windowManager.setPositionOffset`（`apps/core-app/src/main/modules/box-tool/core-box/ipc.ts`） |
| `core-box:get-recommendations` | 调用方：渲染器/后台 | `SearchEngineCore.init -> recommendationEngine.recommend`（`apps/core-app/src/main/modules/box-tool/search-engine/search-core.ts`） |
| `core-box:aggregate-time-stats` | 调用方：渲染器/后台 | `SearchEngineCore.init -> timeStatsAggregator.aggregateTimeStats`（`apps/core-app/src/main/modules/box-tool/search-engine/search-core.ts`） |
| `core-box:is-pinned` | 调用方：渲染器 | `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`） | 插件进程 UI View（非仓库代码） |
| `core-box:clipboard-meta-updated` | `OcrService.broadcastMetaUpdate -> sendToPlugin`（`apps/core-app/src/main/modules/ocr/ocr-service.ts`） | 插件进程 UI View（非仓库代码） |

### C2. Plugin 进程 raw 事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `window:new` | 插件进程（Prelude） | `PluginModule.start -> transport.on(defineRawEvent('window:new'))`（`apps/core-app/src/main/modules/plugin/plugin-module.ts`） |
| `window:visible` | 插件进程（Prelude） | `PluginModule.start -> transport.on(defineRawEvent('window:visible'))`（`apps/core-app/src/main/modules/plugin/plugin-module.ts`） |

### C3. CommonChannel 兼容/遗留事件（App/System）

#### C3.1 App/System

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `close` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> closeApp`（`apps/core-app/src/main/channel/common.ts`） |
| `hide` | 渲染器（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` | 渲染器（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` | 渲染器（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` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> packageJson`（`apps/core-app/src/main/channel/common.ts`） |
| `open-external` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> shell.openExternal`（`apps/core-app/src/main/channel/common.ts`） |
| `get-os` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> getOSInformation`（`apps/core-app/src/main/channel/common.ts`） |
| `common:cwd` | 渲染器（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` | 调用方：渲染器/插件（raw event） | `CommonChannel.registerTransportHandlers -> touchApp.app.getPath`（`apps/core-app/src/main/channel/common.ts`） |
| `folder:open` | 渲染器（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` | 渲染器（`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` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> shell.openPath`（`apps/core-app/src/main/channel/common.ts`） |
| `execute:cmd` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> shell.openPath`（`apps/core-app/src/main/channel/common.ts`） |
| `app:open` | 渲染器（legacy touch-sdk：`packages/utils/renderer/touch-sdk/index.ts`） | `CommonChannel.registerTransportHandlers -> shell.openPath`（`apps/core-app/src/main/channel/common.ts`） |
| `url:open` | 渲染器（`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` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> fileProvider.getIndexingProgress`（`apps/core-app/src/main/channel/common.ts`） |
| `app:system:get-active-app` | 调用方：插件 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` | 渲染器（`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` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> resolveBuildVerificationStatus`（`apps/core-app/src/main/channel/common.ts`） |

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

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `temp-file:create` | 渲染器（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` | 渲染器（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` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupClipboard`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:file-index` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupFileIndex`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:logs` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupLogs`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:temp` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupTemp`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:analytics` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupAnalytics`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:usage` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupUsage`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:ocr` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupOcr`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:downloads` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupDownloads`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:intelligence` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupIntelligence`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:config` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupConfig`（`apps/core-app/src/main/channel/common.ts`） |
| `storage:cleanup:updates` | 调用方：渲染器（raw event） | `CommonChannel.registerTransportHandlers -> cleanupUpdates`（`apps/core-app/src/main/channel/common.ts`） |

### C4. Storage 兼容/遗留事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `storage:get` | 调用方：渲染器（legacy raw event） | `StorageModule.registerTransportHandlers -> getConfig`（`apps/core-app/src/main/modules/storage/index.ts`） |
| `storage:get-versioned` | 调用方：渲染器（legacy raw event） | `StorageModule.registerTransportHandlers -> getConfigWithVersion`（`apps/core-app/src/main/modules/storage/index.ts`） |
| `storage:save` | 调用方：渲染器（legacy raw event） | `StorageModule.registerTransportHandlers -> saveConfig`（`apps/core-app/src/main/modules/storage/index.ts`） |
| `storage:reload` | 调用方：渲染器（legacy raw event） | `StorageModule.registerTransportHandlers -> reloadConfig + broadcastUpdate`（`apps/core-app/src/main/modules/storage/index.ts`） |
| `storage:saveall` | 调用方：渲染器（legacy raw event） | `StorageModule.registerTransportHandlers -> StoragePollingService.forceSave`（`apps/core-app/src/main/modules/storage/index.ts`） |
| `storage:save-sync` | 调用方：渲染器（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`） | 渲染器（storage 订阅者） |

### C5. Clipboard 兼容/遗留事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `clipboard:get-history` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> history query`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:set-favorite` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> setFavorite`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:delete-item` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> delete item`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:clear-history` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> clear history`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:apply-to-active-app` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> applyToActiveApp`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:write-text` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> writePayload(text)`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:write` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> writePayload`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:read` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> clipboard.read*`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:read-image` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> clipboard.readImage`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:read-files` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> clipboardHelper.readClipboardFiles`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:clear` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> clipboard.clear()`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:copy-and-paste` | 调用方：渲染器（legacy raw event） | `ClipboardModule.registerTransportHandlers -> applyToActiveApp`（`apps/core-app/src/main/modules/clipboard.ts`） |
| `clipboard:query` | 调用方：渲染器（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`） | 渲染器（clipboard 订阅者） |

### C6. BoxItem SDK 内部通道（CoreBox Item）

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `box-item:create` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> create`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:update` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> update`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:upsert` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> upsert`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:delete` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> delete`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:batch-upsert` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> batchUpsert`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:batch-delete` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> batchDelete`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:clear` | 渲染器（BoxItem SDK） | `BoxItemManager.registerTransportHandlers -> clear`（`apps/core-app/src/main/modules/box-tool/item-sdk/box-item-manager.ts`） |
| `box-item:sync` | 渲染器（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`） | 渲染器（BoxItem SDK） |

### C7. Shortcut（shortcon）内部事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `shortcon:update` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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` | 插件进程（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`） | 渲染器/插件（快捷键订阅方） |

### C8. Intelligence / Agents SDK 事件

#### C8.1 Intelligence

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `intelligence:api:invoke` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.invoke`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:chat-langchain` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.invoke('text.chat')`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:test-provider` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.testProvider`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-capability-test-meta` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> capabilityTesterRegistry.get`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:test-capability` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> tester.generateTestPayload + ai.invoke`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:fetch-models` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> fetchProviderModels`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-audit-logs` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.queryAuditLogs`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-today-stats` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.getTodayStats`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-month-stats` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.getMonthStats`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-usage-stats` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> ai.getUsageStats`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-quota` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> intelligenceQuotaManager.getQuota`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:set-quota` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> intelligenceQuotaManager.setQuota`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:delete-quota` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> intelligenceQuotaManager.deleteQuota`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-all-quotas` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> intelligenceQuotaManager.getAllQuotas`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:check-quota` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> intelligenceQuotaManager.checkQuota`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:get-current-usage` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> intelligenceQuotaManager.getCurrentUsage`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |
| `intelligence:api:reload-config` | 调用方：渲染器/插件（Intelligence SDK typed event） | `IntelligenceModule.onInit -> reloadConfig`（`apps/core-app/src/main/modules/ai/intelligence-module.ts`） |

#### C8.2 Agents

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `agents:update-priority` | 渲染器（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`） | 渲染器（Agent 状态订阅者） |
| `agents:task-progress` | `agentManager.on('task:progress') -> transport.broadcast`（`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`） | 渲染器（Agent 状态订阅者） |
| `agents:task-completed` | `agentManager.on('task:completed') -> transport.broadcast`（`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`） | 渲染器（Agent 状态订阅者） |
| `agents:task-failed` | `agentManager.on('task:failed') -> transport.broadcast`（`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`） | 渲染器（Agent 状态订阅者） |
| `agents:task-cancelled` | `agentManager.on('task:cancelled') -> transport.broadcast`（`apps/core-app/src/main/modules/ai/agents/agent-channels.ts`） | 渲染器（Agent 状态订阅者） |

### C9. Analytics 事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `AppEvents.analytics.getSummary` | 渲染器（`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` | 渲染器（`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 事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `auth:external-callback` | `AddonOpenerModule.schemaHandlers -> transport.sendTo`（`apps/core-app/src/main/modules/addon-opener.ts`） | 渲染器（授权回调接收方） |
| `@open-plugin` | `AddonOpenerModule.open-file -> transport.sendTo`（`apps/core-app/src/main/modules/addon-opener.ts`） | 渲染器（`apps/core-app/src/renderer/src/modules/hooks/dropper-resolver.ts`） |
| `@install-plugin` | 渲染器（`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` | 渲染器（`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` | 渲染器（raw event） | `DropManager.init -> transport.sendToPlugin`（`apps/core-app/src/main/modules/drop-manager.ts`） |

### C11. 文件 Provider raw 事件

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `everything:status` | 渲染器（Everything 设置页） | `EverythingProvider.registerChannels -> status`（`apps/core-app/src/main/modules/box-tool/addon/files/everything-provider.ts`） |
| `everything:toggle` | 渲染器（Everything 设置页） | `EverythingProvider.registerChannels -> toggle`（`apps/core-app/src/main/modules/box-tool/addon/files/everything-provider.ts`） |
| `everything:test` | 渲染器（Everything 设置页） | `EverythingProvider.registerChannels -> test`（`apps/core-app/src/main/modules/box-tool/addon/files/everything-provider.ts`） |
| `openers:resolve` | 渲染器（`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`） | 渲染器（索引状态订阅者） |

### C12. 系统服务 raw 事件（Permission/Terminal/Logs/Dashboard）

#### C12.1 Permission

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `system:permission:check` | 渲染器（`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` | 渲染器（`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` | 调用方：渲染器（raw event） | `PermissionChecker.setupChannels -> openSystemSettings`（`apps/core-app/src/main/modules/system/permission-checker.ts`） |

#### C12.2 Terminal

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `terminal:session:create` | `createTerminalSdk.create`（`packages/utils/transport/sdk/domains/terminal.ts`） | `TerminalModule.create`（`apps/core-app/src/main/modules/terminal/index.ts`）→ 共用 `PtySessionCore.create` |
| `terminal:session:write` | `TerminalSessionHandle.write` | `TerminalModule.write` → PTY 输入 |
| `terminal:session:resize` | `TerminalSessionHandle.resize` | `TerminalModule.resize` → PTY 行列 |
| `terminal:session:close` | `TerminalSessionHandle.close` / SDK 取消 | `TerminalModule.close` → 共用会话清理 |
| `terminal:session:data` | 共用 PTY 核心 → owner 定向通知 | 创建前注册的 SDK 输出订阅 |
| `terminal:session:exit` | 共用 PTY 核心 → owner 定向通知 | SDK 退出订阅和订阅清理 |

所有控制操作都在启动或访问 PTY 前验证 `system.shell` 和可信 transport 身份。owner 绑定真实 sender 对象与当前插件 activation，不接受请求正文指定的归属。不存在的 ID 与其他 owner 的 ID 使用相同拒绝语义。创建接收可执行文件与独立参数，不隐式交给 shell 解释。

共用核心位于 `apps/core-app/src/main/modules/terminal/pty-session-core.ts`，同时管理 AI CLI 的 PTY。`local-ai-cli:terminal:*` 业务入口保留 Provider、访问等级、cwd、恢复与 lease 门禁。输出完整且有序。关闭后拒绝新输入，只发送一次终止请求，并等待原生 `onExit`，随后才释放监听和原生会话 lease。信号退出保留 `signal`；原生零退出码伴随终止信号时，`exitCode` 转为 `null`，不表示命令执行成功。

SDK 自动生成内部 `creationToken`。主进程在异步权限或 Provider 检查前记录 token 的可信 owner。取消或创建回执失败、丢失时，SDK 用同一 typed close/kill 事件按 token 收尾：未启动的记录被取消，已启动的 PTY 等待真实退出。迟到回执不能重建已取消会话。token 不授予归属权限，不存在与其他 owner 的 token 使用相同拒绝语义。AI 业务 SDK 支持 `terminal.create(request, { signal })`，原有事件名和 Provider 请求字段保持。

`TxTerminal` 只负责显示输出和发送输入、尺寸事件。网页展示或只读日志不创建进程。`EnvDetector` 使用 domain SDK，在完成、失败或超时后清理资源。

#### C12.3 Plugin Logs

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `plugin-log:subscribe` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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` | 渲染器（`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`） | 渲染器（日志流订阅者） |

#### C12.4 Dashboard / OCR

| 事件名 | 发送端 | 处理端 |
| --- | --- | --- |
| `tuff:dashboard` | 调用方：渲染器（raw event） | `TuffDashboardModule.onInit -> buildSnapshot`（`apps/core-app/src/main/modules/system/tuff-dashboard.ts`） |
| `ocr:dashboard` | 调用方：渲染器（raw event） | `OcrService.registerChannels -> getDashboardSnapshot`（`apps/core-app/src/main/modules/ocr/ocr-service.ts`） |
