@sparkelf/dsh-plus 0.1.0-rc.10 → 0.1.0-rc.9

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 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/bundle/plus/README.md
5
- README.md: 627a5b3d23b642d2c7b92926133435ae82ae2c15
6
- README.zh.md: 1eaced04cf003ed2ef4485e6dedfcf5cfb4656ca
5
+ README.md: 2f9e94124db0aa48ae4f0ba34e4feca7fce5a30d
6
+ README.zh.md: af82ed3b2543bb765be6759ae582b65c67c7cf4f
package/README.md CHANGED
@@ -31,7 +31,7 @@ dsh plugin --profile plus exec dsh-plus apply --dsh-root /path/to/official-dsh
31
31
  dsh --profile plus
32
32
  ```
33
33
 
34
- The explicit apply step requires official revision `cd5ef8148158c3a752a658978873241fdf8e2bbc`, materializes every selected runtime package as a profile-direct dependency, applies all pending source payloads together, configures exact npm patches, removes retired Plus-owned entries, and writes `.dsh-plus/patchset.lock.json` with mode `0600`. It installs `dsh-better-sidebar@0.17.1` at the profile root, explicitly allows only its `node-pty` native build, and links the profile's `@deepseek-ai` scope to the exact official source dependencies. Version conflicts and source mismatches fail before profile installation or source mutation. The package has no install lifecycle script.
34
+ The explicit apply step requires official revision `cd5ef8148158c3a752a658978873241fdf8e2bbc`, materializes every selected runtime package as a profile-direct dependency, applies all pending source payloads together, configures exact npm patches, removes retired Plus-owned entries, and writes `.dsh-plus/patchset.lock.json` with mode `0600`. Version conflicts and source mismatches fail before profile installation or source mutation. The package has no install lifecycle script.
35
35
 
36
36
  Official DSH supplies onboarding, Workspace selection, Session export, Turn folding, and the base image path. The external `@changfenhuang/dsh-genui` bundle owns generated UI, including inline interactive charts emitted by the model as `dsh-ui`. The temporary GenUI streaming EChart patch targets only `0.9.6` and retires after [upstream PR #87](https://github.com/omdsh-dev/dsh-genui/pull/87) ships in npm and the real inline-chart path passes. DataOps and Document Attachments mount only when their endpoint environment variables exist. Agent Teams is excluded because the official packages are private experimental workspaces and shipped profiles disable them.
37
37
 
package/README.zh.md CHANGED
@@ -31,7 +31,7 @@ dsh plugin --profile plus exec dsh-plus apply --dsh-root /path/to/official-dsh
31
31
  dsh --profile plus
32
32
  ```
33
33
 
34
- explicit apply步骤要求official revision `cd5ef8148158c3a752a658978873241fdf8e2bbc`,把每个selected runtime package materialize为profile-direct dependency,一次应用全部pending source payloads,配置exact npm patches,删除retired Plus-owned entries,并以`0600` mode写入`.dsh-plus/patchset.lock.json`。它在profile root安装`dsh-better-sidebar@0.17.1`,只显式允许其`node-pty` native build,并把profile的`@deepseek-ai` scope链接到exact official source dependencies。version conflict和source mismatch会在profile installation或source mutation前失败。该package没有install lifecycle script。
34
+ explicit apply步骤要求official revision `cd5ef8148158c3a752a658978873241fdf8e2bbc`,把每个selected runtime package materialize为profile-direct dependency,一次应用全部pending source payloads,配置exact npm patches,删除retired Plus-owned entries,并以`0600` mode写入`.dsh-plus/patchset.lock.json`。version conflict和source mismatch会在profile installation或source mutation前失败。该package没有install lifecycle script。
35
35
 
36
36
  Official DSH提供onboarding、Workspace selection、Session export、Turn folding及base image path。External `@changfenhuang/dsh-genui` bundle拥有generated UI,包括模型以`dsh-ui`输出的inline interactive charts。Temporary GenUI streaming EChart patch只target `0.9.6`;[upstream PR #87](https://github.com/omdsh-dev/dsh-genui/pull/87)进入npm且真实inline-chart path通过后退役。DataOps和Document Attachments仅在对应endpoint environment variables存在时mount。Agent Teams被排除,因为official packages属于private experimental workspaces且shipped profiles会禁用它们。
37
37
 
package/lib/apply.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { spawnSync } from "node:child_process";
3
- import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
3
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
4
4
  import { dirname, isAbsolute, relative, resolve } from "node:path";
5
5
  import { satisfies, valid, validRange } from "semver";
6
6
  import { parseDocument } from "yaml";
@@ -129,7 +129,7 @@ function patchPackageVariants(distributionDirectory, names) {
129
129
  }
130
130
  return variants;
131
131
  }
132
- function prepareSelection(distributionDirectory, profileDirectory, dshRoot) {
132
+ function selectPatches(distributionDirectory, dshRoot) {
133
133
  const distributionManifest = readJsonObject(resolve(distributionDirectory, "package.json"), "Plus distribution manifest");
134
134
  const distributionName = requireString(distributionManifest.name, "Plus distribution name");
135
135
  const distributionVersion = requireVersion(distributionManifest.version, "Plus distribution version");
@@ -137,19 +137,15 @@ function prepareSelection(distributionDirectory, profileDirectory, dshRoot) {
137
137
  if (plus.formatVersion !== FORMAT_VERSION) throw new Error("unsupported dshPlus formatVersion: " + String(plus.formatVersion));
138
138
  const dshRange = requireRange(requireObject(plus.compatibility, "dshPlus.compatibility").dsh, "dshPlus.compatibility.dsh");
139
139
  const baseRevision = requireString(requireObject(plus.sourceBase, "dshPlus.sourceBase").revision, "dshPlus.sourceBase.revision");
140
- const profile = requireObject(plus.profile, "dshPlus.profile");
141
- const bundles = requireStringArray(profile.bundles, "dshPlus.profile.bundles");
142
- const rawProfileDependencySpecs = requireObject(profile.dependencies, "dshPlus.profile.dependencies");
143
- const profileDependencySpecs = {};
144
- for (const [name, spec] of Object.entries(rawProfileDependencySpecs)) profileDependencySpecs[name] = requireString(spec, "dshPlus.profile.dependencies." + name);
145
- const rawAllowBuilds = requireObject(profile.allowBuilds, "dshPlus.profile.allowBuilds");
146
- const allowBuilds = {};
147
- for (const [name, allowed] of Object.entries(rawAllowBuilds)) {
148
- if (typeof allowed !== "boolean") throw new Error("dshPlus.profile.allowBuilds." + name + " must be a boolean");
149
- allowBuilds[name] = allowed;
150
- }
140
+ const bundles = requireStringArray(requireObject(plus.profile, "dshPlus.profile").bundles, "dshPlus.profile.bundles");
151
141
  const patchPackageNames = requireStringArray(plus.patchPackages, "dshPlus.patchPackages");
152
142
  const dependencies = requireObject(distributionManifest.dependencies, "Plus distribution dependencies");
143
+ const runtimePackages = Object.keys(dependencies).filter((name) => !patchPackageNames.includes(name)).sort().map((name) => {
144
+ return {
145
+ name,
146
+ version: resolveInstalledPackage(distributionDirectory, name).version
147
+ };
148
+ });
153
149
  const dshVersion = requireVersion(readJsonObject(resolve(dshRoot, "package.json"), "DSH source manifest").version, "DSH source version");
154
150
  if (!satisfies(dshVersion, dshRange, { includePrerelease: true })) throw new Error(distributionName + "@" + distributionVersion + " requires DSH " + dshRange + ", found " + dshVersion);
155
151
  const checkoutRevision = requireSourceBase(dshRoot, baseRevision);
@@ -159,31 +155,6 @@ function prepareSelection(distributionDirectory, profileDirectory, dshRoot) {
159
155
  entries.push(variant);
160
156
  groups.set(variant.id, entries);
161
157
  }
162
- const sourceStates = /* @__PURE__ */ new Map();
163
- for (const variant of [...groups.values()].flat()) {
164
- if (variant.target.kind !== "dsh-source" || variant.target.baseRevision !== baseRevision || !satisfies(dshVersion, variant.dsh, { includePrerelease: true })) continue;
165
- const file = resolvePatchFile(variant.patchPackage.directory, variant.file);
166
- sourceStates.set(file.absoluteFile, sourcePatchState(dshRoot, file.absoluteFile));
167
- }
168
- const pendingSourceFiles = [...sourceStates].flatMap(([file, state]) => state === "pending" ? [file] : []);
169
- if (pendingSourceFiles.length > 0) git(dshRoot, [
170
- "apply",
171
- "--check",
172
- ...pendingSourceFiles
173
- ]);
174
- if (writeProfileRequirements(profileDirectory, profileDependencySpecs, allowBuilds)) runPnpm(profileDirectory, ["install"], "pnpm install Plus profile dependencies");
175
- const profileDependencies = Object.keys(profileDependencySpecs).sort().map((name) => {
176
- return {
177
- name,
178
- version: resolveInstalledPackage(profileDirectory, name).version
179
- };
180
- });
181
- const runtimePackages = [...Object.keys(dependencies).filter((name) => !patchPackageNames.includes(name)).sort().map((name) => {
182
- return {
183
- name,
184
- version: resolveInstalledPackage(distributionDirectory, name).version
185
- };
186
- }), ...profileDependencies].sort((left, right) => left.name.localeCompare(right.name));
187
158
  const selected = [];
188
159
  for (const id of [...groups.keys()].sort()) {
189
160
  const candidates = (groups.get(id) ?? []).flatMap((variant) => {
@@ -203,10 +174,10 @@ function prepareSelection(distributionDirectory, profileDirectory, dshRoot) {
203
174
  kind: "dsh-source",
204
175
  baseRevision
205
176
  },
206
- alreadyApplied: sourceStates.get(file.absoluteFile) === "applied"
177
+ alreadyApplied: sourcePatchState(dshRoot, file.absoluteFile) === "applied"
207
178
  }];
208
179
  }
209
- const targetVersion = resolveInstalledPackage(variant.target.name in profileDependencySpecs ? profileDirectory : distributionDirectory, variant.target.name).version;
180
+ const targetVersion = resolveInstalledPackage(distributionDirectory, variant.target.name).version;
210
181
  if (!satisfies(targetVersion, variant.target.range, { includePrerelease: true })) return [];
211
182
  return [{
212
183
  id,
@@ -240,8 +211,6 @@ function prepareSelection(distributionDirectory, profileDirectory, dshRoot) {
240
211
  patches: selected,
241
212
  bundles,
242
213
  runtimePackages,
243
- profileDependencies,
244
- allowBuilds,
245
214
  lock: {
246
215
  formatVersion: FORMAT_VERSION,
247
216
  distribution: {
@@ -253,6 +222,7 @@ function prepareSelection(distributionDirectory, profileDirectory, dshRoot) {
253
222
  baseRevision,
254
223
  checkoutRevision
255
224
  },
225
+ profile: { bundles },
256
226
  runtimePackages,
257
227
  patches: lockPatches
258
228
  }
@@ -301,39 +271,6 @@ function profilePatchConfiguration(profileDirectory, patches) {
301
271
  changed
302
272
  };
303
273
  }
304
- function writeProfileRequirements(profileDirectory, dependencySpecs, allowBuilds) {
305
- const manifestPath = resolve(profileDirectory, "package.json");
306
- const manifest = readJsonObject(manifestPath, "DSH profile manifest");
307
- const dependencies = requireObject(manifest.dependencies, "DSH profile dependencies");
308
- let manifestChanged = false;
309
- for (const [name, spec] of Object.entries(dependencySpecs)) {
310
- const current = dependencies[name];
311
- if (current !== void 0 && current !== spec) throw new Error("profile dependency " + name + " is configured as " + JSON.stringify(current) + ", expected " + spec);
312
- if (current === void 0) {
313
- dependencies[name] = spec;
314
- manifestChanged = true;
315
- }
316
- }
317
- const workspacePath = resolve(profileDirectory, "pnpm-workspace.yaml");
318
- const document = parseDocument(readFileSync(workspacePath, "utf8"));
319
- const [documentError] = document.errors;
320
- if (documentError !== void 0) throw new Error("Plus profile workspace is not valid YAML", { cause: documentError });
321
- let workspaceChanged = false;
322
- for (const [name, allowed] of Object.entries(allowBuilds)) {
323
- const current = document.getIn(["allowBuilds", name]);
324
- if (current !== void 0 && current !== allowed) throw new Error("profile allowBuilds." + name + " is configured as " + JSON.stringify(current) + ", expected " + String(allowed));
325
- if (current === void 0) {
326
- document.setIn(["allowBuilds", name], allowed);
327
- workspaceChanged = true;
328
- }
329
- }
330
- if (manifestChanged) {
331
- manifest.dependencies = dependencies;
332
- writeFileSync(manifestPath, JSON.stringify(manifest, void 0, 2) + "\n");
333
- }
334
- if (workspaceChanged) writeFileSync(workspacePath, String(document));
335
- return manifestChanged || workspaceChanged;
336
- }
337
274
  function writeProfileComposition(profileDirectory, bundles, runtimePackages) {
338
275
  const path = resolve(profileDirectory, "package.json");
339
276
  const manifest = readJsonObject(path, "DSH profile manifest");
@@ -384,16 +321,6 @@ function applySelectedPatches(profileDirectory, dshRoot, patches, profileChanged
384
321
  if (sourceFiles.length > 0) git(dshRoot, ["apply", ...sourceFiles]);
385
322
  if (stablePatches.some((patch) => patch.target.kind === "dsh-source")) runPnpm(dshRoot, ["run", "build"], "official DSH build after source patches");
386
323
  }
387
- function linkOfficialPackages(profileDirectory, dshRoot) {
388
- const source = resolve(dshRoot, "node_modules", "@deepseek-ai");
389
- if (!existsSync(source)) throw new Error("official DSH dependencies are missing under " + source);
390
- const destination = resolve(profileDirectory, "node_modules", "@deepseek-ai");
391
- rmSync(destination, {
392
- recursive: true,
393
- force: true
394
- });
395
- symlinkSync(source, destination, process.platform === "win32" ? "junction" : "dir");
396
- }
397
324
  function writeLock(profileDirectory, lock) {
398
325
  const directory = resolve(profileDirectory, ".dsh-plus");
399
326
  mkdirSync(directory, { recursive: true });
@@ -423,22 +350,23 @@ function parseApplyArguments(argv) {
423
350
  */
424
351
  function runApply(argv) {
425
352
  const { dshRoot, profileDirectory } = parseApplyArguments(argv);
426
- if (requireObject(readJsonObject(resolve(profileDirectory, "package.json"), "DSH profile manifest").dependencies, "DSH profile dependencies")["@sparkelf/dsh-plus"] === void 0) throw new Error("current directory is not a DSH profile with @sparkelf/dsh-plus installed");
427
- const selection = prepareSelection(dirname(createRequire(resolve(profileDirectory, "package.json")).resolve("@sparkelf/dsh-plus/package.json")), profileDirectory, dshRoot);
353
+ const dependencies = requireObject(readJsonObject(resolve(profileDirectory, "package.json"), "DSH profile manifest").dependencies, "DSH profile dependencies");
354
+ if (dependencies["@sparkelf/dsh-plus"] === void 0) throw new Error("current directory is not a DSH profile with @sparkelf/dsh-plus installed");
355
+ const selection = selectPatches(dirname(createRequire(resolve(profileDirectory, "package.json")).resolve("@sparkelf/dsh-plus/package.json")), dshRoot);
356
+ const sourceFiles = pendingSourcePatchFiles(selection.patches);
357
+ if (sourceFiles.length > 0) git(dshRoot, [
358
+ "apply",
359
+ "--check",
360
+ ...sourceFiles
361
+ ]);
428
362
  const profileChanged = writeProfileComposition(profileDirectory, selection.bundles, selection.runtimePackages);
429
363
  applySelectedPatches(profileDirectory, dshRoot, selection.patches, profileChanged);
430
- linkOfficialPackages(profileDirectory, dshRoot);
431
- const installedProfileDependencies = requireObject(readJsonObject(resolve(profileDirectory, "package.json"), "DSH profile manifest").dependencies, "DSH profile dependencies");
432
- selection.lock.profile = {
433
- bundles: selection.bundles.map((name) => {
434
- return {
435
- name,
436
- version: (installedProfileDependencies[name] === void 0 ? resolveInstalledPackage(dshRoot, name) : resolveInstalledPackage(profileDirectory, name)).version
437
- };
438
- }),
439
- dependencies: selection.profileDependencies,
440
- allowBuilds: selection.allowBuilds
441
- };
364
+ selection.lock.profile = { bundles: selection.bundles.map((name) => {
365
+ return {
366
+ name,
367
+ version: (dependencies[name] === void 0 ? resolveInstalledPackage(dshRoot, name) : resolveInstalledPackage(profileDirectory, name)).version
368
+ };
369
+ }) };
442
370
  const lock = writeLock(profileDirectory, selection.lock);
443
371
  process.stdout.write("[dsh-plus] applied " + String(selection.patches.length) + " patches; lock " + lock + "\n");
444
372
  }
package/package.json CHANGED
@@ -1,45 +1,64 @@
1
1
  {
2
- "bin": {
3
- "dsh-plus": "lib/bin.js"
2
+ "name": "@sparkelf/dsh-plus",
3
+ "description": "DeepSeek Harness Plus official-base Web distribution profile and ranged compatibility patchset",
4
+ "version": "0.1.0-rc.9",
5
+ "publishConfig": {
6
+ "access": "public"
4
7
  },
5
- "dependencies": {
6
- "@changfenhuang/dsh-genui": ">=0.9.6",
7
- "@sparkelf/dsh-mobile-bridge": ">=0.2.8",
8
- "@sparkelf/dsh-patch-better-sidebar-app-frame": ">=0.1.0-rc.10",
9
- "@sparkelf/dsh-patch-document-attachments": ">=0.1.0-rc.10",
10
- "@sparkelf/dsh-patch-genui-streaming-echart": ">=0.1.0-rc.10",
11
- "@sparkelf/dsh-patch-mobile-bridge-serialized-actions": ">=0.1.0-rc.10",
12
- "@sparkelf/dsh-patch-mobile-web-layout": ">=0.1.0-rc.10",
13
- "@sparkelf/dsh-patch-responses-reasoning-status": ">=0.1.0-rc.10",
14
- "@sparkelf/dsh-patch-subagent-settings-presets": ">=0.1.0-rc.10",
15
- "@sparkelf/dsh-patch-web-base-path": ">=0.1.0-rc.10",
16
- "@sparkelf/dsh-patch-workspace-storage-restore": ">=0.1.0-rc.10",
17
- "@sparkelf/dsh-plugin-backup": ">=0.1.0-rc.10",
18
- "@sparkelf/dsh-plugin-dataops": ">=0.1.0-rc.10",
19
- "@sparkelf/dsh-plugin-document-attachments": ">=0.1.0-rc.10",
20
- "@sparkelf/dsh-plugin-mcp-credentials": ">=0.1.0-rc.10",
21
- "@sparkelf/dsh-plugin-subagent-settings": ">=0.1.0-rc.10",
22
- "dshmarket": ">=1.29.2",
23
- "semver": ">=7.7.3",
24
- "yaml": ">=2.9.0"
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/SparkElf/deepseek-harness-plus.git",
11
+ "directory": "packages/bundle/plus"
25
12
  },
26
- "description": "DeepSeek Harness Plus official-base Web distribution profile and ranged compatibility patchset",
27
- "devDependencies": {
28
- "@deepseek-ai/cordis": "^4.0.1",
29
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.1",
30
- "@types/semver": ">=7.7.1",
31
- "dsh-better-sidebar": "0.17.1"
13
+ "type": "module",
14
+ "main": "lib/index.js",
15
+ "types": "lib/types/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./lib/types/index.d.ts",
19
+ "default": "./lib/index.js"
20
+ },
21
+ "./invariant": {
22
+ "types": "./lib/types/invariant.d.ts",
23
+ "default": "./lib/invariant.js"
24
+ },
25
+ "./cordis.patch.yml": "./cordis.patch.yml",
26
+ "./package.json": "./package.json",
27
+ "./apply": {
28
+ "types": "./lib/types/apply.d.ts",
29
+ "default": "./lib/apply.js"
30
+ }
32
31
  },
32
+ "files": [
33
+ "lib/index.js",
34
+ "lib/invariant.js",
35
+ "lib/bin.js",
36
+ "cordis.patch.yml",
37
+ "lib/apply.js",
38
+ "lib/types/**/*.d.ts"
39
+ ],
40
+ "license": "MIT",
33
41
  "dsh": {
34
42
  "bundle": {
35
43
  "patch": "./cordis.patch.yml"
36
44
  }
37
45
  },
38
46
  "dshPlus": {
47
+ "formatVersion": 1,
39
48
  "compatibility": {
40
49
  "dsh": ">=0.1.2-alpha.1"
41
50
  },
42
- "formatVersion": 1,
51
+ "profile": {
52
+ "bundles": [
53
+ "@deepseek-ai/dsh-base",
54
+ "@deepseek-ai/dsh-web-app",
55
+ "dsh-better-sidebar",
56
+ "@sparkelf/dsh-mobile-bridge",
57
+ "dshmarket",
58
+ "@changfenhuang/dsh-genui",
59
+ "@sparkelf/dsh-plus"
60
+ ]
61
+ },
43
62
  "patchPackages": [
44
63
  "@sparkelf/dsh-patch-better-sidebar-app-frame",
45
64
  "@sparkelf/dsh-patch-genui-streaming-echart",
@@ -51,67 +70,42 @@
51
70
  "@sparkelf/dsh-patch-mobile-web-layout",
52
71
  "@sparkelf/dsh-patch-web-base-path"
53
72
  ],
54
- "profile": {
55
- "allowBuilds": {
56
- "node-pty": true
57
- },
58
- "bundles": [
59
- "@deepseek-ai/dsh-base",
60
- "@deepseek-ai/dsh-web-app",
61
- "dsh-better-sidebar",
62
- "@sparkelf/dsh-mobile-bridge",
63
- "dshmarket",
64
- "@changfenhuang/dsh-genui",
65
- "@sparkelf/dsh-plus"
66
- ],
67
- "dependencies": {
68
- "dsh-better-sidebar": "0.17.1"
69
- }
70
- },
71
73
  "sourceBase": {
72
74
  "revision": "cd5ef8148158c3a752a658978873241fdf8e2bbc"
73
75
  }
74
76
  },
75
- "exports": {
76
- ".": {
77
- "default": "./lib/index.js",
78
- "types": "./lib/types/index.d.ts"
79
- },
80
- "./apply": {
81
- "default": "./lib/apply.js",
82
- "types": "./lib/types/apply.d.ts"
83
- },
84
- "./cordis.patch.yml": "./cordis.patch.yml",
85
- "./invariant": {
86
- "default": "./lib/invariant.js",
87
- "types": "./lib/types/invariant.d.ts"
88
- },
89
- "./package.json": "./package.json"
77
+ "dependencies": {
78
+ "@sparkelf/dsh-mobile-bridge": ">=0.2.8",
79
+ "@sparkelf/dsh-patch-better-sidebar-app-frame": ">=0.1.0-rc.9",
80
+ "@sparkelf/dsh-patch-genui-streaming-echart": ">=0.1.0-rc.9",
81
+ "@sparkelf/dsh-patch-mobile-bridge-serialized-actions": ">=0.1.0-rc.9",
82
+ "dsh-better-sidebar": ">=0.16.1",
83
+ "dshmarket": ">=1.29.2",
84
+ "@changfenhuang/dsh-genui": ">=0.9.6",
85
+ "@sparkelf/dsh-plugin-backup": ">=0.1.0-rc.9",
86
+ "@sparkelf/dsh-patch-workspace-storage-restore": ">=0.1.0-rc.9",
87
+ "semver": ">=7.7.3",
88
+ "yaml": ">=2.9.0",
89
+ "@sparkelf/dsh-plugin-subagent-settings": ">=0.1.0-rc.9",
90
+ "@sparkelf/dsh-patch-subagent-settings-presets": ">=0.1.0-rc.9",
91
+ "@sparkelf/dsh-plugin-document-attachments": ">=0.1.0-rc.9",
92
+ "@sparkelf/dsh-plugin-dataops": ">=0.1.0-rc.9",
93
+ "@sparkelf/dsh-plugin-mcp-credentials": ">=0.1.0-rc.9",
94
+ "@sparkelf/dsh-patch-mobile-web-layout": ">=0.1.0-rc.9",
95
+ "@sparkelf/dsh-patch-web-base-path": ">=0.1.0-rc.9",
96
+ "@sparkelf/dsh-patch-document-attachments": ">=0.1.0-rc.9",
97
+ "@sparkelf/dsh-patch-responses-reasoning-status": ">=0.1.0-rc.9"
90
98
  },
91
- "files": [
92
- "lib/index.js",
93
- "lib/invariant.js",
94
- "lib/bin.js",
95
- "cordis.patch.yml",
96
- "lib/apply.js",
97
- "lib/types/**/*.d.ts"
98
- ],
99
- "license": "MIT",
100
- "main": "lib/index.js",
101
- "name": "@sparkelf/dsh-plus",
102
99
  "peerDependencies": {
103
100
  "@deepseek-ai/cordis": ">=4.0.1",
104
101
  "@deepseek-ai/dsh-invariants": ">=0.1.2-alpha.1"
105
102
  },
106
- "publishConfig": {
107
- "access": "public"
108
- },
109
- "repository": {
110
- "directory": "packages/bundle/plus",
111
- "type": "git",
112
- "url": "git+https://github.com/SparkElf/deepseek-harness-plus.git"
103
+ "devDependencies": {
104
+ "@types/semver": ">=7.7.1",
105
+ "@deepseek-ai/cordis": "^4.0.1",
106
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.1"
113
107
  },
114
- "type": "module",
115
- "types": "lib/types/index.d.ts",
116
- "version": "0.1.0-rc.10"
117
- }
108
+ "bin": {
109
+ "dsh-plus": "lib/bin.js"
110
+ }
111
+ }