@dsh-plus/lifeboat 0.2.0 → 0.2.1

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/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { dshHomePath } from "@deepseek-ai/dsh-home-paths";
2
- import { SettingsConflictError, settingsNamespace } from "@deepseek-ai/dsh-settings";
3
2
  import z from "@deepseek-ai/schemastery";
4
3
  import { copyFile, readFile, rename, writeFile } from "node:fs/promises";
4
+ import { SettingsConflictError } from "@deepseek-ai/dsh-settings";
5
5
  import { parseDocument } from "yaml";
6
6
  //#endregion
7
7
  //#region src/config.ts
@@ -13,8 +13,8 @@ import { parseDocument } from "yaml";
13
13
  * schema 刻意宽松:lifeboat 是最后防线,自身命名空间的数据问题绝不能让它起不来。
14
14
  * @module lifeboat/config
15
15
  */
16
- /** settings 命名空间(品牌化后供 settings 服务注册/读写)。 */
17
- const SETTINGS_NS = settingsNamespace("dsh-plus-lifeboat");
16
+ /** settings 命名空间(字面量直供 settings 服务注册/读写,0.1.2-alpha.2 起编译期校验语法)。 */
17
+ const SETTINGS_NS = "dsh-plus-lifeboat";
18
18
  /** 行级配置:全部有默认值,正常部署零配置。 */
19
19
  const Config = z.object({
20
20
  enabled: z.boolean().description("故障隔离总开关").default(true),
@@ -56,8 +56,8 @@ const JournalSchema = z.object({
56
56
  * 协议推断是启发式(显式 api > 路由名 > 模型继承源 > openai-completions 兜底)。
57
57
  * @module lifeboat/fallback-llm
58
58
  */
59
- const NS_PI_AI = settingsNamespace("llm-pi-ai");
60
- const NS_AGENT_DEFAULT = settingsNamespace("agent-default-model");
59
+ const NS_PI_AI = "llm-pi-ai";
60
+ const NS_AGENT_DEFAULT = "agent-default-model";
61
61
  const RAW_NS_LLM_PI = "dsh-plus-llm-pi";
62
62
  /** 官方配置路径物化的 compat 子集(其余字段降级期丢弃)。 */
63
63
  const COMPAT_WHITELIST = ["thinkingFormat", "supportsReasoningEffort"];
@@ -454,7 +454,7 @@ function installHostWatch(ctx, q) {
454
454
  * - GET /dsh-plus/lifeboat/status → journal + 翻译状态 + 当前用户 patch 层已禁用的 dsh-plus 插件
455
455
  * - POST /dsh-plus/lifeboat/restore {name} → removeDisable + journal + 告警
456
456
  * rc8 用户 patch 层热应用:恢复无需重启,watchUserPatches 即时重载。
457
- * (0.1.2-alpha.1 基线:用户 patch 层热应用机制保留,行为不变。)
457
+ * (0.1.2-alpha.2 基线复核:用户 patch 层热应用机制保留,行为不变。)
458
458
  * @module lifeboat/health-api
459
459
  */
460
460
  const ROUTE_STATUS = "/dsh-plus/lifeboat/status";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-plus/lifeboat",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "dsh-plus service plugin: 故障救生艇——兄弟插件崩溃时自动隔离(写用户 patch 层禁用),llm-pi 缺席时把其配置临时翻译为官方 llm-pi-ai 路由,恢复后自动还原",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -30,26 +30,26 @@
30
30
  }
31
31
  },
32
32
  "dependencies": {
33
- "yaml": "^2.6.0",
34
- "@dsh-plus/shared": "0.1.6"
33
+ "yaml": "^2.9.0",
34
+ "@dsh-plus/shared": "0.1.7"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "@deepseek-ai/cordis": "^4.0.1",
38
- "@deepseek-ai/dsh-home-paths": "^0.1.2-alpha.1",
39
- "@deepseek-ai/dsh-llm": "^0.1.2-alpha.1",
40
- "@deepseek-ai/dsh-settings": "^0.1.2-alpha.1",
38
+ "@deepseek-ai/dsh-home-paths": "^0.1.2-alpha.2",
39
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.2",
40
+ "@deepseek-ai/dsh-settings": "^0.1.2-alpha.2",
41
41
  "@deepseek-ai/schemastery": "^3.18.1"
42
42
  },
43
43
  "devDependencies": {
44
- "@deepseek-ai/cordis": "4.0.1",
45
- "@deepseek-ai/dsh-home-paths": "0.1.2-alpha.1",
46
- "@deepseek-ai/dsh-host-webserver": "0.1.2-alpha.1",
47
- "@deepseek-ai/dsh-llm": "0.1.2-alpha.1",
48
- "@deepseek-ai/dsh-settings": "0.1.2-alpha.1",
49
- "@deepseek-ai/schemastery": "3.18.1",
50
- "@types/react": "~18.3.1",
51
- "react": "^18.2.0",
52
- "@types/node": "26.2.0"
44
+ "@deepseek-ai/cordis": "4.0.2",
45
+ "@deepseek-ai/dsh-home-paths": "0.1.2-alpha.2",
46
+ "@deepseek-ai/dsh-host-webserver": "0.1.2-alpha.2",
47
+ "@deepseek-ai/dsh-llm": "0.1.2-alpha.2",
48
+ "@deepseek-ai/dsh-settings": "0.1.2-alpha.2",
49
+ "@deepseek-ai/schemastery": "3.18.2",
50
+ "@types/node": "26.4.0",
51
+ "@types/react": "~18.3.31",
52
+ "react": "^18.2.0"
53
53
  },
54
54
  "publishConfig": {
55
55
  "access": "public"
package/src/config.ts CHANGED
@@ -7,13 +7,12 @@
7
7
  * @module lifeboat/config
8
8
  */
9
9
 
10
- import { settingsNamespace } from '@deepseek-ai/dsh-settings'
11
10
  import z from '@deepseek-ai/schemastery'
12
11
 
13
12
  import { SETTINGS_NS as NS_LITERAL } from './ns.ts'
14
13
 
15
- /** settings 命名空间(品牌化后供 settings 服务注册/读写)。 */
16
- export const SETTINGS_NS = settingsNamespace(NS_LITERAL)
14
+ /** settings 命名空间(字面量直供 settings 服务注册/读写,0.1.2-alpha.2 起编译期校验语法)。 */
15
+ export const SETTINGS_NS = NS_LITERAL
17
16
 
18
17
  /** 行级配置:全部有默认值,正常部署零配置。 */
19
18
  export const Config = z.object({
@@ -15,18 +15,16 @@ import { readFile } from 'node:fs/promises'
15
15
  import type { Context } from '@deepseek-ai/cordis'
16
16
  import { dshHomePath } from '@deepseek-ai/dsh-home-paths'
17
17
  import type {} from '@deepseek-ai/dsh-llm'
18
- import {
19
- SettingsConflictError,
20
- type SettingsProvider,
21
- settingsNamespace,
22
- } from '@deepseek-ai/dsh-settings'
18
+ import { SettingsConflictError, type SettingsProvider } from '@deepseek-ai/dsh-settings'
23
19
  import { parseDocument } from 'yaml'
24
20
 
25
21
  import type { FallbackStateT } from './config.ts'
26
22
  import type { Alerter } from './notify.ts'
27
23
 
28
- const NS_PI_AI = settingsNamespace('llm-pi-ai')
29
- const NS_AGENT_DEFAULT = settingsNamespace('agent-default-model')
24
+ // 0.1.2-alpha.2 起 settings 命名空间直接以字面量使用(编译期校验语法),
25
+ // 不再需要 settingsNamespace() 品牌化。
26
+ const NS_PI_AI = 'llm-pi-ai'
27
+ const NS_AGENT_DEFAULT = 'agent-default-model'
30
28
  const RAW_NS_LLM_PI = 'dsh-plus-llm-pi'
31
29
 
32
30
  /** 翻译路由键后缀:与源路由错开,避免 llm-pi 恢复瞬间撞 DUPLICATE_ADAPTER。 */
@@ -184,9 +182,9 @@ export async function readRawSection(
184
182
  }
185
183
 
186
184
  interface SettingsWrite {
187
- update(ns: ReturnType<typeof settingsNamespace>, patch: object): Promise<void>
185
+ update(ns: string, patch: object): Promise<void>
188
186
  mutate(
189
- ns: ReturnType<typeof settingsNamespace>,
187
+ ns: string,
190
188
  ops: readonly {
191
189
  op: 'set' | 'unset'
192
190
  path: readonly string[]
@@ -236,7 +234,7 @@ export function installLlmFallback(ctx: Context, deps: FallbackDeps): void {
236
234
  const translated = translateProviders(providers)
237
235
  const fbProvider = `${provider}${FALLBACK_SUFFIX}`
238
236
  try {
239
- // 官方 llm-pi-ai 的 installSettingsSection 注册了 validate(assertServiceable),
237
+ // 官方 llm-pi-ai 的 installSection 注册了 validate(assertServiceable),
240
238
  // 写时拒绝不适配的翻译结果;update 无 expectedRevision 本就无条件写,不做冲突
241
239
  // 重试——失败一律分类为「翻译失败」。
242
240
  await writes.update(NS_PI_AI, { providers: translated })
@@ -324,7 +322,7 @@ export function installLlmFallback(ctx: Context, deps: FallbackDeps): void {
324
322
  ctx.root.on('settings/updated' as never, (ns: unknown) => {
325
323
  if (typeof ns === 'string' && WATCHED_NS.has(ns)) run()
326
324
  })
327
- // 事件名已核对:master 0.1.2-alpha.1 的 dsh-llm 保留 'llm/adapters-updated'
325
+ // 事件名已核对:0.1.2-alpha.2 的 dsh-llm 保留 'llm/adapters-updated'
328
326
  // (packages/llm/llm/src/types.ts:23 module augmentation,index.ts:344 于每次
329
327
  // adapter 注册/注销提交点 dispatch);@deepseek-ai/dsh-llm 的类型导入已携带该
330
328
  // 声明,无需 as never。
package/src/health-api.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * - GET /dsh-plus/lifeboat/status → journal + 翻译状态 + 当前用户 patch 层已禁用的 dsh-plus 插件
4
4
  * - POST /dsh-plus/lifeboat/restore {name} → removeDisable + journal + 告警
5
5
  * rc8 用户 patch 层热应用:恢复无需重启,watchUserPatches 即时重载。
6
- * (0.1.2-alpha.1 基线:用户 patch 层热应用机制保留,行为不变。)
6
+ * (0.1.2-alpha.2 基线复核:用户 patch 层热应用机制保留,行为不变。)
7
7
  * @module lifeboat/health-api
8
8
  */
9
9
  import { readFile } from 'node:fs/promises'