Commit Graph

130 Commits

Author SHA1 Message Date
Scott Hanselman
c85d4e7571
feat: complete Chinese localization + contributor guide (#60)
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Localize ~40 remaining hardcoded English strings (toasts, canvas, webchat, download dialog). Both en-US and zh-CN now have 163 resource keys, fully in sync.

- Add LocalizationHelper.SetLanguageOverride() for unpackaged app locale testing
- Add docs/LOCALIZATION.md contributor guide
- File issue #61 calling for community translations

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-17 21:12:45 -07:00
Scott Hanselman
c8e55fe194 ci: sign ARM64 artifacts on x64 runner in release job
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
The Azure Trusted Signing dlib (x64) fails with exit code 3 when
running under emulation on the ARM64 runner (windows-11-arm).

Fix: Skip signing in the build/build-msix jobs for ARM64 targets.
Instead, sign ARM64 executables and MSIX packages in the release job,
which runs on windows-latest (x64) where the signing dlib works.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-17 20:46:33 -07:00
Scott Hanselman
882937299a docs: remove stale WinForms references, update test counts and capabilities
- README.md: Fix project table (OpenClaw.Tray → OpenClaw.Tray.WinUI),
  remove WinForms run command, add system.run.prepare and system.which
  to capability table and allowCommands JSON, remove '(investigating)'
  from canvas.a2ui commands
- DEVELOPMENT.md: Remove OpenClaw.Tray/ from structure, add
  OpenClaw.Tray.Tests/, update test counts (88 → 571), fix CI section
- build.ps1: Fix broken 'Tray' target to point at WinUI .csproj,
  remove WinForms from default build and run instructions
- docs/VERSIONING.md: Remove reference to deleted OpenClaw.Tray.csproj
- docs/TEST_COVERAGE.md: Full rewrite (88 → 571 tests, .NET 9 → 10)
- docs/CODE_REVIEW.md: Update project names, test counts, .NET version
- docs/WINDOWS_NODE_TESTING.md: Mark system.run as implemented, update
  capability descriptions
- docs/WINDOWS_NODE_ARCHITECTURE.md: Add historical planning note,
  update current state table (Node mode now implemented)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-17 20:38:13 -07:00
Scott Hanselman
3634f3d112 test: fix false-positive session sorting test and tautological menu assertion
- GetSessionList_SortsMainSessionFirst now populates 3 sessions via
  ParseSessions and verifies the main session is sorted first, instead
  of only asserting an empty list.
- Added ParseSessionsPayload helper to expose the private parser.
- TaskbarAtBottom_TypicalScenario assertion changed from the tautological
  'y + MenuHeight <= 1040 || y >= 0' to the strict 'y + MenuHeight <= 1040'.

571/571 tests pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-17 19:21:35 -07:00
Scott Hanselman
6817bbffcb
ci: add OpenClaw.Tray.Tests to the CI test job
The 93-test Tray test suite (added in PR #45) was never wired into CI. Adds build + run steps for OpenClaw.Tray.Tests so all 571 tests validate on every push/PR.

Closes #58

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-17 19:02:39 -07:00
Scott Hanselman
4549b62af5
[Repo Assist] fix: refresh channel list when channels are added/removed on gateway
Fixes two bugs that together caused issue #55:

1. Remove the healthList.Count > 0 guard so ChannelHealthUpdated fires even when all channels are removed.
2. Dispatch StatusDetailWindow.UpdateStatus when the window is already open.

3 new unit tests added. 478/478 shared tests pass.

Closes #55

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-17 10:49:23 -07:00
Scott Hanselman
302dfaa79f
fix: surface gateway error messages in Settings test connection (#54)
The TestLogger was silently swallowing all gateway client errors,
so connection failures showed a generic 'Connection failed' message.
Now captures the last error/warning and displays the actual gateway
message (e.g. 'origin not allowed') in the status label.

Also keeps verbose logging to Debug.WriteLine for dbgview-mcp
diagnostics.
2026-03-16 23:43:12 -07:00
Scott Hanselman
6e2069d0ad
feat: improve debug instrumentation across WinUI tray app (#53)
Add structured logging to under-instrumented windows and services:
- StatusDetailWindow, SettingsWindow, ActivityStreamWindow,
  NotificationHistoryWindow, QuickSendDialog, WelcomeDialog,
  UpdateDialog, ActivityStreamService
- Replace raw Debug.WriteLine in CanvasWindow with Logger
- Use appropriate log levels (ERROR/WARN/INFO/DEBUG)

Closes #52
2026-03-16 23:02:31 -07:00
Scott Hanselman
f0ccbc8403
chore: clean up stale files and fix repo URLs (#51)
- Remove input.json.bak (stray backup file)
- Update README project structure (remove old OpenClaw.Tray, add
  WinUI and test projects)
- Fix installer URLs to point at openclaw/openclaw-windows-node
  instead of old shanselman/moltbot-windows-hub
2026-03-16 22:25:32 -07:00
Scott Hanselman
8e4c7bd587
chore: remove WinForms tray app (OpenClaw.Tray) (#50)
WinUI tray has full feature parity plus Node Mode, Activity Stream,
session management, cost tracking, localization, and modern XAML UI.

- Remove src/OpenClaw.Tray/ (28 files, ~4900 lines)
- Remove from solution file
- Remove WinForms build step from CI

Installer already only references WinUI. Settings.json format is
unchanged — no migration needed.

Closes #44
2026-03-16 21:58:19 -07:00
Scott Hanselman
313e69e483
fix(winui): guard missing SendMessage deep link handler (#49)
Add null check on actions.SendMessage before invoking in the agent
deep link path. Removes null-forgiving operator that would throw
NullReferenceException inside Task.Run if the handler wasn't wired.
Adds warning log for diagnosability.

Fixes #47
Based on PR #48 by @Alix-007, adapted for current codebase.
2026-03-16 21:56:52 -07:00
Scott Hanselman
afaaa04447
feat: add localization infrastructure with English and Chinese resources (#46)
Add WinUI .resw resource files for proper multi-language support:
- Strings/en-us/Resources.resw with all extractable UI strings
- Strings/zh-cn/Resources.resw with Chinese Simplified translations
- x:Uid attributes on XAML elements for automatic resource lookup
- LocalizationHelper for C# runtime string localization
- Windows auto-selects language based on OS locale

Any language can now be added by contributing a new .resw file.

Addresses #40
2026-03-16 21:44:17 -07:00
Scott Hanselman
bc140e9cca
feat: add WinUI test project with extracted helpers (#45)
Extract testable pure logic from WinUI tray app into shared helpers:
- MenuDisplayHelper: status icons, text truncation, provider formatting
- DeepLinkParser: URI parsing for openclaw:// deep links
- MenuPositioner: tray popup positioning calculations

Create tests/OpenClaw.Tray.Tests with comprehensive coverage for
all extracted helpers plus settings serialization round-trips.

Closes #43
2026-03-16 21:40:55 -07:00
Scott Hanselman
b6b62390ef
fix: persist NotificationSound by stable key, not display text (#42)
Use Tag attribute on WinUI ComboBoxItems to decouple display text
from persisted settings values. Load and save by Tag instead of
Content in SettingsWindow.xaml.cs.

Add documentation comment in WinForms SettingsDialog.cs making
the persistence contract explicit.

Backward compatible — existing settings.json values already match
the Tag keys. Worst case for unknown values: falls back to Default.

Fixes #41
2026-03-16 19:21:02 -07:00
Scott Hanselman
530f645efe
perf: hoist shell normalisation and cache notification regex objects (#39)
ExecApprovalPolicy.Evaluate: normalizedShell was allocated inside the
foreach loop for every rule that carries a shell filter.  Moving the
computation before the loop avoids the repeated allocation on the hot
command-evaluation path.

NotificationCategorizer.MatchesRule: the static Regex.IsMatch overload
that accepts a matchTimeout bypasses .NET's internal regex cache, so a
new Regex object was compiled on every incoming notification for each
regex-pattern user rule.  Replace with a ConcurrentDictionary<string,
Regex?> that caches compiled instances (constructed with the 100 ms
timeout so ReDoS protection is preserved).  Subsequent notifications
reuse the same compiled automaton.

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-16 18:38:35 -07:00
Scott Hanselman
9818229c89
Merge pull request #38 from openclaw/fix/system-run-quoting-and-hang
Merges the consolidated fix for system.run hang (#29), argv quoting (#32), and review hardening. Fixes #28.
2026-03-16 18:31:57 -07:00
Scott Hanselman
8c1bd38f3f refactor: extract ShellQuoting helper, add comprehensive tests
Extract duplicated metacharacter quoting logic from LocalCommandRunner
and SystemCapability into a shared ShellQuoting static class, following
the established GatewayUrlHelper pattern.

- ShellQuoting.NeedsQuoting: single source of truth for metachar detection
- ShellQuoting.QuoteForShell: shell-aware quoting (cmd vs PowerShell)
- ShellQuoting.FormatExecCommand: display formatting for gateway
- IsShellMetachar: idiomatic switch expression instead of duplicated
  multi-case switch blocks
- 43 new unit tests covering all metacharacters, escaping edge cases,
  null handling, and both shell modes

Co-authored-by: danedane <1402819+danedane@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-16 18:26:06 -07:00
Scott Hanselman
419398e9ca fix: harden argv quoting and thread-safe output buffering
Address review findings from PRs #29 and #32:

- QuoteArgIfNeeded: check all shell metacharacters (& | ; < > etc.),
  not just whitespace/quotes — prevents command injection
- cmd.exe: use doubled-quote escaping (%"%") instead of backslash
  which cmd doesn't recognize
- FormatExecCommand: align metacharacter checks with QuoteArgIfNeeded
  so system.run.prepare shows the same command that actually executes
- StringBuilder: add lock around stdout/stderr event handlers and
  ToString() reads to prevent concurrent-access corruption

Co-authored-by: danedane <1402819+danedane@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-16 18:24:15 -07:00
Q
5dbf56a28f feat(system.run): add system.run.prepare pre-flight command
The gateway's nodes 'run' action requires system.run.prepare to build
an execution plan before the actual run. Without it, the only path is
the 'invoke' action which has a hardcoded 30s gateway timeout — too
short for long-running tools like Copilot CLI.

system.run.prepare echoes back the argv, cwd, rawCommand, agentId,
and sessionKey without executing anything, enabling the gateway to
use its configurable timeout path for the actual execution.
2026-03-16 18:24:15 -07:00
Q
7bf476e8d6 fix(system.run): quote argv args containing spaces before shell join
When system.run receives a command as an argv array, BuildProcessArgs
joins the args with spaces before passing to the shell. Args containing
spaces (e.g. a -p prompt like 'List all files') would be split into
separate tokens by the shell, causing tools like GitHub Copilot CLI
to report 'too many arguments'.

Added QuoteArgIfNeeded() that wraps args containing spaces, quotes,
or tabs in double quotes with proper escaping.
2026-03-16 18:24:15 -07:00
copilot-swe-agent[bot]
39cb73158b Fix system.run hanging indefinitely for CLI tools using local IPC
Co-authored-by: shanselman <2892+shanselman@users.noreply.github.com>
2026-03-16 18:24:15 -07:00
Scott Hanselman
2e1d414beb
fix(win10): tray popup positioning and global hotkey reliability (#37)
* fix(winui): stabilize tray menu placement and global hotkey

Improve Win10 tray context window positioning and make the Ctrl+Alt+Shift+C Quick Send hotkey reliably register and foreground the dialog.

* Address Copilot review feedback on PR #31

Fix 1: QuickSendDialog Closed handler race condition (App.xaml.cs)
- Use ReferenceEquals to only null the field when the closing dialog
  is the current one, preventing a late Closed event from clearing
  a newly-created replacement dialog.

Fix 2: Check PostMessage/Wait results in Register() (GlobalHotkeyService.cs)
- Treat PostMessage failure or wait timeout as deterministic failures
  with clear logging, preventing _registered from being out of sync.

Fix 3: EnsureMessageLoop recovery (GlobalHotkeyService.cs)
- Check IsAlive and _hwnd, reset state and recreate the thread if
  the previous message loop died, so the service can recover.

Fix 4: Dispose cleanup (GlobalHotkeyService.cs)
- Join the thread before DestroyWindow so the loop can exit cleanly.
- Dispose ManualResetEventSlim instances to prevent resource leaks.

Co-authored-by: xx299x <xx299x@gmail.com>

---------

Co-authored-by: xx299x <xx299x@gmail.com>
2026-03-16 18:23:24 -07:00
Scott Hanselman
c78b0eca65
Use native ARM64 runner for ARM64 builds (#36)
The build-msix (win-arm64) job was failing with MSB3030 because
the x64 GitHub Actions runner doesn't have the ARM64 apphost.exe
for cross-compilation.

Switch both build and build-msix jobs to use the free
windows-11-arm runner for ARM64 matrix entries, building natively
instead of cross-compiling.
2026-03-16 17:55:20 -07:00
Scott Hanselman
cb6c303024
Merge pull request #33 from openclaw/add-workflow-repo-assist-7943
Add agentic workflow repo-assist
2026-03-16 17:01:31 -07:00
Scott Hanselman
e37f6ddf22 Add agentic workflow repo-assist 2026-03-16 17:01:11 -07:00
Copilot
689e35b8fd
Fix channel status icon showing red for 'ready'/'active' channels in Status dialog (#27)
* Initial plan

* Fix StatusIcon colour in Status dialog for 'ready' and 'active' channel statuses

Co-authored-by: shanselman <2892+shanselman@users.noreply.github.com>

* Centralize channel healthy-status check into ChannelHealth.IsHealthyStatus

Extract a shared static method ChannelHealth.IsHealthyStatus() in
OpenClaw.Shared to replace duplicated inline status checks across
the codebase. This ensures 'active' and 'ready' are consistently
recognized as healthy in all locations:

- StatusDetailWindow.xaml.cs (was missing active/ready - the original bug)
- App.xaml.cs flyout menu (was missing active/ready)
- App.xaml.cs channel toggle (was missing active/ready)
- TrayApplication.cs channel toggle (was missing active/ready)

Add comprehensive test coverage for the new helper method.

* Add intermediate status tier to Status dialog (yellow for idle/pending/connecting)

Address review feedback from @DanAtkinson: the Status dialog was
treating everything non-healthy as red, but intermediate statuses
like stopped, idle, paused, configured, pending, connecting, and
reconnecting should show yellow — matching the tray popup behavior.

- Add ChannelHealth.IsIntermediateStatus() shared helper
- Update StatusDetailWindow to use 3-tier coloring (green/yellow/red)
- Add test coverage for IsIntermediateStatus

* Fix flyout missing intermediate statuses; add mutual-exclusion tests

The WinUI flyout channel icon switch still had hardcoded
connecting/reconnecting instead of using IsIntermediateStatus(),
causing stopped/idle/paused/etc to show red instead of yellow.

Add mutual-exclusion test ensuring no status is ever classified
as both healthy and intermediate.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: shanselman <2892+shanselman@users.noreply.github.com>
Co-authored-by: Scott Hanselman <scott@hanselman.com>
2026-02-25 16:25:58 -08:00
Scott Hanselman
43c7d9e17e Merge pull request #25 from shanselman/copilot/analyze-test-coverage
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Add comprehensive OpenClaw.Shared unit tests and retain PR23 credential-hardening expectations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-23 22:45:04 -08:00
Scott Hanselman
63b9268c20 Merge pull request #23 from minikolic/feat/add-support-for-embedded-credentials
Harden gateway credential handling, sanitize display URLs, and expand credential edge-case tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-23 22:43:38 -08:00
copilot-swe-agent[bot]
2e0eca41eb Add 77 new unit tests to improve coverage of GatewayUrlHelper, Models, Capabilities, and ExecApprovalPolicy
Co-authored-by: shanselman <2892+shanselman@users.noreply.github.com>
2026-02-24 06:16:44 +00:00
copilot-swe-agent[bot]
aaea576e6f Initial plan 2026-02-24 06:08:54 +00:00
Scott Hanselman
6eb2142da6 chore(release): prepare v0.4.4
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
- bump OpenClaw.Tray and OpenClaw.Tray.WinUI project versions from 0.4.3 to 0.4.4

- bump WinUI MSIX package identity version from 0.4.3.0 to 0.4.4.0

- validated with win-arm64 Release builds for WinUI and Tray plus full OpenClaw.Shared.Tests pass
2026-02-23 21:55:26 -08:00
copilot-swe-agent[bot]
f8fab84a3f Fix UnobservedTaskException crash when gateway is unreachable at startup
Co-authored-by: shanselman <2892+shanselman@users.noreply.github.com>
2026-02-22 01:35:28 +00:00
copilot-swe-agent[bot]
e177462e89 Initial plan 2026-02-22 01:31:07 +00:00
Scott Hanselman
ab61f0f3b1 fix(winui): harden preview threading and reconnect capability recovery
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
- synchronize App session preview cache reads/writes/removal with a dedicated lock to avoid cross-thread Dictionary access races between gateway events and tray menu rendering

- reset unsupported-method capability flags on successful gateway reconnect so usage.status, usage.cost, sessions.preview, and node.list can recover after transient or older-gateway errors

- add focused OpenClawGatewayClient regression test covering unsupported-flag reset behavior

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-16 23:29:58 -08:00
Scott Hanselman
e3d6a01bb4 chore(release): prepare v0.4.3
- bump OpenClaw.Tray and OpenClaw.Tray.WinUI project Version from 0.4.2 to 0.4.3

- bump WinUI MSIX manifest identity version from 0.4.2.0 to 0.4.3.0

- validated with win-arm64 Release builds for WinUI and Tray plus full OpenClaw.Shared.Tests pass
2026-02-16 23:11:34 -08:00
Scott Hanselman
3025daaa71 feat(winui): add activity stream and richer node observability
- add shared models and gateway client handling for session, usage, and node.list telemetry

- add ActivityStreamService plus ActivityStreamWindow flyout with filtering, clear, and dashboard jump actions

- wire WinUI tray actions/status surfaces for activity, node/session/usage updates, and one-time discoverability tip

- document exec-policy troubleshooting in README, including Windows policy path and powershell.exe argv[0] matching

- expand shared tests for model parsing and gateway client behavior

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-16 23:02:57 -08:00
Scott Hanselman
4d8d43bcfe Improve web chat security UX and bump to 0.4.2
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-16 21:49:13 -08:00
Scott Hanselman
c5e5a291e9 Fix issue #18 README allowCommands docs
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-16 21:22:08 -08:00
Scott Hanselman
92d9d389b1 Bump fallback versions to 0.4.1
- Set OpenClaw.Tray and OpenClaw.Tray.WinUI project Version to 0.4.1\n- Set Package.appxmanifest identity version to 0.4.1.0\n- Keeps local/debug version metadata aligned so updater comparisons are less confusing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-16 21:10:43 -08:00
Scott Hanselman
f78d2ed27e Fix issue #19 gateway URL normalization
- Add shared GatewayUrlHelper for ws/wss/http/https validation and normalization\n- Use helper in OpenClawGatewayClient and WindowsNodeClient\n- Reuse helper in WinForms/WinUI settings validation and NodeService A2UI URL derivation\n- Add gateway URL normalization tests for helper, gateway client, and node client

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-16 20:40:17 -08:00
Copilot
0aebcc24f2
Fix auto-updater loop by removing hardcoded FileVersion and AssemblyVersion (#17) 2026-02-10 00:17:47 -08:00
Scott Hanselman
665425c612 fix: use non-deprecated signing-account-name in trusted-signing-action 2026-02-07 20:21:39 -08:00
Scott Hanselman
50ffbb8828 Fix Debug method name collision in WinForms Logger
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (win-arm64) (push) Has been cancelled
Build and Test / build (win-x64) (push) Has been cancelled
Build and Test / build-msix (ARM64, win-arm64) (push) Has been cancelled
Build and Test / build-msix (x64, win-x64) (push) Has been cancelled
Build and Test / build-extension (arm64) (push) Has been cancelled
Build and Test / build-extension (x64) (push) Has been cancelled
Build and Test / release (push) Has been cancelled
2026-02-07 18:46:14 -08:00
Scott Hanselman
ad1409ca68 Fix update dialog black square, add Debug log level, reduce log noise
- Rewrite UpdateDialog as proper WindowEx (fixes black square and XamlRoot crash)
- Size and center DownloadProgressDialog
- Add Debug level to IOpenClawLogger interface and all implementations
- Downgrade raw JSON, response payloads, channel health, and debug spew from Info to Debug
- Debug messages still visible in dbgview.exe via System.Diagnostics.Debug
- Delete 10 stale remote branches
2026-02-07 18:24:19 -08:00
Scott Hanselman
ca681c7e55 feat: implement system.which capability - resolve executable names via PATH with PATHEXT support on Windows 2026-02-07 17:56:57 -08:00
Scott Hanselman
019d6e0e89 fix: MSIX publisher mismatch and resilient release pipeline
- Update Package.appxmanifest Publisher to match Azure Trusted Signing cert subject
- Make build-msix continue-on-error so release isn't blocked by MSIX failures
- Add fail-fast: false to build-msix matrix
- Make MSIX artifact downloads in release job continue-on-error
2026-02-07 17:38:14 -08:00
Scott Hanselman
199f855729
feat: enhanced notification categorization pipeline (#12) (#15)
Replace keyword-only classification with a layered pipeline:
structured metadata (intent/channel) > user rules > keyword fallback.

- Add Channel, Agent, Intent, Tags fields to OpenClawNotification
- Extract NotificationCategorizer class with layered pipeline
- Add NotifyChatResponses toggle to suppress chat toasts
- Add UserNotificationRule model for custom regex/keyword rules
- Map error notifications to urgent setting
- Add 30+ unit tests for categorizer pipeline
- Document categorization system in docs/
2026-02-07 17:24:11 -08:00
Scott Hanselman
5d95042ff3 chore: remove unused uap3 namespace from MSIX manifest 2026-02-07 16:56:39 -08:00
Scott Hanselman
45921b07e6 fix: accept system.run command as argv array per OpenClaw spec
Per the official OpenClaw spec (nodes-tool.ts), the 'command' param
for system.run is an argv array (e.g. ["echo","Hello"]), not a string.
Our handler was rejecting array format, causing the first invoke
attempts from the agent to fail with 'Missing command parameter'.

Changes:
- Accept command as array (primary, per spec) or string (fallback)
- Support 'timeoutMs' param name (spec) alongside legacy 'timeout'
- Preserve backward compat for string command + separate args array
- Add 6 new tests for array/string/single-element/error/timeout cases

All 180 tests pass.
2026-02-07 16:49:46 -08:00
Scott Hanselman
3fc96748d5 feat: MSIX dual-distribution packaging
Add MSIX packaging support alongside existing Inno Setup/ZIP distribution.
The build now supports both packaged (MSIX) and unpackaged (EXE) modes
via the PackageMsix MSBuild property.

MSIX packaging enables:
- Native Windows camera/microphone consent prompts
- Package identity for OS integration
- Protocol activation for openclaw:// deep links via manifest

Changes:
- csproj: Conditional WindowsPackageType (None vs MSIX) toggled by
  -p:PackageMsix=true. Self-contained in both modes. ApplicationVersion
  synced from Version property for MSIX.
- Package.appxmanifest: Declares webcam, microphone, internetClient
  capabilities. Protocol handler for openclaw://. Visual assets.
- PackageHelper.cs: Runtime detection of packaged vs unpackaged mode
  via Windows.ApplicationModel.Package.Current
- App.xaml.cs: Protocol activation handling via AppInstance lifecycle API
  for MSIX deep links. Works alongside existing command-line deep links.
- DeepLinkHandler.cs: Skip registry URI registration when packaged
  (manifest handles it)
- ci.yml: New build-msix job (x64 + ARM64) parallel to existing build.
  MSIX signing via Azure Trusted Signing. MSIX artifacts in releases.
  Null-check on MSIX find step.
- Visual assets: Generated PNG logos for MSIX package tiles
- README: Added MSIX build instructions

Build modes:
  dotnet build -r win-arm64                     # Unpackaged (default)
  dotnet build -r win-arm64 -p:PackageMsix=true # MSIX package

Note: MSIX Publisher in Package.appxmanifest must match the Azure
Trusted Signing certificate subject exactly. Currently set to
'CN=Scott Hanselman' - update if cert subject differs.
2026-02-07 15:34:49 -08:00