From 799434441928e56e239241ca1ea55819aadbb9bb Mon Sep 17 00:00:00 2001 From: David Shnayder Date: Fri, 3 Apr 2026 17:06:58 +0300 Subject: [PATCH 1/3] feat: Implement use of AsParameters --- src/Seek.Cli/Commands.Delete.cs | 36 ++++++------------- src/Seek.Cli/Commands.Search.cs | 37 +++++++------------- src/Seek.Cli/SearchParameters.cs | 25 +++++++++++++ src/Seek.Cli/Seek.Cli.csproj | 10 +++--- src/Seek.Cli/assets/ConsoleAppFramework.dll | Bin 0 -> 367104 bytes 5 files changed, 53 insertions(+), 55 deletions(-) create mode 100644 src/Seek.Cli/SearchParameters.cs create mode 100644 src/Seek.Cli/assets/ConsoleAppFramework.dll diff --git a/src/Seek.Cli/Commands.Delete.cs b/src/Seek.Cli/Commands.Delete.cs index baa69f2..d59728d 100644 --- a/src/Seek.Cli/Commands.Delete.cs +++ b/src/Seek.Cli/Commands.Delete.cs @@ -10,39 +10,23 @@ internal static partial class Commands { /// /// Delete matching files and directories. /// - /// Search query - /// -r, Treat the query as regex pattern - /// Perform a case sensitive search - /// -h, Include hidden files and folders - /// -s, Include system files and folders - /// -f, Match only against files - /// -d, Match only against directories /// Disable progress reporting - /// The root path from which to scan /// Perform the deletion instead of previewing candidates /// /// - public static async Task DeleteAsync( - [Argument] string query, - bool regex, - bool caseSensitive, - bool hidden, - bool system, - bool files, - bool directories, + public static async Task DeleteAsync([AsParameters] SearchParameters @params, bool noProgress, - string root = ".", - bool apply = false, + bool apply, CancellationToken cancellationToken = default) { var search = CreateFileSystemSearch( - query, - regex, - caseSensitive, - hidden, - system, - files, - directories, - root, + @params.Query, + @params.Regex, + @params.CaseSensitive, + @params.Hidden, + @params.System, + @params.Files, + @params.Directories, + @params.Root, cancellationToken); List collapsedCandidates = await CollectDeleteCandidatesAsync(search.SearchAsync(), cancellationToken).ConfigureAwait(false); diff --git a/src/Seek.Cli/Commands.Search.cs b/src/Seek.Cli/Commands.Search.cs index 71220a4..7983f20 100644 --- a/src/Seek.Cli/Commands.Search.cs +++ b/src/Seek.Cli/Commands.Search.cs @@ -8,43 +8,30 @@ namespace Seek.Cli; internal static partial class Commands { /// - /// Seek is a fast filesystem search tool for files and directories by David Shnayder (@dusrdev). + /// Seek is a fast filesystem searcher made by David Shnayder (@dusrdev). + /// + /// Search the filesystem for a query /// - /// Search query - /// -r, Treat the query as regex pattern - /// Perform a case sensitive search /// -p, Disable matching section highlight /// Emit absolute paths instead of paths relative to the selected root /// Emit machine-readable NUL-terminated paths for safe piping, implies --plain and --absolute - /// -h, Include hidden files and folders - /// -s, Include system files and folders - /// -f, Match only against files - /// -d, Match only against directories - /// The root path from which to scan /// /// public static async Task SearchAsync( - [Argument] string query, - bool regex, - bool caseSensitive, + [AsParameters] SearchParameters @params, bool plain, bool absolute, bool @null, - bool hidden, - bool system, - bool files, - bool directories, - string root = ".", CancellationToken cancellationToken = default) { var search = CreateFileSystemSearch( - query, - regex, - caseSensitive, - hidden, - system, - files, - directories, - root, + @params.Query, + @params.Regex, + @params.CaseSensitive, + @params.Hidden, + @params.System, + @params.Files, + @params.Directories, + @params.Root, cancellationToken); Action outputHandler = (@null, plain) switch { diff --git a/src/Seek.Cli/SearchParameters.cs b/src/Seek.Cli/SearchParameters.cs new file mode 100644 index 0000000..8acaa10 --- /dev/null +++ b/src/Seek.Cli/SearchParameters.cs @@ -0,0 +1,25 @@ +using ConsoleAppFramework; + +namespace Seek.Cli; + +/// +/// Common search based parameters +/// +/// Search query +/// -r, Treat the query as regex pattern +/// Perform a case sensitive search +/// -h, Include hidden files and folders +/// -s, Include system files and folders +/// -f, Match only against files +/// -d, Match only against directories +/// The root path from which to scan +internal sealed record SearchParameters( + [Argument] string Query, + bool Regex, + bool CaseSensitive, + bool Hidden, + bool System, + bool Files, + bool Directories, + string Root = "." +); \ No newline at end of file diff --git a/src/Seek.Cli/Seek.Cli.csproj b/src/Seek.Cli/Seek.Cli.csproj index af7302a..77bad36 100644 --- a/src/Seek.Cli/Seek.Cli.csproj +++ b/src/Seek.Cli/Seek.Cli.csproj @@ -73,13 +73,15 @@ - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + + + true + obj/generated + + <_AotToolSymbolPackageFiles Include="@(TfmSpecificPackageFile)" Condition="$([System.String]::Copy('%(TfmSpecificPackageFile.Identity)').EndsWith('.pdb')) or $([System.String]::Copy('%(TfmSpecificPackageFile.Identity)').EndsWith('.dbg')) or $([System.String]::Copy('%(TfmSpecificPackageFile.Identity)').Contains('.dSYM/')) or $([System.String]::Copy('%(TfmSpecificPackageFile.Identity)').Contains('.dSYM\\'))" /> diff --git a/src/Seek.Cli/assets/ConsoleAppFramework.dll b/src/Seek.Cli/assets/ConsoleAppFramework.dll new file mode 100644 index 0000000000000000000000000000000000000000..8c18c6c4f6775acc2c66e8fe01d4cdcc6b13db8d GIT binary patch literal 367104 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ⅆkJg(hVoAQ2#H5eAy+c3v^w-w`Iba@8U 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 b^s@D@DF*&^SHO|>YtJ=Jxs~7_AO`+_&a7v7 literal 0 HcmV?d00001 From 73d25cf37134169dff27ec15abb12f859c5646fb Mon Sep 17 00:00:00 2001 From: David Shnayder Date: Tue, 14 Apr 2026 17:20:19 +0300 Subject: [PATCH 2/3] chore: update dependencies --- .agents/skills/pretty-console-expert/SKILL.md | 17 ++-- .../{v5-api-map.md => v6-api-map.md} | 97 ++++++++++++------- src/Seek.Cli/Seek.Cli.csproj | 2 +- 3 files changed, 67 insertions(+), 49 deletions(-) rename .agents/skills/pretty-console-expert/references/{v5-api-map.md => v6-api-map.md} (63%) diff --git a/.agents/skills/pretty-console-expert/SKILL.md b/.agents/skills/pretty-console-expert/SKILL.md index a96f758..138a3b6 100755 --- a/.agents/skills/pretty-console-expert/SKILL.md +++ b/.agents/skills/pretty-console-expert/SKILL.md @@ -7,18 +7,13 @@ description: Expert workflow for using PrettyConsole correctly and efficiently i ## Core Workflow -1. Verify the installed PrettyConsole version before coding. -- Read `Directory.Packages.props`, `*.csproj`, and/or run `dotnet list package`. -- Keep implementation compatible with the installed version; do not "fix" compilation by downgrading unless the user explicitly requests downgrading. - -2. Bring extension APIs into scope: +1. Bring extension APIs into scope: ```csharp using PrettyConsole; -using static System.Console; // optional ``` -3. Choose APIs by intent. +2. Choose APIs by intent. - Styled output: `Console.WriteInterpolated`, `Console.WriteLineInterpolated`. - Inputs/prompts: `Console.TryReadLine`, `Console.ReadLine`, `Console.Confirm`, `Console.RequestAnyInput`. - Dynamic rendering and line control: `Console.Overwrite`, `Console.ClearNextLines`, `Console.SkipLines`, `Console.NewLine`. @@ -27,7 +22,7 @@ using static System.Console; // optional - Menus/tables: `Console.Selection`, `Console.MultiSelection`, `Console.TreeMenu`, `Console.Table`. - Low-level override only: use `Console.Write(...)` / `Console.WriteLine(...)` span+`ISpanFormattable` overloads only when you intentionally bypass the handler for a custom formatting pipeline. -4. Route output deliberately. +3. Route output deliberately. - Keep normal prompts, menus, tables, durable user-facing output, and machine-readable non-error output on `OutputPipe.Out` unless there is a specific reason not to. - Use `OutputPipe.Error` for transient live UI and for actual errors/diagnostics/warnings so stdout stays pipe-friendly and error output remains distinguishable. - `LiveConsoleRegion` should usually live on `OutputPipe.Error` in interactive CLIs. Keep the durable lines that must coordinate with it flowing through the region instance instead of writing directly to the same pipe elsewhere. @@ -51,7 +46,7 @@ using static System.Console; // optional - Prefer `Color`, `Markup`, and guarded `AnsiToken` in styled output. Use `Color.*` for token-based color APIs such as `ProgressBar`, `Spinner`, `TypeWrite`, and `LiveConsoleRegion.RenderProgress`. Keep `ConsoleColor` for APIs that explicitly require it, such as low-level span writes or `Console.SetColors`. - Route transient UI (spinner/progress/overwrite loops) to `OutputPipe.Error` to keep stdout pipe-friendly, and use `OutputPipe.Error` for genuine errors/diagnostics. Keep ordinary non-error interaction flow on `OutputPipe.Out`. - Spinner/progress/overwrite output is caller-owned after rendering completes. Explicitly remove it with `Console.ClearNextLines(totalLines, pipe)` or intentionally keep the region with `Console.SkipLines(totalLines)`. -- `LiveConsoleRegion` is the right primitive when durable line output and transient status must interleave over time. It is line-oriented: use `WriteLine`, not inline writes, for cooperating durable output above the retained region. +- `LiveConsoleRegion` is the right primitive when durable line output and transient status must interleave over time. It is line-oriented: use `WriteLine`, not inline writes, for cooperating durable output above the retained region. Disposing the region clears the retained snapshot automatically; call `Clear()` only when the region should disappear before the object itself is disposed and you still want to reuse that same instance later. - Only use the bounded `Channel` snapshot pattern when multiple producers must update the same live region at high frequency. For single-producer or modest-rate updates, keep the rendering loop simple. ## Practical Patterns @@ -114,12 +109,12 @@ live.Render($"Resolving graph"); live.WriteLine($"Updated package-a"); live.RenderProgress(65, (builder, out handler) => handler = builder.Build(OutputPipe.Error, $"Compiling")); -live.Clear(); +live.Render($"Linking"); ``` ## Reference File -Read [references/v5-api-map.md](references/v5-api-map.md) when you need exact usage snippets, migration mapping from old APIs, or a compile-fix checklist. +Read [references/v6-api-map.md](references/v6-api-map.md) when you need exact usage snippets, migration mapping from old APIs, or a compile-fix checklist. Read [references/testing-with-consolecontext.md](references/testing-with-consolecontext.md) when the task involves testing a PrettyConsole-based CLI or command handler. If public API usage changes in the edited project, ask whether to update `README.md` and changelog/release-notes files. diff --git a/.agents/skills/pretty-console-expert/references/v5-api-map.md b/.agents/skills/pretty-console-expert/references/v6-api-map.md similarity index 63% rename from .agents/skills/pretty-console-expert/references/v5-api-map.md rename to .agents/skills/pretty-console-expert/references/v6-api-map.md index dc71729..a6082c7 100755 --- a/.agents/skills/pretty-console-expert/references/v5-api-map.md +++ b/.agents/skills/pretty-console-expert/references/v6-api-map.md @@ -1,30 +1,16 @@ -# PrettyConsole v5 API Map +# PrettyConsole v6 API Map -Use this file when implementing or reviewing PrettyConsole usage so code compiles against modern APIs and keeps allocation-conscious patterns. +Use this file when implementing or reviewing PrettyConsole usage so code compiles against the current surface and keeps the library's allocation-conscious patterns. -## 1. Version First - -Read installed version before coding: - -```bash -dotnet list package -rg -n "PrettyConsole" --glob "*.csproj" . -# optionally also check central package management if present: -# rg -n "PrettyConsole" Directory.Packages.props -``` - -If version and request conflict, keep the installed version and adapt code accordingly. - -## 2. Namespace and Setup +## 1. Namespace and Setup ```csharp using PrettyConsole; -using static System.Console; // optional ``` PrettyConsole methods are extension members on `System.Console`. -## 3. Correct Modern APIs +## 2. Correct v6 APIs - Styled writes: - `Console.WriteInterpolated(...)` @@ -39,6 +25,11 @@ PrettyConsole methods are extension members on `System.Console`. - `Console.ClearNextLines(...)` - `Console.SkipLines(...)` - `Console.NewLine(...)` +- Live retained UI: + - `LiveConsoleRegion.WriteLine(...)` + - `LiveConsoleRegion.Render(...)` + - `LiveConsoleRegion.RenderProgress(...)` + - `LiveConsoleRegion.Clear()` - Progress: - `ProgressBar.Update(...)` - `ProgressBar.Render(...)` @@ -52,9 +43,25 @@ PrettyConsole methods are extension members on `System.Console`. ### Output routing - Keep prompts, menus, tables, final user-facing output, and machine-readable non-error output on `OutputPipe.Out` unless you intentionally need a different split. -- Use `OutputPipe.Error` for transient live UI and for actual errors/diagnostics/warnings so stdout remains pipe-friendly and error output stays distinct. +- Use `OutputPipe.Error` for transient live UI and for actual errors, diagnostics, and warnings so stdout remains pipe-friendly and error output stays distinct. +- `LiveConsoleRegion` should usually live on `OutputPipe.Error` in interactive CLIs. Keep durable lines that must coordinate with it flowing through the region instance instead of writing directly to the same pipe elsewhere. +- Disposing a `LiveConsoleRegion` clears the retained snapshot and then permanently closes the region. Call `Clear()` only when you want to remove the current snapshot but keep the region instance reusable for later renders. - Avoid mixing a single interactive exchange across `Out` and `Error` unless the split is intentional. +### Interpolated-handler styling model + +- Prefer `Color`, `Markup`, and guarded `AnsiToken` inside interpolation holes: + + ```csharp + Console.WriteLineInterpolated($"{Color.Green}ready{Color.Default}"); + Console.WriteLineInterpolated($"{Markup.Bold}build{Markup.ResetBold} complete"); + ``` + +- `ConsoleColor` interpolation still works for compatibility, but `Color.*` is the primary v6 surface for styled output. +- For APIs that explicitly take `AnsiToken`, use `Color.*` or `new AnsiToken("...")`. +- Do not embed raw escape sequences directly in string literals. Keep ANSI inside interpolation holes so PrettyConsole can isolate the token safely. +- If you must branch on ANSI capability outside the guarded token model, use `ConsoleContext.IsAnsiSupported`. + ### Interpolated-handler special formats - `TimeSpan` with `:duration`: @@ -84,31 +91,32 @@ Use these only when intentionally bypassing the interpolated handler for a custo ### New lines and blank lines - Use `Console.NewLine(pipe)` when the intent is only to end the current line or emit a blank line. -- Do not use `Console.WriteLineInterpolated($"")` or payloads like `$"{ConsoleColor.Default}"` just to force a newline. +- Do not use `Console.WriteLineInterpolated($"")` or reset-only payloads such as `$"{Color.Default}"` just to force a newline. - Use `WriteLineInterpolated(...)` when you are actually writing content and also want the trailing newline. -## 4. Old -> New Migration Table +## 3. Old -> New Migration Table - `IndeterminateProgressBar` -> `Spinner` - `AnimationSequence` -> `Pattern` - `ProgressBar.WriteProgressBar` -> `ProgressBar.Render` - `PrettyConsoleExtensions` -> `ConsoleContext` -- Legacy `ColoredOutput`/`Color` types -> `ConsoleColor` helpers and tuples +- Legacy `ColoredOutput`/`Color` types -> `Color`, `Markup`, `AnsiToken`, and `ConsoleColor` compatibility where the API explicitly asks for it +- `Markup` and `AnsiColors` raw string expectations -> guarded `AnsiToken` values -## 5. Compile-Safe Patterns +## 4. Compile-Safe Patterns ### Styled output ```csharp -Console.WriteInterpolated($"[{ConsoleColor.Cyan}info{ConsoleColor.Default}] {message}"); -Console.WriteLineInterpolated(OutputPipe.Error, $"{ConsoleColor.Red}error{ConsoleColor.Default}: {message}"); +Console.WriteInterpolated($"[{Color.Cyan}info{Color.Default}] {message}"); +Console.WriteLineInterpolated(OutputPipe.Error, $"{Color.Red}error{Color.Default}: {message}"); Console.NewLine(); ``` ### Typed input ```csharp -if (!Console.TryReadLine(out int port, $"Port ({ConsoleColor.Green}5000{ConsoleColor.Default}): ")) +if (!Console.TryReadLine(out int port, $"Port ({Color.Green}5000{Color.Default}): ")) port = 5000; ``` @@ -126,9 +134,9 @@ static string PromptSelection(string title, string[] options) { while (selection.Length == 0) { Console.Overwrite(() => { - selection = Console.Selection(options, $"{ConsoleColor.Cyan}{title}{ConsoleColor.DefaultForeground}:"); + selection = Console.Selection(options, $"{Color.Cyan}{title}{Color.DefaultForeground}:"); if (selection.Length == 0) - Console.WriteLineInterpolated(OutputPipe.Error, $"{ConsoleColor.Red}Invalid choice."); + Console.WriteLineInterpolated(OutputPipe.Error, $"{Color.Red}Invalid choice.{Color.Default}"); }, lines: options.Length + 3, pipe: OutputPipe.Out); } @@ -152,7 +160,7 @@ var workTask = Task.Run(async () => { var spinner = new Spinner(); await spinner.RunAsync(workTask, (builder, out handler) => { var current = Math.Min(Volatile.Read(ref step), steps.Length - 1); - handler = builder.Build(OutputPipe.Error, $"Current step: {ConsoleColor.Green}{steps[current]}"); + handler = builder.Build(OutputPipe.Error, $"Current step: {Color.Green}{steps[current]}"); }); ``` @@ -162,20 +170,34 @@ Use this when the spinner header should reflect concurrently changing state with ```csharp Console.Overwrite(percent, static current => { - ProgressBar.Render(OutputPipe.Error, current, ConsoleColor.Cyan, maxLineWidth: 40); + ProgressBar.Render(OutputPipe.Error, current, Color.Cyan, maxLineWidth: 40); Console.NewLine(OutputPipe.Error); - Console.WriteInterpolated(OutputPipe.Error, $"Downloading assets... {ConsoleColor.Cyan}{current}"); + Console.WriteInterpolated(OutputPipe.Error, $"Downloading assets... {Color.Cyan}{current}{Color.Default}"); }, lines: 2, pipe: OutputPipe.Error); ``` Prefer this shape for live `status + progress` regions. It keeps the state explicit, avoids closure allocations, and makes the rendered height obvious. +### Retained live region + +```csharp +using var live = new LiveConsoleRegion(OutputPipe.Error); + +live.Render($"Resolving graph"); +live.WriteLine($"Fetched package-a"); +live.RenderProgress(65, (builder, out handler) => + handler = builder.Build(OutputPipe.Error, $"Compiling {Color.Cyan}core{Color.Default}")); +live.Render($"Linking {Color.Cyan}core{Color.Default}"); +``` + +Prefer `LiveConsoleRegion` when durable lines must keep flowing above a pinned transient line on the same pipe over time. + ### Overwrite loop cleanup ```csharp Console.Overwrite(() => { Console.WriteLineInterpolated(OutputPipe.Error, $"Running..."); - ProgressBar.Render(OutputPipe.Error, percent, ConsoleColor.Cyan); + ProgressBar.Render(OutputPipe.Error, percent, Color.Cyan); }, lines: 2, pipe: OutputPipe.Error); Console.ClearNextLines(2, OutputPipe.Error); @@ -221,12 +243,13 @@ Why this works: For single-producer or modest-rate updates, prefer a simpler render loop without the channel. -## 6. Performance Checklist +## 5. Performance Checklist - Prefer interpolated handlers over string concatenation. -- Treat span/formattable `Write`/`WriteLine` overloads as advanced escape hatches, not default app-level APIs. -- Use `Console.NewLine(pipe)` for bare line breaks instead of empty/reset-only `WriteLineInterpolated(...)` calls. -- Keep ANSI/decorations in interpolation holes, not raw literal spans. -- Use `OutputPipe.Error` for transient rendering and genuine errors/diagnostics, but keep ordinary non-error interaction flow on `OutputPipe.Out`. +- Treat span/formattable `Write` and `WriteLine` overloads as advanced escape hatches, not default app-level APIs. +- Use `Console.NewLine(pipe)` for bare line breaks instead of empty or reset-only `WriteLineInterpolated(...)` calls. +- Keep ANSI and decorations in interpolation holes, not raw literal spans. +- Use `Color.*` for token-based color APIs such as `ProgressBar`, `Spinner`, `TypeWrite`, and `LiveConsoleRegion.RenderProgress`. +- Use `OutputPipe.Error` for transient rendering and genuine errors or diagnostics, but keep ordinary non-error interaction flow on `OutputPipe.Out`. - Clean up live UI explicitly after the last frame with `ClearNextLines(...)` or keep it intentionally with `SkipLines(...)`. - Avoid introducing wrapper abstractions when direct PrettyConsole APIs already solve the task. diff --git a/src/Seek.Cli/Seek.Cli.csproj b/src/Seek.Cli/Seek.Cli.csproj index 77bad36..92b8079 100644 --- a/src/Seek.Cli/Seek.Cli.csproj +++ b/src/Seek.Cli/Seek.Cli.csproj @@ -74,7 +74,7 @@ - + From f53f3b8cec23a046de70fecb3e649f3494492aa7 Mon Sep 17 00:00:00 2001 From: David Shnayder Date: Tue, 14 Apr 2026 17:43:10 +0300 Subject: [PATCH 3/3] chore: prepare for v1.2.1 --- AGENTS.md | 7 +++--- CHANGELOG.md | 4 ++++ CONTRIBUTING.md | 2 +- README.md | 3 ++- global.json | 5 +++++ src/Seek.Cli/Program.cs | 2 +- src/Seek.Cli/Seek.Cli.csproj | 7 +++--- tests/Seek.Cli.Tests/CommandMetadataTests.cs | 2 +- tests/Seek.Cli.Tests/CommandsDeleteTests.cs | 17 ++++++++------- tests/Seek.Cli.Tests/CommandsSearchTests.cs | 23 ++++++++++---------- 10 files changed, 41 insertions(+), 31 deletions(-) create mode 100644 global.json diff --git a/AGENTS.md b/AGENTS.md index 766ec5e..68df2be 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -49,7 +49,6 @@ - `files`: defaults to `false`. - `directories`: defaults to `false`. - `root`: defaults to `"."`. - - `highlightColor`: defaults to `ConsoleColor.Green`. - Current arguments and defaults from `Commands.DeleteAsync`: - `query`: required positional argument. - `regex`: defaults to `false`. @@ -59,6 +58,7 @@ - `files`: defaults to `false`. - `directories`: defaults to `false`. - `root`: defaults to `"."`. + - `noProgress`: defaults to `false`. - `apply`: defaults to `false`. - Short aliases currently exposed by the command surface: - `-r` => `--regex` @@ -67,7 +67,6 @@ - `-s` => `--system` - `-f` => `--files` - `-d` => `--directories` - - `-c` => `--highlight-color` - If `plain` is `true`, the CLI writes the full path directly and does not emit PrettyConsole color/escape sequences for match sections. - If `absolute` is `false`, search output is relative to `root`. - If `null` is `true`, the CLI emits plain absolute NUL-terminated paths and bypasses highlight rendering. @@ -75,7 +74,7 @@ - An empty search query matches all eligible entries under `root`. - `seek delete` previews candidates by default, prints absolute candidate paths, and only deletes when `apply` is `true`. - `seek delete` collapses descendants under matched directories before preview or apply. -- `seek delete` deletes sequentially, prints one `SUCCESS` or `FAIL` line per candidate in apply mode, and returns exit code `1` if any deletion fails. +- `seek delete` deletes sequentially, prints one `OK` or `FAIL` line per candidate in apply mode, and returns exit code `1` if any deletion fails. - `seek check-for-updates` compares `ConsoleApp.Version` against the latest published NuGet package version and prints either update instructions or an up-to-date message. - Worker count is not user-configurable today. `FileSystemSearch` computes it as `Math.Max(1, Environment.ProcessorCount - 1)`. - Results are rendered to standard output through `PrettyConsole` when highlighting is enabled. @@ -137,7 +136,7 @@ - AOT compatibility is enforced in project metadata via `IsAotCompatible` and `VerifyReferenceAotCompatibility`. - Optional strong-name signing for the CLI assembly is enabled by passing `StrongNameKeyPath` at build or pack time. - Package identity is `Seek`. -- Tool packages are published for `win-x64`, `win-arm64`, `linux-x64`, `linux-arm64`, `osx-x64`, `osx-arm64`, and `any` via `ToolPackageRuntimeIdentifiers`. +- Tool packages are published for `linux-x64`, `linux-arm64`, `osx-x64`, `osx-arm64`, and `any` via `ToolPackageRuntimeIdentifiers`. - The package embeds: - the repository `README.md` as package readme - `assets/seek-icon.png` as package icon, packed to `seek-icon.png` diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c80799..df3a765 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.2.1 + +- Refreshed Seek's CLI framework integration and console dependency stack without changing the command surface or output contracts. + ## 1.2.0 - Seek is now available on WinGet via `winget install dusrdev.Seek`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a611c95..99482c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ ```bash dotnet build Seek.slnx -dotnet test Seek.slnx +dotnet test --solution Seek.slnx ``` ## Local CLI usage diff --git a/README.md b/README.md index 82d925e..55611da 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ seek delete ".*\\.tmp$" --regex --apply `seek delete` uses the same search-selection options as the default search command: `--regex`, `--case-sensitive`, `--hidden`, `--system`, `--files`, `--directories`, and `--root`. -Without `--apply`, `seek delete` prints the final candidate list and a `No changes were made...` hint. With `--apply`, it deletes each candidate sequentially and prints a `SUCCESS` or `FAIL` status line for each path. +Without `--apply`, `seek delete` prints the final candidate list and a `No changes were made...` hint. With `--apply`, it deletes each candidate sequentially and prints an `OK` or `FAIL` status line for each path. Add `--no-progress` to disable the live progress bar during apply runs. @@ -144,4 +144,5 @@ Other useful options: ```bash dotnet build Seek.slnx +dotnet test --solution Seek.slnx ``` diff --git a/global.json b/global.json new file mode 100644 index 0000000..3140116 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "test": { + "runner": "Microsoft.Testing.Platform" + } +} diff --git a/src/Seek.Cli/Program.cs b/src/Seek.Cli/Program.cs index 079be82..ae05b7a 100644 --- a/src/Seek.Cli/Program.cs +++ b/src/Seek.Cli/Program.cs @@ -1,7 +1,7 @@ using ConsoleAppFramework; using Seek.Cli; -ConsoleApp.Version = "1.2.0"; +ConsoleApp.Version = "1.2.1"; var app = ConsoleApp.Create(); app.UseFilter(); diff --git a/src/Seek.Cli/Seek.Cli.csproj b/src/Seek.Cli/Seek.Cli.csproj index 92b8079..00beb39 100644 --- a/src/Seek.Cli/Seek.Cli.csproj +++ b/src/Seek.Cli/Seek.Cli.csproj @@ -22,7 +22,7 @@ 0 true false - 1.2.0 + 1.2.1 true https://github.com/dusrdev/Seek git @@ -49,9 +49,8 @@ - - Added WinGet distribution via winget install dusrdev.Seek. - - Unified CLI colors and removed --highlight-color. - - Added seek delete --no-progress for quieter apply runs. + - Maintenance release for the CLI framework and console stack. + - No intentional CLI flag or output-contract changes. diff --git a/tests/Seek.Cli.Tests/CommandMetadataTests.cs b/tests/Seek.Cli.Tests/CommandMetadataTests.cs index 798e0fb..7053bc9 100644 --- a/tests/Seek.Cli.Tests/CommandMetadataTests.cs +++ b/tests/Seek.Cli.Tests/CommandMetadataTests.cs @@ -8,7 +8,7 @@ public async Task SearchCommandSummary_DescribesTheDefaultCommandAndApp(Cancella cancellationToken); await Assert.That(searchCommandContents.Contains( - "Seek is a fast filesystem search tool for files and directories by David Shnayder (@dusrdev).", + "Seek is a fast filesystem searcher made by David Shnayder (@dusrdev).", StringComparison.Ordinal)).IsTrue(); } diff --git a/tests/Seek.Cli.Tests/CommandsDeleteTests.cs b/tests/Seek.Cli.Tests/CommandsDeleteTests.cs index 482f045..80be90e 100644 --- a/tests/Seek.Cli.Tests/CommandsDeleteTests.cs +++ b/tests/Seek.Cli.Tests/CommandsDeleteTests.cs @@ -252,15 +252,16 @@ public void Dispose() { ConsoleContext.Out = output; var exitCode = await Commands.DeleteAsync( - query: query, - regex: regex, - caseSensitive: false, - hidden: false, - system: false, - files: files, - directories: directories, + new SearchParameters( + Query: query, + Regex: regex, + CaseSensitive: false, + Hidden: false, + System: false, + Files: files, + Directories: directories, + Root: root), noProgress: true, - root: root, apply: apply, cancellationToken: cancellationToken); diff --git a/tests/Seek.Cli.Tests/CommandsSearchTests.cs b/tests/Seek.Cli.Tests/CommandsSearchTests.cs index 25ba880..197d8e0 100644 --- a/tests/Seek.Cli.Tests/CommandsSearchTests.cs +++ b/tests/Seek.Cli.Tests/CommandsSearchTests.cs @@ -327,17 +327,18 @@ public void Dispose() { ConsoleContext.Out = output; var exitCode = await Commands.SearchAsync( - query, - regex, - false, - noHighlight, - absolute, - @null, - false, - false, - files, - directories, - root, + new SearchParameters( + Query: query, + Regex: regex, + CaseSensitive: false, + Hidden: false, + System: false, + Files: files, + Directories: directories, + Root: root), + plain: noHighlight, + absolute: absolute, + @null: @null, cancellationToken); return (exitCode, output.ToString());