@lmzhen/dsh-evolution-settings-ui 0.27.2 → 0.28.0
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/README.md +2 -2
- package/lib/client.js +67 -48
- package/lib/types/client/DiagnosticsCard.d.ts +6 -6
- package/lib/types/client/fallbacks.generated.d.ts +1 -1
- package/lib/types/client/generated-about.d.ts +1 -1
- package/lib/types/client/messages.d.ts +3 -6
- package/lib/types/client/routes.generated.d.ts +7 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,9 +65,9 @@ dropped rather than painted under another row's heading.
|
|
|
65
65
|
|
|
66
66
|
## The diagnostics card
|
|
67
67
|
|
|
68
|
-
One card in the same section is the read-only **self-check** (`data-card="diagnostics"`): it renders the Host's
|
|
68
|
+
One card in the same section is the read-only **self-check** (`data-card="diagnostics"`): it renders the Host's `DiagnosticsView` runtime window — the same rows the CLI and `/api/dsh-evolution/diagnostics` answer — and owns no key list and no status vocabulary. The view's documentation facts are a CLI/JSON concern and are deliberately not rendered here: a settings page carries the runtime reading, not a spec sheet.
|
|
69
69
|
|
|
70
|
-
It leads with a plain-language verdict derived from the frozen runtime statuses (`运行正常` / `{n} 项需要注意` / `{n} 项异常` / `{n} 项待确认`, decided fail > warn > unknown > ok), then
|
|
70
|
+
It leads with a plain-language verdict derived from the frozen runtime statuses (`运行正常` / `{n} 项需要注意` / `{n} 项异常` / `{n} 项待确认`, decided fail > warn > unknown > ok), then renders **运行状态** rows (status dot and word, detail line, remedy line).
|
|
71
71
|
|
|
72
72
|
The card is collapsible with the same `.evolution-param-head` button and body inset as the parameter cards; Refresh is an explicit control in the body (one read on mount, one per click), and a failed read renders the shared failure block with the `/evolution doctor` command fallback.
|
|
73
73
|
## A seat that arrives late revives the card
|
package/lib/client.js
CHANGED
|
@@ -28,6 +28,12 @@ window.__ModuleLoader__.load({
|
|
|
28
28
|
health: "/api/dsh-evolution/skill-history/health"
|
|
29
29
|
},
|
|
30
30
|
"skill-health": { rows: "/api/dsh-evolution/skill-health/rows" },
|
|
31
|
+
merge: {
|
|
32
|
+
view: "/api/dsh-evolution/merge/view",
|
|
33
|
+
rows: "/api/dsh-evolution/merge/rows",
|
|
34
|
+
run: "/api/dsh-evolution/merge/run",
|
|
35
|
+
runs: "/api/dsh-evolution/merge/runs"
|
|
36
|
+
},
|
|
31
37
|
diagnostics: { view: "/api/dsh-evolution/diagnostics" }
|
|
32
38
|
};
|
|
33
39
|
//#endregion
|
|
@@ -331,6 +337,48 @@ window.__ModuleLoader__.load({
|
|
|
331
337
|
}
|
|
332
338
|
]
|
|
333
339
|
},
|
|
340
|
+
{
|
|
341
|
+
namespace: "evolution-merge",
|
|
342
|
+
seatKey: "evolution-merge",
|
|
343
|
+
fields: [
|
|
344
|
+
{
|
|
345
|
+
id: "mergeApproval",
|
|
346
|
+
group: "merge",
|
|
347
|
+
doc: "Pause after round 1 and put the pair in the pending queue instead of authoring round 2 automatically.",
|
|
348
|
+
label: "合并审批",
|
|
349
|
+
hint: "开启后,第一轮判定完先停下、进入待批准清单;关闭则直接进入第二轮合并。",
|
|
350
|
+
control: "switch",
|
|
351
|
+
unit: "",
|
|
352
|
+
values: [],
|
|
353
|
+
valueLabels: [],
|
|
354
|
+
atLeast: ""
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
id: "mergeSkippedTtlDays",
|
|
358
|
+
group: "merge",
|
|
359
|
+
doc: "Days a skipped pair stays out of screening; 0 means it never expires.",
|
|
360
|
+
label: "无需合并保留天数",
|
|
361
|
+
hint: "判定无需合并的对,多少天内不再参与筛选;0 表示一直保留。",
|
|
362
|
+
control: "number",
|
|
363
|
+
unit: "天",
|
|
364
|
+
values: [],
|
|
365
|
+
valueLabels: [],
|
|
366
|
+
atLeast: ""
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
id: "mergeRunTimeoutMinutes",
|
|
370
|
+
group: "merge",
|
|
371
|
+
doc: "Wall-clock budget of one merge run; 0 means no limit.",
|
|
372
|
+
label: "单次运行上限",
|
|
373
|
+
hint: "一次合并运行最多持续多少分钟;0 表示不设上限。",
|
|
374
|
+
control: "number",
|
|
375
|
+
unit: "分钟",
|
|
376
|
+
values: [],
|
|
377
|
+
valueLabels: [],
|
|
378
|
+
atLeast: ""
|
|
379
|
+
}
|
|
380
|
+
]
|
|
381
|
+
},
|
|
334
382
|
{
|
|
335
383
|
namespace: "evolution-review",
|
|
336
384
|
seatKey: "evolution-review",
|
|
@@ -642,6 +690,7 @@ window.__ModuleLoader__.load({
|
|
|
642
690
|
"evolution-approval",
|
|
643
691
|
"evolution-commands",
|
|
644
692
|
"evolution-curator",
|
|
693
|
+
"evolution-merge",
|
|
645
694
|
"evolution-review",
|
|
646
695
|
"memory-files",
|
|
647
696
|
"tool-memory",
|
|
@@ -1069,15 +1118,15 @@ window.__ModuleLoader__.load({
|
|
|
1069
1118
|
//#endregion
|
|
1070
1119
|
//#region src/client/DiagnosticsCard.ts
|
|
1071
1120
|
/**
|
|
1072
|
-
* The diagnostics card (W7 S7): the
|
|
1121
|
+
* The diagnostics card (W7 S7): the settings face of the SAME DiagnosticsView the CLI and the
|
|
1073
1122
|
* `/api/dsh-evolution/diagnostics` route answer.
|
|
1074
1123
|
*
|
|
1075
1124
|
* Read-only by construction: it fetches once on mount and only refetches on an explicit Refresh; a
|
|
1076
|
-
* failed read renders the shared FailureBlock with the command-face fallback. The client
|
|
1077
|
-
*
|
|
1078
|
-
*
|
|
1079
|
-
*
|
|
1080
|
-
*
|
|
1125
|
+
* failed read renders the shared FailureBlock with the command-face fallback. The client owns no
|
|
1126
|
+
* key list and no status vocabulary: it renders the host view's frozen runtime rows and leads with
|
|
1127
|
+
* a plain-language summary. The view's documentation facts are a CLI/JSON concern and are
|
|
1128
|
+
* deliberately NOT rendered here (0.27.2 real-machine feedback: a settings page is not a spec
|
|
1129
|
+
* sheet; the runtime window is the whole reading).
|
|
1081
1130
|
* @module @lmzhen/dsh-evolution-settings-ui/client/DiagnosticsCard
|
|
1082
1131
|
*/
|
|
1083
1132
|
/** Which word one status gets (the frozen W1 status set). */
|
|
@@ -1113,15 +1162,6 @@ window.__ModuleLoader__.load({
|
|
|
1113
1162
|
count: 0
|
|
1114
1163
|
};
|
|
1115
1164
|
}
|
|
1116
|
-
/** A locally formatted check time; an unparseable stamp stays visible instead of becoming NaN. */
|
|
1117
|
-
function checkedAt(iso) {
|
|
1118
|
-
try {
|
|
1119
|
-
const at = new Date(iso);
|
|
1120
|
-
return Number.isNaN(at.getTime()) ? iso : at.toLocaleString();
|
|
1121
|
-
} catch {
|
|
1122
|
-
return iso;
|
|
1123
|
-
}
|
|
1124
|
-
}
|
|
1125
1165
|
/**
|
|
1126
1166
|
* Render the card.
|
|
1127
1167
|
* @param props - the copy seat, the host call and the command fallback.
|
|
@@ -1166,21 +1206,12 @@ window.__ModuleLoader__.load({
|
|
|
1166
1206
|
className: "evo-diag-badge",
|
|
1167
1207
|
"data-status": summary.status
|
|
1168
1208
|
}, t(SUMMARY_KEYS[summary.status], summary.count === 0 ? void 0 : { n: summary.count })), (0, react.createElement)("span", { className: "evolution-param-chevron" }, open ? "▲" : "▼"));
|
|
1169
|
-
const facts = (view) => view.facts.length === 0 ? null : (0, react.createElement)("div", {}, (0, react.createElement)("h3", { className: "evolution-param-group" }, t("diagFactsTitle")), (0, react.createElement)("div", { className: "evo-diag-list" }, ...view.facts.map((fact) => (0, react.createElement)("div", {
|
|
1170
|
-
key: "fact-" + fact.key,
|
|
1171
|
-
className: "evo-diag-item",
|
|
1172
|
-
"data-kind": "fact"
|
|
1173
|
-
}, (0, react.createElement)("span", { className: "evo-diag-label" }, fact.label), (0, react.createElement)("span", { className: "evo-diag-value" }, fact.value)))));
|
|
1174
1209
|
const runtime = (view) => view.runtime.length === 0 ? null : (0, react.createElement)("div", {}, (0, react.createElement)("h3", { className: "evolution-param-group" }, t("diagRuntimeTitle")), (0, react.createElement)("div", { className: "evo-diag-list" }, ...view.runtime.map((row) => (0, react.createElement)("div", {
|
|
1175
1210
|
key: "runtime-" + row.key,
|
|
1176
1211
|
className: "evo-diag-item",
|
|
1177
1212
|
"data-kind": "runtime",
|
|
1178
1213
|
"data-status": row.status
|
|
1179
1214
|
}, (0, react.createElement)("div", { className: "evo-diag-row-head" }, (0, react.createElement)("span", { className: "evo-diag-dot" }), (0, react.createElement)("span", { className: "evo-diag-label" }, row.label), (0, react.createElement)("span", { className: "evo-diag-status" }, t(STATUS_KEYS[row.status]))), row.detail === void 0 ? null : (0, react.createElement)("span", { className: "evo-diag-detail" }, row.detail), row.remedy === void 0 ? null : (0, react.createElement)("span", { className: "evo-diag-remedy" }, t("diagRemedy") + row.remedy)))));
|
|
1180
|
-
const details = (view) => (0, react.createElement)("details", { className: "evo-diag-meta" }, (0, react.createElement)("summary", {}, t("diagDetails")), (0, react.createElement)("div", { className: "evo-diag-meta-body" }, (0, react.createElement)("span", {}, t("diagCheckedAt", { at: checkedAt(view.generatedAt) })), (0, react.createElement)("span", {}, t("diagSchema", { n: view.schemaVersion })), view.facts.length === 0 ? null : (0, react.createElement)("span", { className: "evo-diag-sources-title" }, t("diagSourcesTitle")), ...view.facts.map((fact) => (0, react.createElement)("span", {
|
|
1181
|
-
key: "source-" + fact.key,
|
|
1182
|
-
className: "evo-diag-source"
|
|
1183
|
-
}, (0, react.createElement)("span", { className: "evo-diag-source-label" }, fact.label), (0, react.createElement)("span", { className: "evo-diag-source-home" }, fact.home)))));
|
|
1184
1215
|
const body = () => {
|
|
1185
1216
|
if (state.phase === "loading") return (0, react.createElement)("p", { className: "evolution-param-loading" }, t("stateLoading"));
|
|
1186
1217
|
if (state.phase === "failed") return FailureBlock({
|
|
@@ -1194,7 +1225,7 @@ window.__ModuleLoader__.load({
|
|
|
1194
1225
|
className: "evolution-param-button",
|
|
1195
1226
|
onClick: refresh,
|
|
1196
1227
|
"data-action": "diag-refresh"
|
|
1197
|
-
}, t("diagRefresh"))),
|
|
1228
|
+
}, t("diagRefresh"))), runtime(view), view.runtime.length === 0 ? (0, react.createElement)("p", { className: "evolution-param-note" }, t("diagNoRows")) : null);
|
|
1198
1229
|
};
|
|
1199
1230
|
return (0, react.createElement)("section", {
|
|
1200
1231
|
className: "evolution-param-card",
|
|
@@ -1229,6 +1260,7 @@ window.__ModuleLoader__.load({
|
|
|
1229
1260
|
approval: { command: "/evolution pending … /evolution approve <id> … /evolution reject <id> … /evolution release <id>" },
|
|
1230
1261
|
"skill-history": { command: "/evolution restore <name> [v](查看:/evolution skills history <name>)" },
|
|
1231
1262
|
"skill-health": { command: "/evolution skills refresh(健康行:/evolution doctor)" },
|
|
1263
|
+
merge: { command: "/evolution merge status / pending / approve <id> / report" },
|
|
1232
1264
|
diagnostics: {
|
|
1233
1265
|
command: "/evolution doctor",
|
|
1234
1266
|
platformCli: "dsh --json /evolution doctor"
|
|
@@ -1283,6 +1315,7 @@ window.__ModuleLoader__.load({
|
|
|
1283
1315
|
cardSkills: "技能写入规则",
|
|
1284
1316
|
cardApproval: "写入审批",
|
|
1285
1317
|
cardCommands: "维护扫描",
|
|
1318
|
+
cardMerge: "技能自动合并",
|
|
1286
1319
|
approvalTitle: "待批写入",
|
|
1287
1320
|
approvalLoading: "正在读取待批项…",
|
|
1288
1321
|
approvalEmpty: "没有待批的写入",
|
|
@@ -1310,8 +1343,7 @@ window.__ModuleLoader__.load({
|
|
|
1310
1343
|
approvalDiffRemoved: "{n} 行删除",
|
|
1311
1344
|
approvalDiffCut: "改动区域已截断",
|
|
1312
1345
|
diagTitle: "诊断",
|
|
1313
|
-
diagSubtitle: "
|
|
1314
|
-
diagFactsTitle: "环境信息",
|
|
1346
|
+
diagSubtitle: "运行状态的只读自查;不会改动任何东西。",
|
|
1315
1347
|
diagRuntimeTitle: "运行状态",
|
|
1316
1348
|
diagSummaryOk: "运行正常",
|
|
1317
1349
|
diagSummaryWarn: "{n} 项需要注意",
|
|
@@ -1324,10 +1356,7 @@ window.__ModuleLoader__.load({
|
|
|
1324
1356
|
diagStatusFail: "异常",
|
|
1325
1357
|
diagStatusUnknown: "未知",
|
|
1326
1358
|
diagRemedy: "建议:",
|
|
1327
|
-
|
|
1328
|
-
diagCheckedAt: "检查时间:{at}",
|
|
1329
|
-
diagSchema: "数据版本 v{n}",
|
|
1330
|
-
diagSourcesTitle: "数据来源",
|
|
1359
|
+
diagNoRows: "没有可显示的运行状态",
|
|
1331
1360
|
stateLoading: "正在读取…",
|
|
1332
1361
|
failureUnauthorized: "需要登录:重新打开这个页面完成登录后再试。",
|
|
1333
1362
|
failureForbidden: "平台拒绝了这个请求(身份不是 owner)。",
|
|
@@ -1370,6 +1399,7 @@ window.__ModuleLoader__.load({
|
|
|
1370
1399
|
cardSkills: "Skill write rules",
|
|
1371
1400
|
cardApproval: "Write approval",
|
|
1372
1401
|
cardCommands: "Maintenance scans",
|
|
1402
|
+
cardMerge: "Skill auto-merge",
|
|
1373
1403
|
approvalTitle: "Writes awaiting approval",
|
|
1374
1404
|
approvalLoading: "reading the pending window…",
|
|
1375
1405
|
approvalEmpty: "nothing is waiting for a decision",
|
|
@@ -1397,8 +1427,7 @@ window.__ModuleLoader__.load({
|
|
|
1397
1427
|
approvalDiffRemoved: "{n} lines removed",
|
|
1398
1428
|
approvalDiffCut: "the changed region is truncated",
|
|
1399
1429
|
diagTitle: "Diagnostics",
|
|
1400
|
-
diagSubtitle: "A read-only check of the
|
|
1401
|
-
diagFactsTitle: "Environment",
|
|
1430
|
+
diagSubtitle: "A read-only check of the runtime state; nothing here changes anything.",
|
|
1402
1431
|
diagRuntimeTitle: "Runtime status",
|
|
1403
1432
|
diagSummaryOk: "All healthy",
|
|
1404
1433
|
diagSummaryWarn: "{n} need attention",
|
|
@@ -1411,10 +1440,7 @@ window.__ModuleLoader__.load({
|
|
|
1411
1440
|
diagStatusFail: "failing",
|
|
1412
1441
|
diagStatusUnknown: "unknown",
|
|
1413
1442
|
diagRemedy: "Suggested: ",
|
|
1414
|
-
|
|
1415
|
-
diagCheckedAt: "Checked: {at}",
|
|
1416
|
-
diagSchema: "data version v{n}",
|
|
1417
|
-
diagSourcesTitle: "Data sources",
|
|
1443
|
+
diagNoRows: "no runtime status to show",
|
|
1418
1444
|
stateLoading: "reading…",
|
|
1419
1445
|
failureUnauthorized: "Sign-in is required: reopen this page and sign in, then retry.",
|
|
1420
1446
|
failureForbidden: "The platform refused this request (not the owner principal).",
|
|
@@ -1434,7 +1460,8 @@ window.__ModuleLoader__.load({
|
|
|
1434
1460
|
"evolution-curator": "cardCurator",
|
|
1435
1461
|
"tool-skill-manage": "cardSkills",
|
|
1436
1462
|
"evolution-approval": "cardApproval",
|
|
1437
|
-
"evolution-commands": "cardCommands"
|
|
1463
|
+
"evolution-commands": "cardCommands",
|
|
1464
|
+
"evolution-merge": "cardMerge"
|
|
1438
1465
|
});
|
|
1439
1466
|
/**
|
|
1440
1467
|
* Resolve one message without the locale seat (tests and the fallback path).
|
|
@@ -2091,7 +2118,7 @@ window.__ModuleLoader__.load({
|
|
|
2091
2118
|
* @returns the section element.
|
|
2092
2119
|
*/
|
|
2093
2120
|
function SettingsSection(face) {
|
|
2094
|
-
return (0, react.createElement)("div", { className: "evolution-params" }, (0, react.createElement)("h2", { className: "evolution-params-title" }, face.t("title")), (0, react.createElement)("p", { className: "evolution-params-subtitle" }, face.t("subtitle")), (0, react.createElement)("p", { className: "evolution-params-about" }, "0.
|
|
2121
|
+
return (0, react.createElement)("div", { className: "evolution-params" }, (0, react.createElement)("h2", { className: "evolution-params-title" }, face.t("title")), (0, react.createElement)("p", { className: "evolution-params-subtitle" }, face.t("subtitle")), (0, react.createElement)("p", { className: "evolution-params-about" }, "0.28.0 · Web settings cards for the evolution family's parameter namespaces"), (0, react.createElement)("div", {
|
|
2095
2122
|
key: PENDING_CARD_KEY,
|
|
2096
2123
|
className: "evolution-params-group"
|
|
2097
2124
|
}, face.renderSlot(CARD_SLOT, {}, { entryKey: PENDING_CARD_KEY })), (0, react.createElement)("div", {
|
|
@@ -2194,7 +2221,6 @@ window.__ModuleLoader__.load({
|
|
|
2194
2221
|
".evo-diag-item{padding:var(--evo-space-12) 0}",
|
|
2195
2222
|
".evo-diag-item+.evo-diag-item{border-top:var(--evo-hairline-width) solid var(--dsw-alias-border-l2)}",
|
|
2196
2223
|
".evo-diag-label{display:block;color:var(--dsw-alias-label-tertiary);font-size:var(--evo-type-xs);line-height:var(--evo-leading-base)}",
|
|
2197
|
-
".evo-diag-value{display:block;margin:var(--evo-space-2) 0 0;color:var(--dsw-alias-label-primary);font-size:var(--evo-type-sm);line-height:var(--evo-leading-base);overflow-wrap:anywhere}",
|
|
2198
2224
|
".evo-diag-row-head{display:flex;align-items:baseline;gap:var(--evo-space-6);flex-wrap:wrap}",
|
|
2199
2225
|
".evo-diag-dot{width:var(--evo-space-6);height:var(--evo-space-6);border-radius:var(--evo-radius-pill);background:var(--evo-diag-tone,var(--dsw-alias-state-idle-primary));flex:none}",
|
|
2200
2226
|
".evo-diag-status{color:var(--evo-diag-tone,var(--dsw-alias-state-idle-primary));font-size:var(--evo-type-xs);line-height:var(--evo-leading-base)}",
|
|
@@ -2203,14 +2229,7 @@ window.__ModuleLoader__.load({
|
|
|
2203
2229
|
".evo-diag-item[data-status=\"fail\"]{--evo-diag-tone:var(--dsw-alias-state-error-primary)}",
|
|
2204
2230
|
".evo-diag-item[data-status=\"unknown\"]{--evo-diag-tone:var(--dsw-alias-state-idle-primary)}",
|
|
2205
2231
|
".evo-diag-detail{display:block;margin:var(--evo-space-2) 0 0;color:var(--dsw-alias-label-secondary);font-size:var(--evo-type-xs);line-height:var(--evo-leading-base);overflow-wrap:anywhere}",
|
|
2206
|
-
".evo-diag-remedy{display:block;margin:var(--evo-space-4) 0 0;color:var(--dsw-alias-label-tertiary);font-size:var(--evo-type-xs);line-height:var(--evo-leading-base)}"
|
|
2207
|
-
".evo-diag-meta{margin:var(--evo-space-12) 0 0;padding-top:var(--evo-space-8);border-top:var(--evo-hairline-width) solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:var(--evo-type-xs);line-height:var(--evo-leading-base)}",
|
|
2208
|
-
".evo-diag-meta>summary{cursor:pointer;user-select:none;padding:var(--evo-space-4) 0}",
|
|
2209
|
-
".evo-diag-meta-body{display:flex;flex-direction:column;gap:var(--evo-space-2);padding:var(--evo-space-4) 0 0}",
|
|
2210
|
-
".evo-diag-sources-title{padding-top:var(--evo-space-6)}",
|
|
2211
|
-
".evo-diag-source{display:flex;justify-content:space-between;gap:var(--evo-space-8);overflow-wrap:anywhere}",
|
|
2212
|
-
".evo-diag-source-label{flex:none}",
|
|
2213
|
-
".evo-diag-source-home{text-align:right;overflow-wrap:anywhere}"
|
|
2232
|
+
".evo-diag-remedy{display:block;margin:var(--evo-space-4) 0 0;color:var(--dsw-alias-label-tertiary);font-size:var(--evo-type-xs);line-height:var(--evo-leading-base)}"
|
|
2214
2233
|
].join("\n");
|
|
2215
2234
|
/**
|
|
2216
2235
|
* Inject the stylesheet once per document.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The diagnostics card (W7 S7): the
|
|
2
|
+
* The diagnostics card (W7 S7): the settings face of the SAME DiagnosticsView the CLI and the
|
|
3
3
|
* `/api/dsh-evolution/diagnostics` route answer.
|
|
4
4
|
*
|
|
5
5
|
* Read-only by construction: it fetches once on mount and only refetches on an explicit Refresh; a
|
|
6
|
-
* failed read renders the shared FailureBlock with the command-face fallback. The client
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* failed read renders the shared FailureBlock with the command-face fallback. The client owns no
|
|
7
|
+
* key list and no status vocabulary: it renders the host view's frozen runtime rows and leads with
|
|
8
|
+
* a plain-language summary. The view's documentation facts are a CLI/JSON concern and are
|
|
9
|
+
* deliberately NOT rendered here (0.27.2 real-machine feedback: a settings page is not a spec
|
|
10
|
+
* sheet; the runtime window is the whole reading).
|
|
11
11
|
* @module @lmzhen/dsh-evolution-settings-ui/client/DiagnosticsCard
|
|
12
12
|
*/
|
|
13
13
|
import { type ReactNode } from 'react';
|
|
@@ -4,5 +4,5 @@ import type { FallbackHint } from './contracts.generated.ts';
|
|
|
4
4
|
* COMMAND_FALLBACKS (the ONE home). When the platform's connection carrier is absent (E-325) the
|
|
5
5
|
* panels render this hint instead of a bare HTTP failure — same use case, command face.
|
|
6
6
|
*/
|
|
7
|
-
export declare const FALLBACKS: Readonly<Record<'approval' | 'skill-history' | 'skill-health' | 'diagnostics', FallbackHint>>;
|
|
7
|
+
export declare const FALLBACKS: Readonly<Record<'approval' | 'skill-history' | 'skill-health' | 'merge' | 'diagnostics', FallbackHint>>;
|
|
8
8
|
//# sourceMappingURL=fallbacks.generated.d.ts.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* description, so the settings surface can state both without a hand-written copy.
|
|
6
6
|
*/
|
|
7
7
|
/** The family version this surface belongs to. */
|
|
8
|
-
export declare const FAMILY_VERSION = "0.
|
|
8
|
+
export declare const FAMILY_VERSION = "0.28.0";
|
|
9
9
|
/** What this surface is for, in one line. */
|
|
10
10
|
export declare const PACKAGE_PURPOSE = "Web settings cards for the evolution family's parameter namespaces";
|
|
11
11
|
//# sourceMappingURL=generated-about.d.ts.map
|
|
@@ -45,6 +45,7 @@ export declare const zh: {
|
|
|
45
45
|
readonly cardSkills: "技能写入规则";
|
|
46
46
|
readonly cardApproval: "写入审批";
|
|
47
47
|
readonly cardCommands: "维护扫描";
|
|
48
|
+
readonly cardMerge: "技能自动合并";
|
|
48
49
|
readonly approvalTitle: "待批写入";
|
|
49
50
|
readonly approvalLoading: "正在读取待批项…";
|
|
50
51
|
readonly approvalEmpty: "没有待批的写入";
|
|
@@ -72,8 +73,7 @@ export declare const zh: {
|
|
|
72
73
|
readonly approvalDiffRemoved: "{n} 行删除";
|
|
73
74
|
readonly approvalDiffCut: "改动区域已截断";
|
|
74
75
|
readonly diagTitle: "诊断";
|
|
75
|
-
readonly diagSubtitle: "
|
|
76
|
-
readonly diagFactsTitle: "环境信息";
|
|
76
|
+
readonly diagSubtitle: "运行状态的只读自查;不会改动任何东西。";
|
|
77
77
|
readonly diagRuntimeTitle: "运行状态";
|
|
78
78
|
readonly diagSummaryOk: "运行正常";
|
|
79
79
|
readonly diagSummaryWarn: "{n} 项需要注意";
|
|
@@ -86,10 +86,7 @@ export declare const zh: {
|
|
|
86
86
|
readonly diagStatusFail: "异常";
|
|
87
87
|
readonly diagStatusUnknown: "未知";
|
|
88
88
|
readonly diagRemedy: "建议:";
|
|
89
|
-
readonly
|
|
90
|
-
readonly diagCheckedAt: "检查时间:{at}";
|
|
91
|
-
readonly diagSchema: "数据版本 v{n}";
|
|
92
|
-
readonly diagSourcesTitle: "数据来源";
|
|
89
|
+
readonly diagNoRows: "没有可显示的运行状态";
|
|
93
90
|
readonly stateLoading: "正在读取…";
|
|
94
91
|
readonly failureUnauthorized: "需要登录:重新打开这个页面完成登录后再试。";
|
|
95
92
|
readonly failureForbidden: "平台拒绝了这个请求(身份不是 owner)。";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** One host data-plane surface the browser half can call. */
|
|
2
|
-
export type SurfaceId = 'approval' | 'skill-history' | 'skill-health' | 'diagnostics';
|
|
2
|
+
export type SurfaceId = 'approval' | 'skill-history' | 'skill-health' | 'merge' | 'diagnostics';
|
|
3
3
|
/**
|
|
4
4
|
* Every family host path, generated from evolution-core's HOST_ROUTES (the ONE declaration).
|
|
5
5
|
* A browser half cannot import the host package at runtime (client bundles keep @deepseek-ai/*
|
|
@@ -24,6 +24,12 @@ export declare const ROUTES: {
|
|
|
24
24
|
readonly 'skill-health': {
|
|
25
25
|
readonly rows: "/api/dsh-evolution/skill-health/rows";
|
|
26
26
|
};
|
|
27
|
+
readonly merge: {
|
|
28
|
+
readonly view: "/api/dsh-evolution/merge/view";
|
|
29
|
+
readonly rows: "/api/dsh-evolution/merge/rows";
|
|
30
|
+
readonly run: "/api/dsh-evolution/merge/run";
|
|
31
|
+
readonly runs: "/api/dsh-evolution/merge/runs";
|
|
32
|
+
};
|
|
27
33
|
readonly diagnostics: {
|
|
28
34
|
readonly view: "/api/dsh-evolution/diagnostics";
|
|
29
35
|
};
|
package/package.json
CHANGED