Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mobile-dev",
"version": "0.1.160",
"version": "0.1.161",
"description": "Keep a simulator beside the chat while building, running, or debugging iOS and Android apps. Stream devices, read native and Metro logs, analyze CPU and React profiles with TraceSift, render interactive CPU, memory, and FPS recordings, and control apps with Mobile Dev tools.",
"author": {
"name": "Callstack"
Expand Down
1 change: 1 addition & 0 deletions docs/mcp-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
| `mobile_read_logs` | Read a log batch and source status |
| `mobile_logs_keep_alive` | Keep background collection alive without sending logs (app only) |
| `mobile_logs_close` | Stop a session's log readers |
| `mobile_crashes_session` | Watch one device's crash reports for the panel's crash toast; read and close it like a log session (app only) |
| `mobile_performance_sources` | Read running apps and foreground identity on the selected iOS or Android device |
| `mobile_cpu_session` | Connect a native process and thread CPU plus memory monitor |
| `mobile_read_cpu` | Read live CPU and memory samples and connection status |
Expand Down
2 changes: 2 additions & 0 deletions docs/telemetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,8 @@ Since 0.1.99, `ui.logs.query_parse` measures query compilation in milliseconds o

`ui.logs.send` measures log attachment and chat delivery in milliseconds, including queued context writes and composer retries. The existing log send counter and error coverage remain in place. No log text, stack traces or device IDs go to Sentry.

Since 0.1.161, each visible simulator panel opens an app-only crash session for its booted iOS simulator or Android device, independent of Logs; log sessions run the same crash watcher scoped to their app or process. `logs.crash.detected` counts crash records, with `device_platform` and `crash_source`: `ios_exit` for SpringBoard's immediate crash-signal exit line, `ios_log` for the app's own crash message read from the unified log about a second later (uncaught exceptions, Swift fatal errors, React Native fatal JS errors; none for an external signal), `ios_report` for the `.ips` report written 30-45 seconds later, and `android_logcat` for `FATAL EXCEPTION` blocks and libc fatal signals. One iOS crash therefore usually records several sources. `logs.crash.parse` measures `.ips` parsing in milliseconds, the only expensive parse. Both use the `logs` surface and are recorded per crash because crashes are rare. In the UI, `ui.crash.toast_shown`, `ui.crash.attached`, `ui.crash.sent_to_chat`, `ui.crash.dismissed`, `ui.crash.report_attached` (a stack arriving for a toast already shown) and `ui.crash.watch_retry` count toast activity and session recovery; chat delivery time stays under `ui.logs.send`. Crash sessions long-poll for up to 20 seconds and pause reads while the document is hidden, sending only keep-alives. Crash messages, stack traces, app IDs, process names, report paths and device IDs stay local.

`ui.logs.session_expired` counts expired sessions that trigger automatic recovery. It uses the active Logs context without sending session IDs, error text or log content.

`ui.logs.retention` measures bounded buffer updates in milliseconds. `ui.logs.evicted` counts rows removed locally to meet the shared row and text limits; `ui.logs.dropped` still counts only rows lost from the server buffer. Existing filter timing and row gauges cover the resulting list. These measurements contain no log text or source metadata.
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "codex-mobile-dev-plugin",
"version": "0.1.160",
"version": "0.1.161",
"private": true,
"type": "module",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion scripts/smoke-package.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ try {
assert.deepEqual(workspace._meta["openai/ui"].entrypoints, [{ type: "global" }]);
const workspaceResource = await client.readResource({ uri: workspace._meta.ui.resourceUri });
assert.ok(workspaceResource.contents[0].text.includes('data-view="workspace" data-layout="split"'));
for (const name of ["mobile_log_sources", "mobile_logs_session", "mobile_read_logs", "mobile_logs_keep_alive", "mobile_logs_close", "mobile_performance_sources", "mobile_cpu_session", "mobile_read_cpu", "mobile_cpu_close"]) {
for (const name of ["mobile_log_sources", "mobile_logs_session", "mobile_read_logs", "mobile_logs_keep_alive", "mobile_logs_close", "mobile_crashes_session", "mobile_performance_sources", "mobile_cpu_session", "mobile_read_cpu", "mobile_cpu_close"]) {
assert.ok(tools.tools.some(tool => tool.name === name), `Missing developer tool: ${name}`);
}
const panel = await client.callTool({ name: "mobile_open_simulator", arguments: {} }, undefined, { timeout: 30000 });
Expand Down
Loading
Loading