diff --git a/.github/scripts/critical-dependencies.js b/.github/scripts/critical-dependencies.js
index ccfbcfe..ee67606 100644
--- a/.github/scripts/critical-dependencies.js
+++ b/.github/scripts/critical-dependencies.js
@@ -74,14 +74,14 @@ async function checkTerminalGui(github, core, owner, repo, project) {
return;
}
const { data: releases } = await github.rest.repos.listReleases({
- owner: 'gui-cs', repo: 'Terminal.Gui', per_page: 30,
+ owner: 'tui-cs', repo: 'Terminal.Gui', per_page: 30,
});
const upstream = releases.find(release => release.tag_name.toLowerCase().includes(latest.version.toLowerCase()));
await createOnce(github, core, owner, repo, `Terminal.Gui develop update: ${latest.version}`, `
Scout currently references **${match[1]}**; NuGet has **${latest.version}** on the develop channel.
- [NuGet package and version history](https://www.nuget.org/packages/Terminal.Gui/${latest.version})
-- [Upstream changes](${upstream ? upstream.html_url : 'https://github.com/gui-cs/Terminal.Gui/releases'})
+- [Upstream changes](${upstream ? upstream.html_url : 'https://github.com/tui-cs/Terminal.Gui/releases'})
- Check whether Dependabot opened an update PR. Its version PR may target a stable release instead of the develop channel.
- Compare APIs used by Scout, especially UI thread dispatch, shutdown, layout, input, and progress callbacks.
- Run unit tests, Windows x64 and ARM64 AOT publish, and mock smoke; record any live COM/TUI checks that require a Windows host.
diff --git a/.github/scripts/critical-dependencies.test.js b/.github/scripts/critical-dependencies.test.js
index 32fb688..e3f3f96 100644
--- a/.github/scripts/critical-dependencies.test.js
+++ b/.github/scripts/critical-dependencies.test.js
@@ -5,6 +5,7 @@ const monitor = require('./critical-dependencies.js');
test('critical releases create one assigned issue each and stay quiet on later runs', async () => {
const originalFetch = global.fetch;
const issues = [];
+ const releaseQueries = [];
let labelExists = false;
global.fetch = async () => ({
ok: true,
@@ -26,12 +27,15 @@ test('critical releases create one assigned issue each and stay quiet on later r
},
},
repos: {
- listReleases: async ({ repo }) => ({ data: repo === 'Terminal.Gui'
+ listReleases: async ({ owner, repo }) => {
+ releaseQueries.push({ owner, repo });
+ return { data: repo === 'Terminal.Gui'
? [{ tag_name: 'v2.5.1-develop.45', html_url: 'https://example.invalid/terminal', body: 'Fix progress callbacks' }]
: [
{ tag_name: 'v1.29.0', html_url: 'https://example.invalid/stable', body: 'Source changes', draft: false, prerelease: false },
{ tag_name: 'v1.30.0-preview', html_url: 'https://example.invalid/preview', body: 'COM updates', draft: false, prerelease: true },
- ] }),
+ ] };
+ },
},
},
};
@@ -43,6 +47,10 @@ test('critical releases create one assigned issue each and stay quiet on later r
projectText: '',
};
await monitor(args);
+ assert.deepEqual(releaseQueries, [
+ { owner: 'tui-cs', repo: 'Terminal.Gui' },
+ { owner: 'microsoft', repo: 'winget-cli' },
+ ]);
assert.equal(issues.length, 3);
assert.ok(issues.every(issue => issue.assignees[0] === 'harder' && issue.labels[0] === 'critical-dependency'));
assert.match(issues[0].body, /progress callbacks/);
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 667154d..e2f6199 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -44,7 +44,7 @@ and restores both portable and MSIX Identity graphs in locked mode.
## Code style
-Mostly follow standard C# / .NET conventions. The project loosely mirrors [Terminal.Gui's style](https://github.com/gui-cs/Terminal.Gui/blob/develop/.claude/rules/formatting.md) — notable points:
+Mostly follow standard C# / .NET conventions. The project loosely mirrors [Terminal.Gui's style](https://github.com/tui-cs/Terminal.Gui/blob/develop/.claude/rules/formatting.md) — notable points:
- Space before parens: `Method ()`, `array [i]`, `if (...)`.
- Braces on next line (Allman style).
diff --git a/README.md b/README.md
index 953fb27..34b218a 100644
--- a/README.md
+++ b/README.md
@@ -84,9 +84,9 @@ COM enables richer package details, installer previews and version lists, live p
## Inspiration and credits
-[Scott Hanselman's **winget-tui**](https://github.com/shanselman/winget-tui), built with Rust and Ratatui, inspired this project and deserves credit for showing how approachable WinGet can be in a terminal. Scout began as a C# exploration of what [Terminal.Gui](https://github.com/gui-cs/Terminal.Gui) could do with that kind of experience. It has since developed into an independent package manager with its own workflows, design, and release builds. No source code was copied from the inspiration project.
+[Scott Hanselman's **winget-tui**](https://github.com/shanselman/winget-tui), built with Rust and Ratatui, inspired this project and deserves credit for showing how approachable WinGet can be in a terminal. Scout began as a C# exploration of what [Terminal.Gui](https://github.com/tui-cs/Terminal.Gui) could do with that kind of experience. It has since developed into an independent package manager with its own workflows, design, and release builds. No source code was copied from the inspiration project.
-Scout for WinGet is [MIT licensed](LICENSE). WinGet is maintained by [Microsoft](https://github.com/microsoft/winget-cli); Terminal.Gui is maintained by its [contributors](https://github.com/gui-cs/Terminal.Gui).
+Scout for WinGet is [MIT licensed](LICENSE). WinGet is maintained by [Microsoft](https://github.com/microsoft/winget-cli); Terminal.Gui is maintained by its [contributors](https://github.com/tui-cs/Terminal.Gui).
## Development
diff --git a/WinGetScout.csproj b/WinGetScout.csproj
index 1646afc..b0b2558 100644
--- a/WinGetScout.csproj
+++ b/WinGetScout.csproj
@@ -20,7 +20,7 @@
wingetscout
Scout for WinGet
Scout for WinGet
- 0.2.2
+ 1.0.0
Scout for WinGet is a terminal app for finding, installing, and updating Windows packages.
true
true
diff --git a/packaging/WINGET-SUBMISSION.md b/packaging/WINGET-SUBMISSION.md
index 4177e31..3dec942 100644
--- a/packaging/WINGET-SUBMISSION.md
+++ b/packaging/WINGET-SUBMISSION.md
@@ -8,7 +8,7 @@ The installer manifest has `InstallerType: zip`, `NestedInstallerType: portable`
2. Download that artifact from the successful release workflow run. The files are under `manifests/h/Harder/WinGetScout//`. To regenerate directly from the published ZIPs and validate in one command on Windows, run:
```powershell
- $version = '0.2.2' # replace with the published release version
+ $version = '1.0.0' # replace with the published release version
pwsh ./packaging/prepare-winget-submission.ps1 -Version $version
```
diff --git a/site/docs.html b/site/docs.html
index de5976d..cb8051e 100644
--- a/site/docs.html
+++ b/site/docs.html
@@ -30,7 +30,7 @@
05 / STAY CURRENT
Scheduled update checks
On the Upgrades tab, press C to check now or set a daily local time. Scout creates a current-user Windows Task Scheduler task. The first successful check establishes a baseline; later checks can notify you about new or changed unpinned upgrades or a failed check.
Checks never install updates automatically. Turn off the schedule in the same dialog to remove its task. Keep the extracted folder at the same path so the task can find Scout.
Scout keeps package sets, recent runs, update-check results, and schedule settings under %LOCALAPPDATA%\WinGetScout.
06 / UNDER THE HOOD
Backends and capabilities
The complete portable ZIP uses the structured WinGet COM API where it can activate. If COM is unavailable, Scout falls back to the winget CLI and shows the active backend in its header. The standalone EXE download uses the CLI because it lacks the COM companion files.
Both backends support core search, install, upgrade, uninstall, pins, saved sets, history, and scheduled checks. COM can provide richer details, installer previews, version lists, live progress, and supported verify or repair actions. Some information depends on what the active backend exposes.
07 / HELP
Troubleshooting
WinGet is missing
Run winget --version. If the command is unavailable, install or update Microsoft App Installer, then open a new terminal.
Windows warns about an unsigned download
Confirm the file came from the project's GitHub Release and compare its SHA-256 hash with the matching SHA256SUMS file. See the signing guide for the current status.
COM is unavailable
Make sure you extracted the whole ZIP, then check the active backend shown in Scout. CLI fallback still supports the core workflows. See COM activation details.
How do I get help or report a bug?
Press ? in Scout or open a GitHub issue.
-
+
diff --git a/site/index.html b/site/index.html
index 49a699c..eba7be1 100644
--- a/site/index.html
+++ b/site/index.html
@@ -76,6 +76,21 @@ Find the package.
Know before you install.
READY WHEN YOU ARE
Unzip. Open. Scout.
Download the portable ZIP for your PC, extract the complete folder, and run wingetscout.exe. No .NET runtime or installer is required.
01Choose your ZIPWindows x64 or arm64
02Keep the folder togetherCompanion files enable the COM backend
03Launch ScoutOpen it from Windows Terminal or PowerShell
+
+
+
+
+
BEHIND SCOUT
+
Made for people who live in the terminal.
+
Scout for WinGet is made by Kevin Harder, a software engineer who enjoys making practical open source tools feel a little easier to use.
+
+
+
+
MORE FROM KEVINSkillView
A GitHub CLI extension that helps you discover, inspect, install, and maintain agent skills without leaving the terminal.
+
BUILT WITHTerminal.Gui
Scout's interface is built with this .NET terminal UI toolkit. Kevin is a core contributor to the project.
Explore Terminal.Gui ↗
+
+
+
diff --git a/site/styles.css b/site/styles.css
index f716bfb..67d2c9b 100644
--- a/site/styles.css
+++ b/site/styles.css
@@ -125,6 +125,30 @@ img{display:block;max-width:100%}
.install-steps span{display:grid;gap:4px}
.install-steps strong{font-size:14px}
.install-steps small{font-size:12px;color:#74696b}
+.maker-section{padding:88px 0 95px;background:radial-gradient(circle at 11% 14%,#f3e8de 0,transparent 36%),#fbf8f3;border-top:1px solid #e7dcd1}
+.maker-layout{display:grid;grid-template-columns:minmax(0,.88fr) minmax(0,1.12fr);gap:72px;align-items:center}
+.maker-intro h2{max-width:490px;margin:0;color:var(--ink);font-size:clamp(33px,3.5vw,48px);line-height:1.13;letter-spacing:-.053em}
+.maker-intro>p:not(.section-kicker){max-width:475px;margin:22px 0 0;color:var(--muted);font-size:15px;line-height:1.72}
+.maker-intro strong{color:var(--ink)}
+.maker-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:29px}
+.maker-links a{display:block;min-width:0;padding:15px 16px;border:1px solid #dfcfc1;border-radius:11px;background:#fffdf9;color:var(--rust-dark);font-size:13px;font-weight:800;box-shadow:0 7px 20px #4c372309}
+.maker-links a:hover{border-color:#bd9881;background:#fff7ee}
+.maker-links small{display:block;margin-top:5px;color:#74686c;font-size:11px;font-weight:600}
+.maker-projects{display:grid;gap:13px}
+.maker-project{padding:25px 28px;border-radius:15px;border:1px solid #d8c8bd;box-shadow:0 13px 29px #49342812}
+.maker-label{display:block;font-size:10px;font-weight:850;letter-spacing:.15em}
+.maker-project h3{margin:10px 0 8px;font-size:23px;letter-spacing:-.035em}
+.maker-project p{margin:0 0 16px;max-width:510px;font-size:13px;line-height:1.65}
+.maker-project a{font-size:12px;font-weight:800;border-bottom:1px solid currentColor;padding-bottom:3px}
+.maker-project a:hover{border-bottom-width:2px}
+.maker-project-links{display:flex;gap:21px;flex-wrap:wrap}
+.maker-skillview{background:#443a4d;color:#fff8ef;border-color:#443a4d}
+.maker-skillview .maker-label{color:#eab69d}
+.maker-skillview p{color:#e3d8df}
+.maker-skillview a{color:#f5c7ab}
+.maker-terminal{background:#edf1e9;border-color:#d4dfd0;color:#334941}
+.maker-terminal .maker-label,.maker-terminal a{color:#426b60}
+.maker-terminal p{color:#596960}
.site-footer{background:#302a35;color:#f4eee9}
.footer-inner{display:flex;justify-content:space-between;gap:30px;padding-top:47px;padding-bottom:43px}
.footer-brand{color:#fffaf2}
@@ -173,6 +197,6 @@ img{display:block;max-width:100%}
.docs-content kbd{font:12px Consolas,monospace;color:#704137;background:#f7ebe1;border:1px solid #e4cebe;border-radius:4px;padding:3px 6px;white-space:nowrap}
.faq h3:first-child{margin-top:23px}.faq p{margin-top:0}
@media(max-width:1100px){.hero{gap:20px}.feature-grid{grid-template-columns:repeat(2,1fr)}.feature-card{min-height:235px}.comparison-layout{gap:35px}.site-header nav{gap:14px}}
-@media(max-width:780px){.wrap{width:min(100% - 34px,620px)}.site-header{min-height:80px;flex-wrap:wrap;gap:8px 15px;padding-top:10px;padding-bottom:11px}.site-header nav{order:3;width:100%;overflow-x:auto;margin:0;gap:22px;padding:5px 0;white-space:nowrap}.header-download{margin-left:auto}.hero{display:block;padding-top:65px;padding-bottom:58px}.hero h1{font-size:clamp(45px,8vw,64px)}.hero-stage{margin-top:55px}.hero-stage:before{inset:-30px 0 -20px}.mascot-sticker{left:-14px;bottom:0;width:155px;height:92px}.stage-caption{right:0;bottom:-4px}.section{padding-top:75px;padding-bottom:75px}.section-heading{display:block}.section-heading>p:last-child{margin-top:17px}.comparison-layout,.install-panel,.theme-layout{grid-template-columns:1fr}.comparison-stack{margin-top:12px}.theme-controls{grid-template-columns:repeat(2,1fr)}.demo-grid{grid-template-columns:1fr}.install-panel{gap:30px}.docs-hero{padding:54px 0}.docs-layout{display:block;padding-top:36px}.docs-sidebar{position:static;display:flex;overflow-x:auto;gap:4px;margin-bottom:42px;border-bottom:1px solid var(--line)}.docs-sidebar p{display:none}.docs-sidebar a{white-space:nowrap;border-left:0;border-bottom:2px solid transparent}.footer-inner{display:block}.footer-links{margin-top:32px}.footer-bottom{display:block}.footer-bottom span{display:block;margin:5px 0}}
-@media(max-width:500px){.brand-copy strong{font-size:16px}.brand img{width:62px;height:42px}.header-download{padding:9px 11px;font-size:12px}.lead{font-size:16px}.quick-path-inner{overflow-x:auto;white-space:nowrap;font-size:10px}.feature-grid,.theme-controls{grid-template-columns:1fr}.feature-card{min-height:225px}.theme-choice{padding:12px 14px}.mascot-sticker{width:120px;height:74px}.stage-caption{font-size:9px}.theme-display-top>span:last-child{font-size:8px}.download-grid{grid-template-columns:1fr}.shortcut-table span{width:61%}.footer-links{gap:12px 18px}}
+@media(max-width:780px){.wrap{width:min(100% - 34px,620px)}.site-header{min-height:80px;flex-wrap:wrap;gap:8px 15px;padding-top:10px;padding-bottom:11px}.site-header nav{order:3;width:100%;overflow-x:auto;margin:0;gap:22px;padding:5px 0;white-space:nowrap}.header-download{margin-left:auto}.hero{display:block;padding-top:65px;padding-bottom:58px}.hero h1{font-size:clamp(45px,8vw,64px)}.hero-stage{margin-top:55px}.hero-stage:before{inset:-30px 0 -20px}.mascot-sticker{left:-14px;bottom:0;width:155px;height:92px}.stage-caption{right:0;bottom:-4px}.section{padding-top:75px;padding-bottom:75px}.section-heading{display:block}.section-heading>p:last-child{margin-top:17px}.comparison-layout,.install-panel,.theme-layout,.maker-layout{grid-template-columns:1fr}.comparison-stack{margin-top:12px}.theme-controls{grid-template-columns:repeat(2,1fr)}.demo-grid{grid-template-columns:1fr}.install-panel{gap:30px}.maker-section{padding:72px 0}.maker-layout{gap:33px}.docs-hero{padding:54px 0}.docs-layout{display:block;padding-top:36px}.docs-sidebar{position:static;display:flex;overflow-x:auto;gap:4px;margin-bottom:42px;border-bottom:1px solid var(--line)}.docs-sidebar p{display:none}.docs-sidebar a{white-space:nowrap;border-left:0;border-bottom:2px solid transparent}.footer-inner{display:block}.footer-links{margin-top:32px}.footer-bottom{display:block}.footer-bottom span{display:block;margin:5px 0}}
+@media(max-width:500px){.brand-copy strong{font-size:16px}.brand img{width:62px;height:42px}.header-download{padding:9px 11px;font-size:12px}.lead{font-size:16px}.quick-path-inner{overflow-x:auto;white-space:nowrap;font-size:10px}.feature-grid,.theme-controls,.maker-links{grid-template-columns:1fr}.feature-card{min-height:225px}.theme-choice{padding:12px 14px}.mascot-sticker{width:120px;height:74px}.stage-caption{font-size:9px}.theme-display-top>span:last-child{font-size:8px}.download-grid{grid-template-columns:1fr}.shortcut-table span{width:61%}.footer-links{gap:12px 18px}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}.button,.theme-choice{transition:none}}