Releases: architects-toolkit/SmartHopper
SmartHopper 1.2.2-alpha: Enhanced Performance and Stability [Patch]
- Component Stability: Promoted StatefulComponentBaseV2 to default stateful base, ensuring more reliable component behavior
- Chat Performance: Optimized DOM updates with keyed queuing, template caching, and LRU diffing to reduce redundant work on large chats
- Streaming Visuals: Removed heavy animations and switched to lighter wipe-in effects for better responsiveness during message streaming
- UI Freeze Prevention: Reduced WebChat dialog freezes while dragging/resizing by throttling DOM updates and processing in smaller batches
- Token Optimization: Simplified CanvasButton assistant system prompt to reference instruction tools instead of embedding long guidelines
- Selection Context: Enhanced selection counting with Rhino UI thread reading and robust Attributes.Selected fallback
- Tool Instructions: Added instruction_get tool to provide detailed operational guidance on demand
- Memory Efficiency: Reduced idempotency cache size from 1000 to 100 entries to lower memory footprint
- DeepSeek Fixes: Resolved deepseek-reasoner model failures and duplicated reasoning display issues
- Message Display: Fixed user messages not appearing in chat UI and improved turn-based metrics aggregation
Full Changelog: 1.2.1-alpha...1.2.2-alpha
SmartHopper 1.2.1-alpha: Runtime data snapshots & script canvas wrappers [Patch]
This patch release focuses on richer inspection of Grasshopper definitions (including runtime data snapshots), smoother script component workflows, and small but important chat and UI fixes.
Detailed list of changes
- Added new script wrapper tool
script_generate_and_place_on_canvasthat generates a Grasshopper script component and places it on the canvas in a single call, simplifying chat workflows and reducing token usage. - Updated script tools so the low-level
script_generate/script_edittools are hidden from chat (still available via AIScript components) while wrapper tools handle full generate-and-place / edit-and-replace flows. - Changed script generation behavior so
script_generateno longer returns a pre-placementinstanceGuid; instead, wrapper tools now report the realinstanceGuidassigned by Grasshopper after placement. - Enhanced
gh_getto optionally include snapshots of runtime/volatile data (branch counts, item counts, and sample values) for inputs and outputs, enabling richer debugging and inspection. - Added specialized
gh_getvariants such asgh_get_selected_with_data,gh_get_by_guid_with_data, andgh_get_errors_with_datato retrieve focused subsets of the document together with their runtime data. - Improved
gh_puttool results by returning aninstanceGuidsarray with the actual GUIDs of components placed on the canvas, making follow-up queries and wiring much easier. - Relaxed GhJSON validation so documents without any connections are treated as valid (missing
connectionsis now considered an empty list instead of an error). - Fixed a chat UI bug where sending the same user message twice could cause one message to be collapsed; each user message now gets a unique turn ID and shows correctly in the conversation.
- Improved conversation session turn handling so tool results inherit the correct turn ID from their tool calls, leading to accurate per-turn metrics aggregation in the UI.
- Refined dialog positioning so
StyledMessageDialogwindows open centered on the Rhino/Eto main window for a more predictable and polished user experience.
What's Changed
- feat(tools): add runtime data getters and script canvas placement wrappers by @marc-romu in #359
Full Changelog: 1.2.0-alpha...1.2.1-alpha
SmartHopper 1.2.0-alpha: Script Components Unleashed
This alpha release focuses on powerful AI-assisted scripting workflows, GhJSON merge/edit tools, and clearer on-canvas guidance—so you can create, review, and refine Grasshopper scripts in seconds.
🧠 AI-powered scripting workflows
Create powerful scripts in seconds. Let AI write, review, and refine your code following your instructions.
- New GhJSON-based script tools:
script_generateandscript_editnow operate directly on GhJSON for Grasshopper script components.script_edit_and_replace_on_canvascombines editing and placement in a single tool call, reducing token usage and simplifying workflows.
- Rich parameter and modifier support:
- Full control over
dataMapping(Flatten/Graft),reverse,simplify,invert,isPrincipal,required, andexpressionfor inputs. - Output parameters gain matching support for
dataMapping,reverse,simplify, andinvert.
- Full control over
- Smarter script validation:
ScriptCodeValidatorflags non-RhinoCommon geometry libraries (e.g. System.Numerics, UnityEngine, numpy, shapely) and helps the AI auto-correct them.script_generateandscript_editinclude a validation retry loop that detects invalid geometry patterns and re-prompts the AI with correction instructions.- System prompts are enriched with RhinoCommon-specific and language-specific (Python/IronPython/C#/VB.NET) guidance, imports, and type mappings.
- Updated script components:
AIScriptGeneratorComponentnow orchestratesscript_generate/script_editwithgh_get/gh_put, exposingGhJSON,Guid,Summary, andMessageoutputs for better inspection.AIScriptGeneratorComponentandAIScriptReviewComponentno longer require aGuidinput—the target component is selected with the on-canvas button.- Both components now support processing multiple inputs in parallel.
- The legacy
script_fixtool has been renamed toscript_reviewto better reflect its review-first behavior.
🧩 GhJSON merge & document tooling
- New GhJSON helpers and merge workflows:
GhJsonHelperssimplifies applying pivots and restoringInstanceGuids on deserialized components.GhJsonMergermerges two GhJSONGrasshopperDocumentinstances with automatic ID remapping and conflict resolution.- New
gh_mergeAI tool returns merged GhJSON plus merge statistics (components / connections / groups added or deduplicated). - New
GhMergeComponentsGrasshopper component (“Merge GhJSON”) lets you merge two GhJSON documents directly on canvas.
- Smarter document extraction:
gh_getgains acategoryFilterparameter so you can focus AI workflows on specific component or object categories.
🎛️ Canvas UX & component UI improvements
- Dialog-to-canvas link visualization:
- Dialogs such as script editors can now visually link to a Grasshopper component using a bezier curve and anchor dot, mirroring the native script editor anchor experience.
StyledMessageDialog(ShowInfo,ShowWarning,ShowError,ShowConfirmation) accepts optionallinkedInstanceGuidandlinkLineColorparameters to enable this linking.
- Enhanced component badges and selection UI:
- AI-selecting stateful components now show a combined UI: the “Select” button plus provider/model badges in a single, clear block.
- Selecting components use the dialog link line color for hover highlights and draw a connector line from the selection center to the “Select” button.
- Canvas and visual polish:
- The Canvas button prompt has been improved to guide users toward in-viewport scripting workflows and avoid unnecessary external code blocks or testing patterns.
- Component icons have been refreshed, including outlined variants for McNeel forum and script components, and a new
ghmergeicon with updatedghget/ghputicons aligned to the merge workflows.
🧬 Model guidance & provider updates
- Model compatibility badges:
- New “Not Recommended” badge (orange octagon with exclamation mark) appears when a chosen model is discouraged for the tools used by a component.
AIModelCapabilitiesnow exposesDiscouragedForTools, andAIStatefulAsyncComponentBaseexposesUsingAiToolsandEffectiveRequiredCapabilityto drive badge logic.- The “Not Recommended” badge suppresses the “Verified” badge so you always see the most important status first.
- Provider improvements:
- Anthropic provider adds the Claude Opus 4.5 model to the registry.
- OpenRouter gains structured-output support for JsonOutput requests and now populates
finish_reasonandmodelin metrics for chat completions.
🐞 Stability & quality-of-life fixes
- Chat and UI reliability:
- Chat UI now displays accurate, aggregated token metrics per turn (from user message to next user message), including tool calls and tool results.
ConversationSessionexposesGetTurnMetrics(turnId)to aggregate metrics across interactions in a turn.- Tool results now inherit the correct
TurnId, ensuring proper grouping and reporting. - Web chat dialogs are created as owned tool windows of the Rhino main Eto window, stay on top of Rhino while active, and behave correctly when confirmation dialogs appear.
- GhJSON and scripting robustness:
gh_putno longer enters infinite loops when replacement mode is active and no longer hits “object expired during solution” errors; replacement now usesIsolateObject()for safe cleanup and undo support.GhJSON-based script tools have updated schemas requiringnickname, preventing crashes with OpenAI structured output mode.
- Additional minor fixes and refinements:
- Numerous edge cases in script and GhJSON workflows have been smoothed out to make multi-step AI flows more predictable and resilient.
🛠️ Technical Requirements
- Rhino 8.19 or above is required
- Windows 10/11 (macOS has not been tested)
- Valid API keys for MistralAI, OpenAI or DeepSeek
⚠️ Important Notes
- This is an alpha release with some features still unstable or subject to change
- API keys are required, and usage costs apply based on your provider
- Documentation is currently under development
🤝 We Value Your Feedback!
Help shape SmartHopper's future by:
- Sharing your experiences with the new scripting workflows and GhJSON tools
- Suggesting improvements via our discussion
- Telling us what AI capabilities would help your workflow most
We hope you enjoy these new features and improvements!
Happy designing! 🎨
What's Changed
- feat(script-tools): add GhJSON-based script tools, merge workflows, and message-boxes to canvas linking by @marc-romu in #354
- feat(scripting): enhance script tools, model compatibility, and docs by @marc-romu in #355
Full Changelog: 1.1.1-alpha...1.2.0-alpha
SmartHopper 1.1.1-alpha: Provider model updates [Patch]
This patch focuses on AI provider registry and capability alignment, bringing clearer model identifiers and safer defaults across Anthropic and OpenAI.
Detailed list of changes:
-
Anthropic:
- Added explicit dated model identifiers for Claude 3.x/4.x while keeping shorthand names.
- Switched default text/tool/json model to
claude-haiku-4-5for faster, cost‑effective defaults. - Enabled structured‑output (beta) for Sonnet 4.5 and Opus 4.1, and restricted Text2Json capability to those models for reliability.
-
OpenAI:
- Updated model registry to include the GPT‑5.1 series.
Full Changelog: 1.1.0-alpha...1.1.1-alpha
SmartHopper 1.1.0-alpha: Smarter GhJSON & knowledge tools
This alpha release focuses on a modern GhJSON/property system and powerful knowledge tools for McNeel forum and web—plus foundational scripting improvements that prepare SmartHopper for richer script workflows in future releases.
🌐 Knowledge tools for McNeel forum, web & Rhino files
- McNeel forum AI tools:
mcneel_forum_searchwith configurable result limits and raw JSON post payloads.mcneel_forum_post_get(renamed fromweb_rhino_forum_read_post) to fetch full posts by ID.mcneel_forum_post/topic_summarizeto generate AI‑powered summaries of forum threads.
web_generic_page_readnow returns clean, context‑aware text for:- Wikipedia/Wikimedia, Discourse forums, GitHub/GitLab file URLs, and Stack Exchange questions via official APIs.
📦 Modern GhJSON & Property Management V2
- New
PropertyManagerV2architecture with:- Clear separation of filtering, extraction, and application.
PropertyFilter,PropertyHandlers,PropertyFilterConfig,SerializationContext, andComponentCategoryfor precise, scenario‑aware property control.
- GhJSON optimization:
- Groups only include members that are part of the current selection.
- Runtime‑only properties (
VolatileData,IsValid,ReferenceID,IsGeometryLoaded, etc.) are removed to keep JSON compact. - Fixed contradictory whitelist/omit rules and simplified
ComponentProperty(removedTypeandHumanReadable).
- Enhanced GhJSON schema:
- Rich parameter metadata:
parameterName,dataMapping,simplify,reverse,invert,unitize,expression,variableName,isPrincipal,locked. - Unified
valueproperty for component state across sliders, panels, scribbles, scripts, and value lists. - Extended component schema with
Id,Params,InputSettings,OutputSettings, andComponentState. - Removed redundant/implicit fields (
expressionContent,access,description,optional, type/object metadata). - BREAKING: The enhanced schema is now the default for all
gh_getandgh_putoperations, with legacyPivotpreserved for positioning compatibility.
- Rich parameter metadata:
🧠 Preparing advanced scripting workflows
- Lays the groundwork for future scripting-focused releases with robust VB Script and script component handling:
- Full 3‑section VB Script serialization/deserialization (
imports,script,additional) with a dedicatedVBScriptCodemodel andvbCodesupport inComponentState. - GhJSON now extracts and restores VB Script code via ScriptSource properties (
UsingCode,ScriptCode,AdditionalCode) using reflection.
- Full 3‑section VB Script serialization/deserialization (
- Script components implement
IGH_VariableParameterComponentfor reliable dynamic parameter creation/removal:- Parameter settings applied via
CreateParameter/DestroyParameterandVariableParameterMaintenance()with names, optional flags, and modifiers.
- Parameter settings applied via
- All script parameters and code operations are wrapped in
RhinoApp.InvokeOnUiThread()to keep the Rhino/Grasshopper UI responsive and stable. - A new unified
script_generatorAI tool replaces legacyscript_newandscript_edit, creating or editing script components from natural language and optional component GUIDs—forming the base for richer scripting assistants in upcoming versions.
🧪 Reliability, workflows & test coverage
- Utility helpers for centralized Grasshopper/Rhino operations:
GHConnectionUtils,GHGenerateUtils,RhinoFileUtils,RhinoGeometryUtils.
SelectingComponentBasenow persists selected objects across file save/load, including restored selection counts and graceful handling of missing objects.- New
SmartHopper.Core.Grasshopper.Testsproject:- 40+
AIResponseParserTestscovering complex parsing and edge cases. - 30+
PropertyManagerTestsvalidating type conversion and persistent data behavior.
- 40+
- Hotfix workflow system:
- Automated hotfix branch creation, version bumping, conflict‑safe milestone updates, and fully documented hotfix pipelines.
- Extended CI validations and test workflows for
hotfix/**andrelease/**branches.
🛠️ Technical Requirements
- Rhino 8.24 or above is required
- Windows 10/11 (macOS has not been tested)
- Valid API keys for at least one supported AI provider (MistralAI, OpenAI, DeepSeek, Anthropic, OpenRouter)
⚠️ Important Notes
- This is an alpha release with some features still unstable or subject to change.
- API keys are required, and usage costs apply based on your provider and model choices.
- Documentation is actively evolving to cover the new GhJSON schema, scripting tools, and knowledge workflows.
🤝 We Value Your Feedback!
Help shape SmartHopper’s future by:
- Sharing your experiences with the new GhJSON, scripting, and knowledge tools
- Suggesting improvements via our discussions
- Telling us what AI capabilities or workflows would help your Grasshopper/Rhino practice most
We hope you enjoy these new features and improvements!
Happy designing! 🎨
Full Changelog: 1.0.1-alpha...1.1.0-alpha
SmartHopper 1.0.1-alpha: Enhanced Model Support & Error Handling [Patch]
This patch release introduces significant improvements to model handling, error reporting, and tool usability, along with several important bug fixes.
Detailed list of changes:
-
Enhanced Model Support:
- Added support for any model name, even if not explicitly listed in the provider's registry
- Expanded the provider's database with more predefined models
-
Tooling Improvements:
- Enhanced AI Tool descriptions with better guided instructions
- Added specialized wrappers for common Grasshopper operations (selection, visibility, grouping, etc.)
- Improved
list_filtertool with better natural language support for filtering, sorting, and reordering
-
Bug Fixes:
-
Technical Improvements:
- Centralized error handling in AIReturn and tool calls
- Enhanced metric aggregation in Conversation Sessions
- Improved error handling to ensure all error messages are properly surfaced to users
What's Changed
- fix(model): bypass capability validation for unregistered models by @marc-romu in #330
- fix(component): fix model badge display by @marc-romu in #336
- fix(core): improve error handling in ConversationSession and metrics aggregation by @marc-romu in #337
- fix(gh-get): specialized ai tools by @marc-romu in #339
- fix(list-filter): prevent automatic sorting and deduplication of result indices by @marc-romu in #340
- refactor(models): added more predefined models by @marc-romu in #341
Full Changelog: 1.0.0-alpha...1.0.1-alpha
SmartHopper 1.0.0-alpha: Canvas Button, Component Badges & New Providers
This release introduces many exciting features; that's why the version is bumped to 1.0!! The Canvas button for a live assistance chat, component badges for model compatibility, new providers, and enhanced stability and security.
🎨 Canvas Button
- New button on the top-left corner of your canvas to trigger an AI chat with SmartHopper Assistant.
- Designed to help with Grasshopper tasks and equipped with tools for valuable information and basic tasks.
- Can be hidden in settings if not needed.
🏷️ Component Badges
- New badges display model compatibility with components before running them.
- Green tick badge for verified models (gpt-5-mini from OpenAI and mistral-small-latest from MistralAI).
- Blue badge indicates automatic replacement of incompatible models with compatible defaults.
- Red badge indicating that no model was found compatible.
🤖 New Providers & Streaming Support
- Added support for Anthropic and OpenRouter, alongside MistralAI, OpenAI, and DeepSeek.
- Now all providers can stream live responses, if provided by the API
✨ Other Improvements
- Internal improvements for stability and expandability.
- Encrypted API keys with individualized keys for enhanced security.
🛠️ Technical Requirements
- Rhino 8.19 or above
- Windows 10/11 (macOS untested)
- Valid API keys for chosen providers (OpenAI, MistralAI, DeepSeek, Anthropic, OpenRouter)
⚠️ Important Notes
- Settings file will rewrite on the first run due to security enhancements. Save your API keys again if you encounter issues.
- Image generation currently supports only OpenAI DALL·E models.
- Automatic model fallback may override user-selected models to meet component requirements. You will see a blue badge on the component indicating that the model was replaced.
- API usage costs apply based on your provider plan.
🤝 We Value Your Feedback!
- Share your experiences and suggestions via the discussion forum
- Report issues or request features on the issue tracker
- Contribute to a better SmartHopper!
Happy designing! 🎨
What's Changed
- test(infrastructure): add comprehensive unit tests for ModelManager and AIContextManager by @marc-romu in #295
- feat(ui): add CanvasButton to trigger SmartHopper assistant dialog by @marc-romu in #297
- refactor(settings): reorganize settings dialog into tabs and improve API key encryption by @marc-romu in #299
- fix(core): prevent temp file leaks in ImageViewer and resolve wildcard model default issue by @marc-romu in #302
- refactor(infrastructure): unify AI request/return schema and provider APIs; migrate tools and WebChat by @marc-romu in #309
- refactor(model-manager): centralize model management and provider-scoped selection by @marc-romu in #312
- feat(components): add model badges with hover labels and provider strip by @marc-romu in #314
- feat(conversation): introduce ConversationSession; refactor AICall, streaming, validation, and model selection by @marc-romu in #315
- feat(core-io): introduce safe versioned persistence (V2) by @marc-romu in #317
- feat(providers,ui,infra): Anthropic/OpenRouter providers, WebChat WebView UI, policy pipeline + streaming by @marc-romu in #318
- refactor(webchat): Enhance conversation session and tool calling across providers by @marc-romu in #321
- fix(components): correct index parsing in AIListFilter component by @marc-romu in #324
- docs: update documentation for 1.0.0-alpha release by @marc-romu in #325
Full Changelog: 0.5.3-alpha...1.0.0-alpha
SmartHopper 0.5.3-alpha: Fix script_new json schema [Patch]
Fixes small json schema request issue with gpt-5 models in tool.
What's Changed
- fix(script_new): incompatibility with gpt-5 json schema requirements by @marc-romu in #306
Full Changelog: 0.5.2-alpha...0.5.3-alpha
SmartHopper 0.5.2-alpha: First Initialization Fix [Patch]
This patch release resolves an issue of loading settings when the SmartHopper.json file is not available. This happened to everyone who installed the plugin for the first time. 😢
Detailed list of changes
- fix(settings): invalid settings file initialization by @marc-romu in #303
Full Changelog: 0.5.1-alpha...0.5.2-alpha
SmartHopper 0.5.1: Chat Settings and Bug Fixes [Patch]
This patch release adds a new chat setting for AI-generated greetings and resolves several bugs related to greeting logic, toggle behavior, provider initialization, and list generation.
Detailed list of changes:
- Added a new setting (
EnableAIGreeting) to enable or disable AI-generated greetings in chat. - Fixed greeting generation to fall back on the provider’s default model when no model is specified in
AIUtils.GetResponse. - Fixed components using boolean toggles not reprocessing when the Run toggle remained persistently true.
- Fixed race conditions in AI Provider Settings by introducing lazy default values during initialization.
- Fixed list generation in the
list_generatetool to correctly handle long requests and meet expected lengths (#277).
Full Changelog: 0.5.0-alpha...0.5.1-alpha