Skip to content

[Feature] clip-dock — 跨平台客户端(Portal + Edge Clip) #21

@yan5xu

Description

@yan5xu

概念

clip-dock 是 Pinix 在各平台的客户端 App,每个 clip-dock 同时承担两个角色:

  1. Portal(Client 角色)— 展示 Clip 列表、调用 command、加载 Clip Web UI
  2. Edge Clip Provider(Provider 角色)— 注册设备原生能力为 Clip

一个 App,两个角色,共享 Hub 连接。

各平台规划

macOS — Menu bar app

clip-dock-macos (menu bar 图标)
  ├── Standalone 模式
  │     内嵌 pinixd (Hub + Runtime)
  │     + macOS Edge Clip Provider
  │     + 点击 Open Portal → 浏览器打开 localhost:9000
  │
  └── Client 模式
        macOS Edge Clip Provider → 连远程 Hub
        + 点击 Open Portal → 浏览器打开远程 Hub

macOS Edge Clip 能力:screen capture, clipboard, AppleScript

用户在设置里选模式。Standalone = 个人单机全包,Client = 连远程 Hub(Runtime 在 NAS 上)。

iOS — SwiftUI App

clip-dock-ios
  ├── Portal (SwiftUI 原生 UI)
  │     ListClips, Invoke, GetManifest
  │     Clip Web UI (WKWebView)
  │
  ├── Edge Clip Provider (后台)
  │     ProviderStream → Hub
  │     camera (AVFoundation)
  │     health (HealthKit)
  │     location (CoreLocation)
  │     contacts (Contacts)
  │
  └── 推送注册
        启动时 Invoke("notify", "register", {...})
        推送点击 → 深度链接到对应 Clip

iOS 特性:App 前台时设备能力在线,切到后台后 ProviderStream 断开、Clips 从 Hub 消失。推送通道通过 notify Clip 持久化,不受影响。

Windows — System tray app(未来)

类似 macOS,Standalone / Client 两种模式。

Android — Kotlin App(未来)

类似 iOS。

Hub 视角

clip-dock-ios 连入后,Hub 看到:

Provider "iphone-yan" (accepts_manage: false)
  ├── Clip "camera"     (package: pinix-ios-camera)
  ├── Clip "health"     (package: pinix-ios-health)
  └── Clip "location"   (package: pinix-ios-location)

同时 App 也在调 Hub 的 ListClips、Invoke 做 Portal 展示。Hub 不关心两个角色来自同一个 App。

关系

  • clip-dock-desktop(V1 遗留)→ 被 clip-dock-macos 替代
  • Portal(pinixd 内嵌 web)→ 继续存在,clip-dock 的 Portal 功能是它的客户端
  • notify Clip → clip-dock 启动时注册 device token

优先级

  1. clip-dock-macos (menu bar + pinixd 整合)
  2. clip-dock-ios
  3. clip-dock-windows / android(未来)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions