Commit Graph
98 Commits
Author SHA1 Message Date
Ewald ALOEBOETOE 4a19fc81a5 Fix remaining issues from the integration audits
- Watcher: a sidecar JSON created or edited next to an unchanged media
  file now invalidates that file's metadata cache and scan journal and
  forces a re-extraction; a non-incremental re-index no longer skips
  assets that already have a metadata row when the cache was cleared.
- Merge index rows that are one file under different Windows path
  spellings at startup, keeping the best rating, all tags, the stack
  cover, execution ids and the vector embedding.
- Remove deleted/removed assets from the generated feed too.
- Scope the floating viewer's single-letter shortcuts to the viewer
  (pointer, focus or pop-out) instead of the whole page.
- Take LGraph/LGraphCanvas types from comfyui-frontend-types and drop
  @comfyorg/litegraph; delete five dead frontend files.
- Fix an order-dependent test that leaked an input-directory override.
2026-11-04 08:48:26 +00:00
Ewald ALOEBOETOE 6cafe5cc42 Fix search syntax errors, sidecar JSON, workflow JSON recognition, MFV media leak
- Search: tokens were filtered down to nothing for inputs like "at-7",
  "(2)", "AND", a single letter or a lone quote, producing an empty FTS
  MATCH and "Invalid search query syntax". Fall back to the raw words,
  treat punctuation-only input as browse-all, keep non-Latin scripts and
  fold accents on Latin letters only (as FTS5 unicode61 does).
- Sidecar JSON (<file>.<ext>.json, then <stem>.json) now supplies the
  workflow/prompt/generation data of images, videos and audio when none
  is embedded; shared with the 3D extractor; BOM tolerated.
- Workflow tab: skip hidden folders (.history version snapshots were
  listed as workflows), only list UI exports, API prompts and wrappers,
  read with utf-8-sig, drop invalid JSON from the index (version 5),
  and load API-format workflows with app.loadApiJson.
- Floating viewer: release (not just pause) videos before re-rendering
  and on dispose, so Live mode no longer accumulates media players.
2026-11-04 08:26:47 +00:00
Ewald ALOEBOETOE 4407289e42 Fix duplicate-stack render loop and wrong duplicate grouping
- Clicking a duplicate-stack badge could freeze ComfyUI: displayAssets,
  the per-card ref callback (syncRenderedDuplicateCards) and the live
  upsert dedupe each rewrote _mjrDupStack/_mjrDupMembers on reactive
  assets read by the grid template, with a new array every pass and
  conflicting representatives. The ref callback ran on every render, so
  each write scheduled another render (no recursion limit in prod Vue).
- Compute duplicate stacks only in buildDisplayAssets with change-guarded
  writes and stable member arrays; keep one ref callback per card; stop
  the other passes from touching duplicate fields.
- A duplicate is now the same name in the same source/root/subfolder:
  files sharing a name in different folders are no longer stacked,
  hidden from the grid or given another file's generation time.
- The duplicates view lists every copy using cycle-free member copies.
- Add regression tests (render-loop idempotence, folder scoping).
2026-11-04 08:11:01 +00:00
Ewald ALOEBOETOE 49bf320631 Fix asset sync for new, moved and deleted files
- Fix assets_fts triggers: the external-content FTS5 table was updated
  with plain UPDATE/DELETE, so every rename or move failed with
  "database disk image is malformed" and the watcher fell back to
  delete + re-index, losing ratings, tags and collections. Use the FTS5
  'delete' command, limit the update trigger to filename/subfolder and
  repair existing databases (plus an FTS rebuild) at startup.
- Wait for the prompt history entry before post-execution ingestion:
  ComfyUI fires on_prompt_end before task_done() stores history, so
  outputs of prompts queued from the API or another client could be
  missed.
- Scan prune only removes assets whose absence is confirmed; a stat
  error or an unreadable scan root no longer deletes user data. Report
  pruned assets instead of SQLite change counts.
- Emit mjr-assets-removed for watcher deletes and scan prunes and
  mjr-asset-updated for moves so open grids update in place.
- Annotate mjr-scan-complete with origin and needs_refresh; reload the
  grid once when live events cannot cover a change and summarise a
  finished directory scan in one ComfyUI core toast.
- Document the comparison with ComfyUI core's asset system.
2026-11-04 08:01:26 +00:00
Ewald ALOEBOETOE b6f6082f4f Move Majoor notifications onto ComfyUI core toasts
- Use the typed ToastManager API (success/error/info/warning/loading)
  instead of the deprecated add(); add() stays as a fallback for older
  frontends.
- Accept a toast manager without add() so toasts keep working once
  ComfyUI drops the deprecated methods.
- Tracked operations (DB restore/reset, vector backfill) show one
  loading toast updated in place via its ToastId instead of stacking a
  toast per step; dismiss them on extension teardown.
- Persistent toasts use the largest safe timer delay instead of
  Infinity; history action links become native toast action buttons
  (http(s) or same-origin paths only).
- Route genInfoOverridePicker and comfyAlert through the core toast API;
  drop the app.ui.toast fallback, the no-op fallback dismisser and the
  unused .mjr-toast CSS.
- Keep the Majoor message center as a read-only history; it no longer
  pops open by itself on reset/backfill.
- Document the notification audit.
2026-11-04 07:38:14 +00:00
Ewald ALOEBOETOE d0ab7d594e Resolve remaining ComfyUI integration conflicts
- Move the read-only OpenAPI compat surface from /api/v2/assets to
  /mjr/am/compat/assets so it never squats ComfyUI core's /api namespace;
  the legacy alias is opt-in via MJR_AM_LEGACY_API_V2_ASSETS=1.
- Allow Python 3.14 (requires-python <3.15) and add 3.14 to CI and tox.
- Stop wrapping api.queuePrompt: progress tracking now resolves the
  running prompt from the core Jobs API (getJobDetail), then /queue and
  /history, driven by websocket events. Remove wrapHostQueuePrompt.
- Add opt-in Majoor.Integration.HideNativeAssetsTab setting that hides
  ComfyUI's native Assets sidebar tab through the official
  getSidebarTabs/unregisterSidebarTab API and restores it when disabled.
- Fix all 913 type errors in tsconfig.test.json and type-check tests in
  CI; drop a duplicated `stubs` key in asset_card_inner test; make
  addToastHistory's type argument optional for the object form.
- Update audit report, changelog, API reference and env var docs.
2026-11-03 21:16:34 +00:00
Ewald ALOEBOETOE fdb0c5b2f1 Align host integration with current ComfyUI frontend/backend
- hostAdapter: serialize the root graph instead of calling the now-async
  graphToPrompt() synchronously (avoids exporting only the open subgraph
  and an unhandled rejection); read dirty state from the workflow store.
- Bump @comfyorg/comfyui-frontend-types to ^1.60.0: 1.57.3 was published
  without index.d.ts, so the official ComfyApp type was silently lost.
- Backend: typed aiohttp request keys (web.RequestKey when available)
  to silence NotAppKeyWarning on aiohttp >= 3.13 and avoid key clashes.
- Fix ruff import-order failures; rebuild dist bundle.
- Add docs/COMFYUI_INTEGRATION_AUDIT.md with remaining conflict risks
  and an integration roadmap.
2026-11-03 21:00:06 +00:00
copilot-swe-agent[bot]andMajoorWaldi 14d773f06d Fix custom Inputs indexing and expose an explicit scan button
Co-authored-by: MajoorWaldi <129623145+MajoorWaldi@users.noreply.github.com>
2026-10-24 16:46:36 +00:00
Ewald 843ba2d823 Add 16-bit PNG, EXR, AVIF and AV1/WebM/MKV output to Majoor save nodes
Save Image gains format, input_color_space and crf options backed by the core Save Image (Advanced) encoders. Save Video gains mp4/mkv/webm with H.264 or AV1 and keeps the source bit depth and HDR colour space. Both nodes return their frames, and the video sidecar PNG now honours --disable-metadata.
2026-10-01 12:18:20 +02:00
Ewald 990071069f Remove automatic GitHub release/update check
The frontend called checkMajoorVersion() unconditionally on startup,
and the backend /mjr/am/releases endpoint made outbound requests to
api.github.com to power it. This violates the no-internet-requests
policy for core ComfyUI code, even for update checks framed as
diagnostic or opt-out. Removes the endpoint, the frontend check, the
now-dead version-update badge dot in HeaderSection.vue, and associated
tests/docs.
2026-09-30 16:55:50 +02:00
Ewald a734229298 Fix .comfyignore excluding mjr_am_backend/adapters/tools from Registry packages
The unanchored `tools/` pattern matched that directory at any depth,
stripping the ExifTool/FFProbe adapters out of published packages and
causing ModuleNotFoundError at startup. Anchored to /tools/ so only
the root-level dev-scripts folder is excluded. Bump to 2.5.3.
2026-09-27 22:13:22 +02:00
Ewald 9787ec46e1 Add automatic GitHub Release creation to publish workflow
Bump version to 2.5.2.
2026-09-27 20:26:55 +02:00
copilot-swe-agent[bot]andMajoorWaldi aa9d28bc53 Merge remote-tracking branch 'origin/main' into fix/registry-runtime-hardening
# Conflicts:
#	dist/chunks/FloatingViewer-AB1oLZ0d.js
#	dist/chunks/FloatingViewer-BVmALIs3.js
#	dist/chunks/FloatingViewer-Cg2hGEZM.js
#	dist/chunks/LiveStreamTracker-0EQGV-lK.js
#	dist/chunks/LiveStreamTracker-BUT5H4M5.js
#	dist/chunks/LiveStreamTracker-DdMfL0ro.js
#	dist/chunks/SidebarWorkflowSection-B4wvtrtQ.js
#	dist/chunks/SidebarWorkflowSection-B_P-QZwl.js
#	dist/chunks/SidebarWorkflowSection-DckvqBNY.js
#	dist/chunks/TagsEditor-B8xpRa5e.js
#	dist/chunks/TagsEditor-BHGoWuSC.js
#	dist/chunks/TagsEditor-cUM_tRt-.js
#	dist/chunks/Viewer-DDNDTRcP.js
#	dist/chunks/Viewer-Dzb5KE6D.js
#	dist/chunks/Viewer-GH30s1No.js
#	dist/chunks/ViewerPortal-BAh1499M.js
#	dist/chunks/ViewerPortal-C-GBMubk.js
#	dist/chunks/ViewerPortal-DvYVQ32S.js
#	dist/chunks/floatingViewerManager-5-IYujSt.js
#	dist/chunks/floatingViewerManager-BVG4XDLW.js
#	dist/chunks/floatingViewerManager-Bnd82Qrd.js
#	dist/chunks/genInfo-Bq-kF66o.js
#	dist/chunks/genInfo-CV-v139t.js
#	dist/chunks/genInfo-CwY4j1FN.js
#	dist/chunks/mjr-primevue-C955bvXT.js
#	dist/chunks/mjr-primevue-DtKnnCVn.js
#	dist/chunks/mjr-primevue-n1rsQYJg.js
#	dist/chunks/mjr-vue-vendor-BU1tBlvz.js
#	dist/chunks/mjr-vue-vendor-CF0zsqr1.js
#	dist/chunks/mjr-vue-vendor-D2GeV7Qd.js
#	dist/chunks/openMajoorSettings-CHrLP8DR.js
#	dist/chunks/openMajoorSettings-DU4OegtI.js
#	dist/chunks/openMajoorSettings-JYq392b-.js
#	dist/chunks/viewerOpenRequest-C4hEgmOj.js
#	dist/chunks/viewerOpenRequest-CzyrZA71.js
#	dist/chunks/viewerOpenRequest-DQQY02Vk.js
#	dist/chunks/viewerRuntimeHosts-CIiyEfr6.js
#	dist/chunks/viewerRuntimeHosts-CuR8T4j6.js
#	dist/chunks/viewerRuntimeHosts-DC1iA_jY.js
#	dist/entry.js
#	mjr_am_backend/features/index/vector_service.py
#	mjr_am_backend/routes/core/request_json.py
#	mjr_am_backend/routes/core/security_proxies.py
#	mjr_am_backend/routes/core/security_tokens.py
#	mjr_am_shared/version.py

Co-authored-by: MajoorWaldi <129623145+MajoorWaldi@users.noreply.github.com>
2026-09-26 17:40:42 +00:00
Ewald 9c5078d174 fix: harden registry packaging and runtime boundaries
Exclude development-only content from Registry packages while retaining runtime
docs and vendor assets. Centralize environment access and media process execution,
validate filesystem inputs, and restrict nested media protocols.

Route update checks through the backend GitHub boundary and read version metadata
without spawning Git. Preserve annotated-tag priority over lightweight nightly
tags, including packed refs, with regression coverage. Rebuild the frontend bundle.

Validation: Python tests with coverage, JS tests, targeted media/version regression
tests, and the canonical Python quality gate.
2026-09-26 19:21:04 +02:00
Ewald 08c643c87d fix: address deep audit findings (backend/frontend/docs conventions)
Docs:
- Fix stale version/date banner in docs/DOCUMENTATION_INDEX.md (2.4.9 -> 2.5.1)
- Normalize CHANGELOG.md section headers to plain text (strip inconsistent
  emoji prefixes used in older entries)
- Add missing diacritics in French command labels (locales/fr/commands.json)
- Add ToC anchors for nested Installation subsections in README.md

Backend:
- Document the comfy_entrypoint() wrapper's rationale in __init__.py

Frontend:
- Wire tsconfig.strict.json into an actual npm script (typecheck:js:strict,
  now part of quality:strict) instead of leaving it dead/unenforced
- Fix the 8 strict-mode type errors this surfaced across
  comfyWorkflowParser.ts, canvasLoaderNode.ts, FloatingViewer.impl.ts and
  workflowGraphMapActions.ts
- Rebuild dist/ to match source

Deferred (too large/risky to blind-fix in this pass):
- ui/vue/** ESLint+Vue+TS linting: typescript-eslint currently has no
  compatible release for this repo's typescript@7.0.2, so adding
  eslint-plugin-vue/typescript-eslint is blocked upstream
- Converting all 44 .vue SFCs to lang="ts" with typed defineProps
- Eliminating the ~230 any/as any occurrences under ui/vue
- Auditing/reducing the ~1082 except Exception: blocks repo-wide
2026-09-11 19:14:28 +02:00
Ewald b700104588 feat: modernize ComfyUI integration and add KJNodes previews 2026-08-12 11:16:06 +02:00
MajoorWaldi 6b34e87098 feat: opt-in folder browsing default + browse-mode index kickoff
- Default 'Show folders in Input / Output panels' (browser.showFolders) to
  disabled: fresh installs keep the classic flat grid until the user opts in
  (backend settings service, frontend defaults, settings UI toggle).
- Gate the root-level 'Create folder here' context menu on the setting.
- Kick off a throttled incremental background scan when browse mode serves
  the first page, so unindexed files get indexed/enriched and asset status
  dots resolve instead of staying pending (blue).
- Document the feature and setting in README, CHANGELOG, and
  docs/SETTINGS_CONFIGURATION.md.
2026-08-06 18:07:26 +02:00
Ewald e3999f8ef9 docs: document Collect Files feature (new guide, README, API reference, index, changelog) 2026-07-24 15:44:31 +02:00
Ewald 10f851aaae Add metadata FTS backfill, registry logging collision fixes, i18n locales, and doc updates 2026-07-22 16:33:34 +02:00
Ewald b98edbb80f Fix viewer paths and clarify write access 2026-07-10 11:43:00 +02:00
Ewald faf4055e08 Improve asset sidebar viewer and panel UX 2026-07-02 17:38:46 +02:00
Ewald 11d1a9c659 Clarify remote LAN write auth failures 2026-06-25 17:15:55 +02:00
Ewald 67a8aa4961 Release 2.4.9 and fix LTX video drops 2026-06-25 12:29:16 +02:00
Ewald bacc50000e Improve VRAM controls and settings organization 2026-06-16 17:17:19 +02:00
Ewald 5c31f29ecc Add workflow roots and fix video previews 2026-06-11 20:50:18 +02:00
Ewald 20a50040a6 Add workflow library scope 2026-06-09 10:28:25 +02:00
MajoorWaldi 99398aad5d Fix mojibake text and update default settings 2026-05-31 20:03:25 +02:00
Ewald 85a82f130a test: migrate ui/tests from .mjs to .ts
- Rename 132 *.vitest.mjs -> *.vitest.ts
- Rename vitest.setup.mjs -> vitest.setup.ts
- Rename helpers/vitestEnvironment.mjs -> vitestEnvironment.ts
- Delete settings_store.test.mjs (Node test runner, superseded by .vitest.ts)
- Fix .mjs imports in vitest.setup.ts and grid_loader_adaptive_paging.vitest.ts

Config updates:
- vitest.config.mjs: setupFiles, include, coverage.include -> .ts
- tsconfig.test.json: new dedicated config for test files (strict:false)
- knip.json: update project pattern for tests
- package.json: add typecheck:tests script (audit-only)
2026-05-26 13:04:05 +02:00
Ewald a78f4572c8 Align frontend layout with ComfyUI conventions 2026-05-26 10:42:22 +02:00
Ewald 5c6ec82e8e migrate frontend source to TypeScript 2026-05-25 00:36:51 +02:00
Ewald 6587940862 refactor(app): enhance ComfyUI integration and settings sync - Implement two-way binding for ComfyUI settings in Majoor - Add new settings for auto-opening viewers and floating sidebar - Improve extension manager compatibility and dialog handling - Extend sidebar tab registration and controller discovery - Introduce graph canvas helpers for centering view and getting viewport bounds - Enhance minimap functionality with new graph canvas methods - Add settings sync with ComfyUI language 2026-05-23 18:35:21 +02:00
Ewald a363a77a6b feat(db): Phase C tag normalization — v18/v19 migrations, normalized FTS, readers v2, stop-write, drop legacy columns
- m018_fts_from_normalized_tags: replace FTS triggers to read from asset_tags+tags
  instead of the legacy JSON asset_metadata.tags column
- m019_drop_legacy_tag_columns: remove asset_metadata.tags and tags_text via
  create-copy-swap; includes invariant check (aborts if legacy tags not backfilled)
- registry.py: MIGRATIONS = [M017, M018, M019]
- schema_fts.py / schema_sql.py: FTS helpers and baseline triggers rewritten to
  source from normalized tables with asset_tags guard
- TagsRepository: normalized read path (get_tags_for_asset, list_assets_with_tag,
  search_assets_by_tags) + sync_from_legacy_row repair helper
- Readers v2: searcher, result_hydrator, metadata_helpers, updater, rating_tags_service,
  rename_service, stacks/service, duplicates/service migrated to asset_tags/tags JOIN
- Stop-Write: writes no longer update asset_metadata.tags / tags_text
- sqlite_facade: ahas_table helper; sqlite_recovery updated
- deps.py: TagsRepository wired into service container
- scripts/tag_drift_doctor.py: detects assets with legacy tags not backfilled
- ADR 0009, ARCHITECTURE_MAP, RATINGS_TAGS_COLLECTIONS, adr/README updated
- Tests: test_drop_legacy_tag_columns (2), test_fts_from_normalized (6),
  test_tags_dual_write, test_tags_normalized_readers + regression fixes across
  test_rating_tags_import, test_index_metadata_helpers, test_index_searcher,
  test_asset_updater, test_deps, test_schema_heal
- Full suite: 1687 passed, 2 skipped, 2 pre-existing failures (test_health_routes)
2026-05-22 15:00:27 +02:00
Ewald 9876e36c22 chore: viewer, context menu, stacks, docs updates 2026-05-21 08:09:38 +02:00
Ewald 5bc7d71a24 Release v2.4.8 2026-05-18 00:25:14 +02:00
Ewald 4e7207a05d feat: update drag drop, docs, and build outputs 2026-05-15 17:13:04 +02:00
Ewald 9501254ddc Improve MFV workflow tools and graph map handling 2026-05-11 11:47:35 +02:00
Ewald b2437259a9 Add MFV guide, Graph Map docs, and viewer integrations 2026-05-10 20:10:48 +02:00
Ewald f00fdb570c Fix MFV hotkeys, node stream, and video seek 2026-05-01 13:14:07 +02:00
Ewald cb8544483d Stabilize assets grid pagination 2026-04-26 15:47:47 +02:00
Ewald 2b10814b2e feat(mfv): ImageOps live preview crop + node panel selection sync
- ImageOps preview bridge: stream cropped contain-fit rect of __imageops_state.canvas (removes square scope/letterbox); fall back to full canvas when user pan/zoom is active. Signature-cached encode (WeakMap) avoids re-encoding on every poll tick.
- Floating viewer: skip metadata enrichment for imageops-live-preview source; preserve user pan/zoom across stream frames of the same node; remove inline CSS overrides that blocked the MFV transform.
- Workflow Nodes panel: graph-selected node is auto-expanded, promoted to first position in its container, scrolled into view, and gets a subtle blue highlight (is-selected-from-graph).
2026-04-24 23:47:27 +02:00
Ewald 9cb0d1dac8 docs: add MFV default toggle settings 2026-04-15 16:30:01 +02:00
Ewald dae292725c release: v2.4.5 2026-04-15 15:43:41 +02:00
Ewald 7d1dd830b9 Add MFV player shortcuts and docs 2026-04-14 10:15:42 +02:00
EwaldandClaude Sonnet 4.6 396684185c chore: remove internal planning docs from repo
Remove PLAN_REFACTO_COMPLET, PLAN_REFACTO_V2_LONG_TERME, and VUE_MIGRATION_PLAN
as they are internal development artifacts not relevant to end users.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 08:50:25 +02:00
Ewald db88ad982a feat: add MajoorSaveImage & MajoorSaveVideo nodes, generation_time_ms extraction, topbar MFV button announcement
- nodes.py: MajoorSaveImage (PNG with generation_time_ms in text chunks) and MajoorSaveVideo (MP4 via PyAV, GIF, WebP with metadata persistence)
- extractors_png.py: read generation_time_ms from PNG text chunks
- extractors.py: extract generation_time_ms from merged EXIF data into metadata dict
- extractors_video.py: extract generation_time_ms from ffprobe format tags
- messageCenter.js: add generation-time-persistence tip and topbar MFV button announcement
- CHANGELOG.md: document topbar MFV button and custom nodes
- README.md: add Custom Nodes section with input tables
- docs/CUSTOM_NODES.md: full node reference and extraction pipeline docs
- docs/DOCUMENTATION_INDEX.md: add CUSTOM_NODES.md entry
2026-04-12 19:16:07 +02:00
Ewald f56d6284da fix: MFV popup dark theme, gen info panel, reset zoom + popout polish
- FloatingViewer.impl.js: add missing _resetMfvZoom() method (was called
  from floatingViewerLoader/Mode but never defined on the class)
- viewerShell.js: return genInfoTitle + genInfoTitleLeft from createViewerStageShell
- ViewerRuntime.js: destructure genInfoTitle + genInfoTitleLeft (were undefined
  => gen info body was never populated)
- floatingViewerPopout.js: inject document.documentElement.style.cssText as
  :root{...} in popup head so ComfyUI CSS vars are available; set body
  background to #0d0d0d; remove broken history.replaceState (Chrome blocks
  it from about:blank)
- __init__.py: remove unused FailureSeverity/StageStatus imports
2026-04-11 19:06:23 +02:00
Ewald ec7ffdea3c fix(mfv-sidebar): node parameters auto-sync with graph nodes
- Hook canvas.onNodeDeselected (was missing) so sidebar clears when
  deselecting all nodes (click on empty canvas)
- Add DOM-level pointerup listener on canvas.canvas as fallback for
  ComfyUI selection paths that bypass LiteGraph callbacks
- Add requestAnimationFrame retry in open() if canvas is null at call time
- Write widget values in real-time on input event (number + textarea)
  instead of only on change/blur; partial states (-/./empty) are skipped
  for number inputs; blur still clamps and syncs displayed value
2026-04-11 12:41:19 +02:00
Ewald a2053d0cba refactor(v2): plan V2 complet — splits JS, tests frontend, durcissement securite
Chantier F - Typage Python
- ruff S101 déplacé en per-file-ignores (pyproject.toml)
- pyrightconfig.json : mode standard confirmé

Chantier G - Assertions & bare-except
- 16 blocs except documentés dans config.py
- --cov-branch activé, seuil coverage 60→68%

Chantier H - Cache settings
- Stratégie documentée dans settings.py
- _resolve_index_dir() logguée dans config.py

Chantier I - Split gros fichiers JS
- client.js 1509L → client.js 406L + clientAuth.js + clientOps.js + fetchUtils.js
- toolbar.js 927L → toolbar.js 458L + toolbarActions.js + toolbarControls.js
- FloatingViewer.js → FloatingViewer.impl.js + floatingViewer*(8 modules)
- Viewer_impl.js → ViewerRuntime.js + viewerShell.js + viewerThemeStyles.js + viewerOverlayDismiss.js
- model3dRenderer.js → model3dRenderer.impl.js + model3dCore.js + model3dLoaders.js + model3dSupport.js
- dialogs.js → dialogs.js + DialogTemplates.js

Chantier J - Tests frontend (Phases 1-2)
- use_drag_drop.vitest.mjs : 5 tests
- use_grid_state.vitest.mjs : 18 tests
- security_client_headers, security_deep_merge, security_runtime_state, runtime_store, dialog_templates
- Total: 80 fichiers test / 350 tests vitest

Chantier K - Pinia migration
- runtimeState.js entièrement migré vers Pinia
- getOptionalRuntimeStore.js + runtimeEnrichmentState.js ajoutés

Chantier L - Durcissement sécurité
- tests/security/test_rate_limit.py : 8 tests rate-limit (state machine complète)
- clientAuth.js : docstring sessionStorage security boundary
- three.js 0.183.2 audité : 0 CVE (Snyk)

Chantier M - Simplification config
- deps.py, tool_detect.py, utils.py nettoyés

docs: PLAN_REFACTO_V2_LONG_TERME.md ajouté et clôturé
.gitignore: coverage/ ajouté
2026-04-11 09:38:41 +02:00
Ewald 7e985b8e6d feat(mfv): multi-pin A/B/C/D, node parameters sidebar, sidebar position setting
- Multi-Pin references: toggle buttons A/B/C/D to pin up to 4 images
- Node Parameters sidebar: view/edit workflow node widgets inside MFV
- Run button in viewer toolbar for immediate re-queue
- Expandable text areas for long prompts
- Sidebar position setting (right/left/bottom) via Settings
- Toolbar layout: Run and Node Parameters pushed to far right
- Message Center: 2 new announcements for the features
- Docs: VIEWER_FEATURE_TUTORIAL, FLOATING_VIEWER_WORKFLOW_SIDEBAR
- CHANGELOG v2.4.5, README aligned
2026-04-10 21:47:01 +02:00
Ewald 1982b3ab3c Add local and CI quality gates 2026-04-10 11:05:27 +02:00