Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
7362181
update dev (#221)
marc-romu Jun 15, 2025
780e649
refactor: clean unecessary LoadSettings function in OpenAI and Templa…
marc-romu Jun 20, 2025
7f3f829
feat(deepseek): add deepseek provider
marc-romu Jun 20, 2025
d930b5e
fix(deepseek): remove endpoint verification and usage, directly call …
marc-romu Jun 20, 2025
9ab35bd
Update src/SmartHopper.Providers.DeepSeek/DeepSeekProviderSettings.cs
marc-romu Jun 20, 2025
220deed
ci: added file and line info for trailing space check
marc-romu Jun 20, 2025
b918399
Merge branch 'feat/deep-seek' of https://github.com/architects-toolki…
marc-romu Jun 20, 2025
5834eef
refactor: sort using directives
marc-romu Jun 20, 2025
7a26b2e
refactor: removed trailing spaces
marc-romu Jun 20, 2025
232fe50
refactor: removed trailing spaces
marc-romu Jun 20, 2025
05d0760
feat: deepseek logo
marc-romu Jun 20, 2025
837b348
refactor: using references
marc-romu Jun 20, 2025
442b252
feat: deepseek (#224)
marc-romu Jun 20, 2025
c084074
docs: update version badge for dev
actions-user Jun 20, 2025
c830166
docs: update version badge for dev to 0.3.3-dev.250620 (#225)
marc-romu Jun 20, 2025
db88f7c
docs: update readme
marc-romu Jun 20, 2025
3585f12
docs: update readme
marc-romu Jun 20, 2025
a546981
docs: update readme
marc-romu Jun 20, 2025
43e3937
docs: update readme
marc-romu Jun 20, 2025
928f635
docs: update readme (#226)
marc-romu Jun 20, 2025
87cea8c
fix(ailist): incorrect json array preventing component from returning…
marc-romu Jun 20, 2025
b160296
Merge branch 'dev' into fix/220-ai-list-filter
marc-romu Jun 20, 2025
af84a93
fix(ailist): incorrect json array preventing component from returning…
marc-romu Jun 20, 2025
f1c1470
feat: add more auto-deletion branched prefixes
marc-romu Jun 20, 2025
7380104
Merge branch 'dev' of https://github.com/architects-toolkit/SmartHopp…
marc-romu Jun 20, 2025
4e3d3a0
ci(workflows): add close label to issue only if not marked as completed
marc-romu Jun 20, 2025
9eea823
feat(chat): added ui reasoning section for reasoning models
marc-romu Jun 20, 2025
b11ea92
refactor(openai): enable reasoning summary for openai provider when a…
marc-romu Jun 20, 2025
9965732
fix: increased ai providers limit for max tokens
marc-romu Jun 20, 2025
2268fee
refactor(openai): remove deprecated max_token parameter to max_comple…
marc-romu Jun 20, 2025
bb18259
refactor(openai): centralized settings validation logic
marc-romu Jun 20, 2025
c18fc6e
refactor(mistralai): centralized settings validation logic
marc-romu Jun 20, 2025
a97136e
refactor(templateprovider): centralized settings validation logic
marc-romu Jun 20, 2025
1d67e84
refactor(deepseek): increase token limit in settings to 100000
marc-romu Jun 20, 2025
9151c89
docs: update readme installation
marc-romu Jun 20, 2025
0cf0e12
Merge branch 'feat/magistral-thinking' into dev
marc-romu Jun 21, 2025
ecf2db8
chore: update development version date to 0.3.3-dev.250621
actions-user Jun 21, 2025
0d751e2
update-branch-from-dev (#228)
marc-romu Jun 21, 2025
e6bcc1d
chore: update development version date to 0.3.3-dev.250621 (#229)
marc-romu Jun 21, 2025
e41f10e
refactor(deepseek): centralized settings validation logic
marc-romu Jun 21, 2025
a28a902
refactor(aiprovider): renamed openai and mistralai to openaiprovider …
marc-romu Jun 21, 2025
6048738
docs: add deepseek in about dialog
marc-romu Jun 21, 2025
efd673d
ci: windsurf reasoning rule for ai providers
marc-romu Jun 21, 2025
874ac34
refactor: code style
marc-romu Jun 21, 2025
88443e7
fix: namespace issues
marc-romu Jun 21, 2025
c10ef87
feat: new stripthinktags method to avoid sending think summary back t…
marc-romu Jun 21, 2025
53eacb6
ci: reference sorting windsurf rule
marc-romu Jun 21, 2025
ea74681
refactor(settingsdialog): improved descriptions
marc-romu Jun 21, 2025
dfc977a
feat: latex compatibility in chat UI
marc-romu Jun 21, 2025
a1081dc
fix: too early integrity check before providers were loaded
marc-romu Jun 21, 2025
1aa3010
fix: limit of 4096 tokens in settings field for providers
marc-romu Jun 21, 2025
5705d4e
feat: remove empty settings on updateprovidersettings
marc-romu Jun 21, 2025
1d9f1b3
feat: added dropdown support for provider settings and code cleanup
marc-romu Jun 21, 2025
b52c5f7
refactor: migrated setting-related methods from aiprovider to aiprovi…
marc-romu Jun 21, 2025
15de367
fix(settings): settings dialog dropdown values not being saved and re…
marc-romu Jun 22, 2025
29aa73c
refactor: removed trailing whitespaces
marc-romu Jun 22, 2025
5970e94
refactor: using sorting
marc-romu Jun 22, 2025
ac1d0fd
Update src/SmartHopper.Providers.DeepSeek/DeepSeekProviderSettings.cs
marc-romu Jun 22, 2025
f90f96b
Update CHANGELOG.md
marc-romu Jun 22, 2025
0749fa4
Update src/SmartHopper.Core/AI/Chat/HtmlChatRenderer.cs
marc-romu Jun 22, 2025
1af12e4
feat: add reasoning support and settings improvements (#230)
marc-romu Jun 22, 2025
042973f
chore: update development version date to 0.3.3-dev.250622
actions-user Jun 22, 2025
042e17a
chore: update development version date to 0.3.3-dev.250622 (#231)
marc-romu Jun 22, 2025
cbe2f0e
fix: trailing space
marc-romu Jun 22, 2025
721b617
feat(providers): new temperature parameter for mistralai openai and d…
marc-romu Jun 22, 2025
e6ed607
fix(providers): temperature format to string
marc-romu Jun 22, 2025
bcd47e0
fix(deepseek): add tool call
marc-romu Jun 22, 2025
de24eda
fix(openai): add reasoning_effort parameter only for o-series models
marc-romu Jun 23, 2025
5641a79
ci: windsurf workflows
marc-romu Jun 23, 2025
349425b
refactor: code cleanup
marc-romu Jun 23, 2025
33f7092
fix(deepseek): not getting tool results properly
marc-romu Jun 23, 2025
e248519
fix(openai): update default model to gpt-4.1-mini
marc-romu Jun 23, 2025
fbb3c54
docs(changelog)
marc-romu Jun 23, 2025
813f6c7
ci(windsurf): new pr description generator
marc-romu Jun 23, 2025
9106803
chore: remove date from version for main release
actions-user Jun 23, 2025
d23c722
feat(providers): add temperature parameter support and slider UI cont…
marc-romu Jun 23, 2025
23374f4
chore: prepare release 0.3.3-alpha with version update and code style…
actions-user Jun 23, 2025
799d6e9
Update CHANGELOG.md
marc-romu Jun 23, 2025
45d8992
chore: prepare release 0.3.3-alpha with version update and code style…
marc-romu Jun 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions .github/actions/code-style/trailing-whitespace/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,14 @@ runs:
sed -i 's/\r$//' "$file"
else
# Report trailing whitespace
while IFS= read -r entry; do
path="${entry%%:*}"
num="${entry#*:}"
while IFS=: read -r file_num; do
if [[ "${{ inputs.mode }}" == "soft-check" ]]; then
echo "::warning file=$path,line=$num::Trailing whitespace found"
echo "::warning file=$file,line=$file_num::Trailing whitespace found in $file (line $file_num)"
else
echo "::error file=$path,line=$num::Trailing whitespace found"
echo "::error file=$file,line=$file_num::Trailing whitespace found in $file (line $file_num)"
ERR=1
fi
done < <(grep -nE '[[:blank:]]$' "$file" || true)
done < <(grep -nE '[^[:space:]]+[[:space:]]+$' "$file" | cut -d: -f1,3- || true)
# # Report CRLF
# while IFS= read -r entry; do
# path="${entry%%:*}"
Expand Down
3 changes: 3 additions & 0 deletions .github/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@
- name: "provider: OpenAI"
color: "000"
description: "Issues related to the OpenAI provider"
- name: "provider: DeepSeek"
color: "000"
description: "Issues related to the DeepSeek provider"

# Feature Labels
- name: "feature: Settings"
Expand Down
36 changes: 21 additions & 15 deletions .github/workflows/github-issue-labels-on-close.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,27 @@ jobs:
script: |
const issue = context.payload.issue;
const currentLabels = issue.labels.map(label => label.name);

// Remove all status labels
const statusLabels = currentLabels.filter(label => label.toLowerCase().startsWith('status:'));

if (statusLabels.length > 0) {
for (const label of statusLabels) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
name: label
});
}
console.log(`Removed status labels: ${statusLabels.join(', ')}`);
}

// Skip close label mapping if issue is completed
if (issue.state_reason === 'completed') {
console.log('Skipping close-label mapping for completed issue');
return;
}

// Define label mappings (status label -> close label)
const labelMappings = {
Expand Down Expand Up @@ -55,18 +76,3 @@ jobs:
});
console.log(`Added labels: ${labelsToAdd.join(', ')}`);
}

// Remove all status labels
const statusLabels = currentLabels.filter(label => label.toLowerCase().startsWith('status:'));

if (statusLabels.length > 0) {
for (const label of statusLabels) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
name: label
});
}
console.log(`Removed status labels: ${statusLabels.join(', ')}`);
}
4 changes: 3 additions & 1 deletion .github/workflows/pr-delete-auto-branches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ jobs:
startsWith(github.event.pull_request.head.ref, 'ci/') ||
startsWith(github.event.pull_request.head.ref, 'release/') ||
startsWith(github.event.pull_request.head.ref, 'feature/') ||
startsWith(github.event.pull_request.head.ref, 'feat/') ||
startsWith(github.event.pull_request.head.ref, 'hotfix/') ||
startsWith(github.event.pull_request.head.ref, 'bugfix/')
startsWith(github.event.pull_request.head.ref, 'bugfix/') ||
startsWith(github.event.pull_request.head.ref, 'fix/')
runs-on: ubuntu-latest
steps:
- name: Delete branch
Expand Down
4 changes: 3 additions & 1 deletion .windsurf/rules/ai-provider-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ globs: **/SmartHopper.Providers.*/*.cs

# AI Provider conventions
- Use SmartHopper.Providers.Template as a starting point
- Implement IAIProviderFactory & IAIProviderSettings
- Implement IAIProviderFactory & IAIProviderSettings
- AI providers must wrap any chain-of-thought output or reasoning summary in `<think></think>` tags so that `ChatResourceManager.CreateMessageHtml` can detect and render reasoning.
- UI settings are created in _controlFactories in SettingsDialog.cs by parsing SettingsDescriptor.
3 changes: 2 additions & 1 deletion .windsurf/rules/general-guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ trigger: always_on
- Use native Grasshopper types & methods when possible
- Refer to https://developer.rhino3d.com/ as the official documentation
- Use English only
- Only change code lines directly needed to implement the request; avoid unrelated refactors
- Only change code lines directly needed to implement the request; avoid unrelated refactors
- Prefer copy/pasting, renaming, and removing files via PowerShell commands, rather than direct edits
5 changes: 5 additions & 0 deletions .windsurf/rules/using-references-sorting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
trigger: always_on
---

Place System references first, sorted alphabetically. Then sort other using references in alphabetic order.
6 changes: 6 additions & 0 deletions .windsurf/rules/webchat-cdn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
trigger: glob
globs: src/SmartHopper.Core/AI/Chat/*
---

Always host third-party WebChat JS/CSS dependencies locally rather than using external CDNs (e.g. MathJax).
13 changes: 13 additions & 0 deletions .windsurf/workflows/changelog-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
description: Review the changelog and last commits for consistency
---

Omit this workflow if current branch is main or dev.

1. Get a list of all commits in the current branch that are not in dev branch.

2. Get the messages for all retrieved commits.

3. Compare the list of commits against the [Unreleased] section in CHANGELOG.md.

4. Suggest the user for missing mentions in CHANGELOG
28 changes: 28 additions & 0 deletions .windsurf/workflows/code-style.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
description: Clean code style
---

1. Ask the user which files they want to clean the code style, if not provided.

2. With the given list of files, perform de following cleaning in *.cs files:
- Add docstrings for all elements
- When using `/// <inheritdoc/>`, ensure the parent has docstring
- There must be a blank line between elements
- Code should not contain multiple whitespace characters in a row, such as:
Min = 1, -> Min = 1,
- Use trailing comma in multi-line initializers
- Single-line comment must be preceded by blank line
- Remove multiple consecutive blank lines
- Closing brace should be followed by blank line
- Add omitted braces in if, for, while, try...
- Using statements should be sorted alphabetically, keeping the system ones at the top
- The heading of the file should be as follows, replacing YYYY with the creation year of the file:
/*
* SmartHopper - AI-powered Grasshopper Plugin
* Copyright (C) YYYY Marc Roca Musach
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*/
11 changes: 11 additions & 0 deletions .windsurf/workflows/commit-message.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
description: Write a commit message for the currently staged/uncommited changes
---

The aim is to return a semantic commit message "<type>(<scope>): <subject>" for the current staged or uncommited changes.

1. Check for staged changes or, if none, all uncommited changes

2. Analyze them

3. Return a semantinc commit message
13 changes: 13 additions & 0 deletions .windsurf/workflows/init.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
description: Initialize today's work session
---

1. Update dev date to today in Solution.props. It must follow X.X.X-dev.YYMMDD format. If it currently is not a -dev version, increment the patch number and add the -dev.YYMMDD part. Examples:
- 0.1.0-beta -> 0.1.1-dev.YYMMDD
- 0.1.0-dev -> 0.1.0-dev.YYMMDD
- 0.1.0 -> 0.1.1-dev.YYMMDD
- 0.1.0-dev.250101-> 0.1.0-dev.YYMMDD

2. Update the version badge in README.md. Follow the logic in .github/actions/update-badges/action.yml.

3. Ensure the top section in CHANGELOG.md is [Unreleased].
17 changes: 17 additions & 0 deletions .windsurf/workflows/pr-description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
description: PR title and description generation
---

The aim is to return the title and the description for a PR, following the rules in CONTRIBUTING.md.

1. Analyze CONTRIBUTING.md

2. Read the [Unreleased] section in CHANGELOG.md

3. Check for an active PR in the current branch

4. Analyze the changes in the active PR, or the changes between the current branch and the dev branch if no PR

5. Return the PR title in a codeblock as plain text

6. Return the PR description in a seperate codeblock in markdown format
54 changes: 54 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,60 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.3.3-alpha] - 2025-06-23

### WIP

- Adding LaTeX support in chat UI with the MathJax library.

### Added

- Added DeepSeek provider ([#222](https://github.com/architects-toolkit/SmartHopper/issues/222)).
- Added temperature parameter support for MistralAI, OpenAI, and DeepSeek providers.
- Added slider UI control in settings dialog for numeric parameters.
- Added reasoning support:
- Render reasoning panels for `<think>` tags in chat UI as collapsible `<details>` blocks.
- Exclude reasoning from copy-paste (`mdContent`) and include in HTML display (`htmlContent`).
- Added configurable `reasoning_effort` setting (low, medium, high) for OpenAI o-series models.
- New `StripThinkTags` method in `Config.Utils.AI`.
- Set up OpenAI and DeepSeek to return reasoning in the response.

### Changed

- Updated default OpenAI model to gpt-4.1-mini.
- Mention `DeepSeek` as available provider in the About dialog.
- Settings dialog improvements:
- Added dropdown support for provider settings when a list of allowed values is provided.
- Increased max tokens for OpenAI, MistralAI and DeepSeek providers to 100000.
- Improved descriptions.
- Setting values that are empty or whitespace will be removed from the settings file on `UpdateProviderSettings`.
- AI providers updates:
- Updated deprecated OpenAI max_tokens parameter to max_completion_tokens.
- Refactored OpenAI, MistralAI, DeepSeek and TemplateProvider settings validation to use centralized validation methods.
- Renamed `OpenAI` to `OpenAIProvider`.
- Renamed `OpenAISettings` to `OpenAIProviderSettings`.
- Renamed `MistralAI` to `MistralAIProvider`.
- Renamed `MistralAISettings` to `MistralAIProviderSettings`.
- OpenAI, MisralAI and DeepSeek now remove `<think>` tags from messages before sending them to the API, using the `StripThinkTags` method from `Config.Utils.AI`.
- Reorganized providers settings and moved them from `AIProvider` to `AIProviderSettings`.

### Removed

- Provider settings cleanup:
- Removed `private LoadSettings` method from `OpenAISettings`.
- Removed `private LoadSettings` method from `TemplateProviderSettings`.
- Removed `CreateSettingsControl`, `GetSettings` and `LoadSettings` method from `IAIProviderSettings` and all implementations.
- Removed `ConcatenateItemsToJsonList` method from `ParsingTools` since it was not used.

### Fixed

- Fixed "AI List Filter might not be working as expected" ([#220](https://github.com/architects-toolkit/SmartHopper/issues/220)).
- Fixes "Accepted feature request: Add compatibility to Magistral thinking (by MistralAI)" ([#223](https://github.com/architects-toolkit/SmartHopper/issues/223)).
- Fixed limit to 4096 tokens for AI providers in settings dialog.
- Fixed errors in validation methods of providers.
- Fixed failing settings integrity check during initialization because providers were not loaded yet.
- Fixed settings dialog dropdown values not being saved and restored from storage.

## [0.3.2-alpha] - 2025-06-15

### Added
Expand Down
Loading
Loading