import { app } from "../../scripts/app.js";
const NODES = [
["CDVerifyPackage", "Verify Package", "校验生产包"],
["CDMigratePayload", "Migrate Payload", "迁移数据结构"],
["CDRetryPolicy", "Retry Policy", "重试策略"],
["CDQueueCheckpoint", "Queue Checkpoint", "队列断点"],
["CDIdempotencyKey", "Idempotency Key", "幂等键"],
["CDEnvironmentLock", "Environment Lock", "环境锁"],
];
const addNode = (type) => {
const node = window.LiteGraph?.createNode?.(type);
if (!node || !app.graph) return;
node.pos = Array.isArray(app.canvas?.graph_mouse) ? [...app.canvas.graph_mouse] : [200, 200];
app.graph.add(node);
app.canvas?.setDirty?.(true, true);
};
const render = (host) => {
host.replaceChildren();
const root = document.createElement("div");
root.className = "cd-view";
const title = document.createElement("h3");
title.textContent = "Reliability / 可靠性";
root.append(title);
for (const [type, en, zh] of NODES) {
const button = document.createElement("button");
button.className = "cd-node-button";
button.type = "button";
button.innerHTML = `${en} / ${zh}${type}`;
button.addEventListener("click", () => addNode(type));
root.append(button);
}
host.append(root);
};
app.registerExtension({
name: "continuity-director.reliability",
settings: [
{
id: "ContinuityDirector.ShowReliabilityTab",
name: "Continuity Director: Show reliability tab",
type: "boolean",
defaultValue: true,
},
],
commands: NODES.map(([type, en]) => ({
id: `continuity-director.add.${type}`,
label: `Continuity Director: Add ${en}`,
function: () => addNode(type),
})),
menuCommands: [
{
path: ["Continuity Director", "Reliability"],
commands: NODES.map(([type]) => `continuity-director.add.${type}`),
},
],
async setup() {
const visible = app.extensionManager?.setting?.get?.("ContinuityDirector.ShowReliabilityTab") ?? true;
if (!visible || !app.extensionManager?.registerSidebarTab) return;
app.extensionManager.registerSidebarTab({
id: "continuity-director-reliability",
icon: "pi pi-shield",
title: "CD Reliability",
tooltip: "Continuity Director reliability tools",
type: "custom",
render,
});
},
});