refactor: replace canvas.show with canvas.present
This commit is contained in:
@@ -95,8 +95,8 @@ enum ControlRequestHandler {
|
||||
deliver: deliver,
|
||||
to: to)
|
||||
|
||||
case let .canvasShow(session, path, placement):
|
||||
return await self.handleCanvasShow(session: session, path: path, placement: placement)
|
||||
case let .canvasPresent(session, path, placement):
|
||||
return await self.handleCanvasPresent(session: session, path: path, placement: placement)
|
||||
|
||||
case let .canvasHide(session):
|
||||
return await self.handleCanvasHide(session: session)
|
||||
@@ -235,7 +235,7 @@ enum ControlRequestHandler {
|
||||
UserDefaults.standard.object(forKey: cameraEnabledKey) as? Bool ?? false
|
||||
}
|
||||
|
||||
private static func handleCanvasShow(
|
||||
private static func handleCanvasPresent(
|
||||
session: String,
|
||||
path: String?,
|
||||
placement: CanvasPlacement?) async -> Response
|
||||
@@ -243,20 +243,24 @@ enum ControlRequestHandler {
|
||||
guard self.canvasEnabled() else { return Response(ok: false, message: "Canvas disabled by user") }
|
||||
_ = session
|
||||
do {
|
||||
var params: [String: Any] = [:]
|
||||
if let path, !path.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||
_ = try await self.invokeLocalNode(
|
||||
command: ClawdisCanvasCommand.navigate.rawValue,
|
||||
params: ["url": path],
|
||||
timeoutMs: 20000)
|
||||
} else {
|
||||
_ = try await self.invokeLocalNode(
|
||||
command: ClawdisCanvasCommand.show.rawValue,
|
||||
params: nil,
|
||||
timeoutMs: 20000)
|
||||
params["url"] = path
|
||||
}
|
||||
if placement != nil {
|
||||
return Response(ok: true, message: "Canvas placement ignored (node mode)")
|
||||
if let placement {
|
||||
var placementPayload: [String: Any] = [:]
|
||||
if let x = placement.x { placementPayload["x"] = x }
|
||||
if let y = placement.y { placementPayload["y"] = y }
|
||||
if let width = placement.width { placementPayload["width"] = width }
|
||||
if let height = placement.height { placementPayload["height"] = height }
|
||||
if !placementPayload.isEmpty {
|
||||
params["placement"] = placementPayload
|
||||
}
|
||||
}
|
||||
_ = try await self.invokeLocalNode(
|
||||
command: ClawdisCanvasCommand.present.rawValue,
|
||||
params: params.isEmpty ? nil : params,
|
||||
timeoutMs: 20000)
|
||||
return Response(ok: true)
|
||||
} catch {
|
||||
return Response(ok: false, message: error.localizedDescription)
|
||||
|
||||
@@ -489,7 +489,7 @@ struct DebugSettings: View {
|
||||
.font(.caption.monospaced())
|
||||
.frame(width: 160)
|
||||
Button("Show panel") {
|
||||
Task { await self.canvasShow() }
|
||||
Task { await self.canvasPresent() }
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
Button("Hide panel") {
|
||||
@@ -750,7 +750,7 @@ extension DebugSettings {
|
||||
// MARK: - Canvas debug actions
|
||||
|
||||
@MainActor
|
||||
private func canvasShow() async {
|
||||
private func canvasPresent() async {
|
||||
self.canvasError = nil
|
||||
let session = self.canvasSessionKey.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
do {
|
||||
|
||||
@@ -107,7 +107,7 @@ final class MacNodeModeCoordinator {
|
||||
|
||||
private func currentCommands(caps: [String]) -> [String] {
|
||||
var commands: [String] = [
|
||||
ClawdisCanvasCommand.show.rawValue,
|
||||
ClawdisCanvasCommand.present.rawValue,
|
||||
ClawdisCanvasCommand.hide.rawValue,
|
||||
ClawdisCanvasCommand.navigate.rawValue,
|
||||
ClawdisCanvasCommand.evalJS.rawValue,
|
||||
|
||||
@@ -19,9 +19,19 @@ actor MacNodeRuntime {
|
||||
}
|
||||
do {
|
||||
switch command {
|
||||
case ClawdisCanvasCommand.show.rawValue:
|
||||
case ClawdisCanvasCommand.present.rawValue:
|
||||
let params = (try? Self.decodeParams(ClawdisCanvasPresentParams.self, from: req.paramsJSON)) ??
|
||||
ClawdisCanvasPresentParams()
|
||||
let urlTrimmed = params.url?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
||||
let url = urlTrimmed.isEmpty ? nil : urlTrimmed
|
||||
let placement = params.placement.map {
|
||||
CanvasPlacement(x: $0.x, y: $0.y, width: $0.width, height: $0.height)
|
||||
}
|
||||
try await MainActor.run {
|
||||
_ = try CanvasManager.shared.show(sessionKey: "main", path: nil)
|
||||
_ = try CanvasManager.shared.showDetailed(
|
||||
sessionKey: "main",
|
||||
target: url,
|
||||
placement: placement)
|
||||
}
|
||||
return BridgeInvokeResponse(id: req.id, ok: true)
|
||||
|
||||
|
||||
@@ -319,12 +319,12 @@ struct ClawdisCLI {
|
||||
private static func parseCanvas(args: inout [String]) throws -> ParsedCLIRequest {
|
||||
guard let sub = args.popFirst() else { throw CLIError.help }
|
||||
switch sub {
|
||||
case "show":
|
||||
case "present":
|
||||
var session = "main"
|
||||
var target: String?
|
||||
let placement = self.parseCanvasPlacement(args: &args, session: &session, target: &target)
|
||||
return ParsedCLIRequest(
|
||||
request: .canvasShow(session: session, path: target, placement: placement),
|
||||
request: .canvasPresent(session: session, path: target, placement: placement),
|
||||
kind: .generic)
|
||||
case "a2ui":
|
||||
return try self.parseCanvasA2UI(args: &args)
|
||||
@@ -542,7 +542,7 @@ struct ClawdisCLI {
|
||||
return
|
||||
}
|
||||
|
||||
if case .canvasShow = parsed.request {
|
||||
if case .canvasPresent = parsed.request {
|
||||
if let message = response.message, !message.isEmpty {
|
||||
FileHandle.standardOutput.write(Data((message + "\n").utf8))
|
||||
}
|
||||
@@ -759,7 +759,7 @@ struct ClawdisCLI {
|
||||
clawdis-mac node invoke --node <id> --command <name> [--params-json <json>]
|
||||
|
||||
Canvas:
|
||||
clawdis-mac canvas show [--session <key>] [--target </...|https://...|file://...>]
|
||||
clawdis-mac canvas present [--session <key>] [--target </...|https://...|file://...>]
|
||||
[--x <screenX> --y <screenY>] [--width <w> --height <h>]
|
||||
clawdis-mac canvas a2ui push --jsonl <path> [--session <key>] # A2UI v0.8 JSONL
|
||||
clawdis-mac canvas a2ui reset [--session <key>]
|
||||
|
||||
@@ -122,7 +122,7 @@ public enum Request: Sendable {
|
||||
case status
|
||||
case agent(message: String, thinking: String?, session: String?, deliver: Bool, to: String?)
|
||||
case rpcStatus
|
||||
case canvasShow(session: String, path: String?, placement: CanvasPlacement?)
|
||||
case canvasPresent(session: String, path: String?, placement: CanvasPlacement?)
|
||||
case canvasHide(session: String)
|
||||
case canvasEval(session: String, javaScript: String)
|
||||
case canvasSnapshot(session: String, outPath: String?)
|
||||
@@ -185,7 +185,7 @@ extension Request: Codable {
|
||||
case status
|
||||
case agent
|
||||
case rpcStatus
|
||||
case canvasShow
|
||||
case canvasPresent
|
||||
case canvasHide
|
||||
case canvasEval
|
||||
case canvasSnapshot
|
||||
@@ -236,8 +236,8 @@ extension Request: Codable {
|
||||
case .rpcStatus:
|
||||
try container.encode(Kind.rpcStatus, forKey: .type)
|
||||
|
||||
case let .canvasShow(session, path, placement):
|
||||
try container.encode(Kind.canvasShow, forKey: .type)
|
||||
case let .canvasPresent(session, path, placement):
|
||||
try container.encode(Kind.canvasPresent, forKey: .type)
|
||||
try container.encode(session, forKey: .session)
|
||||
try container.encodeIfPresent(path, forKey: .path)
|
||||
try container.encodeIfPresent(placement, forKey: .placement)
|
||||
@@ -338,11 +338,11 @@ extension Request: Codable {
|
||||
case .rpcStatus:
|
||||
self = .rpcStatus
|
||||
|
||||
case .canvasShow:
|
||||
case .canvasPresent:
|
||||
let session = try container.decode(String.self, forKey: .session)
|
||||
let path = try container.decodeIfPresent(String.self, forKey: .path)
|
||||
let placement = try container.decodeIfPresent(CanvasPlacement.self, forKey: .placement)
|
||||
self = .canvasShow(session: session, path: path, placement: placement)
|
||||
self = .canvasPresent(session: session, path: path, placement: placement)
|
||||
|
||||
case .canvasHide:
|
||||
let session = try container.decode(String.self, forKey: .session)
|
||||
|
||||
Reference in New Issue
Block a user