diff --git a/api/openapi.yaml b/api/openapi.yaml index 354b558..5c8487c 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -875,17 +875,15 @@ paths: "404": { $ref: "#/components/responses/Error" } "409": { $ref: "#/components/responses/Error" } - /api/tasks/{taskId}/raw: - parameters: - - { name: taskId, in: path, required: true, schema: { type: string } } + /api/raw: get: - operationId: getTaskRaw + operationId: getRaw description: > A regular file on the server, whole, with a content type chosen by its extension: an HTML page in the app's Page view and the stylesheets, scripts and images it loads. The response carries a sandbox Content-Security-Policy, so a page opened from this address directly can't act on the API as its viewer. parameters: - - { name: path, in: query, required: true, schema: { type: string }, description: "Slash-separated, absolute or relative to the task's worktree root." } + - { name: path, in: query, required: true, schema: { type: string }, description: "Absolute and slash-separated." } responses: "200": description: The file's bytes. @@ -893,7 +891,6 @@ paths: "*/*": { schema: { type: string, format: binary } } "400": { $ref: "#/components/responses/Error" } "404": { $ref: "#/components/responses/Error" } - "409": { $ref: "#/components/responses/Error" } /api/terminals: get: diff --git a/docs/macos.md b/docs/macos.md index acb79db..c6a7cca 100644 --- a/docs/macos.md +++ b/docs/macos.md @@ -37,7 +37,7 @@ Every build is signed for distribution outside the App Store: the team's Develop - The transcript is a plain `VStack` in a `ScrollView`, not lazy: a `LazyVStack` estimates the height of rows it hasn't shown yet and corrects it when they scroll into view, without moving the scroll offset, so scrolling up through rows not yet shown jumped by each correction; SwiftUI can't move the offset mid-scroll without stopping its momentum. - The terminal cursor is a steady block: SwiftTerm's blinking cursor restarts its Core Animation fade on every keypress, scheduled 0.7 s out, and on a ProMotion display macOS then holds the window's screen update until that fade starts, so each typed letter appears about 0.7 s late. SwiftTerm redraws the whole screen whenever a terminal color is set, even when its value hasn't changed. -- The Page view loads a worktree page from a plain-HTTP server the app runs on a loopback port (`http://127.0.0.1://`), which fetches each file through the server's `getTaskRaw` endpoint. The page's relative links to its stylesheets, scripts and images resolve to files beside it, and "↗ Browser" opens the same address. Previews load from their loopback forwards at `-.localhost`. App Transport Security blocks plain HTTP to `*.localhost` even with `NSAllowsLocalNetworking`; the `localhost` exception domain with subdomains in `Info.plist` allows it (loopback IP addresses need no exception). `NSAllowsArbitraryLoadsInWebContent` lets the Page view load plain-HTTP websites without lifting ATS for the app's own requests. +- The Page view loads a page file from a plain-HTTP server the app runs on a loopback port, at the file's absolute path on the server (`http://127.0.0.1:/`), which fetches each file through the server's `getRaw` endpoint. So a page's relative and absolute references to its stylesheets, scripts and images both resolve to files on the server, and the app turns `file://` references in the HTML and stylesheets it serves into plain absolute paths, since WebKit won't load `file://` into an http page. "↗ Browser" opens the same address. iOS reclaims the listening socket while the app is suspended, so the app binds it again on the same port each time it returns to the foreground. Previews load from their loopback forwards at `-.localhost`. App Transport Security blocks plain HTTP to `*.localhost` even with `NSAllowsLocalNetworking`; the `localhost` exception domain with subdomains in `Info.plist` allows it (loopback IP addresses need no exception). `NSAllowsArbitraryLoadsInWebContent` lets the Page view load plain-HTTP websites without lifting ATS for the app's own requests. - Each Page view tab's `WKWebView` belongs to `Pages`, not to the SwiftUI view, so it keeps its page while the sheet is closed and agents can drive it with `drive_page` (navigate, JavaScript, capture) from the client connection. All tabs share WebKit's default persistent data store, so a site the human signs into stays signed in across launches. A link that opens a new window becomes a new tab of the same task. Capture refuses a tab that isn't on screen (sheet closed, or another tab showing), since its snapshot would show nothing the human sees. Passkey sign-in may fail, because WebKit allows WebAuthn in an embedded view only for apps with Apple's web browser entitlement; a password with a 2FA code works. ## Updates diff --git a/internal/api/api.gen.go b/internal/api/api.gen.go index 7c21f9d..b1a6ed3 100644 --- a/internal/api/api.gen.go +++ b/internal/api/api.gen.go @@ -1893,6 +1893,12 @@ type GetProjectImageParams struct { Path string `form:"path" json:"path"` } +// GetRawParams defines parameters for GetRaw. +type GetRawParams struct { + // Path Absolute and slash-separated. + Path string `form:"path" json:"path"` +} + // GetTaskChangesParams defines parameters for GetTaskChanges. type GetTaskChangesParams struct { // Since A commit to compare with instead of the merge-base, such as a user.message event's head. Not allowed with snapshot. @@ -1954,12 +1960,6 @@ type MergeTaskJSONBody struct { // MergeTaskJSONBodyTarget defines parameters for MergeTask. type MergeTaskJSONBodyTarget string -// GetTaskRawParams defines parameters for GetTaskRaw. -type GetTaskRawParams struct { - // Path Slash-separated, absolute or relative to the task's worktree root. - Path string `form:"path" json:"path"` -} - // GetTaskTerminalParams defines parameters for GetTaskTerminal. type GetTaskTerminalParams struct { Cols int `form:"cols" json:"cols"` @@ -2220,6 +2220,9 @@ type ServerInterface interface { // (POST /api/projects/{projectId}/todo/tasks) StartTodoItem(w http.ResponseWriter, r *http.Request, projectId string) + // (GET /api/raw) + GetRaw(w http.ResponseWriter, r *http.Request, params GetRawParams) + // (PUT /api/reviews/{reviewId}/findings/{index}) SetFindingState(w http.ResponseWriter, r *http.Request, reviewId string, index int) @@ -2295,9 +2298,6 @@ type ServerInterface interface { // (DELETE /api/tasks/{taskId}/queue/{inputId}) WithdrawMessage(w http.ResponseWriter, r *http.Request, taskId string, inputId int64) - // (GET /api/tasks/{taskId}/raw) - GetTaskRaw(w http.ResponseWriter, r *http.Request, taskId string, params GetTaskRawParams) - // (DELETE /api/tasks/{taskId}/ready) DismissReady(w http.ResponseWriter, r *http.Request, taskId string) @@ -3490,6 +3490,39 @@ func (siw *ServerInterfaceWrapper) StartTodoItem(w http.ResponseWriter, r *http. handler.ServeHTTP(w, r) } +// GetRaw operation middleware +func (siw *ServerInterfaceWrapper) GetRaw(w http.ResponseWriter, r *http.Request) { + + var err error + _ = err + + // Parameter object where we will unmarshal all parameters from the context + var params GetRawParams + + // ------------- Required query parameter "path" ------------- + + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) + if err != nil { + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "path"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) + } + return + } + + handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + siw.Handler.GetRaw(w, r, params) + })) + + for _, middleware := range siw.HandlerMiddlewares { + handler = middleware(handler) + } + + handler.ServeHTTP(w, r) +} + // SetFindingState operation middleware func (siw *ServerInterfaceWrapper) SetFindingState(w http.ResponseWriter, r *http.Request) { @@ -4320,48 +4353,6 @@ func (siw *ServerInterfaceWrapper) WithdrawMessage(w http.ResponseWriter, r *htt handler.ServeHTTP(w, r) } -// GetTaskRaw operation middleware -func (siw *ServerInterfaceWrapper) GetTaskRaw(w http.ResponseWriter, r *http.Request) { - - var err error - _ = err - - // ------------- Path parameter "taskId" ------------- - var taskId string - - err = runtime.BindStyledParameterWithOptions("simple", "taskId", r.PathValue("taskId"), &taskId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true}) - if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "taskId", Err: err}) - return - } - - // Parameter object where we will unmarshal all parameters from the context - var params GetTaskRawParams - - // ------------- Required query parameter "path" ------------- - - err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) - if err != nil { - var requiredError *runtime.RequiredParameterError - if errors.As(err, &requiredError) { - siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "path"}) - } else { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) - } - return - } - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.GetTaskRaw(w, r, taskId, params) - })) - - for _, middleware := range siw.HandlerMiddlewares { - handler = middleware(handler) - } - - handler.ServeHTTP(w, r) -} - // DismissReady operation middleware func (siw *ServerInterfaceWrapper) DismissReady(w http.ResponseWriter, r *http.Request) { @@ -5023,7 +5014,7 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/diff", wrapper.GetTaskDiff) m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/dir", wrapper.GetTaskDir) m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/file", wrapper.GetTaskFile) - m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/raw", wrapper.GetTaskRaw) + m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/raw", wrapper.GetRaw) m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/terminals", wrapper.ListTerminals) m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/tasks/{taskId}/terminals", wrapper.StartTaskTerminal) m.HandleFunc(http.MethodDelete+" "+options.BaseURL+"/api/tasks/{taskId}/terminals/{terminalId}", wrapper.CloseTaskTerminal) @@ -5074,368 +5065,368 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", - "/3sA", + "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", + "3ISJKGBo4YiZ/GqU1B8+/O8BAA==", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/server/files.go b/internal/server/files.go index a846a98..85d8544 100644 --- a/internal/server/files.go +++ b/internal/server/files.go @@ -226,16 +226,12 @@ func serveFile(w http.ResponseWriter, root, rel string) { writeJSON(w, http.StatusOK, fc) } -func (s *Server) GetTaskRaw(w http.ResponseWriter, r *http.Request, taskID string, params api.GetTaskRawParams) { - t, ok := s.activeTask(w, r, taskID) - if !ok { +func (s *Server) GetRaw(w http.ResponseWriter, r *http.Request, params api.GetRawParams) { + full := filepath.Clean(filepath.FromSlash(params.Path)) + if !filepath.IsAbs(full) { + writeError(w, http.StatusBadRequest, errors.New("path must be absolute")) return } - if params.Path == "" { - writeError(w, http.StatusBadRequest, errors.New("path is required")) - return - } - name, full := taskPath(t.WorktreePath, params.Path) f, err := os.Open(full) if err != nil { @@ -254,7 +250,7 @@ func (s *Server) GetTaskRaw(w http.ResponseWriter, r *http.Request, taskID strin return } - contentType := mime.TypeByExtension(path.Ext(name)) + contentType := mime.TypeByExtension(filepath.Ext(full)) if contentType == "" { contentType = "application/octet-stream" } diff --git a/mac/Sources/Byre/Pages.swift b/mac/Sources/Byre/Pages.swift index 101d09c..db7b0a4 100644 --- a/mac/Sources/Byre/Pages.swift +++ b/mac/Sources/Byre/Pages.swift @@ -34,7 +34,8 @@ enum Page: Hashable { @MainActor func url(_ store: Store) -> URL? { switch self { - case .file(let taskId, let path): store.pages.url(taskId, path) + case .file(let taskId, let path): + path.hasPrefix("/") ? store.pages.url(path) : store.findTask(taskId).flatMap { store.pages.url("\($0.worktreePath)/\(path)") } case .preview(let taskId, let port): store.forwards.url(taskId, port) case .web: store.pages.existing(self)?.url } @@ -139,7 +140,7 @@ extension Store { final class Pages { private(set) var port: Int? private(set) var titles: [Page: String] = [:] - @ObservationIgnored var served: [String: [String: Data]] = [:] + @ObservationIgnored var served: [String: Data] = [:] @ObservationIgnored var popup: ((Page) -> Void)? @ObservationIgnored private var listener: PageListener? @ObservationIgnored private var views: [Page: WKWebView] = [:] @@ -157,14 +158,14 @@ final class Pages { Task { @MainActor in self?.port = port } - }, served: { [weak self] taskId, path, body in + }, served: { [weak self] path, body in Task { @MainActor in - self?.served[taskId, default: [:]][path] = body + self?.served[path] = body } }) } - func url(_ taskId: String, _ path: String) -> URL? { + func url(_ path: String) -> URL? { guard let port else { return nil } @@ -172,7 +173,7 @@ final class Pages { c.scheme = "http" c.host = "127.0.0.1" c.port = port - c.path = "/\(taskId)/\(path)" + c.path = path return c.url } @@ -253,6 +254,16 @@ final class Pages { return "Loaded \(view.url?.absoluteString ?? url.absoluteString): \(view.title ?? "")" } + func loaded(_ view: WKWebView) async -> Set { + let urls = (try? await view.callAsyncJavaScript("return [location.href, ...performance.getEntriesByType('resource').map(e => e.name)]", contentWorld: .defaultClient)) as? [String] ?? [] + return Set(urls.compactMap { s -> String? in + guard let c = URLComponents(string: s), c.host == "127.0.0.1", c.port == port else { + return nil + } + return c.path.hasSuffix("/") ? "\(c.path)index.html" : c.path + }) + } + func js(_ view: WKWebView, _ code: String) async throws -> String { let value = try await view.callAsyncJavaScript(code, contentWorld: .page) guard let value, !(value is NSNull) else { @@ -297,9 +308,9 @@ final class Pages { port = nil } - static func fetch(_ api: API, _ taskId: String, _ path: String) async -> (status: Int, type: String, body: Data) { + static func fetch(_ api: API, _ path: String) async -> (status: Int, type: String, body: Data) { do { - let (body, response) = try await api.session.data(from: api.url("/api/tasks/\(taskId)/raw", [URLQueryItem(name: "path", value: path)])) + let (body, response) = try await api.session.data(from: api.url("/api/raw", [URLQueryItem(name: "path", value: path)])) let http = response as! HTTPURLResponse return (http.statusCode, http.value(forHTTPHeaderField: "Content-Type") ?? "application/octet-stream", body) } catch { @@ -314,30 +325,61 @@ private let maxHead = 64 << 10 private final class PageListener: @unchecked Sendable { private let api: API private let queue = DispatchQueue(label: "run.fc.byre.pages") - private let served: @Sendable (String, String, Data) -> Void + private let ready: @Sendable (Int) -> Void + private let served: @Sendable (String, Data) -> Void private var listener: NWListener? + private var port: UInt16 = 0 + private var closed = false - init(api: API, ready: @escaping @Sendable (Int) -> Void, served: @escaping @Sendable (String, String, Data) -> Void) { + init(api: API, ready: @escaping @Sendable (Int) -> Void, served: @escaping @Sendable (String, Data) -> Void) { self.api = api + self.ready = ready self.served = served + queue.async { + self.listen() + } + #if os(iOS) + NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: nil) { [weak self] _ in + guard let self else { + return + } + self.queue.async { + self.listen() + } + } + #endif + } + + // iOS reclaims a suspended app's listening sockets, so the listener is bound again on the same port each time the app returns to the foreground. + private func listen() { + guard !closed else { + return + } + listener?.cancel() + listener = nil let params = NWParameters.tcp - params.requiredLocalEndpoint = .hostPort(host: .ipv4(.loopback), port: .any) + params.allowLocalEndpointReuse = true + params.requiredLocalEndpoint = .hostPort(host: .ipv4(.loopback), port: port == 0 ? .any : NWEndpoint.Port(rawValue: port)!) let listener: NWListener do { listener = try NWListener(using: params) } catch { - log.error("page listener: \(String(describing: error), privacy: .public)") + failed(nil, error) return } self.listener = listener - listener.stateUpdateHandler = { [weak listener] state in + listener.stateUpdateHandler = { [weak self, weak listener] state in + guard let self, let listener, self.listener === listener else { + return + } switch state { case .ready: - if let port = listener?.port { - ready(Int(port.rawValue)) + if self.port == 0, let port = listener.port { + self.port = port.rawValue + self.ready(Int(port.rawValue)) } case .failed(let error): - log.error("page listener: \(String(describing: error), privacy: .public)") + self.failed(listener, error) default: break } @@ -353,8 +395,19 @@ private final class PageListener: @unchecked Sendable { listener.start(queue: queue) } + private func failed(_ listener: NWListener?, _ error: any Error) { + log.error("page listener on port \(self.port): \(String(describing: error), privacy: .public)") + listener?.cancel() + queue.asyncAfter(deadline: .now() + 1) { + if self.listener === listener { + self.listen() + } + } + } + func close() { queue.async { + self.closed = true self.listener?.newConnectionHandler = nil self.listener?.cancel() self.listener = nil @@ -389,7 +442,7 @@ private final class PageListener: @unchecked Sendable { } // A browser must not reach this authenticated file bridge through a // hostname that an attacker can rebind to loopback. - guard let port = listener?.port, hosts == ["127.0.0.1:\(port.rawValue)"] else { + guard port != 0, hosts == ["127.0.0.1:\(port)"] else { respond(conn, 403, "text/plain; charset=utf-8", Data("forbidden host".utf8)) return } @@ -398,18 +451,14 @@ private final class PageListener: @unchecked Sendable { respond(conn, 400, "text/plain; charset=utf-8", Data("bad request".utf8)) return } - let route = path.drop(while: { $0 == "/" }).split(separator: "/", maxSplits: 1, omittingEmptySubsequences: false) - guard route.count == 2, !route[1].isEmpty else { - respond(conn, 404, "text/plain; charset=utf-8", Data("not found".utf8)) - return - } - let taskId = String(route[0]) - let file = route[1].hasSuffix("/") ? "\(route[1])index.html" : String(route[1]) + let file = path.hasSuffix("/") ? "\(path)index.html" : path let api = api Task { - let (status, type, body) = await Pages.fetch(api, taskId, file) - self.served(taskId, file, body) - self.respond(conn, status, type, body) + let (status, type, body) = await Pages.fetch(api, file) + self.served(file, body) + // Agents write file:///abs/path references, which a page served over http can't load; /abs/path serves the same file here. + let shown = type.hasPrefix("text/html") || type.hasPrefix("text/css") ? body.replacing(Data("file://".utf8), with: Data()) : body + self.respond(conn, status, type, shown) } } @@ -424,26 +473,30 @@ private final class PageListener: @unchecked Sendable { @MainActor @Observable private final class PageWatch { - private(set) var reloads = 0 + private(set) var reloads: [Page: Int] = [:] @ObservationIgnored private var timer: Task? - func check(_ api: API, _ pages: Pages, _ taskId: String) { + func check(_ api: API, _ pages: Pages, _ views: [Page: WKWebView]) { timer?.cancel() timer = Task { try? await Task.sleep(for: .milliseconds(1500)) - var changed = false - for (path, shown) in pages.served[taskId] ?? [:] { - let fresh = await Pages.fetch(api, taskId, path).body + var loaded: [Page: Set] = [:] + for (page, view) in views { + loaded[page] = await pages.loaded(view) + } + var fresh: [String: Data] = [:] + for path in loaded.values.reduce(Set(), { $0.union($1) }) { + fresh[path] = await Pages.fetch(api, path).body if Task.isCancelled { return } - if fresh != shown { - pages.served[taskId]?[path] = fresh - changed = true - } } - if changed { - reloads += 1 + let changed = Set(fresh.filter { pages.served[$0.key] != $0.value }.keys) + for (path, body) in fresh { + pages.served[path] = body + } + for (page, paths) in loaded where !paths.isDisjoint(with: changed) { + reloads[page, default: 0] += 1 } } } @@ -476,7 +529,7 @@ struct PageTabs: View { ZStack { ForEach(shown.pages, id: \.self) { page in if let view = store.pageView(page) { - WebPage(view: view, reloads: page.isFile ? watch.reloads : 0, shown: page == shown.current, refresh: page.isFile) + WebPage(view: view, reloads: watch.reloads[page] ?? 0, shown: page == shown.current, refresh: page.isFile) } else if page == shown.current { EmptyText(text: "Loading…") } @@ -486,11 +539,12 @@ struct PageTabs: View { .task(id: shown.current.taskId) { let taskId = shown.current.taskId let watch = watch - let api = store.api - let pages = store.pages + let store = store let off = store.selectedFeed?.appended.add { events in if events.contains(where: { $0.kind == "agent.tool_result" || $0.kind == "turn.ended" }) { - watch.check(api, pages, taskId) + let files = (store.shownPages[taskId]?.pages ?? []).filter(\.isFile) + let views = Dictionary(uniqueKeysWithValues: files.compactMap { page in store.pages.existing(page).map { (page, $0) } }) + watch.check(store.api, store.pages, views) } } await untilCancelled()