diff --git a/README.md b/README.md index d15894b..f4e1bf0 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,16 @@ This extension turns ComfyUI into a lightweight “mini pipeline”: you pick a ## Status & empty workflows - The Project Settings status bar watches your canvas and turns red when the current graph is empty while prompting you (via dialog) to create or assign a project instead of flooding toasts. - Toggle the `MajoorPS: Black status when no project` setting (in the MajoorPS settings category) if you'd rather keep a neutral indicator while you experiment without an active project. +- `MajoorPS: Legacy Ctrl+S hook` is off by default because ComfyUI already owns `Ctrl+S` via `Comfy.SaveWorkflow`. Enable it only if you explicitly need the old capture-phase fallback. +- `MajoorPS: Prompt on empty workflow` is off by default; the status badge remains passive unless you opt into modal prompts. --- ## Key Features - **Project management** inside ComfyUI (create / select / list). +- **Project Health panel** showing active folder, workflow assignment, output target, patchable save nodes, missing-model scan state, and workflow save state. +- **Topbar Project button**, registered with the same ComfyUI button component pattern used by ComfyUI-Manager when available. +- **ComfyUI command palette integration** for opening the panel, assigning the active project, saving workflows, scanning missing models, and patching save nodes. - **Standardized folder structure** per project under `output/PROJECTS//...`. - **Auto-patch “save/export” nodes**: - sets a **safe relative output folder** (always under `output/`) @@ -77,6 +82,29 @@ Depending on your ComfyUI version: - If sidebar tabs are supported, you’ll see a **Project Settings** tab. - Otherwise, the UI falls back to a **floating panel**. +The first section of the panel is **Project Health**. It tracks the state that matters +before queuing a prompt: project folder, workflow signature, current output target, +patchable save nodes, missing-model scan status, and workflow save name. + +Recent ComfyUI frontends also get a compact **Project** button near the menu controls. It +uses ComfyUI's `ComfyButton` / `ComfyButtonGroup` component pattern, matching +ComfyUI-Manager's modern button integration, and falls back to the legacy `.comfy-menu` +button location on older frontends. + +## ComfyUI Commands +The extension registers ComfyUI commands so recent ComfyUI frontends can expose them in +the command palette and topbar menu: + +- `MajoorPS: Open Project Settings` +- `MajoorPS: Assign workflow to active project` +- `MajoorPS: Save workflow to project` +- `MajoorPS: Scan missing models` +- `MajoorPS: Patch save nodes now` + +No default `Ctrl+S` keybinding is registered by this extension, because ComfyUI already +uses it for `Comfy.SaveWorkflow`. The legacy capture-phase browser shortcut is disabled +by default and remains available only through the `MajoorPS: Legacy Ctrl+S hook` setting. + ## Debugging logs 🐞 - To enable verbose debug logs in the UI, set `window.MJR_DEBUG = true` in the browser dev console before interacting with the extension. When enabled, the UI will emit developer messages via `console.debug()`. @@ -274,7 +302,7 @@ Rules: - Default download size cap is 10GB per file; tune via `MJR_MODEL_DOWNLOAD_MAX_BYTES` or `MJR_MODEL_DOWNLOAD_MAX_GB`. - **All public hosts are allowed by default** for maximum compatibility. To restrict hosts, set `MJR_MODEL_DOWNLOAD_ALLOW_ANY_HOST=0` / `mjr_project.download_allow_any_host=false` and configure `MJR_MODEL_DOWNLOAD_ALLOWED_HOSTS` (comma-separated list). - Private/local IPs are blocked by default (SSRF guard); override with `MJR_MODEL_DOWNLOAD_BLOCK_PRIVATE_IPS=0` / `mjr_project.download_block_private_ips=false`. -- POST endpoints enforce same-origin when the browser sends an `Origin` header (basic CSRF mitigation). +- POST endpoints enforce same-origin and CSRF token checks for browser requests. - Timeout can be tuned via `MJR_MODEL_DOWNLOAD_TIMEOUT` (seconds). - Online search endpoint is rate-limited per client IP via `MJR_MODEL_SEARCH_RATE_PER_MIN` (default: 30/min). @@ -406,7 +434,8 @@ So your settings survive browser refreshes and ComfyUI restarts (unless the brow - This is by design: the extension is strict so it doesn’t become a foot-gun. ### "Ctrl+S conflicts" -- If you hook workflow saving, other extensions might also capture Ctrl+S. +- ComfyUI owns `Ctrl+S` through `Comfy.SaveWorkflow`; this extension does not register a default `Ctrl+S` keybinding. +- Only enable `MajoorPS: Legacy Ctrl+S hook` if you accept that it can override core/browser save behavior. - Prefer capture-phase + stopping propagation (or disable your hotkey if exposed). ### "Model download fails with permission error" diff --git a/__init__.py b/__init__.py index 315de02..60b0cbd 100644 --- a/__init__.py +++ b/__init__.py @@ -5,12 +5,13 @@ Frontend + API only (no nodes). WEB_DIRECTORY = "./web/js" -from .server import ( # noqa: F401 - model_downloader_routes, - model_fixer_routes, - model_registry_routes, - project_routes, -) +if __package__: + from .server import ( # noqa: F401 + model_downloader_routes, + model_fixer_routes, + model_registry_routes, + project_routes, + ) # Required to keep ComfyUI from skipping this extension (no nodes on purpose). NODE_CLASS_MAPPINGS = {} diff --git a/docs/COMFYUI_CORE_IMPROVEMENT_AUDIT.md b/docs/COMFYUI_CORE_IMPROVEMENT_AUDIT.md new file mode 100644 index 0000000..daa4464 --- /dev/null +++ b/docs/COMFYUI_CORE_IMPROVEMENT_AUDIT.md @@ -0,0 +1,237 @@ +# ComfyUI Core Alignment Improvement Audit + +Date: 2026-05-27 + +## Sources Checked + +- ComfyUI JavaScript commands/keybindings docs: https://docs.comfy.org/custom-nodes/js/javascript_commands_keybindings +- ComfyUI JavaScript settings docs: https://docs.comfy.org/custom-nodes/js/javascript_settings +- ComfyUI JavaScript extension overview: https://docs.comfy.org/custom-nodes/js/javascript_overview +- ComfyUI server routes docs: https://docs.comfy.org/development/comfyui-server/comms_routes +- ComfyUI server overview: https://docs.comfy.org/development/comfyui-server/comms_overview +- ComfyUI Registry overview: https://docs.comfy.org/registry/overview +- ComfyUI pyproject registry spec: https://docs.comfy.org/registry/specifications + +## Current Strong Alignment + +- Frontend assets are now under `web/js/` and exported through `WEB_DIRECTORY = "./web/js"`, matching current ComfyUI custom-node guidance. +- The extension registers through `app.registerExtension`. +- Settings are declared in the extension metadata. +- A command and keybinding are registered for project workflow save. +- Sidebar integration uses `registerSidebarTab` with a fallback floating panel. +- Python routes use `PromptServer.instance.routes`. +- `pyproject.toml` now has registry-oriented `[project]`, `[project.urls]`, and `[tool.comfy]` sections. +- TypeScript source is strict and compiles to committed runtime JavaScript. + +## Highest Priority Improvements + +### 1. Re-enable server protection helpers + +Status: fixed in the current working tree; keep tests green before commit. + +The audit found that `server/route_utils.py` disabled same-origin checks, API-key/loopback auth, and rate limiting. That conflicted with the README security claims and was risky because this extension can write workflows, mutate project indexes, scan local model folders, and start downloads. + +Implemented fix: + +- Restore same-origin validation for mutating routes. +- Require loopback access by default when no `MJR_API_KEY` is set. +- Honor `MJR_API_KEY` / `Authorization: Bearer`. +- Restore per-IP/per-bucket rate limiting. +- Validate CSRF cookie/header for browser-origin mutating requests. +- Keep explicit env overrides for trusted local debugging. +- Added tests for allowed loopback, rejected non-loopback, accepted API key, rejected origin, CSRF, and rate limit behavior. + +### 2. Stop using raw `Ctrl+S` interception when modern command keybindings exist + +Status: fixed in the current working tree; modern ComfyUI command/keybinding is primary. + +`src/majoor_project_settings.ts` registers a ComfyUI command/keybinding, but still installs a capture-phase `window.addEventListener("keydown", ...)` that calls `stopImmediatePropagation()`. + +ComfyUI docs note that extension keybinding collisions are undefined and core keybindings cannot be overwritten. The raw capture listener can still interfere with core or other extension behavior. + +Implemented fix: + +- Prefer the registered command/keybinding. +- Keep raw `keydown` only as an opt-in legacy fallback for older ComfyUI builds. +- Added `MajoorPS: Legacy Ctrl+S hook`. +- Defaulted that setting to `false`. + +### 3. Unify setting reads through the modern settings API + +Status: fixed in the current working tree. + +`src/majoor_project_settings.ts` correctly prefers `app.extensionManager.setting.get(...)`, but `src/ui_components.ts` still reads only `app.ui.settings.settingsValues`. + +Implemented fix: + +- Move setting access into a shared frontend settings adapter. +- Use this order everywhere: + 1. `app.extensionManager.setting.get(id)` + 2. `app.ui.settings.getSettingValue(id)` + 3. `app.ui.settings.settingsValues[id]` + 4. fallback +- Add typed setting IDs and remove duplicate `toBool` helpers. + +### 4. Reduce broad auto-open / auto-prompt behavior + +Status: fixed in the current working tree. + +The extension previously prompted on empty workflow transitions and auto-opened the Project Settings tab when missing models were detected by default. This was useful, but could feel intrusive inside ComfyUI workflows. + +Implemented fix: + +- Empty-graph modal prompting is now behind `MajoorPS: Prompt on empty workflow`, default `false`. +- Auto-open on missing models defaults to `false`. +- Passive status remains available through badge/toast/panel state. + +### 5. Use ComfyUI-friendly names and registry metadata consistently + +Status: medium. + +The registry spec recommends short node IDs that do not include `ComfyUI`. The current `pyproject.toml` uses `majoor-project-settings`, which is good. The GitHub repo name can stay as-is, but docs should call the registry/package name `majoor-project-settings`. + +Recommended fix: + +- Add classifiers once license/support matrix is decided. +- Add `requires-comfyui` under `[tool.comfy]` after verifying the minimum ComfyUI version needed for sidebar/settings/commands. +- Add icon/banner URLs if publishing to registry. +- Decide license before registry publication; current `LicenseRef-Proprietary` is honest but limits adoption. + +## Product Improvements For Project Settings + +### 6. Project status should become a first-class ComfyUI command surface + +Recommended features: + +- Command: `MajoorPS: Open Project Settings`. +- Command: `MajoorPS: Assign active project to workflow`. +- Command: `MajoorPS: Patch save nodes now`. +- Command: `MajoorPS: Scan missing models`. +- Optional keybindings only for non-conflicting actions. + +Why: ComfyUI command palette and keybindings are the current extension integration path. + +### 7. Persist project metadata in workflow with a versioned schema + +Current workflow signature uses `graph.extra.mjr_project`. + +Recommended schema: + +```json +{ + "schema_version": 1, + "project_id": "...", + "project_folder": "...", + "template": "...", + "updated_at": "..." +} +``` + +Status: fixed in the current working tree with `schema_version: 1`. + +### 8. Add a project health panel + +Recommended checks: + +- Project folder exists. +- Workflow mirror status. +- Missing model count. +- Save nodes already patched vs patchable. +- Last workflow save path. +- Output template preview validity. + +Why: this turns the extension from a set of buttons into a reliable project state tool. + +### 9. Add dry-run output patching + +Status: fixed in the current working tree for the manual "Patch Now" path. + +Implemented behavior: + +- Show a list of nodes that would be changed. +- Show old path/prefix and new path/prefix. +- Let the user apply all or selected changes. + +Why: patching graph nodes is visible state mutation; dry-run makes it predictable. + +### 10. Make model download policy explicit in UI + +Status: partially fixed in the current working tree. + +Current README states all public hosts are allowed by default. The UI now surfaces a concise server-side policy note near the download controls. + +Recommended follow-up UI: + +- Show current host policy. +- Show private-IP blocking status. +- Show max size. +- Require explicit confirmation for unknown hosts. +- Add per-host allow/deny list editing if settings are available. + +Why: download functionality is high trust and should expose its guardrails. + +## Engineering Improvements + +### 11. Add backend tests for routes, not only validators + +Recommended tests: + +- Auth/origin/rate limit helpers. +- Project create/list/resolve happy path. +- Template preview rejects traversal and absolute paths. +- Workflow save rejects invalid project/workflow names. +- Archive/unarchive/delete index-only behavior. +- Download URL validation and private IP blocking. + +### 12. Split `ui_components.ts` by feature area + +Suggested modules: + +- `project_panel.ts` +- `workflow_panel.ts` +- `output_template_panel.ts` +- `missing_models_panel.ts` +- `model_registry_panel.ts` +- `project_status.ts` + +Why: this is the remaining frontend file with broad responsibility and highest future regression risk. + +### 13. Replace repeated ad hoc DOM styling with small helpers + +`src/mjr/dom.ts` exists now. Expand it gradually: + +- `button()` +- `field()` +- `section()` +- `detailsSection()` +- `statusText()` + +Why: keeps vanilla JS/TS while reducing UI duplication. Vue is still not necessary unless the panel becomes much more stateful. + +### 14. Add generated file policy + +Recommended: + +- Keep `src/` as source of truth. +- Keep `web/js/` committed for ComfyUI/Manager install compatibility. +- Optionally stop committing `.map` files if package size/noise matters. +- Keep `.d.ts` only if useful for downstream tooling; otherwise disable declaration emit. + +## Suggested Implementation Order + +1. Restore `route_utils.py` security helpers and tests. +2. Convert raw Ctrl+S hook into legacy fallback setting. +3. Centralize frontend settings access. +4. Add workflow signature `schema_version`. +5. Add backend route tests for project/template/workflow operations. +6. Add commands for open panel, scan missing models, patch save nodes. +7. Split `ui_components.ts` into feature modules. +8. Add patch dry-run UI. +9. Surface download policy in UI. +10. Prepare registry polish: `requires-comfyui`, license, icon/banner. + +## Decision On Vue + +Do not migrate to Vue yet. + +ComfyUI frontend uses Vue internally, but custom-node extensions are still loaded as browser JS modules through `WEB_DIRECTORY`. The current panel can be improved more safely by splitting modules and using ComfyUI commands/settings/sidebar APIs. Revisit Vue only if the UI becomes a multi-view application with complex reactive state. diff --git a/server/route_utils.py b/server/route_utils.py index 6190301..7537647 100644 --- a/server/route_utils.py +++ b/server/route_utils.py @@ -9,6 +9,7 @@ import os import secrets import time import ipaddress +import threading from urllib.parse import urlparse from typing import Any, Tuple @@ -62,8 +63,50 @@ def _parse_host_port(value: str, default_port: int | None = None) -> Tuple[str, def require_same_origin(request: web.Request) -> web.Response | None: """ - Temporary override: Security disabled. + Require mutating browser requests to come from the same origin as ComfyUI. + + Requests without an Origin header are allowed because same-origin fetches, + CLI clients, and some desktop contexts may omit it. Set + MJR_DISABLE_SAME_ORIGIN=1 only for trusted local debugging. """ + if to_bool(os.environ.get("MJR_DISABLE_SAME_ORIGIN")): + return None + + origin = (request.headers.get("Origin") or "").strip() + if not origin: + return None + + host_header = (request.headers.get("Host") or "").strip() + if not host_header: + return json_error("missing Host header", status=403) + + origin_host, origin_port = _parse_host_port(origin) + host, host_port = _parse_host_port(host_header) + if not origin_host or not host: + return json_error("invalid origin", status=403) + + origin_scheme = urlparse(origin).scheme.lower() + default_port = _default_port_for_scheme(origin_scheme) + origin_port = origin_port or default_port + host_port = host_port or default_port + + if origin_host != host or origin_port != host_port: + return json_error("cross-origin request blocked", status=403) + + if to_bool(os.environ.get("MJR_DISABLE_CSRF")): + return None + + expected_key = (os.environ.get("MJR_API_KEY") or "").strip() + provided_key = _api_key_from_request(request) + if expected_key and secrets.compare_digest(provided_key, expected_key): + return None + + cookie_token = (request.cookies.get("mjr_csrf") or "").strip() + header_token = (request.headers.get("X-CSRF-Token") or "").strip() + if not cookie_token or not header_token: + return json_error("missing CSRF token", status=403) + if not secrets.compare_digest(cookie_token, header_token): + return json_error("invalid CSRF token", status=403) return None @@ -80,7 +123,12 @@ def _get_client_ip(request: web.Request) -> str: def _is_loopback_ip(ip: str) -> bool: - return ip in ("127.0.0.1", "::1") + if ip in ("127.0.0.1", "::1", "localhost"): + return True + try: + return ipaddress.ip_address(ip).is_loopback + except ValueError: + return False def _is_private_ip(ip_str: str) -> bool: @@ -106,19 +154,56 @@ def _api_key_from_request(request: web.Request) -> str: def require_auth(request: web.Request) -> web.Response | None: """ - Temporary override: Security disabled. + Require an API key for non-loopback clients. + + If MJR_API_KEY is set, every client must provide it as either + Authorization: Bearer or X-MJR-API-Key. If no key is configured, + only loopback clients are allowed by default. """ + if to_bool(os.environ.get("MJR_INSECURE_NO_AUTH")): + return None + + expected_key = (os.environ.get("MJR_API_KEY") or "").strip() + provided_key = _api_key_from_request(request) + if expected_key: + if secrets.compare_digest(provided_key, expected_key): + return None + return json_error("unauthorized", status=401) + + client_ip = _get_client_ip(request) + if _is_loopback_ip(client_ip): + return None + + return json_error("unauthorized: configure MJR_API_KEY for remote access", status=401) return None -_rate_lock = None +_rate_lock = threading.Lock() _rate_state: dict[tuple[str, str], list[float]] = {} def require_rate_limit(request: web.Request, bucket: str) -> web.Response | None: """ - Temporary override: Security disabled. + Apply a simple per-client, per-bucket rate limit. """ + raw_limit = os.environ.get("MJR_RATE_LIMIT_PER_MIN", "120") + try: + limit = int(raw_limit) + except (TypeError, ValueError): + limit = 120 + if limit <= 0: + return None + + now = time.monotonic() + cutoff = now - 60.0 + key = (_get_client_ip(request), bucket) + with _rate_lock: + hits = [ts for ts in _rate_state.get(key, []) if ts >= cutoff] + if len(hits) >= limit: + _rate_state[key] = hits + return json_error("rate limit exceeded", status=429) + hits.append(now) + _rate_state[key] = hits return None diff --git a/src/majoor_project_settings.ts b/src/majoor_project_settings.ts index 87a28e3..39a5397 100644 --- a/src/majoor_project_settings.ts +++ b/src/majoor_project_settings.ts @@ -22,10 +22,12 @@ import { isSaveLikeNode, loadConfig, patchSaveNodes, + previewPatchSaveNodes, patchSingleNode, stampGraphProjectSignature, } from "./mjr/patch.js"; import { buildPanel } from "./ui_components.js"; +import { updateMenuStatusBadge } from "./mjr/topbar_badge.js"; import { createRuntimeState, loadState, @@ -35,10 +37,15 @@ import { } from "./state_manager.js"; import { scanMissingModelsWithStats } from "./mjr/model_fixer.js"; import type { RuntimeState, SettingDefinition, SettingId, SidebarRenderOptions, ComfyNode } from "./types/domain.js"; +import { getSettingBool, toBool, toNumber } from "./mjr/settings.js"; let workflowShortcutRegistered = false; const COMMAND_SAVE_WORKFLOW_TO_PROJECT = "mjr.projectSettings.saveWorkflowToProject"; +const COMMAND_OPEN_PANEL = "mjr.projectSettings.openPanel"; +const COMMAND_ASSIGN_ACTIVE_PROJECT = "mjr.projectSettings.assignActiveProject"; +const COMMAND_SCAN_MISSING_MODELS = "mjr.projectSettings.scanMissingModels"; +const COMMAND_PATCH_SAVE_NODES = "mjr.projectSettings.patchSaveNodes"; const NODE_PATCH_RETRY_DELAY_MS = 60; const NODE_PATCH_MAX_RETRIES = 1; const SETTINGS_CATEGORY = "MajoorPS"; @@ -47,13 +54,17 @@ const DEFAULT_DOWNLOAD_MAX_GB = 50; const AUTO_FIX_AFTER_DOWNLOAD_SETTING: SettingId = "mjr_project.auto_fix_after_download"; const AUTO_OPEN_PANEL_ON_MISSING_SETTING: SettingId = "mjr_project.auto_open_panel_on_missing"; const AUTO_SCAN_MISSING_ON_OPEN_SETTING: SettingId = "mjr_project.auto_scan_missing_on_open"; +const PROMPT_EMPTY_GRAPH_SETTING: SettingId = "mjr_project.prompt_empty_graph"; const AUTO_REMEMBER_NOTE_SOURCES_SETTING: SettingId = "mjr_project.auto_remember_note_sources"; const NO_PROJECT_STATUS_BLACK_SETTING: SettingId = "mjr_project.status_black_no_project"; +const LEGACY_CTRL_S_HOOK_SETTING: SettingId = "mjr_project.legacy_ctrl_s_hook"; const DEFAULT_AUTO_FIX_AFTER_DOWNLOAD = true; -const DEFAULT_AUTO_OPEN_PANEL = true; +const DEFAULT_AUTO_OPEN_PANEL = false; const DEFAULT_AUTO_SCAN_MISSING_ON_OPEN = true; +const DEFAULT_PROMPT_EMPTY_GRAPH = false; const DEFAULT_AUTO_REMEMBER_NOTE_SOURCES = true; const DEFAULT_NO_PROJECT_STATUS_BLACK = false; +const DEFAULT_LEGACY_CTRL_S_HOOK = false; const GRAPH_EMPTY_POLL_INTERVAL_MS = 900; let graphEmptyWatcherId: ReturnType | null = null; @@ -90,32 +101,6 @@ function _rollOutputDateIfNeeded(state: RuntimeState): boolean { return true; } -const toNumber = (value: unknown, fallback: number): number => { - if (value == null) return fallback; - const num = Number(value); - return Number.isFinite(num) ? num : fallback; -}; - -const toBool = (value: unknown, fallback: boolean): boolean => { - if (value == null) return fallback; - if (typeof value === "boolean") return value; - if (typeof value === "number") return value !== 0; - if (typeof value === "string") { - const v = value.trim().toLowerCase(); - if (["true", "1", "yes", "on"].includes(v)) return true; - if (["false", "0", "no", "off"].includes(v)) return false; - } - return fallback; -}; - -const getSettingBool = (id: SettingId, fallback: boolean): boolean => { - const raw = - app?.extensionManager?.setting?.get?.(id) ?? - app?.ui?.settings?.getSettingValue?.(id) ?? - app?.ui?.settings?.settingsValues?.[id]; - return toBool(raw, fallback); -}; - function updateUI(state: RuntimeState): void { const safe = (fn: (() => unknown) | undefined, label: string) => { try { @@ -297,7 +282,7 @@ function handleGraphEmptyTransition(state: RuntimeState, runToken: number | null state.graphIsEmpty = currentEmpty; if (!currentEmpty) { state._emptyGraphPromptToken = null; - } else { + } else if (getSettingBool(PROMPT_EMPTY_GRAPH_SETTING, DEFAULT_PROMPT_EMPTY_GRAPH)) { void promptEmptyGraphProject(state, runToken ?? state.graphLoadToken); } return true; @@ -537,8 +522,102 @@ function saveActiveWorkflowToProjectCommand() { void saveWorkflowToProject(state); } +function openProjectSettingsCommand() { + const sidebar = app?.extensionManager?.sidebar; + if (sidebar && typeof sidebar.setTab === "function") { + sidebar.setTab("mjr_project_settings"); + return; + } + const state = runtimeState; + if (state) { + state.workflowPanelOpen = true; + saveState(state); + updateUI(state); + } +} + +function assignActiveProjectCommand() { + const state = runtimeState; + if (!state?.projectId || !state.projectFolder) { + toast("error", "No active project", "Set a project first."); + return; + } + stampGraphProjectSignature(app, state); + state.workflowHasSignature = true; + state.workflowChecked = true; + state.detected = null; + state.lastError = ""; + saveState(state); + updateUI(state); + toast("success", "Workflow assigned", state.projectFolder); +} + +function scanMissingModelsCommand() { + const state = runtimeState; + if (!state) return; + try { + const { missing } = scanMissingModelsWithStats(); + state._ui?.refreshMissingStatus?.(); + toast( + missing?.length ? "warn" : "success", + "Missing Models", + `${missing?.length || 0} missing model${missing?.length === 1 ? "" : "s"} detected`, + { life: 4000 } + ); + } catch (error) { + console.error("[mjr] Error scanning missing models:", error); + toast("error", "Missing Models", "Scan failed."); + } +} + +async function patchSaveNodesCommand() { + const state = runtimeState; + if (!state?.projectId) { + toast("warn", "Patch skipped", "Set a project first."); + return; + } + _rollOutputDateIfNeeded(state); + let relDir = state.lastRelDir; + const prefix = state.lastPrefix || ""; + if (!relDir && state.projectFolder) { + relDir = joinRel(`PROJECTS/${state.projectFolder}`, mediaDir(state.media || "images")); + } + if (!relDir) { + toast("warn", "Patch skipped", "Create an output target first."); + return; + } + const preview = previewPatchSaveNodes(app, relDir, prefix, state.media); + const nodeCount = new Set(preview.map((item) => item.node)).size; + if (nodeCount === 0) { + toast("warn", "No nodes patched", "No save-like nodes were found."); + return; + } + const previewLines = preview + .slice(0, 8) + .map((item) => `${item.nodeLabel}.${item.widget}: ${item.oldValue || "-"} -> ${item.newValue || "-"}`); + const overflow = preview.length > previewLines.length ? `\n...and ${preview.length - previewLines.length} more change(s)` : ""; + const confirmed = await psConfirm({ + title: "Patch save paths?", + message: + `Update ${nodeCount} save node${nodeCount === 1 ? "" : "s"} to use the project path?\n\n` + + `${previewLines.join("\n")}${overflow}\n\n` + + "This can be undone with Ctrl+Z.", + }); + if (!confirmed) { + toast("info", "Patch cancelled", "No nodes were modified."); + return; + } + const patched = await patchSaveNodes(app, relDir, prefix, state.media); + toast( + patched ? "success" : "warn", + patched ? "Patch applied" : "No nodes patched", + patched ? `Updated ${patched} node${patched === 1 ? "" : "s"}.` : "No save-like nodes were updated." + ); +} + function registerWorkflowShortcut() { if (workflowShortcutRegistered) return; + if (!getSettingBool(LEGACY_CTRL_S_HOOK_SETTING, DEFAULT_LEGACY_CTRL_S_HOOK)) return; workflowShortcutRegistered = true; window.addEventListener( "keydown", @@ -590,6 +669,13 @@ const EXTENSION_SETTINGS: SettingDefinition[] = [ defaultValue: DEFAULT_AUTO_SCAN_MISSING_ON_OPEN, category: SETTINGS_CATEGORY, }, + { + id: PROMPT_EMPTY_GRAPH_SETTING, + name: "MajoorPS: Prompt on empty workflow", + type: "boolean", + defaultValue: DEFAULT_PROMPT_EMPTY_GRAPH, + category: SETTINGS_CATEGORY, + }, { id: AUTO_REMEMBER_NOTE_SOURCES_SETTING, name: "MajoorPS: Auto-remember note sources", @@ -604,6 +690,13 @@ const EXTENSION_SETTINGS: SettingDefinition[] = [ defaultValue: DEFAULT_NO_PROJECT_STATUS_BLACK, category: SETTINGS_CATEGORY, }, + { + id: LEGACY_CTRL_S_HOOK_SETTING, + name: "MajoorPS: Legacy Ctrl+S hook", + type: "boolean", + defaultValue: DEFAULT_LEGACY_CTRL_S_HOOK, + category: SETTINGS_CATEGORY, + }, ]; function registerLegacyExtensionSettings() { @@ -633,11 +726,37 @@ app.registerExtension({ label: "MajoorPS: Save workflow to project", function: saveActiveWorkflowToProjectCommand, }, - ], - keybindings: [ { - combo: { key: "s", ctrl: true }, - commandId: COMMAND_SAVE_WORKFLOW_TO_PROJECT, + id: COMMAND_OPEN_PANEL, + label: "MajoorPS: Open Project Settings", + function: openProjectSettingsCommand, + }, + { + id: COMMAND_ASSIGN_ACTIVE_PROJECT, + label: "MajoorPS: Assign workflow to active project", + function: assignActiveProjectCommand, + }, + { + id: COMMAND_SCAN_MISSING_MODELS, + label: "MajoorPS: Scan missing models", + function: scanMissingModelsCommand, + }, + { + id: COMMAND_PATCH_SAVE_NODES, + label: "MajoorPS: Patch save nodes now", + function: patchSaveNodesCommand, + }, + ], + menuCommands: [ + { + path: ["Extensions", "Majoor Project Settings"], + commands: [ + COMMAND_OPEN_PANEL, + COMMAND_ASSIGN_ACTIVE_PROJECT, + COMMAND_SAVE_WORKFLOW_TO_PROJECT, + COMMAND_SCAN_MISSING_MODELS, + COMMAND_PATCH_SAVE_NODES, + ], }, ], @@ -691,6 +810,7 @@ app.registerExtension({ } setRuntimeState(state); _rollOutputDateIfNeeded(state); + updateMenuStatusBadge(state); registerWorkflowShortcut(); state._emptyGraphPromptToken = null; startGraphEmptyWatcher(state); diff --git a/src/mjr/patch.ts b/src/mjr/patch.ts index 0e9220a..81b5a52 100644 --- a/src/mjr/patch.ts +++ b/src/mjr/patch.ts @@ -77,6 +77,85 @@ export function patchSingleNode(node: ComfyNode | null | undefined, relDir: unkn return false; } +export interface PatchPreviewItem { + node: ComfyNode; + nodeLabel: string; + widget: string; + oldValue: string; + newValue: string; +} + +export function previewPatchSingleNode( + node: ComfyNode | null | undefined, + relDir: unknown, + filenamePrefix: unknown +): PatchPreviewItem[] { + if (!isSaveLikeNode(node)) return []; + if (!node) return []; + + const rel = safeRel(relDir); + const prefix = safeRel(filenamePrefix); + const widgets = node?.widgets || []; + const filenameWidget = widgets.find((w) => w?.name === "filename_prefix"); + const pathWidget = widgets.find((w) => w?.name && PATH_WIDGETS.includes(w.name)); + const nodeLabel = String(node?.title || node?.comfyClass || node?.type || "Save node"); + const items: PatchPreviewItem[] = []; + + if (pathWidget && filenameWidget) { + items.push({ + node, + nodeLabel, + widget: String(pathWidget.name), + oldValue: String(pathWidget.value ?? ""), + newValue: rel, + }); + items.push({ + node, + nodeLabel, + widget: String(filenameWidget.name), + oldValue: String(filenameWidget.value ?? ""), + newValue: prefix, + }); + return items; + } + if (filenameWidget) { + items.push({ + node, + nodeLabel, + widget: String(filenameWidget.name), + oldValue: String(filenameWidget.value ?? ""), + newValue: prefix ? joinRel(rel, prefix) : rel, + }); + return items; + } + if (pathWidget) { + items.push({ + node, + nodeLabel, + widget: String(pathWidget.name), + oldValue: String(pathWidget.value ?? ""), + newValue: rel, + }); + } + return items; +} + +export function previewPatchSaveNodes( + app: { graph?: ComfyGraph }, + relDir: unknown, + filenamePrefix: unknown, + targetMedia?: ProjectMedia +): PatchPreviewItem[] { + const nodes = app?.graph?._nodes || []; + const items: PatchPreviewItem[] = []; + for (const node of nodes) { + const nm = detectNodeMedia(node); + if (targetMedia && nm && nm !== targetMedia) continue; + items.push(...previewPatchSingleNode(node, relDir, filenamePrefix)); + } + return items; +} + export async function patchSaveNodes( app: { graph?: ComfyGraph }, relDir: unknown, @@ -105,6 +184,7 @@ export function stampGraphProjectSignature(app: { graph?: ComfyGraph }, state: R if (!g) return; g.extra = g.extra || {}; g.extra.mjr_project = { + schema_version: 1, project_id: state.projectId, project_folder: state.projectFolder, template: state.pathTemplate || "", diff --git a/src/mjr/settings.ts b/src/mjr/settings.ts new file mode 100644 index 0000000..8c942d3 --- /dev/null +++ b/src/mjr/settings.ts @@ -0,0 +1,32 @@ +import { app } from "../../../scripts/app.js"; +import type { SettingId } from "../types/domain.js"; + +export function toBool(value: unknown, fallback: boolean): boolean { + if (value == null) return fallback; + if (typeof value === "boolean") return value; + if (typeof value === "number") return value !== 0; + if (typeof value === "string") { + const v = value.trim().toLowerCase(); + if (["true", "1", "yes", "on"].includes(v)) return true; + if (["false", "0", "no", "off"].includes(v)) return false; + } + return fallback; +} + +export function toNumber(value: unknown, fallback: number): number { + if (value == null) return fallback; + const num = Number(value); + return Number.isFinite(num) ? num : fallback; +} + +export function getSettingValue(id: SettingId | string): T | undefined { + return ( + app?.extensionManager?.setting?.get?.(id) ?? + app?.ui?.settings?.getSettingValue?.(id) ?? + app?.ui?.settings?.settingsValues?.[id] + ) as T | undefined; +} + +export function getSettingBool(id: SettingId | string, fallback: boolean): boolean { + return toBool(getSettingValue(id), fallback); +} diff --git a/src/mjr/topbar_badge.ts b/src/mjr/topbar_badge.ts index 238bda7..86ed0d2 100644 --- a/src/mjr/topbar_badge.ts +++ b/src/mjr/topbar_badge.ts @@ -1,100 +1,186 @@ -import { applyStyles, createElement } from "./dom.js"; +import { app } from "../../../scripts/app.js"; import type { RuntimeState } from "../types/domain.js"; -const MENU_BADGE_ID = "mjr-project-status-badge"; -const MENU_ACTION_SELECTORS = [ - ".comfy-menu-actions", - ".comfy-menu-no-drag", - ".comfy-topbar-actions", - ".comfy-menu", - ".workflow-tabs-container", - ".workflow-tabs-container .flex", - ".menu-actions", -]; +const BUTTON_ID = "mjr-project-health-button"; +const LEGACY_BUTTON_ID = "mjr-project-health-button-legacy"; -let menuBadgeInterval: ReturnType | null = null; -let menuBadgePendingState: RuntimeState | null = null; -let menuBadgeLogTimestamp = 0; +let buttonElement: HTMLElement | null = null; +let buttonGroupElement: HTMLElement | null = null; +let pendingState: RuntimeState | null = null; +let createPromise: Promise | null = null; -function findMenuActionsContainer(): Element | null { - for (const selector of MENU_ACTION_SELECTORS) { - const candidate = document.querySelector(selector); - if (candidate) { - return candidate; - } +function openProjectSettings(): void { + const sidebar = app?.extensionManager?.sidebar; + if (sidebar && typeof sidebar.setTab === "function") { + sidebar.setTab("mjr_project_settings"); + return; } - return null; + try { + const state = pendingState; + if (state) { + state.workflowPanelOpen = true; + state._ui?.updateWorkflowBlock?.(); + } + } catch (_) {} } -function ensureMenuStatusBadge(actions: Element, text: string, color: string): HTMLElement { - let badge = document.getElementById(MENU_BADGE_ID); - if (!badge) { - badge = createElement("div", { - id: MENU_BADGE_ID, - styles: { - display: "inline-flex", - alignItems: "center", - justifyContent: "center", - padding: "4px 10px", - borderRadius: "999px", - fontSize: "11px", - fontWeight: "600", - border: "1px solid transparent", - marginLeft: "8px", - gap: "4px", - transition: "background 0.3s ease, border 0.3s ease", - cursor: "default", - }, +function getHealth(state: RuntimeState): { + text: string; + background: string; + border: string; + title: string; +} { + const project = state.projectFolder || state.projectId || "No project"; + const output = state.lastRelDir || state.lastPrefix + ? `${state.lastRelDir || "-"} | ${state.lastPrefix || "-"}` + : "No output target"; + + if (state.lastError) { + return { + text: "Project: Error", + background: "#7f1d1d", + border: "#ef4444", + title: `Project Health\nError: ${state.lastError}\nProject: ${project}\nOutput: ${output}`, + }; + } + if (state.graphIsEmpty) { + return { + text: "Project: Empty", + background: "#7f1d1d", + border: "#ef4444", + title: `Project Health\nGraph is empty\nProject: ${project}\nOutput: ${output}`, + }; + } + if (!state.projectId) { + return { + text: "Project: None", + background: "#3f3f46", + border: "#71717a", + title: `Project Health\nNo active project\nOutput: ${output}`, + }; + } + if (state.projectExists === false) { + return { + text: "Project: Missing", + background: "#7f1d1d", + border: "#ef4444", + title: `Project Health\nMissing folder: ${project}\nOutput: ${output}`, + }; + } + if (state.workflowChecked && !state.workflowHasSignature) { + return { + text: `Project: ${project}`, + background: "#7c2d12", + border: "#f97316", + title: `Project Health\nWorkflow is not assigned\nProject: ${project}\nOutput: ${output}`, + }; + } + + const det = state.detected; + const mismatch = + det && + det.mode !== "none" && + !( + (det.project_id && det.project_id === state.projectId) || + (det.project_folder && det.project_folder === state.projectFolder) + ) && + (det.project_id || det.project_folder); + + if (mismatch) { + return { + text: "Project: Mismatch", + background: "#7c2d12", + border: "#f97316", + title: `Project Health\nWorkflow: ${det.project_folder || det.project_id}\nActive: ${project}\nOutput: ${output}`, + }; + } + + return { + text: `Project: ${project}`, + background: "#166534", + border: "#22c55e", + title: `Project Health\nActive project: ${project}\nWorkflow: assigned\nOutput: ${output}`, + }; +} + +function styleProjectButton(el: HTMLElement): void { + el.id = BUTTON_ID; + el.classList.add("comfyui-button", "comfyui-menu-mobile-collapse"); + el.style.maxWidth = "260px"; + el.style.overflow = "hidden"; + el.style.textOverflow = "ellipsis"; + el.style.whiteSpace = "nowrap"; +} + +async function ensureNewStyleButton(): Promise { + if (buttonElement && document.body.contains(buttonElement)) return true; + if (buttonGroupElement && document.body.contains(buttonGroupElement)) return true; + if (!app?.menu?.settingsGroup?.element) return false; + + try { + const [{ ComfyButton }, { ComfyButtonGroup }] = await Promise.all([ + import("../../../scripts/ui/components/button.js"), + import("../../../scripts/ui/components/buttonGroup.js"), + ]); + const button = new ComfyButton({ + icon: "briefcase", + action: openProjectSettings, + tooltip: "Majoor Project Health", + content: "Project", + classList: "comfyui-button comfyui-menu-mobile-collapse", }); - actions.appendChild(badge); + buttonElement = button.element as HTMLElement; + styleProjectButton(buttonElement); + const group = new ComfyButtonGroup(buttonElement); + buttonGroupElement = group.element as HTMLElement; + app.menu.settingsGroup.element.before(buttonGroupElement); + return true; + } catch (error) { + console.warn("[mjr] New style ComfyUI button unavailable", error); + return false; + } +} + +function ensureLegacyButton(): boolean { + let button = document.getElementById(LEGACY_BUTTON_ID) as HTMLButtonElement | null; + if (!button) { + const menu = document.querySelector(".comfy-menu"); + if (!menu) return false; + button = document.createElement("button"); + button.id = LEGACY_BUTTON_ID; + button.type = "button"; + button.onclick = openProjectSettings; + menu.append(button); + } + buttonElement = button; + return true; +} + +function applyHealth(state: RuntimeState): void { + if (!buttonElement) return; + const health = getHealth(state); + buttonElement.textContent = health.text; + buttonElement.title = health.title; + buttonElement.style.background = health.background; + buttonElement.style.borderColor = health.border; + buttonElement.style.color = "white"; +} + +async function ensureAndUpdate(): Promise { + if (!pendingState) return; + const hasButton = (await ensureNewStyleButton()) || ensureLegacyButton(); + if (hasButton && pendingState) { + applyHealth(pendingState); } - badge.textContent = text; - applyStyles(badge, { - background: color, - borderColor: color, - }); - return badge; } export function updateMenuStatusBadge(state: RuntimeState): void { - menuBadgePendingState = state; - const actions = findMenuActionsContainer(); - if (!actions) { - if (!menuBadgeInterval) { - menuBadgeInterval = setInterval(() => { - if (menuBadgePendingState) { - updateMenuStatusBadge(menuBadgePendingState); - } - }, 500); - } - const now = Date.now(); - if (now - menuBadgeLogTimestamp > 5000) { - console.info( - `[mjr] Waiting for topbar badge target (${MENU_ACTION_SELECTORS.join( - ", " - )}) project=${state?.projectId || "none"} folder=${state?.projectFolder || "none"}` - ); - menuBadgeLogTimestamp = now; - } - console.debug("[mjr] comfy menu actions not found yet, retrying badge soon", state); - return; + pendingState = state; + if (!createPromise) { + createPromise = ensureAndUpdate().finally(() => { + createPromise = null; + }); + } else { + void createPromise.then(ensureAndUpdate); } - - if (menuBadgeInterval) { - clearInterval(menuBadgeInterval); - menuBadgeInterval = null; - } - - const badgeText = state.projectId - ? state.projectExists === false - ? "Projet introuvable" - : `Projet: ${state.projectFolder || state.projectId}` - : "Pas de projet actif"; - const badgeColor = state.projectId - ? state.projectExists === false - ? "rgba(179, 58, 58, 0.9)" - : "rgba(47, 143, 78, 0.95)" - : "rgba(102, 102, 102, 0.8)"; - ensureMenuStatusBadge(actions, badgeText, badgeColor); - menuBadgePendingState = null; } diff --git a/src/types/comfyui.d.ts b/src/types/comfyui.d.ts index 3c6d4fe..d0e94e1 100644 --- a/src/types/comfyui.d.ts +++ b/src/types/comfyui.d.ts @@ -10,6 +10,46 @@ declare module "*/scripts/app.js" { export const app: any; } +declare module "../../../scripts/ui/components/button.js" { + export class ComfyButton { + element: HTMLElement; + constructor(options: { + icon?: string; + action?: () => void; + tooltip?: string; + content?: string; + classList?: string; + }); + } +} + +declare module "*/scripts/ui/components/button.js" { + export class ComfyButton { + element: HTMLElement; + constructor(options: { + icon?: string; + action?: () => void; + tooltip?: string; + content?: string; + classList?: string; + }); + } +} + +declare module "../../../scripts/ui/components/buttonGroup.js" { + export class ComfyButtonGroup { + element: HTMLElement; + constructor(...elements: HTMLElement[]); + } +} + +declare module "*/scripts/ui/components/buttonGroup.js" { + export class ComfyButtonGroup { + element: HTMLElement; + constructor(...elements: HTMLElement[]); + } +} + interface Window { MJR_DEBUG?: boolean; } diff --git a/src/types/domain.ts b/src/types/domain.ts index acf45d3..d732b3d 100644 --- a/src/types/domain.ts +++ b/src/types/domain.ts @@ -135,8 +135,10 @@ export type SettingId = | "mjr_project.auto_fix_after_download" | "mjr_project.auto_open_panel_on_missing" | "mjr_project.auto_scan_missing_on_open" + | "mjr_project.prompt_empty_graph" | "mjr_project.auto_remember_note_sources" - | "mjr_project.status_black_no_project"; + | "mjr_project.status_black_no_project" + | "mjr_project.legacy_ctrl_s_hook"; export type SettingDefinition = | { @@ -236,6 +238,7 @@ export interface ComfyNode { } export interface GraphProjectSignature { + schema_version?: number; project_id?: string; project_folder?: string; template?: string; diff --git a/src/ui/panel_constants.ts b/src/ui/panel_constants.ts new file mode 100644 index 0000000..d158dcd --- /dev/null +++ b/src/ui/panel_constants.ts @@ -0,0 +1,8 @@ +export const TEMPLATE_TOKENS = ["{BASE}", "{MEDIA}", "{DATE}", "{MODEL}", "{NAME}", "{KIND}"]; + +export const PROJECT_REFRESH_THROTTLE_MS = 5000; +export const PROJECT_REFRESH_ERROR_BACKOFF_MS = 10000; + +export const SETTING_AUTO_FIX_AFTER_DOWNLOAD = "mjr_project.auto_fix_after_download"; +export const SETTING_AUTO_SCAN_MISSING_ON_OPEN = "mjr_project.auto_scan_missing_on_open"; +export const SETTING_AUTO_REMEMBER_NOTE_SOURCES = "mjr_project.auto_remember_note_sources"; diff --git a/src/ui/panel_helpers.ts b/src/ui/panel_helpers.ts new file mode 100644 index 0000000..15451be --- /dev/null +++ b/src/ui/panel_helpers.ts @@ -0,0 +1,124 @@ +export type DetailsWithSummary = HTMLDetailsElement & { _summary?: HTMLElement }; + +export interface PanelHelpers { + section: (label: string) => HTMLDivElement; + divider: (thick?: boolean) => HTMLDivElement; + detailsSection: (title: string) => DetailsWithSummary; + makeLabel: (labelText: string) => HTMLLabelElement; + styleField: (inputEl: HTMLElement) => void; + row: (labelText: string, inputEl: HTMLElement) => HTMLDivElement; + groupRow: (labelText: string, contentEl: HTMLElement) => HTMLDivElement; + btn: (text: string) => HTMLButtonElement; +} + +export function createPanelHelpers(gap: string): PanelHelpers { + const section = (label: string): HTMLDivElement => { + const h = document.createElement("div"); + h.textContent = label; + h.style.fontWeight = "600"; + h.style.marginTop = gap; + h.style.marginBottom = gap; + h.style.paddingLeft = "2px"; + h.style.textTransform = "uppercase"; + h.style.letterSpacing = "0.6px"; + h.style.color = "#8fb9ff"; + return h; + }; + + const divider = (thick = false): HTMLDivElement => { + const d = document.createElement("div"); + d.style.height = thick ? "3px" : "1px"; + d.style.background = "rgba(255,255,255,0.08)"; + d.style.margin = "0"; + return d; + }; + + const detailsSection = (title: string): DetailsWithSummary => { + const details = document.createElement("details") as DetailsWithSummary; + details.style.marginTop = "0"; + details.style.display = "flex"; + details.style.flexDirection = "column"; + details.style.gap = gap; + const summary = document.createElement("summary"); + summary.textContent = title; + summary.style.cursor = "pointer"; + summary.style.opacity = "0.9"; + summary.style.textTransform = "uppercase"; + summary.style.letterSpacing = "0.6px"; + summary.style.color = "#8fb9ff"; + summary.style.fontWeight = "600"; + summary.style.paddingLeft = "2px"; + details.appendChild(summary); + details._summary = summary; + return details; + }; + + const makeLabel = (labelText: string): HTMLLabelElement => { + const label = document.createElement("label"); + label.textContent = labelText; + label.style.opacity = "0.85"; + label.style.marginLeft = "2px"; + label.style.fontSize = "11px"; + label.style.lineHeight = "1.2"; + return label; + }; + + const styleField = (inputEl: HTMLElement): void => { + inputEl.style.width = "100%"; + inputEl.style.boxSizing = "border-box"; + inputEl.style.padding = "6px 8px"; + inputEl.style.borderRadius = "8px"; + inputEl.style.border = "1px solid rgba(255,255,255,0.12)"; + inputEl.style.background = "rgba(0,0,0,0.25)"; + inputEl.style.color = "#eee"; + inputEl.style.outline = "none"; + }; + + const row = (labelText: string, inputEl: HTMLElement): HTMLDivElement => { + const wrap = document.createElement("div"); + wrap.style.display = "flex"; + wrap.style.flexDirection = "column"; + wrap.style.gap = gap; + wrap.appendChild(makeLabel(labelText)); + styleField(inputEl); + wrap.appendChild(inputEl); + return wrap; + }; + + const groupRow = (labelText: string, contentEl: HTMLElement): HTMLDivElement => { + const wrap = document.createElement("div"); + wrap.style.display = "flex"; + wrap.style.flexDirection = "column"; + wrap.style.gap = gap; + wrap.appendChild(makeLabel(labelText)); + wrap.appendChild(contentEl); + return wrap; + }; + + const btn = (text: string): HTMLButtonElement => { + const b = document.createElement("button"); + b.textContent = text; + b.className = "mjr-ps-btn"; + b.style.padding = "7px 8px"; + b.style.borderRadius = "8px"; + b.style.border = "1px solid rgba(46, 136, 255, 0.65)"; + b.style.background = "rgba(46, 136, 255, 0.25)"; + b.style.color = "#eee"; + b.style.cursor = "pointer"; + b.style.margin = "0"; + b.style.lineHeight = "1.2"; + b.style.whiteSpace = "nowrap"; + return b; + }; + + return { + section, + divider, + detailsSection, + makeLabel, + styleField, + row, + groupRow, + btn, + }; +} diff --git a/src/ui/project_dropdowns.ts b/src/ui/project_dropdowns.ts new file mode 100644 index 0000000..6121440 --- /dev/null +++ b/src/ui/project_dropdowns.ts @@ -0,0 +1,36 @@ +import type { ProjectListEntry } from "../types/domain.js"; + +export interface ProjectDropdownTargets { + pendingSelect: HTMLSelectElement; +} + +export function renderProjectDropdowns( + targets: ProjectDropdownTargets, + projects: ProjectListEntry[] +): void { + const { pendingSelect } = targets; + const currentPending = pendingSelect.value; + + pendingSelect.innerHTML = ""; + + const emptyOpt = document.createElement("option"); + emptyOpt.value = ""; + emptyOpt.textContent = "-"; + pendingSelect.appendChild(emptyOpt); + + for (const project of projects) { + const projectId = project.project_id || ""; + if (!projectId) continue; + + const opt = document.createElement("option"); + opt.value = projectId; + opt.dataset.folder = project.folder || ""; + opt.dataset.exists = project.exists === false ? "false" : "true"; + const missingTag = project.exists === false ? " (missing)" : ""; + const archivedTag = project.archived ? " [archived]" : ""; + opt.textContent = `${project.folder || project.project_id} (${project.project_id})${missingTag}${archivedTag}`; + pendingSelect.appendChild(opt); + } + + if (currentPending) pendingSelect.value = currentPending; +} diff --git a/src/ui/project_status.ts b/src/ui/project_status.ts new file mode 100644 index 0000000..160ab43 --- /dev/null +++ b/src/ui/project_status.ts @@ -0,0 +1,81 @@ +import type { RuntimeState } from "../types/domain.js"; +import { getSettingBool } from "../mjr/settings.js"; + +const SETTING_NO_PROJECT_STATUS_BLACK = "mjr_project.status_black_no_project"; + +export interface ProjectStatus { + color: string; + text: string; + level: string; +} + +function parseHexColor(hex: unknown): [number, number, number] | null { + const m = String(hex || "").trim().match(/^#([0-9a-fA-F]{6})$/); + if (!m) return null; + const v = m[1]; + return [ + parseInt(v.slice(0, 2), 16), + parseInt(v.slice(2, 4), 16), + parseInt(v.slice(4, 6), 16), + ]; +} + +export function colorWithAlpha(hex: unknown, alpha: unknown): string { + const rgb = parseHexColor(hex); + if (!rgb) return String(hex); + const a = Math.max(0, Math.min(1, Number(alpha))); + return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${a})`; +} + +export function makeStatus(state: RuntimeState): ProjectStatus { + const det = state.detected; + const sameProject = + det && + det.mode !== "none" && + ((det.project_id && det.project_id === state.projectId) || + (det.project_folder && det.project_folder === state.projectFolder)); + const mismatch = + det && + det.mode !== "none" && + !sameProject && + (det.project_id || det.project_folder); + + if (state.lastError) { + return { color: "#b33a3a", text: `Error: ${state.lastError}`, level: "red" }; + } + if (state.graphIsEmpty) { + return { color: "#b33a3a", text: "Empty graph, set or create a project", level: "red" }; + } + if (!state.projectId) { + if (getSettingBool(SETTING_NO_PROJECT_STATUS_BLACK, false)) { + return { color: "#000000", text: "No project (test)", level: "black" }; + } + return { color: "#666666", text: "No active project", level: "gray" }; + } + if (state.projectExists === false) { + return { + color: "#b33a3a", + text: `Missing project folder: ${state.projectFolder || state.projectId}`, + level: "red", + }; + } + if (state.workflowChecked && !state.workflowHasSignature) { + return { + color: "#c77c2a", + text: "Active project, workflow unassigned", + level: "orange", + }; + } + if (mismatch) { + return { + color: "#c77c2a", + text: `Project mismatch: ${det.project_folder || det.project_id}`, + level: "orange", + }; + } + return { + color: "#2f8f4e", + text: `Active: ${state.projectFolder} (${state.projectId})`, + level: "green", + }; +} diff --git a/src/ui_components.ts b/src/ui_components.ts index 2d57098..32c3275 100644 --- a/src/ui_components.ts +++ b/src/ui_components.ts @@ -21,6 +21,7 @@ import { detectNodeMedia, isSaveLikeNode, patchSaveNodes, + previewPatchSaveNodes, patchSingleNode, stampGraphProjectSignature, } from "./mjr/patch.js"; @@ -40,103 +41,18 @@ import { getSerializedWorkflow } from "./mjr/graph.js"; import { extractNoteTexts } from "./mjr/workflow_note_recipes.js"; import { debug } from "./mjr/log.js"; import { updateMenuStatusBadge } from "./mjr/topbar_badge.js"; - -const TEMPLATE_TOKENS = ["{BASE}", "{MEDIA}", "{DATE}", "{MODEL}", "{NAME}", "{KIND}"]; - -const PROJECT_REFRESH_THROTTLE_MS = 5000; -const PROJECT_REFRESH_ERROR_BACKOFF_MS = 10000; -const SETTING_AUTO_FIX_AFTER_DOWNLOAD = "mjr_project.auto_fix_after_download"; -const SETTING_AUTO_SCAN_MISSING_ON_OPEN = "mjr_project.auto_scan_missing_on_open"; -const SETTING_AUTO_REMEMBER_NOTE_SOURCES = "mjr_project.auto_remember_note_sources"; -const SETTING_NO_PROJECT_STATUS_BLACK = "mjr_project.status_black_no_project"; - -const toBool = (value: unknown, fallback: boolean): boolean => { - if (value == null) return fallback; - if (typeof value === "boolean") return value; - if (typeof value === "number") return value !== 0; - if (typeof value === "string") { - const v = value.trim().toLowerCase(); - if (["true", "1", "yes", "on"].includes(v)) return true; - if (["false", "0", "no", "off"].includes(v)) return false; - } - return fallback; -}; - -const getSettingBool = (id: string, fallback: boolean): boolean => { - const raw = app?.ui?.settings?.settingsValues?.[id]; - return toBool(raw, fallback); -}; - -function parseHexColor(hex: unknown): [number, number, number] | null { - const m = String(hex || "").trim().match(/^#([0-9a-fA-F]{6})$/); - if (!m) return null; - const v = m[1]; - return [ - parseInt(v.slice(0, 2), 16), - parseInt(v.slice(2, 4), 16), - parseInt(v.slice(4, 6), 16), - ]; -} - -function colorWithAlpha(hex: unknown, alpha: unknown): string { - const rgb = parseHexColor(hex); - if (!rgb) return String(hex); - const a = Math.max(0, Math.min(1, Number(alpha))); - return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${a})`; -} - -function makeStatus(state: RuntimeState): { color: string; text: string; level: string } { - const det = state.detected; - const sameProject = - det && - det.mode !== "none" && - ((det.project_id && det.project_id === state.projectId) || - (det.project_folder && det.project_folder === state.projectFolder)); - const mismatch = - det && - det.mode !== "none" && - !sameProject && - (det.project_id || det.project_folder); - - if (state.lastError) { - return { color: "#b33a3a", text: `Error: ${state.lastError}`, level: "red" }; - } - if (state.graphIsEmpty) { - return { color: "#b33a3a", text: "Empty graph, set or create a project", level: "red" }; - } - if (!state.projectId) { - if (getSettingBool(SETTING_NO_PROJECT_STATUS_BLACK, false)) { - return { color: "#000000", text: "No project (test)", level: "black" }; - } - return { color: "#666666", text: "No active project", level: "gray" }; - } - if (state.projectExists === false) { - return { - color: "#b33a3a", - text: `Missing project folder: ${state.projectFolder || state.projectId}`, - level: "red", - }; - } - if (state.workflowChecked && !state.workflowHasSignature) { - return { - color: "#c77c2a", - text: "Active project, workflow unassigned", - level: "orange", - }; - } - if (mismatch) { - return { - color: "#c77c2a", - text: `Project mismatch: ${det.project_folder || det.project_id}`, - level: "orange", - }; - } - return { - color: "#2f8f4e", - text: `Active: ${state.projectFolder} (${state.projectId})`, - level: "green", - }; -} +import { getSettingBool } from "./mjr/settings.js"; +import { createPanelHelpers } from "./ui/panel_helpers.js"; +import { colorWithAlpha, makeStatus } from "./ui/project_status.js"; +import { renderProjectDropdowns } from "./ui/project_dropdowns.js"; +import { + PROJECT_REFRESH_ERROR_BACKOFF_MS, + PROJECT_REFRESH_THROTTLE_MS, + SETTING_AUTO_FIX_AFTER_DOWNLOAD, + SETTING_AUTO_REMEMBER_NOTE_SOURCES, + SETTING_AUTO_SCAN_MISSING_ON_OPEN, + TEMPLATE_TOKENS, +} from "./ui/panel_constants.js"; export function buildPanel(el: HTMLElement, state: RuntimeState, actions: SidebarRenderOptions): void { const { createAndActivateProject, setActiveProjectById, saveWorkflowToProject } = actions || {}; @@ -154,106 +70,16 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba container.style.fontFamily = "inherit"; container.style.padding = "8px 14px 16px"; - type DetailsWithSummary = HTMLDetailsElement & { _summary?: HTMLElement }; - - const section = (label: string): HTMLDivElement => { - const h = document.createElement("div"); - h.textContent = label; - h.style.fontWeight = "600"; - h.style.marginTop = UI_GAP; - h.style.marginBottom = UI_GAP; - h.style.paddingLeft = "2px"; - h.style.textTransform = "uppercase"; - h.style.letterSpacing = "0.6px"; - h.style.color = "#8fb9ff"; - return h; - }; - - const divider = (thick = false) => { - const d = document.createElement("div"); - d.style.height = thick ? "3px" : "1px"; - d.style.background = "rgba(255,255,255,0.08)"; - d.style.margin = "0"; - return d; - }; - - const detailsSection = (title: string): DetailsWithSummary => { - const details = document.createElement("details") as DetailsWithSummary; - details.style.marginTop = "0"; - details.style.display = "flex"; - details.style.flexDirection = "column"; - details.style.gap = UI_GAP; - const summary = document.createElement("summary"); - summary.textContent = title; - summary.style.cursor = "pointer"; - summary.style.opacity = "0.9"; - summary.style.textTransform = "uppercase"; - summary.style.letterSpacing = "0.6px"; - summary.style.color = "#8fb9ff"; - summary.style.fontWeight = "600"; - summary.style.paddingLeft = "2px"; - details.appendChild(summary); - details._summary = summary; - return details; - }; - - const makeLabel = (labelText: string): HTMLLabelElement => { - const label = document.createElement("label"); - label.textContent = labelText; - label.style.opacity = "0.85"; - label.style.marginLeft = "2px"; - label.style.fontSize = "11px"; - label.style.lineHeight = "1.2"; - return label; - }; - - const styleField = (inputEl: HTMLElement): void => { - inputEl.style.width = "100%"; - inputEl.style.boxSizing = "border-box"; - inputEl.style.padding = "6px 8px"; - inputEl.style.borderRadius = "8px"; - inputEl.style.border = "1px solid rgba(255,255,255,0.12)"; - inputEl.style.background = "rgba(0,0,0,0.25)"; - inputEl.style.color = "#eee"; - inputEl.style.outline = "none"; - }; - - const row = (labelText: string, inputEl: HTMLElement): HTMLDivElement => { - const wrap = document.createElement("div"); - wrap.style.display = "flex"; - wrap.style.flexDirection = "column"; - wrap.style.gap = UI_GAP; - wrap.appendChild(makeLabel(labelText)); - styleField(inputEl); - wrap.appendChild(inputEl); - return wrap; - }; - - const groupRow = (labelText: string, contentEl: HTMLElement): HTMLDivElement => { - const wrap = document.createElement("div"); - wrap.style.display = "flex"; - wrap.style.flexDirection = "column"; - wrap.style.gap = UI_GAP; - wrap.appendChild(makeLabel(labelText)); - wrap.appendChild(contentEl); - return wrap; - }; - - const btn = (text: string): HTMLButtonElement => { - const b = document.createElement("button"); - b.textContent = text; - b.className = "mjr-ps-btn"; - b.style.padding = "7px 8px"; - b.style.borderRadius = "8px"; - b.style.border = "1px solid rgba(46, 136, 255, 0.65)"; - b.style.background = "rgba(46, 136, 255, 0.25)"; - b.style.color = "#eee"; - b.style.cursor = "pointer"; - b.style.margin = "0"; - b.style.lineHeight = "1.2"; - b.style.whiteSpace = "nowrap"; - return b; - }; + const { + section, + divider, + detailsSection, + makeLabel, + styleField, + row, + groupRow, + btn, + } = createPanelHelpers(UI_GAP); // Status bar const statusBar = document.createElement("div"); @@ -306,6 +132,92 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba updateWorkflowBlock(); }); + const healthSection = detailsSection("Project Health"); + healthSection.open = true; + const healthList = document.createElement("div"); + healthList.style.display = "grid"; + healthList.style.gridTemplateColumns = "auto minmax(0, 1fr)"; + healthList.style.columnGap = "8px"; + healthList.style.rowGap = "6px"; + healthList.style.alignItems = "start"; + healthList.style.padding = "8px 0 0"; + healthSection.appendChild(healthList); + + const healthRows: Record = {}; + const addHealthRow = (key: string, labelText: string): void => { + const label = document.createElement("div"); + label.textContent = labelText; + label.style.opacity = "0.7"; + label.style.whiteSpace = "nowrap"; + const value = document.createElement("div"); + value.style.minWidth = "0"; + value.style.overflowWrap = "anywhere"; + healthRows[key] = value; + healthList.appendChild(label); + healthList.appendChild(value); + }; + addHealthRow("folder", "Folder"); + addHealthRow("workflow", "Workflow"); + addHealthRow("target", "Output"); + addHealthRow("patch", "Patch"); + addHealthRow("models", "Models"); + addHealthRow("save", "Last save"); + + const setHealth = (key: string, text: string, color = "#ddd"): void => { + const rowEl = healthRows[key]; + if (!rowEl) return; + rowEl.textContent = text; + rowEl.style.color = color; + }; + + const updateHealth = (): void => { + const okColor = "#9dd7a5"; + const warnColor = "#f2d98a"; + const errorColor = "#ff9a9a"; + const mutedColor = "#aaa"; + setHealth( + "folder", + state.projectId + ? state.projectExists === false + ? `Missing: ${state.projectFolder || state.projectId}` + : state.projectFolder || state.projectId + : "No active project", + !state.projectId ? mutedColor : state.projectExists === false ? errorColor : okColor + ); + setHealth( + "workflow", + state.workflowChecked + ? state.workflowHasSignature + ? "Assigned" + : "Unassigned" + : "Not checked yet", + state.workflowChecked && !state.workflowHasSignature ? warnColor : okColor + ); + setHealth( + "target", + state.lastRelDir || state.lastPrefix ? `${state.lastRelDir || "-"} | ${state.lastPrefix || "-"}` : "No output target", + state.lastRelDir || state.lastPrefix ? okColor : warnColor + ); + const patchPreview = state.lastRelDir || state.lastPrefix + ? previewPatchSaveNodes(app, state.lastRelDir, state.lastPrefix, state.media) + : []; + const patchNodes = new Set(patchPreview.map((item) => item.node)).size; + setHealth( + "patch", + patchNodes > 0 ? `${patchNodes} save node${patchNodes === 1 ? "" : "s"} patchable` : "No patchable save nodes", + patchNodes > 0 ? warnColor : mutedColor + ); + const missingText = fixerState.scanned + ? `${fixerState.missing} missing / ${fixerState.total} checked` + : "Not scanned"; + setHealth("models", missingText, fixerState.scanned && fixerState.missing > 0 ? warnColor : mutedColor); + setHealth( + "save", + state.workflowName || state.workflowLastBase || "No workflow save yet", + state.workflowName || state.workflowLastBase ? okColor : mutedColor + ); + }; + const updateResolve = () => { const det = state.detected; let show = true; @@ -851,6 +763,12 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba const downloadStatusText = document.createElement("div"); downloadStatus.appendChild(downloadStatusText); + const downloadPolicyText = document.createElement("div"); + downloadPolicyText.textContent = + "Download policy: direct http/https URLs, extension allowlist, size cap, host policy, and private-IP guard are enforced server-side."; + downloadPolicyText.style.opacity = "0.75"; + downloadStatus.appendChild(downloadPolicyText); + const downloadProgressWrap = document.createElement("div"); downloadProgressWrap.style.height = "6px"; downloadProgressWrap.style.width = "100%"; @@ -888,6 +806,7 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba workflowUtilsWrap.appendChild(workflowUtilsContent); container.appendChild(statusBar); + container.appendChild(healthSection); container.appendChild(workflowWrap); container.appendChild(resolveWrap); container.appendChild(divider()); @@ -1096,6 +1015,7 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba } workflowUtilsWrap.style.border = `1px solid ${colorWithAlpha(color, 0.4)}`; workflowUtilsWrap.style.background = colorWithAlpha(color, 0.12); + updateHealth(); }; const updateDownloadStatus = () => { @@ -1318,6 +1238,7 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba if (!template) { previewLabel.textContent = "Preview: -"; + updateHealth(); return; } @@ -1327,10 +1248,12 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba if (requestToken !== previewToken) return; const preview = resp?.preview || ""; previewLabel.textContent = preview ? `Preview: ${preview}` : "Preview: -"; + updateHealth(); } catch (err) { if (requestToken !== previewToken) return; const previewError = String(err instanceof Error ? err.message : err || "Invalid template"); previewLabel.textContent = `Preview: ${previewError}`; + updateHealth(); } }; @@ -1425,22 +1348,7 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba let projectRefreshErrorCount = 0; const updateProjectDropdowns = (filteredList: ProjectListEntry[]): void => { - pendingSelect.innerHTML = ""; - const pendingEmpty = document.createElement("option"); - pendingEmpty.value = ""; - pendingEmpty.textContent = "-"; - pendingSelect.appendChild(pendingEmpty); - - for (const p of filteredList) { - const opt = document.createElement("option"); - opt.value = p.project_id; - opt.dataset.folder = p.folder || ""; - opt.dataset.exists = p.exists === false ? "false" : "true"; - const missingTag = p.exists === false ? " (missing)" : ""; - const archivedTag = p.archived ? " [archived]" : ""; - opt.textContent = `${p.folder || p.project_id} (${p.project_id})${missingTag}${archivedTag}`; - pendingSelect.appendChild(opt); - } + renderProjectDropdowns({ pendingSelect }, filteredList); }; refreshProjectsList = async (force = false) => { @@ -2261,22 +2169,25 @@ export function buildPanel(el: HTMLElement, state: RuntimeState, actions: Sideba return; } - // Count save nodes first - const saveNodes = ((app.graph?._nodes || []) as (ComfyNode | null)[]).filter(n => isSaveLikeNode(n)); - const nodeCount = saveNodes.length; + const preview = previewPatchSaveNodes(app, state.lastRelDir, state.lastPrefix, state.media); + const nodeCount = new Set(preview.map((item) => item.node)).size; if (nodeCount === 0) { toast("warn", "No nodes to patch", "No save-like nodes found in workflow."); return; } + const previewLines = preview + .slice(0, 8) + .map((item) => `${item.nodeLabel}.${item.widget}: ${item.oldValue || "-"} -> ${item.newValue || "-"}`); + const overflow = preview.length > previewLines.length ? `\n...and ${preview.length - previewLines.length} more change(s)` : ""; + // Ask for confirmation const confirmed = await psConfirm({ title: "Patch save paths?", message: `Update ${nodeCount} save node${nodeCount !== 1 ? "s" : ""} to use the project path?\n\n` + - `Path: ${state.lastRelDir}\n` + - `Prefix: ${state.lastPrefix}\n\n` + + `${previewLines.join("\n")}${overflow}\n\n` + `This can be undone with Ctrl+Z.`, }); diff --git a/tests/frontend/patch.test.mjs b/tests/frontend/patch.test.mjs index 8c67e8b..6638aab 100644 --- a/tests/frontend/patch.test.mjs +++ b/tests/frontend/patch.test.mjs @@ -7,6 +7,7 @@ import { detectNodeMedia, isSaveLikeNode, patchSingleNode, + previewPatchSingleNode, } from "../../web/js/mjr/patch.js"; test("patchSingleNode patches split path and filename widgets", () => { @@ -25,6 +26,26 @@ test("patchSingleNode patches split path and filename widgets", () => { assert.equal(node.widgets[1].value, "260526_Test"); }); +test("previewPatchSingleNode shows old and new widget values", () => { + PATH_WIDGETS.splice(0, PATH_WIDGETS.length, "output_path"); + const node = { + title: "Preview Save", + type: "SaveImage", + widgets: [ + { name: "output_path", value: "old/path" }, + { name: "filename_prefix", value: "old_prefix" }, + ], + }; + + const preview = previewPatchSingleNode(node, "PROJECTS/Demo/02_OUT/IMAGES", "260526_Test"); + assert.equal(preview.length, 2); + assert.equal(preview[0].nodeLabel, "Preview Save"); + assert.equal(preview[0].oldValue, "old/path"); + assert.equal(preview[0].newValue, "PROJECTS/Demo/02_OUT/IMAGES"); + assert.equal(preview[1].oldValue, "old_prefix"); + assert.equal(preview[1].newValue, "260526_Test"); +}); + test("patchSingleNode falls back to filename_prefix only nodes", () => { PATH_WIDGETS.splice(0, PATH_WIDGETS.length, "output_path"); const node = { diff --git a/tests/test_route_utils.py b/tests/test_route_utils.py new file mode 100644 index 0000000..26cf75a --- /dev/null +++ b/tests/test_route_utils.py @@ -0,0 +1,94 @@ +import importlib.util +import os +import unittest +from pathlib import Path +from types import SimpleNamespace + + +def _load_module(relpath: str): + root = Path(__file__).resolve().parents[1] + path = root / relpath + spec = importlib.util.spec_from_file_location(relpath.replace("/", "_"), path) + module = importlib.util.module_from_spec(spec) + assert spec and spec.loader + spec.loader.exec_module(module) + return module + + +route_utils = _load_module("server/route_utils.py") + + +class EnvGuard: + def __enter__(self): + self.original = os.environ.copy() + return self + + def __exit__(self, exc_type, exc, tb): + os.environ.clear() + os.environ.update(self.original) + + +def request(headers=None, remote="127.0.0.1", cookies=None): + return SimpleNamespace(headers=headers or {}, remote=remote, cookies=cookies or {}) + + +class TestRouteUtils(unittest.TestCase): + def setUp(self): + route_utils._rate_state.clear() + + def test_auth_allows_loopback_without_api_key(self): + with EnvGuard(): + os.environ.pop("MJR_API_KEY", None) + self.assertIsNone(route_utils.require_auth(request(remote="127.0.0.1"))) + + def test_auth_rejects_remote_without_api_key(self): + with EnvGuard(): + os.environ.pop("MJR_API_KEY", None) + resp = route_utils.require_auth(request(remote="203.0.113.10")) + self.assertEqual(resp.status, 401) + + def test_auth_accepts_matching_api_key(self): + with EnvGuard(): + os.environ["MJR_API_KEY"] = "secret" + resp = route_utils.require_auth( + request(headers={"Authorization": "Bearer secret"}, remote="203.0.113.10") + ) + self.assertIsNone(resp) + + def test_same_origin_rejects_mismatched_origin(self): + resp = route_utils.require_same_origin( + request(headers={"Origin": "http://evil.example", "Host": "127.0.0.1:8188"}) + ) + self.assertEqual(resp.status, 403) + + def test_same_origin_accepts_matching_origin(self): + resp = route_utils.require_same_origin( + request( + headers={ + "Origin": "http://127.0.0.1:8188", + "Host": "127.0.0.1:8188", + "X-CSRF-Token": "token", + }, + cookies={"mjr_csrf": "token"}, + ) + ) + self.assertIsNone(resp) + + def test_same_origin_rejects_missing_csrf(self): + resp = route_utils.require_same_origin( + request(headers={"Origin": "http://127.0.0.1:8188", "Host": "127.0.0.1:8188"}) + ) + self.assertEqual(resp.status, 403) + + def test_rate_limit_blocks_after_limit(self): + with EnvGuard(): + os.environ["MJR_RATE_LIMIT_PER_MIN"] = "2" + req = request(remote="127.0.0.1") + self.assertIsNone(route_utils.require_rate_limit(req, "bucket")) + self.assertIsNone(route_utils.require_rate_limit(req, "bucket")) + resp = route_utils.require_rate_limit(req, "bucket") + self.assertEqual(resp.status, 429) + + +if __name__ == "__main__": + unittest.main() diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 1e14302..b62e467 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -19,6 +19,7 @@ "src/mjr/dom.ts", "src/mjr/graph.ts", "src/mjr/patch.ts", + "src/mjr/settings.ts", "src/mjr/toast.ts", "src/mjr/topbar_badge.ts", "src/state_manager.ts", diff --git a/web/js/majoor_project_settings.js b/web/js/majoor_project_settings.js index 496ba1f..6a20ba8 100644 --- a/web/js/majoor_project_settings.js +++ b/web/js/majoor_project_settings.js @@ -9,12 +9,18 @@ import { toast } from "./mjr/toast.js"; import { fetchJSON, saveWorkflow, tryResolveProjectId } from "./mjr/api.js"; import { psConfirm, psPrompt } from "./mjr/dialog.js"; import { detectModelFromGraph, getSerializedWorkflow, inferProjectFolderFromGraph, readGraphSignature, } from "./mjr/graph.js"; -import { PATH_WIDGETS, alreadyProjectPathed, detectNodeMedia, isSaveLikeNode, loadConfig, patchSaveNodes, patchSingleNode, stampGraphProjectSignature, } from "./mjr/patch.js"; +import { PATH_WIDGETS, alreadyProjectPathed, detectNodeMedia, isSaveLikeNode, loadConfig, patchSaveNodes, previewPatchSaveNodes, patchSingleNode, stampGraphProjectSignature, } from "./mjr/patch.js"; import { buildPanel } from "./ui_components.js"; +import { updateMenuStatusBadge } from "./mjr/topbar_badge.js"; import { createRuntimeState, loadState, saveState, runtimeState, setRuntimeState, } from "./state_manager.js"; import { scanMissingModelsWithStats } from "./mjr/model_fixer.js"; +import { getSettingBool, toBool, toNumber } from "./mjr/settings.js"; let workflowShortcutRegistered = false; const COMMAND_SAVE_WORKFLOW_TO_PROJECT = "mjr.projectSettings.saveWorkflowToProject"; +const COMMAND_OPEN_PANEL = "mjr.projectSettings.openPanel"; +const COMMAND_ASSIGN_ACTIVE_PROJECT = "mjr.projectSettings.assignActiveProject"; +const COMMAND_SCAN_MISSING_MODELS = "mjr.projectSettings.scanMissingModels"; +const COMMAND_PATCH_SAVE_NODES = "mjr.projectSettings.patchSaveNodes"; const NODE_PATCH_RETRY_DELAY_MS = 60; const NODE_PATCH_MAX_RETRIES = 1; const SETTINGS_CATEGORY = "MajoorPS"; @@ -23,13 +29,17 @@ const DEFAULT_DOWNLOAD_MAX_GB = 50; const AUTO_FIX_AFTER_DOWNLOAD_SETTING = "mjr_project.auto_fix_after_download"; const AUTO_OPEN_PANEL_ON_MISSING_SETTING = "mjr_project.auto_open_panel_on_missing"; const AUTO_SCAN_MISSING_ON_OPEN_SETTING = "mjr_project.auto_scan_missing_on_open"; +const PROMPT_EMPTY_GRAPH_SETTING = "mjr_project.prompt_empty_graph"; const AUTO_REMEMBER_NOTE_SOURCES_SETTING = "mjr_project.auto_remember_note_sources"; const NO_PROJECT_STATUS_BLACK_SETTING = "mjr_project.status_black_no_project"; +const LEGACY_CTRL_S_HOOK_SETTING = "mjr_project.legacy_ctrl_s_hook"; const DEFAULT_AUTO_FIX_AFTER_DOWNLOAD = true; -const DEFAULT_AUTO_OPEN_PANEL = true; +const DEFAULT_AUTO_OPEN_PANEL = false; const DEFAULT_AUTO_SCAN_MISSING_ON_OPEN = true; +const DEFAULT_PROMPT_EMPTY_GRAPH = false; const DEFAULT_AUTO_REMEMBER_NOTE_SOURCES = true; const DEFAULT_NO_PROJECT_STATUS_BLACK = false; +const DEFAULT_LEGACY_CTRL_S_HOOK = false; const GRAPH_EMPTY_POLL_INTERVAL_MS = 900; let graphEmptyWatcherId = null; function _extractYYMMDDFromPrefix(prefix) { @@ -62,34 +72,6 @@ function _rollOutputDateIfNeeded(state) { updateUI(state); return true; } -const toNumber = (value, fallback) => { - if (value == null) - return fallback; - const num = Number(value); - return Number.isFinite(num) ? num : fallback; -}; -const toBool = (value, fallback) => { - if (value == null) - return fallback; - if (typeof value === "boolean") - return value; - if (typeof value === "number") - return value !== 0; - if (typeof value === "string") { - const v = value.trim().toLowerCase(); - if (["true", "1", "yes", "on"].includes(v)) - return true; - if (["false", "0", "no", "off"].includes(v)) - return false; - } - return fallback; -}; -const getSettingBool = (id, fallback) => { - const raw = app?.extensionManager?.setting?.get?.(id) ?? - app?.ui?.settings?.getSettingValue?.(id) ?? - app?.ui?.settings?.settingsValues?.[id]; - return toBool(raw, fallback); -}; function updateUI(state) { const safe = (fn, label) => { try { @@ -258,7 +240,7 @@ function handleGraphEmptyTransition(state, runToken, currentEmpty) { if (!currentEmpty) { state._emptyGraphPromptToken = null; } - else { + else if (getSettingBool(PROMPT_EMPTY_GRAPH_SETTING, DEFAULT_PROMPT_EMPTY_GRAPH)) { void promptEmptyGraphProject(state, runToken ?? state.graphLoadToken); } return true; @@ -477,9 +459,92 @@ function saveActiveWorkflowToProjectCommand() { } void saveWorkflowToProject(state); } +function openProjectSettingsCommand() { + const sidebar = app?.extensionManager?.sidebar; + if (sidebar && typeof sidebar.setTab === "function") { + sidebar.setTab("mjr_project_settings"); + return; + } + const state = runtimeState; + if (state) { + state.workflowPanelOpen = true; + saveState(state); + updateUI(state); + } +} +function assignActiveProjectCommand() { + const state = runtimeState; + if (!state?.projectId || !state.projectFolder) { + toast("error", "No active project", "Set a project first."); + return; + } + stampGraphProjectSignature(app, state); + state.workflowHasSignature = true; + state.workflowChecked = true; + state.detected = null; + state.lastError = ""; + saveState(state); + updateUI(state); + toast("success", "Workflow assigned", state.projectFolder); +} +function scanMissingModelsCommand() { + const state = runtimeState; + if (!state) + return; + try { + const { missing } = scanMissingModelsWithStats(); + state._ui?.refreshMissingStatus?.(); + toast(missing?.length ? "warn" : "success", "Missing Models", `${missing?.length || 0} missing model${missing?.length === 1 ? "" : "s"} detected`, { life: 4000 }); + } + catch (error) { + console.error("[mjr] Error scanning missing models:", error); + toast("error", "Missing Models", "Scan failed."); + } +} +async function patchSaveNodesCommand() { + const state = runtimeState; + if (!state?.projectId) { + toast("warn", "Patch skipped", "Set a project first."); + return; + } + _rollOutputDateIfNeeded(state); + let relDir = state.lastRelDir; + const prefix = state.lastPrefix || ""; + if (!relDir && state.projectFolder) { + relDir = joinRel(`PROJECTS/${state.projectFolder}`, mediaDir(state.media || "images")); + } + if (!relDir) { + toast("warn", "Patch skipped", "Create an output target first."); + return; + } + const preview = previewPatchSaveNodes(app, relDir, prefix, state.media); + const nodeCount = new Set(preview.map((item) => item.node)).size; + if (nodeCount === 0) { + toast("warn", "No nodes patched", "No save-like nodes were found."); + return; + } + const previewLines = preview + .slice(0, 8) + .map((item) => `${item.nodeLabel}.${item.widget}: ${item.oldValue || "-"} -> ${item.newValue || "-"}`); + const overflow = preview.length > previewLines.length ? `\n...and ${preview.length - previewLines.length} more change(s)` : ""; + const confirmed = await psConfirm({ + title: "Patch save paths?", + message: `Update ${nodeCount} save node${nodeCount === 1 ? "" : "s"} to use the project path?\n\n` + + `${previewLines.join("\n")}${overflow}\n\n` + + "This can be undone with Ctrl+Z.", + }); + if (!confirmed) { + toast("info", "Patch cancelled", "No nodes were modified."); + return; + } + const patched = await patchSaveNodes(app, relDir, prefix, state.media); + toast(patched ? "success" : "warn", patched ? "Patch applied" : "No nodes patched", patched ? `Updated ${patched} node${patched === 1 ? "" : "s"}.` : "No save-like nodes were updated."); +} function registerWorkflowShortcut() { if (workflowShortcutRegistered) return; + if (!getSettingBool(LEGACY_CTRL_S_HOOK_SETTING, DEFAULT_LEGACY_CTRL_S_HOOK)) + return; workflowShortcutRegistered = true; window.addEventListener("keydown", (event) => { const key = String(event.key || "").toLowerCase(); @@ -531,6 +596,13 @@ const EXTENSION_SETTINGS = [ defaultValue: DEFAULT_AUTO_SCAN_MISSING_ON_OPEN, category: SETTINGS_CATEGORY, }, + { + id: PROMPT_EMPTY_GRAPH_SETTING, + name: "MajoorPS: Prompt on empty workflow", + type: "boolean", + defaultValue: DEFAULT_PROMPT_EMPTY_GRAPH, + category: SETTINGS_CATEGORY, + }, { id: AUTO_REMEMBER_NOTE_SOURCES_SETTING, name: "MajoorPS: Auto-remember note sources", @@ -545,6 +617,13 @@ const EXTENSION_SETTINGS = [ defaultValue: DEFAULT_NO_PROJECT_STATUS_BLACK, category: SETTINGS_CATEGORY, }, + { + id: LEGACY_CTRL_S_HOOK_SETTING, + name: "MajoorPS: Legacy Ctrl+S hook", + type: "boolean", + defaultValue: DEFAULT_LEGACY_CTRL_S_HOOK, + category: SETTINGS_CATEGORY, + }, ]; function registerLegacyExtensionSettings() { if (app?.extensionManager?.setting) @@ -574,11 +653,37 @@ app.registerExtension({ label: "MajoorPS: Save workflow to project", function: saveActiveWorkflowToProjectCommand, }, - ], - keybindings: [ { - combo: { key: "s", ctrl: true }, - commandId: COMMAND_SAVE_WORKFLOW_TO_PROJECT, + id: COMMAND_OPEN_PANEL, + label: "MajoorPS: Open Project Settings", + function: openProjectSettingsCommand, + }, + { + id: COMMAND_ASSIGN_ACTIVE_PROJECT, + label: "MajoorPS: Assign workflow to active project", + function: assignActiveProjectCommand, + }, + { + id: COMMAND_SCAN_MISSING_MODELS, + label: "MajoorPS: Scan missing models", + function: scanMissingModelsCommand, + }, + { + id: COMMAND_PATCH_SAVE_NODES, + label: "MajoorPS: Patch save nodes now", + function: patchSaveNodesCommand, + }, + ], + menuCommands: [ + { + path: ["Extensions", "Majoor Project Settings"], + commands: [ + COMMAND_OPEN_PANEL, + COMMAND_ASSIGN_ACTIVE_PROJECT, + COMMAND_SAVE_WORKFLOW_TO_PROJECT, + COMMAND_SCAN_MISSING_MODELS, + COMMAND_PATCH_SAVE_NODES, + ], }, ], async setup() { @@ -632,6 +737,7 @@ app.registerExtension({ } setRuntimeState(state); _rollOutputDateIfNeeded(state); + updateMenuStatusBadge(state); registerWorkflowShortcut(); state._emptyGraphPromptToken = null; startGraphEmptyWatcher(state); diff --git a/web/js/majoor_project_settings.js.map b/web/js/majoor_project_settings.js.map index f609f8c..ba87938 100644 --- a/web/js/majoor_project_settings.js.map +++ b/web/js/majoor_project_settings.js.map @@ -1 +1 @@ -{"version":3,"file":"majoor_project_settings.js","sourceRoot":"","sources":["../../src/majoor_project_settings.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"majoor_project_settings.js","sourceRoot":"","sources":["../../src/majoor_project_settings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/web/js/mjr/patch.d.ts b/web/js/mjr/patch.d.ts index d8fe5b8..0924aa0 100644 --- a/web/js/mjr/patch.d.ts +++ b/web/js/mjr/patch.d.ts @@ -5,6 +5,17 @@ export declare function detectNodeMedia(node: ComfyNode | null | undefined): Pro export declare function isSaveLikeNode(node: ComfyNode | null | undefined): boolean; export declare function alreadyProjectPathed(value: unknown): boolean; export declare function patchSingleNode(node: ComfyNode | null | undefined, relDir: unknown, filenamePrefix: unknown): boolean; +export interface PatchPreviewItem { + node: ComfyNode; + nodeLabel: string; + widget: string; + oldValue: string; + newValue: string; +} +export declare function previewPatchSingleNode(node: ComfyNode | null | undefined, relDir: unknown, filenamePrefix: unknown): PatchPreviewItem[]; +export declare function previewPatchSaveNodes(app: { + graph?: ComfyGraph; +}, relDir: unknown, filenamePrefix: unknown, targetMedia?: ProjectMedia): PatchPreviewItem[]; export declare function patchSaveNodes(app: { graph?: ComfyGraph; }, relDir: unknown, filenamePrefix: unknown, targetMedia?: ProjectMedia): Promise; diff --git a/web/js/mjr/patch.js b/web/js/mjr/patch.js index cb94216..84c771d 100644 --- a/web/js/mjr/patch.js +++ b/web/js/mjr/patch.js @@ -70,6 +70,67 @@ export function patchSingleNode(node, relDir, filenamePrefix) { } return false; } +export function previewPatchSingleNode(node, relDir, filenamePrefix) { + if (!isSaveLikeNode(node)) + return []; + if (!node) + return []; + const rel = safeRel(relDir); + const prefix = safeRel(filenamePrefix); + const widgets = node?.widgets || []; + const filenameWidget = widgets.find((w) => w?.name === "filename_prefix"); + const pathWidget = widgets.find((w) => w?.name && PATH_WIDGETS.includes(w.name)); + const nodeLabel = String(node?.title || node?.comfyClass || node?.type || "Save node"); + const items = []; + if (pathWidget && filenameWidget) { + items.push({ + node, + nodeLabel, + widget: String(pathWidget.name), + oldValue: String(pathWidget.value ?? ""), + newValue: rel, + }); + items.push({ + node, + nodeLabel, + widget: String(filenameWidget.name), + oldValue: String(filenameWidget.value ?? ""), + newValue: prefix, + }); + return items; + } + if (filenameWidget) { + items.push({ + node, + nodeLabel, + widget: String(filenameWidget.name), + oldValue: String(filenameWidget.value ?? ""), + newValue: prefix ? joinRel(rel, prefix) : rel, + }); + return items; + } + if (pathWidget) { + items.push({ + node, + nodeLabel, + widget: String(pathWidget.name), + oldValue: String(pathWidget.value ?? ""), + newValue: rel, + }); + } + return items; +} +export function previewPatchSaveNodes(app, relDir, filenamePrefix, targetMedia) { + const nodes = app?.graph?._nodes || []; + const items = []; + for (const node of nodes) { + const nm = detectNodeMedia(node); + if (targetMedia && nm && nm !== targetMedia) + continue; + items.push(...previewPatchSingleNode(node, relDir, filenamePrefix)); + } + return items; +} export async function patchSaveNodes(app, relDir, filenamePrefix, targetMedia) { await loadConfig(); const nodes = app?.graph?._nodes || []; @@ -96,6 +157,7 @@ export function stampGraphProjectSignature(app, state) { return; g.extra = g.extra || {}; g.extra.mjr_project = { + schema_version: 1, project_id: state.projectId, project_folder: state.projectFolder, template: state.pathTemplate || "", diff --git a/web/js/mjr/patch.js.map b/web/js/mjr/patch.js.map index 1b10b4e..e01fcd5 100644 --- a/web/js/mjr/patch.js.map +++ b/web/js/mjr/patch.js.map @@ -1 +1 @@ -{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/mjr/patch.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/mjr/patch.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/web/js/mjr/settings.d.ts b/web/js/mjr/settings.d.ts new file mode 100644 index 0000000..03ec6b9 --- /dev/null +++ b/web/js/mjr/settings.d.ts @@ -0,0 +1,5 @@ +import type { SettingId } from "../types/domain.js"; +export declare function toBool(value: unknown, fallback: boolean): boolean; +export declare function toNumber(value: unknown, fallback: number): number; +export declare function getSettingValue(id: SettingId | string): T | undefined; +export declare function getSettingBool(id: SettingId | string, fallback: boolean): boolean; diff --git a/web/js/mjr/settings.js b/web/js/mjr/settings.js new file mode 100644 index 0000000..5873006 --- /dev/null +++ b/web/js/mjr/settings.js @@ -0,0 +1,32 @@ +import { app } from "../../../scripts/app.js"; +export function toBool(value, fallback) { + if (value == null) + return fallback; + if (typeof value === "boolean") + return value; + if (typeof value === "number") + return value !== 0; + if (typeof value === "string") { + const v = value.trim().toLowerCase(); + if (["true", "1", "yes", "on"].includes(v)) + return true; + if (["false", "0", "no", "off"].includes(v)) + return false; + } + return fallback; +} +export function toNumber(value, fallback) { + if (value == null) + return fallback; + const num = Number(value); + return Number.isFinite(num) ? num : fallback; +} +export function getSettingValue(id) { + return (app?.extensionManager?.setting?.get?.(id) ?? + app?.ui?.settings?.getSettingValue?.(id) ?? + app?.ui?.settings?.settingsValues?.[id]); +} +export function getSettingBool(id, fallback) { + return toBool(getSettingValue(id), fallback); +} +//# sourceMappingURL=settings.js.map \ No newline at end of file diff --git a/web/js/mjr/settings.js.map b/web/js/mjr/settings.js.map new file mode 100644 index 0000000..e6e2b36 --- /dev/null +++ b/web/js/mjr/settings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/mjr/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAG9C,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,QAAiB;IACtD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,QAAgB;IACvD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,eAAe,CAAc,EAAsB;IACjE,OAAO,CACL,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACzC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QACxC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CACvB,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAsB,EAAE,QAAiB;IACtE,OAAO,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC"} \ No newline at end of file diff --git a/web/js/mjr/topbar_badge.js b/web/js/mjr/topbar_badge.js index ffb97f4..0657c6c 100644 --- a/web/js/mjr/topbar_badge.js +++ b/web/js/mjr/topbar_badge.js @@ -1,89 +1,172 @@ -import { applyStyles, createElement } from "./dom.js"; -const MENU_BADGE_ID = "mjr-project-status-badge"; -const MENU_ACTION_SELECTORS = [ - ".comfy-menu-actions", - ".comfy-menu-no-drag", - ".comfy-topbar-actions", - ".comfy-menu", - ".workflow-tabs-container", - ".workflow-tabs-container .flex", - ".menu-actions", -]; -let menuBadgeInterval = null; -let menuBadgePendingState = null; -let menuBadgeLogTimestamp = 0; -function findMenuActionsContainer() { - for (const selector of MENU_ACTION_SELECTORS) { - const candidate = document.querySelector(selector); - if (candidate) { - return candidate; - } - } - return null; -} -function ensureMenuStatusBadge(actions, text, color) { - let badge = document.getElementById(MENU_BADGE_ID); - if (!badge) { - badge = createElement("div", { - id: MENU_BADGE_ID, - styles: { - display: "inline-flex", - alignItems: "center", - justifyContent: "center", - padding: "4px 10px", - borderRadius: "999px", - fontSize: "11px", - fontWeight: "600", - border: "1px solid transparent", - marginLeft: "8px", - gap: "4px", - transition: "background 0.3s ease, border 0.3s ease", - cursor: "default", - }, - }); - actions.appendChild(badge); - } - badge.textContent = text; - applyStyles(badge, { - background: color, - borderColor: color, - }); - return badge; -} -export function updateMenuStatusBadge(state) { - menuBadgePendingState = state; - const actions = findMenuActionsContainer(); - if (!actions) { - if (!menuBadgeInterval) { - menuBadgeInterval = setInterval(() => { - if (menuBadgePendingState) { - updateMenuStatusBadge(menuBadgePendingState); - } - }, 500); - } - const now = Date.now(); - if (now - menuBadgeLogTimestamp > 5000) { - console.info(`[mjr] Waiting for topbar badge target (${MENU_ACTION_SELECTORS.join(", ")}) project=${state?.projectId || "none"} folder=${state?.projectFolder || "none"}`); - menuBadgeLogTimestamp = now; - } - console.debug("[mjr] comfy menu actions not found yet, retrying badge soon", state); +import { app } from "../../../scripts/app.js"; +const BUTTON_ID = "mjr-project-health-button"; +const LEGACY_BUTTON_ID = "mjr-project-health-button-legacy"; +let buttonElement = null; +let buttonGroupElement = null; +let pendingState = null; +let createPromise = null; +function openProjectSettings() { + const sidebar = app?.extensionManager?.sidebar; + if (sidebar && typeof sidebar.setTab === "function") { + sidebar.setTab("mjr_project_settings"); return; } - if (menuBadgeInterval) { - clearInterval(menuBadgeInterval); - menuBadgeInterval = null; + try { + const state = pendingState; + if (state) { + state.workflowPanelOpen = true; + state._ui?.updateWorkflowBlock?.(); + } + } + catch (_) { } +} +function getHealth(state) { + const project = state.projectFolder || state.projectId || "No project"; + const output = state.lastRelDir || state.lastPrefix + ? `${state.lastRelDir || "-"} | ${state.lastPrefix || "-"}` + : "No output target"; + if (state.lastError) { + return { + text: "Project: Error", + background: "#7f1d1d", + border: "#ef4444", + title: `Project Health\nError: ${state.lastError}\nProject: ${project}\nOutput: ${output}`, + }; + } + if (state.graphIsEmpty) { + return { + text: "Project: Empty", + background: "#7f1d1d", + border: "#ef4444", + title: `Project Health\nGraph is empty\nProject: ${project}\nOutput: ${output}`, + }; + } + if (!state.projectId) { + return { + text: "Project: None", + background: "#3f3f46", + border: "#71717a", + title: `Project Health\nNo active project\nOutput: ${output}`, + }; + } + if (state.projectExists === false) { + return { + text: "Project: Missing", + background: "#7f1d1d", + border: "#ef4444", + title: `Project Health\nMissing folder: ${project}\nOutput: ${output}`, + }; + } + if (state.workflowChecked && !state.workflowHasSignature) { + return { + text: `Project: ${project}`, + background: "#7c2d12", + border: "#f97316", + title: `Project Health\nWorkflow is not assigned\nProject: ${project}\nOutput: ${output}`, + }; + } + const det = state.detected; + const mismatch = det && + det.mode !== "none" && + !((det.project_id && det.project_id === state.projectId) || + (det.project_folder && det.project_folder === state.projectFolder)) && + (det.project_id || det.project_folder); + if (mismatch) { + return { + text: "Project: Mismatch", + background: "#7c2d12", + border: "#f97316", + title: `Project Health\nWorkflow: ${det.project_folder || det.project_id}\nActive: ${project}\nOutput: ${output}`, + }; + } + return { + text: `Project: ${project}`, + background: "#166534", + border: "#22c55e", + title: `Project Health\nActive project: ${project}\nWorkflow: assigned\nOutput: ${output}`, + }; +} +function styleProjectButton(el) { + el.id = BUTTON_ID; + el.classList.add("comfyui-button", "comfyui-menu-mobile-collapse"); + el.style.maxWidth = "260px"; + el.style.overflow = "hidden"; + el.style.textOverflow = "ellipsis"; + el.style.whiteSpace = "nowrap"; +} +async function ensureNewStyleButton() { + if (buttonElement && document.body.contains(buttonElement)) + return true; + if (buttonGroupElement && document.body.contains(buttonGroupElement)) + return true; + if (!app?.menu?.settingsGroup?.element) + return false; + try { + const [{ ComfyButton }, { ComfyButtonGroup }] = await Promise.all([ + import("../../../scripts/ui/components/button.js"), + import("../../../scripts/ui/components/buttonGroup.js"), + ]); + const button = new ComfyButton({ + icon: "briefcase", + action: openProjectSettings, + tooltip: "Majoor Project Health", + content: "Project", + classList: "comfyui-button comfyui-menu-mobile-collapse", + }); + buttonElement = button.element; + styleProjectButton(buttonElement); + const group = new ComfyButtonGroup(buttonElement); + buttonGroupElement = group.element; + app.menu.settingsGroup.element.before(buttonGroupElement); + return true; + } + catch (error) { + console.warn("[mjr] New style ComfyUI button unavailable", error); + return false; + } +} +function ensureLegacyButton() { + let button = document.getElementById(LEGACY_BUTTON_ID); + if (!button) { + const menu = document.querySelector(".comfy-menu"); + if (!menu) + return false; + button = document.createElement("button"); + button.id = LEGACY_BUTTON_ID; + button.type = "button"; + button.onclick = openProjectSettings; + menu.append(button); + } + buttonElement = button; + return true; +} +function applyHealth(state) { + if (!buttonElement) + return; + const health = getHealth(state); + buttonElement.textContent = health.text; + buttonElement.title = health.title; + buttonElement.style.background = health.background; + buttonElement.style.borderColor = health.border; + buttonElement.style.color = "white"; +} +async function ensureAndUpdate() { + if (!pendingState) + return; + const hasButton = (await ensureNewStyleButton()) || ensureLegacyButton(); + if (hasButton && pendingState) { + applyHealth(pendingState); + } +} +export function updateMenuStatusBadge(state) { + pendingState = state; + if (!createPromise) { + createPromise = ensureAndUpdate().finally(() => { + createPromise = null; + }); + } + else { + void createPromise.then(ensureAndUpdate); } - const badgeText = state.projectId - ? state.projectExists === false - ? "Projet introuvable" - : `Projet: ${state.projectFolder || state.projectId}` - : "Pas de projet actif"; - const badgeColor = state.projectId - ? state.projectExists === false - ? "rgba(179, 58, 58, 0.9)" - : "rgba(47, 143, 78, 0.95)" - : "rgba(102, 102, 102, 0.8)"; - ensureMenuStatusBadge(actions, badgeText, badgeColor); - menuBadgePendingState = null; } //# sourceMappingURL=topbar_badge.js.map \ No newline at end of file diff --git a/web/js/mjr/topbar_badge.js.map b/web/js/mjr/topbar_badge.js.map index c207ef2..4e35337 100644 --- a/web/js/mjr/topbar_badge.js.map +++ b/web/js/mjr/topbar_badge.js.map @@ -1 +1 @@ -{"version":3,"file":"topbar_badge.js","sourceRoot":"","sources":["../../../src/mjr/topbar_badge.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"topbar_badge.js","sourceRoot":"","sources":["../../../src/mjr/topbar_badge.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/web/js/types/domain.d.ts b/web/js/types/domain.d.ts index 2908fc0..7a66195 100644 --- a/web/js/types/domain.d.ts +++ b/web/js/types/domain.d.ts @@ -118,7 +118,7 @@ export interface RuntimeState { _ui?: RuntimeUiCallbacks; _emptyGraphPromptToken?: number | null; } -export type SettingId = "mjr_project.download_max_gb" | "mjr_project.auto_fix_after_download" | "mjr_project.auto_open_panel_on_missing" | "mjr_project.auto_scan_missing_on_open" | "mjr_project.auto_remember_note_sources" | "mjr_project.status_black_no_project"; +export type SettingId = "mjr_project.download_max_gb" | "mjr_project.auto_fix_after_download" | "mjr_project.auto_open_panel_on_missing" | "mjr_project.auto_scan_missing_on_open" | "mjr_project.prompt_empty_graph" | "mjr_project.auto_remember_note_sources" | "mjr_project.status_black_no_project" | "mjr_project.legacy_ctrl_s_hook"; export type SettingDefinition = { id: SettingId; name: string; @@ -162,6 +162,7 @@ export interface ComfyNode { [key: string]: unknown; } export interface GraphProjectSignature { + schema_version?: number; project_id?: string; project_folder?: string; template?: string; diff --git a/web/js/ui/panel_constants.d.ts b/web/js/ui/panel_constants.d.ts new file mode 100644 index 0000000..eb7ebef --- /dev/null +++ b/web/js/ui/panel_constants.d.ts @@ -0,0 +1,6 @@ +export declare const TEMPLATE_TOKENS: string[]; +export declare const PROJECT_REFRESH_THROTTLE_MS = 5000; +export declare const PROJECT_REFRESH_ERROR_BACKOFF_MS = 10000; +export declare const SETTING_AUTO_FIX_AFTER_DOWNLOAD = "mjr_project.auto_fix_after_download"; +export declare const SETTING_AUTO_SCAN_MISSING_ON_OPEN = "mjr_project.auto_scan_missing_on_open"; +export declare const SETTING_AUTO_REMEMBER_NOTE_SOURCES = "mjr_project.auto_remember_note_sources"; diff --git a/web/js/ui/panel_constants.js b/web/js/ui/panel_constants.js new file mode 100644 index 0000000..728a77f --- /dev/null +++ b/web/js/ui/panel_constants.js @@ -0,0 +1,7 @@ +export const TEMPLATE_TOKENS = ["{BASE}", "{MEDIA}", "{DATE}", "{MODEL}", "{NAME}", "{KIND}"]; +export const PROJECT_REFRESH_THROTTLE_MS = 5000; +export const PROJECT_REFRESH_ERROR_BACKOFF_MS = 10000; +export const SETTING_AUTO_FIX_AFTER_DOWNLOAD = "mjr_project.auto_fix_after_download"; +export const SETTING_AUTO_SCAN_MISSING_ON_OPEN = "mjr_project.auto_scan_missing_on_open"; +export const SETTING_AUTO_REMEMBER_NOTE_SOURCES = "mjr_project.auto_remember_note_sources"; +//# sourceMappingURL=panel_constants.js.map \ No newline at end of file diff --git a/web/js/ui/panel_constants.js.map b/web/js/ui/panel_constants.js.map new file mode 100644 index 0000000..5a54077 --- /dev/null +++ b/web/js/ui/panel_constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panel_constants.js","sourceRoot":"","sources":["../../../src/ui/panel_constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAEtD,MAAM,CAAC,MAAM,+BAA+B,GAAG,qCAAqC,CAAC;AACrF,MAAM,CAAC,MAAM,iCAAiC,GAAG,uCAAuC,CAAC;AACzF,MAAM,CAAC,MAAM,kCAAkC,GAAG,wCAAwC,CAAC"} \ No newline at end of file diff --git a/web/js/ui/panel_helpers.d.ts b/web/js/ui/panel_helpers.d.ts new file mode 100644 index 0000000..5b47c1d --- /dev/null +++ b/web/js/ui/panel_helpers.d.ts @@ -0,0 +1,14 @@ +export type DetailsWithSummary = HTMLDetailsElement & { + _summary?: HTMLElement; +}; +export interface PanelHelpers { + section: (label: string) => HTMLDivElement; + divider: (thick?: boolean) => HTMLDivElement; + detailsSection: (title: string) => DetailsWithSummary; + makeLabel: (labelText: string) => HTMLLabelElement; + styleField: (inputEl: HTMLElement) => void; + row: (labelText: string, inputEl: HTMLElement) => HTMLDivElement; + groupRow: (labelText: string, contentEl: HTMLElement) => HTMLDivElement; + btn: (text: string) => HTMLButtonElement; +} +export declare function createPanelHelpers(gap: string): PanelHelpers; diff --git a/web/js/ui/panel_helpers.js b/web/js/ui/panel_helpers.js new file mode 100644 index 0000000..cc10222 --- /dev/null +++ b/web/js/ui/panel_helpers.js @@ -0,0 +1,104 @@ +export function createPanelHelpers(gap) { + const section = (label) => { + const h = document.createElement("div"); + h.textContent = label; + h.style.fontWeight = "600"; + h.style.marginTop = gap; + h.style.marginBottom = gap; + h.style.paddingLeft = "2px"; + h.style.textTransform = "uppercase"; + h.style.letterSpacing = "0.6px"; + h.style.color = "#8fb9ff"; + return h; + }; + const divider = (thick = false) => { + const d = document.createElement("div"); + d.style.height = thick ? "3px" : "1px"; + d.style.background = "rgba(255,255,255,0.08)"; + d.style.margin = "0"; + return d; + }; + const detailsSection = (title) => { + const details = document.createElement("details"); + details.style.marginTop = "0"; + details.style.display = "flex"; + details.style.flexDirection = "column"; + details.style.gap = gap; + const summary = document.createElement("summary"); + summary.textContent = title; + summary.style.cursor = "pointer"; + summary.style.opacity = "0.9"; + summary.style.textTransform = "uppercase"; + summary.style.letterSpacing = "0.6px"; + summary.style.color = "#8fb9ff"; + summary.style.fontWeight = "600"; + summary.style.paddingLeft = "2px"; + details.appendChild(summary); + details._summary = summary; + return details; + }; + const makeLabel = (labelText) => { + const label = document.createElement("label"); + label.textContent = labelText; + label.style.opacity = "0.85"; + label.style.marginLeft = "2px"; + label.style.fontSize = "11px"; + label.style.lineHeight = "1.2"; + return label; + }; + const styleField = (inputEl) => { + inputEl.style.width = "100%"; + inputEl.style.boxSizing = "border-box"; + inputEl.style.padding = "6px 8px"; + inputEl.style.borderRadius = "8px"; + inputEl.style.border = "1px solid rgba(255,255,255,0.12)"; + inputEl.style.background = "rgba(0,0,0,0.25)"; + inputEl.style.color = "#eee"; + inputEl.style.outline = "none"; + }; + const row = (labelText, inputEl) => { + const wrap = document.createElement("div"); + wrap.style.display = "flex"; + wrap.style.flexDirection = "column"; + wrap.style.gap = gap; + wrap.appendChild(makeLabel(labelText)); + styleField(inputEl); + wrap.appendChild(inputEl); + return wrap; + }; + const groupRow = (labelText, contentEl) => { + const wrap = document.createElement("div"); + wrap.style.display = "flex"; + wrap.style.flexDirection = "column"; + wrap.style.gap = gap; + wrap.appendChild(makeLabel(labelText)); + wrap.appendChild(contentEl); + return wrap; + }; + const btn = (text) => { + const b = document.createElement("button"); + b.textContent = text; + b.className = "mjr-ps-btn"; + b.style.padding = "7px 8px"; + b.style.borderRadius = "8px"; + b.style.border = "1px solid rgba(46, 136, 255, 0.65)"; + b.style.background = "rgba(46, 136, 255, 0.25)"; + b.style.color = "#eee"; + b.style.cursor = "pointer"; + b.style.margin = "0"; + b.style.lineHeight = "1.2"; + b.style.whiteSpace = "nowrap"; + return b; + }; + return { + section, + divider, + detailsSection, + makeLabel, + styleField, + row, + groupRow, + btn, + }; +} +//# sourceMappingURL=panel_helpers.js.map \ No newline at end of file diff --git a/web/js/ui/panel_helpers.js.map b/web/js/ui/panel_helpers.js.map new file mode 100644 index 0000000..1a8efd7 --- /dev/null +++ b/web/js/ui/panel_helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panel_helpers.js","sourceRoot":"","sources":["../../../src/ui/panel_helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/web/js/ui/project_dropdowns.d.ts b/web/js/ui/project_dropdowns.d.ts new file mode 100644 index 0000000..680d1bc --- /dev/null +++ b/web/js/ui/project_dropdowns.d.ts @@ -0,0 +1,5 @@ +import type { ProjectListEntry } from "../types/domain.js"; +export interface ProjectDropdownTargets { + pendingSelect: HTMLSelectElement; +} +export declare function renderProjectDropdowns(targets: ProjectDropdownTargets, projects: ProjectListEntry[]): void; diff --git a/web/js/ui/project_dropdowns.js b/web/js/ui/project_dropdowns.js new file mode 100644 index 0000000..72124aa --- /dev/null +++ b/web/js/ui/project_dropdowns.js @@ -0,0 +1,25 @@ +export function renderProjectDropdowns(targets, projects) { + const { pendingSelect } = targets; + const currentPending = pendingSelect.value; + pendingSelect.innerHTML = ""; + const emptyOpt = document.createElement("option"); + emptyOpt.value = ""; + emptyOpt.textContent = "-"; + pendingSelect.appendChild(emptyOpt); + for (const project of projects) { + const projectId = project.project_id || ""; + if (!projectId) + continue; + const opt = document.createElement("option"); + opt.value = projectId; + opt.dataset.folder = project.folder || ""; + opt.dataset.exists = project.exists === false ? "false" : "true"; + const missingTag = project.exists === false ? " (missing)" : ""; + const archivedTag = project.archived ? " [archived]" : ""; + opt.textContent = `${project.folder || project.project_id} (${project.project_id})${missingTag}${archivedTag}`; + pendingSelect.appendChild(opt); + } + if (currentPending) + pendingSelect.value = currentPending; +} +//# sourceMappingURL=project_dropdowns.js.map \ No newline at end of file diff --git a/web/js/ui/project_dropdowns.js.map b/web/js/ui/project_dropdowns.js.map new file mode 100644 index 0000000..e3aad63 --- /dev/null +++ b/web/js/ui/project_dropdowns.js.map @@ -0,0 +1 @@ +{"version":3,"file":"project_dropdowns.js","sourceRoot":"","sources":["../../../src/ui/project_dropdowns.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,sBAAsB,CACpC,OAA+B,EAC/B,QAA4B;IAE5B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC;IAE3C,aAAa,CAAC,SAAS,GAAG,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;IAC3B,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;QACtB,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,WAAW,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC;QAC/G,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,cAAc;QAAE,aAAa,CAAC,KAAK,GAAG,cAAc,CAAC;AAC3D,CAAC"} \ No newline at end of file diff --git a/web/js/ui/project_status.d.ts b/web/js/ui/project_status.d.ts new file mode 100644 index 0000000..f9455ac --- /dev/null +++ b/web/js/ui/project_status.d.ts @@ -0,0 +1,8 @@ +import type { RuntimeState } from "../types/domain.js"; +export interface ProjectStatus { + color: string; + text: string; + level: string; +} +export declare function colorWithAlpha(hex: unknown, alpha: unknown): string; +export declare function makeStatus(state: RuntimeState): ProjectStatus; diff --git a/web/js/ui/project_status.js b/web/js/ui/project_status.js new file mode 100644 index 0000000..1beed1e --- /dev/null +++ b/web/js/ui/project_status.js @@ -0,0 +1,70 @@ +import { getSettingBool } from "../mjr/settings.js"; +const SETTING_NO_PROJECT_STATUS_BLACK = "mjr_project.status_black_no_project"; +function parseHexColor(hex) { + const m = String(hex || "").trim().match(/^#([0-9a-fA-F]{6})$/); + if (!m) + return null; + const v = m[1]; + return [ + parseInt(v.slice(0, 2), 16), + parseInt(v.slice(2, 4), 16), + parseInt(v.slice(4, 6), 16), + ]; +} +export function colorWithAlpha(hex, alpha) { + const rgb = parseHexColor(hex); + if (!rgb) + return String(hex); + const a = Math.max(0, Math.min(1, Number(alpha))); + return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${a})`; +} +export function makeStatus(state) { + const det = state.detected; + const sameProject = det && + det.mode !== "none" && + ((det.project_id && det.project_id === state.projectId) || + (det.project_folder && det.project_folder === state.projectFolder)); + const mismatch = det && + det.mode !== "none" && + !sameProject && + (det.project_id || det.project_folder); + if (state.lastError) { + return { color: "#b33a3a", text: `Error: ${state.lastError}`, level: "red" }; + } + if (state.graphIsEmpty) { + return { color: "#b33a3a", text: "Empty graph, set or create a project", level: "red" }; + } + if (!state.projectId) { + if (getSettingBool(SETTING_NO_PROJECT_STATUS_BLACK, false)) { + return { color: "#000000", text: "No project (test)", level: "black" }; + } + return { color: "#666666", text: "No active project", level: "gray" }; + } + if (state.projectExists === false) { + return { + color: "#b33a3a", + text: `Missing project folder: ${state.projectFolder || state.projectId}`, + level: "red", + }; + } + if (state.workflowChecked && !state.workflowHasSignature) { + return { + color: "#c77c2a", + text: "Active project, workflow unassigned", + level: "orange", + }; + } + if (mismatch) { + return { + color: "#c77c2a", + text: `Project mismatch: ${det.project_folder || det.project_id}`, + level: "orange", + }; + } + return { + color: "#2f8f4e", + text: `Active: ${state.projectFolder} (${state.projectId})`, + level: "green", + }; +} +//# sourceMappingURL=project_status.js.map \ No newline at end of file diff --git a/web/js/ui/project_status.js.map b/web/js/ui/project_status.js.map new file mode 100644 index 0000000..c394578 --- /dev/null +++ b/web/js/ui/project_status.js.map @@ -0,0 +1 @@ +{"version":3,"file":"project_status.js","sourceRoot":"","sources":["../../../src/ui/project_status.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/web/js/ui_components.js b/web/js/ui_components.js index 0cdbbd9..38f8c8c 100644 --- a/web/js/ui_components.js +++ b/web/js/ui_components.js @@ -3,7 +3,7 @@ import { joinRel, makeKindToken, mediaDir, titlePathJS, token3Tag, yymmddJS } fr import { ensureStyles, toast } from "./mjr/toast.js"; import { buildFingerprintCache, downloadModels, fetchJSON, getDownloadStatus, getFingerprintCacheStatus, getModels, listExistingNames, previewTemplate, resolveModelRecipes, saveModelRecipes, scanModelCandidates, searchRegistry, } from "./mjr/api.js"; import { psConfirm, psPrompt } from "./mjr/dialog.js"; -import { isSaveLikeNode, patchSaveNodes, stampGraphProjectSignature, } from "./mjr/patch.js"; +import { patchSaveNodes, previewPatchSaveNodes, stampGraphProjectSignature, } from "./mjr/patch.js"; import { applyFixesToGraph, scanMissingModelsWithStats, } from "./mjr/model_fixer.js"; import { collectNoteRecipes, getKindOptions, normalizeKey, typeHintToKind } from "./mjr/model_downloader.js"; import { showModelFixerDialog } from "./mjr/ui_model_fixer_dialog.js"; @@ -14,100 +14,11 @@ import { getSerializedWorkflow } from "./mjr/graph.js"; import { extractNoteTexts } from "./mjr/workflow_note_recipes.js"; import { debug } from "./mjr/log.js"; import { updateMenuStatusBadge } from "./mjr/topbar_badge.js"; -const TEMPLATE_TOKENS = ["{BASE}", "{MEDIA}", "{DATE}", "{MODEL}", "{NAME}", "{KIND}"]; -const PROJECT_REFRESH_THROTTLE_MS = 5000; -const PROJECT_REFRESH_ERROR_BACKOFF_MS = 10000; -const SETTING_AUTO_FIX_AFTER_DOWNLOAD = "mjr_project.auto_fix_after_download"; -const SETTING_AUTO_SCAN_MISSING_ON_OPEN = "mjr_project.auto_scan_missing_on_open"; -const SETTING_AUTO_REMEMBER_NOTE_SOURCES = "mjr_project.auto_remember_note_sources"; -const SETTING_NO_PROJECT_STATUS_BLACK = "mjr_project.status_black_no_project"; -const toBool = (value, fallback) => { - if (value == null) - return fallback; - if (typeof value === "boolean") - return value; - if (typeof value === "number") - return value !== 0; - if (typeof value === "string") { - const v = value.trim().toLowerCase(); - if (["true", "1", "yes", "on"].includes(v)) - return true; - if (["false", "0", "no", "off"].includes(v)) - return false; - } - return fallback; -}; -const getSettingBool = (id, fallback) => { - const raw = app?.ui?.settings?.settingsValues?.[id]; - return toBool(raw, fallback); -}; -function parseHexColor(hex) { - const m = String(hex || "").trim().match(/^#([0-9a-fA-F]{6})$/); - if (!m) - return null; - const v = m[1]; - return [ - parseInt(v.slice(0, 2), 16), - parseInt(v.slice(2, 4), 16), - parseInt(v.slice(4, 6), 16), - ]; -} -function colorWithAlpha(hex, alpha) { - const rgb = parseHexColor(hex); - if (!rgb) - return String(hex); - const a = Math.max(0, Math.min(1, Number(alpha))); - return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${a})`; -} -function makeStatus(state) { - const det = state.detected; - const sameProject = det && - det.mode !== "none" && - ((det.project_id && det.project_id === state.projectId) || - (det.project_folder && det.project_folder === state.projectFolder)); - const mismatch = det && - det.mode !== "none" && - !sameProject && - (det.project_id || det.project_folder); - if (state.lastError) { - return { color: "#b33a3a", text: `Error: ${state.lastError}`, level: "red" }; - } - if (state.graphIsEmpty) { - return { color: "#b33a3a", text: "Empty graph, set or create a project", level: "red" }; - } - if (!state.projectId) { - if (getSettingBool(SETTING_NO_PROJECT_STATUS_BLACK, false)) { - return { color: "#000000", text: "No project (test)", level: "black" }; - } - return { color: "#666666", text: "No active project", level: "gray" }; - } - if (state.projectExists === false) { - return { - color: "#b33a3a", - text: `Missing project folder: ${state.projectFolder || state.projectId}`, - level: "red", - }; - } - if (state.workflowChecked && !state.workflowHasSignature) { - return { - color: "#c77c2a", - text: "Active project, workflow unassigned", - level: "orange", - }; - } - if (mismatch) { - return { - color: "#c77c2a", - text: `Project mismatch: ${det.project_folder || det.project_id}`, - level: "orange", - }; - } - return { - color: "#2f8f4e", - text: `Active: ${state.projectFolder} (${state.projectId})`, - level: "green", - }; -} +import { getSettingBool } from "./mjr/settings.js"; +import { createPanelHelpers } from "./ui/panel_helpers.js"; +import { colorWithAlpha, makeStatus } from "./ui/project_status.js"; +import { renderProjectDropdowns } from "./ui/project_dropdowns.js"; +import { PROJECT_REFRESH_ERROR_BACKOFF_MS, PROJECT_REFRESH_THROTTLE_MS, SETTING_AUTO_FIX_AFTER_DOWNLOAD, SETTING_AUTO_REMEMBER_NOTE_SOURCES, SETTING_AUTO_SCAN_MISSING_ON_OPEN, TEMPLATE_TOKENS, } from "./ui/panel_constants.js"; export function buildPanel(el, state, actions) { const { createAndActivateProject, setActiveProjectById, saveWorkflowToProject } = actions || {}; el.innerHTML = ""; @@ -121,97 +32,7 @@ export function buildPanel(el, state, actions) { container.style.color = "#ddd"; container.style.fontFamily = "inherit"; container.style.padding = "8px 14px 16px"; - const section = (label) => { - const h = document.createElement("div"); - h.textContent = label; - h.style.fontWeight = "600"; - h.style.marginTop = UI_GAP; - h.style.marginBottom = UI_GAP; - h.style.paddingLeft = "2px"; - h.style.textTransform = "uppercase"; - h.style.letterSpacing = "0.6px"; - h.style.color = "#8fb9ff"; - return h; - }; - const divider = (thick = false) => { - const d = document.createElement("div"); - d.style.height = thick ? "3px" : "1px"; - d.style.background = "rgba(255,255,255,0.08)"; - d.style.margin = "0"; - return d; - }; - const detailsSection = (title) => { - const details = document.createElement("details"); - details.style.marginTop = "0"; - details.style.display = "flex"; - details.style.flexDirection = "column"; - details.style.gap = UI_GAP; - const summary = document.createElement("summary"); - summary.textContent = title; - summary.style.cursor = "pointer"; - summary.style.opacity = "0.9"; - summary.style.textTransform = "uppercase"; - summary.style.letterSpacing = "0.6px"; - summary.style.color = "#8fb9ff"; - summary.style.fontWeight = "600"; - summary.style.paddingLeft = "2px"; - details.appendChild(summary); - details._summary = summary; - return details; - }; - const makeLabel = (labelText) => { - const label = document.createElement("label"); - label.textContent = labelText; - label.style.opacity = "0.85"; - label.style.marginLeft = "2px"; - label.style.fontSize = "11px"; - label.style.lineHeight = "1.2"; - return label; - }; - const styleField = (inputEl) => { - inputEl.style.width = "100%"; - inputEl.style.boxSizing = "border-box"; - inputEl.style.padding = "6px 8px"; - inputEl.style.borderRadius = "8px"; - inputEl.style.border = "1px solid rgba(255,255,255,0.12)"; - inputEl.style.background = "rgba(0,0,0,0.25)"; - inputEl.style.color = "#eee"; - inputEl.style.outline = "none"; - }; - const row = (labelText, inputEl) => { - const wrap = document.createElement("div"); - wrap.style.display = "flex"; - wrap.style.flexDirection = "column"; - wrap.style.gap = UI_GAP; - wrap.appendChild(makeLabel(labelText)); - styleField(inputEl); - wrap.appendChild(inputEl); - return wrap; - }; - const groupRow = (labelText, contentEl) => { - const wrap = document.createElement("div"); - wrap.style.display = "flex"; - wrap.style.flexDirection = "column"; - wrap.style.gap = UI_GAP; - wrap.appendChild(makeLabel(labelText)); - wrap.appendChild(contentEl); - return wrap; - }; - const btn = (text) => { - const b = document.createElement("button"); - b.textContent = text; - b.className = "mjr-ps-btn"; - b.style.padding = "7px 8px"; - b.style.borderRadius = "8px"; - b.style.border = "1px solid rgba(46, 136, 255, 0.65)"; - b.style.background = "rgba(46, 136, 255, 0.25)"; - b.style.color = "#eee"; - b.style.cursor = "pointer"; - b.style.margin = "0"; - b.style.lineHeight = "1.2"; - b.style.whiteSpace = "nowrap"; - return b; - }; + const { section, divider, detailsSection, makeLabel, styleField, row, groupRow, btn, } = createPanelHelpers(UI_GAP); // Status bar const statusBar = document.createElement("div"); statusBar.style.display = "flex"; @@ -261,6 +82,69 @@ export function buildPanel(el, state, actions) { saveState(state); updateWorkflowBlock(); }); + const healthSection = detailsSection("Project Health"); + healthSection.open = true; + const healthList = document.createElement("div"); + healthList.style.display = "grid"; + healthList.style.gridTemplateColumns = "auto minmax(0, 1fr)"; + healthList.style.columnGap = "8px"; + healthList.style.rowGap = "6px"; + healthList.style.alignItems = "start"; + healthList.style.padding = "8px 0 0"; + healthSection.appendChild(healthList); + const healthRows = {}; + const addHealthRow = (key, labelText) => { + const label = document.createElement("div"); + label.textContent = labelText; + label.style.opacity = "0.7"; + label.style.whiteSpace = "nowrap"; + const value = document.createElement("div"); + value.style.minWidth = "0"; + value.style.overflowWrap = "anywhere"; + healthRows[key] = value; + healthList.appendChild(label); + healthList.appendChild(value); + }; + addHealthRow("folder", "Folder"); + addHealthRow("workflow", "Workflow"); + addHealthRow("target", "Output"); + addHealthRow("patch", "Patch"); + addHealthRow("models", "Models"); + addHealthRow("save", "Last save"); + const setHealth = (key, text, color = "#ddd") => { + const rowEl = healthRows[key]; + if (!rowEl) + return; + rowEl.textContent = text; + rowEl.style.color = color; + }; + const updateHealth = () => { + const okColor = "#9dd7a5"; + const warnColor = "#f2d98a"; + const errorColor = "#ff9a9a"; + const mutedColor = "#aaa"; + setHealth("folder", state.projectId + ? state.projectExists === false + ? `Missing: ${state.projectFolder || state.projectId}` + : state.projectFolder || state.projectId + : "No active project", !state.projectId ? mutedColor : state.projectExists === false ? errorColor : okColor); + setHealth("workflow", state.workflowChecked + ? state.workflowHasSignature + ? "Assigned" + : "Unassigned" + : "Not checked yet", state.workflowChecked && !state.workflowHasSignature ? warnColor : okColor); + setHealth("target", state.lastRelDir || state.lastPrefix ? `${state.lastRelDir || "-"} | ${state.lastPrefix || "-"}` : "No output target", state.lastRelDir || state.lastPrefix ? okColor : warnColor); + const patchPreview = state.lastRelDir || state.lastPrefix + ? previewPatchSaveNodes(app, state.lastRelDir, state.lastPrefix, state.media) + : []; + const patchNodes = new Set(patchPreview.map((item) => item.node)).size; + setHealth("patch", patchNodes > 0 ? `${patchNodes} save node${patchNodes === 1 ? "" : "s"} patchable` : "No patchable save nodes", patchNodes > 0 ? warnColor : mutedColor); + const missingText = fixerState.scanned + ? `${fixerState.missing} missing / ${fixerState.total} checked` + : "Not scanned"; + setHealth("models", missingText, fixerState.scanned && fixerState.missing > 0 ? warnColor : mutedColor); + setHealth("save", state.workflowName || state.workflowLastBase || "No workflow save yet", state.workflowName || state.workflowLastBase ? okColor : mutedColor); + }; const updateResolve = () => { const det = state.detected; let show = true; @@ -736,6 +620,11 @@ export function buildPanel(el, state, actions) { downloadStatus.style.marginLeft = "2px"; const downloadStatusText = document.createElement("div"); downloadStatus.appendChild(downloadStatusText); + const downloadPolicyText = document.createElement("div"); + downloadPolicyText.textContent = + "Download policy: direct http/https URLs, extension allowlist, size cap, host policy, and private-IP guard are enforced server-side."; + downloadPolicyText.style.opacity = "0.75"; + downloadStatus.appendChild(downloadPolicyText); const downloadProgressWrap = document.createElement("div"); downloadProgressWrap.style.height = "6px"; downloadProgressWrap.style.width = "100%"; @@ -766,6 +655,7 @@ export function buildPanel(el, state, actions) { workflowUtilsContent.appendChild(fingerprintDetails); workflowUtilsWrap.appendChild(workflowUtilsContent); container.appendChild(statusBar); + container.appendChild(healthSection); container.appendChild(workflowWrap); container.appendChild(resolveWrap); container.appendChild(divider()); @@ -954,6 +844,7 @@ export function buildPanel(el, state, actions) { } workflowUtilsWrap.style.border = `1px solid ${colorWithAlpha(color, 0.4)}`; workflowUtilsWrap.style.background = colorWithAlpha(color, 0.12); + updateHealth(); }; const updateDownloadStatus = () => { const rawState = downloadState.state || "idle"; @@ -1164,6 +1055,7 @@ export function buildPanel(el, state, actions) { modelSelect.style.opacity = modelSelect.disabled ? "0.6" : "1"; if (!template) { previewLabel.textContent = "Preview: -"; + updateHealth(); return; } previewLabel.textContent = "Preview: ..."; @@ -1173,12 +1065,14 @@ export function buildPanel(el, state, actions) { return; const preview = resp?.preview || ""; previewLabel.textContent = preview ? `Preview: ${preview}` : "Preview: -"; + updateHealth(); } catch (err) { if (requestToken !== previewToken) return; const previewError = String(err instanceof Error ? err.message : err || "Invalid template"); previewLabel.textContent = `Preview: ${previewError}`; + updateHealth(); } }; const updateState = () => { @@ -1266,21 +1160,7 @@ export function buildPanel(el, state, actions) { let lastProjectsRefreshAt = 0; let projectRefreshErrorCount = 0; const updateProjectDropdowns = (filteredList) => { - pendingSelect.innerHTML = ""; - const pendingEmpty = document.createElement("option"); - pendingEmpty.value = ""; - pendingEmpty.textContent = "-"; - pendingSelect.appendChild(pendingEmpty); - for (const p of filteredList) { - const opt = document.createElement("option"); - opt.value = p.project_id; - opt.dataset.folder = p.folder || ""; - opt.dataset.exists = p.exists === false ? "false" : "true"; - const missingTag = p.exists === false ? " (missing)" : ""; - const archivedTag = p.archived ? " [archived]" : ""; - opt.textContent = `${p.folder || p.project_id} (${p.project_id})${missingTag}${archivedTag}`; - pendingSelect.appendChild(opt); - } + renderProjectDropdowns({ pendingSelect }, filteredList); }; refreshProjectsList = async (force = false) => { const now = Date.now(); @@ -2057,19 +1937,21 @@ export function buildPanel(el, state, actions) { toast("warn", "No target", "Create an output first."); return; } - // Count save nodes first - const saveNodes = (app.graph?._nodes || []).filter(n => isSaveLikeNode(n)); - const nodeCount = saveNodes.length; + const preview = previewPatchSaveNodes(app, state.lastRelDir, state.lastPrefix, state.media); + const nodeCount = new Set(preview.map((item) => item.node)).size; if (nodeCount === 0) { toast("warn", "No nodes to patch", "No save-like nodes found in workflow."); return; } + const previewLines = preview + .slice(0, 8) + .map((item) => `${item.nodeLabel}.${item.widget}: ${item.oldValue || "-"} -> ${item.newValue || "-"}`); + const overflow = preview.length > previewLines.length ? `\n...and ${preview.length - previewLines.length} more change(s)` : ""; // Ask for confirmation const confirmed = await psConfirm({ title: "Patch save paths?", message: `Update ${nodeCount} save node${nodeCount !== 1 ? "s" : ""} to use the project path?\n\n` + - `Path: ${state.lastRelDir}\n` + - `Prefix: ${state.lastPrefix}\n\n` + + `${previewLines.join("\n")}${overflow}\n\n` + `This can be undone with Ctrl+Z.`, }); if (!confirmed) { diff --git a/web/js/ui_components.js.map b/web/js/ui_components.js.map index 9408c72..3d4eefe 100644 --- a/web/js/ui_components.js.map +++ b/web/js/ui_components.js.map @@ -1 +1 @@ -{"version":3,"file":"ui_components.js","sourceRoot":"","sources":["../../src/ui_components.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ui_components.js","sourceRoot":"","sources":["../../src/ui_components.ts"],"names":[],"mappings":"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"} \ No newline at end of file