fix(app-tauri,frontend): le panneau MCP se détache en fenêtre OS — #299 (cause: enum Rust ViewPanel sans variante Mcp, open_view_window("mcp") rejetait INVALID et detachPanel ne touchait le placement qu'en cas de succès donc aucun effet visible ni message; fix: variante ViewPanel::Mcp avec parse/as_str/title "MCP" + contrat stable label view-mcp / url index.html?panel=mcp / decodage view_panel_from_window_label, identite persistee des fenetres view-mcp acceptee a la restauration #50, et ProjectsView surface desormais un echec de detachement via alerte role=alert avec bouton Reessayer au lieu de l'echec silencieux — placement conserve tant que la fenetre OS ne s'ouvre pas; QA verte reconfirmee par Git: rustup run stable cargo fmt --all -- --check, git diff --check, cargo test -p app-tauri view_window_tests 9/9 dont mcp_view_window_contract_is_stable, persisted_identity_accepts_mcp_view_label 1/1, npm test 22/22 sur ViewWindow/ProjectsView.detach/viewPlacement, npm run build tsc+vite OK; fichiers tickets/296/*, tickets/299/, scripts/ et sync counter/index hors perimetre; aucun push)
This commit is contained in:
@ -4057,6 +4057,7 @@ pub(crate) enum ViewPanel {
|
||||
Context,
|
||||
Work,
|
||||
Tickets,
|
||||
Mcp,
|
||||
Agents,
|
||||
Templates,
|
||||
Skills,
|
||||
@ -4072,6 +4073,7 @@ impl ViewPanel {
|
||||
"context" => Ok(Self::Context),
|
||||
"work" => Ok(Self::Work),
|
||||
"tickets" => Ok(Self::Tickets),
|
||||
"mcp" => Ok(Self::Mcp),
|
||||
"agents" => Ok(Self::Agents),
|
||||
"templates" => Ok(Self::Templates),
|
||||
"skills" => Ok(Self::Skills),
|
||||
@ -4091,6 +4093,7 @@ impl ViewPanel {
|
||||
Self::Context => "context",
|
||||
Self::Work => "work",
|
||||
Self::Tickets => "tickets",
|
||||
Self::Mcp => "mcp",
|
||||
Self::Agents => "agents",
|
||||
Self::Templates => "templates",
|
||||
Self::Skills => "skills",
|
||||
@ -4106,6 +4109,7 @@ impl ViewPanel {
|
||||
Self::Context => "Project context",
|
||||
Self::Work => "Work state",
|
||||
Self::Tickets => "Tickets",
|
||||
Self::Mcp => "MCP",
|
||||
Self::Agents => "Agents",
|
||||
Self::Templates => "Templates",
|
||||
Self::Skills => "Skills",
|
||||
@ -4411,6 +4415,18 @@ mod view_window_tests {
|
||||
assert_eq!(view_window_url(panel), "index.html?panel=tickets");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mcp_view_window_contract_is_stable() {
|
||||
let panel = ViewPanel::parse("mcp").unwrap();
|
||||
|
||||
assert_eq!(panel, ViewPanel::Mcp);
|
||||
assert_eq!(panel.as_str(), "mcp");
|
||||
assert_eq!(panel.title(), "MCP");
|
||||
assert_eq!(view_window_label(panel), "view-mcp");
|
||||
assert_eq!(view_window_url(panel), "index.html?panel=mcp");
|
||||
assert_eq!(view_panel_from_window_label("view-mcp"), Some(panel));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn view_window_rejects_unknown_panel() {
|
||||
let err = ViewPanel::parse("terminal").unwrap_err();
|
||||
|
||||
@ -1090,6 +1090,24 @@ mod tests {
|
||||
assert_eq!(url.as_deref(), Some("index.html?panel=agents"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn persisted_identity_accepts_mcp_view_label() {
|
||||
let (kind, panel, project_id, plugin_layout, url) =
|
||||
persisted_window_identity_from_label("view-mcp").unwrap();
|
||||
|
||||
assert_eq!(kind, PersistedWindowKind::View);
|
||||
assert_eq!(panel.as_deref(), Some("mcp"));
|
||||
assert!(project_id.is_none());
|
||||
assert!(plugin_layout.is_none());
|
||||
assert_eq!(url.as_deref(), Some("index.html?panel=mcp"));
|
||||
assert_eq!(
|
||||
persisted_view_identity_from_label("view-mcp")
|
||||
.unwrap()
|
||||
.as_str(),
|
||||
"mcp"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn persisted_identity_accepts_plugin_layout_view_labels() {
|
||||
let plugin_id = domain::PluginId::new("dev.idea.android-plugin").unwrap();
|
||||
|
||||
Reference in New Issue
Block a user