You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Session accent colors** — `ColorService.GetHexColor(folderPath)` uses FNV-1a hash to deterministically assign one of 12 colors. Used as sidebar stripe + terminal toolbar top border.
98
+
**Session accent colors** — `ColorService.GetHexColor(key)` uses FNV-1a hash to deterministically assign one of 12 colors. For local sessions the key is `WorkingFolder`; for SSH sessions it is `user@host`. Used as sidebar stripe + terminal toolbar top border.
95
99
96
100
## Session Lifecycle
97
101
98
-
1. User clicks **+ New Session** → `NewSessionDialog` modal
99
-
2.`SessionManager.CreateSession()` creates `ShellSession` model
102
+
1. User clicks **+ New Session** → `NewSessionDialog` modal (Local or Remote SSH)
103
+
2.`SessionManager.CreateSession()` creates `ShellSession` model; caller copies SSH fields if remote
-`LaunchSessionAsync()` branches on `IsRemote`: uses `ssh` + `BuildSshArgs()`, skips Claude auto-resume
116
+
-`PseudoTerminal.BuildCmdLine` passes `ssh` through directly (same as `cmd`/`pwsh`) — not wrapped in PowerShell
117
+
-`SessionViewModel.RefreshGitInfoAsync()` early-returns for remote sessions (no local working folder)
118
+
- SSH fields serialize to `state.json` automatically — sessions restore and relaunch on next startup
119
+
104
120
## Alert / Waiting State
105
121
106
122
`AlertDetector` fires `AlertRaised(AlertEvent)` after 1.5s idle when it detects:
@@ -141,6 +157,28 @@ Persisted in `state.json`. Key settings:
141
157
|`Escape` (in search) | Close search panel |
142
158
|`Enter` (in search) | Execute search |
143
159
160
+
## Testing
161
+
162
+
| Project | Type | Command |
163
+
|---|---|---|
164
+
|`tests/CodeShellManager.Tests/`| Unit tests (xunit) |`dotnet test tests/CodeShellManager.Tests/`|
165
+
|`tests/CodeShellManager.UITests/`| FlaUI UI tests |`dotnet test tests/CodeShellManager.UITests/`|
166
+
167
+
Unit tests cover model logic (`ShellSession`, etc.) and run headless. UI tests require the app running on a live Windows desktop.
168
+
169
+
`ShellSession.BuildSshArgs()` is `internal` — accessible from tests via `[assembly: InternalsVisibleTo("CodeShellManager.Tests")]` in `AssemblyInfo.cs`.
170
+
171
+
## Releases
172
+
173
+
CI/CD is in `.github/workflows/build.yml`. Releases are triggered by pushing a `v*.*.*` tag:
174
+
175
+
```bash
176
+
git tag v1.2.3 -m "v1.2.3 - description"
177
+
git push origin v1.2.3
178
+
```
179
+
180
+
The tag value overrides the csproj `<Version>` at publish time (`-p:Version=` flag). **Do not rely on the csproj version number** — bump it for local build clarity only. CI produces a signed exe, MSI installer, and portable ZIP, then creates a GitHub Release automatically.
181
+
144
182
## Known Conventions
145
183
146
184
- All WPF color literals use Catppuccin Mocha hex values — do not introduce system colors
0 commit comments