feat: Pro 买断门禁、SFTP 精简与批量多机改造

新增 entitlement/license IPC 与 Waffo 一次性结账服务骨架,挂载 AI/转发/代理/串口/广播/批量导入导出门禁;批量执行改为结果矩阵并复用连接池,SFTP 工具栏图标化并去掉已连接条,同时完善跨平台本地终端与窗口配置。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Logan.LiandCursor committed 2026-08-07 11:38:30 +08:00
1 parent 101d2164b4
commit fea6d8db04
72 files changed
+3307 -396

No files matched your search

+6 -7
View File
@@ -12,6 +12,7 @@ import type {
} from './types'
import type { CreateConnectionOptions, CreateConnectionResult, PoolStats } from './types'
import { useSettingsStore } from '../settingsStore'
import { connectionReuseFingerprint } from '../../utils/connectionFingerprint'
// ============== Pool State ==============
@@ -83,19 +84,14 @@ export const usePoolStore = create<PoolState>((set, get) => ({
},
createConnection: async (tabId, config, _options = {}): Promise<CreateConnectionResult> => {
console.log('=== POOL STORE createConnection ===')
console.log(' tabId:', tabId)
console.log(' config:', config.host, config.port, config.username)
const { connections, config: poolConfig } = get()
const now = Date.now()
const reuseKey = connectionReuseFingerprint(config)
// 1. 检查是否已存在相同配置的连接 (连接复用)
for (const [existingId, conn] of connections.entries()) {
if (
conn.config.host === config.host &&
conn.config.port === config.port &&
conn.config.username === config.username &&
connectionReuseFingerprint(conn.config) === reuseKey &&
conn.state !== 'disconnected' &&
conn.state !== 'error'
) {
@@ -345,6 +341,9 @@ export const usePoolStore = create<PoolState>((set, get) => ({
const conn = get().connections.get(connectionId)
if (!conn) return
// Idempotent: ignore tabs that already released this connection
if (!conn.tabIds.has(tabId)) return
conn.tabIds.delete(tabId)
conn.refCount = Math.max(0, conn.refCount - 1)