diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc0151c..22e11c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -353,3 +353,8 @@
- `创建 Agent / 编辑 Agent` 里的系统提示词占位改成“可先留空,后面随时补充”,减少半成品感。
- `作品与成片`、Agent 执行项默认说明里的“再补”字眼也一起收掉,统一成当前可直接推进的表达。
- 前端回归新增了这批文案断言,避免旧的占位口径再回流到主工作台。
+
+### 依赖健康缺配置入口补齐
+
+- 依赖健康卡片在“未配置地址”时,管理员可以直接点 `去管理员配置台` 继续配置。
+- 探测地址缺失文案改成“等待配置探测地址”,不再让人误以为系统异常。
diff --git a/web/storyforge-web-v4/assets/app.js b/web/storyforge-web-v4/assets/app.js
index 5aaeba6..416a5a0 100644
--- a/web/storyforge-web-v4/assets/app.js
+++ b/web/storyforge-web-v4/assets/app.js
@@ -3772,6 +3772,12 @@ function getIntegrationCards() {
? `当前通过 fnOS NAS 隧道访问 ${detail.baseUrl || detail.url || "cutvideo"}`
: `当前直连 ${detail.baseUrl || detail.url || "cutvideo"}`;
}
+ if (detail.available && !detail.configured && isSuperAdmin()) {
+ actions = [
+ actions,
+ `去管理员配置台`
+ ].filter(Boolean).join("");
+ }
return {
key,
meta: {
@@ -4964,7 +4970,7 @@ function renderIntegrationOverviewPanel(options = {}) {
${escapeHtml(item.note)}
${item.extra ? `${escapeHtml(item.extra)}
` : ""}
- ${escapeHtml(item.key === "live_recorder" ? "仅通过当前租户的后端代理访问" : (item.key === "cutvideo" ? `${getCutvideoIntegrationUrlLabel(item.detail)}:${item.detail.url || item.detail.baseUrl || "未提供探测地址"}` : (item.detail.url || item.detail.baseUrl || "未提供探测地址")))}
+ ${escapeHtml(item.key === "live_recorder" ? "仅通过当前租户的后端代理访问" : (item.key === "cutvideo" ? `${getCutvideoIntegrationUrlLabel(item.detail)}:${item.detail.url || item.detail.baseUrl || "等待配置探测地址"}` : (item.detail.url || item.detail.baseUrl || "等待配置探测地址")))}
${item.actions ? `${item.actions}
` : ""}
`).join("")}
diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs
index 5106faf..fd5ba78 100644
--- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs
+++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs
@@ -396,6 +396,7 @@ test("workbench copy uses direct live language instead of future-placeholder wor
assert.match(APP, /把完成任务写成一条可追踪复盘,可按项目累计/);
assert.match(APP, /先绑定执行 Agent,再完善任务目标和方法论/);
assert.match(APP, /先看真实作品,再继续整理文档与成片/);
+ assert.match(APP, /等待配置探测地址/);
});
test("discovery and production screens expose mobile focus cards with next-step actions", () => {