Commit Graph

45442 Commits

Author SHA1 Message Date
0ea1b1fde5 Merge pull request 'feat(addon-system): create kindred-addon-sdk package (#249)' (#259) from feat/kindred-addon-sdk into main
Some checks failed
Build and Test / build (push) Failing after 1m37s
Reviewed-on: #259
2026-02-17 14:49:32 +00:00
e667aceead feat(addon-system): create kindred-addon-sdk package (#249)
Some checks failed
Build and Test / build (pull_request) Failing after 1m40s
Add mods/sdk/ with the kindred_sdk Python package providing a stable
API layer for addon integration with Kindred Create platform features.

Modules:
- context: editing context/overlay registration wrappers
- theme: YAML-driven palette system (Catppuccin Mocha)
- origin: FileOrigin registration helpers
- dock: deferred dock panel registration
- compat: version detection utilities

The SDK loads at priority 0 (before all other addons) via the existing
manifest-driven loader. Theme colors are defined in a single YAML
palette file instead of hardcoded Python dicts, enabling future theme
support and eliminating color duplication across addons.

Closes #249
2026-02-17 08:36:27 -06:00
34964066a0 Merge pull request 'feat(addon-system): add <kindred> package.xml extensions and schema docs' (#257) from feat/package-xml-schema into main
Some checks failed
Deploy Docs / build-and-deploy (push) Successful in 46s
Build and Test / build (push) Failing after 2m1s
Reviewed-on: #257
2026-02-17 13:15:47 +00:00
33026b6ff9 Merge pull request 'feat: addon registry with runtime introspection API (#253)' (#258) from feat/addon-registry-api into main
All checks were successful
Build and Test / build (push) Successful in 30m27s
Sync Silo Server Docs / sync (push) Successful in 50s
Reviewed-on: #258
2026-02-16 23:41:17 +00:00
forbes
9dd43a7cc3 feat: addon registry with runtime introspection API (#253)
All checks were successful
Build and Test / build (pull_request) Successful in 44m33s
Add FreeCAD.getAddonRegistry() function for runtime addon introspection.

Changes to addon_loader.py:
- Add contexts field to AddonManifest for tracking context IDs
- Add register_context() method for addons to declare contexts at runtime
- Add contexts() method returning {context_id: [addon_names]} mapping
- Parse <contexts> element from <kindred> in package.xml
- Add getAddonRegistry() function returning the registry singleton

Changes to Init.py:
- Expose getAddonRegistry as FreeCAD.getAddonRegistry after loading

Usage:
  registry = FreeCAD.getAddonRegistry()
  registry.get('ztools')        # AddonManifest for ztools
  registry.loaded()             # list of loaded addons
  registry.is_loaded('silo')    # True/False
  registry.contexts()           # {context_id: [addon_names]}

Closes #253
2026-02-16 17:33:28 -06:00
98d1877472 feat(addon-system): add <kindred> package.xml extensions and schema docs
Some checks failed
Build and Test / build (pull_request) Failing after 2m59s
Add <kindred> elements to ztools (priority=50) and silo (priority=60)
package.xml files declaring min_create_version, load_priority,
pure_python, and context metadata.

Fix addon_loader.py topological sort to use level-by-level processing
with (priority, name) sorting within each level, replacing
static_order() which did not guarantee deterministic ordering.

Add docs/src/development/package-xml-schema.md documenting the full
field reference, schema example, and backward compatibility notes.

Closes #252
2026-02-16 14:21:27 -06:00
587a95dd66 Merge pull request 'feat(bootstrap): replace exec()-based addon loading with manifest-driven loader' (#256) from feat/manifest-addon-loader into main
All checks were successful
Build and Test / build (push) Successful in 50m29s
Reviewed-on: #256
2026-02-16 19:17:59 +00:00
73f6641199 Merge pull request 'docs: extend README with architecture, platform support, and usage detail' (#247) from docs/extend-readme into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #247
2026-02-16 19:17:42 +00:00
60ceb47e4f feat(bootstrap): replace exec()-based addon loading with manifest-driven loader
All checks were successful
Build and Test / build (pull_request) Successful in 34m4s
Add addon_loader.py implementing a six-stage pipeline: scan mods/ for
package.xml files, parse standard fields and optional <kindred>
extensions via ElementTree, validate version compatibility, resolve
load order via graphlib.TopologicalSorter (with legacy fallback),
exec() Init.py/InitGui.py, and populate a runtime AddonRegistry
exposed as FreeCAD.KindredAddons.

Replace hard-coded addon lists in Init.py and InitGui.py with calls
to addon_loader.load_addons(). All QTimer-based Silo integration code
in InitGui.py is unchanged.

Backward compatible: addons without <kindred> elements load with no
constraints using the existing ztools-then-silo order.

Closes #248
2026-02-16 13:13:46 -06:00
a8df078eb3 docs: extend README with architecture, platform support, and usage detail
All checks were successful
Build and Test / build (pull_request) Successful in 35m8s
Add editing context system description, built-in context table, and
Python API reference. Add architecture section covering addon
integration and unified origin system. Expand ztools and Silo usage
sections with command breakdowns. Add platform support table. Expand
project structure tree with Kindred-specific files.
2026-02-16 11:02:11 -06:00
f4d91db094 Merge pull request 'feat(icons): add icon theming infrastructure with Catppuccin color remapping' (#246) from feat/icon-theming into main
Some checks failed
Build and Test / build (push) Has been cancelled
Deploy Docs / build-and-deploy (push) Successful in 46s
Sync Silo Server Docs / sync (push) Successful in 37s
Reviewed-on: #246
2026-02-16 02:36:17 +00:00
b083970a4d Merge branch 'main' into feat/icon-theming
Some checks failed
Build and Test / build (pull_request) Has been cancelled
2026-02-16 02:36:01 +00:00
forbes
d7b532255b feat(icons): add icon theming infrastructure with Catppuccin color remapping
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- Remove hand-crafted kindred-icons/ in favor of auto-generated themed icons
- Add icons/mappings/ with FCAD.csv (Tango palette) and kindred.csv (Catppuccin Mocha)
- Add icons/retheme.py script to remap upstream FreeCAD SVG colors
- Generate icons/themed/ with 1,595 themed SVGs (45,300 color replacements)
- BitmapFactory loads icons/themed/ as highest priority before default icons
- 157-color mapping covers the full Tango palette, interpolating between
  4 luminance anchors per color family

Regenerate: python3 icons/retheme.py
2026-02-15 20:34:22 -06:00
19a91cb221 Merge pull request 'fix(assembly): guard onChanged against solver during document restore' (#245) from fix/assembly-restore-segfault into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #245
2026-02-16 00:46:17 +00:00
forbes
2fa1672edf fix(assembly): guard onChanged against solver during document restore
Some checks failed
Build and Test / build (pull_request) Has been cancelled
During document restore, PropertyLinkList::Restore sets the Group property
on AssemblyObject, triggering onChanged → updateSolveStatus → solve →
validateNewPlacements. At this point joints reference objects that haven't
been restored yet, causing a null pointer dereference (SIGSEGV).

Add an isRestoring() guard to skip solver invocation during restore,
matching the existing pattern in AssemblyLink::onChanged().
2026-02-15 18:45:00 -06:00
Kindred Bot
d497471ed3 docs: sync Silo server documentation
Some checks failed
Deploy Docs / build-and-deploy (push) Successful in 48s
Build and Test / build (push) Has been cancelled
Auto-synced from kindred/silo main branch.
2026-02-15 23:12:55 +00:00
7b1662a3d1 Merge pull request 'fix: re-add Create module to CMake build' (#244) from fix/create-module-cmake into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #244
2026-02-15 23:06:37 +00:00
forbes
128d7e0710 fix: re-add Create module to CMake build
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The Create module (src/Mod/Create/) was lost from src/Mod/CMakeLists.txt
during the rebase onto upstream FreeCAD 1.2.0-dev. Without it:
- Mod/Create/ is never installed, so the bootstrap that loads ztools
  and silo never runs
- mods/ztools/ and mods/silo/ are never installed
- Startup shows 'Ignoring unknown SiloWorkbench/ZToolsWorkbench'

Also adds kc_format.py to the Create install list (was missing).
2026-02-15 17:03:38 -06:00
c9d38d92aa Merge pull request 'fix(ui): improve edge/vertex visibility on dark backgrounds (#196)' (#243) from fix/edge-visibility into main
All checks were successful
Build and Test / build (push) Successful in 47m24s
Reviewed-on: #243
2026-02-15 19:06:31 +00:00
forbes
002619b213 fix(ui): improve edge/vertex visibility on dark backgrounds (#196)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Change default edge and vertex color from near-black RGB(25,25,25)
to Catppuccin Mocha Subtext0 RGB(166,173,200) — a neutral light
blue-grey with 4.94:1 contrast against the Mocha background.

Update both the compile-time default in ViewParams.h and the
KindredCreate preference pack. The previous purple (#9344ee) had
only 2.91:1 contrast, causing edges to blend into the background
on cylindrical geometry.

Closes #196
2026-02-15 09:56:25 -06:00
6bb080773b Merge pull request 'fix(ui): rebalance Auth/Activity dock panel sizes (#190, #191)' (#242) from fix/panel-layout-balance into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #242
2026-02-15 15:52:15 +00:00
forbes
1dbeff7758 fix(ui): rebalance Auth/Activity dock panel sizes
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Use resizeDocks() to give Database Activity 80% of the vertical space
in the right dock area, keeping Database Auth compact at 120px.

Closes #190, Closes #191
2026-02-15 09:43:31 -06:00
cbc09cd3c5 Merge pull request 'fix: preserve caller globals in exec() for module Init.py/InitGui.py loading' (#240) from fix/exec-globals-regression into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #240
2026-02-15 10:22:09 +00:00
forbes
1762bd23d1 fix: preserve caller globals in exec() for module Init.py/InitGui.py loading
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The previous fix (e10841a6c8) passed {"__file__": ...} as the globals
argument to exec(), which replaced the caller's globals dict entirely.
This stripped FreeCAD, FreeCADGui, Workbench, and other names that
modules expect to be available, causing NameError failures across
Material, Tux, Mesh, ReverseEngineering, OpenSCAD, Inspection, Robot,
AddonManager, MeshPart, and others.

Fix by merging __file__ into the caller's globals with
{**globals(), "__file__": str(init_py)} so both __file__ and all
existing names remain available in the executed code.
2026-02-15 04:21:26 -06:00
6caf7375c2 Merge pull request 'fix(ui): add tooltip fallback for truncated tree item names (#193)' (#239) from fix/tree-tooltip-fallback into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #239
2026-02-15 09:10:10 +00:00
190834716b Merge branch 'main' into fix/tree-tooltip-fallback
Some checks failed
Build and Test / build (pull_request) Has been cancelled
2026-02-15 09:09:58 +00:00
6e41aa67fe Merge pull request 'fix(ui): adaptive text color for breadcrumb pills (#200)' (#238) from fix/breadcrumb-contrast into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #238
2026-02-15 09:09:43 +00:00
forbes
b60f017363 fix(ui): add tooltip fallback for truncated tree item names (#193)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Set tooltips on tree widget items so hovering reveals the full name
when text is truncated by column width. Covers all code paths:
- createNewItem() — initial item creation (columns 0, 1, 2)
- slotChangeObject() — Label and Label2 property updates
- slotNewDocument() — document item creation
- slotRelabelDocument() — document rename

Closes #193
2026-02-15 03:05:05 -06:00
forbes
7bbe856ba4 fix(ui): adaptive text color for breadcrumb pills (#200)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Use WCAG relative luminance to choose dark or light text color based
on pill background brightness. Bright backgrounds (Green, Yellow,
Mauve, Teal, Peach) now get dark text (#1e1e2e) instead of the
previous fixed light text (#cdd6f4) that caused poor contrast.

Closes #200
2026-02-15 03:01:46 -06:00
3de92325a3 Merge pull request 'fix: pass __file__ to exec() in addon Init.py/InitGui.py loading' (#237) from fix/addon-init-file-variable into main
Some checks failed
Sync Silo Server Docs / sync (push) Failing after 1m18s
Build and Test / build (push) Has been cancelled
Reviewed-on: #237
2026-02-15 03:28:26 +00:00
forbes
e10841a6c8 fix: pass __file__ to exec() in addon Init.py/InitGui.py loading
Some checks failed
Build and Test / build (pull_request) Has been cancelled
DirMod.run_init() and DirModGui.run_init_gui() use exec(code) to run
addon Init.py and InitGui.py files, but don't pass __file__ in the
globals dict. Addons that reference __file__ (e.g. Silo) crash with
NameError: name '__file__' is not defined.

Pass {"__file__": str(init_py)} as the globals argument so __file__
is available in the executed code, matching the behavior of normal
Python module loading.
2026-02-14 21:27:25 -06:00
cecdb2e68c Merge pull request 'feat(ui): move editing context breadcrumb to viewport overlay (#232)' (#236) from feat/breadcrumb-viewport-overlay into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #236
2026-02-15 01:24:09 +00:00
01ed1cf7ee Merge branch 'main' into feat/breadcrumb-viewport-overlay
Some checks failed
Build and Test / build (pull_request) Has been cancelled
2026-02-15 01:23:43 +00:00
294da1dc03 Merge pull request 'fix(toolbar): add workbench-level fallback contexts (#230)' (#235) from fix/workbench-toolbar-fallback into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #235
2026-02-15 01:23:34 +00:00
e6dd3c6896 Merge branch 'main' into fix/workbench-toolbar-fallback
Some checks failed
Build and Test / build (pull_request) Has been cancelled
2026-02-15 01:23:25 +00:00
e3ce32ca8a Merge pull request 'fix(prefs): apply KindredCreate defaults after Reset All (#229)' (#234) from fix/reset-defaults-create into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #234
2026-02-15 01:22:22 +00:00
2b1519d7ba Merge branch 'main' into fix/reset-defaults-create
Some checks failed
Build and Test / build (pull_request) Has been cancelled
2026-02-15 01:22:08 +00:00
fae8289e89 Merge pull request 'fix(ui): match origin dropdown height to workbench dropdown (#231)' (#233) from fix/origin-dropdown-height into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #233
2026-02-15 01:21:55 +00:00
645e1b4607 Merge branch 'main' into fix/origin-dropdown-height
Some checks failed
Build and Test / build (pull_request) Has been cancelled
2026-02-15 01:21:40 +00:00
forbes
fd371573fd feat(ui): move editing context breadcrumb to viewport overlay (#232)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Convert BreadcrumbToolBar from a QToolBar in the MainWindow toolbar area
to a QFrame overlay at the top-left of each 3D viewport.

Changes:
- BreadcrumbToolBar: change base class from QToolBar to QFrame, use
  QHBoxLayout instead of toolbar actions, semi-transparent overlay
  background with rounded corners
- MainWindow: remove breadcrumb toolbar creation, toolbar break, and
  signal connection
- View3DInventor: create per-view BreadcrumbToolBar as a child of the
  GL viewer widget, positioned at (8,8) with event filter to keep it
  raised on viewport resize

Each 3D view now has its own breadcrumb instance connected to the
EditingContextResolver singleton. This reclaims the full-width toolbar
row and keeps the editing context visually tied to the viewport.
2026-02-14 19:17:42 -06:00
forbes
9a566cabf9 fix(toolbar): add workbench-level fallback contexts (#230)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
PartDesign, Sketcher, and Assembly toolbars use
DefaultVisibility::Unavailable and rely on EditingContextResolver to
show them. When switching to these workbenches without a specific editing
state (e.g. PartDesign with no Body activated), no context matches and
all workbench toolbars stay hidden.

Add workbench-level fallback contexts at priority 20 that match when the
workbench is active regardless of editing state:
- partdesign.workbench: shows Helper Features + Sketcher toolbars
- sketcher.workbench: shows Sketcher + Sketcher Tools
- assembly.workbench: shows Assembly toolbar

These fill the gap between object-specific contexts (priority 30+) and
the empty_document fallback (priority 10).
2026-02-14 19:17:04 -06:00
forbes
3804164158 fix(prefs): apply KindredCreate defaults after Reset All (#229)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
When "Reset All" is used in Preferences, restoreDefaults() clears the
entire User parameter tree via ParameterManager::Clear(). Widgets then
fall back to upstream FreeCAD hardcoded defaults (e.g. light theme,
default units) instead of Kindred Create defaults.

After clearing, apply the KindredCreate preference pack to restore
Create-specific baseline settings (Catppuccin Mocha theme, toolbar
layout, unit preferences, etc.).
2026-02-14 19:16:29 -06:00
forbes
79501bd5ca fix(ui): match origin dropdown height to workbench dropdown (#231)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Add min-height: 20px to OriginSelectorWidget in KindredCreate.qss so it
renders at the same visual height as the WorkbenchComboBox. The two
widgets use different Qt base classes (QToolButton vs QComboBox) with
different intrinsic size hints, causing a height mismatch in the toolbar.
2026-02-14 19:15:51 -06:00
83672c8c05 Merge pull request 'feat(silo): DAG status display in Activity panel (#219)' (#228) from feat/silo-dag-activity into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #228
2026-02-15 00:12:00 +00:00
forbes
d7f5393510 feat(silo): update silo submodule — DAG status in Activity panel (#219)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Shows DAG sync status, validation results, and job lifecycle
events in the Database Activity dock widget via SSE signals.

Closes #219
2026-02-14 15:28:46 -06:00
f5412a58fc Merge pull request 'feat(silo): handle DAG and job SSE events (#218)' (#227) from feat/silo-sse-dag-events into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #227
2026-02-14 21:27:42 +00:00
forbes
7fb3aa4c01 feat(silo): update silo submodule — DAG and job SSE events (#218)
All checks were successful
Build and Test / build (pull_request) Successful in 39m3s
Extends SiloEventListener with signals for dag.updated,
dag.validated, and job lifecycle events (created, claimed,
progress, completed, failed, cancelled).

Closes #218
2026-02-14 15:22:35 -06:00
a5a1914892 Merge pull request 'feat(silo): headless runner entry points — dag_extract, validate, export (#217)' (#226) from feat/silo-runner into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #226
2026-02-14 21:19:53 +00:00
forbes
9da73fe6e7 feat(silo): update silo submodule — headless runner entry points (#217)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Adds runner.py with dag_extract, validate, and export entry points
for silorunner compute jobs.

Closes #217
2026-02-14 15:17:38 -06:00
4cb8a3a1ec Merge pull request 'feat(silo): push DAG on save and commit (#216)' (#224) from feat/silo-dag-on-save into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #224
2026-02-14 21:14:02 +00:00