jim800121chen 3f0175f1a9 feat(local-agent): Phase 0.5 visionA Agent — Wails 桌面 + tunnel client + 配對 UI
從 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>
2026-05-01 11:22:01 +08:00

267 lines
6.7 KiB
JSON

[
{
"id": "kl520-yolov5-detection",
"name": "YOLOv5 Detection (KL520)",
"description": "YOLOv5 object detection model compiled for Kneron KL520. No upsample variant optimized for NPU inference at 640x640 resolution.",
"thumbnail": "/images/models/yolov5-det.png",
"taskType": "object_detection",
"categories": [
"general",
"multi-object"
],
"framework": "NEF",
"inputSize": {
"width": 640,
"height": 640
},
"modelSize": 7200000,
"quantization": "INT8",
"supportedHardware": [
"KL520"
],
"labels": [
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light"
],
"filePath": "data/nef/kl520/kl520_20005_yolov5-noupsample_w640h640.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "Apache-2.0",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
{
"id": "kl520-fcos-detection",
"name": "FCOS Detection (KL520)",
"description": "FCOS (Fully Convolutional One-Stage) object detection with DarkNet53s backbone, compiled for KL520. Anchor-free detection at 512x512.",
"thumbnail": "/images/models/fcos-det.png",
"taskType": "object_detection",
"categories": [
"general",
"multi-object"
],
"framework": "NEF",
"inputSize": {
"width": 512,
"height": 512
},
"modelSize": 8900000,
"quantization": "INT8",
"supportedHardware": [
"KL520"
],
"labels": [
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light"
],
"filePath": "data/nef/kl520/kl520_20004_fcos-drk53s_w512h512.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "Apache-2.0",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
{
"id": "kl520-ssd-face-detection",
"name": "SSD Face Detection (KL520)",
"description": "SSD-based face detection with landmark localization, compiled for KL520. Lightweight model suitable for face detection and alignment tasks.",
"thumbnail": "/images/models/ssd-face.png",
"taskType": "object_detection",
"categories": [
"face",
"security"
],
"framework": "NEF",
"inputSize": {
"width": 320,
"height": 240
},
"modelSize": 1000000,
"quantization": "INT8",
"supportedHardware": [
"KL520"
],
"labels": [
"face"
],
"filePath": "data/nef/kl520/kl520_ssd_fd_lm.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "Apache-2.0",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
{
"id": "kl520-tiny-yolov3",
"name": "Tiny YOLOv3 (KL520)",
"description": "Tiny YOLOv3 object detection model compiled for KL520. Compact and fast model for general-purpose multi-object detection on edge devices.",
"thumbnail": "/images/models/tiny-yolov3.png",
"taskType": "object_detection",
"categories": [
"general",
"multi-object"
],
"framework": "NEF",
"inputSize": {
"width": 416,
"height": 416
},
"modelSize": 9400000,
"quantization": "INT8",
"supportedHardware": [
"KL520"
],
"labels": [
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light"
],
"filePath": "data/nef/kl520/kl520_tiny_yolo_v3.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "Apache-2.0",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
{
"id": "kl720-yolov5-detection",
"name": "YOLOv5 Detection (KL720)",
"description": "YOLOv5 object detection model compiled for Kneron KL720. No upsample variant optimized for KL720 NPU inference at 640x640 resolution with USB 3.0 throughput.",
"thumbnail": "/images/models/yolov5-det.png",
"taskType": "object_detection",
"categories": [
"general",
"multi-object"
],
"framework": "NEF",
"inputSize": {
"width": 640,
"height": 640
},
"modelSize": 10168348,
"quantization": "INT8",
"supportedHardware": [
"KL720"
],
"labels": [
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light"
],
"filePath": "data/nef/kl720/kl720_20005_yolov5-noupsample_w640h640.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "Apache-2.0",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
{
"id": "kl720-resnet18-classification",
"name": "ImageNet Classification ResNet18 (KL720)",
"description": "ResNet18-based image classification compiled for KL720. Supports 1000 ImageNet categories with fast inference via USB 3.0.",
"thumbnail": "/images/models/imagenet-cls.png",
"taskType": "classification",
"categories": [
"general",
"image-classification"
],
"framework": "NEF",
"inputSize": {
"width": 224,
"height": 224
},
"modelSize": 12826804,
"quantization": "INT8",
"supportedHardware": [
"KL720"
],
"labels": [
"airplane",
"automobile",
"bird",
"cat",
"deer",
"dog",
"frog",
"horse",
"ship",
"truck"
],
"filePath": "data/nef/kl720/kl720_20001_resnet18_w224h224.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "MIT",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
{
"id": "kl720-fcos-detection",
"name": "FCOS Detection (KL720)",
"description": "FCOS (Fully Convolutional One-Stage) object detection with DarkNet53s backbone, compiled for KL720. Anchor-free detection at 512x512.",
"thumbnail": "/images/models/fcos-det.png",
"taskType": "object_detection",
"categories": [
"general",
"multi-object"
],
"framework": "NEF",
"inputSize": {
"width": 512,
"height": 512
},
"modelSize": 13004640,
"quantization": "INT8",
"supportedHardware": [
"KL720"
],
"labels": [
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light"
],
"filePath": "data/nef/kl720/kl720_20004_fcos-drk53s_w512h512.nef",
"version": "1.0.0",
"author": "Kneron",
"license": "Apache-2.0",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
]