From 5ce2c8a982d9418f2933d15eea2603564e82f7f7 Mon Sep 17 00:00:00 2001 From: chuan Date: Mon, 22 Jun 2026 18:05:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Claude=20Code=20=E5=8E=9F=E7=94=9F=20Wi?= =?UTF-8?q?ndows=20=E9=80=9A=E7=9F=A5=EF=BC=88C#=20/=20.NET=2010=20+=20Ava?= =?UTF-8?q?lonia=2012=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为 Claude Code 提供原生 Windows toast 通知:点击跳回原窗口、切回 Windows Terminal 标签、跨虚拟桌面、调用方图标、非阻塞投递;NativeAOT 单文件分发。 --- .claude-plugin/marketplace.json | 18 + .claude-plugin/plugin.json | 9 + .editorconfig | 23 ++ .gitattributes | 5 + .gitignore | 477 ++++++++++++++++++++++ Directory.Build.props | 7 + LICENSE | 21 + Notify/App.axaml | 25 ++ Notify/App.axaml.cs | 121 ++++++ Notify/Assets/JetBrainsMono-ExtraBold.ttf | Bin 0 -> 279404 bytes Notify/Assets/claude.ico | Bin 0 -> 17014 bytes Notify/Assets/notification.wav | Bin 0 -> 308814 bytes Notify/Cli/CliRunner.cs | 185 +++++++++ Notify/Cli/HookInput.cs | 24 ++ Notify/Interop/AppIcon.cs | 202 +++++++++ Notify/Interop/ProcessTree.cs | 167 ++++++++ Notify/Interop/Sound.cs | 67 +++ Notify/Interop/VirtualDesktopPinner.cs | 209 ++++++++++ Notify/Interop/Win32.cs | 92 +++++ Notify/Interop/WinTerminalTabs.cs | 299 ++++++++++++++ Notify/Interop/WindowActivator.cs | 72 ++++ Notify/Ipc/IpcConstants.cs | 7 + Notify/Ipc/NotificationSpool.cs | 121 ++++++ Notify/Ipc/NotifyMessage.cs | 29 ++ Notify/Ipc/SpoolWatcher.cs | 43 ++ Notify/Models/StateData.cs | 19 + Notify/Models/ToastRequest.cs | 41 ++ Notify/Models/ToastSettings.cs | 84 ++++ Notify/Notify.csproj | 82 ++++ Notify/Program.cs | 53 +++ Notify/Serialization/AppJsonContext.cs | 14 + Notify/Services/SettingsService.cs | 63 +++ Notify/Services/StateStore.cs | 67 +++ Notify/Services/ToastManager.cs | 120 ++++++ Notify/ViewModels/SettingsViewModel.cs | 105 +++++ Notify/ViewModels/ToastViewModel.cs | 23 ++ Notify/Views/SettingsWindow.axaml | 84 ++++ Notify/Views/SettingsWindow.axaml.cs | 8 + Notify/Views/ToastWindow.axaml | 59 +++ Notify/Views/ToastWindow.axaml.cs | 197 +++++++++ Notify/app.manifest | 18 + README.md | 161 ++++++++ Settings.XamlStyler | 47 +++ docs/architecture.md | 73 ++++ docs/build-and-install.md | 59 +++ docs/hooks-and-cli.md | 60 +++ docs/interop.md | 39 ++ hooks/hooks.json | 64 +++ notify.slnx | 3 + nuget.config | 12 + scripts/build.bat | 26 ++ scripts/notify.cmd | 45 ++ scripts/notify.sh | 40 ++ 53 files changed, 3889 insertions(+) create mode 100644 .claude-plugin/marketplace.json create mode 100644 .claude-plugin/plugin.json create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Directory.Build.props create mode 100644 LICENSE create mode 100644 Notify/App.axaml create mode 100644 Notify/App.axaml.cs create mode 100644 Notify/Assets/JetBrainsMono-ExtraBold.ttf create mode 100644 Notify/Assets/claude.ico create mode 100644 Notify/Assets/notification.wav create mode 100644 Notify/Cli/CliRunner.cs create mode 100644 Notify/Cli/HookInput.cs create mode 100644 Notify/Interop/AppIcon.cs create mode 100644 Notify/Interop/ProcessTree.cs create mode 100644 Notify/Interop/Sound.cs create mode 100644 Notify/Interop/VirtualDesktopPinner.cs create mode 100644 Notify/Interop/Win32.cs create mode 100644 Notify/Interop/WinTerminalTabs.cs create mode 100644 Notify/Interop/WindowActivator.cs create mode 100644 Notify/Ipc/IpcConstants.cs create mode 100644 Notify/Ipc/NotificationSpool.cs create mode 100644 Notify/Ipc/NotifyMessage.cs create mode 100644 Notify/Ipc/SpoolWatcher.cs create mode 100644 Notify/Models/StateData.cs create mode 100644 Notify/Models/ToastRequest.cs create mode 100644 Notify/Models/ToastSettings.cs create mode 100644 Notify/Notify.csproj create mode 100644 Notify/Program.cs create mode 100644 Notify/Serialization/AppJsonContext.cs create mode 100644 Notify/Services/SettingsService.cs create mode 100644 Notify/Services/StateStore.cs create mode 100644 Notify/Services/ToastManager.cs create mode 100644 Notify/ViewModels/SettingsViewModel.cs create mode 100644 Notify/ViewModels/ToastViewModel.cs create mode 100644 Notify/Views/SettingsWindow.axaml create mode 100644 Notify/Views/SettingsWindow.axaml.cs create mode 100644 Notify/Views/ToastWindow.axaml create mode 100644 Notify/Views/ToastWindow.axaml.cs create mode 100644 Notify/app.manifest create mode 100644 README.md create mode 100644 Settings.XamlStyler create mode 100644 docs/architecture.md create mode 100644 docs/build-and-install.md create mode 100644 docs/hooks-and-cli.md create mode 100644 docs/interop.md create mode 100644 hooks/hooks.json create mode 100644 notify.slnx create mode 100644 nuget.config create mode 100644 scripts/build.bat create mode 100644 scripts/notify.cmd create mode 100644 scripts/notify.sh diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..97b9a8b --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,18 @@ +{ + "name": "claude-code-notify", + "description": "Native Windows toast notifications for Claude Code", + "owner": { + "name": "chuan" + }, + "plugins": [ + { + "name": "claude-code-notify", + "description": "Native Windows toast notifications for Claude Code (Avalonia/.NET rewrite)", + "version": "1.0.0", + "source": "./", + "author": { + "name": "chuan" + } + } + ] +} diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..37ae744 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "claude-code-notify", + "description": "Native Windows toast notifications for Claude Code (Avalonia/.NET rewrite)", + "version": "1.0.0", + "author": { + "name": "chuan" + }, + "license": "MIT" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a79f0d2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.xml] +indent_size = 2 + +[*.props] +indent_size = 2 + +[*.csproj] +indent_size = 2 + +[*.targets] +indent_size = 2 + +[*.cs] +csharp_style_namespace_declarations = file_scoped:warning diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e5e1d5b --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# 批处理脚本必须用 CRLF,否则 cmd 解析会出错 +*.bat text eol=crlf +*.cmd text eol=crlf +# shell 脚本必须用 LF +*.sh text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..e87b589 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,7 @@ + + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fc9d1d1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Simscop + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Notify/App.axaml b/Notify/App.axaml new file mode 100644 index 0000000..2c78b80 --- /dev/null +++ b/Notify/App.axaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Notify/App.axaml.cs b/Notify/App.axaml.cs new file mode 100644 index 0000000..9366506 --- /dev/null +++ b/Notify/App.axaml.cs @@ -0,0 +1,121 @@ +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Markup.Xaml; +using Avalonia.Threading; +using Notify.Ipc; +using Notify.Models; +using Notify.Services; +using Notify.ViewModels; +using Notify.Views; + +namespace Notify; + +public partial class App : Application +{ + private SettingsWindow? _settingsWindow; + private SpoolWatcher? _spoolWatcher; + + public static new App Current => (App)Application.Current!; + + public SettingsService Settings { get; } = new(); + + public ToastManager Toasts { get; private set; } = null!; + + public override void Initialize() => AvaloniaXamlLoader.Load(this); + + public override void OnFrameworkInitializationCompleted() + { + Settings.Load(); + Toasts = new ToastManager(Settings); + + // 监视 spool 目录,把 CLI 投递的请求转成 toast + _spoolWatcher = new SpoolWatcher(OnNotify); + _spoolWatcher.Start(); + + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + // 无主窗口的常驻进程:仅托盘存在,靠托盘菜单或外部请求驱动 + desktop.ShutdownMode = ShutdownMode.OnExplicitShutdown; + + // --demo:启动即弹一条 toast 并打开设置,便于无托盘交互地验证 + if (desktop.Args is { Length: > 0 } args && System.Array.IndexOf(args, "--demo") >= 0) + { + Dispatcher.UIThread.Post(RunDemo); + } + } + + base.OnFrameworkInitializationCompleted(); + } + + // 监视线程收到请求,切回 UI 线程弹出 toast + private void OnNotify(NotifyMessage message) + { + if (Settings.Current.PlaySound) + { + Notify.Interop.Sound.Play(); + } + + // 目标窗口已是前台(你正盯着看):完成类通知弹一下即可,用更短的停留 + int? durationOverride = null; + if (!message.InputMode && message.TargetHwnd != 0 && + Notify.Interop.Win32.GetForegroundWindow().ToInt64() == message.TargetHwnd) + { + durationOverride = Settings.Current.FocusedDurationSeconds; + } + + Dispatcher.UIThread.Post(() => Toasts.Show(new ToastRequest + { + Title = message.Title, + Message = message.Message, + InputMode = message.InputMode, + Sticky = message.Sticky, + TargetHwnd = message.TargetHwnd, + WtRuntimeId = message.WtRuntimeId, + IconPath = message.IconPath, + DurationSecondsOverride = durationOverride, + })); + } + + private void RunDemo() + { + // 普通:会自动消失 + Toasts.Show(new ToastRequest { Title = "Claude Code", Message = "任务已完成 — 4 秒后自动消失" }); + // 常驻:InputMode 且 Sticky,不点不消失 + Toasts.Show(new ToastRequest + { + Title = "需要你的输入", + Message = "权限请求 — 常驻,点击 / ✕ 才关闭", + InputMode = true, + Sticky = true, + }); + } + + // 左键单击托盘图标直接打开设置 + private void OnTrayClicked(object? sender, EventArgs e) => OpenSettings(); + + private void OpenSettings() + { + if (_settingsWindow is { } w) + { + w.Activate(); + return; + } + + _settingsWindow = new SettingsWindow + { + DataContext = new SettingsViewModel(Settings, Toasts), + }; + _settingsWindow.Closed += (_, _) => _settingsWindow = null; + _settingsWindow.Show(); + } + + private void OnExitClick(object? sender, EventArgs e) + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + desktop.Shutdown(); + } + } +} diff --git a/Notify/Assets/JetBrainsMono-ExtraBold.ttf b/Notify/Assets/JetBrainsMono-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..435d7a726594da71e23b360e4c040d918b5943b6 GIT binary patch literal 279404 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%0DyV$ff3u$JatEF> zmi+&vkOj|SQcfC|GFtT=WtT1YG-&4$Pi1n^o9jSCS+_ub>!PgEBN$gFX-;xJP9JlL zz9c(e9qq}c`BxcJ!q7Ric3n`$#`(OSb+9k_f7a;iEG>>TiW+Hitij2E?+~W!nOtax znN1@z3QrK4>=I)?I{oPV+&uk2_?ZPCmGl?=mBqxn_LxbF^R0N}cQS`xb-S|Lvc2rg zZWru&#_``Zz_`yzzZDwYjSn}ooS(Fv?Qw5Y>80g8{bNC&apRX$9BB5&ev;AcTk}l+ zMYXSf>mN;jvYf6z-0W(6`jmi`brXG9Q%`@G=p9G-Vz(52HT|sfbDiOQaYrFMCFpuY z{DL5dt2`Pzlg*Jo_IaR}osnOzC%KqC?4wCf^GK|vaQ_ibdSU+!NV`Y8p%UI}$`F(< zq}2$bZIN4^=bR-dbm_ZQR#QfkW5HRWQ*rjs8XM!8hEk%#E$ zMY!f@6aA=6EmnQ>@!X+ zZ8W>O)0M9TPUHJ($Ta83UUGi$=knm8&5}MTUH*>i*F4YmcrKN>Da((dPai+Z)H?OR zw;EXH$zYVj|9ib|<3-~dob=pZ+3-8I(^FY7(o~v+wu%o`_0MjqaXa;s9uvKJ5pn{eb0>Xd27PjDO5O5nJPZ~ zT1Jg(ExBg+^u#0utrL3Uzd6Q9N#LE`t~_h%7n?Gp3+YJ>FBTAC&iGQt;eA>_6Bh5) II_x$72k&2lDgXcg literal 0 HcmV?d00001 diff --git a/Notify/Assets/claude.ico b/Notify/Assets/claude.ico new file mode 100644 index 0000000000000000000000000000000000000000..5df0a49120fb800f4864f1b974a46cf3be70b344 GIT binary patch literal 17014 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 NztIl=m#OnL@E_nGyqEw0 literal 0 HcmV?d00001 diff --git a/Notify/Assets/notification.wav b/Notify/Assets/notification.wav new file mode 100644 index 0000000000000000000000000000000000000000..174122a9d936940451ffcaca4b90f0b770d239ef GIT binary patch literal 308814 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

%H3t=j&3}!Ei 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 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 zFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8 nFexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fexx8Fe&h#fdc +/// 钩子子命令实现:纯互操作 / IPC,绝不加载 Avalonia,做完即退出 +/// +public static class CliRunner +{ + // UserPromptSubmit:记录前台窗口与 prompt + public static int Save() + { + var input = ReadStdin(); + if (string.IsNullOrEmpty(input?.SessionId)) + { + return 0; + } + + var hwnd = Win32.GetForegroundWindow(); + + // 前台是 Windows Terminal 时,记录当前标签的 RuntimeId + var wtRuntimeId = WinTerminalTabs.IsWindowsTerminal(hwnd) + ? WinTerminalTabs.GetSelectedTabRuntimeId(hwnd) + : ""; + + StateStore.Save(input.SessionId, new StateData + { + Hwnd = hwnd.ToInt64(), + Prompt = input.Prompt ?? "", + WtRuntimeId = wtRuntimeId, + CallerExePath = ProcessTree.FindCallerExePath(), + }); + return 0; + } + + // Stop:任务完成通知,正文取本次 prompt + public static int Notify() + { + var input = ReadStdin(); + if (string.IsNullOrEmpty(input?.SessionId)) + { + return 0; + } + + var state = StateStore.Load(input.SessionId); + var message = !string.IsNullOrWhiteSpace(state?.Prompt) ? state!.Prompt : "Task completed"; + + NotificationSpool.Deliver(new NotifyMessage + { + SessionId = input.SessionId, + Title = "Claude Code", + Message = Sanitize(message), + InputMode = false, + Sticky = false, + TargetHwnd = state?.Hwnd ?? 0, + WtRuntimeId = state?.WtRuntimeId, + IconPath = state?.CallerExePath, + }); + return 0; + } + + // Notification / PreToolUse:需要输入,常驻显示 + public static int Input() + { + var input = ReadStdin(); + if (string.IsNullOrEmpty(input?.SessionId)) + { + return 0; + } + + // 过滤无需打扰的类型 + if (input.NotificationType is "auth_success" or "elicitation_complete" or "elicitation_response") + { + return 0; + } + + var (title, message) = Resolve(input); + var state = StateStore.Load(input.SessionId); + + NotificationSpool.Deliver(new NotifyMessage + { + SessionId = input.SessionId, + Title = title, + Message = Sanitize(message), + InputMode = true, + Sticky = true, + TargetHwnd = state?.Hwnd ?? 0, + WtRuntimeId = state?.WtRuntimeId, + IconPath = state?.CallerExePath, + }); + return 0; + } + + // SessionEnd:清理会话状态 + public static int Cleanup() + { + var input = ReadStdin(); + if (!string.IsNullOrEmpty(input?.SessionId)) + { + StateStore.Delete(input.SessionId); + } + + return 0; + } + + // 按 tool_name / notification_type 决定标题与正文,对齐原版语义 + private static (string Title, string Message) Resolve(HookInput input) + { + if (input.ToolName == "AskUserQuestion") + { + var msg = string.IsNullOrEmpty(input.Message) ? "Claude 在向你提问" : input.Message!; + return ("Claude is Asking", msg); + } + + if (input.ToolName == "ExitPlanMode") + { + return ("Plan Ready for Approval", "Claude 提交了一份计划,待批准"); + } + + var title = input.NotificationType switch + { + "permission_prompt" => "Permission Required", + "idle_prompt" => "Claude is Waiting", + "elicitation_dialog" => "MCP Asks", + _ => "Input Required", + }; + var message = string.IsNullOrEmpty(input.Message) ? "Claude needs your input" : input.Message!; + return (title, message); + } + + // 折叠换行/制表/多余空白为单行,避免撑乱 toast 布局(截断交给 toast 的省略号) + private static string Sanitize(string s) + { + if (string.IsNullOrEmpty(s)) + { + return s; + } + + s = s.Replace('\r', ' ').Replace('\n', ' ').Replace('\t', ' '); + while (s.Contains(" ")) + { + s = s.Replace(" ", " "); + } + + return s.Trim(); + } + + // 直接读原始字节并按 UTF-8 解码:WinExe 下 Console.In 不可靠,且其代码页 + // 会把中文解成乱码(GBK),这里绕开 + private static HookInput? ReadStdin() + { + try + { + using var stdin = Console.OpenStandardInput(); + using var ms = new MemoryStream(); + stdin.CopyTo(ms); + + var bytes = ms.ToArray(); + if (bytes.Length == 0) + { + return null; + } + + var text = Encoding.UTF8.GetString(bytes).TrimStart(''); + if (string.IsNullOrWhiteSpace(text)) + { + return null; + } + + return JsonSerializer.Deserialize(text, AppJsonContext.Default.HookInput); + } + catch + { + return null; + } + } +} diff --git a/Notify/Cli/HookInput.cs b/Notify/Cli/HookInput.cs new file mode 100644 index 0000000..306a137 --- /dev/null +++ b/Notify/Cli/HookInput.cs @@ -0,0 +1,24 @@ +using System.Text.Json.Serialization; + +namespace Notify.Cli; + +///

+/// Claude Code 钩子经 stdin 传入的 JSON +/// +public sealed class HookInput +{ + [JsonPropertyName("session_id")] + public string? SessionId { get; set; } + + [JsonPropertyName("prompt")] + public string? Prompt { get; set; } + + [JsonPropertyName("notification_type")] + public string? NotificationType { get; set; } + + [JsonPropertyName("message")] + public string? Message { get; set; } + + [JsonPropertyName("tool_name")] + public string? ToolName { get; set; } +} diff --git a/Notify/Interop/AppIcon.cs b/Notify/Interop/AppIcon.cs new file mode 100644 index 0000000..a38977f --- /dev/null +++ b/Notify/Interop/AppIcon.cs @@ -0,0 +1,202 @@ +using System; +using System.Runtime.InteropServices; +using Avalonia; +using Avalonia.Media.Imaging; +using Avalonia.Platform; + +namespace Notify.Interop; + +/// +/// 从 exe 提取图标并转成 Avalonia 位图 +/// +/// ExtractIconEx 拿 HICON,再用 GDI 读出 BGRA 像素构造 Bitmap;不依赖 +/// System.Drawing(其 AOT 不友好) +/// +internal static partial class AppIcon +{ + public static Bitmap? Extract(string exePath) + { + if (string.IsNullOrEmpty(exePath)) + { + return null; + } + + var hIcon = IntPtr.Zero; + try + { + if (ExtractIconExW(exePath, 0, out hIcon, out _, 1) == 0 || hIcon == IntPtr.Zero) + { + return null; + } + + return IconToBitmap(hIcon); + } + catch + { + return null; + } + finally + { + if (hIcon != IntPtr.Zero) + { + DestroyIcon(hIcon); + } + } + } + + private static Bitmap? IconToBitmap(IntPtr hIcon) + { + if (!GetIconInfo(hIcon, out var ii)) + { + return null; + } + + try + { + var bm = default(BITMAP); + if (GetObjectW(ii.hbmColor, Marshal.SizeOf(), ref bm) == 0 || bm.bmWidth <= 0 || bm.bmHeight <= 0) + { + return null; + } + + var w = bm.bmWidth; + var h = bm.bmHeight; + var buffer = new byte[w * h * 4]; + + var bmi = new BITMAPINFOHEADER + { + biSize = (uint)Marshal.SizeOf(), + biWidth = w, + biHeight = -h, // 负数 = 自上而下,行序正常 + biPlanes = 1, + biBitCount = 32, + biCompression = 0, + }; + + var hdc = GetDC(IntPtr.Zero); + try + { + if (GetDIBits(hdc, ii.hbmColor, 0, (uint)h, buffer, ref bmi, 0) == 0) + { + return null; + } + } + finally + { + ReleaseDC(IntPtr.Zero, hdc); + } + + // 某些老图标无 alpha 通道(全 0),那样会整块透明,补成不透明 + var anyAlpha = false; + for (var i = 3; i < buffer.Length; i += 4) + { + if (buffer[i] != 0) + { + anyAlpha = true; + break; + } + } + + if (!anyAlpha) + { + for (var i = 3; i < buffer.Length; i += 4) + { + buffer[i] = 255; + } + } + + var handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); + try + { + return new Bitmap( + PixelFormat.Bgra8888, + AlphaFormat.Unpremul, + handle.AddrOfPinnedObject(), + new PixelSize(w, h), + new Vector(96, 96), + w * 4); + } + finally + { + handle.Free(); + } + } + finally + { + if (ii.hbmColor != IntPtr.Zero) + { + DeleteObject(ii.hbmColor); + } + + if (ii.hbmMask != IntPtr.Zero) + { + DeleteObject(ii.hbmMask); + } + } + } + + [LibraryImport("shell32.dll", EntryPoint = "ExtractIconExW", StringMarshalling = StringMarshalling.Utf16)] + private static partial uint ExtractIconExW(string lpszFile, int nIconIndex, out IntPtr phiconLarge, out IntPtr phiconSmall, uint nIcons); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool GetIconInfo(IntPtr hIcon, out ICONINFO piconinfo); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool DestroyIcon(IntPtr hIcon); + + [LibraryImport("gdi32.dll", EntryPoint = "GetObjectW")] + private static partial int GetObjectW(IntPtr hgdiobj, int cbBuffer, ref BITMAP lpvObject); + + [LibraryImport("gdi32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool DeleteObject(IntPtr hObject); + + [LibraryImport("gdi32.dll")] + private static partial int GetDIBits(IntPtr hdc, IntPtr hbmp, uint uStartScan, uint cScanLines, [Out] byte[] lpvBits, ref BITMAPINFOHEADER lpbi, uint uUsage); + + [LibraryImport("user32.dll")] + private static partial IntPtr GetDC(IntPtr hWnd); + + [LibraryImport("user32.dll")] + private static partial int ReleaseDC(IntPtr hWnd, IntPtr hDC); +} + +[StructLayout(LayoutKind.Sequential)] +internal struct ICONINFO +{ + public int fIcon; + public uint xHotspot; + public uint yHotspot; + public IntPtr hbmMask; + public IntPtr hbmColor; +} + +[StructLayout(LayoutKind.Sequential)] +internal struct BITMAP +{ + public int bmType; + public int bmWidth; + public int bmHeight; + public int bmWidthBytes; + public ushort bmPlanes; + public ushort bmBitsPixel; + public IntPtr bmBits; +} + +[StructLayout(LayoutKind.Sequential)] +internal struct BITMAPINFOHEADER +{ + public uint biSize; + public int biWidth; + public int biHeight; + public ushort biPlanes; + public ushort biBitCount; + public uint biCompression; + public uint biSizeImage; + public int biXPelsPerMeter; + public int biYPelsPerMeter; + public uint biClrUsed; + public uint biClrImportant; +} diff --git a/Notify/Interop/ProcessTree.cs b/Notify/Interop/ProcessTree.cs new file mode 100644 index 0000000..e62834d --- /dev/null +++ b/Notify/Interop/ProcessTree.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Notify.Interop; + +/// +/// 沿父进程上溯,跳过 shell/运行时,找到真正的调用方 App(编辑器/终端) +/// +internal static partial class ProcessTree +{ + // 这些进程是 shell / 运行时 / 包装器,不是用户面对的 App,跳过继续上溯 + private static readonly HashSet SkipNames = new(StringComparer.OrdinalIgnoreCase) + { + "cmd", "powershell", "pwsh", "bash", "sh", "zsh", "fish", + "wsl", "wslhost", "conhost", "openconsole", + "node", "deno", "bun", "python", "python3", "py", + "uv", "uvx", "npm", "npx", "yarn", "pnpm", + "claude", "dotnet", "git", "env", "busybox", "winpty", "sudo", + "notify", + }; + + public static string FindCallerExePath() + { + try + { + var parents = BuildParentMap(); + var pid = GetCurrentProcessId(); + + for (var i = 0; i < 16; i++) + { + if (!parents.TryGetValue(pid, out var info)) + { + break; + } + + pid = info.Parent; + if (pid == 0 || !parents.TryGetValue(pid, out var anc)) + { + break; + } + + var name = anc.Name; + if (name.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + { + name = name[..^4]; + } + + if (SkipNames.Contains(name)) + { + continue; + } + + // 第一个非 shell/运行时的祖先即调用方 App + return GetFullPath(pid); + } + } + catch + { + // 取不到就回退默认图标 + } + + return ""; + } + + private static Dictionary BuildParentMap() + { + var map = new Dictionary(); + var snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (snapshot == IntPtr.Zero || snapshot == new IntPtr(-1)) + { + return map; + } + + try + { + var entry = default(PROCESSENTRY32W); + entry.dwSize = (uint)Marshal.SizeOf(); + + if (Process32FirstW(snapshot, ref entry)) + { + do + { + map[entry.th32ProcessID] = (entry.th32ParentProcessID, ReadExeName(ref entry)); + } + while (Process32NextW(snapshot, ref entry)); + } + } + finally + { + CloseHandle(snapshot); + } + + return map; + } + + private static unsafe string ReadExeName(ref PROCESSENTRY32W entry) + { + fixed (char* p = entry.szExeFile) + { + return new string(p); + } + } + + private static string GetFullPath(uint pid) + { + var h = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, false, pid); + if (h == IntPtr.Zero) + { + return ""; + } + + try + { + var buf = new char[1024]; + var size = (uint)buf.Length; + return QueryFullProcessImageName(h, 0, ref buf[0], ref size) ? new string(buf, 0, (int)size) : ""; + } + finally + { + CloseHandle(h); + } + } + + private const uint TH32CS_SNAPPROCESS = 0x00000002; + private const uint PROCESS_QUERY_LIMITED_INFORMATION = 0x1000; + + [LibraryImport("kernel32.dll")] + private static partial uint GetCurrentProcessId(); + + [LibraryImport("kernel32.dll")] + private static partial IntPtr CreateToolhelp32Snapshot(uint dwFlags, uint th32ProcessID); + + [LibraryImport("kernel32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool Process32FirstW(IntPtr hSnapshot, ref PROCESSENTRY32W lppe); + + [LibraryImport("kernel32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool Process32NextW(IntPtr hSnapshot, ref PROCESSENTRY32W lppe); + + [LibraryImport("kernel32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool CloseHandle(IntPtr hObject); + + [LibraryImport("kernel32.dll")] + private static partial IntPtr OpenProcess(uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId); + + [LibraryImport("kernel32.dll", EntryPoint = "QueryFullProcessImageNameW", StringMarshalling = StringMarshalling.Utf16)] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool QueryFullProcessImageName(IntPtr hProcess, uint dwFlags, ref char lpExeName, ref uint lpdwSize); +} + +[StructLayout(LayoutKind.Sequential)] +internal unsafe struct PROCESSENTRY32W +{ + public uint dwSize; + public uint cntUsage; + public uint th32ProcessID; + public nint th32DefaultHeapID; + public uint th32ModuleID; + public uint cntThreads; + public uint th32ParentProcessID; + public int pcPriClassBase; + public uint dwFlags; + public fixed char szExeFile[260]; +} diff --git a/Notify/Interop/Sound.cs b/Notify/Interop/Sound.cs new file mode 100644 index 0000000..c546742 --- /dev/null +++ b/Notify/Interop/Sound.cs @@ -0,0 +1,67 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using Avalonia.Platform; + +namespace Notify.Interop; + +/// +/// 播放打包的提示音 wav +/// +/// 用 winmm 的 PlaySound 从内存异步播放;为配合 SND_ASYNC,wav 拷到不会被 GC +/// 移动的非托管内存里常驻 +/// +internal static partial class Sound +{ + private const uint SND_ASYNC = 0x0001; + private const uint SND_NODEFAULT = 0x0002; + private const uint SND_MEMORY = 0x0004; + + private static IntPtr _wavPtr; + private static DateTime _lastPlay = DateTime.MinValue; + + [LibraryImport("winmm.dll", EntryPoint = "PlaySoundW")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool PlaySound(IntPtr pszSound, IntPtr hmod, uint fdwSound); + + public static void Play() + { + // 防连环音:300ms 内只响一次 + var now = DateTime.UtcNow; + if ((now - _lastPlay).TotalMilliseconds < 300) + { + return; + } + + _lastPlay = now; + + try + { + EnsureLoaded(); + if (_wavPtr != IntPtr.Zero) + { + PlaySound(_wavPtr, IntPtr.Zero, SND_MEMORY | SND_ASYNC | SND_NODEFAULT); + } + } + catch + { + // 播放失败无所谓 + } + } + + private static void EnsureLoaded() + { + if (_wavPtr != IntPtr.Zero) + { + return; + } + + using var s = AssetLoader.Open(new Uri("avares://notify/Assets/notification.wav")); + using var ms = new MemoryStream(); + s.CopyTo(ms); + var bytes = ms.ToArray(); + + _wavPtr = Marshal.AllocHGlobal(bytes.Length); + Marshal.Copy(bytes, 0, _wavPtr, bytes.Length); + } +} diff --git a/Notify/Interop/VirtualDesktopPinner.cs b/Notify/Interop/VirtualDesktopPinner.cs new file mode 100644 index 0000000..f7483d8 --- /dev/null +++ b/Notify/Interop/VirtualDesktopPinner.cs @@ -0,0 +1,209 @@ +using System; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.Marshalling; + +namespace Notify.Interop; + +/// +/// 把窗口"钉"到所有虚拟桌面(Win+Tab 切桌面后仍可见) +/// +/// 走 Windows **未公开** 的 COM 接口:ImmersiveShell -> IApplicationViewCollection +/// -> IVirtualDesktopPinnedApps.PinView。GUID/方法顺序随 build 变化,这里用 Win11 24H2 +/// (build 26100) 的定义(来自 MScholtes/VirtualDesktop),实测在 26200 上 GUID 仍匹配 +/// +/// 关键点:IApplicationView 是 IInspectable,而现代 .NET 不支持 IInspectable 封送, +/// 因此这里把 view 当作 **裸 IntPtr** 在 GetViewForHwnd / PinView 之间传递,绕开封送 +/// 任何一步失败都被吞掉,退回"仅当前桌面显示" +/// +/// AOT 说明:接口用源生成 COM(GeneratedComInterface),ImmersiveShell 用 +/// CoCreateInstance 直接拿 IUnknown 指针并经 StrategyBasedComWrappers 包装, +/// 不再依赖内置 COM 封送(NativeAOT 下内置封送会被裁剪) +/// +public static partial class VirtualDesktopPinner +{ + private static readonly StrategyBasedComWrappers ComWrappers = new(); + + private static bool _initialized; + private static bool _available; + private static IApplicationViewCollection? _views; + private static IVirtualDesktopPinnedApps? _pinned; + + /// + /// 最近一次失败的诊断信息(临时排查用) + /// + public static string LastError { get; private set; } = ""; + + /// + /// 尝试把指定窗口钉到所有桌面;返回是否成功 + /// + public static bool TryPin(IntPtr hwnd) + { + if (hwnd == IntPtr.Zero) + { + LastError = "hwnd=0"; + return false; + } + + try + { + EnsureInit(); + if (!_available || _views is null || _pinned is null) + { + LastError = "init failed: " + LastError; + return false; + } + + var view = IntPtr.Zero; + try + { + _views.GetViewForHwnd(hwnd, out view); + if (view == IntPtr.Zero) + { + LastError = "GetViewForHwnd returned null"; + return false; + } + + _pinned.PinView(view); + return true; + } + catch (Exception ex) + { + LastError = "pin: " + ex.GetType().Name + " 0x" + ex.HResult.ToString("X8") + " " + ex.Message; + return false; + } + finally + { + if (view != IntPtr.Zero) + { + Marshal.Release(view); // GetViewForHwnd 返回的指针已 AddRef + } + } + } + catch (Exception ex) + { + LastError = "outer: " + ex.GetType().Name + " " + ex.Message; + return false; + } + } + + private static void EnsureInit() + { + if (_initialized) + { + return; + } + + _initialized = true; + var shellPtr = IntPtr.Zero; + try + { + // 用 CoCreateInstance 直接拿 ImmersiveShell 的 IServiceProvider10 指针 + // 等价于经典写法 Activator.CreateInstance(GetTypeFromCLSID(...)) 但 AOT 友好 + var clsid = CLSID_ImmersiveShell; + var iidServiceProvider = IID_IServiceProvider10; + // ImmersiveShell 是本地服务器,必须用 CLSCTX_LOCAL_SERVER + // 仅传 INPROC_SERVER 会得到 0x80040154 REGDB_E_CLASSNOTREG + var hr = CoCreateInstance(ref clsid, IntPtr.Zero, CLSCTX_LOCAL_SERVER, ref iidServiceProvider, out shellPtr); + if (hr < 0 || shellPtr == IntPtr.Zero) + { + throw new InvalidOperationException("CoCreateInstance(ImmersiveShell) 0x" + hr.ToString("X8")); + } + + var shell = (IServiceProvider10)ComWrappers.GetOrCreateObjectForComInstance(shellPtr, CreateObjectFlags.None); + + var viewCollectionGuid = IID_IApplicationViewCollection; + var viewsPtr = shell.QueryService(ref viewCollectionGuid, ref viewCollectionGuid); + _views = WrapRequired(viewsPtr, "IApplicationViewCollection"); + + var pinnedGuid = IID_IVirtualDesktopPinnedApps; + var clsidPinned = CLSID_VirtualDesktopPinnedApps; + var pinnedPtr = shell.QueryService(ref clsidPinned, ref pinnedGuid); + _pinned = WrapRequired(pinnedPtr, "IVirtualDesktopPinnedApps"); + + _available = true; + } + catch (Exception ex) + { + _available = false; + LastError = "EnsureInit: " + ex.GetType().Name + " 0x" + ex.HResult.ToString("X8") + " " + ex.Message; + } + finally + { + if (shellPtr != IntPtr.Zero) + { + // GetOrCreateObjectForComInstance 持有了自己的引用,释放本地这一份 + Marshal.Release(shellPtr); + } + } + } + + // 把 QueryService 返回的裸 IUnknown 指针包装成托管 RCW,并释放本地引用 + private static T WrapRequired(IntPtr unknown, string name) + { + if (unknown == IntPtr.Zero) + { + throw new InvalidOperationException("QueryService(" + name + ") 返回 null"); + } + + try + { + return (T)ComWrappers.GetOrCreateObjectForComInstance(unknown, CreateObjectFlags.None); + } + finally + { + Marshal.Release(unknown); + } + } + + private const int CLSCTX_LOCAL_SERVER = 4; + + // --- CLSIDs / IIDs --- + private static readonly Guid CLSID_ImmersiveShell = new("C2F03A33-21F5-47FA-B4BB-156362A2F239"); + private static readonly Guid CLSID_VirtualDesktopPinnedApps = new("B5A399E7-1C87-46B8-88E9-FC5747B171BD"); + private static readonly Guid IID_IServiceProvider10 = new("6D5140C1-7436-11CE-8034-00AA006009FA"); + private static readonly Guid IID_IApplicationViewCollection = new("1841C6D7-4F9D-42C0-AF41-8747538F10E5"); + private static readonly Guid IID_IVirtualDesktopPinnedApps = new("4CE81583-1E4C-4632-A621-07A53543148F"); + + [LibraryImport("ole32.dll")] + private static partial int CoCreateInstance( + ref Guid rclsid, + IntPtr pUnkOuter, + int dwClsContext, + ref Guid riid, + out IntPtr ppv); +} + +// ImmersiveShell 的 IServiceProvider(与系统 IServiceProvider 不同) +// QueryService 返回裸 IUnknown 指针(nint),由调用方用 ComWrappers 包装 +[GeneratedComInterface] +[Guid("6D5140C1-7436-11CE-8034-00AA006009FA")] +internal partial interface IServiceProvider10 +{ + IntPtr QueryService(ref Guid service, ref Guid riid); +} + +// 只声明到 GetViewForHwnd(第 4 个方法);view 用 IntPtr,避免 IInspectable 封送 +[GeneratedComInterface] +[Guid("1841C6D7-4F9D-42C0-AF41-8747538F10E5")] +internal partial interface IApplicationViewCollection +{ + int GetViews(out IntPtr array); + int GetViewsByZOrder(out IntPtr array); + int GetViewsByAppUserModelId([MarshalAs(UnmanagedType.LPWStr)] string id, out IntPtr array); + int GetViewForHwnd(IntPtr hwnd, out IntPtr view); +} + +// view 参数同样用 IntPtr +[GeneratedComInterface] +[Guid("4CE81583-1E4C-4632-A621-07A53543148F")] +internal partial interface IVirtualDesktopPinnedApps +{ + [return: MarshalAs(UnmanagedType.Bool)] + bool IsAppIdPinned([MarshalAs(UnmanagedType.LPWStr)] string appId); + void PinAppID([MarshalAs(UnmanagedType.LPWStr)] string appId); + void UnpinAppID([MarshalAs(UnmanagedType.LPWStr)] string appId); + [return: MarshalAs(UnmanagedType.Bool)] + bool IsViewPinned(IntPtr applicationView); + void PinView(IntPtr applicationView); + void UnpinView(IntPtr applicationView); +} diff --git a/Notify/Interop/Win32.cs b/Notify/Interop/Win32.cs new file mode 100644 index 0000000..e3d1c85 --- /dev/null +++ b/Notify/Interop/Win32.cs @@ -0,0 +1,92 @@ +using System; +using System.Runtime.InteropServices; + +namespace Notify.Interop; + +internal static partial class Win32 +{ + [LibraryImport("user32.dll")] + internal static partial IntPtr GetForegroundWindow(); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool SetForegroundWindow(IntPtr hWnd); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool AllowSetForegroundWindow(uint dwProcessId); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool AttachThreadInput(uint idAttach, uint idAttachTo, [MarshalAs(UnmanagedType.Bool)] bool fAttach); + + [LibraryImport("user32.dll")] + internal static partial uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool BringWindowToTop(IntPtr hWnd); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool ShowWindow(IntPtr hWnd, int nCmdShow); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool IsIconic(IntPtr hWnd); + + [LibraryImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static partial bool IsWindow(IntPtr hWnd); + + [LibraryImport("user32.dll")] + internal static partial void SwitchToThisWindow(IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)] bool fAltTab); + + [LibraryImport("user32.dll")] + internal static partial void keybd_event(byte bVk, byte bScan, uint dwFlags, IntPtr dwExtraInfo); + + [LibraryImport("kernel32.dll")] + internal static partial uint GetCurrentThreadId(); + + [LibraryImport("user32.dll", EntryPoint = "GetClassNameW", StringMarshalling = StringMarshalling.Utf16)] + internal static partial int GetClassName(IntPtr hWnd, ref char lpClassName, int nMaxCount); + + [LibraryImport("user32.dll", EntryPoint = "GetWindowLongPtrW")] + internal static partial IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex); + + [LibraryImport("user32.dll", EntryPoint = "SetWindowLongPtrW")] + internal static partial IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + + // 把窗口设为工具窗口:从任务栏与 Alt+Tab 中隐藏 + internal static void MakeToolWindow(IntPtr hWnd) + { + var ex = GetWindowLongPtr(hWnd, GWL_EXSTYLE).ToInt64(); + ex = (ex | WS_EX_TOOLWINDOW) & ~WS_EX_APPWINDOW; + SetWindowLongPtr(hWnd, GWL_EXSTYLE, new IntPtr(ex)); + } + + // 取窗口类名 + internal static string GetClassNameOf(IntPtr hWnd) + { + var buf = new char[256]; + var n = GetClassName(hWnd, ref buf[0], buf.Length); + return n > 0 ? new string(buf, 0, n) : ""; + } + + // --- 常量 --- + internal const uint ASFW_ANY = 0xFFFFFFFF; + internal const int SW_RESTORE = 9; + internal const int SW_SHOW = 5; + internal const uint SWP_NOSIZE = 0x0001; + internal const uint SWP_NOMOVE = 0x0002; + internal const uint SWP_SHOWWINDOW = 0x0040; + internal const byte VK_MENU = 0x12; + internal const uint KEYEVENTF_KEYUP = 0x0002; + internal const int GWL_EXSTYLE = -20; + internal const long WS_EX_TOOLWINDOW = 0x00000080; + internal const long WS_EX_APPWINDOW = 0x00040000; +} diff --git a/Notify/Interop/WinTerminalTabs.cs b/Notify/Interop/WinTerminalTabs.cs new file mode 100644 index 0000000..0636f1a --- /dev/null +++ b/Notify/Interop/WinTerminalTabs.cs @@ -0,0 +1,299 @@ +using System; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.Marshalling; +using System.Text; + +namespace Notify.Interop; + +/// +/// Windows Terminal 标签页的捕获与切换 +/// +/// save 时记录当前选中标签的 RuntimeId,点击通知激活窗口后再据此切回该标签 +/// 全程走源生成 COM(GeneratedComInterface),保证 NativeAOT 兼容 +/// vtable 顺序与 GUID 均取自 Windows SDK UIAutomationClient.h +/// +public static partial class WinTerminalTabs +{ + private const string WtClass = "CASCADIA_HOSTING_WINDOW_CLASS"; + + private const int TreeScopeDescendants = 4; + private const int ControlTypePropertyId = 30003; + private const int IsSelectedPropertyId = 30079; + private const int TabItemControlTypeId = 50019; + private const int SelectionItemPatternId = 10010; + + private const int CLSCTX_INPROC_SERVER = 1; + + private static readonly StrategyBasedComWrappers ComWrappers = new(); + private static IUIAutomation? _uia; + private static bool _initTried; + + public static bool IsWindowsTerminal(IntPtr hwnd) => + hwnd != IntPtr.Zero && Win32.GetClassNameOf(hwnd) == WtClass; + + // 返回当前选中标签的 RuntimeId 串,失败返回空串 + public static string GetSelectedTabRuntimeId(IntPtr hwnd) + { + try + { + var uia = EnsureUia(); + if (uia is null) + { + return ""; + } + + var root = uia.ElementFromHandle(hwnd); + var cond = uia.CreateTrueCondition(); + var all = root.FindAll(TreeScopeDescendants, cond); + + var count = all.Length(); + for (var i = 0; i < count; i++) + { + var el = all.GetElement(i); + if (GetIntProperty(el, ControlTypePropertyId) != TabItemControlTypeId) + { + continue; + } + + if (GetBoolProperty(el, IsSelectedPropertyId)) + { + return RuntimeIdOf(el); + } + } + } + catch + { + // 任何 COM 异常退回空串 + } + + return ""; + } + + // 在已激活的 WT 窗口里找到匹配 RuntimeId 的标签并选中 + public static bool SelectTab(IntPtr hwnd, string runtimeId) + { + if (string.IsNullOrEmpty(runtimeId)) + { + return false; + } + + try + { + var uia = EnsureUia(); + if (uia is null) + { + return false; + } + + var root = uia.ElementFromHandle(hwnd); + var cond = uia.CreateTrueCondition(); + var all = root.FindAll(TreeScopeDescendants, cond); + + var count = all.Length(); + for (var i = 0; i < count; i++) + { + var el = all.GetElement(i); + if (GetIntProperty(el, ControlTypePropertyId) != TabItemControlTypeId) + { + continue; + } + + if (RuntimeIdOf(el) != runtimeId) + { + continue; + } + + var pattern = el.GetCurrentPattern(SelectionItemPatternId); + if (pattern is null) + { + return false; + } + + pattern.Select(); + return true; + } + } + catch + { + // 切换失败不影响窗口已被激活 + } + + return false; + } + + private static IUIAutomation? EnsureUia() + { + if (_initTried) + { + return _uia; + } + + _initTried = true; + try + { + var clsid = new Guid("ff48dba4-60ef-4201-aa87-54103eef594e"); + var iid = typeof(IUIAutomation).GUID; + var hr = CoCreateInstance(ref clsid, IntPtr.Zero, CLSCTX_INPROC_SERVER, ref iid, out var ptr); + if (hr >= 0 && ptr != IntPtr.Zero) + { + _uia = (IUIAutomation)ComWrappers.GetOrCreateObjectForComInstance(ptr, CreateObjectFlags.None); + Marshal.Release(ptr); + } + } + catch + { + _uia = null; + } + + return _uia; + } + + private static int GetIntProperty(IUIAutomationElement el, int propertyId) + { + var v = el.GetCurrentPropertyValue(propertyId); + return v.lVal; + } + + private static bool GetBoolProperty(IUIAutomationElement el, int propertyId) + { + var v = el.GetCurrentPropertyValue(propertyId); + return v.boolVal != 0; + } + + // RuntimeId 是一个 int 数组(SAFEARRAY),拼成点分串用于比较 + private static string RuntimeIdOf(IUIAutomationElement el) + { + var psa = el.GetRuntimeId(); + if (psa == IntPtr.Zero) + { + return ""; + } + + try + { + if (SafeArrayGetLBound(psa, 1, out var lb) < 0 || SafeArrayGetUBound(psa, 1, out var ub) < 0) + { + return ""; + } + + var sb = new StringBuilder(); + for (var idx = lb; idx <= ub; idx++) + { + var i = idx; + if (SafeArrayGetElement(psa, ref i, out var val) < 0) + { + return ""; + } + + if (sb.Length > 0) + { + sb.Append('.'); + } + + sb.Append(val); + } + + return sb.ToString(); + } + finally + { + SafeArrayDestroy(psa); + } + } + + [LibraryImport("ole32.dll")] + private static partial int CoCreateInstance(ref Guid rclsid, IntPtr pUnkOuter, int dwClsContext, ref Guid riid, out IntPtr ppv); + + [LibraryImport("oleaut32.dll")] + private static partial int SafeArrayGetLBound(IntPtr psa, uint nDim, out int plLbound); + + [LibraryImport("oleaut32.dll")] + private static partial int SafeArrayGetUBound(IntPtr psa, uint nDim, out int plUbound); + + [LibraryImport("oleaut32.dll")] + private static partial int SafeArrayGetElement(IntPtr psa, ref int rgIndices, out int pv); + + [LibraryImport("oleaut32.dll")] + private static partial int SafeArrayDestroy(IntPtr psa); +} + +// VARIANT 的最小化布局(x64 为 24 字节),只读 VT_I4 / VT_BOOL +[StructLayout(LayoutKind.Explicit, Size = 24)] +internal struct VARIANT +{ + [FieldOffset(0)] + public ushort vt; + + [FieldOffset(8)] + public int lVal; + + [FieldOffset(8)] + public short boolVal; +} + +[GeneratedComInterface] +[Guid("30cbe57d-d9d0-452a-ab13-7ac5ac4825ee")] +internal partial interface IUIAutomation +{ + void _CompareElements(); + void _CompareRuntimeIds(); + void _GetRootElement(); + IUIAutomationElement ElementFromHandle(IntPtr hwnd); + void _ElementFromPoint(); + void _GetFocusedElement(); + void _GetRootElementBuildCache(); + void _ElementFromHandleBuildCache(); + void _ElementFromPointBuildCache(); + void _GetFocusedElementBuildCache(); + void _CreateTreeWalker(); + void _get_ControlViewWalker(); + void _get_ContentViewWalker(); + void _get_RawViewWalker(); + void _get_RawViewCondition(); + void _get_ControlViewCondition(); + void _get_ContentViewCondition(); + void _CreateCacheRequest(); + IUIAutomationCondition CreateTrueCondition(); +} + +[GeneratedComInterface] +[Guid("d22108aa-8ac5-49a5-837b-37bbb3d7591e")] +internal partial interface IUIAutomationElement +{ + void _SetFocus(); + IntPtr GetRuntimeId(); + void _FindFirst(); + IUIAutomationElementArray FindAll(int scope, IUIAutomationCondition condition); + void _FindFirstBuildCache(); + void _FindAllBuildCache(); + void _BuildUpdatedCache(); + VARIANT GetCurrentPropertyValue(int propertyId); + void _GetCurrentPropertyValueEx(); + void _GetCachedPropertyValue(); + void _GetCachedPropertyValueEx(); + void _GetCurrentPatternAs(); + void _GetCachedPatternAs(); + [return: MarshalUsing(typeof(UniqueComInterfaceMarshaller))] + IUIAutomationSelectionItemPattern? GetCurrentPattern(int patternId); +} + +[GeneratedComInterface] +[Guid("14314595-b4bc-4055-95f2-58f2e42c9855")] +internal partial interface IUIAutomationElementArray +{ + int Length(); + IUIAutomationElement GetElement(int index); +} + +[GeneratedComInterface] +[Guid("352ffba8-0973-437c-a61f-f64cafd81df9")] +internal partial interface IUIAutomationCondition +{ +} + +[GeneratedComInterface] +[Guid("a8efa66a-0fda-421a-9194-38021f3578ea")] +internal partial interface IUIAutomationSelectionItemPattern +{ + void Select(); +} diff --git a/Notify/Interop/WindowActivator.cs b/Notify/Interop/WindowActivator.cs new file mode 100644 index 0000000..d39590e --- /dev/null +++ b/Notify/Interop/WindowActivator.cs @@ -0,0 +1,72 @@ +using System; + +namespace Notify.Interop; + +/// +/// 把目标窗口拉回前台 +/// +/// Windows 限制后台进程抢焦点,这里用一套组合技绕过:ALT 键模拟 + +/// AttachThreadInput 把当前线程与前台/目标线程的输入队列挂接 + +/// SetWindowPos/BringWindowToTop/SwitchToThisWindow/SetForegroundWindow 多管齐下 +/// +public static class WindowActivator +{ + public static bool Activate(IntPtr hwnd) + { + if (hwnd == IntPtr.Zero || !Win32.IsWindow(hwnd)) + { + return false; + } + + try + { + // 最小化的先还原 + if (Win32.IsIconic(hwnd)) + { + Win32.ShowWindow(hwnd, Win32.SW_RESTORE); + } + + var foreground = Win32.GetForegroundWindow(); + var curThread = Win32.GetCurrentThreadId(); + var fgThread = Win32.GetWindowThreadProcessId(foreground, out _); + var targetThread = Win32.GetWindowThreadProcessId(hwnd, out _); + + // 模拟一次 ALT 抬起,满足 Windows 的"防焦点抢占"前置条件 + Win32.keybd_event(Win32.VK_MENU, 0, 0, IntPtr.Zero); + Win32.keybd_event(Win32.VK_MENU, 0, Win32.KEYEVENTF_KEYUP, IntPtr.Zero); + + if (fgThread != curThread) + { + Win32.AttachThreadInput(curThread, fgThread, true); + } + + if (targetThread != curThread && targetThread != fgThread) + { + Win32.AttachThreadInput(curThread, targetThread, true); + } + + Win32.AllowSetForegroundWindow(Win32.ASFW_ANY); + Win32.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, Win32.SWP_NOMOVE | Win32.SWP_NOSIZE | Win32.SWP_SHOWWINDOW); + Win32.BringWindowToTop(hwnd); + Win32.SwitchToThisWindow(hwnd, true); + Win32.SetForegroundWindow(hwnd); + Win32.ShowWindow(hwnd, Win32.SW_SHOW); + + if (targetThread != curThread && targetThread != fgThread) + { + Win32.AttachThreadInput(curThread, targetThread, false); + } + + if (fgThread != curThread) + { + Win32.AttachThreadInput(curThread, fgThread, false); + } + + return Win32.GetForegroundWindow() == hwnd; + } + catch + { + return false; + } + } +} diff --git a/Notify/Ipc/IpcConstants.cs b/Notify/Ipc/IpcConstants.cs new file mode 100644 index 0000000..0fafb53 --- /dev/null +++ b/Notify/Ipc/IpcConstants.cs @@ -0,0 +1,7 @@ +namespace Notify.Ipc; + +internal static class IpcConstants +{ + // 保证 Host 单例的互斥量名(Local 级,按用户会话隔离) + public const string HostMutexName = "ClaudeCodeNotifyHost"; +} diff --git a/Notify/Ipc/NotificationSpool.cs b/Notify/Ipc/NotificationSpool.cs new file mode 100644 index 0000000..3409150 --- /dev/null +++ b/Notify/Ipc/NotificationSpool.cs @@ -0,0 +1,121 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Text.Json; +using System.Threading; +using Notify.Serialization; + +namespace Notify.Ipc; + +/// +/// 基于落盘队列的非阻塞投递:CLI 写文件后立即返回,Host 监视目录消费 +/// +/// 取代命名管道,避免 CLI 在 Host 冷启动时被阻塞而拖住 Claude Code +/// +public static class NotificationSpool +{ + public static readonly string Dir = + Path.Combine(Path.GetTempPath(), "claude-notify-spool"); + + // CLI 侧:写入一条请求,必要时拉起 Host,全程不阻塞 + public static void Deliver(NotifyMessage message) + { + try + { + Directory.CreateDirectory(Dir); + + // 先写 .tmp 再原子改名为 .json,避免 Host 读到半截文件 + var id = Guid.NewGuid().ToString("N"); + var tmp = Path.Combine(Dir, id + ".tmp"); + var final = Path.Combine(Dir, id + ".json"); + File.WriteAllText(tmp, JsonSerializer.Serialize(message, AppJsonContext.Default.NotifyMessage)); + File.Move(tmp, final); + } + catch + { + // 写入失败则放弃这条通知,绝不影响调用方 + } + + EnsureHostRunning(); + } + + // Host 未运行则拉起(不等待);运行中则什么都不做 + private static void EnsureHostRunning() + { + try + { + if (Mutex.TryOpenExisting(IpcConstants.HostMutexName, out var existing)) + { + existing.Dispose(); + return; + } + } + catch + { + // 打不开就当作未运行,继续尝试拉起 + } + + try + { + var exe = Environment.ProcessPath; + if (exe is null) + { + return; + } + + // 必须用 UseShellExecute=true 让 host 彻底脱离本进程的标准句柄 + // 否则常驻 host 会继承并攥住钩子的 stdout 管道,导致 Claude Code + // 等不到管道 EOF 而卡在 "running stop hook" + Process.Start(new ProcessStartInfo + { + FileName = exe, + Arguments = "host", + UseShellExecute = true, + WindowStyle = ProcessWindowStyle.Hidden, + }); + } + catch + { + // 拉起失败则该通知会在下次 Host 启动时由 DrainExisting 补弹 + } + } + + // Host 侧:消费单个 spool 文件并删除 + public static NotifyMessage? ReadAndRemove(string path) + { + try + { + var json = File.ReadAllText(path); + File.Delete(path); + return JsonSerializer.Deserialize(json, AppJsonContext.Default.NotifyMessage); + } + catch + { + return null; + } + } + + // Host 启动时把已有的 spool 文件补弹一遍 + public static void DrainExisting(Action handler) + { + try + { + if (!Directory.Exists(Dir)) + { + return; + } + + foreach (var path in Directory.GetFiles(Dir, "*.json")) + { + if (ReadAndRemove(path) is { } msg) + { + handler(msg); + } + } + } + catch + { + // 忽略 + } + } +} diff --git a/Notify/Ipc/NotifyMessage.cs b/Notify/Ipc/NotifyMessage.cs new file mode 100644 index 0000000..9146160 --- /dev/null +++ b/Notify/Ipc/NotifyMessage.cs @@ -0,0 +1,29 @@ +namespace Notify.Ipc; + +/// +/// 一条投递给 Host 的弹窗请求,经 spool 文件传递 +/// +public sealed class NotifyMessage +{ + public string Title { get; set; } = ""; + + public string Message { get; set; } = ""; + + // true = 需要输入(青色边框) + public bool InputMode { get; set; } + + // true = 常驻,不自动消失 + public bool Sticky { get; set; } + + // 触发该通知的会话 id + public string? SessionId { get; set; } + + // 点击 toast 时要激活的目标窗口句柄,0 表示无 + public long TargetHwnd { get; set; } + + // 目标若为 Windows Terminal,激活后要切回的标签 RuntimeId + public string? WtRuntimeId { get; set; } + + // 调用方 App 的 exe 路径,用于显示其图标 + public string? IconPath { get; set; } +} diff --git a/Notify/Ipc/SpoolWatcher.cs b/Notify/Ipc/SpoolWatcher.cs new file mode 100644 index 0000000..8580fe2 --- /dev/null +++ b/Notify/Ipc/SpoolWatcher.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; + +namespace Notify.Ipc; + +/// +/// Host 侧:监视 spool 目录,新文件出现即消费并回调 +/// +public sealed class SpoolWatcher +{ + private readonly Action _onMessage; + private FileSystemWatcher? _watcher; + + public SpoolWatcher(Action onMessage) => _onMessage = onMessage; + + public void Start() + { + Directory.CreateDirectory(NotificationSpool.Dir); + + // 先补弹启动前堆积的请求 + NotificationSpool.DrainExisting(_onMessage); + + _watcher = new FileSystemWatcher(NotificationSpool.Dir, "*.json") + { + NotifyFilter = NotifyFilters.FileName, + EnableRaisingEvents = true, + }; + _watcher.Created += OnCreated; + _watcher.Renamed += OnRenamed; + } + + private void OnCreated(object sender, FileSystemEventArgs e) => Handle(e.FullPath); + + private void OnRenamed(object sender, RenamedEventArgs e) => Handle(e.FullPath); + + private void Handle(string path) + { + if (NotificationSpool.ReadAndRemove(path) is { } msg) + { + _onMessage(msg); + } + } +} diff --git a/Notify/Models/StateData.cs b/Notify/Models/StateData.cs new file mode 100644 index 0000000..460a672 --- /dev/null +++ b/Notify/Models/StateData.cs @@ -0,0 +1,19 @@ +namespace Notify.Models; + +/// +/// 每会话持久化的状态,由 save 钩子写入、notify 钩子与点击激活读取 +/// +public sealed class StateData +{ + // 触发时的前台窗口句柄 + public long Hwnd { get; set; } + + // 用户当次输入的 prompt,用作"任务完成"通知的正文 + public string Prompt { get; set; } = ""; + + // 若前台是 Windows Terminal,记录当时选中标签的 RuntimeId,用于点击后切回 + public string WtRuntimeId { get; set; } = ""; + + // 调用方 App 的 exe 路径,用于提取并显示其图标 + public string CallerExePath { get; set; } = ""; +} diff --git a/Notify/Models/ToastRequest.cs b/Notify/Models/ToastRequest.cs new file mode 100644 index 0000000..7c79e4c --- /dev/null +++ b/Notify/Models/ToastRequest.cs @@ -0,0 +1,41 @@ +namespace Notify.Models; + +/// +/// 一次弹窗请求(后续由 hook / named pipe 投递) +/// +public sealed class ToastRequest +{ + public required string Title { get; init; } + + public required string Message { get; init; } + + /// + /// true = 需要输入(黄色边框),false = 任务完成(橙色边框) + /// + public bool InputMode { get; init; } + + /// + /// true = 常驻:不自动消失,只能点击 / ✕ 关闭 + /// + public bool Sticky { get; init; } + + /// + /// 点击 toast 主体时要激活的窗口句柄,0 表示不激活 + /// + public long TargetHwnd { get; init; } + + /// + /// 目标若为 Windows Terminal,激活后要切回的标签 RuntimeId + /// + public string? WtRuntimeId { get; init; } + + /// + /// 调用方 App 的 exe 路径,用于显示其图标 + /// + public string? IconPath { get; init; } + + /// + /// 覆盖停留秒数;为 null 时用设置里的默认值 + /// + public int? DurationSecondsOverride { get; init; } +} diff --git a/Notify/Models/ToastSettings.cs b/Notify/Models/ToastSettings.cs new file mode 100644 index 0000000..de2456f --- /dev/null +++ b/Notify/Models/ToastSettings.cs @@ -0,0 +1,84 @@ +namespace Notify.Models; + +/// +/// 水平方向:决定 toast 贴左/居中/贴右 +/// +public enum HEdge +{ + Left, + Center, + Right, +} + +/// +/// 垂直方向:决定 toast 贴上/居中/贴下,并决定堆叠方向 +/// +public enum VEdge +{ + Top, + Center, + Bottom, +} + +/// +/// 持久化的弹窗设置(纯数据模型,序列化到磁盘) +/// +public sealed class ToastSettings +{ + /// + /// 自动消失前的停留秒数 + /// + public int DurationSeconds { get; set; } = 4; + + /// + /// 目标窗口已在前台时的停留秒数(你正盯着看,弹一下即可) + /// + public int FocusedDurationSeconds { get; set; } = 2; + + /// + /// 水平方向 + /// + public HEdge Horizontal { get; set; } = HEdge.Right; + + /// + /// 垂直方向 + /// + public VEdge Vertical { get; set; } = VEdge.Bottom; + + /// + /// 与屏幕边缘的留白(DIP) + /// + public int Margin { get; set; } = 12; + + /// + /// 不透明度 0–1 + /// + public double Opacity { get; set; } = 0.96; + + /// + /// 最多同时可见的 toast 数量,超出则排队 + /// + public int MaxVisible { get; set; } = 5; + + /// + /// 是否播放提示音 + /// + public bool PlaySound { get; set; } = true; + + /// + /// toast 宽度(DIP) + /// + public double Width { get; set; } = 340; + + /// + /// 淡入/淡出时长(毫秒) + /// + public int FadeMilliseconds { get; set; } = 300; + + /// + /// 跨所有虚拟桌面显示(未公开 API,失败自动退回单桌面) + /// + public bool ShowOnAllDesktops { get; set; } = true; + + public ToastSettings Clone() => (ToastSettings)MemberwiseClone(); +} diff --git a/Notify/Notify.csproj b/Notify/Notify.csproj new file mode 100644 index 0000000..9570b4c --- /dev/null +++ b/Notify/Notify.csproj @@ -0,0 +1,82 @@ + + + + WinExe + net10.0-windows + enable + latest + true + app.manifest + true + Assets\claude.ico + Notify + notify + 1.0.0 + true + true + + + + + win-x64 + true + false + Size + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_AotJunk Include="$(PublishDir)*.dll" /> + <_AotJunk Include="$(PublishDir)*.lib" /> + <_AotJunk Include="$(PublishDir)*.pdb" /> + + + + + diff --git a/Notify/Program.cs b/Notify/Program.cs new file mode 100644 index 0000000..ab6e241 --- /dev/null +++ b/Notify/Program.cs @@ -0,0 +1,53 @@ +using System; +using System.Threading; +using Avalonia; +using Avalonia.Controls; +using Notify.Cli; +using Notify.Ipc; + +namespace Notify; + +internal static class Program +{ + // 保活期间持有,确保 Host 单例 + private static Mutex? _hostMutex; + + // Avalonia configuration, don't remove; also used by the visual designer. + public static AppBuilder BuildAvaloniaApp() => + AppBuilder.Configure() + .UsePlatformDetect() + .WithInterFont() + .LogToTrace(); + + [STAThread] + public static int Main(string[] args) + { + var mode = args.Length > 0 ? args[0].ToLowerInvariant() : "host"; + + // 钩子子命令:纯互操作 / IPC,不加载 Avalonia + return mode switch + { + "save" => CliRunner.Save(), + "notify" => CliRunner.Notify(), + "input" => CliRunner.Input(), + "cleanup" => CliRunner.Cleanup(), + _ => RunHost(args), + }; + } + + // 常驻 Host:加载 Avalonia,无主窗口保活,监听命名管道 + private static int RunHost(string[] args) + { + _hostMutex = new Mutex(true, IpcConstants.HostMutexName, out var created); + if (!created) + { + // 已有 Host 在跑,本进程退出 + return 0; + } + + BuildAvaloniaApp() + // OnExplicitShutdown = 持续保活:没有主窗口也不会退出,只有显式 Shutdown 才结束 + .StartWithClassicDesktopLifetime(args, ShutdownMode.OnExplicitShutdown); + return 0; + } +} diff --git a/Notify/Serialization/AppJsonContext.cs b/Notify/Serialization/AppJsonContext.cs new file mode 100644 index 0000000..0c7eed1 --- /dev/null +++ b/Notify/Serialization/AppJsonContext.cs @@ -0,0 +1,14 @@ +using System.Text.Json.Serialization; +using Notify.Cli; +using Notify.Ipc; +using Notify.Models; + +namespace Notify.Serialization; + +// System.Text.Json 源生成:为后续 NativeAOT 准备,避免反射序列化被裁剪 +[JsonSourceGenerationOptions(WriteIndented = true, UseStringEnumConverter = true)] +[JsonSerializable(typeof(ToastSettings))] +[JsonSerializable(typeof(StateData))] +[JsonSerializable(typeof(HookInput))] +[JsonSerializable(typeof(NotifyMessage))] +internal partial class AppJsonContext : JsonSerializerContext; diff --git a/Notify/Services/SettingsService.cs b/Notify/Services/SettingsService.cs new file mode 100644 index 0000000..169f5fc --- /dev/null +++ b/Notify/Services/SettingsService.cs @@ -0,0 +1,63 @@ +using System; +using System.IO; +using System.Text.Json; +using Notify.Models; +using Notify.Serialization; + +namespace Notify.Services; + +/// +/// 加载/保存弹窗设置,并在变更时通知订阅者 +/// +public sealed class SettingsService +{ + private static readonly string Dir = + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ClaudeCodeNotify"); + + private static readonly string FilePath = Path.Combine(Dir, "settings.json"); + + public ToastSettings Current { get; private set; } = new(); + + /// + /// 设置被保存后触发 + /// + public event Action? Changed; + + public void Load() + { + try + { + if (File.Exists(FilePath)) + { + var json = File.ReadAllText(FilePath); + var loaded = JsonSerializer.Deserialize(json, AppJsonContext.Default.ToastSettings); + if (loaded is not null) + { + Current = loaded; + } + } + } + catch + { + // 配置损坏则回退到默认值,不影响保活 + Current = new ToastSettings(); + } + } + + public void Save(ToastSettings settings) + { + Current = settings; + try + { + Directory.CreateDirectory(Dir); + var json = JsonSerializer.Serialize(settings, AppJsonContext.Default.ToastSettings); + File.WriteAllText(FilePath, json); + } + catch + { + // 落盘失败不致命,内存里仍生效 + } + + Changed?.Invoke(Current); + } +} diff --git a/Notify/Services/StateStore.cs b/Notify/Services/StateStore.cs new file mode 100644 index 0000000..51efad5 --- /dev/null +++ b/Notify/Services/StateStore.cs @@ -0,0 +1,67 @@ +using System; +using System.IO; +using System.Linq; +using System.Text.Json; +using Notify.Models; +using Notify.Serialization; + +namespace Notify.Services; + +/// +/// 每会话状态文件的读写,位于 %TEMP%\claude-notify-{session_id}.json +/// +public static class StateStore +{ + private static string FilePath(string sessionId) => + Path.Combine(Path.GetTempPath(), $"claude-notify-{Sanitize(sessionId)}.json"); + + public static void Save(string sessionId, StateData data) + { + try + { + File.WriteAllText(FilePath(sessionId), JsonSerializer.Serialize(data, AppJsonContext.Default.StateData)); + } + catch + { + // 落盘失败不致命 + } + } + + public static StateData? Load(string sessionId) + { + try + { + var path = FilePath(sessionId); + if (File.Exists(path)) + { + return JsonSerializer.Deserialize(File.ReadAllText(path), AppJsonContext.Default.StateData); + } + } + catch + { + // 损坏或不可读则当作无状态 + } + + return null; + } + + public static void Delete(string sessionId) + { + try + { + var path = FilePath(sessionId); + if (File.Exists(path)) + { + File.Delete(path); + } + } + catch + { + // 忽略 + } + } + + // 只保留文件名安全字符,避免 session_id 含特殊字符破坏路径 + private static string Sanitize(string s) => + new(s.Where(c => char.IsLetterOrDigit(c) || c is '-' or '_').ToArray()); +} diff --git a/Notify/Services/ToastManager.cs b/Notify/Services/ToastManager.cs new file mode 100644 index 0000000..4fe0a76 --- /dev/null +++ b/Notify/Services/ToastManager.cs @@ -0,0 +1,120 @@ +using System.Collections.Generic; +using Avalonia; +using Avalonia.Platform; +using Notify.Models; +using Notify.ViewModels; +using Notify.Views; + +namespace Notify.Services; + +/// +/// 在常驻进程内管理所有 toast 窗口:创建、按角落堆叠、关闭后重新排布 +/// 这是 Rust 版"每条通知一进程 + EnumWindows"的替代——进程内一个列表即可 +/// +public sealed class ToastManager +{ + private const int Gap = 8; + + private readonly SettingsService _settings; + private readonly List _active = []; + private readonly Queue _pending = new(); + + public ToastManager(SettingsService settings) => _settings = settings; + + public void Show(ToastRequest request) + { + var settings = _settings.Current; + + if (_active.Count >= settings.MaxVisible) + { + _pending.Enqueue(request); + return; + } + + var vm = new ToastViewModel(request); + var window = new ToastWindow(vm, settings, request.Sticky, request.TargetHwnd, request.WtRuntimeId, request.IconPath, request.DurationSecondsOverride); + window.Closed += OnToastClosed; + + _active.Add(window); + // 先显示(拿到尺寸/屏幕信息),再排布 + window.Show(); + Arrange(); + } + + private void OnToastClosed(object? sender, System.EventArgs e) + { + if (sender is ToastWindow w) + { + w.Closed -= OnToastClosed; + _active.Remove(w); + } + + Arrange(); + + if (_pending.Count > 0 && _active.Count < _settings.Current.MaxVisible) + { + Show(_pending.Dequeue()); + } + } + + /// + /// 把所有活动 toast 从指定角落沿垂直方向依次堆叠 + /// + private void Arrange() + { + if (_active.Count == 0) + { + return; + } + + var anchor = _active[0]; + var screen = anchor.Screens.ScreenFromWindow(anchor) ?? anchor.Screens.Primary; + if (screen is null) + { + return; + } + + var settings = _settings.Current; + var wa = screen.WorkingArea; // 物理像素 + var scale = anchor.RenderScaling; + var margin = (int)(settings.Margin * scale); + var gap = (int)(Gap * scale); + + // 垂直靠下时向上堆叠,否则从锚点向下堆叠 + var stackUp = settings.Vertical == VEdge.Bottom; + var cursor = settings.Vertical switch + { + VEdge.Top => wa.Y + margin, + VEdge.Bottom => wa.Bottom - margin, + _ => wa.Y + wa.Height / 2, + }; + + foreach (var toast in _active) + { + var wPx = (int)(toast.Width * scale); + var hPx = (int)(toast.Bounds.Height * scale); + + var x = settings.Horizontal switch + { + HEdge.Left => wa.X + margin, + HEdge.Right => wa.Right - margin - wPx, + _ => wa.X + (wa.Width - wPx) / 2, + }; + + int y; + if (stackUp) + { + cursor -= hPx; + y = cursor; + cursor -= gap; + } + else + { + y = cursor; + cursor += hPx + gap; + } + + toast.Position = new PixelPoint(x, y); + } + } +} diff --git a/Notify/ViewModels/SettingsViewModel.cs b/Notify/ViewModels/SettingsViewModel.cs new file mode 100644 index 0000000..1ec8c6d --- /dev/null +++ b/Notify/ViewModels/SettingsViewModel.cs @@ -0,0 +1,105 @@ +using System.Collections.Generic; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Notify.Models; +using Notify.Services; + +namespace Notify.ViewModels; + +public partial class SettingsViewModel : ObservableObject +{ + private readonly SettingsService _settings; + private readonly ToastManager _toasts; + + public SettingsViewModel(SettingsService settings, ToastManager toasts) + { + _settings = settings; + _toasts = toasts; + + var s = settings.Current; + DurationSeconds = s.DurationSeconds; + FocusedDurationSeconds = s.FocusedDurationSeconds; + Horizontal = s.Horizontal; + Vertical = s.Vertical; + Margin = s.Margin; + Opacity = s.Opacity; + MaxVisible = s.MaxVisible; + PlaySound = s.PlaySound; + Width = s.Width; + FadeMilliseconds = s.FadeMilliseconds; + ShowOnAllDesktops = s.ShowOnAllDesktops; + } + + public IReadOnlyList Horizontals { get; } = [HEdge.Left, HEdge.Center, HEdge.Right]; + + public IReadOnlyList Verticals { get; } = [VEdge.Top, VEdge.Center, VEdge.Bottom]; + + [ObservableProperty] + public partial int DurationSeconds { get; set; } + + [ObservableProperty] + public partial int FocusedDurationSeconds { get; set; } + + [ObservableProperty] + public partial HEdge Horizontal { get; set; } + + [ObservableProperty] + public partial VEdge Vertical { get; set; } + + [ObservableProperty] + public partial int Margin { get; set; } + + [ObservableProperty] + public partial double Opacity { get; set; } + + [ObservableProperty] + public partial int MaxVisible { get; set; } + + [ObservableProperty] + public partial bool PlaySound { get; set; } + + [ObservableProperty] + public partial double Width { get; set; } + + [ObservableProperty] + public partial int FadeMilliseconds { get; set; } + + [ObservableProperty] + public partial bool ShowOnAllDesktops { get; set; } + + [ObservableProperty] + public partial string StatusText { get; set; } = string.Empty; + + [RelayCommand] + private void Save() + { + _settings.Save(new ToastSettings + { + DurationSeconds = DurationSeconds, + FocusedDurationSeconds = FocusedDurationSeconds, + Horizontal = Horizontal, + Vertical = Vertical, + Margin = Margin, + Opacity = Opacity, + MaxVisible = MaxVisible, + PlaySound = PlaySound, + Width = Width, + FadeMilliseconds = FadeMilliseconds, + ShowOnAllDesktops = ShowOnAllDesktops, + }); + StatusText = "已保存"; + } + + [RelayCommand] + private void TestToast() + { + // 用当前编辑中的值预览(先保存再弹,所见即所得) + Save(); + _toasts.Show(new ToastRequest + { + Title = "预览弹窗", + Message = "这是一条测试通知 — 点击可关闭", + InputMode = false, + }); + } +} diff --git a/Notify/ViewModels/ToastViewModel.cs b/Notify/ViewModels/ToastViewModel.cs new file mode 100644 index 0000000..056339d --- /dev/null +++ b/Notify/ViewModels/ToastViewModel.cs @@ -0,0 +1,23 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using Notify.Models; + +namespace Notify.ViewModels; + +public partial class ToastViewModel : ObservableObject +{ + public ToastViewModel(ToastRequest request) + { + Title = request.Title; + Message = request.Message; + InputMode = request.InputMode; + } + + [ObservableProperty] + public partial string Title { get; set; } + + [ObservableProperty] + public partial string Message { get; set; } + + [ObservableProperty] + public partial bool InputMode { get; set; } +} diff --git a/Notify/Views/SettingsWindow.axaml b/Notify/Views/SettingsWindow.axaml new file mode 100644 index 0000000..bb182bd --- /dev/null +++ b/Notify/Views/SettingsWindow.axaml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +