diff --git a/api/openapi.yaml b/api/openapi.yaml index 5c8487c..354b558 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -875,15 +875,17 @@ paths: "404": { $ref: "#/components/responses/Error" } "409": { $ref: "#/components/responses/Error" } - /api/raw: + /api/tasks/{taskId}/raw: + parameters: + - { name: taskId, in: path, required: true, schema: { type: string } } get: - operationId: getRaw + operationId: getTaskRaw 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: "Absolute and slash-separated." } + - { name: path, in: query, required: true, schema: { type: string }, description: "Slash-separated, absolute or relative to the task's worktree root." } responses: "200": description: The file's bytes. @@ -891,6 +893,7 @@ 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 c6a7cca..7ee2471 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 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. +- 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; absolute and `file://` references don't load. "↗ 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/agents/clients.go b/internal/agents/clients.go index c5353e2..aa4b785 100644 --- a/internal/agents/clients.go +++ b/internal/agents/clients.go @@ -97,6 +97,7 @@ func (m *Manager) clientTools(l *live) []mcp.Tool { { Name: "show_page", Description: "Show the human a file from the Mac byre runs on, or a website, in byre's app on a client Mac, rendered in the page view beside this task's transcript, as a browser would show it: an HTML page (loading the stylesheets, scripts and images beside it), a PDF, an image, or (with url) a web page in a new tab. " + + "A page loads other files only by relative paths (style.css, ../img/cat.png); absolute paths and file:// addresses don't load. " + "Whenever you write or change a file the human should see as it looks (an HTML mockup or preview, a PDF, an image, an SVG), show it with this before your turn ends, without being asked or asking first. " + "When work needs a website (a developer console, a dashboard, a settings page), open it with url and work in it with drive_page rather than asking the human to open it; the page view keeps its sign-ins, so ask the human only to sign in. " + "Show it on the Mac the human's latest message was sent from.", diff --git a/internal/api/api.gen.go b/internal/api/api.gen.go index b1a6ed3..7c21f9d 100644 --- a/internal/api/api.gen.go +++ b/internal/api/api.gen.go @@ -1893,12 +1893,6 @@ 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. @@ -1960,6 +1954,12 @@ 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,9 +2220,6 @@ 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) @@ -2298,6 +2295,9 @@ 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,39 +3490,6 @@ 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) { @@ -4353,6 +4320,48 @@ 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) { @@ -5014,7 +5023,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/raw", wrapper.GetRaw) + m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/raw", wrapper.GetTaskRaw) 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) @@ -5065,368 +5074,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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", - "3ISJKGBo4YiZ/GqU1B8+/O8BAA==", + "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", + "/3sA", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/server/files.go b/internal/server/files.go index 85d8544..a846a98 100644 --- a/internal/server/files.go +++ b/internal/server/files.go @@ -226,12 +226,16 @@ func serveFile(w http.ResponseWriter, root, rel string) { writeJSON(w, http.StatusOK, fc) } -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")) +func (s *Server) GetTaskRaw(w http.ResponseWriter, r *http.Request, taskID string, params api.GetTaskRawParams) { + t, ok := s.activeTask(w, r, taskID) + if !ok { 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 { @@ -250,7 +254,7 @@ func (s *Server) GetRaw(w http.ResponseWriter, r *http.Request, params api.GetRa return } - contentType := mime.TypeByExtension(filepath.Ext(full)) + contentType := mime.TypeByExtension(path.Ext(name)) if contentType == "" { contentType = "application/octet-stream" } diff --git a/mac/Sources/Byre/Pages.swift b/mac/Sources/Byre/Pages.swift index db7b0a4..bb16129 100644 --- a/mac/Sources/Byre/Pages.swift +++ b/mac/Sources/Byre/Pages.swift @@ -34,8 +34,7 @@ enum Page: Hashable { @MainActor func url(_ store: Store) -> URL? { switch self { - case .file(let taskId, let path): - path.hasPrefix("/") ? store.pages.url(path) : store.findTask(taskId).flatMap { store.pages.url("\($0.worktreePath)/\(path)") } + case .file(let taskId, let path): store.pages.url(taskId, path) case .preview(let taskId, let port): store.forwards.url(taskId, port) case .web: store.pages.existing(self)?.url } @@ -140,7 +139,7 @@ extension Store { final class Pages { private(set) var port: Int? private(set) var titles: [Page: String] = [:] - @ObservationIgnored var served: [String: Data] = [:] + @ObservationIgnored var served: [String: [String: Data]] = [:] @ObservationIgnored var popup: ((Page) -> Void)? @ObservationIgnored private var listener: PageListener? @ObservationIgnored private var views: [Page: WKWebView] = [:] @@ -158,14 +157,14 @@ final class Pages { Task { @MainActor in self?.port = port } - }, served: { [weak self] path, body in + }, served: { [weak self] taskId, path, body in Task { @MainActor in - self?.served[path] = body + self?.served[taskId, default: [:]][path] = body } }) } - func url(_ path: String) -> URL? { + func url(_ taskId: String, _ path: String) -> URL? { guard let port else { return nil } @@ -173,7 +172,7 @@ final class Pages { c.scheme = "http" c.host = "127.0.0.1" c.port = port - c.path = path + c.path = "/\(taskId)/\(path)" return c.url } @@ -254,16 +253,6 @@ 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 { @@ -308,9 +297,9 @@ final class Pages { port = nil } - static func fetch(_ api: API, _ path: String) async -> (status: Int, type: String, body: Data) { + static func fetch(_ api: API, _ taskId: String, _ path: String) async -> (status: Int, type: String, body: Data) { do { - let (body, response) = try await api.session.data(from: api.url("/api/raw", [URLQueryItem(name: "path", value: path)])) + let (body, response) = try await api.session.data(from: api.url("/api/tasks/\(taskId)/raw", [URLQueryItem(name: "path", value: path)])) let http = response as! HTTPURLResponse return (http.statusCode, http.value(forHTTPHeaderField: "Content-Type") ?? "application/octet-stream", body) } catch { @@ -326,12 +315,12 @@ private final class PageListener: @unchecked Sendable { private let api: API private let queue = DispatchQueue(label: "run.fc.byre.pages") private let ready: @Sendable (Int) -> Void - private let served: @Sendable (String, Data) -> Void + private let served: @Sendable (String, 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, Data) -> Void) { + init(api: API, ready: @escaping @Sendable (Int) -> Void, served: @escaping @Sendable (String, String, Data) -> Void) { self.api = api self.ready = ready self.served = served @@ -451,14 +440,18 @@ private final class PageListener: @unchecked Sendable { respond(conn, 400, "text/plain; charset=utf-8", Data("bad request".utf8)) return } - let file = path.hasSuffix("/") ? "\(path)index.html" : path + 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 api = api Task { - 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) + let (status, type, body) = await Pages.fetch(api, taskId, file) + self.served(taskId, file, body) + self.respond(conn, status, type, body) } } @@ -473,30 +466,26 @@ private final class PageListener: @unchecked Sendable { @MainActor @Observable private final class PageWatch { - private(set) var reloads: [Page: Int] = [:] + private(set) var reloads = 0 @ObservationIgnored private var timer: Task? - func check(_ api: API, _ pages: Pages, _ views: [Page: WKWebView]) { + func check(_ api: API, _ pages: Pages, _ taskId: String) { timer?.cancel() timer = Task { try? await Task.sleep(for: .milliseconds(1500)) - 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 + var changed = false + for (path, shown) in pages.served[taskId] ?? [:] { + let fresh = await Pages.fetch(api, taskId, path).body if Task.isCancelled { return } + if fresh != shown { + pages.served[taskId]?[path] = fresh + changed = true + } } - 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 + if changed { + reloads += 1 } } } @@ -529,7 +518,7 @@ struct PageTabs: View { ZStack { ForEach(shown.pages, id: \.self) { page in if let view = store.pageView(page) { - WebPage(view: view, reloads: watch.reloads[page] ?? 0, shown: page == shown.current, refresh: page.isFile) + WebPage(view: view, reloads: page.isFile ? watch.reloads : 0, shown: page == shown.current, refresh: page.isFile) } else if page == shown.current { EmptyText(text: "Loading…") } @@ -539,12 +528,11 @@ struct PageTabs: View { .task(id: shown.current.taskId) { let taskId = shown.current.taskId let watch = watch - let store = store + let api = store.api + let pages = store.pages let off = store.selectedFeed?.appended.add { events in if events.contains(where: { $0.kind == "agent.tool_result" || $0.kind == "turn.ended" }) { - 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) + watch.check(api, pages, taskId) } } await untilCancelled()