@aipanel/provider-deepseek 1.3.3 → 1.3.5

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/es/api.d.ts CHANGED
@@ -67,7 +67,8 @@ export declare class DeepSeekAPI {
67
67
  /** 归档会话(dsh 无硬删除,仅归档;幂等) */
68
68
  archiveSession(sessionId: string, retries?: number): Promise<void>;
69
69
  /**
70
- * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:{ items, archivedSessionIds })。
70
+ * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:
71
+ * { items, archivedSessionIds, pinnedSessionIds })。
71
72
  * dsh 0.1.2+ 无 workspace.list RPC,工作区发现走 /api/remote.mux 上的 workspace/follow 流。
72
73
  * 直连 dsh web(webPort)并携带 browser-session Cookie(原生 WebSocket 支持自定义请求头),
73
74
  * 打开流读到首个 baseline 帧即关闭;启动早期 webPort 已就绪,不存在代理时序竞态。
package/es/api.js CHANGED
@@ -251,7 +251,8 @@ const _DeepSeekAPI = class _DeepSeekAPI {
251
251
  );
252
252
  }
253
253
  /**
254
- * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:{ items, archivedSessionIds })。
254
+ * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:
255
+ * { items, archivedSessionIds, pinnedSessionIds })。
255
256
  * dsh 0.1.2+ 无 workspace.list RPC,工作区发现走 /api/remote.mux 上的 workspace/follow 流。
256
257
  * 直连 dsh web(webPort)并携带 browser-session Cookie(原生 WebSocket 支持自定义请求头),
257
258
  * 打开流读到首个 baseline 帧即关闭;启动早期 webPort 已就绪,不存在代理时序竞态。
@@ -307,7 +308,8 @@ const _DeepSeekAPI = class _DeepSeekAPI {
307
308
  const baseline = msg.value.value;
308
309
  finish(void 0, {
309
310
  items: baseline.items ?? [],
310
- archivedSessionIds: baseline.archivedSessionIds ?? []
311
+ archivedSessionIds: baseline.archivedSessionIds ?? [],
312
+ pinnedSessionIds: baseline.pinnedSessionIds ?? []
311
313
  });
312
314
  } else if (msg.type === "error") {
313
315
  finish(new Error(`dsh workspace/follow failed: ${msg.error?.message ?? "unknown"}`));
package/es/constants.d.ts CHANGED
@@ -18,4 +18,9 @@ export declare const DSH_LOOPBACK_HOST = "127.0.0.1";
18
18
  /** dsh web 默认端口(未显式指定时) */
19
19
  export declare const DSH_DEFAULT_PORT = 3080;
20
20
  /** ==================== Provider 专属配置默认值 ==================== */
21
+ /**
22
+ * Provider 选项兜底值。
23
+ * 诊断的默认值不在本包复刻:单一来源是 @aipanel/core 的 DEFAULT_DIAGNOSTICS_POLICY,
24
+ * 由 resolveDeepSeekOptions 归一化时注入。
25
+ */
21
26
  export declare const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS: DeepSeekProviderOptions;
package/es/constants.js CHANGED
@@ -2,12 +2,7 @@ const DSH_API_BASE = "/api";
2
2
  const DSH_REMOTE_MUX_PATH = "/api/remote.mux";
3
3
  const DSH_LOOPBACK_HOST = "127.0.0.1";
4
4
  const DSH_DEFAULT_PORT = 3080;
5
- const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS = {
6
- // 对齐 opencode 的 enableLsp(默认 true):诊断功能默认开启
7
- enableDiagnostics: true,
8
- // 对齐 opencode:自动诊断默认开启
9
- autoDiagnose: true
10
- };
5
+ const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS = {};
11
6
  export {
12
7
  DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
13
8
  DSH_API_BASE,
package/es/profile.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AIPanelWidgetTheme } from "@aipanel/core";
1
+ import type { AIPanelWidgetTheme, DiagnosticsPolicy } from "@aipanel/core";
2
2
  import type { DeepSeekBusyEnter, DeepSeekPermissionPreset } from "./types";
3
3
  /** 组装 overlay YAML */
4
4
  export declare function buildDshOverlay(options: {
@@ -11,21 +11,15 @@ export declare function buildDshOverlay(options: {
11
11
  /** client 插件(@aipanel/dsh-client)是否可被 dsh 解析;false 时停用该行,避免 fail-loud */
12
12
  clientAvailable?: boolean;
13
13
  /**
14
- * 编辑后自动诊断开关(provider option autoDiagnose)。
15
- * undefined 时不写入 overlay,由 dsh-plugin 回退到 OPENCODE_ENABLE_LINT=1(与 opencode 一致)。
14
+ * 诊断策略(provider option diagnostics,已在 provider 侧归一化)。
15
+ * 随 host 插件 config 下发;client 插件只取"是否需要诊断卡片视图"。
16
16
  */
17
- autoDiagnose?: boolean;
17
+ diagnostics: DiagnosticsPolicy;
18
18
  /**
19
19
  * 宿主事件推送令牌(core 每轮启动随机):随 plugin config 注入 dsh-plugin,
20
20
  * 使其把归一化 ProviderEvent POST 到 core 的 HOST_EVENTS_API_PATH。
21
21
  */
22
22
  eventsToken?: string;
23
- /**
24
- * 诊断功能总开关(provider option enableDiagnostics)。
25
- * true(默认,对齐 opencode enableLsp)时 host 插件注册 run_diagnostics 工具与自动诊断逻辑,
26
- * client 插件注册诊断卡片视图。
27
- */
28
- enableDiagnostics?: boolean;
29
23
  /** provider option agentPreset:dsh settings agent-presets.default(随 host 插件 config 下发) */
30
24
  agentPreset?: string;
31
25
  /** provider option permissionPreset:dsh settings permission.defaultPreset(单一来源 ./types) */
package/es/profile.js CHANGED
@@ -16,8 +16,7 @@ function buildDshOverlay(options) {
16
16
  cwd,
17
17
  pluginAvailable = true,
18
18
  clientAvailable = true,
19
- autoDiagnose,
20
- enableDiagnostics = true,
19
+ diagnostics,
21
20
  eventsToken,
22
21
  agentPreset,
23
22
  permissionPreset,
@@ -48,8 +47,8 @@ function buildDshOverlay(options) {
48
47
  ` vitePort: ${vitePort}`,
49
48
  ` viteHost: ${JSON.stringify(viteHost)}`,
50
49
  ` contextApiPath: ${JSON.stringify(CONTEXT_API_PATH)}`,
51
- ` enableDiagnostics: ${enableDiagnostics ? "true" : "false"}`,
52
- ...autoDiagnose !== void 0 ? [` autoDiagnose: ${autoDiagnose ? "true" : "false"}`] : [],
50
+ // 诊断策略(检查来源 + 触发 + 投递)整体下发;JSON 是合法 YAML,插件侧按 DiagnosticsPolicy 读取
51
+ ` diagnostics: ${JSON.stringify(diagnostics)}`,
53
52
  ...eventsToken ? [
54
53
  ` eventsToken: ${JSON.stringify(eventsToken)}`,
55
54
  ` eventsPath: ${JSON.stringify(HOST_EVENTS_API_PATH)}`
@@ -66,7 +65,8 @@ function buildDshOverlay(options) {
66
65
  ` name: ${JSON.stringify(DSH_CLIENT_PACKAGE)}`,
67
66
  ...clientAvailable ? [] : [" disabled: true"],
68
67
  " config:",
69
- ` enableDiagnostics: ${enableDiagnostics ? "true" : "false"}`,
68
+ // 诊断卡片视图:有诊断活动(工具或自动诊断)时才需要注册
69
+ ` enableDiagnostics: ${diagnostics.exposeTool || diagnostics.auto ? "true" : "false"}`,
70
70
  ...theme !== "auto" ? [` theme: ${JSON.stringify(theme)}`] : []
71
71
  ].join("\n")
72
72
  );
package/es/provider.js CHANGED
@@ -2,6 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import { sleep } from "@aipanel/core";
5
+ import { DEFAULT_DIAGNOSTICS_POLICY, resolveDiagnosticsPolicy } from "@aipanel/core";
5
6
  import { createLogger } from "@aipanel/core/node";
6
7
  import { DEFAULT_DEEPSEEK_PROVIDER_OPTIONS } from "./constants.js";
7
8
  import { DSH_LOOPBACK_HOST } from "./constants.js";
@@ -125,8 +126,7 @@ Please upgrade:
125
126
  cwd: options.cwd,
126
127
  pluginAvailable,
127
128
  clientAvailable,
128
- autoDiagnose: this.opts.autoDiagnose,
129
- enableDiagnostics: this.opts.enableDiagnostics,
129
+ diagnostics: this.opts.diagnostics,
130
130
  // 宿主事件推送令牌(core 每轮启动随机):随 plugin config 注入 dsh-plugin 用于回推鉴权
131
131
  eventsToken: options.eventsToken,
132
132
  agentPreset: this.opts.agentPreset,
@@ -229,16 +229,17 @@ function toChatSession(s, url) {
229
229
  };
230
230
  }
231
231
  function resolveDeepSeekOptions(options) {
232
- if (!options) return { ...DEFAULT_DEEPSEEK_PROVIDER_OPTIONS };
233
- const po = options.providerOptions ?? {};
232
+ const po = options?.providerOptions ?? {};
234
233
  return {
235
234
  ...DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
236
- home: po.home ?? options.home,
237
- agentPreset: po.agentPreset ?? options.agentPreset,
238
- permissionPreset: po.permissionPreset ?? options.permissionPreset,
239
- busyEnter: po.busyEnter ?? options.busyEnter,
240
- autoDiagnose: po.autoDiagnose ?? options.autoDiagnose ?? DEFAULT_DEEPSEEK_PROVIDER_OPTIONS.autoDiagnose,
241
- enableDiagnostics: po.enableDiagnostics ?? options.enableDiagnostics ?? DEFAULT_DEEPSEEK_PROVIDER_OPTIONS.enableDiagnostics
235
+ home: po.home ?? options?.home,
236
+ agentPreset: po.agentPreset ?? options?.agentPreset,
237
+ permissionPreset: po.permissionPreset ?? options?.permissionPreset,
238
+ busyEnter: po.busyEnter ?? options?.busyEnter,
239
+ diagnostics: resolveDiagnosticsPolicy(
240
+ [DEFAULT_DIAGNOSTICS_POLICY, po.diagnostics],
241
+ (message) => log.warn(message)
242
+ )
242
243
  };
243
244
  }
244
245
  export {
package/es/types.d.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  * dsh 契约(RPC envelope / 会话与工作区 wire / 事件词表 / 取值域)一律引用官方声明,
4
4
  * 不在此复刻;这里只保留本包自有的配置类型,核心层不感知。
5
5
  */
6
+ import type { DiagnosticsPolicy } from "@aipanel/core";
6
7
  import type { BusyEnterBehavior } from "@deepseek-ai/dsh-client-ui-conversation";
7
8
  import type { SandboxMode } from "@deepseek-ai/dsh-sandbox";
8
9
  /** 权限预设(对应 dsh settings permission.defaultPreset;取值域同官方 SandboxMode) */
@@ -23,21 +24,17 @@ export type DeepSeekProviderOptions = {
23
24
  /** 繁忙时 Enter 键行为(dsh settings ui-conversation.busyEnter) */
24
25
  busyEnter?: DeepSeekBusyEnter;
25
26
  /**
26
- * 编辑后自动诊断(对应 opencode providerOptions.enableLsp 的质量门禁语义):
27
- * write/edit/apply_patch 执行后自动补跑 ESLint + vue-tsc:登记到 step 边界统一诊断,按文件内容
28
- * 去重后以 plugin 上下文消息插入下一步(原生编辑与 PTC 子调度同一路径)。
29
- * 与 opencode 一致默认开启;需与 enableDiagnostics 配合(总开关关闭时整体不注入)。
27
+ * 诊断配置(检查来源 + 触发 + 投递;契约见 @aipanel/core 的 DiagnosticsPolicy)。
28
+ * 用户只写要覆盖的字段,provider 负责归一化成完整策略后随 overlay 下发。
30
29
  */
31
- autoDiagnose?: boolean;
32
- /**
33
- * 诊断功能总开关:与 opencode 的 enableLsp 一致,默认开启。
34
- * 关闭时(enableDiagnostics: false)不注入任何诊断相关插件逻辑——
35
- * run_diagnostics 审查工具、编辑后自动诊断、会话诊断卡片视图都不注册。
36
- */
37
- enableDiagnostics?: boolean;
30
+ diagnostics?: Partial<DiagnosticsPolicy>;
38
31
  /**
39
32
  * Provider 允许自定义扩展字段
40
33
  * [key: string]: unknown;
41
34
  */
42
35
  [key: string]: unknown;
43
36
  };
37
+ /** 归一化后的 Provider 选项:诊断策略一定是完整的(Partial 已在 provider 内解析) */
38
+ export type DeepSeekResolvedOptions = DeepSeekProviderOptions & {
39
+ diagnostics: DiagnosticsPolicy;
40
+ };
package/lib/api.cjs CHANGED
@@ -282,7 +282,8 @@ const _DeepSeekAPI = class _DeepSeekAPI {
282
282
  );
283
283
  }
284
284
  /**
285
- * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:{ items, archivedSessionIds })。
285
+ * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:
286
+ * { items, archivedSessionIds, pinnedSessionIds })。
286
287
  * dsh 0.1.2+ 无 workspace.list RPC,工作区发现走 /api/remote.mux 上的 workspace/follow 流。
287
288
  * 直连 dsh web(webPort)并携带 browser-session Cookie(原生 WebSocket 支持自定义请求头),
288
289
  * 打开流读到首个 baseline 帧即关闭;启动早期 webPort 已就绪,不存在代理时序竞态。
@@ -338,7 +339,8 @@ const _DeepSeekAPI = class _DeepSeekAPI {
338
339
  const baseline = msg.value.value;
339
340
  finish(void 0, {
340
341
  items: baseline.items ?? [],
341
- archivedSessionIds: baseline.archivedSessionIds ?? []
342
+ archivedSessionIds: baseline.archivedSessionIds ?? [],
343
+ pinnedSessionIds: baseline.pinnedSessionIds ?? []
342
344
  });
343
345
  } else if (msg.type === "error") {
344
346
  finish(new Error(`dsh workspace/follow failed: ${msg.error?.message ?? "unknown"}`));
package/lib/api.d.ts CHANGED
@@ -67,7 +67,8 @@ export declare class DeepSeekAPI {
67
67
  /** 归档会话(dsh 无硬删除,仅归档;幂等) */
68
68
  archiveSession(sessionId: string, retries?: number): Promise<void>;
69
69
  /**
70
- * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:{ items, archivedSessionIds })。
70
+ * 取 workspace/follow 流的 baseline(等价旧 workspace.list 的快照:
71
+ * { items, archivedSessionIds, pinnedSessionIds })。
71
72
  * dsh 0.1.2+ 无 workspace.list RPC,工作区发现走 /api/remote.mux 上的 workspace/follow 流。
72
73
  * 直连 dsh web(webPort)并携带 browser-session Cookie(原生 WebSocket 支持自定义请求头),
73
74
  * 打开流读到首个 baseline 帧即关闭;启动早期 webPort 已就绪,不存在代理时序竞态。
package/lib/constants.cjs CHANGED
@@ -28,12 +28,7 @@ const DSH_API_BASE = "/api";
28
28
  const DSH_REMOTE_MUX_PATH = "/api/remote.mux";
29
29
  const DSH_LOOPBACK_HOST = "127.0.0.1";
30
30
  const DSH_DEFAULT_PORT = 3080;
31
- const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS = {
32
- // 对齐 opencode 的 enableLsp(默认 true):诊断功能默认开启
33
- enableDiagnostics: true,
34
- // 对齐 opencode:自动诊断默认开启
35
- autoDiagnose: true
36
- };
31
+ const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS = {};
37
32
  // Annotate the CommonJS export names for ESM import in node:
38
33
  0 && (module.exports = {
39
34
  DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
@@ -18,4 +18,9 @@ export declare const DSH_LOOPBACK_HOST = "127.0.0.1";
18
18
  /** dsh web 默认端口(未显式指定时) */
19
19
  export declare const DSH_DEFAULT_PORT = 3080;
20
20
  /** ==================== Provider 专属配置默认值 ==================== */
21
+ /**
22
+ * Provider 选项兜底值。
23
+ * 诊断的默认值不在本包复刻:单一来源是 @aipanel/core 的 DEFAULT_DIAGNOSTICS_POLICY,
24
+ * 由 resolveDeepSeekOptions 归一化时注入。
25
+ */
21
26
  export declare const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS: DeepSeekProviderOptions;
package/lib/profile.cjs CHANGED
@@ -43,8 +43,7 @@ function buildDshOverlay(options) {
43
43
  cwd,
44
44
  pluginAvailable = true,
45
45
  clientAvailable = true,
46
- autoDiagnose,
47
- enableDiagnostics = true,
46
+ diagnostics,
48
47
  eventsToken,
49
48
  agentPreset,
50
49
  permissionPreset,
@@ -75,8 +74,8 @@ function buildDshOverlay(options) {
75
74
  ` vitePort: ${vitePort}`,
76
75
  ` viteHost: ${JSON.stringify(viteHost)}`,
77
76
  ` contextApiPath: ${JSON.stringify(import_node.CONTEXT_API_PATH)}`,
78
- ` enableDiagnostics: ${enableDiagnostics ? "true" : "false"}`,
79
- ...autoDiagnose !== void 0 ? [` autoDiagnose: ${autoDiagnose ? "true" : "false"}`] : [],
77
+ // 诊断策略(检查来源 + 触发 + 投递)整体下发;JSON 是合法 YAML,插件侧按 DiagnosticsPolicy 读取
78
+ ` diagnostics: ${JSON.stringify(diagnostics)}`,
80
79
  ...eventsToken ? [
81
80
  ` eventsToken: ${JSON.stringify(eventsToken)}`,
82
81
  ` eventsPath: ${JSON.stringify(import_node.HOST_EVENTS_API_PATH)}`
@@ -93,7 +92,8 @@ function buildDshOverlay(options) {
93
92
  ` name: ${JSON.stringify(import_dsh_install.DSH_CLIENT_PACKAGE)}`,
94
93
  ...clientAvailable ? [] : [" disabled: true"],
95
94
  " config:",
96
- ` enableDiagnostics: ${enableDiagnostics ? "true" : "false"}`,
95
+ // 诊断卡片视图:有诊断活动(工具或自动诊断)时才需要注册
96
+ ` enableDiagnostics: ${diagnostics.exposeTool || diagnostics.auto ? "true" : "false"}`,
97
97
  ...theme !== "auto" ? [` theme: ${JSON.stringify(theme)}`] : []
98
98
  ].join("\n")
99
99
  );
package/lib/profile.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AIPanelWidgetTheme } from "@aipanel/core";
1
+ import type { AIPanelWidgetTheme, DiagnosticsPolicy } from "@aipanel/core";
2
2
  import type { DeepSeekBusyEnter, DeepSeekPermissionPreset } from "./types";
3
3
  /** 组装 overlay YAML */
4
4
  export declare function buildDshOverlay(options: {
@@ -11,21 +11,15 @@ export declare function buildDshOverlay(options: {
11
11
  /** client 插件(@aipanel/dsh-client)是否可被 dsh 解析;false 时停用该行,避免 fail-loud */
12
12
  clientAvailable?: boolean;
13
13
  /**
14
- * 编辑后自动诊断开关(provider option autoDiagnose)。
15
- * undefined 时不写入 overlay,由 dsh-plugin 回退到 OPENCODE_ENABLE_LINT=1(与 opencode 一致)。
14
+ * 诊断策略(provider option diagnostics,已在 provider 侧归一化)。
15
+ * 随 host 插件 config 下发;client 插件只取"是否需要诊断卡片视图"。
16
16
  */
17
- autoDiagnose?: boolean;
17
+ diagnostics: DiagnosticsPolicy;
18
18
  /**
19
19
  * 宿主事件推送令牌(core 每轮启动随机):随 plugin config 注入 dsh-plugin,
20
20
  * 使其把归一化 ProviderEvent POST 到 core 的 HOST_EVENTS_API_PATH。
21
21
  */
22
22
  eventsToken?: string;
23
- /**
24
- * 诊断功能总开关(provider option enableDiagnostics)。
25
- * true(默认,对齐 opencode enableLsp)时 host 插件注册 run_diagnostics 工具与自动诊断逻辑,
26
- * client 插件注册诊断卡片视图。
27
- */
28
- enableDiagnostics?: boolean;
29
23
  /** provider option agentPreset:dsh settings agent-presets.default(随 host 插件 config 下发) */
30
24
  agentPreset?: string;
31
25
  /** provider option permissionPreset:dsh settings permission.defaultPreset(单一来源 ./types) */
package/lib/provider.cjs CHANGED
@@ -24,6 +24,7 @@ __export(provider_exports, {
24
24
  module.exports = __toCommonJS(provider_exports);
25
25
  const import_meta = {};
26
26
  var import_core = require("@aipanel/core");
27
+ var import_core2 = require("@aipanel/core");
27
28
  var import_node = require("@aipanel/core/node");
28
29
  var import_constants = require("./constants.cjs");
29
30
  var import_constants2 = require("./constants.cjs");
@@ -134,8 +135,7 @@ Please upgrade:
134
135
  cwd: options.cwd,
135
136
  pluginAvailable,
136
137
  clientAvailable,
137
- autoDiagnose: this.opts.autoDiagnose,
138
- enableDiagnostics: this.opts.enableDiagnostics,
138
+ diagnostics: this.opts.diagnostics,
139
139
  // 宿主事件推送令牌(core 每轮启动随机):随 plugin config 注入 dsh-plugin 用于回推鉴权
140
140
  eventsToken: options.eventsToken,
141
141
  agentPreset: this.opts.agentPreset,
@@ -238,16 +238,17 @@ function toChatSession(s, url) {
238
238
  };
239
239
  }
240
240
  function resolveDeepSeekOptions(options) {
241
- if (!options) return { ...import_constants.DEFAULT_DEEPSEEK_PROVIDER_OPTIONS };
242
- const po = options.providerOptions ?? {};
241
+ const po = options?.providerOptions ?? {};
243
242
  return {
244
243
  ...import_constants.DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
245
- home: po.home ?? options.home,
246
- agentPreset: po.agentPreset ?? options.agentPreset,
247
- permissionPreset: po.permissionPreset ?? options.permissionPreset,
248
- busyEnter: po.busyEnter ?? options.busyEnter,
249
- autoDiagnose: po.autoDiagnose ?? options.autoDiagnose ?? import_constants.DEFAULT_DEEPSEEK_PROVIDER_OPTIONS.autoDiagnose,
250
- enableDiagnostics: po.enableDiagnostics ?? options.enableDiagnostics ?? import_constants.DEFAULT_DEEPSEEK_PROVIDER_OPTIONS.enableDiagnostics
244
+ home: po.home ?? options?.home,
245
+ agentPreset: po.agentPreset ?? options?.agentPreset,
246
+ permissionPreset: po.permissionPreset ?? options?.permissionPreset,
247
+ busyEnter: po.busyEnter ?? options?.busyEnter,
248
+ diagnostics: (0, import_core2.resolveDiagnosticsPolicy)(
249
+ [import_core2.DEFAULT_DIAGNOSTICS_POLICY, po.diagnostics],
250
+ (message) => log.warn(message)
251
+ )
251
252
  };
252
253
  }
253
254
  // Annotate the CommonJS export names for ESM import in node:
package/lib/types.d.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  * dsh 契约(RPC envelope / 会话与工作区 wire / 事件词表 / 取值域)一律引用官方声明,
4
4
  * 不在此复刻;这里只保留本包自有的配置类型,核心层不感知。
5
5
  */
6
+ import type { DiagnosticsPolicy } from "@aipanel/core";
6
7
  import type { BusyEnterBehavior } from "@deepseek-ai/dsh-client-ui-conversation";
7
8
  import type { SandboxMode } from "@deepseek-ai/dsh-sandbox";
8
9
  /** 权限预设(对应 dsh settings permission.defaultPreset;取值域同官方 SandboxMode) */
@@ -23,21 +24,17 @@ export type DeepSeekProviderOptions = {
23
24
  /** 繁忙时 Enter 键行为(dsh settings ui-conversation.busyEnter) */
24
25
  busyEnter?: DeepSeekBusyEnter;
25
26
  /**
26
- * 编辑后自动诊断(对应 opencode providerOptions.enableLsp 的质量门禁语义):
27
- * write/edit/apply_patch 执行后自动补跑 ESLint + vue-tsc:登记到 step 边界统一诊断,按文件内容
28
- * 去重后以 plugin 上下文消息插入下一步(原生编辑与 PTC 子调度同一路径)。
29
- * 与 opencode 一致默认开启;需与 enableDiagnostics 配合(总开关关闭时整体不注入)。
27
+ * 诊断配置(检查来源 + 触发 + 投递;契约见 @aipanel/core 的 DiagnosticsPolicy)。
28
+ * 用户只写要覆盖的字段,provider 负责归一化成完整策略后随 overlay 下发。
30
29
  */
31
- autoDiagnose?: boolean;
32
- /**
33
- * 诊断功能总开关:与 opencode 的 enableLsp 一致,默认开启。
34
- * 关闭时(enableDiagnostics: false)不注入任何诊断相关插件逻辑——
35
- * run_diagnostics 审查工具、编辑后自动诊断、会话诊断卡片视图都不注册。
36
- */
37
- enableDiagnostics?: boolean;
30
+ diagnostics?: Partial<DiagnosticsPolicy>;
38
31
  /**
39
32
  * Provider 允许自定义扩展字段
40
33
  * [key: string]: unknown;
41
34
  */
42
35
  [key: string]: unknown;
43
36
  };
37
+ /** 归一化后的 Provider 选项:诊断策略一定是完整的(Partial 已在 provider 内解析) */
38
+ export type DeepSeekResolvedOptions = DeepSeekProviderOptions & {
39
+ diagnostics: DiagnosticsPolicy;
40
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aipanel/provider-deepseek",
3
- "version": "1.3.3",
3
+ "version": "1.3.5",
4
4
  "type": "module",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.js",
@@ -21,16 +21,16 @@
21
21
  "registry": "https://registry.npmjs.org/"
22
22
  },
23
23
  "dependencies": {
24
- "@aipanel/core": "1.3.3",
24
+ "@aipanel/core": "1.3.5",
25
25
  "execa": "^9.6.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@deepseek-ai/dsh-api-session-controller": "^0.1.6-alpha.2",
29
- "@deepseek-ai/dsh-api-workspace-controller": "^0.1.6-alpha.2",
30
- "@deepseek-ai/dsh-brand": "^0.1.6-alpha.2",
31
- "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.2",
32
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.6-alpha.2",
33
- "@deepseek-ai/dsh-sandbox": "^0.1.6-alpha.2",
28
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.7-alpha.2",
29
+ "@deepseek-ai/dsh-api-workspace-controller": "^0.1.7-alpha.2",
30
+ "@deepseek-ai/dsh-brand": "^0.1.7-alpha.2",
31
+ "@deepseek-ai/dsh-client-connection": "^0.1.7-alpha.2",
32
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-alpha.2",
33
+ "@deepseek-ai/dsh-sandbox": "^0.1.7-alpha.2",
34
34
  "esbuild": "^0.25.0"
35
35
  },
36
36
  "scripts": {