Fix the following React Review diagnostics in my codebase.
## Warnings (499)
1. [warning] design-no-redundant-size-axes — src/app/extensions/components/catalog-item-row.tsx:113
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
2. [warning] prefer-tag-over-role — src/app/extensions/components/catalog-item-row.tsx:124
Prefer the semantic `<img>` element over `role="img"` on a generic tag.
3. [warning] design-no-redundant-size-axes — src/app/extensions/components/catalog-item-row.tsx:123
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
4. [warning] control-has-associated-label — src/app/components/sidebar/chat/sidebar-chat-section.tsx:125
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
5. [warning] design-no-redundant-size-axes — src/app/chat-workspace/chat-workspace-composer.tsx:107
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
6. [warning] jsx-no-jsx-as-prop — src/app/chat-workspace/chat-workspace-composer.tsx:271
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
7. [warning] no-many-boolean-props — src/app/components/sidebar/chat/chat-group-row.tsx:157
Component "ChatGroupRow" takes 4 boolean-like props (isActive, isDragging, isExpanded…) — consider compound components or explicit variants instead of stacking flags
8. [warning] exhaustive-deps — src/app/components/sidebar/chat/chat-group-row.tsx:186
The ref value `clickTimeoutRef.current` will likely have changed by the time this effect cleanup function runs. Copy it to a variable inside the hook callback and use that variable in cleanup.
9. [warning] design-no-redundant-size-axes — src/app/common/split-button.tsx:27
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
10. [warning] design-no-redundant-size-axes — src/app/components/sidebar/inbox/inbox-thread-row.tsx:38
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
11. [warning] design-no-redundant-size-axes — src/app/components/sidebar/inbox/inbox-thread-row.tsx:40
w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)
12. [warning] no-multi-comp — src/app/common/thread-message.tsx:130
Declare only one React component per file. Found extra component: SummaryBlock.
13. [warning] no-multi-comp — src/app/common/thread-message.tsx:139
Declare only one React component per file. Found extra component: UserMessageBlock.
14. [warning] no-multi-comp — src/app/common/thread-message.tsx:161
Declare only one React component per file. Found extra component: AssistantMessageBlock.
15. [warning] no-multi-comp — src/app/common/thread-message.tsx:223
Declare only one React component per file. Found extra component: CustomMessageBlock.
16. [warning] no-multi-comp — src/app/common/thread-message.tsx:234
Declare only one React component per file. Found extra component: SystemMessageBlock.
17. [warning] no-multi-comp — src/app/common/thread-message.tsx:273
Declare only one React component per file. Found extra component: ThreadMessageComponent.
18. [warning] no-derived-useState — src/app/common/thread-message.tsx:65
useState initialized from prop "autoExpandThinking" — if this value should stay in sync with the prop, derive it during render instead
19. [warning] no-derived-state — src/app/common/thread-message.tsx:71
Avoid storing derived state. Compute "expanded" directly during render, optionally with `useMemo` if it's expensive.
20. [warning] no-derived-state — src/app/common/thread-message.tsx:73
Avoid storing derived state. Compute "expanded" directly during render, optionally with `useMemo` if it's expensive.
21. [warning] design-no-em-dash-in-jsx-text — src/app/common/thread-message.tsx:110
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
22. [warning] no-render-in-render — src/app/common/thread-message.tsx:120
Inline render function "renderThinking()" — extract to a separate component for proper reconciliation
23. [warning] no-render-in-render — src/app/common/thread-message.tsx:134
Inline render function "renderThinking()" — extract to a separate component for proper reconciliation
24. [warning] no-render-in-render — src/app/common/thread-message.tsx:190
Inline render function "renderProse()" — extract to a separate component for proper reconciliation
25. [warning] no-render-in-render — src/app/common/thread-message.tsx:229
Inline render function "renderProse()" — extract to a separate component for proper reconciliation
26. [warning] no-render-in-render — src/app/common/thread-message.tsx:251
Inline render function "renderProse()" — extract to a separate component for proper reconciliation
27. [warning] no-render-in-render — src/app/common/thread-message.tsx:281
Inline render function "renderThreadMessageContent()" — extract to a separate component for proper reconciliation
28. [warning] no-event-handler — src/app/components/sidebar/projects/sidebar-projects-create-popover.tsx:47
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
29. [warning] no-many-boolean-props — src/app/components/sidebar/project-tree/project-row.tsx:182
Component "ProjectRow" takes 8 boolean-like props (canEdit, canToggleExpanded, isActive…) — consider compound components or explicit variants instead of stacking flags
30. [warning] no-multi-comp — src/app/components/sidebar/project-work/branch-thread-groups.tsx:126
Declare only one React component per file. Found extra component: ProjectExpandedBranchGroups.
31. [warning] no-multi-comp — src/app/components/sidebar/project-work/branch-thread-groups.tsx:198
Declare only one React component per file. Found extra component: ProjectCompactBranchGroups.
32. [warning] no-react19-deprecated-apis — src/app/components/sidebar/project-work/project-work-actions-menu.tsx:2
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
33. [warning] prefer-useReducer — src/app/composer/composer-file-picker.tsx:58
Component "ComposerFilePicker" has 5 useState calls — consider useReducer for related state
34. [warning] no-event-handler — src/app/composer/composer-file-picker.tsx:139
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
35. [warning] no-effect-chain — src/app/components/sidebar/project-work/project-work-section.tsx:107
useEffect reacts to "storedVisibleProjectIds" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
36. [warning] prefer-useReducer — src/app/components/sidebar/project-work/project-work-section.tsx:74
Component "ProjectWorkSection" has 7 useState calls — consider useReducer for related state
37. [warning] no-derived-state — src/app/components/sidebar/project-work/project-work-section.tsx:104
Avoid storing derived state. Compute "storedVisibleProjectIds" directly during render, optionally with `useMemo` if it's expensive.
38. [warning] no-chain-state-updates — src/app/components/sidebar/project-work/project-work-section.tsx:109
Avoid chaining state changes. When possible, update all relevant state simultaneously.
39. [warning] no-derived-state — src/app/components/sidebar/project-work/project-work-section.tsx:109
Avoid storing derived state. Compute "storedVisibleProjectIds" directly during render, optionally with `useMemo` if it's expensive.
40. [warning] no-prop-callback-in-effect — src/app/components/sidebar/project-work/project-work-section.tsx:163
useEffect calls prop callback "onLoadProjectThreads" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
41. [warning] jsx-no-jsx-as-prop — src/app/composer/composer-prompt-input-panel.tsx:218
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
42. [warning] no-multi-comp — src/app/components/sidebar/sidebar-skeletons.tsx:43
Declare only one React component per file. Found extra component: SidebarChatSkeleton.
43. [warning] no-multi-comp — src/app/components/sidebar/sidebar-skeletons.tsx:70
Declare only one React component per file. Found extra component: SidebarInboxSkeleton.
44. [warning] prefer-tag-over-role — src/app/components/sidebar/sidebar-skeletons.tsx:18
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
45. [warning] design-no-redundant-size-axes — src/app/components/sidebar/sidebar-skeletons.tsx:26
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
46. [warning] prefer-tag-over-role — src/app/components/sidebar/sidebar-skeletons.tsx:47
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
47. [warning] design-no-redundant-size-axes — src/app/components/sidebar/sidebar-skeletons.tsx:55
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
48. [warning] prefer-tag-over-role — src/app/components/sidebar/sidebar-skeletons.tsx:74
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
49. [warning] design-no-redundant-size-axes — src/app/app-shell/app-shell-overlays.tsx:54
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
50. [warning] no-adjust-state-on-prop-change — src/app/composer/composer-context-meter.tsx:279
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
51. [warning] no-adjust-state-on-prop-change — src/app/composer/composer-context-meter.tsx:280
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
52. [warning] no-chain-state-updates — src/app/composer/composer-context-meter.tsx:285
Avoid chaining state changes. When possible, update all relevant state simultaneously.
53. [warning] no-derived-state — src/app/composer/composer-context-meter.tsx:285
Avoid storing derived state. Compute "usageTotals" directly during render, optionally with `useMemo` if it's expensive.
54. [warning] no-event-handler — src/app/composer/composer-context-meter.tsx:212
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
55. [warning] no-event-handler — src/app/composer/composer-context-meter.tsx:212
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
56. [warning] design-no-redundant-size-axes — src/app/composer/composer-context-meter.tsx:299
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
57. [warning] design-no-redundant-size-axes — src/app/composer/file-entry-button.tsx:86
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
58. [warning] exhaustive-deps — src/app/common/tooltip.tsx:75
The ref value `openTimerRef.current` will likely have changed by the time this effect cleanup function runs. Copy it to a variable inside the hook callback and use that variable in cleanup.
59. [warning] no-cascading-set-state — src/app/common/tooltip.tsx:83
3 setState calls in a single useEffect — consider using useReducer or deriving state
60. [warning] design-no-redundant-size-axes — src/app/composer/composer-side-controls.tsx:57
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
61. [warning] design-no-redundant-size-axes — src/app/components/sidebar/project-work/project-scope-selector.tsx:140
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
62. [warning] jsx-no-target-blank — src/app/common/markdown-content.tsx:81
`target="_blank"` without `rel="noreferrer"` is a security risk — add `rel="noreferrer"`.
63. [warning] no-prevent-default — src/app/common/markdown-content.tsx:67
preventDefault() on <a> onClick — use a <button> or routing component instead
64. [warning] prefer-useReducer — src/app/components/sidebar/inbox/sidebar-inbox-section.tsx:175
Component "SidebarInboxSection" has 5 useState calls — consider useReducer for related state
65. [warning] prefer-useReducer — src/app/app-shell/app-shell-layout.tsx:105
Component "AppShellLayout" has 6 useState calls — consider useReducer for related state
66. [warning] no-adjust-state-on-prop-change — src/app/app-shell/app-shell-layout.tsx:211
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
67. [warning] no-adjust-state-on-prop-change — src/app/app-shell/app-shell-layout.tsx:212
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
68. [warning] no-event-handler — src/app/app-shell/app-shell-layout.tsx:134
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
69. [warning] no-chain-state-updates — src/app/app-shell/app-shell-layout.tsx:236
Avoid chaining state changes. When possible, update all relevant state simultaneously.
70. [warning] no-event-handler — src/app/app-shell/app-shell-layout.tsx:236
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
71. [warning] no-adjust-state-on-prop-change — src/app/app-shell/app-shell-layout.tsx:240
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
72. [warning] control-has-associated-label — src/app/common/segmented-toggle.tsx:51
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
73. [warning] prefer-useReducer — src/app/components/sidebar/project-work/new-thread-menu.tsx:32
Component "NewThreadMenu" has 5 useState calls — consider useReducer for related state
74. [warning] no-cascading-set-state — src/app/components/sidebar/project-work/new-thread-menu.tsx:61
4 setState calls in a single useEffect — consider using useReducer or deriving state
75. [warning] design-no-redundant-size-axes — src/app/components/sidebar/project-work/new-thread-menu.tsx:116
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
76. [warning] no-giant-component — src/app/archive/archived-threads-view.tsx:48
Component "ArchivedThreadsView" is 349 lines — consider breaking it into smaller focused components
77. [warning] no-derived-state — src/app/archive/archived-threads-view.tsx:91
Avoid storing derived state. Compute "optimisticallyHiddenThreadIds" directly during render, optionally with `useMemo` if it's expensive.
78. [warning] no-derived-state — src/app/archive/archived-threads-view.tsx:99
Avoid storing derived state. Compute "selectedThreadIds" directly during render, optionally with `useMemo` if it's expensive.
79. [warning] no-chain-state-updates — src/app/archive/archived-threads-view.tsx:106
Avoid chaining state changes. When possible, update all relevant state simultaneously.
80. [warning] no-event-handler — src/app/archive/archived-threads-view.tsx:105
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
81. [warning] design-no-redundant-size-axes — src/app/archive/archived-threads-view.tsx:280
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
82. [warning] design-no-redundant-size-axes — src/app/archive/archived-threads-view.tsx:341
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
83. [warning] prefer-useReducer — src/app/components/sidebar/project-work/project-work-block.tsx:39
Component "ProjectWorkBlockHeader" has 5 useState calls — consider useReducer for related state
84. [warning] no-derived-useState — src/app/components/sidebar/project-work/project-work-block.tsx:41
useState initialized from prop "project" — if this value should stay in sync with the prop, derive it during render instead
85. [warning] no-chain-state-updates — src/app/components/sidebar/project-work/project-work-block.tsx:53
Avoid chaining state changes. When possible, update all relevant state simultaneously.
86. [warning] no-derived-state — src/app/components/sidebar/project-work/project-work-block.tsx:53
Avoid storing derived state. Compute "renameDraft" directly during render, optionally with `useMemo` if it's expensive.
87. [warning] no-event-handler — src/app/components/sidebar/project-work/project-work-block.tsx:53
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
88. [warning] no-cascading-set-state — src/app/components/sidebar/project-work/project-work-block.tsx:55
4 setState calls in a single useEffect — consider using useReducer or deriving state
89. [warning] design-no-redundant-size-axes — src/app/components/sidebar/project-work/project-work-block.tsx:122
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
90. [warning] design-no-redundant-size-axes — src/app/code-workspace/code-workspace-footer.tsx:27
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
91. [warning] design-no-redundant-size-axes — src/app/code-workspace/code-workspace-footer.tsx:43
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
92. [warning] jsx-no-jsx-as-prop — src/app/code-workspace/code-workspace-footer.tsx:317
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
93. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-attachments-panel.tsx:78
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
94. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-attachments-panel.tsx:89
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
95. [warning] design-no-redundant-size-axes — src/app/composer/composer-footer.tsx:112
w-[14px] h-[14px] → use the shorthand size-[14px] (Tailwind v3.4+)
96. [warning] design-no-redundant-size-axes — src/app/components/sidebar/sidebar.tsx:344
w-[34px] h-[34px] → use the shorthand size-[34px] (Tailwind v3.4+)
97. [warning] no-barrel-import — src/app/composer/composer-prompt-surface.tsx:7
Import from barrel/index file — import directly from source modules: "../features/native-extensions/ask-questions-card", "../features/native-extensions/useComposerAskQuestionsActions"
98. [warning] no-giant-component — src/app/composer/composer-prompt-surface.tsx:36
Component "ComposerPromptSurface" is 453 lines — consider breaking it into smaller focused components
99. [warning] no-many-boolean-props — src/app/composer/composer-prompt-surface.tsx:36
Component "ComposerPromptSurface" takes 5 boolean-like props (isStreaming, isCompacting, isExtensionCommandRunning…) — consider compound components or explicit variants instead of stacking flags
100. [warning] prefer-useReducer — src/app/code-workspace/code-workspace-view.tsx:170
Component "CodeWorkspaceView" has 6 useState calls — consider useReducer for related state
101. [warning] no-adjust-state-on-prop-change — src/app/composer/composer-dictation-controls.tsx:165
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
102. [warning] no-event-handler — src/app/composer/composer-dictation-controls.tsx:164
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
103. [warning] no-event-handler — src/app/composer/composer-dictation-controls.tsx:164
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
104. [warning] no-reset-all-state-on-prop-change — src/app/composer/composer-dictation-controls.tsx:163
Avoid resetting all state when a prop changes. Instead, if "dictationMissingModel" is a key, pass it as `key` so React will reset the component's state.
105. [warning] rendering-svg-precision — src/app/common/github-invertocat-mark.tsx:17
SVG d attribute uses 4+ decimal precision — truncate to 1–2 decimals to shrink markup with no visible difference
106. [warning] no-adjust-state-on-prop-change — src/app/common/confirm-popover.tsx:32
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
107. [warning] no-event-handler — src/app/common/confirm-popover.tsx:32
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
108. [warning] no-reset-all-state-on-prop-change — src/app/common/confirm-popover.tsx:31
Avoid resetting all state when a prop changes. Instead, if "open" is a key, pass it as `key` so React will reset the component's state.
109. [warning] design-no-redundant-size-axes — src/app/common/confirm-popover.tsx:75
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
110. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-header.tsx:39
w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)
111. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-header.tsx:98
w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)
112. [warning] design-no-redundant-size-axes — src/app/app-shell/app-shell-layout-view.tsx:205
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
113. [warning] no-derived-state — src/app/composer/composer-model-popover.tsx:66
Avoid storing derived state. Compute "selectedProvider" directly during render, optionally with `useMemo` if it's expensive.
114. [warning] no-derived-state — src/app/composer/composer-model-popover.tsx:70
Avoid storing derived state. Compute "selectedProvider" directly during render, optionally with `useMemo` if it's expensive.
115. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:159
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
116. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:74
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
117. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:74
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
118. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:59
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
119. [warning] no-cascading-set-state — src/app/common/popover.tsx:170
3 setState calls in a single useEffect — consider using useReducer or deriving state
120. [warning] no-multi-comp — pages/src/main.tsx:179
Declare only one React component per file. Found extra component: DependencyTable.
121. [warning] no-multi-comp — pages/src/main.tsx:202
Declare only one React component per file. Found extra component: DependenciesPage.
122. [warning] no-multi-comp — pages/src/main.tsx:231
Declare only one React component per file. Found extra component: GitHubInvertocatMark.
123. [warning] no-multi-comp — pages/src/main.tsx:274
Declare only one React component per file. Found extra component: HomePage.
124. [warning] no-multi-comp — pages/src/main.tsx:556
Declare only one React component per file. Found extra component: BlogIndexPage.
125. [warning] no-multi-comp — pages/src/main.tsx:721
Declare only one React component per file. Found extra component: WorktreesBlogPage.
126. [warning] no-multi-comp — pages/src/main.tsx:870
Declare only one React component per file. Found extra component: App.
127. [warning] rendering-svg-precision — pages/src/main.tsx:234
SVG d attribute uses 4+ decimal precision — truncate to 1–2 decimals to shrink markup with no visible difference
128. [warning] js-combine-iterations — pages/src/main.tsx:247
.map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of
129. [warning] no-cascading-set-state — pages/src/main.tsx:294
3 setState calls in a single useEffect — consider using useReducer or deriving state
130. [warning] no-fetch-in-effect — pages/src/main.tsx:727
fetch() inside useEffect — use a data fetching library (react-query, SWR) or server component
131. [warning] design-no-redundant-size-axes — src/app/extensions/components/install-extensions-section.tsx:106
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
132. [warning] design-no-redundant-size-axes — src/app/sessions/sessions-view.tsx:79
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
133. [warning] design-no-redundant-size-axes — src/app/sessions/sessions-view.tsx:184
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
134. [warning] no-derived-state — src/app/sessions/sessions-view.tsx:272
Avoid storing derived state. Compute "selectedThreadIds" directly during render, optionally with `useMemo` if it's expensive.
135. [warning] no-pass-live-state-to-parent — src/app/features/native-extensions/ask-questions-card.tsx:144
Avoid passing live state to parents in an effect. Instead, lift the state to the parent and pass it down to the child as a prop.
136. [warning] no-prop-callback-in-effect — src/app/features/native-extensions/ask-questions-card.tsx:149
useEffect calls prop callback "registerArrowNavigation" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
137. [warning] no-adjust-state-on-prop-change — src/app/features/native-extensions/ask-questions-card.tsx:160
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
138. [warning] no-adjust-state-on-prop-change — src/app/features/native-extensions/ask-questions-card.tsx:163
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
139. [warning] no-cascading-set-state — src/app/features/native-extensions/ask-questions-card.tsx:159
4 setState calls in a single useEffect — consider using useReducer or deriving state
140. [warning] no-derived-state — src/app/features/native-extensions/ask-questions-card.tsx:161
Avoid storing derived state. Compute "answers" directly during render, optionally with `useMemo` if it's expensive.
141. [warning] no-derived-state — src/app/features/native-extensions/ask-questions-card.tsx:162
Avoid storing derived state. Compute "customAnswers" directly during render, optionally with `useMemo` if it's expensive.
142. [warning] no-derived-state-effect — src/app/features/native-extensions/ask-questions-card.tsx:159
Derived state in useEffect — wrap the calculation in useMemo([deps]) (or compute it directly during render if it isn't expensive)
143. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:188
w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)
144. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:199
w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)
145. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:262
w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)
146. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:274
w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)
147. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:311
w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)
148. [warning] design-no-redundant-size-axes — src/app/settings/settings/settings-dictation-model-row.tsx:49
w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)
149. [warning] design-no-redundant-padding-axes — src/app/inbox/inbox-view.tsx:242
px-6 py-6 → use the shorthand p-6
150. [warning] design-no-redundant-size-axes — src/app/inbox/inbox-view.tsx:321
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
151. [warning] jsx-no-jsx-as-prop — src/app/inbox/inbox-view.tsx:331
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
152. [warning] jsx-no-jsx-as-prop — src/app/skills/skills-view.tsx:87
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
153. [warning] jsx-no-jsx-as-prop — src/app/skills/skills-view.tsx:118
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
154. [warning] design-no-redundant-size-axes — src/app/native/gitops/git-ops-composer-panel.tsx:102
w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)
155. [warning] no-multi-comp — src/app/projects/landing-empty-overview.tsx:71
Declare only one React component per file. Found extra component: LandingUpdateCard.
156. [warning] no-multi-comp — src/app/projects/landing-empty-overview.tsx:104
Declare only one React component per file. Found extra component: EmptyLandingOverview.
157. [warning] no-pass-data-to-parent — src/app/native/gitops/composer-git-ops-surface.tsx:246
Avoid passing data to parents in an effect. Instead, fetch the data in the parent and pass it down to the child as a prop.
158. [warning] no-prop-callback-in-effect — src/app/native/gitops/composer-git-ops-surface.tsx:246
useEffect calls prop callback "onActionErrorMessageChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
159. [warning] jsx-no-jsx-as-prop — src/app/native/gitops/composer-git-ops-surface.tsx:358
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
160. [warning] jsx-no-jsx-as-prop — src/app/native/gitops/composer-git-ops-surface.tsx:391
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
161. [warning] no-derived-useState — src/app/native/gitops/diff/diff-panel-content.tsx:54
useState initialized from prop "showFileTree" — if this value should stay in sync with the prop, derive it during render instead
162. [warning] no-pass-data-to-parent — src/app/native/gitops/diff/diff-panel-content.tsx:66
Avoid passing data to parents in an effect. Instead, fetch the data in the parent and pass it down to the child as a prop.
163. [warning] no-prop-callback-in-effect — src/app/native/gitops/diff/diff-panel-content.tsx:66
useEffect calls prop callback "onLoadErrorChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
164. [warning] no-adjust-state-on-prop-change — src/app/native/gitops/diff/diff-panel-content.tsx:159
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
165. [warning] no-cascading-set-state — src/app/native/gitops/diff/diff-panel-content.tsx:153
3 setState calls in a single useEffect — consider using useReducer or deriving state
166. [warning] no-event-handler — src/app/native/gitops/diff/diff-panel-content.tsx:140
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
167. [warning] no-event-handler — src/app/native/gitops/diff/diff-panel-content.tsx:140
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
168. [warning] no-event-handler — src/app/native/gitops/diff/diff-panel-content.tsx:140
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
169. [warning] no-pass-data-to-parent — src/app/native/gitops/diff/diff-panel-content.tsx:166
Avoid passing data to parents in an effect. Instead, fetch the data in the parent and pass it down to the child as a prop.
170. [warning] no-render-in-render — src/app/settings/settings/settingsDescriptorModels.tsx:192
Inline render function "renderThinkingSelector()" — extract to a separate component for proper reconciliation
171. [warning] design-no-redundant-padding-axes — src/app/projects/project-overview/top-sessions-section.tsx:21
px-2 py-2 → use the shorthand p-2
172. [warning] no-derived-state — src/app/settings/settings/settingsDescriptorKeybindings.tsx:165
Avoid storing derived state. Compute "draft" directly during render, optionally with `useMemo` if it's expensive.
173. [warning] no-derived-state-effect — src/app/settings/settings/settingsDescriptorKeybindings.tsx:164
Derived state in useEffect — compute during render instead
174. [warning] no-multi-comp — src/app/settings/settings/settingsUi.tsx:49
Declare only one React component per file. Found extra component: SettingRow.
175. [warning] no-multi-comp — src/app/settings/settings/settingsUi.tsx:82
Declare only one React component per file. Found extra component: InlineSelect.
176. [warning] no-adjust-state-on-prop-change — src/app/settings/settings/settingsUi.tsx:124
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
177. [warning] no-event-handler — src/app/settings/settings/settingsUi.tsx:104
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
178. [warning] no-reset-all-state-on-prop-change — src/app/settings/settings/settingsUi.tsx:122
Avoid resetting all state when a prop changes. Instead, if "open" is a key, pass it as `key` so React will reset the component's state.
179. [warning] no-giant-component — src/app/settings/settings-view.tsx:46
Component "SettingsView" is 330 lines — consider breaking it into smaller focused components
180. [warning] prefer-useReducer — src/app/settings/settings-view.tsx:58
Component "SettingsView" has 10 useState calls — consider useReducer for related state
181. [warning] rerender-state-only-in-handlers — src/app/settings/settings-view.tsx:72
useState "highlightedSettingId" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
182. [warning] no-derived-useState — src/app/settings/settings-view.tsx:60
useState initialized from prop "piSettings" — if this value should stay in sync with the prop, derive it during render instead
183. [warning] no-adjust-state-on-prop-change — src/app/settings/settings-view.tsx:82
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
184. [warning] no-cascading-set-state — src/app/settings/settings-view.tsx:80
4 setState calls in a single useEffect — consider using useReducer or deriving state
185. [warning] no-derived-state — src/app/settings/settings-view.tsx:83
Avoid storing derived state. Compute "activeCategory" directly during render, optionally with `useMemo` if it's expensive.
186. [warning] no-derived-state — src/app/settings/settings-view.tsx:84
Avoid storing derived state. Compute "highlightedSettingId" directly during render, optionally with `useMemo` if it's expensive.
187. [warning] no-derived-state — src/app/settings/settings-view.tsx:85
Avoid storing derived state. Compute "highlightedCategoryId" directly during render, optionally with `useMemo` if it's expensive.
188. [warning] no-initialize-state — src/app/settings/settings-view.tsx:97
Avoid initializing state in an effect. Instead, initialize "helpColumnAvailable"'s `useState()` with "undefined". For SSR hydration, prefer `useSyncExternalStore()`.
189. [warning] no-derived-state — src/app/settings/settings-view.tsx:122
Avoid storing derived state. Compute "draftPiSettings" directly during render, optionally with `useMemo` if it's expensive.
190. [warning] async-await-in-loop — src/app/settings/settings-view.tsx:171
await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
191. [warning] no-derived-state — src/app/settings/settings-view.tsx:222
Avoid storing derived state. Compute "dictationModelDraft" directly during render, optionally with `useMemo` if it's expensive.
192. [warning] no-derived-state-effect — src/app/settings/settings-view.tsx:221
Derived state in useEffect — compute during render instead
193. [warning] control-has-associated-label — src/app/settings/settings/settings-view-parts.tsx:34
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
194. [warning] design-no-redundant-size-axes — src/app/settings/settings/settings-view-parts.tsx:38
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
195. [warning] prefer-useReducer — src/app/skills/components/skill-creator-section.tsx:61
Component "SkillCreatorSection" has 6 useState calls — consider useReducer for related state
196. [warning] design-no-redundant-size-axes — src/app/skills/components/skill-creator-section.tsx:212
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
197. [warning] control-has-associated-label — src/app/native/gitops/branch-switch-popover.tsx:111
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
198. [warning] design-no-redundant-size-axes — src/app/native/gitops/branch-switch-popover.tsx:182
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
199. [warning] no-render-in-render — src/app/thread/thread-timeline-row.tsx:243
Inline render function "renderTurnItem()" — extract to a separate component for proper reconciliation
200. [warning] control-has-associated-label — src/app/settings/settings/settingsDescriptorPiRuntime.tsx:271
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
201. [warning] no-giant-component — src/app/inbox/components/inbox-composer.tsx:68
Component "InboxComposer" is 361 lines — consider breaking it into smaller focused components
202. [warning] no-many-boolean-props — src/app/inbox/components/inbox-composer.tsx:68
Component "InboxComposer" takes 4 boolean-like props (isCompacting, isStreaming, isSending…) — consider compound components or explicit variants instead of stacking flags
203. [warning] no-render-in-render — src/app/thread/tool-calls-card.tsx:199
Inline render function "renderToolCallBody()" — extract to a separate component for proper reconciliation
204. [warning] design-no-redundant-size-axes — src/app/native/gitops/diff/diff-panel-file-list.tsx:212
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
205. [warning] js-length-check-first — src/app/native/gitops/diff/diff-panel-file-list.tsx:265
.every() over an array compared to another array — short-circuit with `a.length === b.length && a.every(...)` so unequal-length arrays exit immediately
206. [warning] rerender-state-only-in-handlers — src/app/native/gitops/diff/diff-panel-file-list.tsx:336
useState "codeViewHandle" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
207. [warning] no-render-prop-children — src/app/native/gitops/diff/diff-panel-file-list.tsx:535
3 render-prop slots on the same element (renderCustomHeader, renderAnnotation, renderGutterUtility…) — collapse into compound subcomponents or `children` so consumers don't need to know about every customization point
208. [warning] design-no-redundant-size-axes — src/app/skills/components/browse-skills-section.tsx:147
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
209. [warning] prefer-tag-over-role — src/app/skills/components/browse-skills-section.tsx:158
Prefer the semantic `<img>` element over `role="img"` on a generic tag.
210. [warning] design-no-redundant-size-axes — src/app/skills/components/browse-skills-section.tsx:157
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
211. [warning] exhaustive-deps — src/app/skills/components/browse-skills-section.tsx:288
The `catalogItems` value makes the dependencies of `useEffect` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.
212. [warning] no-derived-state — src/app/skills/components/browse-skills-section.tsx:282
Avoid storing derived state. Compute "selectedCatalogSources" directly during render, optionally with `useMemo` if it's expensive.
213. [warning] design-no-redundant-size-axes — src/app/skills/components/browse-skills-section.tsx:373
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
214. [warning] no-many-boolean-props — src/app/extensions/components/search-extensions-section.tsx:117
Component "SearchExtensionsSection" takes 5 boolean-like props (hasSelectedCatalogSources, hasPendingInstall, hasNextCatalogPage…) — consider compound components or explicit variants instead of stacking flags
215. [warning] jsx-no-target-blank — src/app/native/markdown-artifacts/artifact-markdown-preview.tsx:41
`target="_blank"` without `rel="noreferrer"` is a security risk — add `rel="noreferrer"`.
216. [warning] no-prevent-default — src/app/native/markdown-artifacts/artifact-markdown-preview.tsx:38
preventDefault() on <a> onClick — use a <button> or routing component instead
217. [warning] prefer-use-effect-event — src/app/thread/thread-find-bar.tsx:90
"close" is read only inside `addEventListener` — wrap it with useEffectEvent and remove it from the dep array so the effect doesn't re-synchronize on every parent render
218. [warning] prefer-useReducer — src/app/thread/thread-find-bar.tsx:41
Component "ThreadFindBar" has 5 useState calls — consider useReducer for related state
219. [warning] no-adjust-state-on-prop-change — src/app/thread/thread-find-bar.tsx:100
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
220. [warning] no-adjust-state-on-prop-change — src/app/thread/thread-find-bar.tsx:101
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
221. [warning] no-adjust-state-on-prop-change — src/app/thread/thread-find-bar.tsx:108
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
222. [warning] no-cascading-set-state — src/app/thread/thread-find-bar.tsx:97
9 setState calls in a single useEffect — consider using useReducer or deriving state
223. [warning] no-pass-live-state-to-parent — src/app/thread/thread-find-bar.tsx:98
Avoid passing live state to parents in an effect. Instead, lift the state to the parent and pass it down to the child as a prop.
224. [warning] no-prop-callback-in-effect — src/app/thread/thread-find-bar.tsx:98
useEffect calls prop callback "onQueryChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
225. [warning] no-prop-callback-in-effect — src/app/thread/thread-find-bar.tsx:102
useEffect calls prop callback "onActiveMatchChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
226. [warning] design-no-redundant-size-axes — src/app/thread/thread-find-bar.tsx:203
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
227. [warning] no-giant-component — src/app/thread/thread-timeline.tsx:32
Component "ThreadTimeline" is 364 lines — consider breaking it into smaller focused components
228. [warning] no-derived-state — src/app/thread/thread-timeline.tsx:97
Avoid storing derived state. Compute "collapsedRowIds" directly during render, optionally with `useMemo` if it's expensive.
229. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:89
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
230. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:90
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
231. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:53
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
232. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:53
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
233. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:88
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
234. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:65
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
235. [warning] design-no-redundant-size-axes — src/app/thread/thread-timeline.tsx:365
w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)
236. [warning] no-adjust-state-on-prop-change — src/app/native/artifact-shell/artifact-panel-body.tsx:46
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
237. [warning] control-has-associated-label — src/app/native/artifact-shell/artifact-panel-body.tsx:160
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
238. [warning] design-no-redundant-size-axes — src/app/settings/settings/settingsDescriptorDictation.tsx:77
w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)
239. [warning] design-no-redundant-size-axes — src/app/settings/settings/settingsDescriptorDictation.tsx:95
w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)
240. [warning] no-giant-component — src/app/native/gitops/composer-git-ops-footer.tsx:63
Component "ComposerGitOpsFooter" is 312 lines — consider breaking it into smaller focused components
241. [warning] no-event-handler — src/app/native/gitops/composer-git-ops-footer.tsx:122
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
242. [warning] no-event-handler — src/app/native/gitops/composer-git-ops-footer.tsx:122
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
243. [warning] design-no-redundant-size-axes — src/app/workspace-shell/terminal-panel.tsx:85
w-[14px] h-[14px] → use the shorthand size-[14px] (Tailwind v3.4+)
244. [warning] exhaustive-deps — src/app/native/gitops/composer-diff-baseline-selector.tsx:152
The `commits` value makes the dependencies of `useMemo` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.
245. [warning] exhaustive-deps — src/app/native/gitops/composer-diff-baseline-selector.tsx:156
The `commits` value makes the dependencies of `useMemo` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.
246. [warning] no-chain-state-updates — src/app/native/gitops/composer-diff-baseline-selector.tsx:406
Avoid chaining state changes. When possible, update all relevant state simultaneously.
247. [warning] no-event-handler — src/app/native/gitops/composer-diff-baseline-selector.tsx:405
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
248. [warning] design-no-redundant-size-axes — src/app/settings/settings/settingsDescriptorProjects.tsx:378
w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)
249. [warning] control-has-associated-label — src/app/native/gitops/diff-baseline-selector/baseline-selector-popover.tsx:93
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
250. [warning] no-many-boolean-props — src/app/native/gitops/diff/diff-panel-content-body.tsx:155
Component "DiffPanelContentBody" takes 4 boolean-like props (isGitRepo, isLoading, hasNoNetChanges…) — consider compound components or explicit variants instead of stacking flags
251. [warning] no-event-handler — src/app/native/gitops/diff/diff-changed-files-tree.tsx:97
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
252. [warning] no-event-handler — src/app/native/gitops/diff/diff-changed-files-tree.tsx:126
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
253. [warning] no-event-handler — src/app/native/gitops/diff/diff-changed-files-tree.tsx:127
Avoid using props and effects as an event handler. Instead, move the handler to the parent component.
254. [warning] no-multi-comp — src/app/thread/thread-timeline-row-chrome.tsx:102
Declare only one React component per file. Found extra component: RowLeadToggleSurface.
255. [warning] no-multi-comp — src/app/thread/thread-timeline-row-chrome.tsx:153
Declare only one React component per file. Found extra component: TimelineRowShell.
256. [warning] design-no-redundant-size-axes — src/app/inbox/components/inbox-composer-rails.tsx:48
w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)
257. [warning] no-giant-component — src/app/native/terminal/terminal-viewport.tsx:47
Component "TerminalViewport" is 379 lines — consider breaking it into smaller focused components
258. [warning] exhaustive-deps — src/app/native/terminal/terminal-viewport.tsx:301
The ref value `terminalResizeFrameRef.current` will likely have changed by the time this effect cleanup function runs. Copy it to a variable inside the hook callback and use that variable in cleanup.
259. [warning] jsx-no-jsx-as-prop — src/app/extensions/extensions-view.tsx:86
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
260. [warning] jsx-no-jsx-as-prop — src/app/extensions/extensions-view.tsx:108
JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.
261. [warning] unused-file — desktop/app-settings/path-normalization.ts:0
Unused file — not reachable from any entry point
262. [warning] unused-file — desktop/app-settings/writers.ts:0
Unused file — not reachable from any entry point
263. [warning] unused-file — desktop/bundled-themes.ts:0
Unused file — not reachable from any entry point
264. [warning] unused-file — desktop/dictation/model-download.ts:0
Unused file — not reachable from any entry point
265. [warning] unused-file — desktop/dictation/model-management.ts:0
Unused file — not reachable from any entry point
266. [warning] unused-file — desktop/dictation/model-resolution.ts:0
Unused file — not reachable from any entry point
267. [warning] unused-file — desktop/dictation/sherpa-onnx.ts:0
Unused file — not reachable from any entry point
268. [warning] unused-file — desktop/dictation/sherpa-runtime.ts:0
Unused file — not reachable from any entry point
269. [warning] unused-file — desktop/git-commit-message.ts:0
Unused file — not reachable from any entry point
270. [warning] unused-file — desktop/native-extensions/ask-questions-extension-path.ts:0
Unused file — not reachable from any entry point
271. [warning] unused-file — desktop/native-extensions/howcode-native-ask-questions.mjs:0
Unused file — not reachable from any entry point
272. [warning] unused-file — desktop/pi-module.ts:0
Unused file — not reachable from any entry point
273. [warning] unused-file — desktop/pi-packages/catalog.ts:0
Unused file — not reachable from any entry point
274. [warning] unused-file — desktop/pi-packages/configured.ts:0
Unused file — not reachable from any entry point
275. [warning] unused-file — desktop/pi-packages/helpers.ts:0
Unused file — not reachable from any entry point
276. [warning] unused-file — desktop/pi-packages/index.ts:0
Unused file — not reachable from any entry point
277. [warning] unused-file — desktop/pi-packages/mutations.ts:0
Unused file — not reachable from any entry point
278. [warning] unused-file — desktop/pi-packages/runtime-host-bridge.ts:0
Unused file — not reachable from any entry point
279. [warning] unused-file — desktop/pi-packages/services.ts:0
Unused file — not reachable from any entry point
280. [warning] unused-file — desktop/pi-packages/types.ts:0
Unused file — not reachable from any entry point
281. [warning] unused-file — desktop/pi-settings.ts:0
Unused file — not reachable from any entry point
282. [warning] unused-file — desktop/pi-skills.ts:0
Unused file — not reachable from any entry point
283. [warning] unused-file — desktop/pi-threads.ts:0
Unused file — not reachable from any entry point
284. [warning] unused-file — desktop/pi-threads/action-router-result.ts:0
Unused file — not reachable from any entry point
285. [warning] unused-file — desktop/pi-threads/action-router.ts:0
Unused file — not reachable from any entry point
286. [warning] unused-file — desktop/pi-threads/chat-actions.ts:0
Unused file — not reachable from any entry point
287. [warning] unused-file — desktop/pi-threads/composer-actions.ts:0
Unused file — not reachable from any entry point
288. [warning] unused-file — desktop/pi-threads/composer-attachment-payload.ts:0
Unused file — not reachable from any entry point
289. [warning] unused-file — desktop/pi-threads/external-thread-publisher.ts:0
Unused file — not reachable from any entry point
290. [warning] unused-file — desktop/pi-threads/map-with-concurrency.ts:0
Unused file — not reachable from any entry point
291. [warning] unused-file — desktop/pi-threads/pi-settings-actions.ts:0
Unused file — not reachable from any entry point
292. [warning] unused-file — desktop/pi-threads/project-actions.ts:0
Unused file — not reachable from any entry point
293. [warning] unused-file — desktop/pi-threads/project-import-action.ts:0
Unused file — not reachable from any entry point
294. [warning] unused-file — desktop/pi-threads/project-import-refresh.ts:0
Unused file — not reachable from any entry point
295. [warning] unused-file — desktop/pi-threads/project-paths.ts:0
Unused file — not reachable from any entry point
296. [warning] unused-file — desktop/pi-threads/project-usage-summary.ts:0
Unused file — not reachable from any entry point
297. [warning] unused-file — desktop/pi-threads/session-index.ts:0
Unused file — not reachable from any entry point
298. [warning] unused-file — desktop/pi-threads/session-watch.ts:0
Unused file — not reachable from any entry point
299. [warning] unused-file — desktop/pi-threads/settings-actions.ts:0
Unused file — not reachable from any entry point
300. [warning] unused-file — desktop/pi-threads/shell-index.ts:0
Unused file — not reachable from any entry point
301. [warning] unused-file — desktop/pi-threads/shell-loader.ts:0
Unused file — not reachable from any entry point
302. [warning] unused-file — desktop/pi-threads/shell-state.ts:0
Unused file — not reachable from any entry point
303. [warning] unused-file — desktop/pi-threads/thread-actions.ts:0
Unused file — not reachable from any entry point
304. [warning] unused-file — desktop/pi-threads/thread-loader.ts:0
Unused file — not reachable from any entry point
305. [warning] unused-file — desktop/pi-threads/workspace-actions.ts:0
Unused file — not reachable from any entry point
306. [warning] unused-file — desktop/project-import.ts:0
Unused file — not reachable from any entry point
307. [warning] unused-file — desktop/runtime-host/composer-resource-service.ts:0
Unused file — not reachable from any entry point
308. [warning] unused-file — desktop/runtime-host/git-commit-message-service.ts:0
Unused file — not reachable from any entry point
309. [warning] unused-file — desktop/runtime-host/host-service.ts:0
Unused file — not reachable from any entry point
310. [warning] unused-file — desktop/runtime-host/live-runtime-factory.ts:0
Unused file — not reachable from any entry point
311. [warning] unused-file — desktop/runtime-host/live-runtime-registry.ts:0
Unused file — not reachable from any entry point
312. [warning] unused-file — desktop/runtime-host/live-runtime-service.ts:0
Unused file — not reachable from any entry point
313. [warning] unused-file — desktop/runtime-host/live-thread-publisher.ts:0
Unused file — not reachable from any entry point
314. [warning] unused-file — desktop/runtime-host/live-tool-progress.ts:0
Unused file — not reachable from any entry point
315. [warning] unused-file — desktop/runtime-host/main-request-client.ts:0
Unused file — not reachable from any entry point
316. [warning] unused-file — desktop/runtime-host/main-request-handlers.ts:0
Unused file — not reachable from any entry point
317. [warning] unused-file — desktop/runtime-host/native-ask-questions-tool.ts:0
Unused file — not reachable from any entry point
318. [warning] unused-file — desktop/runtime-host/request-handlers.ts:0
Unused file — not reachable from any entry point
319. [warning] unused-file — desktop/runtime-host/runtime-extension-bindings.ts:0
Unused file — not reachable from any entry point
320. [warning] unused-file — desktop/runtime-host/runtime-session-events.ts:0
Unused file — not reachable from any entry point
321. [warning] unused-file — desktop/runtime-host/settings-service.ts:0
Unused file — not reachable from any entry point
322. [warning] unused-file — desktop/runtime-host/skill-creator-service.ts:0
Unused file — not reachable from any entry point
323. [warning] unused-file — desktop/runtime-host/slash-command-service.ts:0
Unused file — not reachable from any entry point
324. [warning] unused-file — desktop/runtime-host/theme-service.ts:0
Unused file — not reachable from any entry point
325. [warning] unused-file — desktop/runtime-host/thread-snapshot-service.ts:0
Unused file — not reachable from any entry point
326. [warning] unused-file — desktop/runtime-host/worker.ts:0
Unused file — not reachable from any entry point
327. [warning] unused-file — desktop/runtime/agent-session-extensions.ts:0
Unused file — not reachable from any entry point
328. [warning] unused-file — desktop/runtime/artifact-tools.ts:0
Unused file — not reachable from any entry point
329. [warning] unused-file — desktop/runtime/chat-system-prompt.ts:0
Unused file — not reachable from any entry point
330. [warning] unused-file — desktop/runtime/composer-dequeue.ts:0
Unused file — not reachable from any entry point
331. [warning] unused-file — desktop/runtime/composer-mode-settings.ts:0
Unused file — not reachable from any entry point
332. [warning] unused-file — desktop/runtime/composer-queue.ts:0
Unused file — not reachable from any entry point
333. [warning] unused-file — desktop/runtime/composer-service.ts:0
Unused file — not reachable from any entry point
334. [warning] unused-file — desktop/runtime/composer-state.ts:0
Unused file — not reachable from any entry point
335. [warning] unused-file — desktop/runtime/composer-stop.ts:0
Unused file — not reachable from any entry point
336. [warning] unused-file — desktop/runtime/headless-pi-theme.ts:0
Unused file — not reachable from any entry point
337. [warning] unused-file — desktop/runtime/native-ask-questions-state.ts:0
Unused file — not reachable from any entry point
338. [warning] unused-file — desktop/runtime/registry/runtime-registry-state.ts:0
Unused file — not reachable from any entry point
339. [warning] unused-file — desktop/runtime/runtime-registry.ts:0
Unused file — not reachable from any entry point
340. [warning] unused-file — desktop/runtime/runtime-session-events.ts:0
Unused file — not reachable from any entry point
341. [warning] unused-file — desktop/runtime/runtime-settings-cwd.ts:0
Unused file — not reachable from any entry point
342. [warning] unused-file — desktop/runtime/session-path-index.ts:0
Unused file — not reachable from any entry point
343. [warning] unused-file — desktop/runtime/settings-refresh.ts:0
Unused file — not reachable from any entry point
344. [warning] unused-file — desktop/runtime/slash-commands.ts:0
Unused file — not reachable from any entry point
345. [warning] unused-file — desktop/runtime/thread-publisher.ts:0
Unused file — not reachable from any entry point
346. [warning] unused-file — desktop/service-host-runtime.ts:0
Unused file — not reachable from any entry point
347. [warning] unused-file — desktop/service-host.ts:0
Unused file — not reachable from any entry point
348. [warning] unused-file — desktop/skill-creator-session.ts:0
Unused file — not reachable from any entry point
349. [warning] unused-file — desktop/skills/api.ts:0
Unused file — not reachable from any entry point
350. [warning] unused-file — desktop/skills/catalog.ts:0
Unused file — not reachable from any entry point
351. [warning] unused-file — desktop/skills/configured-skills.ts:0
Unused file — not reachable from any entry point
352. [warning] unused-file — desktop/skills/frontmatter.ts:0
Unused file — not reachable from any entry point
353. [warning] unused-file — desktop/skills/mutations.ts:0
Unused file — not reachable from any entry point
354. [warning] unused-file — desktop/skills/paths.ts:0
Unused file — not reachable from any entry point
355. [warning] unused-file — desktop/skills/runtime-host-bridge.ts:0
Unused file — not reachable from any entry point
356. [warning] unused-file — desktop/skills/source.ts:0
Unused file — not reachable from any entry point
357. [warning] unused-file — desktop/system-open-path.ts:0
Unused file — not reachable from any entry point
358. [warning] unused-file — desktop/terminal/manager.ts:0
Unused file — not reachable from any entry point
359. [warning] unused-file — desktop/terminal/node-pty.ts:0
Unused file — not reachable from any entry point
360. [warning] unused-file — desktop/terminal/session-history.helpers.ts:0
Unused file — not reachable from any entry point
361. [warning] unused-file — desktop/terminal/session-history.ts:0
Unused file — not reachable from any entry point
362. [warning] unused-file — desktop/terminal/session-id.ts:0
Unused file — not reachable from any entry point
363. [warning] unused-file — desktop/terminal/session-record.ts:0
Unused file — not reachable from any entry point
364. [warning] unused-file — desktop/terminal/session-store.ts:0
Unused file — not reachable from any entry point
365. [warning] unused-file — desktop/terminal/terminal-command.helpers.ts:0
Unused file — not reachable from any entry point
366. [warning] unused-file — desktop/terminal/terminal-command.ts:0
Unused file — not reachable from any entry point
367. [warning] unused-file — desktop/terminal/terminal-process.ts:0
Unused file — not reachable from any entry point
368. [warning] unused-file — desktop/terminal/terminal-visibility.ts:0
Unused file — not reachable from any entry point
369. [warning] unused-file — desktop/terminal/types.ts:0
Unused file — not reachable from any entry point
370. [warning] unused-file — pages/src/main.tsx:0
Unused file — not reachable from any entry point
371. [warning] unused-file — shared/dictation-helpers.ts:0
Unused file — not reachable from any entry point
372. [warning] unused-file — shared/dictation-models.ts:0
Unused file — not reachable from any entry point
373. [warning] unused-file — shared/thread-data.ts:0
Unused file — not reachable from any entry point
374. [warning] unused-file — src/app/common/index.ts:0
Unused file — not reachable from any entry point
375. [warning] unused-f
---
_Issue body truncated. See the full report at [react.review/dashboard](https://react.review/dashboard)._
Copy as prompt