davinci-resolve-mcp 2.23.0 → 2.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +1 -1
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/analysis_dashboard.py +28 -14
- package/src/granular/common.py +1 -1
- package/src/server.py +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
Release history for the DaVinci Resolve MCP Server. The latest release is summarized in the root README; older entries live here to keep the README focused.
|
|
4
4
|
|
|
5
|
+
## What's New in v2.23.1
|
|
6
|
+
|
|
7
|
+
**Control panel navigation fixes** — The local browser control panel now keeps
|
|
8
|
+
top-level dropdown buttons from navigating by themselves. Analysis,
|
|
9
|
+
Diagnostics, Docs, and Preferences open their menus first; selecting a menu item
|
|
10
|
+
is what changes the active view.
|
|
11
|
+
|
|
12
|
+
**Project dropdown cleanup** — The project context dropdown is back to showing
|
|
13
|
+
only the open/current project context plus a bottom `View All Projects` option.
|
|
14
|
+
The full database browser stays in the Projects view, and the standalone
|
|
15
|
+
Projects navbar button has been removed.
|
|
16
|
+
|
|
17
|
+
**Validation**: static import checks, API parity audit, focused dashboard unit
|
|
18
|
+
tests, npm CLI smoke tests, package dry-run, and `git diff --check` passed. A
|
|
19
|
+
local dashboard smoke check verified the served HTML on `127.0.0.1:8765`.
|
|
20
|
+
No Resolve scripting behavior changed; live Resolve mutation validation was not
|
|
21
|
+
required.
|
|
22
|
+
|
|
5
23
|
## What's New in v2.23.0
|
|
6
24
|
|
|
7
25
|
**npm installer** — `npx davinci-resolve-mcp setup` is now the primary quick
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DaVinci Resolve MCP Server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
4
4
|
[](docs/reference/api-coverage.md)
|
|
5
5
|
[-blue.svg)](#server-modes)
|
|
6
6
|
[](docs/reference/api-coverage.md#test-results)
|
package/install.py
CHANGED
package/package.json
CHANGED
|
@@ -1533,7 +1533,6 @@ HTML = r"""<!doctype html>
|
|
|
1533
1533
|
<button class="nav-dropdown-item" data-panel-target="diagnostics" data-subpage-target="tools" role="menuitem"><span class="nav-dropdown-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l2.1-2.1a6 6 0 0 1-7.6 7.6l-4 4a2.1 2.1 0 0 1-3-3l4-4a6 6 0 0 1 7.6-7.6z"></path></svg></span>Tools</button>
|
|
1534
1534
|
</div>
|
|
1535
1535
|
</div>
|
|
1536
|
-
<button class="control-tab" data-panel-target="projects">Projects</button>
|
|
1537
1536
|
<div class="control-nav-item">
|
|
1538
1537
|
<button class="control-tab has-menu" data-panel-target="docs">Docs <span class="tab-chevron" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></span></button>
|
|
1539
1538
|
<div class="nav-dropdown" role="menu" aria-label="Documentation pages">
|
|
@@ -1630,7 +1629,7 @@ HTML = r"""<!doctype html>
|
|
|
1630
1629
|
<div class="metric-card">
|
|
1631
1630
|
<span>Open Projects</span>
|
|
1632
1631
|
<b id="projectsOpenCount">0</b>
|
|
1633
|
-
<small>Shown in the
|
|
1632
|
+
<small>Shown in the project dropdown</small>
|
|
1634
1633
|
</div>
|
|
1635
1634
|
<div class="metric-card">
|
|
1636
1635
|
<span>Database Projects</span>
|
|
@@ -2090,6 +2089,7 @@ HTML = r"""<!doctype html>
|
|
|
2090
2089
|
},
|
|
2091
2090
|
};
|
|
2092
2091
|
const $ = (id) => document.getElementById(id);
|
|
2092
|
+
const VIEW_ALL_PROJECTS_VALUE = '__view_all_projects__';
|
|
2093
2093
|
const PANEL_LABELS = {
|
|
2094
2094
|
overview: 'Overview',
|
|
2095
2095
|
analysis: 'Analysis',
|
|
@@ -2701,18 +2701,21 @@ HTML = r"""<!doctype html>
|
|
|
2701
2701
|
const contexts = (state.projects?.contexts || [])
|
|
2702
2702
|
.filter(context => context.active || context.resolve_current);
|
|
2703
2703
|
const activeRoot = state.activeContext?.project_root;
|
|
2704
|
-
|
|
2705
|
-
select.innerHTML = '<option value="">No open Resolve project</option>';
|
|
2706
|
-
select.disabled = true;
|
|
2707
|
-
return;
|
|
2708
|
-
}
|
|
2709
|
-
select.innerHTML = contexts.map(context => {
|
|
2704
|
+
const options = contexts.map(context => {
|
|
2710
2705
|
const label = context.project_name || 'Project';
|
|
2711
2706
|
const selected = context.project_root === activeRoot ? ' selected' : '';
|
|
2712
|
-
const disabled = context.
|
|
2707
|
+
const disabled = context.can_load_resolve === false ? ' disabled' : '';
|
|
2713
2708
|
return `<option value="${escapeAttribute(context.project_root)}"${selected}${disabled}>${escapeHtml(label)}</option>`;
|
|
2714
|
-
})
|
|
2715
|
-
|
|
2709
|
+
});
|
|
2710
|
+
options.push(`<option value="${VIEW_ALL_PROJECTS_VALUE}">View All Projects</option>`);
|
|
2711
|
+
if (!contexts.length) {
|
|
2712
|
+
options.unshift('<option value="" selected disabled>No open Resolve project</option>');
|
|
2713
|
+
select.innerHTML = options.join('');
|
|
2714
|
+
select.disabled = false;
|
|
2715
|
+
return;
|
|
2716
|
+
}
|
|
2717
|
+
select.innerHTML = options.join('');
|
|
2718
|
+
select.disabled = false;
|
|
2716
2719
|
}
|
|
2717
2720
|
|
|
2718
2721
|
function renderProjects() {
|
|
@@ -2788,7 +2791,9 @@ HTML = r"""<!doctype html>
|
|
|
2788
2791
|
function restoreProjectContextSelect() {
|
|
2789
2792
|
const select = $('projectContextSelect');
|
|
2790
2793
|
const currentRoot = state.activeContext?.project_root;
|
|
2791
|
-
if (select
|
|
2794
|
+
if (!select) return;
|
|
2795
|
+
select.value = currentRoot || '';
|
|
2796
|
+
if (select.value !== (currentRoot || '')) select.selectedIndex = 0;
|
|
2792
2797
|
}
|
|
2793
2798
|
|
|
2794
2799
|
function projectSwitchDialog(currentName, nextName) {
|
|
@@ -3767,7 +3772,6 @@ HTML = r"""<!doctype html>
|
|
|
3767
3772
|
control.addEventListener('click', (event) => {
|
|
3768
3773
|
if (control.classList.contains('has-menu')) {
|
|
3769
3774
|
event.stopPropagation();
|
|
3770
|
-
setPanel(control.dataset.panelTarget, { subpage: control.dataset.subpageTarget });
|
|
3771
3775
|
toggleNavDropdown(control);
|
|
3772
3776
|
return;
|
|
3773
3777
|
}
|
|
@@ -3784,7 +3788,17 @@ HTML = r"""<!doctype html>
|
|
|
3784
3788
|
$('overviewRefresh').onclick = () => refreshAll().catch(alertError);
|
|
3785
3789
|
$('projectsRefresh').onclick = () => refreshAllProjects().catch(alertError);
|
|
3786
3790
|
$('projectFilterText').addEventListener('input', renderProjects);
|
|
3787
|
-
$('projectContextSelect').addEventListener('change', event =>
|
|
3791
|
+
$('projectContextSelect').addEventListener('change', event => {
|
|
3792
|
+
if (event.target.value === VIEW_ALL_PROJECTS_VALUE) {
|
|
3793
|
+
setPanel('projects');
|
|
3794
|
+
restoreProjectContextSelect();
|
|
3795
|
+
return;
|
|
3796
|
+
}
|
|
3797
|
+
switchProjectContext(event.target.value).catch(error => {
|
|
3798
|
+
restoreProjectContextSelect();
|
|
3799
|
+
alertError(error);
|
|
3800
|
+
});
|
|
3801
|
+
});
|
|
3788
3802
|
$('sampleFrameMode').addEventListener('change', () => {
|
|
3789
3803
|
$('customFramesLabel').style.display = $('sampleFrameMode').value === 'custom' ? 'grid' : 'none';
|
|
3790
3804
|
});
|
package/src/granular/common.py
CHANGED
|
@@ -80,7 +80,7 @@ if not logging.getLogger().handlers:
|
|
|
80
80
|
handlers=[logging.StreamHandler()],
|
|
81
81
|
)
|
|
82
82
|
|
|
83
|
-
VERSION = "2.23.
|
|
83
|
+
VERSION = "2.23.1"
|
|
84
84
|
logger = logging.getLogger("davinci-resolve-mcp")
|
|
85
85
|
logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
|
|
86
86
|
logger.info(f"Detected platform: {get_platform()}")
|