從 local-tool 複製出獨立的「visionA Agent」桌面應用(A3 純橋樑: tunnel client + 配對 UI + 設定,不開 HTTP port、不做本機裝置/推論 UI)。 Bundle ID 與 local-tool 不同(com.innovedus.visiona-agent vs visiona-local), 雙 app 可共存。fork 後不主動 sync,需要時手動 cherry-pick。 Backend / Wails Go(AB1-AB13): - internal/tunnel:6 狀態機(Idle/Connecting/Connected/Reconnecting/Failed/Stopped) + Pair/Unpair/Reconnect/Disconnect binding + ClientHooks event - internal/auth:encrypted file token store(AES-GCM + scrypt + machineID fallback salt + 13 tests) - internal/config:YAML validation + atomic write + 11 tests - internal/log:ring buffer + ExportLog 升級 zip - visionA-backend /api/pairing/exchange:SessionTokenStore + 17 new tests - 三平台 build 驗證(macOS DMG 160 MB / Windows EXE / Linux AppImage) - end-to-end 5 milestone 全綠(pairing → tunnel → forward → reuse 防護 → tunnel drop failover) Frontend / Next.js(AF1-AF7,沿用 visionA-frontend 基礎): - AppShell + Header + TabNav(StatusView / PairView / SettingsView 三 tab) - ConnectionStatusBadge 5 種狀態 - TokenInput regex 驗證 + 7 種錯誤 + 0.5s auto-switch 到狀態頁 - 設定頁 4 區塊(含重新配對 AlertDialog) - agent-api.ts 封裝 Wails bindings(mock/real 雙實作)+ 90 tests Phase 0.7 review-driven fix(Round 2): - A1 Session fixation 防護(RotateSessionID) - A3 mock pairing 預設改 false(必須明確 opt-in)+ startup log - A4 Pair 失敗後 state 清理矩陣(exchange/Save/Start fail 各自終態) - A5 Pair/Unpair/Reconnect lifecycleMu + 50 goroutine race test - F1 重新配對次按鈕 / F2 PairView Esc cancel / F3 Wails BrowserOpenURL / F4 Settings draft 持久 + 未儲存 badge 驗證:agent backend go test -race -count=3 ./... 4 packages 全綠 / agent frontend pnpm test 119 tests 全綠 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
83 lines
2.0 KiB
INI
83 lines
2.0 KiB
INI
; kneron_winusb.inf
|
|
; WinUSB driver for Kneron KL520 and KL720 USB AI accelerators
|
|
; Supports: KL520 (PID 0x0100), KL720 KDP legacy (PID 0x0200), KL720 KDP2 (PID 0x0720)
|
|
|
|
[Strings]
|
|
DeviceName520 = "Kneron KL520"
|
|
DeviceName720 = "Kneron KL720"
|
|
DeviceName720v2 = "Kneron KL720 v2"
|
|
VendorName = "Kneron Inc."
|
|
SourceName = "Kneron WinUSB Install Disk"
|
|
DeviceGUID = "{A897B340-F751-4FEE-8DAD-40EC8BC77200}"
|
|
|
|
[Version]
|
|
Signature = "$Windows NT$"
|
|
Class = "USBDevice"
|
|
ClassGuid = {88bae032-5a81-49f0-bc3d-a4ff138216d6}
|
|
Provider = %VendorName%
|
|
CatalogFile = kneron_winusb.cat
|
|
DriverVer = 03/09/2026, 6.1.7600.16385
|
|
|
|
[ClassInstall32]
|
|
Addreg = WinUSBDeviceClassReg
|
|
|
|
[WinUSBDeviceClassReg]
|
|
HKR,,,0,"Universal Serial Bus devices"
|
|
HKR,,Icon,,-20
|
|
|
|
[Manufacturer]
|
|
%VendorName% = KneronDevices,NTamd64
|
|
|
|
[KneronDevices.NTamd64]
|
|
%DeviceName520% = USB_Install, USB\VID_3231&PID_0100
|
|
%DeviceName720% = USB_Install, USB\VID_3231&PID_0200
|
|
%DeviceName720v2% = USB_Install, USB\VID_3231&PID_0720
|
|
|
|
[USB_Install]
|
|
Include = winusb.inf
|
|
Needs = WINUSB.NT
|
|
|
|
[USB_Install.Services]
|
|
Include = winusb.inf
|
|
AddService = WinUSB,0x00000002,WinUSB_ServiceInstall
|
|
|
|
[WinUSB_ServiceInstall]
|
|
DisplayName = "WinUSB - Kneron USB Device"
|
|
ServiceType = 1
|
|
StartType = 3
|
|
ErrorControl = 1
|
|
ServiceBinary = %12%\WinUSB.sys
|
|
|
|
[USB_Install.Wdf]
|
|
KmdfService = WINUSB, WinUsb_Install
|
|
|
|
[WinUSB_Install]
|
|
KmdfLibraryVersion = 1.11
|
|
|
|
[USB_Install.HW]
|
|
AddReg = AddDeviceInterfaceGUID
|
|
|
|
[AddDeviceInterfaceGUID]
|
|
HKR,,DeviceInterfaceGUIDs,0x10000,%DeviceGUID%
|
|
|
|
[USB_Install.CoInstallers]
|
|
AddReg = CoInstallers_AddReg
|
|
CopyFiles = CoInstallers_CopyFiles
|
|
|
|
[CoInstallers_AddReg]
|
|
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01011.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"
|
|
|
|
[CoInstallers_CopyFiles]
|
|
WinUSBCoInstaller2.dll
|
|
WdfCoInstaller01011.dll
|
|
|
|
[DestinationDirs]
|
|
CoInstallers_CopyFiles = 11
|
|
|
|
[SourceDisksNames]
|
|
1 = %SourceName%
|
|
|
|
[SourceDisksFiles.amd64]
|
|
WinUSBCoInstaller2.dll = 1,amd64
|
|
WdfCoInstaller01011.dll = 1,amd64
|