@aipanel/provider-deepseek 1.3.11 → 1.3.12

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/constants.js CHANGED
@@ -4,7 +4,8 @@ const DSH_LOOPBACK_HOST = "127.0.0.1";
4
4
  const DSH_DEFAULT_PORT = 3080;
5
5
  const DSH_DEFAULT_PROFILE = "web";
6
6
  const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS = {
7
- profile: DSH_DEFAULT_PROFILE
7
+ profile: DSH_DEFAULT_PROFILE,
8
+ settingsFrom: DSH_DEFAULT_PROFILE
8
9
  };
9
10
  export {
10
11
  DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
@@ -59,6 +59,11 @@ export interface DeepSeekWebOptions {
59
59
  profile?: string;
60
60
  /** cordis overlay 文件路径(--patch 注入 MCP client / aipanel 插件) */
61
61
  patchPath?: string;
62
+ /**
63
+ * 继承层路径(--patch 叠来源 profile 的配置,见 settings-layer.ts)。
64
+ * 必须排在 `patchPath` **之前**:`--patch` 越靠后越赢,AIPanel 自己插的插件行要压过来源 profile。
65
+ */
66
+ settingsPatchPath?: string;
62
67
  /** dsh 数据目录(透传 DSH_HOME;缺省跟随 $DSH_HOME / ~/.dsh) */
63
68
  home?: string;
64
69
  /** 启用 verbose 模式 */
@@ -106,9 +106,12 @@ ${context}
106
106
  }
107
107
  }
108
108
  function startDeepSeekWeb(options) {
109
- const { port, hostname, cwd, patchPath, home, verbose, launchToken } = options;
109
+ const { port, hostname, cwd, patchPath, settingsPatchPath, home, verbose, launchToken } = options;
110
110
  const profile = options.profile ?? DSH_DEFAULT_PROFILE;
111
111
  const args = ["--profile", profile];
112
+ if (settingsPatchPath) {
113
+ args.push("--patch", settingsPatchPath);
114
+ }
112
115
  if (patchPath) {
113
116
  args.push("--patch", patchPath);
114
117
  }
package/es/provider.js CHANGED
@@ -4,11 +4,16 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
4
4
  import { sleep } from "@aipanel/core";
5
5
  import { DEFAULT_DIAGNOSTICS_POLICY, resolveDiagnosticsPolicy } from "@aipanel/core";
6
6
  import { createLogger } from "@aipanel/core/node";
7
- import { DEFAULT_DEEPSEEK_PROVIDER_OPTIONS, DSH_DEFAULT_PROFILE, DSH_LOOPBACK_HOST } from "./constants.js";
7
+ import {
8
+ DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
9
+ DSH_DEFAULT_PROFILE,
10
+ DSH_LOOPBACK_HOST
11
+ } from "./constants.js";
8
12
  import { DeepSeekAPI } from "./api.js";
9
13
  import { LaunchToken, startDeepSeekWeb } from "./deepseek-web.js";
10
14
  import { buildDshOverlay, writeDshOverlay } from "./profile.js";
11
15
  import { describeDshProfile, inspectDshProfile, profileProblemText } from "./profile-check.js";
16
+ import { inheritSourceOf, writeInheritLayer } from "./settings-layer.js";
12
17
  import {
13
18
  checkDeepSeekInstalled,
14
19
  getDeepSeekVersion,
@@ -146,12 +151,15 @@ Please upgrade:
146
151
  theme: this.uiTheme
147
152
  });
148
153
  const patchPath = writeDshOverlay(options.cwd, overlay);
154
+ const inheritSource = inheritSourceOf(this.opts.profile, this.opts.settingsFrom);
155
+ const settingsPatchPath = inheritSource === null ? null : writeInheritLayer({ cwd: options.cwd, home: this.opts.home, source: inheritSource });
149
156
  const proc = startDeepSeekWeb({
150
157
  port: options.port,
151
158
  hostname: DSH_LOOPBACK_HOST,
152
159
  cwd: options.cwd,
153
160
  profile: this.opts.profile,
154
161
  patchPath,
162
+ ...settingsPatchPath === null ? {} : { settingsPatchPath },
155
163
  home: this.opts.home,
156
164
  verbose: options.verbose,
157
165
  launchToken
@@ -246,6 +254,8 @@ function resolveDeepSeekOptions(options) {
246
254
  ...DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
247
255
  home: po.home ?? options?.home,
248
256
  profile: po.profile ?? options?.profile ?? DSH_DEFAULT_PROFILE,
257
+ // 默认就叠(见 settings-layer.ts):用户不会去改配置,机器级设置只配一次是默认预期。
258
+ settingsFrom: po.settingsFrom === false ? false : typeof po.settingsFrom === "string" ? po.settingsFrom : DSH_DEFAULT_PROFILE,
249
259
  agentPreset: po.agentPreset ?? options?.agentPreset,
250
260
  permissionPreset: po.permissionPreset ?? options?.permissionPreset,
251
261
  busyEnter: po.busyEnter ?? options?.busyEnter,
@@ -0,0 +1,24 @@
1
+ /** 不跟着来源走的那几行(每个界面自己的偏好);理由见文件头 */
2
+ export declare const INHERIT_SKIP_IDS: readonly string[];
3
+ /** 生成层落在项目缓存目录,与 AIPanel 自己的 overlay 同处 */
4
+ export declare const INHERIT_LAYER_FILENAME = "dsh-inherit.cordis.yml";
5
+ /**
6
+ * 该从哪个 profile 继承。
7
+ * @param settingsFrom 解析后的选项:profile 名 / `false`(不叠)
8
+ * @returns 源 profile 名;`null` = 不叠(关掉了,或目标就是它自己)
9
+ */
10
+ export declare function inheritSourceOf(profile: string, settingsFrom: string | false): string | null;
11
+ /**
12
+ * 按**顶层条目**剥掉若干 `- id:` 块(与 dsh-workbench 启动器里那段 awk 同口径:从命中的 `- ` 行
13
+ * 一路丢到下一个顶层 `- ` 为止)。手写而不是上 YAML 库:这一层只是转交一份文本,没必要为它引入依赖,
14
+ * 也不能因为来源文件里有 `!!js` 之类的 dsh 扩展标签就解析失败。
15
+ */
16
+ export declare function stripEntries(text: string, skipIds: readonly string[]): string;
17
+ /**
18
+ * 写出继承层并返回它的路径;来源不存在/读不动时返回 `null`(**不阻断启动**:少了它只是回到老行为)。
19
+ */
20
+ export declare function writeInheritLayer(input: {
21
+ cwd: string;
22
+ home?: string | undefined;
23
+ source: string;
24
+ }): string | null;
@@ -0,0 +1,47 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { AIPANEL_CACHE_DIR, createLogger } from "@aipanel/core/node";
4
+ import { dshProfileDir } from "./dsh-install.js";
5
+ const log = createLogger("DeepSeekSettings");
6
+ const INHERIT_SKIP_IDS = ["ui-theme"];
7
+ const INHERIT_LAYER_FILENAME = "dsh-inherit.cordis.yml";
8
+ function inheritSourceOf(profile, settingsFrom) {
9
+ if (settingsFrom === false) return null;
10
+ return settingsFrom === profile ? null : settingsFrom;
11
+ }
12
+ function stripEntries(text, skipIds) {
13
+ const skip = new Set(skipIds);
14
+ const kept = [];
15
+ let dropping = false;
16
+ for (const line of text.split("\n")) {
17
+ if (line.startsWith("- ")) {
18
+ const id = /^- id:\s*"?([^"\s]+)"?\s*$/.exec(line)?.[1];
19
+ dropping = id !== void 0 && skip.has(id);
20
+ }
21
+ if (!dropping) kept.push(line);
22
+ }
23
+ return kept.join("\n");
24
+ }
25
+ function writeInheritLayer(input) {
26
+ const source = path.join(dshProfileDir(input.source, input.home), "cordis.patch.yml");
27
+ let text;
28
+ try {
29
+ text = fs.readFileSync(source, "utf8");
30
+ } catch {
31
+ log.debug("\u6765\u6E90 profile \u6CA1\u6709\u53EF\u53E0\u7684\u914D\u7F6E\uFF0C\u8DF3\u8FC7", { source });
32
+ return null;
33
+ }
34
+ const dir = path.join(input.cwd, AIPANEL_CACHE_DIR, "dsh");
35
+ fs.mkdirSync(dir, { recursive: true });
36
+ const file = path.join(dir, INHERIT_LAYER_FILENAME);
37
+ fs.writeFileSync(file, stripEntries(text, INHERIT_SKIP_IDS), "utf8");
38
+ log.debug("\u5DF2\u53E0\u4E0A\u6765\u6E90 profile \u7684\u914D\u7F6E", { source, file, skipIds: INHERIT_SKIP_IDS });
39
+ return file;
40
+ }
41
+ export {
42
+ INHERIT_LAYER_FILENAME,
43
+ INHERIT_SKIP_IDS,
44
+ inheritSourceOf,
45
+ stripEntries,
46
+ writeInheritLayer
47
+ };
package/es/types.d.ts CHANGED
@@ -25,6 +25,17 @@ export type DeepSeekProviderOptions = {
25
25
  * 于是启动只会表现为"等 launch token 超时"(见 profile-check.ts 的预检与说明)。
26
26
  */
27
27
  profile?: string;
28
+ /**
29
+ * 机器级设置(模型供应商 / 搜索源 / MCP)从哪个 profile 继承,作为一层 `--patch` 叠在目标 profile 之上。
30
+ *
31
+ * 默认 `web`(即 `providerOptions.profile` 的默认值):**默认就叠,用户不需要配**。dsh 没有
32
+ * "profile 继承 profile",不叠的话自建 profile 只会用建 profile 那一刻的快照,于是"我在 web 里
33
+ * 配过的东西这里看不到"。目标 profile 就是来源时自动跳过(等于不叠)。
34
+ *
35
+ * `false` = 不叠(只保留目标 profile 自己的配置)。每个界面自己的偏好(主题等)**永远不继承** ——
36
+ * 那类行跟着来源走会把界面锁死(见 settings-layer.ts)。
37
+ */
38
+ settingsFrom?: string | false;
28
39
  /** 默认 Agent 预设(dsh settings agent-presets.default,如 code/standard;新建会话的默认模式) */
29
40
  agentPreset?: string;
30
41
  /** 默认权限预设(dsh settings permission.defaultPreset) */
@@ -42,8 +53,9 @@ export type DeepSeekProviderOptions = {
42
53
  */
43
54
  [key: string]: unknown;
44
55
  };
45
- /** 归一化后的 Provider 选项:诊断策略一定是完整的(Partial 已在 provider 内解析),profile 一定落到默认值 */
56
+ /** 归一化后的 Provider 选项:诊断策略一定是完整的(Partial 已在 provider 内解析),profile / settingsFrom 一定落到默认值 */
46
57
  export type DeepSeekResolvedOptions = DeepSeekProviderOptions & {
47
58
  profile: string;
59
+ settingsFrom: string | false;
48
60
  diagnostics: DiagnosticsPolicy;
49
61
  };
package/lib/constants.cjs CHANGED
@@ -31,7 +31,8 @@ const DSH_LOOPBACK_HOST = "127.0.0.1";
31
31
  const DSH_DEFAULT_PORT = 3080;
32
32
  const DSH_DEFAULT_PROFILE = "web";
33
33
  const DEFAULT_DEEPSEEK_PROVIDER_OPTIONS = {
34
- profile: DSH_DEFAULT_PROFILE
34
+ profile: DSH_DEFAULT_PROFILE,
35
+ settingsFrom: DSH_DEFAULT_PROFILE
35
36
  };
36
37
  // Annotate the CommonJS export names for ESM import in node:
37
38
  0 && (module.exports = {
@@ -128,9 +128,12 @@ ${context}
128
128
  }
129
129
  }
130
130
  function startDeepSeekWeb(options) {
131
- const { port, hostname, cwd, patchPath, home, verbose, launchToken } = options;
131
+ const { port, hostname, cwd, patchPath, settingsPatchPath, home, verbose, launchToken } = options;
132
132
  const profile = options.profile ?? import_constants.DSH_DEFAULT_PROFILE;
133
133
  const args = ["--profile", profile];
134
+ if (settingsPatchPath) {
135
+ args.push("--patch", settingsPatchPath);
136
+ }
134
137
  if (patchPath) {
135
138
  args.push("--patch", patchPath);
136
139
  }
@@ -59,6 +59,11 @@ export interface DeepSeekWebOptions {
59
59
  profile?: string;
60
60
  /** cordis overlay 文件路径(--patch 注入 MCP client / aipanel 插件) */
61
61
  patchPath?: string;
62
+ /**
63
+ * 继承层路径(--patch 叠来源 profile 的配置,见 settings-layer.ts)。
64
+ * 必须排在 `patchPath` **之前**:`--patch` 越靠后越赢,AIPanel 自己插的插件行要压过来源 profile。
65
+ */
66
+ settingsPatchPath?: string;
62
67
  /** dsh 数据目录(透传 DSH_HOME;缺省跟随 $DSH_HOME / ~/.dsh) */
63
68
  home?: string;
64
69
  /** 启用 verbose 模式 */
package/lib/provider.cjs CHANGED
@@ -31,6 +31,7 @@ var import_api = require("./api.cjs");
31
31
  var import_deepseek_web = require("./deepseek-web.cjs");
32
32
  var import_profile = require("./profile.cjs");
33
33
  var import_profile_check = require("./profile-check.cjs");
34
+ var import_settings_layer = require("./settings-layer.cjs");
34
35
  var import_system = require("./system.cjs");
35
36
  var import_dsh_install = require("./dsh-install.cjs");
36
37
  const log = (0, import_node.createLogger)("DeepSeekWebProvider");
@@ -155,12 +156,15 @@ Please upgrade:
155
156
  theme: this.uiTheme
156
157
  });
157
158
  const patchPath = (0, import_profile.writeDshOverlay)(options.cwd, overlay);
159
+ const inheritSource = (0, import_settings_layer.inheritSourceOf)(this.opts.profile, this.opts.settingsFrom);
160
+ const settingsPatchPath = inheritSource === null ? null : (0, import_settings_layer.writeInheritLayer)({ cwd: options.cwd, home: this.opts.home, source: inheritSource });
158
161
  const proc = (0, import_deepseek_web.startDeepSeekWeb)({
159
162
  port: options.port,
160
163
  hostname: import_constants.DSH_LOOPBACK_HOST,
161
164
  cwd: options.cwd,
162
165
  profile: this.opts.profile,
163
166
  patchPath,
167
+ ...settingsPatchPath === null ? {} : { settingsPatchPath },
164
168
  home: this.opts.home,
165
169
  verbose: options.verbose,
166
170
  launchToken
@@ -255,6 +259,8 @@ function resolveDeepSeekOptions(options) {
255
259
  ...import_constants.DEFAULT_DEEPSEEK_PROVIDER_OPTIONS,
256
260
  home: po.home ?? options?.home,
257
261
  profile: po.profile ?? options?.profile ?? import_constants.DSH_DEFAULT_PROFILE,
262
+ // 默认就叠(见 settings-layer.ts):用户不会去改配置,机器级设置只配一次是默认预期。
263
+ settingsFrom: po.settingsFrom === false ? false : typeof po.settingsFrom === "string" ? po.settingsFrom : import_constants.DSH_DEFAULT_PROFILE,
258
264
  agentPreset: po.agentPreset ?? options?.agentPreset,
259
265
  permissionPreset: po.permissionPreset ?? options?.permissionPreset,
260
266
  busyEnter: po.busyEnter ?? options?.busyEnter,
@@ -0,0 +1,84 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var settings_layer_exports = {};
29
+ __export(settings_layer_exports, {
30
+ INHERIT_LAYER_FILENAME: () => INHERIT_LAYER_FILENAME,
31
+ INHERIT_SKIP_IDS: () => INHERIT_SKIP_IDS,
32
+ inheritSourceOf: () => inheritSourceOf,
33
+ stripEntries: () => stripEntries,
34
+ writeInheritLayer: () => writeInheritLayer
35
+ });
36
+ module.exports = __toCommonJS(settings_layer_exports);
37
+ var import_node_fs = __toESM(require("node:fs"));
38
+ var import_node_path = __toESM(require("node:path"));
39
+ var import_node = require("@aipanel/core/node");
40
+ var import_dsh_install = require("./dsh-install.cjs");
41
+ const log = (0, import_node.createLogger)("DeepSeekSettings");
42
+ const INHERIT_SKIP_IDS = ["ui-theme"];
43
+ const INHERIT_LAYER_FILENAME = "dsh-inherit.cordis.yml";
44
+ function inheritSourceOf(profile, settingsFrom) {
45
+ if (settingsFrom === false) return null;
46
+ return settingsFrom === profile ? null : settingsFrom;
47
+ }
48
+ function stripEntries(text, skipIds) {
49
+ const skip = new Set(skipIds);
50
+ const kept = [];
51
+ let dropping = false;
52
+ for (const line of text.split("\n")) {
53
+ if (line.startsWith("- ")) {
54
+ const id = /^- id:\s*"?([^"\s]+)"?\s*$/.exec(line)?.[1];
55
+ dropping = id !== void 0 && skip.has(id);
56
+ }
57
+ if (!dropping) kept.push(line);
58
+ }
59
+ return kept.join("\n");
60
+ }
61
+ function writeInheritLayer(input) {
62
+ const source = import_node_path.default.join((0, import_dsh_install.dshProfileDir)(input.source, input.home), "cordis.patch.yml");
63
+ let text;
64
+ try {
65
+ text = import_node_fs.default.readFileSync(source, "utf8");
66
+ } catch {
67
+ log.debug("\u6765\u6E90 profile \u6CA1\u6709\u53EF\u53E0\u7684\u914D\u7F6E\uFF0C\u8DF3\u8FC7", { source });
68
+ return null;
69
+ }
70
+ const dir = import_node_path.default.join(input.cwd, import_node.AIPANEL_CACHE_DIR, "dsh");
71
+ import_node_fs.default.mkdirSync(dir, { recursive: true });
72
+ const file = import_node_path.default.join(dir, INHERIT_LAYER_FILENAME);
73
+ import_node_fs.default.writeFileSync(file, stripEntries(text, INHERIT_SKIP_IDS), "utf8");
74
+ log.debug("\u5DF2\u53E0\u4E0A\u6765\u6E90 profile \u7684\u914D\u7F6E", { source, file, skipIds: INHERIT_SKIP_IDS });
75
+ return file;
76
+ }
77
+ // Annotate the CommonJS export names for ESM import in node:
78
+ 0 && (module.exports = {
79
+ INHERIT_LAYER_FILENAME,
80
+ INHERIT_SKIP_IDS,
81
+ inheritSourceOf,
82
+ stripEntries,
83
+ writeInheritLayer
84
+ });
@@ -0,0 +1,24 @@
1
+ /** 不跟着来源走的那几行(每个界面自己的偏好);理由见文件头 */
2
+ export declare const INHERIT_SKIP_IDS: readonly string[];
3
+ /** 生成层落在项目缓存目录,与 AIPanel 自己的 overlay 同处 */
4
+ export declare const INHERIT_LAYER_FILENAME = "dsh-inherit.cordis.yml";
5
+ /**
6
+ * 该从哪个 profile 继承。
7
+ * @param settingsFrom 解析后的选项:profile 名 / `false`(不叠)
8
+ * @returns 源 profile 名;`null` = 不叠(关掉了,或目标就是它自己)
9
+ */
10
+ export declare function inheritSourceOf(profile: string, settingsFrom: string | false): string | null;
11
+ /**
12
+ * 按**顶层条目**剥掉若干 `- id:` 块(与 dsh-workbench 启动器里那段 awk 同口径:从命中的 `- ` 行
13
+ * 一路丢到下一个顶层 `- ` 为止)。手写而不是上 YAML 库:这一层只是转交一份文本,没必要为它引入依赖,
14
+ * 也不能因为来源文件里有 `!!js` 之类的 dsh 扩展标签就解析失败。
15
+ */
16
+ export declare function stripEntries(text: string, skipIds: readonly string[]): string;
17
+ /**
18
+ * 写出继承层并返回它的路径;来源不存在/读不动时返回 `null`(**不阻断启动**:少了它只是回到老行为)。
19
+ */
20
+ export declare function writeInheritLayer(input: {
21
+ cwd: string;
22
+ home?: string | undefined;
23
+ source: string;
24
+ }): string | null;
package/lib/types.d.ts CHANGED
@@ -25,6 +25,17 @@ export type DeepSeekProviderOptions = {
25
25
  * 于是启动只会表现为"等 launch token 超时"(见 profile-check.ts 的预检与说明)。
26
26
  */
27
27
  profile?: string;
28
+ /**
29
+ * 机器级设置(模型供应商 / 搜索源 / MCP)从哪个 profile 继承,作为一层 `--patch` 叠在目标 profile 之上。
30
+ *
31
+ * 默认 `web`(即 `providerOptions.profile` 的默认值):**默认就叠,用户不需要配**。dsh 没有
32
+ * "profile 继承 profile",不叠的话自建 profile 只会用建 profile 那一刻的快照,于是"我在 web 里
33
+ * 配过的东西这里看不到"。目标 profile 就是来源时自动跳过(等于不叠)。
34
+ *
35
+ * `false` = 不叠(只保留目标 profile 自己的配置)。每个界面自己的偏好(主题等)**永远不继承** ——
36
+ * 那类行跟着来源走会把界面锁死(见 settings-layer.ts)。
37
+ */
38
+ settingsFrom?: string | false;
28
39
  /** 默认 Agent 预设(dsh settings agent-presets.default,如 code/standard;新建会话的默认模式) */
29
40
  agentPreset?: string;
30
41
  /** 默认权限预设(dsh settings permission.defaultPreset) */
@@ -42,8 +53,9 @@ export type DeepSeekProviderOptions = {
42
53
  */
43
54
  [key: string]: unknown;
44
55
  };
45
- /** 归一化后的 Provider 选项:诊断策略一定是完整的(Partial 已在 provider 内解析),profile 一定落到默认值 */
56
+ /** 归一化后的 Provider 选项:诊断策略一定是完整的(Partial 已在 provider 内解析),profile / settingsFrom 一定落到默认值 */
46
57
  export type DeepSeekResolvedOptions = DeepSeekProviderOptions & {
47
58
  profile: string;
59
+ settingsFrom: string | false;
48
60
  diagnostics: DiagnosticsPolicy;
49
61
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aipanel/provider-deepseek",
3
- "version": "1.3.11",
3
+ "version": "1.3.12",
4
4
  "type": "module",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.js",
@@ -21,7 +21,7 @@
21
21
  "registry": "https://registry.npmjs.org/"
22
22
  },
23
23
  "dependencies": {
24
- "@aipanel/core": "1.3.11",
24
+ "@aipanel/core": "1.3.12",
25
25
  "execa": "^9.6.1"
26
26
  },
27
27
  "devDependencies": {