@deepseek-ai/dsh-app-boot 0.1.2-alpha.5 → 0.1.3-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 +2 -2
- package/README.md +6 -2
- package/README.zh.md +6 -2
- package/lib/index.js +32 -12
- package/lib/types/index.d.ts +6 -5
- package/lib/types/profile.d.ts +2 -25
- package/package.json +12 -11
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write packages/boot/app-boot/README.md
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: e6afceaebf7fc94f5a6d708639de128cb9005d72
|
|
6
|
+
README.zh.md: a98be1fd5d0624f971af5d0ce5a81fdc0cafab54
|
package/README.md
CHANGED
|
@@ -45,15 +45,19 @@ With that entry point, success looks like a running app with every plugin active
|
|
|
45
45
|
<a id="profiles"></a>
|
|
46
46
|
### Profiles
|
|
47
47
|
|
|
48
|
+
Import profile and bundle declaration types from [`@deepseek-ai/dsh-package-manifest`](../../util/package-manifest/README.md). App-boot owns profile loading, JSON validation, and resolved runtime data.
|
|
49
|
+
|
|
48
50
|
A profile is how one dsh installation ships different app surfaces: `web`, `headless`, `acp`, `sdk`, and `sdk-minimal` start distinct compositions from the same launcher. A profile lives at `$DSH_HOME/profiles/<name>` and combines installable bundles, its own `cordis.patch.yml`, and `patchReload: live | startup`; omitted reload policy keeps the historical `live` default for custom profiles. The shipped `web` template uses live reload, while the other shipped templates apply patches only at startup. `sdk-minimal` names only its standalone bundle; the other templates retain base-plus-mode stacks. `dsh plugin` creates custom profiles, and a missing bundle or one without a patch declaration fails startup loudly.
|
|
49
51
|
|
|
50
52
|
Your machine-local preferences also live in the Harness home:
|
|
51
53
|
|
|
52
|
-
- **`.env`** — your ordinary environment layers: the invoking directory's file outranks the Harness-home file, and both sit below the inherited environment. Variables that decide how the process starts (`PATH`,
|
|
54
|
+
- **`.env`** — your ordinary environment layers: the invoking directory's file outranks the Harness-home file, and both sit below the inherited environment. Variables that decide how the process starts (`PATH`, `DSH_*`, `XDG_*` and similar) are rejected from files: export them instead. The four proxy names (`HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY`) are accepted from the Harness-home file only, never from the invoking directory's, which arrives with a clone. For a non-product bin that just wants one directory's `.env`, a missing file is fine and an unloadable one prints one labelled warning line.
|
|
53
55
|
- **`cordis.patch.yml`** — your tweak layer, applied after every bundle layer (per-profile first, then the home-level file, which therefore outranks it): replace one entry's whole config (restating the fields you keep), insert new entries, or interpolate `!!js` expressions at boot. A patch naming an entry that does not exist prints a stderr warning; an empty or comments-only file fails boot — disable the layer with `[]` instead.
|
|
54
56
|
|
|
55
57
|
Profiles with `patchReload: live` watch both user patch files: a valid edit recomposes without restart, while a rejected edit leaves the last good app running. A `startup` profile installs neither those watchers nor the launcher's watch-only HMR fallback.
|
|
56
58
|
|
|
59
|
+
Inserted plugin names may be absolute filesystem paths, file URLs, or package specifiers. Patch loading converts absolute paths and patch-relative `./` or `../` paths to file URLs within `insert` rows and their nested groups; existing-entry name assertions and replacement `config` values remain literal.
|
|
60
|
+
|
|
57
61
|
### Previewing the effective configuration
|
|
58
62
|
|
|
59
63
|
Before you boot, you can print the exact configuration the app will mount: the dump shows the composed entry list with `!!js` expressions verbatim, grouped under comments naming each source file and the patch layers that changed it, as one loadable YAML document. Patches that match no row are reported with their layer label; a missing, unparsable, or invalid config fails the dump.
|
|
@@ -124,7 +128,7 @@ Indirectly, through the loaded plugin tree, which alone contributes model contex
|
|
|
124
128
|
|
|
125
129
|
#### KV Cache effect
|
|
126
130
|
|
|
127
|
-
Boot itself
|
|
131
|
+
Boot itself changes no request prefix. `addHarnessSourceSection` places its source path after first-party reusable instructions, so different checkouts leave those preceding bytes unchanged when tools and configuration match. Provider cache reuse is not guaranteed.
|
|
128
132
|
|
|
129
133
|
## Known Limitations and Deferred Work
|
|
130
134
|
|
package/README.zh.md
CHANGED
|
@@ -45,15 +45,19 @@ const ctx = await boot('dsh', resolveConfigPath(argv[2], process.env.DSH_SNAPSHO
|
|
|
45
45
|
<a id="profiles"></a>
|
|
46
46
|
### Profile
|
|
47
47
|
|
|
48
|
+
Profile 与 bundle 的声明类型从 [`@deepseek-ai/dsh-package-manifest`](../../util/package-manifest/README.zh.md) 导入。App-boot 负责 profile 加载、JSON 校验和解析后的运行时数据。
|
|
49
|
+
|
|
48
50
|
profile 是同一套 dsh 安装提供不同应用界面的方式:`web`、`headless`、`acp`、`sdk` 与 `sdk-minimal` 从同一 launcher 启动不同组合。profile 位于 `$DSH_HOME/profiles/<name>`,由可安装 bundle、自身 `cordis.patch.yml` 与 `patchReload: live | startup` 组成;自定义 profile 省略 reload 策略时保留历史 `live` 默认值。随产品交付的 `web` 模板实时重载,其他随附模板只在启动时应用 patch。`sdk-minimal` 只列出自身的独立 bundle,其他模板保留 base 加模式 bundle 的栈。`dsh plugin` 创建自定义 profile;缺失 bundle 或未声明 patch 的 bundle 会让启动明确失败。
|
|
49
51
|
|
|
50
52
|
你的机器本地偏好同样位于 harness home 中:
|
|
51
53
|
|
|
52
|
-
- **`.env`**——你的普通环境层:调用目录的文件优先于 harness home 的文件,两者都低于继承环境。决定进程如何启动的变量(`PATH
|
|
54
|
+
- **`.env`**——你的普通环境层:调用目录的文件优先于 harness home 的文件,两者都低于继承环境。决定进程如何启动的变量(`PATH`、`DSH_*`、`XDG_*` 等)会被文件拒绝:请改为导出。四个代理名(`HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY`、`NO_PROXY`)只从 harness home 的文件接受,绝不从调用目录的文件接受——后者随 clone 一起到来。对于只想加载某个目录 `.env` 的非产品 bin,文件缺失不影响启动,文件无法加载时输出一行带标签的警告。
|
|
53
55
|
- **`cordis.patch.yml`**——你的 tweak 层,应用在所有组合包层之后(先应用逐 profile 的文件,再应用 home 级文件,因此后者优先级更高):替换某个条目的整个 config(重述你要保留的字段)、插入新条目,或在启动时插值 `!!js` 表达式。patch 指定的条目不存在时输出 stderr 警告;空文件或仅含注释的文件会导致启动失败——如需禁用该层,请改用 `[]`。
|
|
54
56
|
|
|
55
57
|
带 `patchReload: live` 的 profile 会监视两份用户 patch 文件:有效编辑无需重启即可重新组合,被拒绝的编辑则让最后一个可用应用继续运行。`startup` profile 既不安装这些监视器,也不安装 launcher 的仅监视 HMR 回退。
|
|
56
58
|
|
|
59
|
+
插入条目的插件名可以是绝对文件系统路径、文件 URL 或包标识符。patch 加载会把 `insert` 条目及其嵌套分组中的绝对路径以及相对于 patch 文件的 `./` 或 `../` 路径转换为文件 URL;对已有条目名称的断言及替换用的 `config` 值保持原样。
|
|
60
|
+
|
|
57
61
|
### 预览生效配置
|
|
58
62
|
|
|
59
63
|
启动前,你可以打印应用将挂载的确切配置:dump 会以 `!!js` 表达式原样展示组合后的条目列表,并按注释分组标明每个源文件及其 patch 层,输出是一份可加载的 YAML 文档。未匹配到任何行的 patch 会连同其层标签一起报告;配置缺失、无法解析或字段无效都会使 dump 失败。
|
|
@@ -124,7 +128,7 @@ profile 是同一套 dsh 安装提供不同应用界面的方式:`web`、`head
|
|
|
124
128
|
|
|
125
129
|
#### KV Cache 影响
|
|
126
130
|
|
|
127
|
-
|
|
131
|
+
启动本身不改变请求前缀。`addHarnessSourceSection` 将源码路径放在第一方可复用指令之后,因此工具与配置一致时,不同 checkout 不会改变前置字节。不保证提供方复用缓存。
|
|
128
132
|
|
|
129
133
|
## 已知限制与延期工作
|
|
130
134
|
|
package/lib/index.js
CHANGED
|
@@ -989,8 +989,22 @@ const BOOTSTRAP_PREFIXES = [
|
|
|
989
989
|
"BASH_FUNC_"
|
|
990
990
|
];
|
|
991
991
|
/**
|
|
992
|
+
* The bootstrap names the Harness-home `.env` alone may set. A proxy chooses the route every
|
|
993
|
+
* request takes, so the invoking directory's file — which arrives with a clone — keeps refusing
|
|
994
|
+
* them; the home file is the user's own, and `DSH_HOME` is itself bootstrap-only, so no `.env` can
|
|
995
|
+
* relocate this exemption. The CA and TLS names in the same group stay refused everywhere: they
|
|
996
|
+
* change what is trusted, not where traffic goes.
|
|
997
|
+
*/
|
|
998
|
+
const HOME_LAYER_PROXY_NAMES = new Set([
|
|
999
|
+
"HTTP_PROXY",
|
|
1000
|
+
"HTTPS_PROXY",
|
|
1001
|
+
"ALL_PROXY",
|
|
1002
|
+
"NO_PROXY"
|
|
1003
|
+
]);
|
|
1004
|
+
/**
|
|
992
1005
|
* Whether a variable may come only from the inherited process environment
|
|
993
|
-
* because it changes process, runtime, VCS, or network bootstrap.
|
|
1006
|
+
* because it changes process, runtime, VCS, or network bootstrap. The Harness-home
|
|
1007
|
+
* file is additionally allowed {@link HOME_LAYER_PROXY_NAMES}.
|
|
994
1008
|
* @param name - the variable name.
|
|
995
1009
|
* @returns true when only the inherited environment may supply it.
|
|
996
1010
|
*/
|
|
@@ -1004,11 +1018,13 @@ function isBootstrapOnly(name) {
|
|
|
1004
1018
|
* @param binName - the diagnostic prefix on the thrown error.
|
|
1005
1019
|
* @param dir - the directory whose `.env` to read.
|
|
1006
1020
|
* @param warn - sink for the one-line unreadable-file diagnostic.
|
|
1021
|
+
* @param home - the resolved Harness home; when `dir` is it, {@link HOME_LAYER_PROXY_NAMES} are accepted.
|
|
1007
1022
|
* @returns the parsed entries, or `undefined` when the file is absent or unreadable.
|
|
1008
|
-
* @throws when the file declares a name {@link isBootstrapOnly} rejects.
|
|
1023
|
+
* @throws when the file declares a name {@link isBootstrapOnly} rejects and this layer may not set.
|
|
1009
1024
|
*/
|
|
1010
|
-
function readEnvLayer(binName, dir, warn) {
|
|
1025
|
+
function readEnvLayer(binName, dir, warn, home) {
|
|
1011
1026
|
const path = resolve(dir, ".env");
|
|
1027
|
+
const isHome = resolve(dir) === home;
|
|
1012
1028
|
let content;
|
|
1013
1029
|
try {
|
|
1014
1030
|
content = readFileSync(path, "utf8");
|
|
@@ -1019,7 +1035,10 @@ function readEnvLayer(binName, dir, warn) {
|
|
|
1019
1035
|
const values = parseEnv(content);
|
|
1020
1036
|
for (const name of Object.keys(values)) {
|
|
1021
1037
|
if (!isBootstrapOnly(name)) continue;
|
|
1022
|
-
|
|
1038
|
+
const proxyName = HOME_LAYER_PROXY_NAMES.has(name.toUpperCase());
|
|
1039
|
+
if (isHome && proxyName) continue;
|
|
1040
|
+
const remedy = proxyName ? `export ${name}, or put it in ${resolve(home, ".env")}, which does not travel with a repository` : `export ${name} instead of putting it in a .env file`;
|
|
1041
|
+
throw new Error(`${binName}: ${path} sets "${name}", which only the launching environment may set (it decides how this process starts, where its code and instructions load from, or how it reaches the network); ${remedy}`);
|
|
1023
1042
|
}
|
|
1024
1043
|
return {
|
|
1025
1044
|
path,
|
|
@@ -1035,13 +1054,13 @@ function readEnvLayer(binName, dir, warn) {
|
|
|
1035
1054
|
* @param cwd - the invoking directory whose `.env` is the project layer.
|
|
1036
1055
|
* @param warn - sink for the one-line misconfiguration diagnostics.
|
|
1037
1056
|
* @returns this run's frozen environment snapshot.
|
|
1038
|
-
* @throws when either file declares a bootstrap-only variable.
|
|
1057
|
+
* @throws when either file declares a bootstrap-only variable, except {@link HOME_LAYER_PROXY_NAMES} in the Harness-home file.
|
|
1039
1058
|
*/
|
|
1040
1059
|
function loadLayeredEnv(binName, cwd = process.cwd(), warn = (line) => void process.stderr.write(line)) {
|
|
1041
1060
|
const home = resolveDshHome();
|
|
1042
1061
|
const inherited = { ...process.env };
|
|
1043
|
-
const project = readEnvLayer(binName, cwd, warn);
|
|
1044
|
-
const user = home === resolve(cwd) ? void 0 : readEnvLayer(binName, home, warn);
|
|
1062
|
+
const project = readEnvLayer(binName, cwd, warn, home);
|
|
1063
|
+
const user = home === resolve(cwd) ? void 0 : readEnvLayer(binName, home, warn, home);
|
|
1045
1064
|
for (const layer of [project, user]) {
|
|
1046
1065
|
if (layer === void 0) continue;
|
|
1047
1066
|
for (const [name, value] of Object.entries(layer.values)) if (process.env[name] === void 0) process.env[name] = value;
|
|
@@ -1132,11 +1151,11 @@ function loadOverlayPatches(binName, file) {
|
|
|
1132
1151
|
}
|
|
1133
1152
|
return parsePatchList(binName, file, content, "overlay");
|
|
1134
1153
|
}
|
|
1135
|
-
/**
|
|
1154
|
+
/** Convert inserted filesystem paths to file URLs, anchoring relative paths beside the patch; keep assertion names literal. */
|
|
1136
1155
|
function anchorInsertedPluginNames(patches, file) {
|
|
1137
1156
|
const base = dirname(resolve(file));
|
|
1138
1157
|
const visit = (entry) => {
|
|
1139
|
-
if (typeof entry.name === "string" && (entry.name.startsWith("./") || entry.name.startsWith("../"))) entry.name = pathToFileURL(resolve(base, entry.name)).href;
|
|
1158
|
+
if (typeof entry.name === "string" && (isAbsolute(entry.name) || entry.name.startsWith("./") || entry.name.startsWith("../"))) entry.name = pathToFileURL(resolve(base, entry.name)).href;
|
|
1140
1159
|
if (entry.group && Array.isArray(entry.config)) entry.config.forEach(visit);
|
|
1141
1160
|
};
|
|
1142
1161
|
for (const patch of patches) patch.insert?.forEach(visit);
|
|
@@ -1518,9 +1537,10 @@ const HARNESS_SOURCE_SECTION = "harness:source";
|
|
|
1518
1537
|
* explicitly distinguishing it from the task workspace and current working
|
|
1519
1538
|
* directory. The self-referential `dsh-tool-cordis` toolset reads and edits this
|
|
1520
1539
|
* checkout. Call once on the settled boot context ({@link boot}); the section
|
|
1521
|
-
* uses the shared first-party placement
|
|
1522
|
-
* and before the
|
|
1523
|
-
* augment, so this is then a no-op
|
|
1540
|
+
* uses the shared first-party placement after reusable instructions
|
|
1541
|
+
* and before the Web surface and persona suffix. A booted tree with no
|
|
1542
|
+
* `systemPrompt` service has no prompt to augment, so this is then a no-op
|
|
1543
|
+
* that returns `undefined`. The section is
|
|
1524
1544
|
* registered against the `systemPrompt` service's fiber, so a dev HMR reload of
|
|
1525
1545
|
* that plugin drops it until the next boot.
|
|
1526
1546
|
* @param ctx - the settled boot context whose global system prompt to augment.
|
package/lib/types/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ declare module '@deepseek-ai/cordis' {
|
|
|
16
16
|
dshHomePath?: typeof dshHomePath;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
export { composeEntries, DEFAULT_PROFILE_BUNDLES, DEFAULT_PROFILE_PATCH_RELOAD, healProfilesModuleFallback, initProfile, loadProfile, PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PROFILES_DIR, readProfileManifest, resolveBundleDir, resolveProfileDir, writeProfileManifest, type
|
|
19
|
+
export { composeEntries, DEFAULT_PROFILE_BUNDLES, DEFAULT_PROFILE_PATCH_RELOAD, healProfilesModuleFallback, initProfile, loadProfile, PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PROFILES_DIR, readProfileManifest, resolveBundleDir, resolveProfileDir, writeProfileManifest, type Profile, type ProfileLayer, type ProfileManifest, type ProfileModuleFallbackOptions, type ProfileTemplate, } from './profile.ts';
|
|
20
20
|
/**
|
|
21
21
|
* Resolve the config to boot. Replay swaps a `cordis.yml` basename for
|
|
22
22
|
* `cordis.snapshot.yml` in the same directory; every other mode keeps the path.
|
|
@@ -44,7 +44,7 @@ export declare function loadEnv(binName: string, dir?: string, warn?: (line: str
|
|
|
44
44
|
* @param cwd - the invoking directory whose `.env` is the project layer.
|
|
45
45
|
* @param warn - sink for the one-line misconfiguration diagnostics.
|
|
46
46
|
* @returns this run's frozen environment snapshot.
|
|
47
|
-
* @throws when either file declares a bootstrap-only variable.
|
|
47
|
+
* @throws when either file declares a bootstrap-only variable, except {@link HOME_LAYER_PROXY_NAMES} in the Harness-home file.
|
|
48
48
|
*/
|
|
49
49
|
export declare function loadLayeredEnv(binName: string, cwd?: string, warn?: (line: string) => void): LaunchEnvironmentSnapshot;
|
|
50
50
|
/** Options for live user patch-layer reconciliation. */
|
|
@@ -254,9 +254,10 @@ export declare const HARNESS_SOURCE_SECTION = "harness:source";
|
|
|
254
254
|
* explicitly distinguishing it from the task workspace and current working
|
|
255
255
|
* directory. The self-referential `dsh-tool-cordis` toolset reads and edits this
|
|
256
256
|
* checkout. Call once on the settled boot context ({@link boot}); the section
|
|
257
|
-
* uses the shared first-party placement
|
|
258
|
-
* and before the
|
|
259
|
-
* augment, so this is then a no-op
|
|
257
|
+
* uses the shared first-party placement after reusable instructions
|
|
258
|
+
* and before the Web surface and persona suffix. A booted tree with no
|
|
259
|
+
* `systemPrompt` service has no prompt to augment, so this is then a no-op
|
|
260
|
+
* that returns `undefined`. The section is
|
|
260
261
|
* registered against the `systemPrompt` service's fiber, so a dev HMR reload of
|
|
261
262
|
* that plugin drops it until the next boot.
|
|
262
263
|
* @param ctx - the settled boot context whose global system prompt to augment.
|
package/lib/types/profile.d.ts
CHANGED
|
@@ -24,24 +24,11 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import type { EntryOptions } from '@deepseek-ai/cordis-plugin-loader';
|
|
26
26
|
import { type PatchOptions } from '@deepseek-ai/cordis-plugin-include';
|
|
27
|
+
import type { DshManifest, ProfilePatchReload } from '@deepseek-ai/dsh-package-manifest';
|
|
27
28
|
/** Directory under the Harness home holding every profile. */
|
|
28
29
|
export declare const PROFILES_DIR = "profiles";
|
|
29
30
|
/** The user patch layer inside a profile directory (hot-reloaded on long-lived surfaces). */
|
|
30
31
|
export declare const PROFILE_PATCH_FILENAME = "cordis.patch.yml";
|
|
31
|
-
/** The bundle half of the `dsh` manifest section: what a bundle package exports. */
|
|
32
|
-
export interface DshBundleManifest {
|
|
33
|
-
/** The patch layer this bundle exports, relative to its package root. */
|
|
34
|
-
patch: string;
|
|
35
|
-
}
|
|
36
|
-
/** The profile half of the `dsh` manifest section: what a profile directory composes. */
|
|
37
|
-
export interface DshProfileManifest {
|
|
38
|
-
/** Ordered bundle layer list (package names). */
|
|
39
|
-
bundles?: string[];
|
|
40
|
-
/** Whether user patch files reload while this profile remains active. */
|
|
41
|
-
patchReload?: ProfilePatchReload;
|
|
42
|
-
}
|
|
43
|
-
/** User patch-file lifecycle selected by a profile. */
|
|
44
|
-
export type ProfilePatchReload = 'live' | 'startup';
|
|
45
32
|
/** Installation-owned defaults used when a shipped profile is first opened. */
|
|
46
33
|
export interface ProfileTemplate {
|
|
47
34
|
/** Ordered bundle layer list. */
|
|
@@ -49,22 +36,12 @@ export interface ProfileTemplate {
|
|
|
49
36
|
/** User patch-file lifecycle for the generated profile. */
|
|
50
37
|
patchReload: ProfilePatchReload;
|
|
51
38
|
}
|
|
52
|
-
/**
|
|
53
|
-
* The profile-launcher slice of the `dsh`-owned package.json section. A
|
|
54
|
-
* manifest may declare both roles; other consumers own additional keys.
|
|
55
|
-
*/
|
|
56
|
-
export interface DshManifestSection {
|
|
57
|
-
/** Bundle metadata consumed by the profile launcher. */
|
|
58
|
-
bundle?: DshBundleManifest;
|
|
59
|
-
/** Profile metadata consumed by the profile launcher. */
|
|
60
|
-
profile?: DshProfileManifest;
|
|
61
|
-
}
|
|
62
39
|
/** The slice of package.json both profiles and bundles use. */
|
|
63
40
|
export interface ProfileManifest {
|
|
64
41
|
name?: string;
|
|
65
42
|
dependencies?: Record<string, string>;
|
|
66
43
|
peerDependencies?: Record<string, string>;
|
|
67
|
-
dsh?:
|
|
44
|
+
dsh?: DshManifest;
|
|
68
45
|
}
|
|
69
46
|
/** One resolved bundle layer of a profile. */
|
|
70
47
|
export interface ProfileLayer {
|
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.1.
|
|
4
|
+
"version": "0.1.3-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -29,16 +29,17 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"js-yaml": "^4.2.0",
|
|
31
31
|
"resolve.exports": "^2.0.3",
|
|
32
|
-
"@deepseek-ai/dsh-atomic-write": "^0.1.
|
|
32
|
+
"@deepseek-ai/dsh-atomic-write": "^0.1.3-alpha.2",
|
|
33
|
+
"@deepseek-ai/dsh-package-manifest": "^0.1.3-alpha.2"
|
|
33
34
|
},
|
|
34
35
|
"peerDependencies": {
|
|
36
|
+
"@deepseek-ai/cordis-plugin-group": "^1.0.2",
|
|
35
37
|
"@deepseek-ai/cordis-plugin-hmr": "^1.0.17",
|
|
36
38
|
"@deepseek-ai/cordis-plugin-include": "^1.0.7",
|
|
37
39
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
38
|
-
"@deepseek-ai/dsh-
|
|
39
|
-
"@deepseek-ai/dsh-
|
|
40
|
-
"@deepseek-ai/dsh-system-prompt": "^0.1.
|
|
41
|
-
"@deepseek-ai/cordis-plugin-group": "^1.0.2",
|
|
40
|
+
"@deepseek-ai/dsh-launch-environment": "^0.1.3-alpha.2",
|
|
41
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2",
|
|
42
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.3-alpha.2",
|
|
42
43
|
"@deepseek-ai/cordis": "^4.0.2"
|
|
43
44
|
},
|
|
44
45
|
"peerDependenciesMeta": {
|
|
@@ -48,14 +49,14 @@
|
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@types/js-yaml": "^4.0.9",
|
|
51
|
-
"@deepseek-ai/cordis-plugin-group": "^1.0.2",
|
|
52
52
|
"@deepseek-ai/cordis-plugin-hmr": "^1.0.17",
|
|
53
53
|
"@deepseek-ai/cordis-plugin-include": "^1.0.7",
|
|
54
54
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
55
|
+
"@deepseek-ai/cordis-plugin-group": "^1.0.2",
|
|
55
56
|
"@deepseek-ai/cordis-plugin-timer": "^1.1.4",
|
|
56
|
-
"@deepseek-ai/dsh-
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/
|
|
59
|
-
"@deepseek-ai/
|
|
57
|
+
"@deepseek-ai/dsh-launch-environment": "^0.1.3-alpha.2",
|
|
58
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2",
|
|
59
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.3-alpha.2",
|
|
60
|
+
"@deepseek-ai/cordis": "^4.0.2"
|
|
60
61
|
}
|
|
61
62
|
}
|