Fix Netx Ops tools missing on DSH 0.2 and public-preset publish.

Stop waiting on removed settingsScope so the host can publish a connection, harden skill frontmatter for CRLF, and auto-save capability public toggles so other presets actually get netx__* tools (0.1.50).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-10-10 16:13:56 +08:00
parent a313dd0eae
commit d4f2459eb2
18 changed files with 567 additions and 178 deletions

View file

@ -2397,6 +2397,16 @@ class NetxopsCardController {
}
inject() {
const actions = this.form.actions();
const capabilityFields = new Set([
"groupOpsInPreset",
"groupOpsPublic",
"groupTopologyInPreset",
"groupTopologyPublic",
"groupBizMonitorInPreset",
"groupBizMonitorPublic",
"groupKbInPreset",
"groupKbPublic"
]);
return {
hooks: { netxopsCard: this.store },
...actions,
@ -2404,6 +2414,8 @@ class NetxopsCardController {
actions.edit(field, text);
if (field === "kbRoot")
this.refreshKbPreview();
if (capabilityFields.has(field))
this.form.save();
},
discard: () => {
actions.discard();
@ -2413,6 +2425,8 @@ class NetxopsCardController {
actions.resetField(field);
if (field === "kbRoot")
this.refreshKbPreview();
if (capabilityFields.has(field))
this.form.save();
},
exportAllSessions: () => {
this.exportAllSessions();
@ -2492,7 +2506,7 @@ var en = {
groupBizMonitor: "bizMonitor",
groupKb: "Knowledge skills",
groupInPreset: "In Netx Ops preset",
groupPublic: "Publish to other presets",
groupPublic: "Publish to other presets (auto-saves; new sessions)",
kbRoot: "Package root",
kbRootHint: "Folder with MANIFEST.json (operator-subset v1.0). Browse auto-saves. Pack skills load from paths.skills/_skills and paths.localSkills when hasSkills.",
kbBrowse: "Browse…",
@ -2570,7 +2584,7 @@ var zh = {
groupBizMonitor: "bizMonitor",
groupKb: "知识库技能",
groupInPreset: "在 Netx Ops 预设中启用",
groupPublic: "对其他预设公开",
groupPublic: "对其他预设公开(勾选后自动保存;新会话生效)",
kbRoot: "知识包根目录",
kbRootHint: "含 MANIFEST.json 的运营商子集包(v1.0)。浏览选目录后会自动保存;hasSkills 时加载 paths.skills/_skills 与 paths.localSkills。",
kbBrowse: "浏览…",
@ -2865,16 +2879,19 @@ function apply(ctx) {
formsCtx.logger?.warn?.("netxops: configForms present but no get/whileServed match for %s", candidates.join(","));
}
});
ctx.inject(["settingsScope"], (scopeCtx) => {
const binder = scopeCtx.settingsScope;
if (!binder || typeof binder.bind !== "function") {
scopeCtx.logger?.warn?.("netxops: settingsScope present but .bind missing");
return;
try {
const getter = ctx.get;
if (typeof getter === "function" && getter.call(ctx, "configForms") === undefined) {
const binder = getter.call(ctx, "settingsScope");
if (binder && typeof binder.bind === "function") {
ctx.logger?.info?.("netxops: attach form via settingsScope (legacy one-shot)");
deferred.attach(binder.bind({ namespace: NETXOPS_NS }));
ensureExtras();
}
}
scopeCtx.logger?.info?.("netxops: attach form via settingsScope");
deferred.attach(binder.bind({ namespace: NETXOPS_NS }));
ensureExtras();
});
} catch (error) {
ctx.logger?.warn?.("netxops: legacy settingsScope probe failed: %s", error);
}
}
function wireOptionalServices(ctx, card) {
const soft = (deps, run, label) => {