feat: add tiered channel agent and mobile Codex bridge
This commit is contained in:
parent
950b7e48b3
commit
71db11e7e8
35 changed files with 2242 additions and 76 deletions
|
|
@ -45,6 +45,10 @@ struct StoredSession: Codable, Equatable {
|
|||
let desktopName: String
|
||||
var counter: UInt64
|
||||
var cursor: UInt64
|
||||
var agentConversationID: String?
|
||||
var pendingAgentRequestID: String?
|
||||
var pendingAgentContent: String?
|
||||
var pendingAgentDestination: String?
|
||||
|
||||
var baseURL: URL {
|
||||
URL(string: "http://\(host):\(port)")!
|
||||
|
|
@ -71,6 +75,7 @@ struct SyncRequest: Codable {
|
|||
let counter: UInt64
|
||||
let afterCursor: UInt64?
|
||||
let capture: MobileCaptureInput?
|
||||
let agentMessage: MobileAgentMessageInput?
|
||||
}
|
||||
|
||||
struct MobileCaptureInput: Codable {
|
||||
|
|
@ -79,6 +84,14 @@ struct MobileCaptureInput: Codable {
|
|||
let requestID: String
|
||||
}
|
||||
|
||||
struct MobileAgentMessageInput: Codable {
|
||||
let destination: String
|
||||
let codexThreadID: String?
|
||||
let conversationID: String?
|
||||
let content: String
|
||||
let requestID: String
|
||||
}
|
||||
|
||||
struct MobileSyncSnapshot: Codable {
|
||||
let schema: String
|
||||
let state: String
|
||||
|
|
@ -90,9 +103,43 @@ struct MobileSyncSnapshot: Codable {
|
|||
let webNovel: MobileWebNovelProjection
|
||||
let education: MobileEducationProjection
|
||||
let recentCaptures: [MobileCaptureProjection]
|
||||
let agentExchange: MobileAgentExchangeProjection?
|
||||
let recentAgentExchanges: [MobileAgentExchangeProjection]
|
||||
let codexTarget: MobileCodexTargetProjection?
|
||||
let boundary: MobileBoundaryProjection
|
||||
}
|
||||
|
||||
struct MobileCodexTargetProjection: Codable, Equatable {
|
||||
let threadID: String
|
||||
let name: String
|
||||
let preview: String
|
||||
let cwd: String
|
||||
let updatedAtUnixSeconds: UInt64
|
||||
let status: String
|
||||
}
|
||||
|
||||
struct MobileAgentExchangeProjection: Codable, Equatable {
|
||||
let requestID: String
|
||||
let conversationID: String
|
||||
let state: String
|
||||
let stateVersion: UInt64
|
||||
let reply: String
|
||||
let responderNumber: String
|
||||
let responderName: String
|
||||
let responderKind: String
|
||||
let personaBindingState: String
|
||||
let toolReceipts: [MobileAgentToolReceipt]
|
||||
}
|
||||
|
||||
struct MobileAgentToolReceipt: Codable, Equatable, Identifiable {
|
||||
let toolNumber: String
|
||||
let toolName: String
|
||||
let targetPath: String
|
||||
let contentSha256: String
|
||||
let summary: String
|
||||
var id: String { "\(toolNumber):\(contentSha256)" }
|
||||
}
|
||||
|
||||
struct MobileChannelProjection: Codable {
|
||||
let home: String
|
||||
let growthEventCount: UInt64
|
||||
|
|
@ -145,6 +192,7 @@ enum HoloLakeMobileError: LocalizedError {
|
|||
case rejected(String)
|
||||
case missingNonce
|
||||
case missingSession
|
||||
case pendingAgentRequest
|
||||
case keychain(OSStatus)
|
||||
|
||||
var errorDescription: String? {
|
||||
|
|
@ -154,6 +202,7 @@ enum HoloLakeMobileError: LocalizedError {
|
|||
case .rejected(let code): return "电脑端拒绝了本次请求:\(code)"
|
||||
case .missingNonce: return "加密响应缺少一次性随机数。"
|
||||
case .missingSession: return "请先与电脑端 HoloLake 配对。"
|
||||
case .pendingAgentRequest: return "上一条消息仍在等待电脑端回执,请先重试该消息。"
|
||||
case .keychain(let status): return "本机钥匙串写入失败(\(status))。"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue