dsh-session-guard 4.1.5 → 4.1.15
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/CHANGELOG.ja.md +12 -0
- package/CHANGELOG.ko.md +12 -0
- package/CHANGELOG.md +86 -0
- package/dsh.plugin.json +16 -16
- package/lib/client.js +296 -116
- package/lib/client.js.map +1 -1
- package/package.json +4 -2
- package/src/client/family-section.tsx +26 -6
- package/src/client/index.ts +111 -54
- package/src/client/settings-bridge.ts +202 -0
- package/src/client/settings-card.tsx +9 -3
- package/src/index.js +16 -0
- package/src/settings-bridge.js +141 -0
- package/src/client/shell-overlay.tsx +0 -69
package/CHANGELOG.ja.md
CHANGED
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
- [Changelog на русском](./CHANGELOG.ru.md)
|
|
12
12
|
- [Changelog en español](./CHANGELOG.es.md)
|
|
13
13
|
|
|
14
|
+
## 4.1.14 — 2026-10-08
|
|
15
|
+
|
|
16
|
+
### 削除
|
|
17
|
+
|
|
18
|
+
## 4.1.13 — 2026-10-08
|
|
19
|
+
|
|
20
|
+
### 修正 — ≤0.1.5 でのブリッジ記述子スケルトン(5セルゲートで発覚)
|
|
21
|
+
|
|
22
|
+
- **≤0.1.5 ホストの describe `value` はフィールドスケルトン**(実測:`{enabled:{},…}`、実値は `base`+`user` 層)。旧世代で `descriptor.value` をそのまま消費すると `officialProviders` が `{}` になり `?? []` を素通りして `ListRow` の `values.join` が throw、`dsh-family.tab` スロット全体が殉葬していた。`descriptorPlainValue()` がスケルトンを検出して `{...base, ...user}` を再構築。
|
|
23
|
+
- **カード字段消毒(多層防御)**:スロットは一つの描画エラーで全族タブが死ぬため、`ListRow` 入力を `toList()` で無毒化、`拦截方式` セレクトは非 `error` 値を `hold` にフォールバック。
|
|
24
|
+
- 5セルファームゲートで検証:0.1.0/0.1.5 はブリッジ経由、0.1.7 は configForms 経由でシード値 `321123` の読み返しを確認。
|
|
25
|
+
|
|
14
26
|
## 4.0.0 — 2026-09-29
|
|
15
27
|
|
|
16
28
|
### Changed
|
package/CHANGELOG.ko.md
CHANGED
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
- [Changelog на русском](./CHANGELOG.ru.md)
|
|
12
12
|
- [Changelog en español](./CHANGELOG.es.md)
|
|
13
13
|
|
|
14
|
+
## 4.1.14 — 2026-10-08
|
|
15
|
+
|
|
16
|
+
### 제거
|
|
17
|
+
|
|
18
|
+
## 4.1.13 — 2026-10-08
|
|
19
|
+
|
|
20
|
+
### 수정 — ≤0.1.5 브리지 디스크립터 스켈레톤(5셀 게이트 발견)
|
|
21
|
+
|
|
22
|
+
- **≤0.1.5 호스트의 describe `value`는 필드 스켈레톤**(실측: `{enabled:{},…}`, 실값은 `base`+`user` 레이어). 구세대에서 `descriptor.value`를 그대로 쓰면 `officialProviders`가 `{}`가 되어 `?? []`를 통과하고 `ListRow`의 `values.join`이 throw, `dsh-family.tab` 슬롯 전체가 순직.`descriptorPlainValue()`가 스켈레톤을 감지해 `{...base, ...user}`로 재구성.
|
|
23
|
+
- **카드 필드 소독(다층 방어)**: 슬롯은 렌더 오류 하나로 전체 탭이 죽으므로 `ListRow` 입력을 `toList()`로 무독화, `拦截方式` 셀렉트는 non-`error` 값을 `hold`로 폴백.
|
|
24
|
+
- 5셀 팜 게이트 검증: 0.1.0/0.1.5는 브리지 경유, 0.1.7은 configForms 경유로 시드값 `321123` 재판독 확인.
|
|
25
|
+
|
|
14
26
|
## 4.0.0 — 2026-09-29
|
|
15
27
|
|
|
16
28
|
### Changed
|
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,92 @@ All notable changes to `dsh-session-guard` are recorded here. Versions follow se
|
|
|
11
11
|
- [Changelog на русском](./CHANGELOG.ru.md)
|
|
12
12
|
- [Changelog en español](./CHANGELOG.es.md)
|
|
13
13
|
|
|
14
|
+
## 4.1.14 — 2026-10-08
|
|
15
|
+
|
|
16
|
+
### Removed
|
|
17
|
+
|
|
18
|
+
## 4.1.13 — 2026-10-08
|
|
19
|
+
|
|
20
|
+
### Fixed — bridge descriptor skeleton on ≤0.1.5 (five-cell gate catch, 2026-10-08)
|
|
21
|
+
|
|
22
|
+
- **Host describe `value` is a field skeleton on ≤0.1.5** (0.1.0/0.1.5 empirical):
|
|
23
|
+
the old host generations serialize `descriptor.value` as `{enabled:{},…,officialProviders:{}}`
|
|
24
|
+
(one empty object per schema field) while the real merged config lives in
|
|
25
|
+
`descriptor.base` (combined defaults) + `descriptor.user` (user layer).
|
|
26
|
+
`BridgeDocHandle` consumed `value` verbatim, so `officialProviders` arrived as
|
|
27
|
+
`{}` — truthy non-array, invisible to `?? []` — and `ListRow`'s
|
|
28
|
+
`values.join` threw, crashing the whole `dsh-family.tab` slot (guard card +
|
|
29
|
+
IT card + TL nav all died together). `descriptorPlainValue()` now detects the
|
|
30
|
+
skeleton (object whose every own value is an empty plain object — impossible
|
|
31
|
+
for guard's scalar/array config) and rebuilds the effective value as
|
|
32
|
+
`{...base, ...user}` (shallow merge is exact for guard's flat config).
|
|
33
|
+
- **Card-field sanitization (defense in depth)**: any card render error kills
|
|
34
|
+
the entire family tab slot on these hosts, so `ListRow` inputs are now
|
|
35
|
+
sanitized at the call sites (`toList()` — non-arrays become `[]`) and the
|
|
36
|
+
`拦截方式` select falls back to `hold` for any non-`error` value. A malformed
|
|
37
|
+
descriptor may degrade one field, never the tab.
|
|
38
|
+
- Verified on the five-cell farm gate: describe replays on 0.1.0/0.1.5 now
|
|
39
|
+
yield plain merged values; the seeded `stepGateTimeoutMs: 321123` reads back
|
|
40
|
+
through the bridge on ≤0.1.5 and natively (configForms) on 0.1.7.
|
|
41
|
+
|
|
42
|
+
## 4.1.12 — 2026-10-08
|
|
43
|
+
|
|
44
|
+
### Added — settings webServer bridge (M4/T20-b): dual-track card data plane
|
|
45
|
+
|
|
46
|
+
- **Top-level card registration refactor (prerequisite)**: the three settings
|
|
47
|
+
faces (`dsh-family.tab`, `plugins.bundle.config`, `settings.plugin.item`,
|
|
48
|
+
`shell.overlay`) were registered inside the `onScope` callback of the dual
|
|
49
|
+
scoped-inject waist — on ≤0.1.5 that callback never fires (settingsScope fiber
|
|
50
|
+
never resolves; 0.1.0/0.1.1 lack both services), so the cards never registered
|
|
51
|
+
and a bridge would have had no consumer. All registrations now run at apply
|
|
52
|
+
top level with a `scopeRef` live reference; the callback degrades to a pure
|
|
53
|
+
data arm (perm-gate `client/index.ts` L166-257 shape).
|
|
54
|
+
- **Server bridge** (`src/settings-bridge.js`): `describe`/`mutate` endpoints at
|
|
55
|
+
`/api/session-guard/settings/*` (POST-only, `{ok,value|error}` envelope,
|
|
56
|
+
redacted describe filtered to the plugin ns, ops forwarded to the host
|
|
57
|
+
settings service with `expectedRevision` optimistic concurrency, 256 KB cap).
|
|
58
|
+
Registration is fail-open (error log, never blocks plugin load).
|
|
59
|
+
- **Client bridge handle** (`src/client/settings-bridge.ts`): `BridgeDocHandle`
|
|
60
|
+
implements the same `SettingsScope` face as the native handles
|
|
61
|
+
(getSnapshot/subscribe/set/unset); describe misses retry within a bounded
|
|
62
|
+
budget (settings service resolving later than card mount) before landing on
|
|
63
|
+
`unavailable`. Card faces read `scopeRef.scope ?? bridgeScope()` — native
|
|
64
|
+
first, bridge fallback (perm-gate T13b dual-track). **Generation split in the
|
|
65
|
+
data arm (five-cell empirical, 2026-10-08 night)**: on 0.1.2/0.1.5 the
|
|
66
|
+
`settingsScope` handle is write-alive but read-dead — `set()` persists to
|
|
67
|
+
settings.yaml while `getSnapshot().value` stays `undefined`, so that arm
|
|
68
|
+
deliberately leaves `scopeRef` empty and the card falls to the bridge (bridge
|
|
69
|
+
mutate lands in the same host service; describe heals the read path).
|
|
70
|
+
|
|
71
|
+
### Corrected — 4.1.11 publication note
|
|
72
|
+
|
|
73
|
+
- The 4.1.11 entry said "none of 4.1.5-4.1.10 was published to npm"; **4.1.5
|
|
74
|
+
was published** (npm registry confirms `4.1.5` in versions, and `latest`
|
|
75
|
+
pointed at it until this release line). 4.1.6-4.1.10 indeed never shipped.
|
|
76
|
+
The earlier claim came from reading the npmmirror mirror instead of the
|
|
77
|
+
authoritative registry (registry-pin discipline, B2+).
|
|
78
|
+
|
|
79
|
+
## 4.1.11 — 2026-10-08
|
|
80
|
+
|
|
81
|
+
### Fixed — family-section takeover rebuilt (4.1.5 → 4.1.11 arc; none of 4.1.5-4.1.10 was published to npm)
|
|
82
|
+
|
|
83
|
+
- **4.1.5 "half backfill" root cause**: the takeover body read `props.hooks.tabs`,
|
|
84
|
+
but the host's `bindInjectHooks` strips an inject face's `hooks` key into
|
|
85
|
+
`use<Tab>` props on every generation — the component threw, the slot abdicated,
|
|
86
|
+
and the takeover body never rendered anywhere. It now reads the `useTabs`
|
|
87
|
+
compartment first, with a raw-hooks `useState`/`useEffect` fallback.
|
|
88
|
+
- **Apply-time inject registration (4.1.10)**: the slots core fires inject
|
|
89
|
+
factories only on declaration events (= the settings panel opening), so the
|
|
90
|
+
grace-delayed registration of 4.1.7/4.1.8 waited for a declaration that never
|
|
91
|
+
came. The `settings.section` inject now registers at apply time.
|
|
92
|
+
- **Deferred yield-election (4.1.11)**: ≤0.1.7 shells give every same-id section
|
|
93
|
+
entry its own nav row — the old "priority-10 shadow stays invisible" assumption
|
|
94
|
+
produced a double 起子插件设置 row on all five farm cells. The factory now waits
|
|
95
|
+
500 ms after the declaration batch and stands down when a `dsh-family` entry is
|
|
96
|
+
already seated (thinking-levels head); it takes over only when TL is absent.
|
|
97
|
+
Verified single-row on all five farm cells (0.1.0 → 0.1.7), pairing with
|
|
98
|
+
dsh-thinking-levels 4.2.0-beta.26's symmetric stand-down.
|
|
99
|
+
|
|
14
100
|
## 4.0.0 — 2026-09-29
|
|
15
101
|
|
|
16
102
|
### Changed
|
package/dsh.plugin.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "dsh-external/dsh-session-guard",
|
|
3
|
-
"version": "4.
|
|
4
|
-
"main": "./src/index.js",
|
|
5
|
-
"description": "高峰自动会话门:step 级门控 + 周末模式 + 高峰自动暂停 + 官方源二维判定 + 会话级冻结 + 后端自动重试。",
|
|
6
|
-
"engines": {
|
|
7
|
-
"dsh": ">=0.2.0-rc.1 <0.2.1-0"
|
|
8
|
-
},
|
|
9
|
-
"contributes": {
|
|
10
|
-
"tools": [],
|
|
11
|
-
"skills": []
|
|
12
|
-
},
|
|
13
|
-
"client": {
|
|
14
|
-
"main": "./lib/client.js"
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "dsh-external/dsh-session-guard",
|
|
3
|
+
"version": "4.1.14",
|
|
4
|
+
"main": "./src/index.js",
|
|
5
|
+
"description": "高峰自动会话门:step 级门控 + 周末模式 + 高峰自动暂停 + 官方源二维判定 + 会话级冻结 + 后端自动重试。",
|
|
6
|
+
"engines": {
|
|
7
|
+
"dsh": ">=0.2.0-rc.1 <0.2.1-0"
|
|
8
|
+
},
|
|
9
|
+
"contributes": {
|
|
10
|
+
"tools": [],
|
|
11
|
+
"skills": []
|
|
12
|
+
},
|
|
13
|
+
"client": {
|
|
14
|
+
"main": "./lib/client.js"
|
|
15
|
+
}
|
|
16
|
+
}
|