@shgroup/dsh-serenity-hooks 1.30.13 → 1.30.14

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "dsh-serenity-hooks",
3
- "version": "1.30.13",
3
+ "version": "1.30.14",
4
4
  "main": "lib/index.js",
5
5
  "description": "宁静号 ACC harness(Native Cordis 插件):给 DSH 装一个「AI 工作区」——10 个工具(container_fs/logbook/dashboard/container_git/msm/praxis/handyman/localstore/container_admin/autopilot-trajectory)+ 机械约束(安全模式/工作区围墙/密钥守卫)+ 工作日志与原地重建 + 网页登录入口/微信桥/子角色/对外问答页/自主巡航。适配 DSH 0.1.2-rc.1(deepseek-ai/deepseek-harness)。",
6
6
  "engines": {
package/lib/index.js CHANGED
@@ -10464,12 +10464,20 @@ function apply(ctx, config) {
10464
10464
  * `root ?? undefined` 而正常启动)。现形态三层触发(用户"锚定要准确"同源要求):
10465
10465
  * ① 启动时同步一次 ② 定位失败 → 定时退避重试(1s/3s/8s/20s/40s,共 5 次)
10466
10466
  * ③ 首个 live 会话就绪(`agent/session-start` / `session/created`)→ 立即再试一次。
10467
+ *
10468
+ * v1.30.14(重启日志实证后的收敛):**并发启动守卫** + 首次未定位降级为信息级日志。
10469
+ * - 实证(v1.30.13 重启日志):重试定时器与"会话就绪"事件几乎同时触发 → 两次 sync 都
10470
+ * 看到 `started === false` → **两次 start**(第一次绑定成功、第二次 `EADDRINUSE` 刷错误日志)。
10471
+ * → 加 `starting` 在飞标志(启动 Promise settle 前不再重复发起)。
10472
+ * - 首次未定位**不是失败**(apply 时无 live 会话是常态)→ 用 `console.log` 说明"等待 live 会话",
10473
+ * 只有**退避重试耗尽**才 `console.warn` 报错(失败语义只留给真正失败)。
10467
10474
  */
10468
10475
  function registerSkiff(ctx) {
10469
10476
  let started = false;
10477
+ let starting = false;
10470
10478
  let retryTimer = null;
10471
10479
  let retries = 0;
10472
- let warnedRoot = false;
10480
+ let informedRoot = false;
10473
10481
  const clearRetry = () => {
10474
10482
  if (retryTimer !== null) {
10475
10483
  clearTimeout(retryTimer);
@@ -10478,7 +10486,7 @@ function registerSkiff(ctx) {
10478
10486
  };
10479
10487
  /** 退避重试定位 CCC root(幂等:已有待执行重试则不再排) */
10480
10488
  const scheduleRootRetry = () => {
10481
- if (retryTimer !== null || started) return;
10489
+ if (retryTimer !== null || started || starting) return;
10482
10490
  if (retries >= SKIFF_ROOT_RETRY_DELAYS_MS.length) {
10483
10491
  console.warn(`[serenity-hooks] ✗ Skiff 调试服务未启动:重试 ${retries} 次仍无法定位 CCC root(进程 cwd 与 live 会话均无 .serenity)`);
10484
10492
  return;
@@ -10493,23 +10501,26 @@ function registerSkiff(ctx) {
10493
10501
  };
10494
10502
  function sync() {
10495
10503
  const s = readSimpleSettings();
10496
- if (s.skiffEnabled && !started) {
10504
+ if (s.skiffEnabled && !started && !starting) {
10497
10505
  const root = resolveSkiffRoot(ctx);
10498
10506
  if (!root) {
10499
- if (!warnedRoot) {
10500
- warnedRoot = true;
10501
- console.warn("[serenity-hooks] Skiff 调试服务未启动:无法定位 CCC root(进程 cwd 与 live 会话均无 .serenity)——已排入退避重试");
10507
+ if (!informedRoot) {
10508
+ informedRoot = true;
10509
+ console.log("[serenity-hooks] Skiff 调试服务等待 CCC root(此刻无 live 会话;已排入退避重试,会话就绪即试)");
10502
10510
  }
10503
10511
  scheduleRootRetry();
10504
10512
  return;
10505
10513
  }
10506
10514
  clearRetry();
10507
10515
  const webPort = readWebPort(ctx);
10516
+ starting = true;
10508
10517
  startSkiffDebugServer(ctx, root, s.skiffDebugPort, webPort).then(() => {
10509
10518
  started = true;
10510
10519
  if (retries > 0) console.info(`[serenity-hooks] ✓ Skiff 调试服务已启动(重试 ${retries} 次后定位到 CCC root: ${root})`);
10511
10520
  }).catch((err) => {
10512
10521
  console.error(`[serenity-hooks] ✗ Skiff 调试服务启动失败: ${String(err?.message ?? err)}`);
10522
+ }).finally(() => {
10523
+ starting = false;
10513
10524
  });
10514
10525
  } else if (!s.skiffEnabled && started) {
10515
10526
  stopSkiffDebugServer();
@@ -10517,7 +10528,7 @@ function registerSkiff(ctx) {
10517
10528
  } else if (!s.skiffEnabled) {
10518
10529
  clearRetry();
10519
10530
  retries = 0;
10520
- warnedRoot = false;
10531
+ informedRoot = false;
10521
10532
  }
10522
10533
  }
10523
10534
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shgroup/dsh-serenity-hooks",
3
- "version": "1.30.13",
3
+ "version": "1.30.14",
4
4
  "description": "宁静号 ACC harness(Native Cordis 插件)——给 DeepSeek Harness 装一个「AI 工作区」:10 个工具(container_fs/logbook/dashboard/container_git/msm/praxis/handyman/localstore/container_admin/autopilot-trajectory)+ 机械约束(安全模式/工作区围墙/密钥守卫/对外输出守卫)+ 工作日志与原地重建 + 网页登录入口/微信桥/子角色/对外问答页/自主巡航。适配 DSH 0.1.2-rc.1。",
5
5
  "license": "MIT",
6
6
  "repository": {