Skip to content

chore: update 263-compatibility-with-mac from dev#391

Merged
marc-romu merged 21 commits into
263-compatibility-with-macfrom
dev
Feb 23, 2026
Merged

chore: update 263-compatibility-with-mac from dev#391
marc-romu merged 21 commits into
263-compatibility-with-macfrom
dev

Conversation

@marc-romu
Copy link
Copy Markdown
Member

No description provided.

marc-romu and others added 21 commits February 8, 2026 16:27
… packages (#379)

## Description

This release migrates all GhJSON-related code to external NuGet packages
(`ghjson-dotnet`), simplifying the SmartHopper codebase and enabling
independent development and versioning of the GhJSON library. The
migration includes comprehensive API refactoring to use organized façade
classes exclusively.

### Highlights

- **GhJSON API Simplification**: All SmartHopper code now imports only
`GhJSON.Core` and `GhJSON.Grasshopper` namespaces, removing deep
namespace dependencies
- **Façade Pattern**: Unified access points via `GhJson.*` and
`GhJsonGrasshopper.*` static methods
- **Serialization Options**: New factory methods
`GhJsonGrasshopper.Options.Standard()`, `.Optimized()`, and `.Lite()`
- **Script Components**: Centralized via `GhJsonGrasshopper.Script.*`
methods
- **Document Operations**: Unified via `GhJson.CreateDocument()`,
`.Merge()`, `.Parse()`, `.Fix()`, `.IsValid()`, `.Serialize()`

### Tool-Specific Updates

- `gh_get`: Delegates to `GhJsonGrasshopper.GetWithOptions()` with
options factories and `ExtractRuntimeData()`
- `gh_put`: Uses `GhJsonGrasshopper.Put()` with
`PutOptions.PreserveExternalConnections`
- `gh_merge`: Uses `GhJson.Merge()` façade
- `gh_tidy_up`: Uses `GhJsonGrasshopper.Options.Standard()`
- `gh_connect`: Delegates to `GhJsonGrasshopper.ConnectComponents()`
- `script_edit`, `script_generate`: Use `GhJsonGrasshopper.Script.*`
façade methods

### Additional Changes

- Added annual automation to update copyright years in `src/**/*.csproj`
and normalize C# license headers
- Changed `ISelectingComponent` to use `IGH_DocumentObject` instead of
`IGH_ActiveObject` to support scribble selection
- Removed legacy `ScriptParameterSettingsParser.cs` (now in
ghjson-dotnet façade)
- Updated documentation and version to 1.3.0-dev

## Breaking Changes

- **Internal refactoring only**: No public API changes for plugin
consumers
- Code that directly referenced internal GhJSON namespaces (e.g.,
`GhJSON.Core.Models.*`, `GhJSON.Grasshopper.Serialization.*`) must
update to use façade methods

## Testing Done

- Verified all AI tools function correctly with the new ghjson-dotnet
integration
- Tested serialization/deserialization round-trips via façade methods
- Confirmed script component handling works with new
`GhJsonGrasshopper.Script.*` API
- Validated connection depth expansion and external connection
preservation in `gh_get`/`gh_put`

## Checklist

- [x] This PR is focused on a single feature or bug fix
- [x] Version in Solution.props was updated, if necessary, and follows
semantic versioning
- [x] CHANGELOG.md has been updated
- [x] PR title follows [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) format
- [x] PR description follows [Pull Request Description
Template](https://github.com/architects-toolkit/SmartHopper/blob/main/CONTRIBUTING.md#pull-request-description-template)
This PR prepares the release for version 1.3.0-alpha with version update
and code style fixes:

- Updated version in Solution.props
- Updated changelog with closed-solved issues
- Updated README badges
…lity improvements (#383)

# Description

This PR implements comprehensive security enhancements and macOS
compatibility improvements for SmartHopper:

**Security Enhancements:**
- Added SHA-256 hash verification system for AI provider DLLs to protect
against tampered code
- New "Verify Providers Hash" menu item for manual provider integrity
verification
- Comprehensive verification dialog with detailed status and hash
comparison
- Automatic hash generation during release workflow with public hash
repository
- Platform-appropriate security: Authenticode + hash verification on
Windows, hash-only on macOS

**macOS Compatibility:**
- Fixed provider loading on non-Windows platforms by skipping
unsupported Authenticode verification
- Resolved URL handling issues that caused incorrect file:// URI
generation
- Fixed ComponentStateManager deadlocks by refactoring event firing
outside state locks
- Enhanced WebChatDialog to prevent crashes on macOS by using null
baseUri for LoadHtml

**UI Improvements:**
- Enhanced About dialog with automatic version detection using new
VersionHelper class
- Added platform information display for better user support

**Infrastructure:**
- Added comprehensive input validation and sanitization to GitHub
Actions
- Created reusable GitHub Actions for build, hash calculation, and
publishing
- Refactored test workflows to user workflows with updated descriptions

## Breaking Changes

No breaking changes. All changes are backward compatible and enhance
existing functionality.

## Testing Done

- Verified SHA-256 hash verification does not cause issues when hash
file cannot be retrieved from the internet on Windows
- Tested provider loading functionality on Windows platforms
- Confirmed ComponentStateManager works well on Windows
- Validated WebChatDialog works on Windows
- Tested enhanced About dialog version detection

Testing on MacOS is pending because I do not have any to try it on.

## Checklist

- [x] This PR is focused on a single feature or bug fix
- [x] Version in Solution.props was updated, if necessary, and follows
semantic versioning
- [x] CHANGELOG.md has been updated
- [x] PR title follows [Conventional
Commits](https://www.conventionalcommits.org/en/v1.1.0/) format
- [x] PR description follows [Pull Request Description
Template](https://github.com/architects-toolkit/SmartHopper/blob/main/CONTRIBUTING.md#pull-request-description-template)
… fixes (#384)

This PR prepares the release for version 1.4.0-alpha with version update
and code style fixes:

- Updated version in Solution.props
- Updated changelog with closed-solved issues
- Updated README badges
# SmartHopper 1.4.0: Enhanced Security and MacOS Compatibility

This release introduces critical security enhancements with SHA-256
provider hash verification and significantly improves macOS
compatibility, making SmartHopper more secure and accessible across
platforms.

## 🔒 Provider Hash Verification

Added comprehensive SHA-256 hash verification system for AI provider
DLLs to enhance security across all platforms. The new verification
system includes a "Verify Providers Hash" menu item for manual integrity
checks, automatic hash generation during release workflows, and
multi-tier verification with graceful degradation when hashes are
unavailable.

## 🖥️ Enhanced About Dialog

Improved About dialog now automatically displays current SmartHopper
version and platform information using the new VersionHelper class,
providing users with clear system information at a glance.

## 🍎 macOS Compatibility Improvements

Significant enhancements for macOS users including provider loading
support on non-Windows platforms with appropriate security warnings,
fixed URL handling to prevent incorrect file:// URI generation, and
resolved component state management deadlocks by reorganizing event
firing patterns.

## 🔧 Settings and Encryption

Fixed first-time initialization to use EncryptionVersion 2 by default,
which stores a local hash for secrets encryption, improving the security
of stored API keys and sensitive configuration data.

## 🛡️ Security Enhancements

Enhanced provider security with SHA-256 hash verification system to
protect against tampered provider DLLs, implementing
platform-appropriate security measures with Authenticode + hash
verification on Windows and hash verification on macOS.

## 🛠️ Technical Requirements

- Rhino 8.24 or above is required
- Windows 10/11 (macOS compatibility improved)
- Valid API keys for MistralAI, OpenAI or DeepSeek

## ⚠️ Important Notes

- This release includes significant security improvements for provider
verification
- macOS compatibility has been substantially improved
- API keys are required, and usage costs apply based on your provider
- Some features may still be subject to change in future releases

## 🤝 We Value Your Feedback!

Help shape SmartHopper's future by:
- Sharing your experiences with the new security features
- Reporting any macOS compatibility issues via our
[issues](https://github.com/architects-toolkit/SmartHopper/issues)
- Suggesting improvements via our
[discussion](https://github.com/architects-toolkit/SmartHopper/discussions)
- Telling us what security features would help your workflow most

We hope you enjoy these enhanced security and compatibility
improvements!

Happy designing! 🎨
…r list

- Changed platform requirements from "MacOS has not been tested" to official macOS support
- Added Anthropic and OpenRouter to the list of supported AI providers
- Added publish-to-github-pages composite action with comprehensive input validation and error handling
- Implemented version-specific hash manifest publishing to `.github/pages/hashes/{version}.json`
- Added auto-detection of stable vs prerelease versions for `latest.json` updates
- Created dynamic HTML index page with version listing via GitHub API
- Replaced deprecated upload-release-asset action with softprops/action-gh-release
…lease workflow

- Removed duplicate "Publish Hash Manifest to GitHub Pages" step
- Removed deprecated upload-release-asset action for hash manifest upload
- Kept single publish-to-github-pages action that handles both zip and hash manifest publishing
…o-github-pages action

- Added hash file caching to runner temp directory before git operations
- Prevents file loss during git stash/checkout operations that may remove the hash file
- Updated hash file path to use cached version for subsequent operations
…and deployment steps

- Renamed publish-to-github-pages action to generate-github-pages
- Removed git operations from generation action (checkout, commit, push)
- Removed github-token input requirement from generation action
- Created new publish-github-pages action using actions/upload-pages-artifact
- Added separate deploy-pages job in release workflow with GitHub Pages environment
- Updated pages directory structure to use .github/pages with
…ges index

- Added versions.json manifest generation in generate-github-pages action
- Manifest includes version metadata (name, version, isLatest, isStable, url)
- Versions are pre-sorted in manifest (latest first, then descending by version)
- Updated index.html to fetch versions from manifest instead of GitHub API
- Removed GitHub API dependency and simplified client-side JavaScript
- Improved page title
…merge

- Modified generate-github-pages action to copy all hash files from repository /hashes folder before adding current version
- Added step in release-4-build workflow to commit hash files to repository via PR
- Hash files are committed to /hashes/{version}.json with auto-merge PR creation
- Removed inline GitHub Pages deployment from release-4-build workflow
- Created new release-5-deploy-pages workflow triggered on hash PR merge
…le in release workflow

- Replaced multi-line bash-style PR body with PowerShell variable assignment
- Fixed line breaks using PowerShell backtick-n escape sequence
- Consolidated gh pr create command into single line with variable reference
…hash PR creation

- Added pull-requests: write permission to workflow
- Wrapped PR creation and auto-merge in try-catch block for proper error handling
- Added explicit success/warning messages with checkmarks
- Exit with error code 1 if PR creation fails to prevent silent failures
chore: add provider hash manifest for version 1.4.0-alpha

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…ployment workflow

- Changed fetch-depth from 1 to 0 in checkout action
- Ensures complete git history is available for accurate version detection
…les from repository folder

- Removed version-specific inputs (hash-file, version, update-latest) from generate-github-pages action
- Changed action to process all hash files from hashes folder instead of single version
- Automatically determine latest version from all hash files (prioritize stable over prerelease)
- Move latest.json and versions.json to pages root directory instead of hashes subdirectory
- Updated release-5-deploy-pages workflow
chore: add provider hash manifest for version 1.4.0-alpha

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@marc-romu marc-romu self-assigned this Feb 23, 2026
@marc-romu marc-romu added this to the 1.4.1-alpha milestone Feb 23, 2026
@marc-romu marc-romu merged commit 220c395 into 263-compatibility-with-mac Feb 23, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants