@shgroup/dsh-serenity-hooks 1.27.4 → 1.27.6
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/dsh.plugin.json +1 -1
- package/lib/client.js +150 -69
- package/package.json +1 -1
package/dsh.plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dsh-serenity-hooks",
|
|
3
|
-
"version": "1.27.
|
|
3
|
+
"version": "1.27.6",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"description": "宁静号 ACC harness(Native Cordis 插件):真实 DSH 工具 cc_fs/session/acc_msm/eap/neat/cce/handyman/session_rebuild/skiff_admin + 拦截缝机械约束(safe-mode/路径守卫)+ 高级设定面板(双端口网关/账号管理)+ Skiff 认知子集角色(实验性)。适配 DSH 公开版(0.1.0-rc,deepseek-ai/deepseek-harness)。",
|
|
6
6
|
"engines": {
|
package/lib/client.js
CHANGED
|
@@ -3962,7 +3962,7 @@ Instruction-following style:
|
|
|
3962
3962
|
children: [
|
|
3963
3963
|
!publicAskOn && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
3964
3964
|
className: "ae-warn",
|
|
3965
|
-
children: "⚠️
|
|
3965
|
+
children: "⚠️ Skiff 问答页当前关闭——先开启上方「Skiff 问答页」开关,外部访问才生效。"
|
|
3966
3966
|
}),
|
|
3967
3967
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3968
3968
|
className: "ae-block",
|
|
@@ -4376,13 +4376,28 @@ Instruction-following style:
|
|
|
4376
4376
|
className: "ss-rowCard",
|
|
4377
4377
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4378
4378
|
className: "ss-rowText",
|
|
4379
|
-
children: [
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4379
|
+
children: [
|
|
4380
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4381
|
+
className: "ss-rowName",
|
|
4382
|
+
children: "目标 CCC"
|
|
4383
|
+
}),
|
|
4384
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4385
|
+
className: "ss-rowDesc",
|
|
4386
|
+
children: "选择要配置微信桥的认知容器"
|
|
4387
|
+
}),
|
|
4388
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4389
|
+
className: "ss-help",
|
|
4390
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4391
|
+
type: "button",
|
|
4392
|
+
className: "ss-helpMark",
|
|
4393
|
+
"aria-label": "目标 CCC 帮助",
|
|
4394
|
+
children: "?"
|
|
4395
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4396
|
+
className: "ss-helpTip",
|
|
4397
|
+
children: "微信桥是 CCC 级配置:\n· dsh 一个进程可挂载多个 CCC,每个 CCC 独立对接微信桥\n· 下拉选择要配置的认知容器(显式,非当前活跃会话)\n· 各 CCC 有自己的账号、路由、开关——互不影响\n· 切换 CCC 后自动加载该 CCC 的微信桥配置"
|
|
4398
|
+
})]
|
|
4399
|
+
})
|
|
4400
|
+
]
|
|
4386
4401
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4387
4402
|
className: "ss-rowControl",
|
|
4388
4403
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
@@ -4417,17 +4432,32 @@ Instruction-following style:
|
|
|
4417
4432
|
className: "ss-rowCard",
|
|
4418
4433
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4419
4434
|
className: "ss-rowText",
|
|
4420
|
-
children: [
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
|
|
4426
|
-
|
|
4427
|
-
|
|
4428
|
-
|
|
4429
|
-
|
|
4430
|
-
|
|
4435
|
+
children: [
|
|
4436
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4437
|
+
className: "ss-rowName",
|
|
4438
|
+
children: [
|
|
4439
|
+
"总开关 · 账号(",
|
|
4440
|
+
status.accounts.length,
|
|
4441
|
+
")"
|
|
4442
|
+
]
|
|
4443
|
+
}),
|
|
4444
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4445
|
+
className: "ss-rowDesc",
|
|
4446
|
+
children: status.accounts.length === 0 ? "未绑定账号——下方扫码绑定" : status.accounts.map((a) => `${a.accountId}${a.name ? `·${a.name}` : ""}${a.bound ? "✓" : "✗"}`).join(" ")
|
|
4447
|
+
}),
|
|
4448
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4449
|
+
className: "ss-help",
|
|
4450
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4451
|
+
type: "button",
|
|
4452
|
+
className: "ss-helpMark",
|
|
4453
|
+
"aria-label": "微信桥总开关帮助",
|
|
4454
|
+
children: "?"
|
|
4455
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4456
|
+
className: "ss-helpTip",
|
|
4457
|
+
children: "微信桥总开关:\n· 启用后该 CCC 的微信桥开始轮询(35s 长轮询收消息)\n· 前置条件:至少一个已扫码绑定的微信账号(有凭据)\n· 账号列表:每账号独立轮询;✓=已绑定凭据,✗=未绑定\n· 关闭 = 停止全部轮询(零资源占用)"
|
|
4458
|
+
})]
|
|
4459
|
+
})
|
|
4460
|
+
]
|
|
4431
4461
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4432
4462
|
className: "ss-rowControl",
|
|
4433
4463
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
@@ -4470,19 +4500,34 @@ Instruction-following style:
|
|
|
4470
4500
|
className: "ss-rowCard",
|
|
4471
4501
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4472
4502
|
className: "ss-rowText",
|
|
4473
|
-
children: [
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4503
|
+
children: [
|
|
4504
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4505
|
+
className: "ss-rowName",
|
|
4506
|
+
children: "扫码绑定微信"
|
|
4507
|
+
}),
|
|
4508
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4509
|
+
className: "ss-rowDesc",
|
|
4510
|
+
children: [
|
|
4511
|
+
loginPhase === "idle" && "微信「扫一扫」确认——每扫一次绑定一个新账号",
|
|
4512
|
+
loginPhase === "waiting" && "二维码已生成(5 分钟有效)——微信扫一扫 → 手机确认",
|
|
4513
|
+
loginPhase === "confirmed" && (loginNotice ?? "绑定成功"),
|
|
4514
|
+
loginPhase === "error" && (loginError ?? "绑定失败"),
|
|
4515
|
+
loginPhase === "expired" && "二维码已过期,请重新获取"
|
|
4516
|
+
]
|
|
4517
|
+
}),
|
|
4518
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4519
|
+
className: "ss-help",
|
|
4520
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4521
|
+
type: "button",
|
|
4522
|
+
className: "ss-helpMark",
|
|
4523
|
+
"aria-label": "扫码绑定帮助",
|
|
4524
|
+
children: "?"
|
|
4525
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4526
|
+
className: "ss-helpTip",
|
|
4527
|
+
children: "扫码绑定微信账号:\n· 原理:腾讯 iLink 开放协议——个人微信 Bot API\n· 步骤:生成二维码 → 手机微信「扫一扫」→ 手机上确认\n· 每次扫码绑定一个新账号(可多账号,独立轮询)\n· 二维码 5 分钟有效;无需 OpenClaw/平台审核"
|
|
4528
|
+
})]
|
|
4529
|
+
})
|
|
4530
|
+
]
|
|
4486
4531
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4487
4532
|
className: "ss-rowControl",
|
|
4488
4533
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -4511,13 +4556,28 @@ Instruction-following style:
|
|
|
4511
4556
|
className: "ss-rowCard",
|
|
4512
4557
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4513
4558
|
className: "ss-rowText",
|
|
4514
|
-
children: [
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4559
|
+
children: [
|
|
4560
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4561
|
+
className: "ss-rowName",
|
|
4562
|
+
children: "路由表"
|
|
4563
|
+
}),
|
|
4564
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4565
|
+
className: "ss-rowDesc",
|
|
4566
|
+
children: "微信用户 → skiff 角色(`*` 通配兜底)"
|
|
4567
|
+
}),
|
|
4568
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4569
|
+
className: "ss-help",
|
|
4570
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4571
|
+
type: "button",
|
|
4572
|
+
className: "ss-helpMark",
|
|
4573
|
+
"aria-label": "路由表帮助",
|
|
4574
|
+
children: "?"
|
|
4575
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4576
|
+
className: "ss-helpTip",
|
|
4577
|
+
children: "路由表:微信用户 → skiff 角色映射\n· 格式:[{\"user\": \"xxx@im.wechat\", \"role\": \"zhaocai\"}, ...]\n· user = 微信用户 ID(from_user_id);`*` = 通配兜底\n· role = 该 CCC 已定义的 skiff.roles 角色名\n· 未命中路由的用户不回复(不暴露机器人)"
|
|
4578
|
+
})]
|
|
4579
|
+
})
|
|
4580
|
+
]
|
|
4521
4581
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4522
4582
|
className: "ss-rowControl",
|
|
4523
4583
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -4552,7 +4612,7 @@ Instruction-following style:
|
|
|
4552
4612
|
}
|
|
4553
4613
|
//#endregion
|
|
4554
4614
|
//#region \0sp-css:/home/yh/home/home-serenity/AI_LAB/dsh-serenity-plugin/hooks/dsh-serenity-hooks/src/client/SettingsSection
|
|
4555
|
-
const css = "/* SettingsSection — dsh 原生设置面板 serenity-hooks 简单配置页\n v1.21.1 看齐 dsh 自身:官方 settings 设计语言——\n section > title + intro + group(groupTitle) + rowCard 行卡;\n 全部 --dsw-alias-* token(与 ui-settings-models 同词汇表)。 */\n\n/* 页面容器(官方 .section:flex column gap 12) */\n.ss-section {\n display: flex;\n flex-direction: column;\n gap: 14px;\n max-width: 720px;\n color: var(--dsw-alias-label-primary);\n}\n\n/* 页面标题(官方 .title:16px/24 500) */\n.ss-title {\n margin: 0;\n font-size: 16px;\n line-height: 24px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n/* 页面说明(官方 .intro:14px/22 tertiary) */\n.ss-intro {\n margin: 0;\n font-size: 14px;\n line-height: 22px;\n color: var(--dsw-alias-label-tertiary);\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n/* 分组(多级标题:分组标题 + 行卡列表) */\n.ss-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* 分组标题(二级:12px/18 500 secondary——官方 fieldLabel 风格) */\n.ss-groupTitle {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--dsw-alias-label-secondary);\n}\n\n/* 行卡列表(官方 .rows:无 marker,gap 8) */\n.ss-rows {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* 行卡(官方 .rowCard:border-l2 r12 padding 12/14) */\n.ss-rowCard {\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n padding: 12px 14px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n/* 行卡文本(标题 + 说明 左列) */\n.ss-rowText {\n display: flex;\n flex-direction: column;\n gap: 3px;\n min-width: 0;\n flex: 1;\n}\n\n/* 行卡标题(官方 .rowName:14px/22 500) */\n.ss-rowName {\n font-size: 14px;\n line-height: 22px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n/* 行卡说明(12px/18 tertiary;v1.27.5 紧凑化:默认单行截断,hover title 看全文) */\n.ss-rowDesc {\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n word-break: break-word;\n overflow-wrap: anywhere;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* 行卡控件(右置) */\n.ss-rowControl {\n flex: none;\n display: flex;\n align-items: center;\n}\n\n/* 开关(官方 token 的自绘 toggle:track 22px,thumb 16px) */\n.ss-switch {\n position: relative;\n flex: none;\n width: 40px;\n height: 22px;\n cursor: pointer;\n}\n\n.ss-switch input {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n cursor: pointer;\n}\n\n.ss-switchTrack {\n position: absolute;\n inset: 0;\n border-radius: 11px;\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.3));\n transition: background var(--ds-transition-duration-fast, 0.15s) var(--ds-ease-in-out, ease);\n}\n\n.ss-switchTrack::after {\n content: '';\n position: absolute;\n top: 3px;\n left: 3px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--dsw-alias-label-primary, #eee);\n transition: transform var(--ds-transition-duration-fast, 0.15s) var(--ds-ease-in-out, ease);\n}\n\n.ss-switch input:checked + .ss-switchTrack {\n background: var(--dsw-alias-state-success-primary, #22c55e);\n}\n\n.ss-switch input:checked + .ss-switchTrack::after {\n transform: translateX(18px);\n}\n\n.ss-switch input:disabled + .ss-switchTrack {\n opacity: 0.4;\n cursor: default;\n}\n\n/* 阈值行(滑块 + 值) */\n.ss-threshold {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.ss-threshold input[type='range'] {\n width: 160px;\n}\n\n/* Skiff 调试端口输入(number;关闭时跟随 disabled 半透明) */\n.ss-portInput {\n width: 96px;\n padding: 6px 8px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-fill-l1, rgba(128, 128, 128, 0.08));\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n text-align: right;\n}\n\n.ss-portInput:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.ss-value {\n min-width: 40px;\n font-variant-numeric: tabular-nums;\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n text-align: right;\n}\n\n/* 自主轨迹「立即唤起」按钮(v1.26.14 调试语义;官方 button 语言:primary 弱化) */\n.ss-wakeBtn {\n flex: none;\n padding: 5px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n cursor: pointer;\n transition: opacity var(--ds-transition-duration-fast, 0.15s) ease;\n}\n\n.ss-wakeBtn:hover:not(:disabled) {\n border-color: var(--dsw-alias-state-success-primary, #22c55e);\n color: var(--dsw-alias-state-success-primary, #22c55e);\n}\n\n.ss-wakeBtn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* 底部帮助行 */\n.ss-hint {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n/* 降级提示 */\n.ss-degrade {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-state-warn-label);\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n/* ── v1.27.5 紧凑化:折叠组(details/summary)── */\n.ss-collapse {\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.ss-collapseHead {\n display: flex;\n align-items: baseline;\n gap: 10px;\n padding: 10px 14px;\n cursor: pointer;\n list-style: none;\n user-select: none;\n}\n\n.ss-collapseHead::-webkit-details-marker {\n display: none;\n}\n\n.ss-collapseHead::before {\n content: '▸';\n flex: none;\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary);\n transition: transform 0.15s ease;\n}\n\n.ss-collapse[open] > .ss-collapseHead::before {\n transform: rotate(90deg);\n}\n\n.ss-collapseHead:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(128, 128, 128, 0.06));\n}\n\n.ss-collapseTitle {\n font-size: 13px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.ss-collapseDesc {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n\n.ss-collapseBody {\n padding: 10px 14px 14px;\n border-top: 1px solid var(--dsw-alias-border-l1);\n}\n\n/* ── v1.27.5 紧凑化:只读定义列表(dl/dt/dd 2 列网格)── */\n.ss-defList {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px 20px;\n margin: 0;\n width: 100%;\n min-width: 0;\n}\n\n.ss-defItem {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.ss-defTerm {\n font-size: 11px;\n line-height: 16px;\n font-weight: 500;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.ss-defValue {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n word-break: break-word;\n overflow-wrap: anywhere;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* ── v1.27.5 紧凑化:开关 + 端口内联行 ── */\n.ss-switchRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ── 微信桥(F4c-3,v1.27.0 实验性)── */\n\n/* CCC 选择器(下拉) */\n.ss-select {\n max-width: 280px;\n padding: 6px 8px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-fill-l1, rgba(128, 128, 128, 0.08));\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n/* 扫码绑定按钮(复用 wakeBtn 语言) */\n.ss-loginBtn {\n flex: none;\n padding: 5px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n cursor: pointer;\n transition: opacity var(--ds-transition-duration-fast, 0.15s) ease;\n}\n\n.ss-loginBtn:hover:not(:disabled) {\n border-color: var(--dsw-alias-state-success-primary, #22c55e);\n color: var(--dsw-alias-state-success-primary, #22c55e);\n}\n\n.ss-loginBtn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* 移除账号按钮(危险语义:红边框) */\n.ss-removeBtn {\n flex: none;\n padding: 5px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n cursor: pointer;\n transition: opacity var(--ds-transition-duration-fast, 0.15s) ease;\n}\n\n.ss-removeBtn:hover:not(:disabled) {\n border-color: var(--dsw-alias-state-error-primary, #ef4444);\n color: var(--dsw-alias-state-error-primary, #ef4444);\n}\n\n/* 二维码展示行 */\n.ss-qrRow {\n align-items: center;\n}\n\n.ss-qrSvg {\n flex: none;\n width: 120px; /* v1.27.5 紧凑化:160 → 120 */\n height: 120px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: #fff; /* 二维码需要白底才能被微信扫出 */\n padding: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.ss-qrSvg svg {\n width: 100%;\n height: 100%;\n}\n\n/* 路由表 JSON 编辑框 */\n.ss-routesEditor {\n width: 100%;\n box-sizing: border-box;\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-fill-l1, rgba(128, 128, 128, 0.08));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-family: var(--ds-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);\n resize: vertical;\n}\n";
|
|
4615
|
+
const css = "/* SettingsSection — dsh 原生设置面板 serenity-hooks 简单配置页\n v1.21.1 看齐 dsh 自身:官方 settings 设计语言——\n section > title + intro + group(groupTitle) + rowCard 行卡;\n 全部 --dsw-alias-* token(与 ui-settings-models 同词汇表)。 */\n\n/* 页面容器(官方 .section:flex column gap 12) */\n.ss-section {\n display: flex;\n flex-direction: column;\n gap: 14px;\n max-width: 720px;\n color: var(--dsw-alias-label-primary);\n}\n\n/* 页面标题(官方 .title:16px/24 500) */\n.ss-title {\n margin: 0;\n font-size: 16px;\n line-height: 24px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n/* 页面说明(官方 .intro:14px/22 tertiary) */\n.ss-intro {\n margin: 0;\n font-size: 14px;\n line-height: 22px;\n color: var(--dsw-alias-label-tertiary);\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n/* 分组(多级标题:分组标题 + 行卡列表) */\n.ss-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* 分组标题(二级:12px/18 500 secondary——官方 fieldLabel 风格) */\n.ss-groupTitle {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--dsw-alias-label-secondary);\n}\n\n/* 行卡列表(官方 .rows:无 marker,gap 8) */\n.ss-rows {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* 行卡(官方 .rowCard:border-l2 r12 padding 12/14) */\n.ss-rowCard {\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n padding: 12px 14px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n/* 行卡文本(标题 + 说明 左列) */\n.ss-rowText {\n display: flex;\n flex-direction: column;\n gap: 3px;\n min-width: 0;\n flex: 1;\n}\n\n/* 行卡标题(官方 .rowName:14px/22 500) */\n.ss-rowName {\n font-size: 14px;\n line-height: 22px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n/* 行卡说明(12px/18 tertiary;v1.27.5 紧凑化:默认单行截断,hover title 看全文) */\n.ss-rowDesc {\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n word-break: break-word;\n overflow-wrap: anywhere;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* 行卡控件(右置) */\n.ss-rowControl {\n flex: none;\n display: flex;\n align-items: center;\n}\n\n/* 开关(官方 token 的自绘 toggle:track 22px,thumb 16px) */\n.ss-switch {\n position: relative;\n flex: none;\n width: 40px;\n height: 22px;\n cursor: pointer;\n}\n\n.ss-switch input {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n cursor: pointer;\n}\n\n.ss-switchTrack {\n position: absolute;\n inset: 0;\n border-radius: 11px;\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.3));\n transition: background var(--ds-transition-duration-fast, 0.15s) var(--ds-ease-in-out, ease);\n}\n\n.ss-switchTrack::after {\n content: '';\n position: absolute;\n top: 3px;\n left: 3px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--dsw-alias-label-primary, #eee);\n transition: transform var(--ds-transition-duration-fast, 0.15s) var(--ds-ease-in-out, ease);\n}\n\n.ss-switch input:checked + .ss-switchTrack {\n background: var(--dsw-alias-state-success-primary, #22c55e);\n}\n\n.ss-switch input:checked + .ss-switchTrack::after {\n transform: translateX(18px);\n}\n\n.ss-switch input:disabled + .ss-switchTrack {\n opacity: 0.4;\n cursor: default;\n}\n\n/* 阈值行(滑块 + 值) */\n.ss-threshold {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.ss-threshold input[type='range'] {\n width: 160px;\n}\n\n/* Skiff 调试端口输入(number;关闭时跟随 disabled 半透明) */\n.ss-portInput {\n width: 96px;\n padding: 6px 8px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-fill-l1, rgba(128, 128, 128, 0.08));\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n text-align: right;\n}\n\n.ss-portInput:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.ss-value {\n min-width: 40px;\n font-variant-numeric: tabular-nums;\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n text-align: right;\n}\n\n/* 自主轨迹「立即唤起」按钮(v1.26.14 调试语义;官方 button 语言:primary 弱化) */\n.ss-wakeBtn {\n flex: none;\n padding: 5px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n cursor: pointer;\n transition: opacity var(--ds-transition-duration-fast, 0.15s) ease;\n}\n\n.ss-wakeBtn:hover:not(:disabled) {\n border-color: var(--dsw-alias-state-success-primary, #22c55e);\n color: var(--dsw-alias-state-success-primary, #22c55e);\n}\n\n.ss-wakeBtn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* 底部帮助行 */\n.ss-hint {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n/* 降级提示 */\n.ss-degrade {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-state-warn-label);\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n/* ── v1.27.5 紧凑化:折叠组(details/summary)── */\n.ss-collapse {\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.ss-collapseHead {\n display: flex;\n align-items: baseline;\n gap: 10px;\n padding: 10px 14px;\n cursor: pointer;\n list-style: none;\n user-select: none;\n}\n\n.ss-collapseHead::-webkit-details-marker {\n display: none;\n}\n\n.ss-collapseHead::before {\n content: '▸';\n flex: none;\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary);\n transition: transform 0.15s ease;\n}\n\n.ss-collapse[open] > .ss-collapseHead::before {\n transform: rotate(90deg);\n}\n\n.ss-collapseHead:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(128, 128, 128, 0.06));\n}\n\n.ss-collapseTitle {\n font-size: 13px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.ss-collapseDesc {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n\n.ss-collapseBody {\n padding: 10px 14px 14px;\n border-top: 1px solid var(--dsw-alias-border-l1);\n}\n\n/* ── v1.27.5 紧凑化:只读定义列表(dl/dt/dd 2 列网格)── */\n.ss-defList {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px 20px;\n margin: 0;\n width: 100%;\n min-width: 0;\n}\n\n.ss-defItem {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.ss-defTerm {\n font-size: 11px;\n line-height: 16px;\n font-weight: 500;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.ss-defValue {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n word-break: break-word;\n overflow-wrap: anywhere;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* ── v1.27.5 紧凑化:开关 + 端口内联行 ── */\n.ss-switchRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ── v1.27.6 「?」帮助浮层(hover/焦点显示三行以上严谨说明)── */\n.ss-help {\n position: relative;\n display: inline-flex;\n align-items: center;\n margin-top: 2px;\n}\n\n.ss-helpMark {\n flex: none;\n width: 16px;\n height: 16px;\n padding: 0;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 50%;\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-tertiary);\n font-size: 10px;\n line-height: 1;\n font-weight: 600;\n cursor: help;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: border-color 0.15s ease, color 0.15s ease;\n}\n\n.ss-helpMark:hover,\n.ss-helpMark:focus-visible {\n border-color: var(--dsw-alias-state-success-primary, #22c55e);\n color: var(--dsw-alias-state-success-primary, #22c55e);\n outline: none;\n}\n\n.ss-helpTip {\n position: absolute;\n left: 0;\n top: calc(100% + 6px);\n z-index: 30;\n width: 300px;\n max-width: 60vw;\n padding: 10px 12px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 10px;\n background: var(--dsw-alias-surface-raised, #1e1e1e);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.28);\n font-size: 12px;\n line-height: 19px;\n font-weight: 400;\n color: var(--dsw-alias-label-primary);\n white-space: pre-line;\n word-break: break-word;\n opacity: 0;\n pointer-events: none;\n transform: translateY(-4px);\n transition: opacity 0.15s ease, transform 0.15s ease;\n}\n\n.ss-help:hover .ss-helpTip,\n.ss-helpMark:focus-visible + .ss-helpTip {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n/* 折叠组内帮助浮层定位修正(左侧行卡不会溢出面板) */\n.ss-rowCard .ss-helpTip {\n left: 0;\n}\n\n/* ── 微信桥(F4c-3,v1.27.0 实验性)── */\n\n/* CCC 选择器(下拉) */\n.ss-select {\n max-width: 280px;\n padding: 6px 8px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-fill-l1, rgba(128, 128, 128, 0.08));\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n/* 扫码绑定按钮(复用 wakeBtn 语言) */\n.ss-loginBtn {\n flex: none;\n padding: 5px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n cursor: pointer;\n transition: opacity var(--ds-transition-duration-fast, 0.15s) ease;\n}\n\n.ss-loginBtn:hover:not(:disabled) {\n border-color: var(--dsw-alias-state-success-primary, #22c55e);\n color: var(--dsw-alias-state-success-primary, #22c55e);\n}\n\n.ss-loginBtn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* 移除账号按钮(危险语义:红边框) */\n.ss-removeBtn {\n flex: none;\n padding: 5px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-interactive-bg-active, rgba(128, 128, 128, 0.12));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n cursor: pointer;\n transition: opacity var(--ds-transition-duration-fast, 0.15s) ease;\n}\n\n.ss-removeBtn:hover:not(:disabled) {\n border-color: var(--dsw-alias-state-error-primary, #ef4444);\n color: var(--dsw-alias-state-error-primary, #ef4444);\n}\n\n/* 二维码展示行 */\n.ss-qrRow {\n align-items: center;\n}\n\n.ss-qrSvg {\n flex: none;\n width: 120px; /* v1.27.5 紧凑化:160 → 120 */\n height: 120px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: #fff; /* 二维码需要白底才能被微信扫出 */\n padding: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.ss-qrSvg svg {\n width: 100%;\n height: 100%;\n}\n\n/* 路由表 JSON 编辑框 */\n.ss-routesEditor {\n width: 100%;\n box-sizing: border-box;\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-fill-l1, rgba(128, 128, 128, 0.08));\n color: var(--dsw-alias-label-primary);\n font-size: 12px;\n line-height: 18px;\n font-family: var(--ds-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);\n resize: vertical;\n}\n";
|
|
4556
4616
|
if (typeof document !== "undefined" && document.querySelector("style[data-sp-css=\"SettingsSection\"]") === null) {
|
|
4557
4617
|
const tag = document.createElement("style");
|
|
4558
4618
|
tag.setAttribute("data-sp-css", "SettingsSection");
|
|
@@ -4576,20 +4636,36 @@ Instruction-following style:
|
|
|
4576
4636
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "ss-switchTrack" })]
|
|
4577
4637
|
});
|
|
4578
4638
|
}
|
|
4579
|
-
/** 一个配置行卡(官方 rowCard:标题+说明 左列 / 控件右置)
|
|
4639
|
+
/** 一个配置行卡(官方 rowCard:标题+说明 左列 / 控件右置)
|
|
4640
|
+
* help:可选——desc 下方渲染「?」帮助浮层(hover/焦点显示三行以上严谨说明) */
|
|
4580
4641
|
function RowCard(props) {
|
|
4581
|
-
const { title, desc, control } = props;
|
|
4642
|
+
const { title, desc, control, help } = props;
|
|
4582
4643
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4583
4644
|
className: "ss-rowCard",
|
|
4584
4645
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4585
4646
|
className: "ss-rowText",
|
|
4586
|
-
children: [
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4647
|
+
children: [
|
|
4648
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4649
|
+
className: "ss-rowName",
|
|
4650
|
+
children: title
|
|
4651
|
+
}),
|
|
4652
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4653
|
+
className: "ss-rowDesc",
|
|
4654
|
+
children: desc
|
|
4655
|
+
}),
|
|
4656
|
+
help && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4657
|
+
className: "ss-help",
|
|
4658
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4659
|
+
type: "button",
|
|
4660
|
+
className: "ss-helpMark",
|
|
4661
|
+
"aria-label": `${title} 帮助`,
|
|
4662
|
+
children: "?"
|
|
4663
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4664
|
+
className: "ss-helpTip",
|
|
4665
|
+
children: help
|
|
4666
|
+
})]
|
|
4667
|
+
})
|
|
4668
|
+
]
|
|
4593
4669
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4594
4670
|
className: "ss-rowControl",
|
|
4595
4671
|
children: control
|
|
@@ -4699,7 +4775,8 @@ Instruction-following style:
|
|
|
4699
4775
|
title: "访问",
|
|
4700
4776
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4701
4777
|
title: "双端口网关",
|
|
4702
|
-
desc: "
|
|
4778
|
+
desc: "额外监听端口 3081,登录后可从外部访问 Web UI",
|
|
4779
|
+
help: "双端口网关(端口 3081)让外网/局域网用户经登录页访问本 DSH Web UI:\n· 适用范围:跨网络访问(本机默认端口 3080 仅监听本机)\n· 安全:登录账号 + 可选 TOTP 第二因素(见「外部访问」)\n· 工作区白名单:登录后仅白名单内工作区可见(可留空=全部)\n· 变更立即生效(热重建,无需重启)",
|
|
4703
4780
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
|
|
4704
4781
|
checked: gatewayOn,
|
|
4705
4782
|
onChange: (on) => toggle("gatewayEnabled", on)
|
|
@@ -4711,6 +4788,7 @@ Instruction-following style:
|
|
|
4711
4788
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4712
4789
|
title: "超限重建",
|
|
4713
4790
|
desc: "上下文接近上限时提示调用 session_rebuild 清空重建",
|
|
4791
|
+
help: "上下文超限自动重建(session_rebuild):\n· 机制:agent 上下文占用达到阈值时,由 LLM 主动调用重建工具\n· 语义:完全丢弃当前 dsh 会话 + 自动新建 + 注入「继续原 SESSION 的工作」\n· 效果:SESSION.md 原位不动,认知轨迹延续,上下文归零\n· 关闭后:上下文超限时不再提示,可能导致会话卡顿或丢失",
|
|
4714
4792
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
|
|
4715
4793
|
checked: rebuildOn,
|
|
4716
4794
|
onChange: (on) => toggle("rebuildEnabled", on)
|
|
@@ -4718,6 +4796,7 @@ Instruction-following style:
|
|
|
4718
4796
|
}) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4719
4797
|
title: "重建阈值",
|
|
4720
4798
|
desc: "上下文占用达到该比例时提示(0.10 ~ 1.00)",
|
|
4799
|
+
help: "重建触发阈值(0.10~1.00,默认 0.90):\n· 含义:上下文占用达到该比例时,轨迹跟踪器开始提醒重建\n· 调低:更早触发(适合长任务,避免上下文耗尽前措手不及)\n· 调高:更晚触发(适合短对话,减少不必要的重建提示)\n· 仅「超限重建」开启时有意义",
|
|
4721
4800
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4722
4801
|
className: "ss-threshold",
|
|
4723
4802
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
@@ -4740,7 +4819,8 @@ Instruction-following style:
|
|
|
4740
4819
|
children: [
|
|
4741
4820
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4742
4821
|
title: "Skiff 调试",
|
|
4743
|
-
desc: "Skiff
|
|
4822
|
+
desc: "Skiff 认知子集问答页(端口 3099,实验性,127.0.0.1)",
|
|
4823
|
+
help: "Skiff 认知子集角色调试服务(端口 3099):\n· 概念:Skiff = 完整宁静号 trajectory 的任意子集(认知子集角色)\n· 服务:角色问答页(调试用),仅监听 127.0.0.1(本地)\n· 使用:配置 CCC 的 skiff.roles 角色后,可经此页以角色身份问答\n· 实验性:人工启停,默认关闭;对外问答请用「Skiff 问答页」",
|
|
4744
4824
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4745
4825
|
className: "ss-switchRow",
|
|
4746
4826
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
|
|
@@ -4760,7 +4840,8 @@ Instruction-following style:
|
|
|
4760
4840
|
}) }),
|
|
4761
4841
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4762
4842
|
title: "ACP JSON-RPC",
|
|
4763
|
-
desc: "程序化调用 Skiff
|
|
4843
|
+
desc: "程序化调用 Skiff 角色(端口 3100,实验性,127.0.0.1)",
|
|
4844
|
+
help: "ACP(Agent Client Protocol)HTTP JSON-RPC 端点(端口 3100):\n· 作用:程序化调用 Skiff 角色(指定 CCC + 角色 + 会话)\n· 形态:HTTP JSON-RPC 服务,仅监听 127.0.0.1(本地)\n· 场景:IM 桥(如微信桥)、脚本、自动化接线\n· 实验性:人工启停,默认关闭;与「Skiff 问答页」共用端口",
|
|
4764
4845
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
4765
4846
|
className: "ss-switchRow",
|
|
4766
4847
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
|
|
@@ -4773,14 +4854,15 @@ Instruction-following style:
|
|
|
4773
4854
|
max: 65535,
|
|
4774
4855
|
value: acpPort,
|
|
4775
4856
|
disabled: !acpOn && !publicAskOn,
|
|
4776
|
-
title: "ACP +
|
|
4857
|
+
title: "ACP + Skiff 问答共用端口(默认 3100)",
|
|
4777
4858
|
onChange: (e) => setAcpPort(Number(e.target.value))
|
|
4778
4859
|
})]
|
|
4779
4860
|
})
|
|
4780
4861
|
}) }),
|
|
4781
4862
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4782
|
-
title: "
|
|
4783
|
-
desc: "
|
|
4863
|
+
title: "Skiff 问答页",
|
|
4864
|
+
desc: "按认知容器暴露问答页(端口 3100,需 key)",
|
|
4865
|
+
help: "Skiff 问答页(对外问答,端口 3100,key 认证):\n· 作用:让外部用户在浏览器中与指定 CCC 的 Skiff 角色对话\n· 认证:访问 key(首次开启自动生成,见 ~/.dsh/serenity-hooks.json)\n· 授权:开放容器白名单(未选 = 全部开放;见「Skiff 问答页配置」)\n· 外部接入:需经部署方自选方案暴露(隧道/反代/端口映射)\n· 安全:key 可轮换(旧 key 立即失效)",
|
|
4784
4866
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
|
|
4785
4867
|
checked: publicAskOn,
|
|
4786
4868
|
onChange: (on) => toggle("publicAskEnabled", on)
|
|
@@ -4789,13 +4871,13 @@ Instruction-following style:
|
|
|
4789
4871
|
]
|
|
4790
4872
|
}),
|
|
4791
4873
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
4792
|
-
title: "
|
|
4874
|
+
title: "Skiff 问答页配置",
|
|
4793
4875
|
desc: "开放容器白名单 · 访问 key 与地址",
|
|
4794
4876
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PublicAskEditor, { publicAskOn })
|
|
4795
4877
|
}),
|
|
4796
4878
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
4797
4879
|
title: "外部访问",
|
|
4798
|
-
desc: "
|
|
4880
|
+
desc: "网关监听(端口 3081)· 登录账号 · 工作区白名单(plugin 全局)",
|
|
4799
4881
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AccountsEditor, { gatewayOn })
|
|
4800
4882
|
}),
|
|
4801
4883
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
@@ -4803,19 +4885,15 @@ Instruction-following style:
|
|
|
4803
4885
|
desc: "persona 输出风格(默认关闭)",
|
|
4804
4886
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PersonaEditor, {})
|
|
4805
4887
|
}),
|
|
4806
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
4807
|
-
|
|
4808
|
-
|
|
4809
|
-
|
|
4810
|
-
children: "Autopilot Trajectory"
|
|
4811
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AutopilotTrajectoryStatusBlock, {})]
|
|
4888
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
4889
|
+
title: "Autopilot Trajectory",
|
|
4890
|
+
desc: "多 CCC 自动巡航轨迹 · 状态与立即唤起",
|
|
4891
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AutopilotTrajectoryStatusBlock, {})
|
|
4812
4892
|
}),
|
|
4813
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
4814
|
-
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
children: "微信桥"
|
|
4818
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeixinBridgeEditor, {})]
|
|
4893
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
4894
|
+
title: "微信桥",
|
|
4895
|
+
desc: "扫码绑定微信账号 · 路由到 skiff 角色",
|
|
4896
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeixinBridgeEditor, {})
|
|
4819
4897
|
})
|
|
4820
4898
|
]
|
|
4821
4899
|
});
|
|
@@ -4918,6 +4996,7 @@ Instruction-following style:
|
|
|
4918
4996
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4919
4997
|
title: "目标 CCC",
|
|
4920
4998
|
desc: "多 CCC 各自独立——选中哪个就查看/唤起哪个",
|
|
4999
|
+
help: "Autopilot Trajectory 目标认知容器:\n· 机制:dsh 一个进程可挂载多个 CCC,每个 CCC 的 autopilot 独立配置\n· 选择:下拉切换要查看/唤起的目标 CCC(各 CCC 时钟独立)\n· 配置:各 CCC 在自身 .opencode/serenity.json 定义 autopilotTrajectory\n· 唤起:仅对选中 CCC 生效,互不干扰",
|
|
4921
5000
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
4922
5001
|
className: "ss-select",
|
|
4923
5002
|
value: selectedRoot,
|
|
@@ -4937,6 +5016,7 @@ Instruction-following style:
|
|
|
4937
5016
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4938
5017
|
title: "运行状态",
|
|
4939
5018
|
desc: stateText,
|
|
5019
|
+
help: "Autopilot Trajectory 运行状态含义:\n· 未配置:该 CCC 未定义 autopilotTrajectory(机制不开始)\n· 已配置未启用:enabled=false,零资源占用(不唤起不消耗)\n· 已启用:时钟驱动周期性自动唤起——无人类活动满间隔小时数后\n 启动一次前台 agent 轮(用户全程可见可介入)",
|
|
4940
5020
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4941
5021
|
className: "ss-value",
|
|
4942
5022
|
children: status.enabled ? "● 运行中" : status.configured ? "○ 待启" : "—"
|
|
@@ -4974,6 +5054,7 @@ Instruction-following style:
|
|
|
4974
5054
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
|
|
4975
5055
|
title: "立即唤起",
|
|
4976
5056
|
desc: wakeResult ?? "调试:手动触发一次(跳过窗口/间隔/预算,仍校验配置与偏见脚本)",
|
|
5057
|
+
help: "立即唤起(调试语义):\n· 用途:手动触发一次该 CCC 的自动唤起(不等时钟)\n· 跳过:唤起窗口(北京 8~18 点避开)/ 间隔 / 每日预算\n· 保留校验:enabled、目标会话(--auto)、偏见脚本可运行\n· 场景:验证配置/偏见脚本是否就绪,或想立刻跑一轮",
|
|
4977
5058
|
control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4978
5059
|
type: "button",
|
|
4979
5060
|
className: "ss-wakeBtn",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shgroup/dsh-serenity-hooks",
|
|
3
|
-
"version": "1.27.
|
|
3
|
+
"version": "1.27.6",
|
|
4
4
|
"description": "宁静号 ACC harness — Native Cordis 插件(DeepSeek Harness 运行时)。真实 DSH 工具注册(cc_fs/session/acc_msm 等 9 工具)+ 拦截缝机械约束(safe-mode/路径守卫/会话落盘)+ 系统提示词注入(ACC/CCE/Constraints/SKILL/Session 五块)。适配 DSH 公开版(deepseek-ai/deepseek-harness 0.1.0-rc)。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|