feat(ios): read-only workspace Files browser on the Agents surface#100767
Conversation
9029e91 to
fa54358
Compare
3c98351 to
a4c5af1
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3c9835192a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Codex review: needs real behavior proof before merge. Reviewed July 6, 2026, 12:24 PM ET / 16:24 UTC. Summary PR surface: Docs +2, Other +510. Total +512 across 12 files. Reproducibility: yes. from source inspection: opening the Files screen while disconnected makes Review metrics: 1 noteworthy metric.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Keep the read-only iOS client on the merged gateway RPCs, add connectivity/scene-aware reload behavior, then verify browse, preview, and share on simulator or device before merge. Do we have a high-confidence way to reproduce the issue? Yes, from source inspection: opening the Files screen while disconnected makes Is this the best way to solve the issue? No, not yet. The overall feature is the right iOS client layer for the merged read-only RPCs, but the implementation needs the same connectivity-aware refresh behavior used by sibling operator screens before it is the best merge path. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 7853aa35a46c. Label changesLabel justifications:
Evidence reviewedPR surface: Docs +2, Other +510. Total +512 across 12 files. View PR surface stats
Acceptance criteria:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (1 earlier review cycle)
|
1a4711b to
ab567c9
Compare
a4c5af1 to
1e66c3f
Compare
05bd471 to
323e9ad
Compare
323e9ad to
70c4d17
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 70c4d17b10
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| .task(id: "\(self.agentId)|\(self.path)") { | ||
| await self.reload() | ||
| } |
There was a problem hiding this comment.
Retry file loads when the gateway connects
When the Files screen is opened while the operator gateway is still offline or connecting, this task runs once, records Could not load this folder., and then never reruns when appModel.isOperatorGatewayConnected flips to true because the task id only includes agentId|path and the view body does not observe gateway connectivity. This leaves the new Files tab stuck on the offline error after startup/reconnect until the user manually pulls to refresh; include connection/scene phase in the refresh key like the sibling operator surfaces or observe connectivity and reload.
Useful? React with 👍 / 👎.
70c4d17 to
bffd01f
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bffd01f61a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if let result = await self.fetchPage(offset: 0) { | ||
| self.entries = result.entries | ||
| self.totalEntries = result.totalentries | ||
| } |
There was a problem hiding this comment.
Clear stale directory entries on reload failure
When a directory has already loaded and a later full reload fails (for example after disconnecting, reconnecting to a gateway where the agent/path is rejected, or pulling to refresh while offline), the directory state is only overwritten in this success branch, so the error banner is shown above the previous agent/path's entries and those stale rows remain tappable. Clear entries/totalEntries in the reload failure path so a failed live read cannot present old workspace contents as current.
Useful? React with 👍 / 👎.
bffd01f to
e56c2c9
Compare
|
Land-ready review complete on the final iOS head.
Known gap: local simulator tests remain blocked by the documented machine-wide xcodebuild power-assertion failure. The full simulator build was previously green; the exact-head hosted iOS lane is the final native proof. |
|
Merged via squash.
|
…penclaw#100767) * feat(ios): add read-only workspace Files browser to the Agents surface * fix(ios): keep nav bar visible on pushed workspace file routes * fix(ios): make workspace file navigation stack-safe * docs(ios): note workspace file browser * fix(ios): isolate workspace share exports * chore(i18n): refresh iOS Files inventory * refactor(ios): encode workspace requests before dispatch * chore(i18n): refresh iOS inventory after rebase
…penclaw#100767) * feat(ios): add read-only workspace Files browser to the Agents surface * fix(ios): keep nav bar visible on pushed workspace file routes * fix(ios): make workspace file navigation stack-safe * docs(ios): note workspace file browser * fix(ios): isolate workspace share exports * chore(i18n): refresh iOS Files inventory * refactor(ios): encode workspace requests before dispatch * chore(i18n): refresh iOS inventory after rebase
Related: #100705
Builds on the gateway RPCs landed by #100738 and is now based directly on
main.What Problem This Solves
iOS operators cannot see what an agent produced or changed in its workspace. Checking a generated file, log, or edited config from the phone requires shell access to the gateway host.
Why This Change Was Made
Adds a read-only Files section to the Agents surface, backed by the new
agents.workspace.list/agents.workspace.getRPCs from #100738. It follows the existing section patterns: a newAgentRoute.filesdestination with an operations tile on the Agents overview, afilessidebar destination on iPad, and a Control-hub entry on iPhone. Directory drill-down uses destination links compatible with the existing typed owner stacks plus offset pagination ("Load More" against the gateway'stotalEntries). Text previews reuse the chat renderer's syntax highlighting (ChatCodeHighlightCache, now public inOpenClawChatUI); images decode from the base64 payload. Export mirrors the transcript-export flow with a validated basename, unique temp URL, andUIActivityViewControllershare sheet. Reloads clear prior preview bytes before fetching a new agent/path. All text uses brandedOpenClawTypetypography. The browser is strictly read-only.User Impact
iPhone and iPad users can browse the selected agent's workspace, preview text and image files, and share/export a file — without leaving the app.
Evidence
pnpm ios:build, Debug, iPhone 17 sim).RootTabsPresentationTestsupdated for the new sidebar destination. Local simulator test execution is currently blocked on this machine by an xcodebuild power-assertion failure (Failed to prevent system sleep during UI testing, IOPM error −536870211, reproduced on an unmodified checkout path); relying on CI for the test lane.pnpm native:i18n:syncrun for the new user-visible strings.maindelta is clean.apps/ios/CHANGELOG.mdUnreleased entry.