@deepseek-ai/dsh-app-boot 0.2.1-alpha.1 → 0.2.1-alpha.2
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/README.i18n.yaml +4 -4
- package/README.md +5 -1
- package/README.zh.md +5 -1
- package/lib/index.js +61 -8
- package/lib/types/index.d.ts +2 -1
- package/lib/types/official-bundle-packages.d.ts +4 -0
- package/lib/types/official-bundles.d.ts +12 -0
- package/lib/types/official-bundles.generated.d.ts +5 -0
- package/lib/types/package-meta.d.ts +1 -1
- package/lib/types/profile-resolution/legacy-links.d.ts +8 -1
- package/package.json +15 -15
package/README.i18n.yaml
CHANGED
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
en: 2fdfe02f2ed4a258
|
|
22
22
|
zh: d748228ece579c4a
|
|
23
23
|
/deepseek-ai-dsh-app-boot/use-this-package/starting-the-app:
|
|
24
|
-
en:
|
|
25
|
-
zh:
|
|
24
|
+
en: 4a424cd401556f20
|
|
25
|
+
zh: 0b34dd18e0db6cea
|
|
26
26
|
/deepseek-ai-dsh-app-boot/use-this-package/profiles:
|
|
27
27
|
en: d50b0fdaf62353dd
|
|
28
28
|
zh: 0fccb6968602e5de
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
en: c4a301652b851ce9
|
|
34
34
|
zh: 784871e19cd9db0a
|
|
35
35
|
/deepseek-ai-dsh-app-boot/use-this-package/reading-plugin-display-metadata:
|
|
36
|
-
en:
|
|
37
|
-
zh:
|
|
36
|
+
en: a9afb263b03d112c
|
|
37
|
+
zh: 31f5e797cd953c15
|
|
38
38
|
/deepseek-ai-dsh-app-boot/use-this-package/startup-and-reload-failures:
|
|
39
39
|
en: 09890e218ab49c84
|
|
40
40
|
zh: e3d86597e7fb1adb
|
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ installFailLoud('dsh')
|
|
|
40
40
|
const ctx = await boot('dsh', resolveConfigPath(argv[2], process.env.DSH_SNAPSHOT))
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
`installFailLoud` writes one labelled `util.inspect` diagnostic to stderr for an unhandled rejection or an uncaught exception, awaits the surface's release hook under a fixed timeout, and exits 1; control never returns to the failed operation, because only the throw site knows which state is intact, and the event loop runs only until the release settles or times out. With that entry point, startup keeps every plugin that can activate. An enabled failed plugin produces a labelled warning. A failed required entry makes startup dispose the whole app and exit nonzero; required ids absent from a profile and disabled required entries do not affect startup. The global required list covers shared Agent execution, application endpoints, and Web bootstrap/transport: `agent-loop`, `webserver`, `modules`, `connection`, `headless-runner`, `acp`, and `sdk-jsonrpc-server`.
|
|
43
|
+
`installFailLoud` writes one labelled `util.inspect` diagnostic to stderr for an unhandled rejection or an uncaught exception, awaits the surface's release hook under a fixed timeout, and exits 1; control never returns to the failed operation, because only the throw site knows which state is intact, and the event loop runs only until the release settles or times out. With that entry point, startup keeps every plugin that can activate. An enabled failed plugin produces a labelled warning. A failed required entry makes startup dispose the whole app and exit nonzero; required ids absent from a profile and disabled required entries do not affect startup. The global required list covers shared Agent execution, application endpoints, and Web bootstrap/transport: `agent-loop`, `webserver`, `web-runtime`, `modules`, `connection`, `headless-runner`, `acp`, and `sdk-jsonrpc-server`.
|
|
44
44
|
|
|
45
45
|
<a id="profiles"></a>
|
|
46
46
|
### Profiles
|
|
@@ -82,8 +82,12 @@ The projector preserves native omission behavior by checking literal defaults ag
|
|
|
82
82
|
|
|
83
83
|
### Reading plugin display metadata
|
|
84
84
|
|
|
85
|
+
`resolvePluginResource(specifier, parentURL)` resolves a plugin module or exported resource to its local filesystem path through the active Node ESM resolver without evaluating it. It throws when the resolver is unavailable or the resource cannot resolve to a local file.
|
|
86
|
+
|
|
85
87
|
Use `readPluginMeta(specifier, parentURL)` or `ctx.pluginPackages.metaOf(specifier, parentURL)` to read installed package display text without importing or activating the plugin. Lookup uses the complete package specifier and the caller's resolution base, respecting Node exports. File paths and file URLs return no metadata without resolving resources. For a package-root specifier, missing locale fields fall back to the accessible `package.json`; a subpath specifier never reads a `package.json`. Malformed metadata returns an `error` diagnostic. Results retain translations for Client-side language selection. The reader also loads an image data URL, even when locale text is complete: a package root uses its manifest `icon`, or `<package>/icon` when that field is omitted; a subpath uses `<specifier>/icon`. An icon error preserves valid text alongside the diagnostic. See [Plugin display metadata](../../../docs/cookbook/adding-a-package.md#plugin-display-metadata) for the author format.
|
|
86
88
|
|
|
89
|
+
`ON_DEMAND_BUNDLES` names the public Official packages installed only on request. `OFFICIAL_ON_DEMAND_CATALOG` embeds their package-owned localized metadata and icons for offline discovery; `pnpm gen-official-bundle-catalog` explicitly updates generated content, and `verify-official-bundle-catalog` checks resource completeness and freshness; builds consume the committed catalog without importing provider code. The catalog contains no install target: [Plugin Manager](../plugin-manager/README.md#use-this-package) derives it from the running version and installation and uses the ordinary bundle installer. The [product-use check](../../../scripts/verify-product-use.ts) composes shipped and on-demand selections against Web without executing providers.
|
|
90
|
+
|
|
87
91
|
<a id="startup-and-reload-failures"></a>
|
|
88
92
|
### Startup and reload failures
|
|
89
93
|
|
package/README.zh.md
CHANGED
|
@@ -40,7 +40,7 @@ installFailLoud('dsh')
|
|
|
40
40
|
const ctx = await boot('dsh', resolveConfigPath(argv[2], process.env.DSH_SNAPSHOT))
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
`installFailLoud` 会为未处理 rejection 或未捕获异常向 stderr 写一条带标签的 `util.inspect` 诊断,在固定超时内等待界面的 release 钩子,然后以 1 退出;控制流不会回到失败的操作,因为只有抛出点知道哪些状态仍然完整,事件循环只运行到 release 结束或超时。有了这个入口,启动会保留所有能够激活的插件。启用但失败的插件会产生带标签的警告。required entry 失败时,启动会拆卸整个应用并以非零码退出;profile 中不存在的 required id 和已禁用的 required entry 不影响启动。全局 required list 覆盖共享 Agent 执行、应用 endpoint,以及 Web 启动与传输:`agent-loop`、`webserver`、`modules`、`connection`、`headless-runner`、`acp` 和 `sdk-jsonrpc-server`。
|
|
43
|
+
`installFailLoud` 会为未处理 rejection 或未捕获异常向 stderr 写一条带标签的 `util.inspect` 诊断,在固定超时内等待界面的 release 钩子,然后以 1 退出;控制流不会回到失败的操作,因为只有抛出点知道哪些状态仍然完整,事件循环只运行到 release 结束或超时。有了这个入口,启动会保留所有能够激活的插件。启用但失败的插件会产生带标签的警告。required entry 失败时,启动会拆卸整个应用并以非零码退出;profile 中不存在的 required id 和已禁用的 required entry 不影响启动。全局 required list 覆盖共享 Agent 执行、应用 endpoint,以及 Web 启动与传输:`agent-loop`、`webserver`、`web-runtime`、`modules`、`connection`、`headless-runner`、`acp` 和 `sdk-jsonrpc-server`。
|
|
44
44
|
|
|
45
45
|
<a id="profiles"></a>
|
|
46
46
|
### Profile
|
|
@@ -82,8 +82,12 @@ profile 导入插件前,DSH 会检查其 `peerDependencies` 中对 `@deepseek-
|
|
|
82
82
|
|
|
83
83
|
### 读取插件展示元信息
|
|
84
84
|
|
|
85
|
+
`resolvePluginResource(specifier, parentURL)` 通过活动的 Node ESM 解析器将插件模块或导出资源解析为本地文件路径,不执行其代码。解析器不可用或资源无法解析为本地文件时会抛出错误。
|
|
86
|
+
|
|
85
87
|
使用 `readPluginMeta(specifier, parentURL)` 或 `ctx.pluginPackages.metaOf(specifier, parentURL)` 读取已安装包的展示文本,无需导入或激活插件。查询使用完整包标识与调用方的解析基准,并遵循 Node exports。文件路径与文件 URL 不解析资源,直接返回无元信息。包根标识缺失的 locale 字段回退到可访问的 `package.json`;子路径标识从不读取 `package.json`。格式错误的元信息返回 `error` 诊断。结果保留翻译,由 Client 选择语言。即使 locale 文本完整,读取器也会加载图片 data URL:包根使用清单 `icon`,省略该字段时使用 `<包名>/icon`;子路径使用 `<标识>/icon`。图标出错时,保留有效文本并附上诊断。作者格式见[插件展示元信息](../../../docs/cookbook/adding-a-package.zh.md#plugin-display-metadata)。
|
|
86
88
|
|
|
89
|
+
`ON_DEMAND_BUNDLES` 列出仅按需安装的官方公开包。`OFFICIAL_ON_DEMAND_CATALOG` 内嵌这些包拥有的本地化元信息和图标,支持离线发现;`pnpm gen-official-bundle-catalog` 显式更新生成内容,`verify-official-bundle-catalog` 检查资源完整性与新鲜度;构建只读取已提交的目录,不导入提供者代码。目录不保存安装目标;[插件管理器](../plugin-manager/README.zh.md#use-this-package)根据当前版本和安装位置确定目标,并使用普通组合包安装器。[产品用途检查](../../../scripts/verify-product-use.ts)将随附和按需选择与 Web 组合,但不执行提供者。
|
|
90
|
+
|
|
87
91
|
<a id="startup-and-reload-failures"></a>
|
|
88
92
|
### 启动与重载失败
|
|
89
93
|
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire, isBuiltin } from "node:module";
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
-
import fs, { existsSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
|
+
import fs, { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { inspect, parseEnv } from "node:util";
|
|
5
5
|
import { basename, dirname, extname, isAbsolute, join, relative, resolve, sep, win32 } from "node:path";
|
|
6
6
|
import * as yaml from "js-yaml";
|
|
@@ -441,7 +441,7 @@ async function setProfileVersionExemption(profileDir, packageVersion, runtimeVer
|
|
|
441
441
|
}
|
|
442
442
|
//#endregion
|
|
443
443
|
//#region lib/types/profile-resolution/legacy-links.js
|
|
444
|
-
/** Package directory canonicalization through the active runtime carrier's filesystem. */
|
|
444
|
+
/** Package directory and resource canonicalization through the active runtime carrier's filesystem. */
|
|
445
445
|
/**
|
|
446
446
|
* Return whether the process reads application modules from pkg's virtual filesystem.
|
|
447
447
|
* @returns whether pkg owns the module filesystem.
|
|
@@ -457,6 +457,15 @@ function isPackagedExecutable() {
|
|
|
457
457
|
function realModuleDirectory(path) {
|
|
458
458
|
return isPackagedExecutable() ? realpathSync(path) : realpathSync.native(path);
|
|
459
459
|
}
|
|
460
|
+
/** Canonicalize a module resource, preserving physical file aliases.
|
|
461
|
+
* SEA archive files are symlink-free and support stat and reads, while their containing directories support realpath.
|
|
462
|
+
* @param path Existing module resource path.
|
|
463
|
+
* @returns Canonical resource path under the active carrier's filesystem.
|
|
464
|
+
* @throws When the resource or its directory cannot be inspected or resolved.
|
|
465
|
+
*/
|
|
466
|
+
function realModuleFile(path) {
|
|
467
|
+
return !isPackagedExecutable() || lstatSync(path).isSymbolicLink() ? realpathSync(path) : join(realModuleDirectory(dirname(path)), basename(path));
|
|
468
|
+
}
|
|
460
469
|
//#endregion
|
|
461
470
|
//#region lib/types/profile.js
|
|
462
471
|
/**
|
|
@@ -555,10 +564,17 @@ const DEFAULT_PROFILE_BUNDLES = ["@deepseek-ai/dsh-base"];
|
|
|
555
564
|
* [admission](../../../../.agents/notes/implemented/architecture/2026-09-21-experimental-capabilities-as-optional-bundles.md)).
|
|
556
565
|
*/
|
|
557
566
|
const OPTIONAL_BUNDLES = [
|
|
567
|
+
"@deepseek-ai/dsh-experimental-session-search",
|
|
568
|
+
"@deepseek-ai/dsh-experimental-ralph-bundle",
|
|
569
|
+
"@deepseek-ai/dsh-experimental-terminal-bundle",
|
|
570
|
+
"@deepseek-ai/dsh-experimental-badge-skill-bundle",
|
|
571
|
+
"@deepseek-ai/dsh-experimental-session-titles-bundle",
|
|
558
572
|
"@deepseek-ai/dsh-experimental-agent-team-profile",
|
|
559
573
|
"@deepseek-ai/dsh-experimental-voice-input-bundle",
|
|
574
|
+
"@deepseek-ai/dsh-experimental-cot-translation-bundle",
|
|
560
575
|
"@deepseek-ai/dsh-experimental-auto-review",
|
|
561
|
-
"@deepseek-ai/dsh-experimental-inspector-profile"
|
|
576
|
+
"@deepseek-ai/dsh-experimental-inspector-profile",
|
|
577
|
+
"@deepseek-ai/dsh-experimental-tool-worktree"
|
|
562
578
|
];
|
|
563
579
|
const PROFILE_PATCH_TEMPLATE = `# Your patch layer for this dsh profile, applied after every bundle layer:
|
|
564
580
|
# a top-level YAML array of loader patch entries (id-targeted config
|
|
@@ -1931,17 +1947,17 @@ function iconOf(specifier, packageName, parentURL, manifestPath, value) {
|
|
|
1931
1947
|
label = manifestPath;
|
|
1932
1948
|
const root = realpathSync(dirname(manifestPath));
|
|
1933
1949
|
target = resolve(root, icon);
|
|
1934
|
-
const local = relative(root,
|
|
1950
|
+
const local = relative(root, realModuleFile(target));
|
|
1935
1951
|
if (local === ".." || local.startsWith(`..${sep}`) || isAbsolute(local)) throw new Error(`${label}: icon must remain inside its manifest directory`);
|
|
1936
1952
|
} else {
|
|
1937
1953
|
const exported = optionalResourcePath(`${specifier}/icon`, parentURL);
|
|
1938
1954
|
if (exported === void 0) return void 0;
|
|
1939
1955
|
target = label = exported;
|
|
1940
|
-
assertPackageOwned(
|
|
1956
|
+
assertPackageOwned(realModuleFile(target), packageName);
|
|
1941
1957
|
}
|
|
1942
1958
|
const mediaType = ICON_MEDIA_TYPES.get(extname(target).toLowerCase());
|
|
1943
1959
|
if (mediaType === void 0) throw new Error(`${label}: icon must be SVG, PNG, JPEG, or WebP`);
|
|
1944
|
-
const file =
|
|
1960
|
+
const file = realModuleFile(target);
|
|
1945
1961
|
const stat = statSync(file);
|
|
1946
1962
|
if (!stat.isFile()) throw new Error(`${label}: icon must be a regular file`);
|
|
1947
1963
|
if (stat.size > MAX_ICON_BYTES) throw new Error(`${label}: icon exceeds 256 KiB`);
|
|
@@ -1959,7 +1975,7 @@ function assertPackageOwned(file, name) {
|
|
|
1959
1975
|
}
|
|
1960
1976
|
/**
|
|
1961
1977
|
* Resolve a plugin resource through the active Node ESM resolver without evaluating it.
|
|
1962
|
-
* @param specifier -
|
|
1978
|
+
* @param specifier - plugin module or exported resource specifier.
|
|
1963
1979
|
* @param parentURL - owning module-resolution base.
|
|
1964
1980
|
* @returns the local filesystem path selected by Node and the active profile.
|
|
1965
1981
|
* @throws when the resolver is unavailable or the resource cannot resolve to a local file.
|
|
@@ -2241,6 +2257,42 @@ function prepareProfilePatches(ctx, patches, parentURL, binName = "dsh") {
|
|
|
2241
2257
|
return rows.length === 0 ? [] : [{ insert: rows }];
|
|
2242
2258
|
}
|
|
2243
2259
|
//#endregion
|
|
2260
|
+
//#region lib/types/official-bundle-packages.js
|
|
2261
|
+
/** Package admission shared by offline catalog generation and release ordering. */
|
|
2262
|
+
/** Public DSH release members available through the ordinary on-demand bundle installer. */
|
|
2263
|
+
const ON_DEMAND_BUNDLES = ["@deepseek-ai/dsh-subagent-claude-code", "@deepseek-ai/dsh-subagent-codex"];
|
|
2264
|
+
//#endregion
|
|
2265
|
+
//#region lib/types/official-bundles.generated.js
|
|
2266
|
+
/** Generated offline Official bundle metadata. Run pnpm gen-official-bundle-catalog; do not edit. */
|
|
2267
|
+
/** Official on-demand entries, independent of installed packages and registry availability. */
|
|
2268
|
+
const OFFICIAL_ON_DEMAND_CATALOG = [{
|
|
2269
|
+
packageName: "@deepseek-ai/dsh-subagent-claude-code",
|
|
2270
|
+
meta: {
|
|
2271
|
+
title: {
|
|
2272
|
+
"en": "Claude Code subagent",
|
|
2273
|
+
"zh": "Claude Code 子智能体"
|
|
2274
|
+
},
|
|
2275
|
+
description: {
|
|
2276
|
+
"en": "Delegate one task to Claude Code using its native authentication and settings.",
|
|
2277
|
+
"zh": "使用 Claude Code 原生认证和设置委派单个任务。"
|
|
2278
|
+
},
|
|
2279
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIxNC45ODkzIiB5PSIxNS4xODc3IiB3aWR0aD0iMTIuMjM2NSIgaGVpZ2h0PSIxMi4yMzY1IiByeD0iMiIgZmlsbD0idXJsKCNkc2hfcGx1Z2luX2FydF9SMGEpIiBmaWxsLW9wYWNpdHk9IjAuOCI+PC9yZWN0PjxyZWN0IHg9IjguODcxMDkiIHk9IjkuMDY5NyIgd2lkdGg9IjEyLjIzNjUiIGhlaWdodD0iMTIuMjM2NSIgcng9IjIiIGZpbGw9InVybCgjZHNoX3BsdWdpbl9hcnRfUjBiKSIgZmlsbC1vcGFjaXR5PSIwLjgiPjwvcmVjdD48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImRzaF9wbHVnaW5fYXJ0X1IwYSIgeDE9IjIxLjEwNzUiIHkxPSIxNS4xODc3IiB4Mj0iMjEuMTA3NSIgeTI9IjI3LjQyNDMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjNDVFN0E0Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDU5MDlEIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImRzaF9wbHVnaW5fYXJ0X1IwYiIgeDE9IjE0Ljk4OTQiIHkxPSI5LjA2OTciIHgyPSIxNC45ODk0IiB5Mj0iMjEuMzA2MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2OUI5RkYiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMzMjRERTIiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4K"
|
|
2280
|
+
}
|
|
2281
|
+
}, {
|
|
2282
|
+
packageName: "@deepseek-ai/dsh-subagent-codex",
|
|
2283
|
+
meta: {
|
|
2284
|
+
title: {
|
|
2285
|
+
"en": "Codex subagent",
|
|
2286
|
+
"zh": "Codex 子智能体"
|
|
2287
|
+
},
|
|
2288
|
+
description: {
|
|
2289
|
+
"en": "Delegate one task to Codex using its native authentication and settings.",
|
|
2290
|
+
"zh": "使用 Codex 原生认证和设置委派单个任务。"
|
|
2291
|
+
},
|
|
2292
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIxNC45ODkzIiB5PSIxNS4xODc3IiB3aWR0aD0iMTIuMjM2NSIgaGVpZ2h0PSIxMi4yMzY1IiByeD0iMiIgZmlsbD0idXJsKCNkc2hfcGx1Z2luX2FydF9SMGEpIiBmaWxsLW9wYWNpdHk9IjAuOCI+PC9yZWN0PjxyZWN0IHg9IjguODcxMDkiIHk9IjkuMDY5NyIgd2lkdGg9IjEyLjIzNjUiIGhlaWdodD0iMTIuMjM2NSIgcng9IjIiIGZpbGw9InVybCgjZHNoX3BsdWdpbl9hcnRfUjBiKSIgZmlsbC1vcGFjaXR5PSIwLjgiPjwvcmVjdD48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImRzaF9wbHVnaW5fYXJ0X1IwYSIgeDE9IjIxLjEwNzUiIHkxPSIxNS4xODc3IiB4Mj0iMjEuMTA3NSIgeTI9IjI3LjQyNDMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjNDVFN0E0Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDU5MDlEIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImRzaF9wbHVnaW5fYXJ0X1IwYiIgeDE9IjE0Ljk4OTQiIHkxPSI5LjA2OTciIHgyPSIxNC45ODk0IiB5Mj0iMjEuMzA2MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2OUI5RkYiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMzMjRERTIiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4K"
|
|
2293
|
+
}
|
|
2294
|
+
}];
|
|
2295
|
+
//#endregion
|
|
2244
2296
|
//#region lib/types/config-schema/native.js
|
|
2245
2297
|
/** Identity checks at the plugin-export and lazy-builder boundaries. */
|
|
2246
2298
|
/**
|
|
@@ -3939,6 +3991,7 @@ const FIBER_DISPOSED = 4;
|
|
|
3939
3991
|
const requiredStartupEntryIds = new Set([
|
|
3940
3992
|
"agent-loop",
|
|
3941
3993
|
"webserver",
|
|
3994
|
+
"web-runtime",
|
|
3942
3995
|
"modules",
|
|
3943
3996
|
"connection",
|
|
3944
3997
|
"headless-runner",
|
|
@@ -4237,4 +4290,4 @@ function addHarnessSourceSection(ctx, sourceRoot) {
|
|
|
4237
4290
|
});
|
|
4238
4291
|
}
|
|
4239
4292
|
//#endregion
|
|
4240
|
-
export { DEFAULT_PROFILE_BUNDLES, FAIL_LOUD_RELEASE_TIMEOUT_MS, HARNESS_SOURCE_SECTION, LOADER_EXPRESSION_SCHEMA, OPTIONAL_BUNDLES, PROFILES_DIR, PROFILE_COMPATIBILITY_FILENAME, PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, ProfileRuntimeResolution, StartupError, addHarnessSourceSection, auditStartupEntries, boot, bundlePatchFiles, bundlePatchPaths, composeEntries, createConfigProjector, createRuntimeResolution, evaluatePluginCompatibility, generateConfigSchema, getDshRuntimeVersion, initProfile, installFailLoud, isNativeConfigSchema, loadEnv, loadLayeredEnv, loadOptionalPatches, loadOverlayPatches, loadProfile, loadProfileDirectory, mountRootInclude, pluginCompatibilityWarning, prepareProfileEntries, prepareProfilePatches, readPluginMeta, readProfileCompatibility, readProfileManifest, readProfilePatches, readProfilePlugins, readProfileVersionExemptions, reconcileProfilePatches, reconcileProfilePlugins, removeLinkProjections, renderConfigDump, reportSkippedBundles, resolveBundleDir, resolveConfigPath, resolveProfileDir, resolveTelemetryPatch, sanitizeProfile, setProfileVersionExemption, writeProfileBundles, writeProfileManifest };
|
|
4293
|
+
export { DEFAULT_PROFILE_BUNDLES, FAIL_LOUD_RELEASE_TIMEOUT_MS, HARNESS_SOURCE_SECTION, LOADER_EXPRESSION_SCHEMA, OFFICIAL_ON_DEMAND_CATALOG, ON_DEMAND_BUNDLES, OPTIONAL_BUNDLES, PROFILES_DIR, PROFILE_COMPATIBILITY_FILENAME, PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, ProfileRuntimeResolution, StartupError, addHarnessSourceSection, auditStartupEntries, boot, bundlePatchFiles, bundlePatchPaths, composeEntries, createConfigProjector, createRuntimeResolution, evaluatePluginCompatibility, generateConfigSchema, getDshRuntimeVersion, initProfile, installFailLoud, isNativeConfigSchema, loadEnv, loadLayeredEnv, loadOptionalPatches, loadOverlayPatches, loadProfile, loadProfileDirectory, mountRootInclude, pluginCompatibilityWarning, prepareProfileEntries, prepareProfilePatches, readPluginMeta, readProfileCompatibility, readProfileManifest, readProfilePatches, readProfilePlugins, readProfileVersionExemptions, reconcileProfilePatches, reconcileProfilePlugins, removeLinkProjections, renderConfigDump, reportSkippedBundles, resolveBundleDir, resolveConfigPath, resolvePluginResource, resolveProfileDir, resolveTelemetryPatch, sanitizeProfile, setProfileVersionExemption, writeProfileBundles, writeProfileManifest };
|
package/lib/types/index.d.ts
CHANGED
|
@@ -15,7 +15,8 @@ export { sanitizeProfile } from './profile-sanitize.ts';
|
|
|
15
15
|
export { getDshRuntimeVersion, evaluatePluginCompatibility, pluginCompatibilityWarning, type PluginCompatibility } from './plugin-compatibility.ts';
|
|
16
16
|
export { PROFILE_COMPATIBILITY_FILENAME, readProfileCompatibility, readProfileVersionExemptions, setProfileVersionExemption, type ProfileCompatibility, } from './profile-compatibility.ts';
|
|
17
17
|
export { prepareProfileEntries, prepareProfilePatches } from './compatibility-preflight.ts';
|
|
18
|
-
export { readPluginMeta } from './package-meta.ts';
|
|
18
|
+
export { readPluginMeta, resolvePluginResource } from './package-meta.ts';
|
|
19
|
+
export { ON_DEMAND_BUNDLES, OFFICIAL_ON_DEMAND_CATALOG, type OfficialBundleCatalogEntry } from './official-bundles.ts';
|
|
19
20
|
export { generateConfigSchema, type ConfigSchemaDump, type NativeConfigSchema } from './config-schema/index.ts';
|
|
20
21
|
export { createConfigProjector, LOADER_EXPRESSION_SCHEMA, type ConfigProjection } from './config-schema/projector.ts';
|
|
21
22
|
export { isNativeConfigSchema } from './config-schema/native.ts';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Package admission shared by offline catalog generation and release ordering. */
|
|
2
|
+
/** Public DSH release members available through the ordinary on-demand bundle installer. */
|
|
3
|
+
export declare const ON_DEMAND_BUNDLES: readonly string[];
|
|
4
|
+
//# sourceMappingURL=official-bundle-packages.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Official bundles offered without installing their provider runtimes in the DSH distribution. */
|
|
2
|
+
import type { PluginLocalizedMeta } from '@deepseek-ai/dsh-package-manifest';
|
|
3
|
+
export { ON_DEMAND_BUNDLES } from './official-bundle-packages.ts';
|
|
4
|
+
/** Offline discovery metadata; installation state and the requested version belong to the running host. */
|
|
5
|
+
export interface OfficialBundleCatalogEntry {
|
|
6
|
+
/** Exact npm package name accepted by the existing bundle installer. */
|
|
7
|
+
readonly packageName: string;
|
|
8
|
+
/** Package-owned localized text and a self-contained icon, embedded without provider code. */
|
|
9
|
+
readonly meta: Required<Pick<PluginLocalizedMeta, 'title' | 'description' | 'icon'>>;
|
|
10
|
+
}
|
|
11
|
+
export { OFFICIAL_ON_DEMAND_CATALOG } from './official-bundles.generated.ts';
|
|
12
|
+
//# sourceMappingURL=official-bundles.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Generated offline Official bundle metadata. Run pnpm gen-official-bundle-catalog; do not edit. */
|
|
2
|
+
import type { OfficialBundleCatalogEntry } from './official-bundles.ts';
|
|
3
|
+
/** Official on-demand entries, independent of installed packages and registry availability. */
|
|
4
|
+
export declare const OFFICIAL_ON_DEMAND_CATALOG: readonly OfficialBundleCatalogEntry[];
|
|
5
|
+
//# sourceMappingURL=official-bundles.generated.d.ts.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { PluginLocalizedMeta } from '@deepseek-ai/dsh-package-manifest';
|
|
3
3
|
/**
|
|
4
4
|
* Resolve a plugin resource through the active Node ESM resolver without evaluating it.
|
|
5
|
-
* @param specifier -
|
|
5
|
+
* @param specifier - plugin module or exported resource specifier.
|
|
6
6
|
* @param parentURL - owning module-resolution base.
|
|
7
7
|
* @returns the local filesystem path selected by Node and the active profile.
|
|
8
8
|
* @throws when the resolver is unavailable or the resource cannot resolve to a local file.
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
/** Package directory canonicalization through the active runtime carrier's filesystem. */
|
|
1
|
+
/** Package directory and resource canonicalization through the active runtime carrier's filesystem. */
|
|
2
2
|
/**
|
|
3
3
|
* Resolve a directory through the active carrier's filesystem implementation.
|
|
4
4
|
* @param path - directory path to canonicalize.
|
|
5
5
|
* @returns the canonical directory path.
|
|
6
6
|
*/
|
|
7
7
|
export declare function realModuleDirectory(path: string): string;
|
|
8
|
+
/** Canonicalize a module resource, preserving physical file aliases.
|
|
9
|
+
* SEA archive files are symlink-free and support stat and reads, while their containing directories support realpath.
|
|
10
|
+
* @param path Existing module resource path.
|
|
11
|
+
* @returns Canonical resource path under the active carrier's filesystem.
|
|
12
|
+
* @throws When the resource or its directory cannot be inspected or resolved.
|
|
13
|
+
*/
|
|
14
|
+
export declare function realModuleFile(path: string): string;
|
|
8
15
|
//# sourceMappingURL=legacy-links.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-app-boot",
|
|
3
3
|
"description": "Shared boot glue for the app bins: .env loading, fail-loud Loader guards, snapshot-aware config resolution, and the Loader boot sequence",
|
|
4
|
-
"version": "0.2.1-alpha.
|
|
4
|
+
"version": "0.2.1-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -32,35 +32,35 @@
|
|
|
32
32
|
],
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"@deepseek-ai/dsh-atomic-write": "0.2.1-alpha.2",
|
|
36
|
+
"@deepseek-ai/dsh-package-manifest": "0.2.1-alpha.2",
|
|
35
37
|
"@eslint-community/regexpp": "^4.12.2",
|
|
36
38
|
"ajv": "^8.20.0",
|
|
37
|
-
"js-yaml": "^4.2
|
|
38
|
-
"node-addon-require-builtin": "^0.1.
|
|
39
|
+
"js-yaml": "^4.3.2",
|
|
40
|
+
"node-addon-require-builtin": "^0.1.9",
|
|
39
41
|
"resolve.exports": "^2.0.3",
|
|
40
|
-
"semver": "^7.8.5"
|
|
41
|
-
"@deepseek-ai/dsh-atomic-write": "0.2.1-alpha.1",
|
|
42
|
-
"@deepseek-ai/dsh-package-manifest": "0.2.1-alpha.1"
|
|
42
|
+
"semver": "^7.8.5"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@deepseek-ai/cordis-plugin-group": "~1.0.5-alpha.1",
|
|
46
46
|
"@deepseek-ai/cordis-plugin-include": "~1.0.10-alpha.1",
|
|
47
|
-
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.1",
|
|
48
47
|
"@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
|
|
49
|
-
"@deepseek-ai/dsh-
|
|
50
|
-
"@deepseek-ai/
|
|
51
|
-
"@deepseek-ai/dsh-
|
|
48
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.2",
|
|
49
|
+
"@deepseek-ai/dsh-home-paths": "0.2.1-alpha.2",
|
|
50
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2",
|
|
51
|
+
"@deepseek-ai/cordis": "~4.0.5-alpha.1"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/js-yaml": "^4.0.9",
|
|
55
|
-
"@types/semver": "^7.8.0",
|
|
56
54
|
"@deepseek-ai/schemastery": "~3.18.5-alpha.1",
|
|
57
55
|
"@deepseek-ai/cordis-plugin-group": "~1.0.5-alpha.1",
|
|
58
56
|
"@deepseek-ai/cordis-plugin-include": "~1.0.10-alpha.1",
|
|
59
57
|
"@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
|
|
60
58
|
"@deepseek-ai/cordis-plugin-timer": "~1.1.7-alpha.1",
|
|
61
|
-
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.
|
|
62
|
-
"@deepseek-ai/dsh-home-paths": "0.2.1-alpha.
|
|
63
|
-
"@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.
|
|
59
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.2",
|
|
60
|
+
"@deepseek-ai/dsh-home-paths": "0.2.1-alpha.2",
|
|
61
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2",
|
|
62
|
+
"@types/js-yaml": "^4.0.9",
|
|
63
|
+
"@types/semver": "^7.8.0",
|
|
64
64
|
"@deepseek-ai/cordis": "~4.0.5-alpha.1"
|
|
65
65
|
}
|
|
66
66
|
}
|