feat(tab-icon): pin Run Script and Custom Command icons over auto-detection
The auto-detected command icon (npm, swift, …) used to clobber the
"play.fill" glyph that Run Script tabs are seeded with: the icon
visibly flashed in for a frame and was immediately overwritten by
whatever command the script kicked off. Custom Commands had no
configured-icon support at all — the user's chosen `systemImage`
never reached the tab.
Introduce a third precedence level between auto-detection and the
user picker by adding `TerminalTabItem.isScriptIconActive`. Auto
detection (`updateIcon` / `applyResolvedIcon`) skips tabs flagged
this way; the user picker (`overrideIcon` / `clearIconOverride`)
clears the flag so manual locks still win.
Wire-up:
- `WorktreeTerminalState.runScript` calls `setScriptIcon` after
creating the tab so the play glyph survives `npm`, `swift`, etc.
- `TerminalClient.Command.{createTabWithInput,createSplitWithInput}`
carry a new `customCommandIcon: String?`. `AppFeature` populates it
from `customCommand.systemImage`, treating the model's "terminal"
placeholder and empty/whitespace as unset so untouched commands
still get auto-detection.
- `WorktreeTerminalManager` forwards the icon into
`WorktreeTerminalState.applyCustomCommandIcon`, which resolves the
surface's tab and pins the icon via `setScriptIcon`.