mirror of
https://github.com/carey314/mio-plugin-clipper.git
synced 2026-08-09 23:34:32 +00:00
Quick AI actions on clipboard or selected text. Four actions: - 翻译 (中/英/日) - 总结 (3-bullet Chinese) - 改语气 (正式/口语/友好/严谨) - 邮件回复 Powered by DeepSeek with Server-Sent Events streaming for typewriter feedback (~600ms first byte). Two source modes: clipboard (no permission) and selected-text via NSAccessibility (graceful fallback to clipboard + permission banner if denied). Five-state UI machine: idle → input → loading (cancellable) → result → missing-config. Last 20 actions persisted to UserDefaults. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
38 lines
915 B
Swift
38 lines
915 B
Swift
//
|
|
// ClipperPlugin.swift
|
|
// Mio Island plugin: 划词侠
|
|
//
|
|
// Principal class. Module = ClipperPlugin, Class = ClipperPlugin →
|
|
// NSPrincipalClass = "ClipperPlugin.ClipperPlugin".
|
|
//
|
|
|
|
import AppKit
|
|
import SwiftUI
|
|
|
|
final class ClipperPlugin: NSObject, MioPlugin {
|
|
var id: String { "clipper" }
|
|
var name: String { "划词侠" }
|
|
var icon: String { "wand.and.stars" }
|
|
var version: String { "0.1.0" }
|
|
|
|
func activate() {
|
|
ClipperDebugLog.write("plugin activate")
|
|
Task { @MainActor in
|
|
ClipperStore.shared.activate()
|
|
}
|
|
}
|
|
|
|
func deactivate() {
|
|
ClipperDebugLog.write("plugin deactivate")
|
|
Task { @MainActor in
|
|
ClipperStore.shared.deactivate()
|
|
}
|
|
}
|
|
|
|
func makeView() -> NSView {
|
|
let view = NSHostingView(rootView: ExpandedView())
|
|
view.autoresizingMask = [.width, .height]
|
|
return view
|
|
}
|
|
}
|