Remote Control for Codex.
This report summarizes scanner evidence for Emanuele-web04/remodex, a Swift project with 3,348 GitHub stars. SynthScan examined 270,241 lines of code across 966 source files, recording 786 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 3.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 687 finding(s).
Are imports declared and package/API names verified? 17 finding(s).
Are wrappers, guards, and repeated structures necessary? 698 finding(s).
Which changes need focused human review? 786 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 786 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | phodex-bridge/test/rollout-live-mirror.test.js | 2692 | function createTemporaryRolloutHome({ threadId, originator, source, lines }) { | CODE |
| LOW | phodex-bridge/test/rollout-watch.test.js | 339 | function makeTemporarySessionsHome() { | CODE |
| LOW | phodex-bridge/test/secure-transport.test.js | 29 | function createTestBridgeSecureTransport(options) { | CODE |
| LOW | phodex-bridge/test/secure-transport.test.js | 1041 | function encodeLengthPrefixedBuffer(buffer) { | CODE |
| LOW | phodex-bridge/test/desktop-ipc-shared.test.js | 376 | function withIsolatedIpcEnvironment(t) { | CODE |
| LOW | …dex-bridge/test/bridge-desktop-ipc-integration.test.js | 1671 | function loadBridgeWithTestDoubles({ | CODE |
| LOW | …dex-bridge/test/bridge-desktop-ipc-integration.test.js | 1726 | function createPlaintextSecureTransport() { | CODE |
| LOW | …dex-bridge/test/bridge-desktop-ipc-integration.test.js | 1742 | function createSecureDeviceStateDouble() { | CODE |
| LOW | phodex-bridge/test/worktree-origin.test.js | 9 | function makeCodexHomeWithWorktree({ token, repoName, checkoutRoot, worktreeName = repoName }) { | CODE |
| LOW | phodex-bridge/test/bridge.test.js | 155 | function expectedGeneratedImagePath(threadId, fileName) { | CODE |
| LOW | phodex-bridge/test/bridge.test.js | 2819 | fs.openSync = function openSyncWithRolloutCounter(filePath, ...args) { | CODE |
| LOW | phodex-bridge/test/desktop-ipc-action-follower.test.js | 8375 | function backgroundConversationSnapshot(threadId, status, { | CODE |
| LOW | phodex-bridge/test/desktop-ipc-action-follower.test.js | 8456 | async function startInitializedIpcTestServer(t, prefix) { | CODE |
| LOW | phodex-bridge/test/secure-device-state.test.js | 333 | function readCanonicalStateFromDisk() { | CODE |
| LOW | phodex-bridge/bin/remodex.js | 359 | function sanitizeBridgeServiceStatusForOutput(status = {}) { | CODE |
| LOW | phodex-bridge/bin/remodex.js | 368 | function sanitizeDaemonConfigForOutput(config) { | CODE |
| LOW | phodex-bridge/bin/remodex.js | 380 | function sanitizePairingSessionForOutput(pairingSession) { | CODE |
| LOW | phodex-bridge/src/package-version-status.js | 15 | function createBridgePackageVersionStatusReader({ | CODE |
| LOW | phodex-bridge/src/package-version-status.js | 29 | return async function readBridgePackageVersionStatus() { | CODE |
| LOW | phodex-bridge/src/package-version-status.js | 70 | async function resolveReportedLatestVersion({ | CODE |
| LOW | phodex-bridge/src/package-version-status.js | 94 | function refreshLatestVersionInBackground({ | CODE |
| LOW | phodex-bridge/src/package-version-status.js | 137 | function fetchLatestPublishedVersion(registryUrl) { | CODE |
| LOW | phodex-bridge/src/workspace-checkpoints.js | 19 | async function workspaceCheckpointCapture(repoRoot, params) { | CODE |
| LOW | phodex-bridge/src/workspace-checkpoints.js | 83 | async function workspaceCheckpointRestorePreview(repoRoot, params) { | CODE |
| LOW | phodex-bridge/src/workspace-checkpoints.js | 110 | async function workspaceCheckpointRestoreApply(repoRoot, params) { | CODE |
| LOW | phodex-bridge/src/workspace-checkpoints.js | 148 | function resolveCheckpointDescriptor(params, prefix = "") { | CODE |
| LOW | phodex-bridge/src/workspace-checkpoints.js | 224 | function backupDescriptorForRestore(params) { | CODE |
| LOW | phodex-bridge/src/workspace-checkpoints.js | 295 | async function changedFilesAgainstCommit(repoRoot, commit) { | CODE |
| LOW | phodex-bridge/src/bridge-status.js | 14 | function createBridgeStatusPublisher({ | CODE |
| LOW | phodex-bridge/src/bridge-status.js | 74 | function hasRelayConnectionGoneStale( | CODE |
| LOW | phodex-bridge/src/bridge-status.js | 87 | function buildHeartbeatBridgeStatus( | CODE |
| LOW | phodex-bridge/src/thread-row-enrichment.js | 11 | function forEachThreadRowInResponse(method, envelope, visit) { | CODE |
| LOW | phodex-bridge/src/thread-context-handler.js | 9 | function handleThreadContextRequest(rawMessage, sendResponse, parsedMessage = null) { | CODE |
| LOW⚡ | phodex-bridge/src/desktop-ipc-live-owner.js | 1702 | function applyFollowerModelAndReasoning(conversationId, params) { | CODE |
| LOW⚡ | phodex-bridge/src/desktop-ipc-live-owner.js | 1708 | function applyFollowerCollaborationMode(conversationId, params) { | CODE |
| LOW⚡ | phodex-bridge/src/desktop-ipc-live-owner.js | 1714 | function applyFollowerThreadSettings(conversationId, threadSettings, source = "desktop") { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 136 | function createDesktopIpcLiveOwner({ | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 546 | function markTurnInterruptedOptimistically(threadId, params) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 601 | function discardPendingTurnStartEntry(threadId, entry) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 627 | function resolvePendingTurnStartResponse(responseId, message) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 656 | function insertOptimisticPendingTurn(threadId, entry) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 707 | function refreshOptimisticFallbackForThread(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 732 | function removeOptimisticPendingTurn(threadId, entry) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 769 | function claimStartedThreadForPendingLocalStart(message) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 836 | function broadcastRemovedConversationState(threadId, { reason = "", skipArchiveMetadataBroadcast = false } = {}) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 873 | function broadcastThreadUnarchived(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 881 | function scheduleSidebarAnnouncement(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 901 | function replaySidebarAnnouncementAfterMaterialization(message, threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 937 | function cancelSidebarAnnouncement(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 947 | function queueThreadArchiveMetadataBroadcast(method, threadId, { cwd } = {}) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 960 | function flushPendingThreadArchiveMetadataBroadcasts() { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 982 | function maybeYieldOwnedThreadForPeerArchive(envelope) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1001 | function upsertConversationFromThread(thread) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1083 | function shouldDelayInitialSnapshotForHistory(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1099 | function requestInitialHistoryBaselineIfDue(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1127 | function stopAwaitingInitialHistory(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1135 | function scheduleInitialHistoryRetryWakeup(threadId, delayMs) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1149 | function clearInitialHistoryRetryWakeup(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1176 | function hydrateOwnedThreadFromRead(threadId) { | CODE |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1208 | function broadcastAllOwnedSnapshots() { | CODE |
| 556 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | phodex-bridge/test/secure-device-state.test.js | 23 | // ─── Relay Session Resolution ─────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/bin/remodex.js | 47 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/bridge.js | 1758 | // ─── Bridge-owned auth snapshot ───────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/project-handler.js | 26 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/project-handler.js | 87 | // ─── Project Methods ───────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/project-handler.js | 328 | // ─── Filesystem Helpers ────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/voice-handler.js | 179 | // ─── Audio validation helpers ─────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/push-notification-tracker.js | 57 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/account-status.js | 9 | // ─── Status composition ───────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/account-status.js | 90 | // ─── Settled snapshot helpers ─────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/voice-audio.js | 7 | // ─── WAV parsing ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/voice-audio.js | 91 | // ─── M4A parsing ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 177 | // ─── Git Status ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 273 | // ─── Git Diff ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 289 | // ─── Git Commit ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 315 | // ─── Git Draft Generation ──────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 422 | // ─── Git Push ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 462 | // ─── Git Pull ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 481 | // ─── Git Branches ───────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 545 | // ─── Git Checkout ───────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 584 | // ─── Git Log ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 611 | // ─── Git Create Branch ──────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 978 | // ─── Git Stash ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 986 | // ─── Git Stash Pop ──────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 997 | // ─── Git Reset to Remote ────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 1026 | // ─── Git Remote URL ─────────────────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 1034 | // ─── Git Stacked Actions / Pull Requests ───────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 1877 | // ─── Git Branches With Status ───────────────────────────────── | COMMENT |
| MEDIUM | phodex-bridge/src/git-handler.js | 2793 | // ─── Helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …dexMobile/Views/Shared/UsageStatusSummaryContent.swift | 69 | // ─── Shared Sections ──────────────────────────────────────── | COMMENT |
| MEDIUM | …dexMobile/Views/Shared/UsageStatusSummaryContent.swift | 136 | // ─── Row Rendering ────────────────────────────────────────── | COMMENT |
| MEDIUM | …dexMobile/Views/Shared/UsageStatusSummaryContent.swift | 231 | // ─── Formatting Helpers ───────────────────────────────────── | COMMENT |
| MEDIUM | …Mobile/Views/Turn/Messages/TurnMessageRegexCache.swift | 40 | // ─── Shared Helpers ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …odexMobile/Views/Turn/Messages/TurnMessageCaches.swift | 358 | // ─── Code Comment Directive Content Cache ─────────────────────────── | COMMENT |
| MEDIUM | …odexMobile/Views/Turn/Messages/TurnMessageCaches.swift | 372 | // ─── Thinking Disclosure Content Cache ────────────────────────────── | COMMENT |
| MEDIUM | …odexMobile/Views/Turn/Messages/TurnMessageCaches.swift | 386 | // ─── Diff Block Detection Cache ───────────────────────────────────── | COMMENT |
| MEDIUM | …odexMobile/Views/Turn/Messages/TurnMessageCaches.swift | 406 | // ─── File Change Grouping Cache ───────────────────────────────────── | COMMENT |
| MEDIUM | …Mobile/Views/Turn/Messages/TurnMessageComponents.swift | 347 | // ─── Message row ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | CodexMobile/CodexMobile/Views/Turn/Core/TurnView.swift | 74 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …le/Views/Turn/Core/TurnConversationContainerView.swift | 81 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …ile/CodexMobile/Views/Turn/Core/NewChatDraftView.swift | 771 | // ─── Runtime + branch rows ─────────────────────────────────── | COMMENT |
| MEDIUM | …xMobile/Views/Turn/Composer/TurnComposerHostView.swift | 61 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …CodexMobile/Views/Turn/Composer/TurnComposerView.swift | 161 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …obile/Views/Turn/Composer/TurnComposerMetaMapper.swift | 12 | // ─── Model Mapping ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …obile/Views/Turn/Composer/TurnComposerMetaMapper.swift | 77 | // ─── Runtime pill label ────────────────────────────────────────── | COMMENT |
| MEDIUM | …obile/Views/Turn/Composer/TurnComposerMetaMapper.swift | 177 | // ─── Reasoning Mapping ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …ile/CodexMobile/Views/Turn/Diff/TurnDiffRenderer.swift | 7 | // ─── Diff Classification ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …/CodexMobile/Views/Turn/Diff/TurnUnifiedDiffView.swift | 10 | // ─── Model ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/CodexMobile/Views/Turn/Diff/TurnUnifiedDiffView.swift | 61 | // ─── Parser ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/CodexMobile/Views/Turn/Diff/TurnUnifiedDiffView.swift | 247 | // ─── View ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/CodexMobile/Views/Turn/Diff/TurnUnifiedDiffView.swift | 353 | // ─── Hunk section ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/CodexMobile/Views/Turn/Diff/TurnUnifiedDiffView.swift | 456 | // ─── Row ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/CodexMobile/Views/Turn/Diff/TurnUnifiedDiffView.swift | 513 | // ─── Palette ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …Views/Turn/Timeline/TurnTimelineRenderProjection.swift | 9 | // ─── Render Item Models ─────────────────────────────────────── | COMMENT |
| MEDIUM | …Views/Turn/Timeline/TurnTimelineRenderProjection.swift | 149 | // ─── Projection ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …exMobile/Views/Turn/Timeline/TurnTimelineReducer.swift | 17 | // ─── ENTRY POINT ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …e/CodexMobile/Services/CodexService+AIChangeSets.swift | 233 | // ─── Ledger mutation helpers ─────────────────────────────────────── | COMMENT |
| MEDIUM | …e/CodexMobile/Services/CodexService+AIChangeSets.swift | 378 | // ─── Private helpers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …odexMobile/Services/GPTVoiceTranscriptionManager.swift | 104 | // ─── Recording lifecycle ───────────────────────────────────── | COMMENT |
| MEDIUM | …odexMobile/Services/GPTVoiceTranscriptionManager.swift | 260 | // ─── Duration timer ───────────────────────────────────────── | COMMENT |
| 11 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …Mobile/CodexMobileTests/TurnTimelineReducerTests.swift | 0 | status: completed path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …eTests/CodexServiceIncomingCommandExecutionTests.swift | 0 | status: completed path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …ile/CodexMobileTests/TurnSessionDiffSummaryTests.swift | 0 | status: completed path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …odexMobileTests/TurnFileChangeSummaryParserTests.swift | 0 | status: completed path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …Mobile/CodexMobileTests/TurnTimelineReducerTests.swift | 0 | latest testflight inbox email says: remodex version 1.4, build 124 subject: "remodex - remote ai coding 1.4 (124) for io | STRING |
| HIGH | …eTests/CodexServiceIncomingCommandExecutionTests.swift | 0 | latest testflight inbox email says: remodex version 1.4, build 124 subject: "remodex - remote ai coding 1.4 (124) for io | STRING |
| HIGH | …obileTests/CodexServiceIncomingRunIndicatorTests.swift | 0 | latest testflight inbox email says: remodex version 1.4, build 124 subject: "remodex - remote ai coding 1.4 (124) for io | STRING |
| HIGH | …Mobile/CodexMobileTests/TurnTimelineReducerTests.swift | 0 | status: inprogress path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …eTests/CodexServiceIncomingCommandExecutionTests.swift | 0 | status: inprogress path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …ile/CodexMobileTests/TurnSessionDiffSummaryTests.swift | 0 | status: inprogress path: sources/app.swift kind: update totals: +2 -1 | STRING |
| HIGH | …odexMobileTests/TurnFileChangeSummaryParserTests.swift | 0 | status: inprogress path: sources/app.swift kind: update totals: +2 -1 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | phodex-bridge/bin/phodex.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | phodex-bridge/src/desktop-ipc-live-owner.js | 1961 | // steer ("Steered conversation"), so the prompt must live ONLY in params. | COMMENT |
| LOW | phodex-bridge/src/desktop-ipc-action-follower.js | 821 | // Desktop echoes of a locally-streamed thread must not become follower | COMMENT |
| LOW | phodex-bridge/src/desktop-ipc-action-follower.js | 1041 | clearFollowerState(); | COMMENT |
| LOW | phodex-bridge/src/thread-list-provenance.js | 1 | // FILE: thread-list-provenance.js | COMMENT |
| LOW | …yKit.xcframework/ios-arm64-simulator/Headers/ghostty.h | 1 | // Ghostty embedding API. The documentation for the embedding API is | COMMENT |
| LOW | …yKit.xcframework/ios-arm64-simulator/Headers/ghostty.h | 21 | typedef SSIZE_T ssize_t; | COMMENT |
| LOW | …yKit.xcframework/ios-arm64-simulator/Headers/ghostty.h | 41 | #ifdef GHOSTTY_BUILD_SHARED | COMMENT |
| LOW | …dor/GhosttyKit.xcframework/ios-arm64/Headers/ghostty.h | 1 | // Ghostty embedding API. The documentation for the embedding API is | COMMENT |
| LOW | …dor/GhosttyKit.xcframework/ios-arm64/Headers/ghostty.h | 21 | typedef SSIZE_T ssize_t; | COMMENT |
| LOW | …dor/GhosttyKit.xcframework/ios-arm64/Headers/ghostty.h | 41 | #ifdef GHOSTTY_BUILD_SHARED | COMMENT |
| LOW | …Mobile/CodexMobile/Models/String+PathDisplayName.swift | 1 | // FILE: String+PathDisplayName.swift | COMMENT |
| LOW | …ile/CodexMobile/Models/CodexSyntheticIdentifiers.swift | 1 | // FILE: CodexSyntheticIdentifiers.swift | COMMENT |
| LOW | CodexMobile/CodexMobile/Views/SidebarView.swift | 1 | // FILE: SidebarView.swift | COMMENT |
| LOW | …bile/CodexMobile/Views/Sidebar/SidebarHeaderView.swift | 1 | // FILE: SidebarHeaderView.swift | COMMENT |
| LOW | …CodexMobile/Views/Sidebar/SidebarBottomActionBar.swift | 1 | // FILE: SidebarBottomActionBar.swift | COMMENT |
| LOW | …Mobile/Views/Sidebar/SidebarProjectSectionHeader.swift | 1 | // FILE: SidebarProjectSectionHeader.swift | COMMENT |
| LOW | …bile/CodexMobile/Views/Sidebar/SidebarActionPill.swift | 1 | // FILE: SidebarActionPill.swift | COMMENT |
| LOW | …exMobile/Views/Sidebar/SidebarContentScopePicker.swift | 1 | // FILE: SidebarContentScopePicker.swift | COMMENT |
| LOW | …e/CodexMobile/Views/Sidebar/SidebarSectionHeader.swift | 1 | // FILE: SidebarSectionHeader.swift | COMMENT |
| LOW | …dexMobile/Views/Sidebar/SidebarToolbarIconButton.swift | 1 | // FILE: SidebarToolbarIconButton.swift | COMMENT |
| LOW | …dexMobile/Views/Sidebar/SidebarThreadContextMenu.swift | 1 | // FILE: SidebarThreadContextMenu.swift | COMMENT |
| LOW | …CodexMobile/Views/Sidebar/SidebarForegroundStyle.swift | 1 | // FILE: SidebarForegroundStyle.swift | COMMENT |
| LOW | …odexMobile/Views/Settings/SettingsBaseComponents.swift | 1 | // FILE: SettingsBaseComponents.swift | COMMENT |
| LOW | …e/CodexMobile/Views/Shared/AdaptiveGlassModifier.swift | 221 | } | COMMENT |
| LOW | CodexMobile/CodexMobile/Views/Shared/ToolCallIcon.swift | 1 | // FILE: ToolCallIcon.swift | COMMENT |
| LOW | …ile/CodexMobile/Views/Shared/AppMenuPresentation.swift | 1 | // FILE: AppMenuPresentation.swift | COMMENT |
| LOW | …obile/CodexMobile/Views/Shared/FullScreenOverlay.swift | 1 | // FILE: FullScreenOverlay.swift | COMMENT |
| LOW | …obile/CodexMobile/Views/Shared/FullScreenOverlay.swift | 21 | // the keyboard stays visible on top. | COMMENT |
| LOW | …obile/CodexMobile/Views/Shared/CircularIconBadge.swift | 1 | // FILE: CircularIconBadge.swift | COMMENT |
| LOW | …Mobile/CodexMobile/Views/Shared/UIKitContextMenu.swift | 1 | // FILE: UIKitContextMenu.swift | COMMENT |
| LOW | …Mobile/CodexMobile/Views/Shared/UIKitContextMenu.swift | 21 | // itself to. SwiftUI does not expose the underlying host view of an | COMMENT |
| LOW | CodexMobile/CodexMobile/Views/Shared/HapticButton.swift | 1 | // FILE: HapticButton.swift | COMMENT |
| LOW | CodexMobile/CodexMobile/Views/Shared/RemodexIcon.swift | 261 | if explicitSize != nil { | COMMENT |
| LOW | …ws/Turn/Messages/StreamingInlineMarkupAutoCloser.swift | 1 | // FILE: StreamingInlineMarkupAutoCloser.swift | COMMENT |
| LOW | …Turn/Messages/StreamingAssistantMarkdownTextView.swift | 21 | // when the user flips theme or accent mid-stream (otherwise equality would suppress it). | COMMENT |
| LOW | …ews/Turn/Messages/StreamingMarkdownBlockSplitter.swift | 1 | // FILE: StreamingMarkdownBlockSplitter.swift | COMMENT |
| LOW | …bile/Views/Turn/Messages/StreamingMarkdownReveal.swift | 21 | static let positionQuantization = 4.0 | COMMENT |
| LOW | …Mobile/Views/Turn/Messages/TurnMessageComponents.swift | 1 | // FILE: TurnMessageComponents.swift | COMMENT |
| LOW | …Views/Turn/Composer/TurnComposerRuntimeUIKitMenu.swift | 1 | // FILE: TurnComposerRuntimeUIKitMenu.swift | COMMENT |
| LOW | …Views/Turn/Composer/ComposerRuntimeSliderOverlay.swift | 1 | // FILE: ComposerRuntimeSliderOverlay.swift | COMMENT |
| LOW | …CodexMobile/Views/Turn/Composer/TurnComposerView.swift | 101 | let onSteerQueuedDraft: (String) -> Void | COMMENT |
| LOW | …/CodexMobile/Views/Turn/Composer/UIKitMenuButton.swift | 1 | // FILE: UIKitMenuButton.swift | COMMENT |
| LOW | …/CodexMobile/Views/Turn/Composer/UIKitMenuButton.swift | 21 | // to that VC's view instead. | COMMENT |
| LOW | …n/Composer/TurnComposerCollapsibleContextCluster.swift | 1 | // FILE: TurnComposerCollapsibleContextCluster.swift | COMMENT |
| LOW | …CodexMobile/Views/Turn/Composer/TurnMentionChips.swift | 1 | // FILE: TurnMentionChips.swift | COMMENT |
| LOW | …exMobile/Views/Turn/Timeline/TurnTimelineReducer.swift | 1341 | key: key, | COMMENT |
| LOW | …CodexMobile/Views/Turn/Git/TurnGitActionsToolbar.swift | 161 | // NSUnknownKeyException if a future iOS removes the private property, and the | COMMENT |
| LOW | …obile/CodexMobile/Services/CodexService+Incoming.swift | 3501 | requestImmediateActiveThreadSync(threadId: threadId, forceHistoryRefresh: true) | COMMENT |
| LOW | CodexMobile/CodexMobile/Services/CodexService.swift | 661 | // buffered reconnect replay): timeline refreshes and derived-output cache | COMMENT |
| LOW | …dexMobile/Services/StreamingUIInteractionMonitor.swift | 1 | // FILE: StreamingUIInteractionMonitor.swift | COMMENT |
| LOW | …le/Services/Coordination/WorktreeFlowCoordinator.swift | 21 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | phodex-bridge/test/desktop-ipc-live-owner.test.js | 3340 | const turnIds = snapshot.params.change.conversationState.turns.map((turn) => turn.turnId); | CODE |
| CRITICAL | phodex-bridge/test/desktop-ipc-live-owner.test.js | 4527 | && frame.params.change.conversationState.turns.some((turn) => turn.turnId === "turn-fresh") | CODE |
| CRITICAL | phodex-bridge/test/desktop-ipc-live-owner.test.js | 4529 | const turnIds = reclaimBroadcast.params.change.conversationState.turns.map((turn) => turn.turnId); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | AGENTS.md | 7 | ## Core guardrails | COMMENT |
| MEDIUM | AGENTS.md | 21 | ## iOS runtime + timeline guardrails | COMMENT |
| MEDIUM | AGENTS.md | 32 | ## Local connection guardrails | COMMENT |
| MEDIUM | AGENTS.md | 41 | ## Build guardrails | COMMENT |
| MEDIUM | CLAUDE.md | 7 | ## Core guardrails | COMMENT |
| MEDIUM | CLAUDE.md | 21 | ## iOS runtime + timeline guardrails | COMMENT |
| MEDIUM | CLAUDE.md | 32 | ## Local connection guardrails | COMMENT |
| MEDIUM | CLAUDE.md | 41 | ## Build guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | phodex-bridge/test/account-status.test.js | 59 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 77 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 94 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 112 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 130 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 148 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 166 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 359 | email: "user@example.com", | CODE |
| LOW | phodex-bridge/test/account-status.test.js | 377 | email: "user@example.com", | CODE |
| LOW | CodexMobile/CodexMobileTests/CodexGPTAccountTests.swift | 64 | "email": .string("user@example.com"), | CODE |
| LOW | CodexMobile/CodexMobileTests/CodexGPTAccountTests.swift | 78 | XCTAssertEqual(service.gptAccountSnapshot.email, "user@example.com") | CODE |
| LOW | CodexMobile/CodexMobileTests/CodexGPTAccountTests.swift | 457 | "email": .string("user@example.com"), | CODE |
| LOW | CodexMobile/CodexMobileTests/CodexGPTAccountTests.swift | 527 | email: "user@example.com", | CODE |
| LOW | CodexMobile/CodexMobileTests/CodexGPTAccountTests.swift | 541 | "email": .string("user@example.com"), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plans/001-prevent-launchagent-restart-loops.md | 192 | ### Step 1: Add regression tests that define the launch and removal contract | COMMENT |
| LOW | plans/001-prevent-launchagent-restart-loops.md | 244 | ### Step 2: Guard launchd execution without weakening real failure recovery | COMMENT |
| LOW | plans/001-prevent-launchagent-restart-loops.md | 289 | ### Step 3: Regenerate legacy plists during restart | COMMENT |
| LOW | plans/001-prevent-launchagent-restart-loops.md | 325 | ### Step 4: Add an idempotent service-uninstall operation | COMMENT |
| LOW | plans/001-prevent-launchagent-restart-loops.md | 357 | ### Step 5: Expose `remodex uninstall-service` | COMMENT |
| LOW | plans/001-prevent-launchagent-restart-loops.md | 393 | ### Step 6: Document upgrade migration and clean removal | COMMENT |
| LOW | plans/001-prevent-launchagent-restart-loops.md | 426 | ### Step 7: Run the complete bridge verification and inspect scope | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ramework/ios-arm64-simulator/Headers/ghostty/vt/wasm.h | 32 | * Here's a simple example of using the Wasm utilities with the key encoder: | COMMENT |
| MEDIUM | …ttyKit.xcframework/ios-arm64/Headers/ghostty/vt/wasm.h | 32 | * Here's a simple example of using the Wasm utilities with the key encoder: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | phodex-bridge/src/opencode-runtime.js | 1228 | async function handleRequest(parsed) { | CODE |
| LOW | phodex-bridge/src/thread-activity-store.js | 36 | function handleRequest(message) { | CODE |