diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db612c9..46b43db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,39 +28,39 @@ jobs: dotnet-version: '10.0.x' - name: Restore - run: dotnet restore MuGlyph.slnx + run: dotnet restore SharpMUTerm.slnx - name: Build - run: dotnet build MuGlyph.slnx -c Release --no-restore + run: dotnet build SharpMUTerm.slnx -c Release --no-restore # TUnit runs on Microsoft.Testing.Platform; execute each test project directly # (the classic `dotnet test`/VSTest path is not used by MTP on .NET 10). - name: Test — Core shell: bash - run: dotnet run -c Release --no-build --project tests/MuClient.Core.Tests/MuClient.Core.Tests.csproj + run: dotnet run -c Release --no-build --project tests/SharpMUTerm.Core.Tests/SharpMUTerm.Core.Tests.csproj - name: Test — Graphics shell: bash - run: dotnet run -c Release --no-build --project tests/MuClient.Graphics.Tests/MuClient.Graphics.Tests.csproj + run: dotnet run -c Release --no-build --project tests/SharpMUTerm.Graphics.Tests/SharpMUTerm.Graphics.Tests.csproj - name: Test — Scripting shell: bash - run: dotnet run -c Release --no-build --project tests/MuClient.Scripting.Tests/MuClient.Scripting.Tests.csproj + run: dotnet run -c Release --no-build --project tests/SharpMUTerm.Scripting.Tests/SharpMUTerm.Scripting.Tests.csproj - name: Test — Web shell: bash - run: dotnet run -c Release --no-build --project tests/MuClient.Web.Tests/MuClient.Web.Tests.csproj + run: dotnet run -c Release --no-build --project tests/SharpMUTerm.Web.Tests/SharpMUTerm.Web.Tests.csproj - name: Test — Tui shell: bash - run: dotnet run -c Release --no-build --project tests/MuClient.Tui.Tests/MuClient.Tui.Tests.csproj + run: dotnet run -c Release --no-build --project tests/SharpMUTerm.Tui.Tests/SharpMUTerm.Tui.Tests.csproj # End-to-end guard: the headless snapshot must render the workspace (rail, worlds, command # surface) and exit — catches both UI-render regressions and any return of the stdin-block hang. - name: Smoke — headless snapshot shell: bash run: | - dotnet run -c Release --no-build --project src/MuClient.Tui/MuClient.Tui.csproj -- \ + dotnet run -c Release --no-build --project src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj -- \ --snapshot --size 120x30 --out snapshot.ans - dotnet publish src/MuClient.Tui/MuClient.Tui.csproj + dotnet publish src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj -p:PublishProfile=${{ matrix.profile }} -o publish/${{ matrix.rid }} @@ -42,20 +42,20 @@ jobs: shell: bash run: | cd publish/${{ matrix.rid }} - tar -czf ../../muglyph-${{ matrix.rid }}.tar.gz muglyph + tar -czf ../../sharpmuterm-${{ matrix.rid }}.tar.gz sharpmuterm - name: Package (Windows) if: runner.os == 'Windows' shell: bash run: | cd publish/${{ matrix.rid }} - 7z a ../../muglyph-${{ matrix.rid }}.zip muglyph.exe + 7z a ../../sharpmuterm-${{ matrix.rid }}.zip sharpmuterm.exe - name: Upload build artifact uses: actions/upload-artifact@v4 with: - name: muglyph-${{ matrix.rid }} - path: muglyph-${{ matrix.rid }}.* + name: sharpmuterm-${{ matrix.rid }} + path: sharpmuterm-${{ matrix.rid }}.* # Serialize release creation in a single downstream job so the two matrix jobs don't race # softprops/action-gh-release on the same tag. diff --git a/CLAUDE.md b/CLAUDE.md index fd63268..535948e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,11 +1,11 @@ -# CLAUDE.md — MuGlyph agent brief +# CLAUDE.md — SharpMUTerm agent brief Guidance for any Claude agent working in this repository. Read this first, then read [`docs/PLAN.md`](docs/PLAN.md) — the plan is the authoritative architecture + roadmap. ## What this project is -**MuGlyph** is a cross-platform TUI **MU\*** (MUSH / MUCK / MUD) client in **C# / .NET 10**, +**SharpMUTerm** is a cross-platform TUI **MU\*** (MUSH / MUCK / MUD) client in **C# / .NET 10**, targeting feature parity with [BeipMU](https://beipdev.github.io/BeipMU/), running inside GPU-accelerated terminals (Kitty, WezTerm, Ghostty) on **Windows and Linux**. @@ -20,7 +20,7 @@ fallbacks) for inline images/maps. framework with split layouts, tabs, resizable/mouse-draggable windows, Spectre-style markup, and a **native Kitty graphics protocol** (+ Sixel/half-block) for inline images. Replaced Terminal.Gui v2 (which was prerelease with an `[Obsolete]` mid-migration API); the switch is contained to - `MuClient.Tui` because `MuClient.Core` is UI-agnostic. + `SharpMUTerm.Tui` because `SharpMUTerm.Core` is UI-agnostic. - **Scripting:** Lua via **MoonSharp** (pure-managed, sandboxed). - **Inline graphics:** in scope from day one (Kitty Unicode placeholders → Sixel → half-block). - **Protocols:** aim for all common MU\* protocols. GMCP/MSSP/CHARSET/NAWS/MTTS/EOR via @@ -31,8 +31,8 @@ fallbacks) for inline images/maps. ## Repository state -**M1 delivered, plus substantial M2–M4 work.** `MuGlyph.slnx` builds all ten projects on -`net10.0`; the solution has **391 passing tests**. In place: +**M1 delivered, plus substantial M2–M4 work.** `SharpMUTerm.slnx` builds all ten projects on +`net10.0`; the solution has **514 passing tests**. In place: - **Core** — `AnsiParser` (SGR 16/256/truecolor), styled-line + `ScrollbackBuffer` model, `TcpTransport` (TLS + IPv6), `TelnetSession` (wraps TelnetNegotiationCore **2.5.3**), @@ -70,30 +70,30 @@ fallbacks) for inline images/maps. ## Architecture rule (non-negotiable) -`MuClient.Core` stays **UI-agnostic and fully unit-testable**. All transport, telnet, parsing +`SharpMUTerm.Core` stays **UI-agnostic and fully unit-testable**. All transport, telnet, parsing (ANSI/MXP/Pueblo), GMCP/MSDP routing, scrollback, and trigger/alias/macro engines live there. -SharpConsoleUI is referenced **only** from `MuClient.Tui`. +SharpConsoleUI is referenced **only** from `SharpMUTerm.Tui`. Planned solution layout: | Project | Responsibility | |---|---| -| `MuClient.Core` | Transport, telnet, ANSI/MXP/Pueblo parsers, GMCP/MSDP routing, scrollback, engines, logging (no UI deps) | -| `MuClient.Graphics` | Kitty graphics protocol, capability probe, Sixel + half-block fallbacks, `GraphicsView` | -| `MuClient.Scripting` | MoonSharp host + scripting API | -| `MuClient.Tui` | SharpConsoleUI application | +| `SharpMUTerm.Core` | Transport, telnet, ANSI/MXP/Pueblo parsers, GMCP/MSDP routing, scrollback, engines, logging (no UI deps) | +| `SharpMUTerm.Graphics` | Kitty graphics protocol, capability probe, Sixel + half-block fallbacks, `GraphicsView` | +| `SharpMUTerm.Scripting` | MoonSharp host + scripting API | +| `SharpMUTerm.Tui` | SharpConsoleUI application | | `*.Tests` (Core, Graphics, Scripting, Web, Tui) | TUnit | ## Milestone M1 — first task (delivered) Kept for context; **M1 is done** (see *Repository state* above). As originally scoped: -1. Create `MuGlyph.slnx` with the projects above targeting `net10.0`, plus the TUnit test projects. +1. Create `SharpMUTerm.slnx` with the projects above targeting `net10.0`, plus the TUnit test projects. 2. Add NuGet references (see version notes below). 3. Runnable stub: connect over TCP (+ optional TLS via `SslStream`, IPv6-capable), pipe received bytes through a first-pass `AnsiParser` (SGR: 16 / 256 / 24-bit color), render colored output in a SharpConsoleUI window with an input line + history. -4. Unit-test `AnsiParser` and the telnet-session wrapper in `MuClient.Core.Tests`. +4. Unit-test `AnsiParser` and the telnet-session wrapper in `SharpMUTerm.Core.Tests`. ## Dependency notes / traps @@ -112,7 +112,8 @@ Kept for context; **M1 is done** (see *Repository state* above). As originally s ## Verification -- Primary signal: `dotnet build` + `dotnet test`. Keep coverage in `MuClient.Core.Tests` +- Primary signal: `dotnet build` + `dotnet run --project ` for each test project + (see the TUnit/MTP note above — `dotnet test` does **not** work here). Keep coverage in `SharpMUTerm.Core.Tests` (ANSI/SGR parser, telnet round-trips, engines). - A headless sandbox **cannot** visually verify a TUI and **cannot** render Kitty graphics. Treat the graphics layer as build-verified + capability-probed, never visually confirmed; diff --git a/Directory.Build.props b/Directory.Build.props index 32cff72..af4367b 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - + net10.0 latest @@ -11,10 +11,10 @@ true true Harry Cordewener - MuGlyph + SharpMUTerm Copyright (c) 2026 Harry Cordewener MIT - https://github.com/HarryCordewener/MuGlyph + https://github.com/SharpMUSH/SharpMUTerm diff --git a/MuGlyph.slnx b/MuGlyph.slnx deleted file mode 100644 index a0625cc..0000000 --- a/MuGlyph.slnx +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/README.md b/README.md index ee9392d..8966d52 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,25 @@ -# MuGlyph +# SharpMUTerm A hyper-modern, cross-platform **TUI client for MU\*** (MUSH / MUCK / MUD) worlds, built for GPU-accelerated terminals (Kitty, WezTerm, Ghostty) on **Windows and Linux**. +Part of the [SharpMUSH](https://github.com/SharpMUSH) family: **SharpMUSH** is the server, +[**SharpClient**](https://github.com/SharpMUSH/SharpClient) is the graphical client, and +**SharpMUTerm** is the terminal one. It speaks plain telnet, so it connects to any MU\* world — +not just SharpMUSH ones. + The goal is [BeipMU](https://beipdev.github.io/BeipMU/)-class feature parity in a terminal-native client: rich truecolor text, inline graphics, powerful automation, and full MU\* protocol support. > **Status:** milestone **M1 delivered** (usable text client foundation) with substantial work > from M2–M4 in place — automation engines, inline-graphics subsystem, Lua scripting, and theming. -> `MuClient.Core` is fully unit-tested (391 tests across the solution). See +> `SharpMUTerm.Core` is fully unit-tested (514 tests across the solution). See > [`docs/PLAN.md`](docs/PLAN.md) for the full architecture and roadmap. ## Why a TUI "GPU acceleration" is a property of the terminal *emulator*, not the app. Any TUI running inside -Kitty / WezTerm / Ghostty gets GPU-accelerated glyph rendering for free. MuGlyph focuses on emitting +Kitty / WezTerm / Ghostty gets GPU-accelerated glyph rendering for free. SharpMUTerm focuses on emitting rich truecolor/styled text and using the **Kitty graphics protocol** (with Sixel and half-block fallbacks) for inline images and maps. @@ -36,10 +41,10 @@ HTML logging · GMCP / MSDP / MSSP / MCCP · MXP + Pueblo · Unicode/emoji. | Project | Responsibility | |---|---| -| `MuClient.Core` | Transport, telnet, ANSI/MXP/Pueblo parsers, GMCP/MSDP routing, scrollback, trigger/alias/macro engines, logging (UI-agnostic) | -| `MuClient.Graphics` | Kitty graphics protocol, capability probe, Sixel + half-block fallbacks, `GraphicsView` | -| `MuClient.Scripting` | MoonSharp host + scripting API | -| `MuClient.Tui` | SharpConsoleUI application (windows, panes, settings, wiring) | +| `SharpMUTerm.Core` | Transport, telnet, ANSI/MXP/Pueblo parsers, GMCP/MSDP routing, scrollback, trigger/alias/macro engines, logging (UI-agnostic) | +| `SharpMUTerm.Graphics` | Kitty graphics protocol, capability probe, Sixel + half-block fallbacks, `GraphicsView` | +| `SharpMUTerm.Scripting` | MoonSharp host + scripting API | +| `SharpMUTerm.Tui` | SharpConsoleUI application (windows, panes, settings, wiring) | | `*.Tests` | TUnit test projects | ## What works today @@ -75,7 +80,7 @@ HTML logging · GMCP / MSDP / MSSP / MCCP · MXP + Pueblo · Unicode/emoji. character-bound input prompt + destination/draft gutter. Output is truecolor markup with clickable MXP/Pueblo/web spans; NAWS is re-advertised on resize. `Ctrl+N` next window · `Ctrl+O` next pane · `Ctrl+W` close · `Ctrl+Q` quit. -- **Web view** — an in-TUI text-mode browser (`MuClient.Web`, AngleSharp): fetch a URL or +- **Web view** — an in-TUI text-mode browser (`SharpMUTerm.Web`, AngleSharp): fetch a URL or follow an MXP/Pueblo/HTML link and read the page as styled, word-wrapped text with clickable links you can navigate in-pane. `` shows as a labelled link (graphics-terminal image rendering reuses the Kitty/Sixel/half-block pipeline). @@ -87,14 +92,14 @@ HTML logging · GMCP / MSDP / MSSP / MCCP · MXP + Pueblo · Unicode/emoji. Requires the **.NET 10 SDK**. ```bash -dotnet build MuGlyph.slnx -c Release +dotnet build SharpMUTerm.slnx -c Release ``` ## Running ```bash -dotnet run --project src/MuClient.Tui -- [--tls] [--insecure] [--name NAME] -muglyph --help # once published +dotnet run --project src/SharpMUTerm.Tui -- [--tls] [--insecure] [--name NAME] +sharpmuterm --help # once published ``` In-app: **Up/Down** input history · **Ctrl+N** next window · **Ctrl+W** close window · **Ctrl+Q** quit. (Windows/panes are mouse-resizable; each window keeps its own input draft.) @@ -105,11 +110,11 @@ The test projects use [TUnit], which runs on the Microsoft.Testing.Platform. Run (the classic `dotnet test`/VSTest path is not used by MTP on .NET 10): ```bash -dotnet run --project tests/MuClient.Core.Tests -dotnet run --project tests/MuClient.Graphics.Tests -dotnet run --project tests/MuClient.Scripting.Tests -dotnet run --project tests/MuClient.Web.Tests -dotnet run --project tests/MuClient.Tui.Tests +dotnet run --project tests/SharpMUTerm.Core.Tests +dotnet run --project tests/SharpMUTerm.Graphics.Tests +dotnet run --project tests/SharpMUTerm.Scripting.Tests +dotnet run --project tests/SharpMUTerm.Web.Tests +dotnet run --project tests/SharpMUTerm.Tui.Tests ``` ## License diff --git a/SharpMUTerm.slnx b/SharpMUTerm.slnx new file mode 100644 index 0000000..a9c33c9 --- /dev/null +++ b/SharpMUTerm.slnx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/docs/PACKAGING.md b/docs/PACKAGING.md index e82ce90..112d315 100644 --- a/docs/PACKAGING.md +++ b/docs/PACKAGING.md @@ -1,29 +1,29 @@ -# Packaging MuGlyph +# Packaging SharpMUTerm -MuGlyph publishes as a **self-contained, single-file** executable — no .NET runtime required on +SharpMUTerm publishes as a **self-contained, single-file** executable — no .NET runtime required on the target machine. ## Supported runtimes `linux-x64`, `linux-arm64`, `win-x64`, `osx-x64`, `osx-arm64` (declared in -`src/MuClient.Tui/MuClient.Tui.csproj`). +`src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj`). ## Local publish -Publish profiles live in `src/MuClient.Tui/Properties/PublishProfiles/`: +Publish profiles live in `src/SharpMUTerm.Tui/Properties/PublishProfiles/`: ```bash -# Linux x64 → publish output contains a single `muglyph` binary -dotnet publish src/MuClient.Tui -p:PublishProfile=linux-x64 -o out/linux-x64 +# Linux x64 → publish output contains a single `sharpmuterm` binary +dotnet publish src/SharpMUTerm.Tui -p:PublishProfile=linux-x64 -o out/linux-x64 -# Windows x64 → `muglyph.exe` -dotnet publish src/MuClient.Tui -p:PublishProfile=win-x64 -o out/win-x64 +# Windows x64 → `sharpmuterm.exe` +dotnet publish src/SharpMUTerm.Tui -p:PublishProfile=win-x64 -o out/win-x64 ``` For a RID without a profile, pass the flags directly: ```bash -dotnet publish src/MuClient.Tui -c Release -r osx-arm64 \ +dotnet publish src/SharpMUTerm.Tui -c Release -r osx-arm64 \ --self-contained -p:PublishSingleFile=true \ -p:IncludeNativeLibrariesForSelfExtract=true -o out/osx-arm64 ``` diff --git a/docs/PLAN.md b/docs/PLAN.md index b307893..f106e63 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -7,7 +7,7 @@ BeipMU is the best-in-class **Windows-only** MU\* (MUSH/MUCK/MUD) client, but it Key reframing from research: **"GPU-enabled" is a property of the terminal emulator, not our app.** Any TUI running inside Kitty/WezTerm/Ghostty gets GPU-accelerated glyph rendering for free. Our job is to (a) emit rich truecolor/styled text and (b) use the **Kitty graphics protocol** (escape sequences) for inline images/maps, with graceful fallbacks. Both are fully achievable from managed C#. ### Locked decisions (from planning Q&A) -- **Rendering base:** **SharpConsoleUI** (`nickprotop/ConsoleEx`, stable, net8/9/10) — a compositor-based framework with split layouts, tabs, resizable/mouse windows, Spectre-style markup, and a **native Kitty graphics protocol** (+ Sixel/half-block). Superseded the original Terminal.Gui v2 choice (which was prerelease with an `[Obsolete]` mid-migration API); the switch was contained to `MuClient.Tui` since `MuClient.Core` is UI-agnostic. References below that describe Terminal.Gui reflect the earlier plan. +- **Rendering base:** **SharpConsoleUI** (`nickprotop/ConsoleEx`, stable, net8/9/10) — a compositor-based framework with split layouts, tabs, resizable/mouse windows, Spectre-style markup, and a **native Kitty graphics protocol** (+ Sixel/half-block). Superseded the original Terminal.Gui v2 choice (which was prerelease with an `[Obsolete]` mid-migration API); the switch was contained to `SharpMUTerm.Tui` since `SharpMUTerm.Core` is UI-agnostic. References below that describe Terminal.Gui reflect the earlier plan. - **Scripting:** Lua via **MoonSharp** (pure-managed, no native deps). - **Inline graphics:** must-have from day one. - **Scope:** broad BeipMU parity (phased into milestones below). @@ -51,11 +51,11 @@ Layered, with a strict separation between **protocol/session** (headless, unit-t ``` ### Solution structure (proposed) -- `MuClient.Core` — transport, telnet, ANSI/MXP parsers, GMCP/MSDP routing, scrollback model, trigger/alias/macro engines, logging. **No UI deps.** -- `MuClient.Scripting` — MoonSharp host + the scripting API surface (world, output, triggers, timers, gmcp). -- `MuClient.Graphics` — Kitty graphics protocol encoder, capability probe, Sixel + half-block fallbacks, `GraphicsView`. -- `MuClient.Tui` — SharpConsoleUI app: windows, panes, key routing, settings UI, wiring. -- `MuClient.Core.Tests` / `MuClient.Graphics.Tests` — xUnit. +- `SharpMUTerm.Core` — transport, telnet, ANSI/MXP parsers, GMCP/MSDP routing, scrollback model, trigger/alias/macro engines, logging. **No UI deps.** +- `SharpMUTerm.Scripting` — MoonSharp host + the scripting API surface (world, output, triggers, timers, gmcp). +- `SharpMUTerm.Graphics` — Kitty graphics protocol encoder, capability probe, Sixel + half-block fallbacks, `GraphicsView`. +- `SharpMUTerm.Tui` — SharpConsoleUI app: windows, panes, key routing, settings UI, wiring. +- `SharpMUTerm.Core.Tests` / `SharpMUTerm.Graphics.Tests` — xUnit. - Target **.NET 10** (confirm TelnetNegotiationCore + Terminal.Gui v2 support net10.0; if a dep lags, reference it via `net8.0` compat and keep our own projects on net10.0). --- @@ -75,7 +75,7 @@ Layered, with a strict separation between **protocol/session** (headless, unit-t ## Rendering & graphics - **Text UI**: Terminal.Gui v2 provides the window manager, tabbed worlds, dockable panes, scrollback view, multi-input, focus, and truecolor cell rendering. Advertise UTF-8 + truecolor to servers. -- **`GraphicsView`** (`MuClient.Graphics`): renders images (maps, avatars, inline media) using **Kitty Unicode placeholders** so images occupy real cells and scroll/clip via Terminal.Gui's layout. Pipeline: probe capability → upload image once (base64-chunked `APC _G` transmit) → paint placeholder runes/colors into the view's cells → manage image lifecycle (`a=d` delete on close/replace). +- **`GraphicsView`** (`SharpMUTerm.Graphics`): renders images (maps, avatars, inline media) using **Kitty Unicode placeholders** so images occupy real cells and scroll/clip via Terminal.Gui's layout. Pipeline: probe capability → upload image once (base64-chunked `APC _G` transmit) → paint placeholder runes/colors into the view's cells → manage image lifecycle (`a=d` delete on close/replace). - **Capability probe + fallbacks**: query terminal for Kitty graphics; else **Sixel**; else Unicode **half-block/quadrant** approximation; else a text placeholder. Selection is per-session and user-overridable in settings. - **Map rendering**: `MapModel` (rooms/exits/z-levels) rendered either as box-drawing/Unicode vector art in a normal view *or* as a rasterized image through `GraphicsView` — start with box-drawing (works everywhere), add rasterized mode where graphics are available. @@ -99,7 +99,7 @@ Transport (TCP + SslStream TLS + IPv6); TelnetSession over TelnetNegotiationCore `TriggerEngine` (regex, gag/highlight/rewrite/spawn actions), `AliasEngine`, `MacroEngine`/keybinds, timers. Settings UI for all of them. Per-world profiles (JSON). **M3 — Graphics day-one payoff** -`MuClient.Graphics`: Kitty placeholder `GraphicsView` + Sixel/half-block fallbacks + capability probe. Inline **image viewer**; **map** view (box-drawing first, rasterized where supported); **stat panes** driven by GMCP. +`SharpMUTerm.Graphics`: Kitty placeholder `GraphicsView` + Sixel/half-block fallbacks + capability probe. Inline **image viewer**; **map** view (box-drawing first, rasterized where supported); **stat panes** driven by GMCP. **M4 — Scripting** MoonSharp `ScriptHost`, scripting API, Lua-backed triggers/aliases, GMCP subscriptions from Lua, hot-reload. @@ -113,7 +113,7 @@ MoonSharp `ScriptHost`, scripting API, Lua-backed triggers/aliases, GMCP subscri in the TUI. **Emoji** substitution (`EmojiSubstitutor`), opt-in per world. GMCP-driven **stat line**, **spawn** capture, ReDoS-guarded regex engines, and self-contained **single-file packaging** (`docs/PACKAGING.md`) + a tagged release workflow. -- **In-TUI web view** (`MuClient.Web` + `WebView`): fetch a URL or follow an MXP/Pueblo/HTML link +- **In-TUI web view** (`SharpMUTerm.Web` + `WebView`): fetch a URL or follow an MXP/Pueblo/HTML link and read the page as styled, word-wrapped text with clickable in-pane navigation (AngleSharp → `StyledLine`s, reusing `SpanInteraction`). `` renders as a labelled link today. @@ -163,11 +163,13 @@ prompt with a destination/draft gutter. Built on these `Core` pieces (pure + tes - **Unit tests** (`Core.Tests`): ANSI/SGR parser (256 + truecolor + edge sequences), telnet negotiation round-trips, MCCP decompression against captured zlib streams, trigger/alias regex + action application, GMCP JSON routing. - **Graphics tests**: Kitty placeholder-sequence encoder golden-output tests; capability-probe fallback selection. - **Manual/integration**: connect to a public test MU\* (and a local throwaway server) from **Kitty, WezTerm, Ghostty, and a non-graphics terminal**; verify truecolor, prompts on input line, logging, triggers firing, an inline image rendering under Kitty and degrading to half-block elsewhere. Run on both **Windows and Linux**. -- Use `dotnet test` in CI (GitHub Actions matrix: windows-latest + ubuntu-latest). +- Run the tests in CI with `dotnet run --project ` per test project (GitHub Actions matrix: + windows-latest + ubuntu-latest). TUnit runs on Microsoft.Testing.Platform, where the classic + `dotnet test`/VSTest path is unsupported on .NET 10 and later. --- ## Open items to confirm before/at M1 - Confirm TelnetNegotiationCore + Terminal.Gui v2 both build against **net10.0** (fallback: consume via net8.0 compat). - Which servers you actually play on (helps prioritize protocol edge cases; all are targeted regardless). -- Final project/repo **name** (currently scaffolded as `MuGlyph` — trivially renamable). +- Final project/repo **name** (currently scaffolded as `SharpMUTerm` — trivially renamable). diff --git a/docs/SCREENSHOTS.md b/docs/SCREENSHOTS.md index 39c06f3..86892bb 100644 --- a/docs/SCREENSHOTS.md +++ b/docs/SCREENSHOTS.md @@ -1,12 +1,12 @@ # Screenshots & demos (headless) -MuGlyph can render its UI to an image **without a terminal or a live connection**, so +SharpMUTerm can render its UI to an image **without a terminal or a live connection**, so documentation images and CI visual checks work anywhere the .NET build runs. ## How it works SharpConsoleUI ships a `HeadlessConsoleDriver` that renders to a captured buffer instead -of a real console. `muglyph --snapshot` builds the app on that driver, loads a +of a real console. `sharpmuterm --snapshot` builds the app on that driver, loads a representative demo scene (a room, a `Chat` spawn window with unread, an input draft), renders one frame, and writes the raw ANSI to stdout (or `--out file`). @@ -16,19 +16,19 @@ a character grid and emits a **self-contained SVG** (great for embedding in Mark ```bash # one-shot -muglyph --snapshot --size 100x30 | python3 tools/ansi_frame_to_image.py > shot.svg +sharpmuterm --snapshot --size 100x30 | python3 tools/ansi_frame_to_image.py > shot.svg # regenerate the committed screenshots tools/make-screenshots.sh ``` The frame is deterministic (the desktop panels/clock are disabled under the headless -driver), so `muglyph --snapshot` output can also serve as a **golden file** for CI. +driver), so `sharpmuterm --snapshot` output can also serve as a **golden file** for CI. ## Animated demos (VHS) For animated GIFs/MP4s of real usage (typing, spawn windows appearing), use [charmbracelet/vhs](https://github.com/charmbracelet/vhs): write a `.tape` script and run it in CI with [`charmbracelet/vhs-action`](https://github.com/charmbracelet/vhs-action). -VHS drives the published `muglyph` binary in a headless terminal and records the result — +VHS drives the published `sharpmuterm` binary in a headless terminal and records the result — complementary to the static SVG snapshots above. diff --git a/docs/design/README.md b/docs/design/README.md index aac8713..6c8de0c 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -1,22 +1,22 @@ -# Handoff: MuGlyph multi-pane workspace, spawn windows & settings (M5 UI) +# Handoff: SharpMUTerm multi-pane workspace, spawn windows & settings (M5 UI) ## Overview -A design for MuGlyph's TUI shell at M5 scope: a tmux-style pane tree hosting BeipMU-style +A design for SharpMUTerm's TUI shell at M5 scope: a tmux-style pane tree hosting BeipMU-style spawn windows, a worlds→characters connection model, trigger sets assignable to characters, a searchable command surface, and per-tab input drafts. -This covers the UI layer only. It assumes the existing `MuClient.Core` engines +This covers the UI layer only. It assumes the existing `SharpMUTerm.Core` engines (`TriggerEngine`, `AliasEngine`, `IntervalScheduler`, `ScrollbackBuffer`, `SessionManager`) -and asks for two **schema changes** in `MuClient.Core.Configuration` — see *Schema changes* below. +and asks for two **schema changes** in `SharpMUTerm.Core.Configuration` — see *Schema changes* below. ## About the design files -`Glyph-TUI-v3.dc.html` is a **design reference written in HTML**, not production code and not +`SharpMUTerm-TUI-v3.dc.html` is a **design reference written in HTML**, not production code and not something to port. It is a browser mock of a terminal UI: every "pane border", "block meter" and "box-drawing glyph" is HTML standing in for what SharpConsoleUI will draw as real cells. -The task is to **rebuild these screens in `MuClient.Tui`** using SharpConsoleUI views and the +The task is to **rebuild these screens in `SharpMUTerm.Tui`** using SharpConsoleUI views and the existing `Theme`/`ColorMapper` pipeline. Do not translate the HTML structure; translate the layout, the interaction model, and the information hierarchy. @@ -28,7 +28,7 @@ Open the file in a browser to interact with it (typing, pane splits, ⌃P, F2– low-fidelity for colour.** Every colour in the mock is a literal hex, because HTML has no theme layer. In the real client -these must resolve through `MuClient.Core.Theming.Theme` — do not hardcode the mock's hexes. +these must resolve through `SharpMUTerm.Core.Theming.Theme` — do not hardcode the mock's hexes. The mapping table under *Design tokens* gives the theme field or ANSI index each mock colour stands for. @@ -104,7 +104,7 @@ world's imported character, preserving today's behaviour. The whole client. Five regions, top to bottom: header, [rail | pane area], input, status bar. -**Header** (1 row): `☰ glyph·tui` at far left is the menu affordance and opens the command +**Header** (1 row): `☰ muterm` at far left is the menu affordance and opens the command surface (the caret flips `☰`→`▾` while open). Right side carries a `⌃B` prefix indicator (shown only while armed), the log indicator (`◉ LOG 1284` / `◉ LOG off`), and a clock. @@ -337,7 +337,7 @@ None. No images, no icon fonts — glyphs only. ## Files -- `Glyph TUI v3.dc.html` — the interactive design reference (open in a browser) +- `SharpMUTerm-TUI-v3.dc.html` — the interactive design reference (open in a browser) - `support.js` — runtime for the above; not part of the design Repo files each screen maps to are tabulated in `github.md` at the project root. diff --git a/docs/design/Glyph-TUI-v3.dc.html b/docs/design/SharpMUTerm-TUI-v3.dc.html similarity index 99% rename from docs/design/Glyph-TUI-v3.dc.html rename to docs/design/SharpMUTerm-TUI-v3.dc.html index 8288595..00cea19 100644 --- a/docs/design/Glyph-TUI-v3.dc.html +++ b/docs/design/SharpMUTerm-TUI-v3.dc.html @@ -22,7 +22,7 @@
-
{{ brandCaret }}glyph·tui
+
{{ brandCaret }}muterm
⌃B — awaiting | - z o x
diff --git a/docs/superpowers/specs/2026-07-28-sharpmuterm-naming-design.md b/docs/superpowers/specs/2026-07-28-sharpmuterm-naming-design.md new file mode 100644 index 0000000..3132e5d --- /dev/null +++ b/docs/superpowers/specs/2026-07-28-sharpmuterm-naming-design.md @@ -0,0 +1,79 @@ +# Naming: MuGlyph → SharpMUTerm + +**Date:** 2026-07-28 +**Status:** decided + +## Problem + +The project carried three names for one product: + +| Surface | Name | +|---|---| +| Repo / product | `MuGlyph` | +| Assemblies | `MuClient.*` | +| Binary | `muglyph` | + +None of them associated the client with the SharpMUSH family, and none of them said what the +thing *is*. The repo also lived at `harryCordewener/MuGlyph`, outside the `SharpMUSH` org. + +## Criterion + +In `SharpMUSH`, **Sharp** means "written in C#" and **MUSH** says what it is — a MUSH server. +That second half is what makes the name work. `SharpClient`, the sibling GUI client, is the +counter-example the maintainer flagged: it is a client written in C#, but "Client" doesn't say +what it does or what it connects to. + +So the name had to **pay its own rent**: the name alone answers "what is this", with no tagline +doing the work. For this project that means saying *terminal* — the terminal is the actual +differentiator against `SharpClient`, since "client" is already taken. + +## Decision + +**`SharpMUTerm`** — Sharp (C#) + MU (the worlds) + Term (the terminal). + +`MU` rather than `MUSH` is deliberate: the client speaks plain telnet and connects to any MU\* +world (MUSH / MUCK / MUD), so the narrower `MUSH` would both overclaim and, by echoing the +server's name, invite reading it as a server. + +## Alternatives considered + +| Name | Why not | +|---|---| +| `SharpMUSH.Terminal` | Reads as a first-party component of the server rather than a client in its own right, and the embedded MUSH implies MUSH-only. | +| `SharpMUGlyph` | Keeps the heritage and the existing mark, but "Glyph" evokes rather than states — it fails the rent criterion. | +| `SharpMUTTY` | The PuTTY echo is charming and does pay the rent, but reads as "mutty". | +| `SharpMUSHell` | MUSH + shell is a genuinely good pun; the embedded MUSH is the same server-misread problem. | +| `SharpTerm` | Clean, but on its own reads as a terminal *emulator* — nothing says MU\*. | +| `SharpGlyph`, `SharpScroll`, `SharpRune`, `SharpTome`, `SharpLantern` | Evocative, not descriptive. | +| `SharpConsole` | Collides with the `SharpConsoleUI` dependency. | +| `SharpMU` | Reads as a server; too close to `SharpMUSH`. | +| `SharpPortal` | SharpMUSH already ships a Portal. | +| `MUTermSharp`, `MUSHTermSharp` | `Sharp` is .NET's convention for *bindings* (SkiaSharp, GtkSharp). | + +## Resulting surface + +| Surface | Value | +|---|---| +| Product | `SharpMUTerm` | +| Repo | `SharpMUSH/SharpMUTerm` | +| Assemblies | `SharpMUTerm.Core`, `.Graphics`, `.Scripting`, `.Tui`, `.Web` (+ `.Tests`) | +| Solution | `SharpMUTerm.slnx` | +| Binary | `sharpmuterm` / `sharpmuterm.exe` | +| Config | `~/.config/SharpMUTerm/config.json` | +| Env vars | `SHARPMUTERM_GRAPHICS`, `SHARPMUTERM_SIXEL` | +| Header brand chip | `muterm` | + +No published releases existed at rename time, so none of these required compatibility shims. + +## Open follow-ups + +- **Logo.** `docs/logo.svg` is an octagonal **G** — G for Glyph — whose rationale no longer + applies. Deliberately left unchanged for now. A caret-and-block-cursor mark (`>▌`) drawn in + SharpMUSH's vocabulary (45° chamfered heavy strokes, `#00f5b7`, 512×512 flat fill) was + prototyped and deferred, not rejected. +- **`main`-side assets.** `assets/fonts/MuGlyph.ttf` and `assets/fonts/README.md` were added to + `main` by PR #3 and do not exist on PR #2's branch, so this rename cannot reach them. They + need renaming on `main` after PR #2 merges. +- **`SharpClient`.** Renaming it to something that says what it does (`SharpMUApp`? + `SharpMUMobile`?) would make the client family coherent. Out of scope here; the maintainer's + call. diff --git a/examples/example.lua b/examples/example.lua index 296d5de..779f976 100644 --- a/examples/example.lua +++ b/examples/example.lua @@ -1,4 +1,4 @@ --- Example MuGlyph Lua script. +-- Example SharpMUTerm Lua script. -- Loaded per-world; the sandbox exposes: world, output, trigger, alias, timer, gmcp, log. -- (No io/os.execute/require — scripting is sandboxed.) diff --git a/src/MuClient.Graphics/MuClient.Graphics.csproj b/src/MuClient.Graphics/MuClient.Graphics.csproj deleted file mode 100644 index 92d8357..0000000 --- a/src/MuClient.Graphics/MuClient.Graphics.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - MuClient.Graphics - MuClient.Graphics - - - - - - - diff --git a/src/MuClient.Scripting/MuClient.Scripting.csproj b/src/MuClient.Scripting/MuClient.Scripting.csproj deleted file mode 100644 index 5d1d62b..0000000 --- a/src/MuClient.Scripting/MuClient.Scripting.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - MuClient.Scripting - MuClient.Scripting - - - - - - - - - - - diff --git a/src/MuClient.Core/Automation/Alias.cs b/src/SharpMUTerm.Core/Automation/Alias.cs similarity index 96% rename from src/MuClient.Core/Automation/Alias.cs rename to src/SharpMUTerm.Core/Automation/Alias.cs index f45df92..d18639f 100644 --- a/src/MuClient.Core/Automation/Alias.cs +++ b/src/SharpMUTerm.Core/Automation/Alias.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using System.Text.RegularExpressions; -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// /// A command alias: when user input matches , it is expanded into one diff --git a/src/MuClient.Core/Automation/AliasEngine.cs b/src/SharpMUTerm.Core/Automation/AliasEngine.cs similarity index 98% rename from src/MuClient.Core/Automation/AliasEngine.cs rename to src/SharpMUTerm.Core/Automation/AliasEngine.cs index c75bc62..683258f 100644 --- a/src/MuClient.Core/Automation/AliasEngine.cs +++ b/src/SharpMUTerm.Core/Automation/AliasEngine.cs @@ -1,6 +1,6 @@ using System.Text.RegularExpressions; -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// The result of expanding a line of user input against the alias set. public sealed class AliasResult diff --git a/src/MuClient.Core/Automation/AutomationDefaults.cs b/src/SharpMUTerm.Core/Automation/AutomationDefaults.cs similarity index 91% rename from src/MuClient.Core/Automation/AutomationDefaults.cs rename to src/SharpMUTerm.Core/Automation/AutomationDefaults.cs index e889ba1..f7d770e 100644 --- a/src/MuClient.Core/Automation/AutomationDefaults.cs +++ b/src/SharpMUTerm.Core/Automation/AutomationDefaults.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// Shared defaults for the automation engines. public static class AutomationDefaults diff --git a/src/MuClient.Core/Automation/IntervalScheduler.cs b/src/SharpMUTerm.Core/Automation/IntervalScheduler.cs similarity index 98% rename from src/MuClient.Core/Automation/IntervalScheduler.cs rename to src/SharpMUTerm.Core/Automation/IntervalScheduler.cs index 68bf671..8195343 100644 --- a/src/MuClient.Core/Automation/IntervalScheduler.cs +++ b/src/SharpMUTerm.Core/Automation/IntervalScheduler.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// /// Schedules recurring and one-shot callbacks. Backs script timer.every/timer.after diff --git a/src/MuClient.Core/Automation/Macro.cs b/src/SharpMUTerm.Core/Automation/Macro.cs similarity index 97% rename from src/MuClient.Core/Automation/Macro.cs rename to src/SharpMUTerm.Core/Automation/Macro.cs index 686532d..a39cd26 100644 --- a/src/MuClient.Core/Automation/Macro.cs +++ b/src/SharpMUTerm.Core/Automation/Macro.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// /// A keybind: a normalised key descriptor (e.g. Ctrl+F1, Alt+k, F3) mapped diff --git a/src/MuClient.Core/Automation/MacroEngine.cs b/src/SharpMUTerm.Core/Automation/MacroEngine.cs similarity index 97% rename from src/MuClient.Core/Automation/MacroEngine.cs rename to src/SharpMUTerm.Core/Automation/MacroEngine.cs index 4636fb1..48b3b4a 100644 --- a/src/MuClient.Core/Automation/MacroEngine.cs +++ b/src/SharpMUTerm.Core/Automation/MacroEngine.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// Maps normalised key descriptors to bindings. public sealed class MacroEngine diff --git a/src/MuClient.Core/Automation/TimerDefinition.cs b/src/SharpMUTerm.Core/Automation/TimerDefinition.cs similarity index 88% rename from src/MuClient.Core/Automation/TimerDefinition.cs rename to src/SharpMUTerm.Core/Automation/TimerDefinition.cs index 2714705..e2d0dea 100644 --- a/src/MuClient.Core/Automation/TimerDefinition.cs +++ b/src/SharpMUTerm.Core/Automation/TimerDefinition.cs @@ -1,8 +1,8 @@ -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// /// A configured timer: fires a command (or script callback) on a fixed interval while its owning -/// is active for a session. The +/// is active for a session. The /// realises these at runtime; this is the persisted definition the /// F6 timers screen edits. /// diff --git a/src/MuClient.Core/Automation/Trigger.cs b/src/SharpMUTerm.Core/Automation/Trigger.cs similarity index 97% rename from src/MuClient.Core/Automation/Trigger.cs rename to src/SharpMUTerm.Core/Automation/Trigger.cs index 5d21edd..48a69d7 100644 --- a/src/MuClient.Core/Automation/Trigger.cs +++ b/src/SharpMUTerm.Core/Automation/Trigger.cs @@ -1,8 +1,8 @@ using System.Text.Json.Serialization; using System.Text.RegularExpressions; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// The typed actions a matched performs. public sealed class TriggerActions diff --git a/src/MuClient.Core/Automation/TriggerEngine.cs b/src/SharpMUTerm.Core/Automation/TriggerEngine.cs similarity index 98% rename from src/MuClient.Core/Automation/TriggerEngine.cs rename to src/SharpMUTerm.Core/Automation/TriggerEngine.cs index af6fcf9..8d3a41e 100644 --- a/src/MuClient.Core/Automation/TriggerEngine.cs +++ b/src/SharpMUTerm.Core/Automation/TriggerEngine.cs @@ -1,7 +1,7 @@ using System.Text.RegularExpressions; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Automation; +namespace SharpMUTerm.Core.Automation; /// A script callback requested by a matched trigger, with its capture groups. public sealed record TriggerScriptInvocation(string Callback, Match Match); diff --git a/src/MuClient.Core/Commands/CommandCatalog.cs b/src/SharpMUTerm.Core/Commands/CommandCatalog.cs similarity index 98% rename from src/MuClient.Core/Commands/CommandCatalog.cs rename to src/SharpMUTerm.Core/Commands/CommandCatalog.cs index 7cd1a0a..5ccb9d4 100644 --- a/src/MuClient.Core/Commands/CommandCatalog.cs +++ b/src/SharpMUTerm.Core/Commands/CommandCatalog.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Workspaces; +using SharpMUTerm.Core.Workspaces; -namespace MuClient.Core.Commands; +namespace SharpMUTerm.Core.Commands; /// A character the command surface can switch to, with enough detail to label the entry. public sealed record CharacterRef(string WorldName, string CharacterName, string SessionKey, bool Connected); diff --git a/src/MuClient.Core/Commands/CommandItem.cs b/src/SharpMUTerm.Core/Commands/CommandItem.cs similarity index 96% rename from src/MuClient.Core/Commands/CommandItem.cs rename to src/SharpMUTerm.Core/Commands/CommandItem.cs index 0a3e058..0aacd0d 100644 --- a/src/MuClient.Core/Commands/CommandItem.cs +++ b/src/SharpMUTerm.Core/Commands/CommandItem.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Commands; +namespace SharpMUTerm.Core.Commands; /// The section a is grouped under in the command surface (⌃P). public enum CommandGroup diff --git a/src/MuClient.Core/Commands/CommandMatcher.cs b/src/SharpMUTerm.Core/Commands/CommandMatcher.cs similarity index 99% rename from src/MuClient.Core/Commands/CommandMatcher.cs rename to src/SharpMUTerm.Core/Commands/CommandMatcher.cs index 8b3ef34..99ced66 100644 --- a/src/MuClient.Core/Commands/CommandMatcher.cs +++ b/src/SharpMUTerm.Core/Commands/CommandMatcher.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Commands; +namespace SharpMUTerm.Core.Commands; /// A paired with its match score for the current query. public readonly record struct RankedCommand(CommandItem Item, int Score); diff --git a/src/MuClient.Core/Configuration/AppConfiguration.cs b/src/SharpMUTerm.Core/Configuration/AppConfiguration.cs similarity index 93% rename from src/MuClient.Core/Configuration/AppConfiguration.cs rename to src/SharpMUTerm.Core/Configuration/AppConfiguration.cs index 64683e6..b9958c5 100644 --- a/src/MuClient.Core/Configuration/AppConfiguration.cs +++ b/src/SharpMUTerm.Core/Configuration/AppConfiguration.cs @@ -1,9 +1,9 @@ -using MuClient.Core.Theming; -using MuClient.Core.Workspaces; +using SharpMUTerm.Core.Theming; +using SharpMUTerm.Core.Workspaces; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; -/// Top-level MuGlyph configuration: global preferences, saved worlds, and shared trigger sets. +/// Top-level SharpMUTerm configuration: global preferences, saved worlds, and shared trigger sets. public sealed class AppConfiguration { /// The current on-disk schema version. Older configs are upgraded by . diff --git a/src/MuClient.Core/Configuration/CharacterDefinition.cs b/src/SharpMUTerm.Core/Configuration/CharacterDefinition.cs similarity index 98% rename from src/MuClient.Core/Configuration/CharacterDefinition.cs rename to src/SharpMUTerm.Core/Configuration/CharacterDefinition.cs index 2d63217..7c00b73 100644 --- a/src/MuClient.Core/Configuration/CharacterDefinition.cs +++ b/src/SharpMUTerm.Core/Configuration/CharacterDefinition.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// /// A character on a — the unit you actually connect *as*. A world diff --git a/src/MuClient.Core/Configuration/ConfigurationMigrator.cs b/src/SharpMUTerm.Core/Configuration/ConfigurationMigrator.cs similarity index 99% rename from src/MuClient.Core/Configuration/ConfigurationMigrator.cs rename to src/SharpMUTerm.Core/Configuration/ConfigurationMigrator.cs index 49a9ee5..9501b44 100644 --- a/src/MuClient.Core/Configuration/ConfigurationMigrator.cs +++ b/src/SharpMUTerm.Core/Configuration/ConfigurationMigrator.cs @@ -1,6 +1,6 @@ using System.Text.Json.Nodes; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// /// Upgrades an on-disk configuration DOM to . Runs diff --git a/src/MuClient.Core/Configuration/ConfigurationStore.cs b/src/SharpMUTerm.Core/Configuration/ConfigurationStore.cs similarity index 95% rename from src/MuClient.Core/Configuration/ConfigurationStore.cs rename to src/SharpMUTerm.Core/Configuration/ConfigurationStore.cs index 4182215..ceb254a 100644 --- a/src/MuClient.Core/Configuration/ConfigurationStore.cs +++ b/src/SharpMUTerm.Core/Configuration/ConfigurationStore.cs @@ -2,7 +2,7 @@ using System.Text.Json.Nodes; using System.Text.Json.Serialization; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// Loads and saves as JSON. public static class ConfigurationStore @@ -35,7 +35,7 @@ public static string DefaultPath baseDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config"); } - return Path.Combine(baseDir, "MuGlyph", "config.json"); + return Path.Combine(baseDir, "SharpMUTerm", "config.json"); } } diff --git a/src/MuClient.Core/Configuration/RgbJsonConverter.cs b/src/SharpMUTerm.Core/Configuration/RgbJsonConverter.cs similarity index 94% rename from src/MuClient.Core/Configuration/RgbJsonConverter.cs rename to src/SharpMUTerm.Core/Configuration/RgbJsonConverter.cs index aafaa4c..165e19d 100644 --- a/src/MuClient.Core/Configuration/RgbJsonConverter.cs +++ b/src/SharpMUTerm.Core/Configuration/RgbJsonConverter.cs @@ -1,8 +1,8 @@ using System.Text.Json; using System.Text.Json.Serialization; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// Serialises as a CSS-style hex string (#rrggbb). public sealed class RgbJsonConverter : JsonConverter diff --git a/src/MuClient.Core/Configuration/TerminalColorJsonConverter.cs b/src/SharpMUTerm.Core/Configuration/TerminalColorJsonConverter.cs similarity index 96% rename from src/MuClient.Core/Configuration/TerminalColorJsonConverter.cs rename to src/SharpMUTerm.Core/Configuration/TerminalColorJsonConverter.cs index 1443028..1f4899b 100644 --- a/src/MuClient.Core/Configuration/TerminalColorJsonConverter.cs +++ b/src/SharpMUTerm.Core/Configuration/TerminalColorJsonConverter.cs @@ -1,8 +1,8 @@ using System.Text.Json; using System.Text.Json.Serialization; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// /// Serialises as a compact string: default, idx:N, diff --git a/src/MuClient.Core/Configuration/TriggerSet.cs b/src/SharpMUTerm.Core/Configuration/TriggerSet.cs similarity index 92% rename from src/MuClient.Core/Configuration/TriggerSet.cs rename to src/SharpMUTerm.Core/Configuration/TriggerSet.cs index 26d6c44..a497a7a 100644 --- a/src/MuClient.Core/Configuration/TriggerSet.cs +++ b/src/SharpMUTerm.Core/Configuration/TriggerSet.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Automation; +using SharpMUTerm.Core.Automation; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// /// A named, world-independent bundle of automation. Characters select which sets apply by name, diff --git a/src/MuClient.Core/Configuration/WorldDefinition.cs b/src/SharpMUTerm.Core/Configuration/WorldDefinition.cs similarity index 96% rename from src/MuClient.Core/Configuration/WorldDefinition.cs rename to src/SharpMUTerm.Core/Configuration/WorldDefinition.cs index 73aa187..ce0d225 100644 --- a/src/MuClient.Core/Configuration/WorldDefinition.cs +++ b/src/SharpMUTerm.Core/Configuration/WorldDefinition.cs @@ -1,7 +1,7 @@ -using MuClient.Core.Text; -using MuClient.Core.Transport; +using SharpMUTerm.Core.Text; +using SharpMUTerm.Core.Transport; -namespace MuClient.Core.Configuration; +namespace SharpMUTerm.Core.Configuration; /// Which log formats a session writes. public enum LogFormat diff --git a/src/MuClient.Core/Input/InputHistory.cs b/src/SharpMUTerm.Core/Input/InputHistory.cs similarity index 99% rename from src/MuClient.Core/Input/InputHistory.cs rename to src/SharpMUTerm.Core/Input/InputHistory.cs index 1873eaf..6709716 100644 --- a/src/MuClient.Core/Input/InputHistory.cs +++ b/src/SharpMUTerm.Core/Input/InputHistory.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Input; +namespace SharpMUTerm.Core.Input; /// /// Draft-safe command history recall for a single input buffer. Modern MU*/shell input lines let diff --git a/src/MuClient.Core/Logging/HtmlLogSink.cs b/src/SharpMUTerm.Core/Logging/HtmlLogSink.cs similarity index 96% rename from src/MuClient.Core/Logging/HtmlLogSink.cs rename to src/SharpMUTerm.Core/Logging/HtmlLogSink.cs index 0e98df8..0b981fd 100644 --- a/src/MuClient.Core/Logging/HtmlLogSink.cs +++ b/src/SharpMUTerm.Core/Logging/HtmlLogSink.cs @@ -1,7 +1,7 @@ using System.Text; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Logging; +namespace SharpMUTerm.Core.Logging; /// /// Writes output as a self-contained HTML document, preserving colour and attributes via @@ -18,7 +18,7 @@ public sealed class HtmlLogSink : ILogSink private readonly object _gate = new(); private bool _closed; - public HtmlLogSink(TextWriter writer, string title = "MuGlyph session log", bool ownsWriter = true) + public HtmlLogSink(TextWriter writer, string title = "SharpMUTerm session log", bool ownsWriter = true) { _writer = writer ?? throw new ArgumentNullException(nameof(writer)); _ownsWriter = ownsWriter; @@ -26,7 +26,7 @@ public HtmlLogSink(TextWriter writer, string title = "MuGlyph session log", bool } /// Opens an HTML log file, creating parent directories as needed. - public static HtmlLogSink CreateFile(string path, string title = "MuGlyph session log") + public static HtmlLogSink CreateFile(string path, string title = "SharpMUTerm session log") { ArgumentException.ThrowIfNullOrEmpty(path); Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(path))!); diff --git a/src/MuClient.Core/Logging/ILogSink.cs b/src/SharpMUTerm.Core/Logging/ILogSink.cs similarity index 87% rename from src/MuClient.Core/Logging/ILogSink.cs rename to src/SharpMUTerm.Core/Logging/ILogSink.cs index 0537b03..723589e 100644 --- a/src/MuClient.Core/Logging/ILogSink.cs +++ b/src/SharpMUTerm.Core/Logging/ILogSink.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Logging; +namespace SharpMUTerm.Core.Logging; /// A destination for session output logging (plain text or HTML). public interface ILogSink : IDisposable diff --git a/src/MuClient.Core/Logging/PlainTextLogSink.cs b/src/SharpMUTerm.Core/Logging/PlainTextLogSink.cs similarity index 96% rename from src/MuClient.Core/Logging/PlainTextLogSink.cs rename to src/SharpMUTerm.Core/Logging/PlainTextLogSink.cs index 0fb6dff..4c9d7ac 100644 --- a/src/MuClient.Core/Logging/PlainTextLogSink.cs +++ b/src/SharpMUTerm.Core/Logging/PlainTextLogSink.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Logging; +namespace SharpMUTerm.Core.Logging; /// Writes plain, unstyled output lines to a . public sealed class PlainTextLogSink : ILogSink diff --git a/src/MuClient.Core/Protocols/MxpParser.cs b/src/SharpMUTerm.Core/Protocols/MxpParser.cs similarity index 99% rename from src/MuClient.Core/Protocols/MxpParser.cs rename to src/SharpMUTerm.Core/Protocols/MxpParser.cs index fd62aeb..0cc769c 100644 --- a/src/MuClient.Core/Protocols/MxpParser.cs +++ b/src/SharpMUTerm.Core/Protocols/MxpParser.cs @@ -1,8 +1,8 @@ using System.Globalization; using System.Text; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Protocols; +namespace SharpMUTerm.Core.Protocols; /// /// Incremental, stateful, line-oriented parser for the MUD eXtension Protocol (MXP). diff --git a/src/MuClient.Core/Protocols/PuebloParser.cs b/src/SharpMUTerm.Core/Protocols/PuebloParser.cs similarity index 99% rename from src/MuClient.Core/Protocols/PuebloParser.cs rename to src/SharpMUTerm.Core/Protocols/PuebloParser.cs index 6f08542..82a8954 100644 --- a/src/MuClient.Core/Protocols/PuebloParser.cs +++ b/src/SharpMUTerm.Core/Protocols/PuebloParser.cs @@ -1,7 +1,7 @@ using System.Text; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Protocols; +namespace SharpMUTerm.Core.Protocols; /// /// Incremental, line-oriented parser for Pueblo markup — the HTML subset spoken by some diff --git a/src/MuClient.Core/Session/SessionEvents.cs b/src/SharpMUTerm.Core/Session/SessionEvents.cs similarity index 91% rename from src/MuClient.Core/Session/SessionEvents.cs rename to src/SharpMUTerm.Core/Session/SessionEvents.cs index eced7cd..e8b106a 100644 --- a/src/MuClient.Core/Session/SessionEvents.cs +++ b/src/SharpMUTerm.Core/Session/SessionEvents.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Session; +namespace SharpMUTerm.Core.Session; /// The lifecycle state of a . public enum ConnectionState diff --git a/src/MuClient.Core/Session/SessionManager.cs b/src/SharpMUTerm.Core/Session/SessionManager.cs similarity index 97% rename from src/MuClient.Core/Session/SessionManager.cs rename to src/SharpMUTerm.Core/Session/SessionManager.cs index 41d6f11..9699ae7 100644 --- a/src/MuClient.Core/Session/SessionManager.cs +++ b/src/SharpMUTerm.Core/Session/SessionManager.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Configuration; +using SharpMUTerm.Core.Configuration; -namespace MuClient.Core.Session; +namespace SharpMUTerm.Core.Session; /// Manages the set of open world sessions (the tabbed multi-world model). public sealed class SessionManager : IAsyncDisposable diff --git a/src/MuClient.Core/Session/WorldSession.cs b/src/SharpMUTerm.Core/Session/WorldSession.cs similarity index 97% rename from src/MuClient.Core/Session/WorldSession.cs rename to src/SharpMUTerm.Core/Session/WorldSession.cs index 838468a..a3e0dc2 100644 --- a/src/MuClient.Core/Session/WorldSession.cs +++ b/src/SharpMUTerm.Core/Session/WorldSession.cs @@ -1,12 +1,12 @@ -using MuClient.Core.Automation; -using MuClient.Core.Configuration; -using MuClient.Core.Logging; -using MuClient.Core.Protocols; -using MuClient.Core.Telnet; -using MuClient.Core.Text; -using MuClient.Core.Transport; - -namespace MuClient.Core.Session; +using SharpMUTerm.Core.Automation; +using SharpMUTerm.Core.Configuration; +using SharpMUTerm.Core.Logging; +using SharpMUTerm.Core.Protocols; +using SharpMUTerm.Core.Telnet; +using SharpMUTerm.Core.Text; +using SharpMUTerm.Core.Transport; + +namespace SharpMUTerm.Core.Session; /// /// The runtime for a single connected world. Orchestrates the full pipeline: diff --git a/src/MuClient.Core/MuClient.Core.csproj b/src/SharpMUTerm.Core/SharpMUTerm.Core.csproj similarity index 70% rename from src/MuClient.Core/MuClient.Core.csproj rename to src/SharpMUTerm.Core/SharpMUTerm.Core.csproj index 54a2eb2..a4c8ebd 100644 --- a/src/MuClient.Core/MuClient.Core.csproj +++ b/src/SharpMUTerm.Core/SharpMUTerm.Core.csproj @@ -1,8 +1,8 @@ - MuClient.Core - MuClient.Core + SharpMUTerm.Core + SharpMUTerm.Core diff --git a/src/MuClient.Core/Telnet/ITelnetSession.cs b/src/SharpMUTerm.Core/Telnet/ITelnetSession.cs similarity index 98% rename from src/MuClient.Core/Telnet/ITelnetSession.cs rename to src/SharpMUTerm.Core/Telnet/ITelnetSession.cs index f48fcd6..cd49657 100644 --- a/src/MuClient.Core/Telnet/ITelnetSession.cs +++ b/src/SharpMUTerm.Core/Telnet/ITelnetSession.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Telnet; +namespace SharpMUTerm.Core.Telnet; /// /// A telnet session over a transport: option negotiation, charset decoding, prompt diff --git a/src/MuClient.Core/Telnet/MsspConfigReader.cs b/src/SharpMUTerm.Core/Telnet/MsspConfigReader.cs similarity index 98% rename from src/MuClient.Core/Telnet/MsspConfigReader.cs rename to src/SharpMUTerm.Core/Telnet/MsspConfigReader.cs index 756fd2e..024ffdb 100644 --- a/src/MuClient.Core/Telnet/MsspConfigReader.cs +++ b/src/SharpMUTerm.Core/Telnet/MsspConfigReader.cs @@ -2,7 +2,7 @@ using System.Reflection; using TelnetNegotiationCore.Models; -namespace MuClient.Core.Telnet; +namespace SharpMUTerm.Core.Telnet; /// /// Projects a into a flat string dictionary of the values the diff --git a/src/MuClient.Core/Telnet/TelnetEvents.cs b/src/SharpMUTerm.Core/Telnet/TelnetEvents.cs similarity index 97% rename from src/MuClient.Core/Telnet/TelnetEvents.cs rename to src/SharpMUTerm.Core/Telnet/TelnetEvents.cs index af29971..3ceb487 100644 --- a/src/MuClient.Core/Telnet/TelnetEvents.cs +++ b/src/SharpMUTerm.Core/Telnet/TelnetEvents.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Telnet; +namespace SharpMUTerm.Core.Telnet; /// A chunk of server output: a completed line, or an unterminated prompt. public sealed class TelnetOutputEventArgs(string text, bool isPrompt) : EventArgs diff --git a/src/MuClient.Core/Telnet/TelnetSession.cs b/src/SharpMUTerm.Core/Telnet/TelnetSession.cs similarity index 99% rename from src/MuClient.Core/Telnet/TelnetSession.cs rename to src/SharpMUTerm.Core/Telnet/TelnetSession.cs index 958d43e..032e0b2 100644 --- a/src/MuClient.Core/Telnet/TelnetSession.cs +++ b/src/SharpMUTerm.Core/Telnet/TelnetSession.cs @@ -2,12 +2,12 @@ using System.Text; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using MuClient.Core.Transport; +using SharpMUTerm.Core.Transport; using TelnetNegotiationCore.Builders; using TelnetNegotiationCore.Interpreters; using TelnetNegotiationCore.Models; -namespace MuClient.Core.Telnet; +namespace SharpMUTerm.Core.Telnet; /// Tuning knobs for a . public sealed class TelnetSessionOptions diff --git a/src/MuClient.Core/Text/AnsiPalette.cs b/src/SharpMUTerm.Core/Text/AnsiPalette.cs similarity index 98% rename from src/MuClient.Core/Text/AnsiPalette.cs rename to src/SharpMUTerm.Core/Text/AnsiPalette.cs index 83e5178..c64cb28 100644 --- a/src/MuClient.Core/Text/AnsiPalette.cs +++ b/src/SharpMUTerm.Core/Text/AnsiPalette.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// An 8-bit-per-channel RGB triple. public readonly record struct Rgb(byte R, byte G, byte B) diff --git a/src/MuClient.Core/Text/AnsiParser.cs b/src/SharpMUTerm.Core/Text/AnsiParser.cs similarity index 99% rename from src/MuClient.Core/Text/AnsiParser.cs rename to src/SharpMUTerm.Core/Text/AnsiParser.cs index a228258..9c8f2d2 100644 --- a/src/MuClient.Core/Text/AnsiParser.cs +++ b/src/SharpMUTerm.Core/Text/AnsiParser.cs @@ -1,6 +1,6 @@ using System.Text; -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// Incremental, line-oriented ANSI/VT parser. Feed it decoded text (any number of diff --git a/src/MuClient.Core/Text/EmojiSubstitutor.cs b/src/SharpMUTerm.Core/Text/EmojiSubstitutor.cs similarity index 99% rename from src/MuClient.Core/Text/EmojiSubstitutor.cs rename to src/SharpMUTerm.Core/Text/EmojiSubstitutor.cs index badf449..f6e488d 100644 --- a/src/MuClient.Core/Text/EmojiSubstitutor.cs +++ b/src/SharpMUTerm.Core/Text/EmojiSubstitutor.cs @@ -1,6 +1,6 @@ using System.Text; -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// Substitutes text emoticons (:) → 🙂) and :shortcode: names (:fire: → 🔥) diff --git a/src/MuClient.Core/Text/ILineParser.cs b/src/SharpMUTerm.Core/Text/ILineParser.cs similarity index 96% rename from src/MuClient.Core/Text/ILineParser.cs rename to src/SharpMUTerm.Core/Text/ILineParser.cs index 287b064..e0d2224 100644 --- a/src/MuClient.Core/Text/ILineParser.cs +++ b/src/SharpMUTerm.Core/Text/ILineParser.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// An incremental, line-oriented parser that turns decoded server text into styled lines. diff --git a/src/MuClient.Core/Text/Meters.cs b/src/SharpMUTerm.Core/Text/Meters.cs similarity index 98% rename from src/MuClient.Core/Text/Meters.cs rename to src/SharpMUTerm.Core/Text/Meters.cs index be30e83..33e840b 100644 --- a/src/MuClient.Core/Text/Meters.cs +++ b/src/SharpMUTerm.Core/Text/Meters.cs @@ -1,6 +1,6 @@ using System.Text; -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// Text meters for the status bar: a filled/empty bar (████░░░░) and a Unicode block diff --git a/src/MuClient.Core/Text/ScrollbackBuffer.cs b/src/SharpMUTerm.Core/Text/ScrollbackBuffer.cs similarity index 99% rename from src/MuClient.Core/Text/ScrollbackBuffer.cs rename to src/SharpMUTerm.Core/Text/ScrollbackBuffer.cs index 666b22d..499fa77 100644 --- a/src/MuClient.Core/Text/ScrollbackBuffer.cs +++ b/src/SharpMUTerm.Core/Text/ScrollbackBuffer.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// Event payload describing lines appended to a . public sealed class LinesAppendedEventArgs(IReadOnlyList lines) : EventArgs diff --git a/src/MuClient.Core/Text/SpanInteraction.cs b/src/SharpMUTerm.Core/Text/SpanInteraction.cs similarity index 97% rename from src/MuClient.Core/Text/SpanInteraction.cs rename to src/SharpMUTerm.Core/Text/SpanInteraction.cs index f17624f..894b5d9 100644 --- a/src/MuClient.Core/Text/SpanInteraction.cs +++ b/src/SharpMUTerm.Core/Text/SpanInteraction.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// What activating an interactive span does. public enum InteractionKind diff --git a/src/MuClient.Core/Text/StatusFormatter.cs b/src/SharpMUTerm.Core/Text/StatusFormatter.cs similarity index 97% rename from src/MuClient.Core/Text/StatusFormatter.cs rename to src/SharpMUTerm.Core/Text/StatusFormatter.cs index 3ec590c..cef1308 100644 --- a/src/MuClient.Core/Text/StatusFormatter.cs +++ b/src/SharpMUTerm.Core/Text/StatusFormatter.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// Builds the design's input-prompt string and its right-hand gutter (destination window + other diff --git a/src/MuClient.Core/Text/StyledLine.cs b/src/SharpMUTerm.Core/Text/StyledLine.cs similarity index 98% rename from src/MuClient.Core/Text/StyledLine.cs rename to src/SharpMUTerm.Core/Text/StyledLine.cs index a53865b..eb89d4f 100644 --- a/src/MuClient.Core/Text/StyledLine.cs +++ b/src/SharpMUTerm.Core/Text/StyledLine.cs @@ -1,6 +1,6 @@ using System.Text; -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// A single logical line of terminal output: an ordered list of s diff --git a/src/MuClient.Core/Text/StyledSpan.cs b/src/SharpMUTerm.Core/Text/StyledSpan.cs similarity index 97% rename from src/MuClient.Core/Text/StyledSpan.cs rename to src/SharpMUTerm.Core/Text/StyledSpan.cs index 9653a23..45b5418 100644 --- a/src/MuClient.Core/Text/StyledSpan.cs +++ b/src/SharpMUTerm.Core/Text/StyledSpan.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// A run of text sharing a single , optionally interactive. public readonly struct StyledSpan : IEquatable diff --git a/src/MuClient.Core/Text/StyledText.cs b/src/SharpMUTerm.Core/Text/StyledText.cs similarity index 98% rename from src/MuClient.Core/Text/StyledText.cs rename to src/SharpMUTerm.Core/Text/StyledText.cs index 8ffe4f0..2aa3480 100644 --- a/src/MuClient.Core/Text/StyledText.cs +++ b/src/SharpMUTerm.Core/Text/StyledText.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// Helpers for transforming s at character granularity. public static class StyledText diff --git a/src/MuClient.Core/Text/TerminalColor.cs b/src/SharpMUTerm.Core/Text/TerminalColor.cs similarity index 99% rename from src/MuClient.Core/Text/TerminalColor.cs rename to src/SharpMUTerm.Core/Text/TerminalColor.cs index 5e7cb73..ccbcedd 100644 --- a/src/MuClient.Core/Text/TerminalColor.cs +++ b/src/SharpMUTerm.Core/Text/TerminalColor.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// How a value should be interpreted. public enum TerminalColorKind : byte diff --git a/src/MuClient.Core/Text/TextStyle.cs b/src/SharpMUTerm.Core/Text/TextStyle.cs similarity index 98% rename from src/MuClient.Core/Text/TextStyle.cs rename to src/SharpMUTerm.Core/Text/TextStyle.cs index 6253426..fcd64a0 100644 --- a/src/MuClient.Core/Text/TextStyle.cs +++ b/src/SharpMUTerm.Core/Text/TextStyle.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// Non-colour text rendition attributes carried by an SGR sequence. [Flags] diff --git a/src/MuClient.Core/Text/WebColors.cs b/src/SharpMUTerm.Core/Text/WebColors.cs similarity index 98% rename from src/MuClient.Core/Text/WebColors.cs rename to src/SharpMUTerm.Core/Text/WebColors.cs index c206d5a..9ceea19 100644 --- a/src/MuClient.Core/Text/WebColors.cs +++ b/src/SharpMUTerm.Core/Text/WebColors.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Text; +namespace SharpMUTerm.Core.Text; /// /// Resolves the named colours used by MXP and Pueblo markup (a subset of CSS/HTML colour names, diff --git a/src/MuClient.Core/Theming/Theme.cs b/src/SharpMUTerm.Core/Theming/Theme.cs similarity index 97% rename from src/MuClient.Core/Theming/Theme.cs rename to src/SharpMUTerm.Core/Theming/Theme.cs index 2303d22..154b5df 100644 --- a/src/MuClient.Core/Theming/Theme.cs +++ b/src/SharpMUTerm.Core/Theming/Theme.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Theming; +namespace SharpMUTerm.Core.Theming; /// /// A colour theme: semantic UI colours plus an optional override of the 16 base ANSI palette diff --git a/src/MuClient.Core/Theming/ThemeLibrary.cs b/src/SharpMUTerm.Core/Theming/ThemeLibrary.cs similarity index 97% rename from src/MuClient.Core/Theming/ThemeLibrary.cs rename to src/SharpMUTerm.Core/Theming/ThemeLibrary.cs index 01bc7e2..3359d4e 100644 --- a/src/MuClient.Core/Theming/ThemeLibrary.cs +++ b/src/SharpMUTerm.Core/Theming/ThemeLibrary.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Theming; +namespace SharpMUTerm.Core.Theming; /// Built-in themes and lookup by name (yazi-style named flavours). public static class ThemeLibrary diff --git a/src/MuClient.Core/Transport/ConnectionOptions.cs b/src/SharpMUTerm.Core/Transport/ConnectionOptions.cs similarity index 96% rename from src/MuClient.Core/Transport/ConnectionOptions.cs rename to src/SharpMUTerm.Core/Transport/ConnectionOptions.cs index 6597a63..3e5181b 100644 --- a/src/MuClient.Core/Transport/ConnectionOptions.cs +++ b/src/SharpMUTerm.Core/Transport/ConnectionOptions.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Transport; +namespace SharpMUTerm.Core.Transport; /// Immutable connection parameters for a single MU* world. public sealed class ConnectionOptions diff --git a/src/MuClient.Core/Transport/ITransport.cs b/src/SharpMUTerm.Core/Transport/ITransport.cs similarity index 96% rename from src/MuClient.Core/Transport/ITransport.cs rename to src/SharpMUTerm.Core/Transport/ITransport.cs index 6112c0d..a8ac445 100644 --- a/src/MuClient.Core/Transport/ITransport.cs +++ b/src/SharpMUTerm.Core/Transport/ITransport.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Transport; +namespace SharpMUTerm.Core.Transport; /// /// A bidirectional byte transport (TCP, optionally TLS). Kept deliberately minimal so it diff --git a/src/MuClient.Core/Transport/TcpTransport.cs b/src/SharpMUTerm.Core/Transport/TcpTransport.cs similarity index 99% rename from src/MuClient.Core/Transport/TcpTransport.cs rename to src/SharpMUTerm.Core/Transport/TcpTransport.cs index b14f3e1..8ae2ed0 100644 --- a/src/MuClient.Core/Transport/TcpTransport.cs +++ b/src/SharpMUTerm.Core/Transport/TcpTransport.cs @@ -3,7 +3,7 @@ using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; -namespace MuClient.Core.Transport; +namespace SharpMUTerm.Core.Transport; /// /// A TCP transport with optional TLS. DNS resolution via makes it diff --git a/src/MuClient.Core/Workspace/DropZones.cs b/src/SharpMUTerm.Core/Workspace/DropZones.cs similarity index 98% rename from src/MuClient.Core/Workspace/DropZones.cs rename to src/SharpMUTerm.Core/Workspace/DropZones.cs index 1972726..decdf34 100644 --- a/src/MuClient.Core/Workspace/DropZones.cs +++ b/src/SharpMUTerm.Core/Workspace/DropZones.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// /// Resolves where a dragged tab or rail window should land when dropped on a pane: in the middle to diff --git a/src/MuClient.Core/Workspace/LayoutNode.cs b/src/SharpMUTerm.Core/Workspace/LayoutNode.cs similarity index 99% rename from src/MuClient.Core/Workspace/LayoutNode.cs rename to src/SharpMUTerm.Core/Workspace/LayoutNode.cs index e2e747f..2a72fee 100644 --- a/src/MuClient.Core/Workspace/LayoutNode.cs +++ b/src/SharpMUTerm.Core/Workspace/LayoutNode.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// How a arranges its children. public enum SplitDirection diff --git a/src/MuClient.Core/Workspace/LayoutSolver.cs b/src/SharpMUTerm.Core/Workspace/LayoutSolver.cs similarity index 98% rename from src/MuClient.Core/Workspace/LayoutSolver.cs rename to src/SharpMUTerm.Core/Workspace/LayoutSolver.cs index db60051..f03a02e 100644 --- a/src/MuClient.Core/Workspace/LayoutSolver.cs +++ b/src/SharpMUTerm.Core/Workspace/LayoutSolver.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// An integer cell rectangle in the terminal grid (top-left origin). public readonly record struct PaneRect(int X, int Y, int Width, int Height) diff --git a/src/MuClient.Core/Workspace/PaneCommands.cs b/src/SharpMUTerm.Core/Workspace/PaneCommands.cs similarity index 98% rename from src/MuClient.Core/Workspace/PaneCommands.cs rename to src/SharpMUTerm.Core/Workspace/PaneCommands.cs index b46cf1a..ae56989 100644 --- a/src/MuClient.Core/Workspace/PaneCommands.cs +++ b/src/SharpMUTerm.Core/Workspace/PaneCommands.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// A tmux-style pane command, triggered by a key after the ⌃B prefix. public enum PaneCommand diff --git a/src/MuClient.Core/Workspace/Workspace.cs b/src/SharpMUTerm.Core/Workspace/Workspace.cs similarity index 99% rename from src/MuClient.Core/Workspace/Workspace.cs rename to src/SharpMUTerm.Core/Workspace/Workspace.cs index b32ceef..5256380 100644 --- a/src/MuClient.Core/Workspace/Workspace.cs +++ b/src/SharpMUTerm.Core/Workspace/Workspace.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// /// The full workspace state the TUI shell drives: the pane tree plus diff --git a/src/MuClient.Core/Workspace/WorkspaceLayout.cs b/src/SharpMUTerm.Core/Workspace/WorkspaceLayout.cs similarity index 99% rename from src/MuClient.Core/Workspace/WorkspaceLayout.cs rename to src/SharpMUTerm.Core/Workspace/WorkspaceLayout.cs index f1ed86a..3aada18 100644 --- a/src/MuClient.Core/Workspace/WorkspaceLayout.cs +++ b/src/SharpMUTerm.Core/Workspace/WorkspaceLayout.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// /// The pure, UI-agnostic model of a tmux-style pane workspace: a recursive split tree of panes, diff --git a/src/MuClient.Core/Workspace/WorkspaceState.cs b/src/SharpMUTerm.Core/Workspace/WorkspaceState.cs similarity index 99% rename from src/MuClient.Core/Workspace/WorkspaceState.cs rename to src/SharpMUTerm.Core/Workspace/WorkspaceState.cs index e3f8c40..8707450 100644 --- a/src/MuClient.Core/Workspace/WorkspaceState.cs +++ b/src/SharpMUTerm.Core/Workspace/WorkspaceState.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// Serialisable snapshot of one window's identity/metadata (not its scrollback). public sealed class WorkspaceWindowState diff --git a/src/MuClient.Core/Workspace/WorkspaceWindow.cs b/src/SharpMUTerm.Core/Workspace/WorkspaceWindow.cs similarity index 98% rename from src/MuClient.Core/Workspace/WorkspaceWindow.cs rename to src/SharpMUTerm.Core/Workspace/WorkspaceWindow.cs index 6bad677..420efaf 100644 --- a/src/MuClient.Core/Workspace/WorkspaceWindow.cs +++ b/src/SharpMUTerm.Core/Workspace/WorkspaceWindow.cs @@ -1,4 +1,4 @@ -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// What a window shows, used for rail grouping and routing rules. public enum WindowKind diff --git a/src/MuClient.Core/Workspaces/RailModel.cs b/src/SharpMUTerm.Core/Workspaces/RailModel.cs similarity index 98% rename from src/MuClient.Core/Workspaces/RailModel.cs rename to src/SharpMUTerm.Core/Workspaces/RailModel.cs index 322ff21..3d79f10 100644 --- a/src/MuClient.Core/Workspaces/RailModel.cs +++ b/src/SharpMUTerm.Core/Workspaces/RailModel.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Core.Workspaces; +namespace SharpMUTerm.Core.Workspaces; /// What a represents in the connection rail. public enum RailRowKind diff --git a/src/MuClient.Graphics/CapabilityProbe.cs b/src/SharpMUTerm.Graphics/CapabilityProbe.cs similarity index 96% rename from src/MuClient.Graphics/CapabilityProbe.cs rename to src/SharpMUTerm.Graphics/CapabilityProbe.cs index 4c8db87..20ab3b9 100644 --- a/src/MuClient.Graphics/CapabilityProbe.cs +++ b/src/SharpMUTerm.Graphics/CapabilityProbe.cs @@ -1,6 +1,6 @@ using System.Collections; -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// /// Detects the best available inline-graphics protocol from environment variables. @@ -13,7 +13,7 @@ namespace MuClient.Graphics; public static class CapabilityProbe { /// Explicit override: forces a specific protocol regardless of heuristics. - public const string OverrideVariable = "MUGLYPH_GRAPHICS"; + public const string OverrideVariable = "SHARPMUTERM_GRAPHICS"; // Terminals known to speak Sixel that do not otherwise advertise it via TERM. private static readonly string[] KnownSixelTermPrograms = @@ -49,7 +49,7 @@ public static TerminalCapabilities Detect(IReadOnlyDictionary e var supportsSixel = Contains(term, "sixel") || - Equals(Get(environment, "MUGLYPH_SIXEL"), "1") || + Equals(Get(environment, "SHARPMUTERM_SIXEL"), "1") || IsKnownSixelProgram(termProgram); // An explicit override wins over everything, but we still report the individual diff --git a/src/MuClient.Graphics/GraphicsProtocol.cs b/src/SharpMUTerm.Graphics/GraphicsProtocol.cs similarity index 95% rename from src/MuClient.Graphics/GraphicsProtocol.cs rename to src/SharpMUTerm.Graphics/GraphicsProtocol.cs index 7891629..b2f1584 100644 --- a/src/MuClient.Graphics/GraphicsProtocol.cs +++ b/src/SharpMUTerm.Graphics/GraphicsProtocol.cs @@ -1,4 +1,4 @@ -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// /// An inline-graphics transport, ordered by ascending capability. A renderer should diff --git a/src/MuClient.Graphics/HalfBlockRenderer.cs b/src/SharpMUTerm.Graphics/HalfBlockRenderer.cs similarity index 98% rename from src/MuClient.Graphics/HalfBlockRenderer.cs rename to src/SharpMUTerm.Graphics/HalfBlockRenderer.cs index 6739989..82e4752 100644 --- a/src/MuClient.Graphics/HalfBlockRenderer.cs +++ b/src/SharpMUTerm.Graphics/HalfBlockRenderer.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// /// Renders an to styled text using the upper-half-block glyph diff --git a/src/MuClient.Graphics/IImageSource.cs b/src/SharpMUTerm.Graphics/IImageSource.cs similarity index 98% rename from src/MuClient.Graphics/IImageSource.cs rename to src/SharpMUTerm.Graphics/IImageSource.cs index 9137422..d2f92ae 100644 --- a/src/MuClient.Graphics/IImageSource.cs +++ b/src/SharpMUTerm.Graphics/IImageSource.cs @@ -1,4 +1,4 @@ -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// /// A 32-bit non-premultiplied RGBA pixel. Keeps the graphics subsystem free of any diff --git a/src/MuClient.Graphics/InlineImage.cs b/src/SharpMUTerm.Graphics/InlineImage.cs similarity index 98% rename from src/MuClient.Graphics/InlineImage.cs rename to src/SharpMUTerm.Graphics/InlineImage.cs index ff20d80..c474863 100644 --- a/src/MuClient.Graphics/InlineImage.cs +++ b/src/SharpMUTerm.Graphics/InlineImage.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// How an should be consumed by the renderer. public enum InlineImageKind diff --git a/src/MuClient.Graphics/KittyGraphicsProtocol.cs b/src/SharpMUTerm.Graphics/KittyGraphicsProtocol.cs similarity index 99% rename from src/MuClient.Graphics/KittyGraphicsProtocol.cs rename to src/SharpMUTerm.Graphics/KittyGraphicsProtocol.cs index e4b7aaa..a1f8674 100644 --- a/src/MuClient.Graphics/KittyGraphicsProtocol.cs +++ b/src/SharpMUTerm.Graphics/KittyGraphicsProtocol.cs @@ -1,7 +1,7 @@ using System.Text; -using MuClient.Core.Text; +using SharpMUTerm.Core.Text; -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// Pixel format of a payload handed to the Kitty encoder. public enum KittyImageFormat diff --git a/src/SharpMUTerm.Graphics/SharpMUTerm.Graphics.csproj b/src/SharpMUTerm.Graphics/SharpMUTerm.Graphics.csproj new file mode 100644 index 0000000..5b7f666 --- /dev/null +++ b/src/SharpMUTerm.Graphics/SharpMUTerm.Graphics.csproj @@ -0,0 +1,12 @@ + + + + SharpMUTerm.Graphics + SharpMUTerm.Graphics + + + + + + + diff --git a/src/MuClient.Graphics/SixelEncoder.cs b/src/SharpMUTerm.Graphics/SixelEncoder.cs similarity index 99% rename from src/MuClient.Graphics/SixelEncoder.cs rename to src/SharpMUTerm.Graphics/SixelEncoder.cs index 697ce73..8204348 100644 --- a/src/MuClient.Graphics/SixelEncoder.cs +++ b/src/SharpMUTerm.Graphics/SixelEncoder.cs @@ -1,6 +1,6 @@ using System.Text; -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// /// Encodes an to a DEC Sixel data string diff --git a/src/MuClient.Graphics/TerminalCapabilities.cs b/src/SharpMUTerm.Graphics/TerminalCapabilities.cs similarity index 97% rename from src/MuClient.Graphics/TerminalCapabilities.cs rename to src/SharpMUTerm.Graphics/TerminalCapabilities.cs index 76bde78..65ac161 100644 --- a/src/MuClient.Graphics/TerminalCapabilities.cs +++ b/src/SharpMUTerm.Graphics/TerminalCapabilities.cs @@ -1,4 +1,4 @@ -namespace MuClient.Graphics; +namespace SharpMUTerm.Graphics; /// /// An immutable snapshot of what the host terminal can display. Produced by diff --git a/src/MuClient.Scripting/IScriptWorld.cs b/src/SharpMUTerm.Scripting/IScriptWorld.cs similarity index 92% rename from src/MuClient.Scripting/IScriptWorld.cs rename to src/SharpMUTerm.Scripting/IScriptWorld.cs index a15b161..514cb80 100644 --- a/src/MuClient.Scripting/IScriptWorld.cs +++ b/src/SharpMUTerm.Scripting/IScriptWorld.cs @@ -1,9 +1,9 @@ -namespace MuClient.Scripting; +namespace SharpMUTerm.Scripting; /// /// The narrow surface a uses to talk to a world. Abstracted so the host /// can be unit-tested without a live connection: production wires it to a real -/// MuClient.Core.Session.WorldSession via , while +/// SharpMUTerm.Core.Session.WorldSession via , while /// tests supply a fake that captures the calls. /// public interface IScriptWorld diff --git a/src/MuClient.Scripting/ScriptException.cs b/src/SharpMUTerm.Scripting/ScriptException.cs similarity index 98% rename from src/MuClient.Scripting/ScriptException.cs rename to src/SharpMUTerm.Scripting/ScriptException.cs index df12cf9..c2f1f49 100644 --- a/src/MuClient.Scripting/ScriptException.cs +++ b/src/SharpMUTerm.Scripting/ScriptException.cs @@ -1,6 +1,6 @@ using MoonSharp.Interpreter; -namespace MuClient.Scripting; +namespace SharpMUTerm.Scripting; /// /// A clean, MoonSharp-free error surfaced by the scripting layer. Wraps the underlying Lua diff --git a/src/MuClient.Scripting/ScriptHost.cs b/src/SharpMUTerm.Scripting/ScriptHost.cs similarity index 99% rename from src/MuClient.Scripting/ScriptHost.cs rename to src/SharpMUTerm.Scripting/ScriptHost.cs index be54ca9..5de5351 100644 --- a/src/MuClient.Scripting/ScriptHost.cs +++ b/src/SharpMUTerm.Scripting/ScriptHost.cs @@ -2,7 +2,7 @@ using System.Text; using MoonSharp.Interpreter; -namespace MuClient.Scripting; +namespace SharpMUTerm.Scripting; /// /// Hosts a single sandboxed Lua environment for a world and bridges it to an diff --git a/src/SharpMUTerm.Scripting/SharpMUTerm.Scripting.csproj b/src/SharpMUTerm.Scripting/SharpMUTerm.Scripting.csproj new file mode 100644 index 0000000..cd8a111 --- /dev/null +++ b/src/SharpMUTerm.Scripting/SharpMUTerm.Scripting.csproj @@ -0,0 +1,16 @@ + + + + SharpMUTerm.Scripting + SharpMUTerm.Scripting + + + + + + + + + + + diff --git a/src/MuClient.Scripting/WorldSessionScriptBridge.cs b/src/SharpMUTerm.Scripting/WorldSessionScriptBridge.cs similarity index 96% rename from src/MuClient.Scripting/WorldSessionScriptBridge.cs rename to src/SharpMUTerm.Scripting/WorldSessionScriptBridge.cs index 6f8186d..835e28e 100644 --- a/src/MuClient.Scripting/WorldSessionScriptBridge.cs +++ b/src/SharpMUTerm.Scripting/WorldSessionScriptBridge.cs @@ -1,8 +1,8 @@ -using MuClient.Core.Automation; -using MuClient.Core.Session; -using MuClient.Core.Telnet; +using SharpMUTerm.Core.Automation; +using SharpMUTerm.Core.Session; +using SharpMUTerm.Core.Telnet; -namespace MuClient.Scripting; +namespace SharpMUTerm.Scripting; /// /// Adapts a live to and pumps the session's diff --git a/src/MuClient.Tui/AliasesScreenRenderer.cs b/src/SharpMUTerm.Tui/AliasesScreenRenderer.cs similarity index 97% rename from src/MuClient.Tui/AliasesScreenRenderer.cs rename to src/SharpMUTerm.Tui/AliasesScreenRenderer.cs index 0986011..a41f884 100644 --- a/src/MuClient.Tui/AliasesScreenRenderer.cs +++ b/src/SharpMUTerm.Tui/AliasesScreenRenderer.cs @@ -1,7 +1,7 @@ -using MuClient.Core.Automation; -using MuClient.Core.Configuration; +using SharpMUTerm.Core.Automation; +using SharpMUTerm.Core.Configuration; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders the F3 aliases screen: a flattened list of aliases across all trigger sets on the left, diff --git a/src/MuClient.Tui/CaptureLineRenderer.cs b/src/SharpMUTerm.Tui/CaptureLineRenderer.cs similarity index 95% rename from src/MuClient.Tui/CaptureLineRenderer.cs rename to src/SharpMUTerm.Tui/CaptureLineRenderer.cs index 5dbf9fa..0ddbff4 100644 --- a/src/MuClient.Tui/CaptureLineRenderer.cs +++ b/src/SharpMUTerm.Tui/CaptureLineRenderer.cs @@ -1,4 +1,4 @@ -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders a spawn window's capture line — the dim ⇱ capture ^\[public\] row shown under the diff --git a/src/MuClient.Tui/CommandPalette.cs b/src/SharpMUTerm.Tui/CommandPalette.cs similarity index 98% rename from src/MuClient.Tui/CommandPalette.cs rename to src/SharpMUTerm.Tui/CommandPalette.cs index b63bdb7..bff80d9 100644 --- a/src/MuClient.Tui/CommandPalette.cs +++ b/src/SharpMUTerm.Tui/CommandPalette.cs @@ -1,9 +1,9 @@ -using MuClient.Core.Commands; +using SharpMUTerm.Core.Commands; using SharpConsoleUI; using SharpConsoleUI.Builders; using SharpConsoleUI.Controls; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// The command surface (⌃P): a modal search box over a live-generated catalog, ranked with diff --git a/src/MuClient.Tui/CommandSurfaceRenderer.cs b/src/SharpMUTerm.Tui/CommandSurfaceRenderer.cs similarity index 98% rename from src/MuClient.Tui/CommandSurfaceRenderer.cs rename to src/SharpMUTerm.Tui/CommandSurfaceRenderer.cs index 8c0322d..9fd7707 100644 --- a/src/MuClient.Tui/CommandSurfaceRenderer.cs +++ b/src/SharpMUTerm.Tui/CommandSurfaceRenderer.cs @@ -1,7 +1,7 @@ using System.Text; -using MuClient.Core.Commands; +using SharpMUTerm.Core.Commands; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders the command surface (⌃P) results to markup lines, grouped GO TO / WORLD / TERMINAL / diff --git a/src/MuClient.Tui/DemoScene.cs b/src/SharpMUTerm.Tui/DemoScene.cs similarity index 95% rename from src/MuClient.Tui/DemoScene.cs rename to src/SharpMUTerm.Tui/DemoScene.cs index 4632e3f..ad6cc52 100644 --- a/src/MuClient.Tui/DemoScene.cs +++ b/src/SharpMUTerm.Tui/DemoScene.cs @@ -1,9 +1,9 @@ -using MuClient.Core.Automation; -using MuClient.Core.Configuration; -using MuClient.Core.Text; -using MuClient.Core.Workspaces; +using SharpMUTerm.Core.Automation; +using SharpMUTerm.Core.Configuration; +using SharpMUTerm.Core.Text; +using SharpMUTerm.Core.Workspaces; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Builds the configuration behind the headless demo/snapshots. Rather than assembling windows and @@ -36,7 +36,7 @@ private static void AddWorlds(AppConfiguration config) UseTls = true, Encoding = "UTF-8", KeepaliveSeconds = 30, - Accent = MuGlyphApp.AccentPalette[0], + Accent = SharpMUTermApp.AccentPalette[0], Characters = { new CharacterDefinition @@ -57,7 +57,7 @@ private static void AddWorlds(AppConfiguration config) Host = "grapevine.haus", Port = 4000, Encoding = "ISO-8859-1", - Accent = MuGlyphApp.AccentPalette[1], + Accent = SharpMUTermApp.AccentPalette[1], Characters = { new CharacterDefinition { Name = "Thistle" } }, }); } diff --git a/src/MuClient.Tui/FreezeBarRenderer.cs b/src/SharpMUTerm.Tui/FreezeBarRenderer.cs similarity index 97% rename from src/MuClient.Tui/FreezeBarRenderer.cs rename to src/SharpMUTerm.Tui/FreezeBarRenderer.cs index f7cfc7c..735e904 100644 --- a/src/MuClient.Tui/FreezeBarRenderer.cs +++ b/src/SharpMUTerm.Tui/FreezeBarRenderer.cs @@ -1,4 +1,4 @@ -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders the freeze split bar (▲ FROZEN ⌃F) that divides a frozen pane's pinned scrollback diff --git a/src/MuClient.Tui/Glyphs.cs b/src/SharpMUTerm.Tui/Glyphs.cs similarity index 92% rename from src/MuClient.Tui/Glyphs.cs rename to src/SharpMUTerm.Tui/Glyphs.cs index 2e4854e..1734dae 100644 --- a/src/MuClient.Tui/Glyphs.cs +++ b/src/SharpMUTerm.Tui/Glyphs.cs @@ -1,7 +1,7 @@ -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// -/// Centralised Nerd Font (v3) icon glyphs for MuGlyph's chrome. The terminals MuGlyph targets +/// Centralised Nerd Font (v3) icon glyphs for SharpMUTerm's chrome. The terminals SharpMUTerm targets /// (Kitty, WezTerm, Ghostty) are routinely run with Nerd Font builds, so these icons render as /// crisp symbols there; on a plain font they degrade to a "tofu" box. Keeping them in one place /// means a future MTTS-driven fallback to plain geometric glyphs is a single-file change rather diff --git a/src/MuClient.Tui/GmcpStats.cs b/src/SharpMUTerm.Tui/GmcpStats.cs similarity index 99% rename from src/MuClient.Tui/GmcpStats.cs rename to src/SharpMUTerm.Tui/GmcpStats.cs index 70b824a..0141c18 100644 --- a/src/MuClient.Tui/GmcpStats.cs +++ b/src/SharpMUTerm.Tui/GmcpStats.cs @@ -1,7 +1,7 @@ using System.Text; using System.Text.Json; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Accumulates GMCP character stats (e.g. Char.Vitals, Char.Stats) into a flat diff --git a/src/MuClient.Tui/KeypadScreenRenderer.cs b/src/SharpMUTerm.Tui/KeypadScreenRenderer.cs similarity index 97% rename from src/MuClient.Tui/KeypadScreenRenderer.cs rename to src/SharpMUTerm.Tui/KeypadScreenRenderer.cs index 8969ffa..26ca25b 100644 --- a/src/MuClient.Tui/KeypadScreenRenderer.cs +++ b/src/SharpMUTerm.Tui/KeypadScreenRenderer.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Automation; +using SharpMUTerm.Core.Automation; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders the F4 keypad & hotkeys screen: a 3×3 numpad grid (Num7..Num9 top row through diff --git a/src/MuClient.Tui/MarkupFormatter.cs b/src/SharpMUTerm.Tui/MarkupFormatter.cs similarity index 96% rename from src/MuClient.Tui/MarkupFormatter.cs rename to src/SharpMUTerm.Tui/MarkupFormatter.cs index 021daf0..4e38634 100644 --- a/src/MuClient.Tui/MarkupFormatter.cs +++ b/src/SharpMUTerm.Tui/MarkupFormatter.cs @@ -1,11 +1,11 @@ using System.Text; -using MuClient.Core.Text; -using MuClient.Core.Theming; +using SharpMUTerm.Core.Text; +using SharpMUTerm.Core.Theming; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// -/// Converts MuGlyph's UI-agnostic model into SharpConsoleUI (Spectre-style) +/// Converts SharpMUTerm's UI-agnostic model into SharpConsoleUI (Spectre-style) /// markup: truecolor foreground/background, bold/italic/underline/etc., and clickable /// s rendered as [link=…] spans. Colours are resolved through the /// active so palette-indexed and default colours land on real RGB values. diff --git a/src/MuClient.Tui/OptionsScreenRenderer.cs b/src/SharpMUTerm.Tui/OptionsScreenRenderer.cs similarity index 98% rename from src/MuClient.Tui/OptionsScreenRenderer.cs rename to src/SharpMUTerm.Tui/OptionsScreenRenderer.cs index f34b771..da685c6 100644 --- a/src/MuClient.Tui/OptionsScreenRenderer.cs +++ b/src/SharpMUTerm.Tui/OptionsScreenRenderer.cs @@ -1,6 +1,6 @@ -using MuClient.Core.Configuration; +using SharpMUTerm.Core.Configuration; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders the shared options-list body used by the F7 (Text & ANSI), F8 (Input & diff --git a/src/MuClient.Tui/Powerline.cs b/src/SharpMUTerm.Tui/Powerline.cs similarity index 98% rename from src/MuClient.Tui/Powerline.cs rename to src/SharpMUTerm.Tui/Powerline.cs index bf13c38..f7a689d 100644 --- a/src/MuClient.Tui/Powerline.cs +++ b/src/SharpMUTerm.Tui/Powerline.cs @@ -1,6 +1,6 @@ using System.Text; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// One coloured segment of a powerline bar: its text and resolved #rrggbb colours. internal readonly record struct PowerSegment(string Text, string Fg, string Bg); diff --git a/src/MuClient.Tui/Program.cs b/src/SharpMUTerm.Tui/Program.cs similarity index 90% rename from src/MuClient.Tui/Program.cs rename to src/SharpMUTerm.Tui/Program.cs index e5944b2..09377fc 100644 --- a/src/MuClient.Tui/Program.cs +++ b/src/SharpMUTerm.Tui/Program.cs @@ -1,8 +1,8 @@ -using MuClient.Core.Configuration; -using MuClient.Graphics; +using SharpMUTerm.Core.Configuration; +using SharpMUTerm.Graphics; using SharpConsoleUI.Drivers; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; internal static class Program { @@ -35,7 +35,7 @@ private static int Main(string[] args) } var (width, height) = ParseSize(args); - var app = new MuGlyphApp(config, capabilities, new HeadlessConsoleDriver(width, height)); + var app = new SharpMUTermApp(config, capabilities, new HeadlessConsoleDriver(width, height)); var frame = app.RenderSnapshot(GetOption(args, "--view")); var outPath = GetOption(args, "--out"); if (outPath is not null) @@ -54,7 +54,7 @@ private static int Main(string[] args) } var world = ResolveWorld(args, config); - var liveApp = new MuGlyphApp(config, capabilities); + var liveApp = new SharpMUTermApp(config, capabilities); var exitCode = liveApp.Run(world); // blocks on the SharpConsoleUI main loop until exit // Persist the workspace so the next launch resumes where this one left off. @@ -101,10 +101,10 @@ private static AppConfiguration LoadConfiguration() private static TerminalCapabilities DetectCapabilities(AppConfiguration config) { - // A config graphics override maps onto the same MUGLYPH_GRAPHICS mechanism the probe reads. + // A config graphics override maps onto the same SHARPMUTERM_GRAPHICS mechanism the probe reads. if (!string.IsNullOrEmpty(config.GraphicsOverride)) { - Environment.SetEnvironmentVariable("MUGLYPH_GRAPHICS", config.GraphicsOverride); + Environment.SetEnvironmentVariable("SHARPMUTERM_GRAPHICS", config.GraphicsOverride); } return CapabilityProbe.DetectFromEnvironment(); @@ -142,9 +142,9 @@ private static TerminalCapabilities DetectCapabilities(AppConfiguration config) private static void PrintUsage() { - Console.WriteLine("MuGlyph — a cross-platform TUI MU* client."); + Console.WriteLine("SharpMUTerm — a cross-platform TUI MU* client."); Console.WriteLine(); - Console.WriteLine("Usage: muglyph [host] [port] [options]"); + Console.WriteLine("Usage: sharpmuterm [host] [port] [options]"); Console.WriteLine(); Console.WriteLine(" host Server hostname or IP (IPv4/IPv6)."); Console.WriteLine(" port Server port (default 4000)."); diff --git a/src/MuClient.Tui/Properties/PublishProfiles/linux-x64.pubxml b/src/SharpMUTerm.Tui/Properties/PublishProfiles/linux-x64.pubxml similarity index 100% rename from src/MuClient.Tui/Properties/PublishProfiles/linux-x64.pubxml rename to src/SharpMUTerm.Tui/Properties/PublishProfiles/linux-x64.pubxml diff --git a/src/MuClient.Tui/Properties/PublishProfiles/win-x64.pubxml b/src/SharpMUTerm.Tui/Properties/PublishProfiles/win-x64.pubxml similarity index 100% rename from src/MuClient.Tui/Properties/PublishProfiles/win-x64.pubxml rename to src/SharpMUTerm.Tui/Properties/PublishProfiles/win-x64.pubxml diff --git a/src/MuClient.Tui/RailRenderer.cs b/src/SharpMUTerm.Tui/RailRenderer.cs similarity index 97% rename from src/MuClient.Tui/RailRenderer.cs rename to src/SharpMUTerm.Tui/RailRenderer.cs index 17c760e..70936b6 100644 --- a/src/MuClient.Tui/RailRenderer.cs +++ b/src/SharpMUTerm.Tui/RailRenderer.cs @@ -1,7 +1,7 @@ -using MuClient.Core.Text; -using MuClient.Core.Workspaces; +using SharpMUTerm.Core.Text; +using SharpMUTerm.Core.Workspaces; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// Renders rows into markup lines for the connection rail: a header, worlds diff --git a/src/MuClient.Tui/SettingsOverlay.cs b/src/SharpMUTerm.Tui/SettingsOverlay.cs similarity index 99% rename from src/MuClient.Tui/SettingsOverlay.cs rename to src/SharpMUTerm.Tui/SettingsOverlay.cs index 40058dd..b430f3d 100644 --- a/src/MuClient.Tui/SettingsOverlay.cs +++ b/src/SharpMUTerm.Tui/SettingsOverlay.cs @@ -3,7 +3,7 @@ using SharpConsoleUI.Controls; using SharpConsoleUI.Layout; -namespace MuClient.Tui; +namespace SharpMUTerm.Tui; /// /// A full-screen overlay hosting the F2–F9 settings screens. The design specifies these as diff --git a/src/MuClient.Tui/MuClient.Tui.csproj b/src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj similarity index 60% rename from src/MuClient.Tui/MuClient.Tui.csproj rename to src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj index ebd8a9e..9ebfcd2 100644 --- a/src/MuClient.Tui/MuClient.Tui.csproj +++ b/src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj @@ -2,8 +2,8 @@ Exe - MuClient.Tui - muglyph + SharpMUTerm.Tui + sharpmuterm