@dsh-electron/dsh-plugin-multi-root-workspace 0.1.12 → 0.1.14

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.
Files changed (49) hide show
  1. package/CHANGELOG.en.md +29 -1
  2. package/CHANGELOG.md +29 -1
  3. package/README.en.md +9 -8
  4. package/README.md +9 -8
  5. package/cordis.patch.yml +4 -0
  6. package/detail/DETAIL.en.md +1 -0
  7. package/detail/DETAIL.md +1 -0
  8. package/detail/preview.svg +1 -0
  9. package/detail/preview.zh.svg +1 -0
  10. package/lib/client.js +492 -87
  11. package/lib/client.js.map +1 -1
  12. package/lib/{command-CmLekG1M.js → command-Dcz6nULo.js} +25 -3
  13. package/lib/command.js +1 -1
  14. package/lib/{compat-Bg2HFVMX.js → compat-veDqCOoa.js} +3 -1
  15. package/lib/compat.js +1 -1
  16. package/lib/{fs-CfzJq2wd.js → fs-Uws0ZpmV.js} +38 -0
  17. package/lib/fs.js +1 -1
  18. package/lib/index.js +4 -4
  19. package/lib/{native-win32-2waCRkPI.js → native-win32-CRNXr11U.js} +2 -1
  20. package/lib/{protocol-4zdwV7u4.js → protocol-CnR1KTXy.js} +62 -9
  21. package/lib/{registry-YTUOjmVu.js → registry-DR_sMuvS.js} +425 -125
  22. package/lib/{registry-lease-win32-DVTq9d4D.js → registry-lease-win32-DDO-c7ig.js} +2 -1
  23. package/lib/registry.js +2 -2
  24. package/lib/scope.js +36 -2
  25. package/lib/types/authority/protocol.d.ts +1 -1
  26. package/lib/types/authority/recovery.d.ts +58 -0
  27. package/lib/types/client/RootSwitcher.d.ts +8 -3
  28. package/lib/types/client/auto-review-settings.d.ts +18 -0
  29. package/lib/types/client/files-tree/FilesTree.d.ts +4 -1
  30. package/lib/types/client/files-tree/adapter.d.ts +63 -1
  31. package/lib/types/client/files-tree/locales.d.ts +1 -1
  32. package/lib/types/client/locales.d.ts +12 -0
  33. package/lib/types/client/open-in-app/locales.d.ts +1 -1
  34. package/lib/types/client/skills-settings.d.ts +12 -0
  35. package/lib/types/client/styles.d.ts +1 -1
  36. package/lib/types/compat/auto-review-client.d.ts +58 -0
  37. package/lib/types/compat/connection-rpc.d.ts +12 -0
  38. package/lib/types/compat/dsh-version.d.ts +1 -1
  39. package/lib/types/compat/files-tree.d.ts +36 -0
  40. package/lib/types/compat/fs-patch.d.ts +6 -0
  41. package/lib/types/compat/koffi.d.ts +2 -0
  42. package/lib/types/fs.d.ts +3 -1
  43. package/lib/types/registry.d.ts +98 -0
  44. package/lib/types/scope.d.ts +18 -0
  45. package/locale/en.json +7 -0
  46. package/locale/zh.json +7 -0
  47. package/package.json +89 -82
  48. package/src/auto-review/README.en.md +1 -1
  49. package/src/auto-review/README.md +1 -1
@@ -0,0 +1,36 @@
1
+ /** Adapt the legacy listing store to the host's optional controlled tree Factory. */
2
+ export interface NativeTreeEntry {
3
+ readonly path: string;
4
+ readonly name: string;
5
+ readonly meta: {
6
+ readonly kind: 'file' | 'directory' | 'other';
7
+ };
8
+ }
9
+ type Level<F> = {
10
+ readonly kind: 'loading';
11
+ } | {
12
+ readonly kind: 'failed';
13
+ readonly failure: F;
14
+ } | {
15
+ readonly kind: 'ready';
16
+ readonly level: {
17
+ readonly entries: readonly {
18
+ readonly name: string;
19
+ readonly type: 'file' | 'directory' | 'other';
20
+ }[];
21
+ readonly truncated: boolean;
22
+ };
23
+ readonly failure?: F;
24
+ };
25
+ /** Render function supplied to a slot occupant by newer renderer builds. */
26
+ export type NativeTreeRenderer = (name: string, input: object, options: {
27
+ fallback: unknown;
28
+ }) => unknown;
29
+ export declare function nativeTreeRenderer(value: unknown): NativeTreeRenderer | undefined;
30
+ /** The factory consumes absolute, slash-separated keys and already-localized errors. */
31
+ export declare function nativeTreeInput<F>(state: {
32
+ readonly root: string;
33
+ readonly levels: Readonly<Record<string, Level<F>>>;
34
+ readonly expanded: readonly string[];
35
+ }, failureLine: (failure: F) => string, toggle: (parent: string, path: string) => void, open: (path: string) => void): object;
36
+ export {};
@@ -0,0 +1,6 @@
1
+ export type AdditionalMutation = 'patchText' | 'deleteFile' | 'moveFile';
2
+ type Invoke = (args: unknown[]) => unknown;
3
+ type Fence<T> = (receiver: T, method: AdditionalMutation, args: unknown[], invoke: Invoke) => unknown;
4
+ /** Install only methods present on the actual backend, preserving the caller as `this`. */
5
+ export declare function installAdditionalMutations<T extends object>(prototype: T, fence: Fence<T>): void;
6
+ export {};
@@ -0,0 +1,2 @@
1
+ export type Koffi = (typeof import('koffi'))['default'];
2
+ export declare function loadHostKoffi(): Promise<Koffi>;
package/lib/types/fs.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * It extends the local backend so every text-storage mechanic — resolve, stat,
5
5
  * read/stream, listing, the atomic write and the read-match-write edit critical
6
6
  * section — stays the upstream implementation's, verbatim; this class adds only
7
- * the per-call POLICY fence on the two mutations, exactly as the upstream
7
+ * the per-call POLICY fence on mutations, exactly as the upstream
8
8
  * `SandboxedFileSystem` does, widened from one workspace root to the scope's
9
9
  * root set.
10
10
  *
@@ -64,6 +64,8 @@ export declare class MultiRootFileSystem extends LocalFileSystem {
64
64
  editText(target: FsTarget, edit: FsEditRequest, expected?: {
65
65
  version: FsVersion;
66
66
  }, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsEditOutcome>;
67
+ /** Fence every endpoint of a patch, delete, or move under one admission. */
68
+ private additionalMutation;
67
69
  /** The provider must also work without the gated registry (ADR-0009). */
68
70
  private withOperation;
69
71
  /**
@@ -70,6 +70,28 @@ export declare const REGISTRY_CONTENDED_MESSAGE = "the root registry is owned by
70
70
  export declare const DEFAULT_MAX_ADDITIONAL_ROOTS = 16;
71
71
  /** Hard ceiling for `maxAdditionalRoots`: values above it are config-invalid. */
72
72
  export declare const MAX_ADDITIONAL_ROOTS_CEILING = 64;
73
+ /**
74
+ * The recovery class of a `storage-failed` authority: `retryable` failures
75
+ * (open/listen/acquire) may be re-attempted by `ensureAuthority`, while
76
+ * `config` (a row the operator must fix) and `quarantine` (an unknown durable
77
+ * outcome, isolated until restart) make the state terminal.
78
+ */
79
+ export type StorageFailureRecovery = 'retryable' | 'config' | 'quarantine';
80
+ /** The recovery class a degraded authority belongs to (see {@link StorageFailureRecovery}). */
81
+ export type RecoveryClass = 'retryable' | 'config' | 'quarantine';
82
+ /** Operator-facing read-only picture of the registry authority and its recovery. */
83
+ export interface RegistryDiagnostics {
84
+ readonly authorityState: RegistryAuthorityState;
85
+ readonly epoch: string | undefined;
86
+ readonly connectionFailure: string | undefined;
87
+ readonly recoveryClass: RecoveryClass | undefined;
88
+ readonly recovery: {
89
+ readonly phase: 'idle' | 'waiting' | 'attempting' | 'disabled' | 'requires-restart';
90
+ readonly attempts: number;
91
+ readonly nextRetryAt: number | undefined;
92
+ readonly pendingSync: number;
93
+ };
94
+ }
73
95
  /**
74
96
  * Whether this process is the Registry Authority for the store-wide domain
75
97
  * medium. Contended and storage-failed are both fail-closed: the scope stays
@@ -85,6 +107,7 @@ export type RegistryAuthorityState = {
85
107
  } | {
86
108
  readonly kind: 'storage-failed';
87
109
  readonly reason: string;
110
+ readonly recovery: StorageFailureRecovery;
88
111
  } | {
89
112
  readonly kind: 'config-invalid';
90
113
  readonly reason: string;
@@ -110,6 +133,12 @@ export interface Config {
110
133
  * exactly what classification grants — only new adds are refused.
111
134
  */
112
135
  readonly maxAdditionalRoots?: number;
136
+ /**
137
+ * Whether the registry retries a degraded authority in the background
138
+ * (bounded backoff, `unref`ed). Defaults to `true`; `false` leaves
139
+ * recovery to on-demand calls (refresh, the panel Retry button).
140
+ */
141
+ readonly backgroundRecovery?: boolean;
113
142
  }
114
143
  declare module '@deepseek-ai/cordis' {
115
144
  interface Context {
@@ -206,8 +235,18 @@ export declare class MultiRootRegistry extends Service {
206
235
  private client;
207
236
  private connectionFailure;
208
237
  private connectionGeneration;
238
+ /** Local cancel of the in-flight handshake; teardown must not wait out hello. */
239
+ private connectionAbort;
209
240
  private remoteProjectionReady;
210
241
  private readonly remoteRevisions;
242
+ /**
243
+ * Primary roots whose projection must still be synced after a follower
244
+ * reconnect — populated from the tracked cache keys at adoption, removed as
245
+ * each `applySnapshot` lands. Recovery completes only when it empties.
246
+ */
247
+ private pendingSync;
248
+ /** Bounded background retry for degraded authority states (ADR-0026 R1). */
249
+ private readonly recovery;
211
250
  private readonly operationProof;
212
251
  /** Whether this process currently owns the store. */
213
252
  private authorityState;
@@ -215,6 +254,8 @@ export declare class MultiRootRegistry extends Service {
215
254
  private lease;
216
255
  /** Open domain handle; present only while {@link authority} is `active`. */
217
256
  private domain;
257
+ /** The last failed `openDomain` reason; a repeat failure is not re-logged. */
258
+ private lastOpenFailure;
218
259
  /** The open table; present once this process is the authority. */
219
260
  private table;
220
261
  /** Last classified status list per canonical primary root. */
@@ -271,6 +312,23 @@ export declare class MultiRootRegistry extends Service {
271
312
  get shared(): boolean;
272
313
  get available(): boolean;
273
314
  get authority(): RegistryAuthorityState;
315
+ /** The class a degraded authority belongs to; `undefined` when healthy. */
316
+ private get recoveryClass();
317
+ /**
318
+ * Read-only diagnostics for operators: the authority state, the epoch, the
319
+ * last connection failure, and what the recovery scheduler is doing.
320
+ * `requires-restart` marks classes no timer will ever fix — a `config`
321
+ * row or a `quarantine`d store must NOT read as "retrying". Purely a read;
322
+ * it never arms or runs anything.
323
+ */
324
+ get diagnostics(): RegistryDiagnostics;
325
+ /** The last logged `(kind, recoveryClass)` pair; dedupes transition logs. */
326
+ private loggedRecovery;
327
+ /**
328
+ * Log one line per authority/recovery-class TRANSITION — never per tick:
329
+ * waiting↔attempting moves say nothing an operator did not already know.
330
+ */
331
+ private noteRecoveryTransition;
274
332
  /**
275
333
  * The configured cap on stored additional-root records per primary root.
276
334
  * Surfaces show it next to the count so "N of LIMIT" is always explainable.
@@ -423,6 +481,12 @@ export declare class MultiRootRegistry extends Service {
423
481
  grantedFor(policy: SandboxExecutionPolicy): readonly string[];
424
482
  /** Classify one stored record set and cache it. */
425
483
  private accept;
484
+ /**
485
+ * The pure half of {@link accept}: classification plus the over-limit
486
+ * warning, without writing the cache or the scope. {@link openDomain}
487
+ * staging uses it so a half-opened domain cannot materialize rows.
488
+ */
489
+ private classify;
426
490
  /**
427
491
  * The statuses of one key, from memory where possible: the cache, else what
428
492
  * storage holds, else empty. A cached answer is never re-checked here — that
@@ -482,8 +546,42 @@ export declare class MultiRootRegistry extends Service {
482
546
  private snapshotOf;
483
547
  private captureSnapshot;
484
548
  private notifyShared;
549
+ /** Depth of {@link commit}; nested calls share the outer round's buffers. */
550
+ private commitDepth;
551
+ /** Keys whose publish inside a commit produced deferred notifications, first-seen order. */
552
+ private readonly commitNotifications;
553
+ /**
554
+ * Run `body` as one Registry commit: scope writes inside it go through
555
+ * `multiRootScope.batch`, and the `notifyShared` broadcasts plus Registry
556
+ * listener calls `publish()` produces are collected per key instead of
557
+ * delivered. When the OUTERMOST commit ends — also when `body` throws — the
558
+ * scope batch flushes first, then the broadcasts go out in first-seen key
559
+ * order, then the listeners: no synchronous callback can observe a
560
+ * half-committed state.
561
+ */
562
+ private commit;
563
+ /** Deliver one key's notifications now, or collect them inside a commit. */
564
+ private deliverNotifications;
485
565
  private applySnapshot;
486
566
  private remoteUnavailable;
567
+ /**
568
+ * Resynchronize each still-pending tracked primary outside the authority
569
+ * queue: per-key snapshots through the live client. A failed key stays in
570
+ * `pendingSync` for the next tick; a lost connection abandons the round —
571
+ * `remoteUnavailable` already emptied the set.
572
+ */
573
+ private syncProjection;
574
+ /**
575
+ * Write one key's withheld-only projection into the scope, keeping
576
+ * `published` truthful: the signature records what the scope HOLDS, never
577
+ * what `publish()` last computed — a withheld signature can never equal a
578
+ * publish signature, so an empty snapshot afterwards really writes the
579
+ * retraction. A repeated write of the same withheld projection is a no-op
580
+ * (the same-signature skip is also the republish gate of a repeated
581
+ * downgrade). `metadataPublished` is untouched: a withheld write announces
582
+ * nothing to the Registry view.
583
+ */
584
+ private withholdScope;
487
585
  private remoteSnapshot;
488
586
  private remote;
489
587
  private dispatchShared;
@@ -208,6 +208,10 @@ export declare class MultiRootScopeService extends Service {
208
208
  /** Additional roots keyed by canonical primary root; empty until roots are registered. */
209
209
  private readonly rootsByPrimary;
210
210
  private readonly listeners;
211
+ /** Enclosing {@link MultiRootScopeService.batch} depth; inner calls nest. */
212
+ private batchDepth;
213
+ /** True when a batched write coalesced its notification into the flush. */
214
+ private batchDirty;
211
215
  private admissionProof;
212
216
  /**
213
217
  * The registry-authority fact the registry row publishes. Defaults to
@@ -231,6 +235,20 @@ export declare class MultiRootScopeService extends Service {
231
235
  private readonly dshHome;
232
236
  /** Observe registry publications; consumers still resolve authority from scopeOf(). */
233
237
  subscribe(listener: () => void): () => void;
238
+ /**
239
+ * Run `body` as one notification round: `setAdditionalRoots()` and
240
+ * `setRegistryAuthority()` apply their state immediately (a same-value
241
+ * authority write still stays silent), but subscriber invocations coalesce
242
+ * into a single flush when the OUTERMOST batch ends — also when `body`
243
+ * throws, because the state already landed. A write a subscriber makes
244
+ * during the flush is not part of the batch and notifies synchronously
245
+ * under the normal rules.
246
+ * @param body - the writes to run as one round.
247
+ * @returns the body's return value.
248
+ */
249
+ batch<T>(body: () => T): T;
250
+ /** Notify subscribers now, or coalesce into the enclosing batch's flush. */
251
+ private notifySubscribers;
234
252
  /**
235
253
  * The sorted names of the tools `toolAccess` caps — read-only for the
236
254
  * prompt contribution. An invalid config is not enumerated (it caps every
package/locale/en.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "meta": {
3
+ "title": "Multi-root workspace",
4
+ "description": "Adds secondary working directories to a session: register a folder once and the agent reads and writes it beside the primary root through one shared sandbox scope — file tools, confined shells, and terminals included.",
5
+ "detail": "detail/DETAIL.en.md"
6
+ }
7
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "meta": {
3
+ "title": "多根工作区",
4
+ "description": "为会话添加附属工作目录:登记一次,Agent 即可在主工作目录之外读写该目录——文件工具、受限 shell 和终端都纳入同一共享沙箱范围。",
5
+ "detail": "detail/DETAIL.md"
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dsh-electron/dsh-plugin-multi-root-workspace",
3
3
  "description": "Multi-root Workspace for DeepSeek Harness: adds N additional roots to the workspace sandbox scope as an out-of-tree bundle",
4
- "version": "0.1.12",
4
+ "version": "0.1.14",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/types/index.d.ts",
@@ -47,6 +47,7 @@
47
47
  "default": "./lib/client.js"
48
48
  },
49
49
  "./package.json": "./package.json",
50
+ "./locale/*.json": "./locale/*.json",
50
51
  "./lsp": {
51
52
  "types": "./lib/types/lsp.d.ts",
52
53
  "default": "./lib/lsp.js"
@@ -81,6 +82,8 @@
81
82
  "lib/*.js.map",
82
83
  "lib/types/**/*.d.ts",
83
84
  "cordis.patch.yml",
85
+ "detail",
86
+ "locale",
84
87
  "README.md",
85
88
  "README.en.md",
86
89
  "CHANGELOG.md",
@@ -105,35 +108,37 @@
105
108
  },
106
109
  "license": "MIT",
107
110
  "peerDependencies": {
108
- "@deepseek-ai/cordis": ">=4.0.1 <5.0.0 || 4.0.5-alpha.1 || 4.0.5-alpha.2 || 4.0.6-alpha.1",
109
- "@deepseek-ai/dsh-agent": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
110
- "@deepseek-ai/dsh-agent-instructions": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
111
- "@deepseek-ai/dsh-api-workspace-files": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
112
- "@deepseek-ai/dsh-client-connection": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
113
- "@deepseek-ai/dsh-commands": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
114
- "@deepseek-ai/dsh-fs": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
115
- "@deepseek-ai/dsh-fs-local": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
116
- "@deepseek-ai/dsh-llm": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
117
- "@deepseek-ai/dsh-lsp": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
118
- "@deepseek-ai/dsh-lsp-stdio": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
119
- "@deepseek-ai/dsh-sandbox": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
120
- "@deepseek-ai/dsh-sandbox-local": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
121
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
122
- "@deepseek-ai/dsh-sandbox-windows-acl": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
123
- "@deepseek-ai/dsh-session": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
124
- "@deepseek-ai/dsh-storage-domain": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
125
- "@deepseek-ai/dsh-subprocess": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
126
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
127
- "@deepseek-ai/dsh-tools": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
128
- "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
129
- "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
130
- "@deepseek-ai/dsh-util-values": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
131
- "@deepseek-ai/dsh-skill": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
132
- "@deepseek-ai/dsh-skill-filesystem": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
133
- "@deepseek-ai/dsh-settings": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
134
- "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
135
- "@deepseek-ai/dsh-session-query": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
136
- "@deepseek-ai/dsh-storage-json": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2"
111
+ "@deepseek-ai/cordis": ">=4.0.1 <5.0.0 || 4.0.5-alpha.1 || 4.0.5-alpha.2 || 4.0.6-alpha.1 || 4.0.6-alpha.2",
112
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
113
+ "@deepseek-ai/dsh-agent-instructions": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
114
+ "@deepseek-ai/dsh-api-workspace-files": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
115
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
116
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
117
+ "@deepseek-ai/dsh-fs": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
118
+ "@deepseek-ai/dsh-fs-local": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
119
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
120
+ "@deepseek-ai/dsh-lsp": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
121
+ "@deepseek-ai/dsh-lsp-stdio": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
122
+ "@deepseek-ai/dsh-sandbox": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
123
+ "@deepseek-ai/dsh-sandbox-local": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
124
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
125
+ "@deepseek-ai/dsh-sandbox-windows-acl": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
126
+ "@deepseek-ai/dsh-session": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
127
+ "@deepseek-ai/dsh-storage-domain": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
128
+ "@deepseek-ai/dsh-subprocess": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
129
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
130
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
131
+ "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
132
+ "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
133
+ "@deepseek-ai/dsh-util-values": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
134
+ "@deepseek-ai/dsh-skill": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
135
+ "@deepseek-ai/dsh-skill-filesystem": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
136
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
137
+ "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
138
+ "@deepseek-ai/dsh-session-query": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
139
+ "@deepseek-ai/dsh-storage-json": "0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2 || 0.1.7-alpha.1 || 0.1.7-alpha.2 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.1 || 0.2.1-alpha.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4 || 0.2.1-alpha.5 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-alpha.3 || 0.2.2-rc.1",
140
+ "@deepseek-ai/node-addon-system": "^0.1.2",
141
+ "@deepseek-ai/schemastery": ">=3.18.2 <4.0.0 || 3.18.5-alpha.1 || 3.18.5-alpha.2 || 3.18.6-alpha.1 || 3.18.6-alpha.2"
137
142
  },
138
143
  "peerDependenciesMeta": {
139
144
  "@deepseek-ai/dsh-agent": {
@@ -204,48 +209,48 @@
204
209
  }
205
210
  },
206
211
  "devDependencies": {
207
- "@deepseek-ai/cordis": "4.0.6-alpha.1",
208
- "@deepseek-ai/dsh": "0.2.2-alpha.2",
209
- "@deepseek-ai/dsh-agent": "0.2.2-alpha.2",
210
- "@deepseek-ai/dsh-agent-instructions": "0.2.2-alpha.2",
211
- "@deepseek-ai/dsh-api-remotes": "0.2.2-alpha.2",
212
- "@deepseek-ai/dsh-api-workspace-files": "0.2.2-alpha.2",
213
- "@deepseek-ai/dsh-app-boot": "0.2.2-alpha.2",
214
- "@deepseek-ai/dsh-base": "0.2.2-alpha.2",
215
- "@deepseek-ai/dsh-client-connection": "0.2.2-alpha.2",
216
- "@deepseek-ai/dsh-client-locale": "0.2.2-alpha.2",
217
- "@deepseek-ai/dsh-client-store": "0.2.2-alpha.2",
218
- "@deepseek-ai/dsh-client-ui-dockkit": "0.2.2-alpha.2",
219
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.2-alpha.2",
220
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.2-alpha.2",
221
- "@deepseek-ai/dsh-client-ui-session": "0.2.2-alpha.2",
222
- "@deepseek-ai/dsh-client-ui-sidebar": "0.2.2-alpha.2",
223
- "@deepseek-ai/dsh-client-ui-slots": "0.2.2-alpha.2",
224
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.2-alpha.2",
225
- "@deepseek-ai/dsh-commands": "0.2.2-alpha.2",
226
- "@deepseek-ai/dsh-fs": "0.2.2-alpha.2",
227
- "@deepseek-ai/dsh-fs-local": "0.2.2-alpha.2",
228
- "@deepseek-ai/dsh-fs-sandbox": "0.2.2-alpha.2",
229
- "@deepseek-ai/dsh-host-open-in-app": "0.2.2-alpha.2",
230
- "@deepseek-ai/dsh-llm": "0.2.2-alpha.2",
231
- "@deepseek-ai/dsh-lsp": "0.2.2-alpha.2",
232
- "@deepseek-ai/dsh-lsp-stdio": "0.2.2-alpha.2",
233
- "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2",
234
- "@deepseek-ai/dsh-sandbox-local": "0.2.2-alpha.2",
235
- "@deepseek-ai/dsh-sandbox-policy": "0.2.2-alpha.2",
236
- "@deepseek-ai/dsh-sandbox-windows-acl": "0.2.2-alpha.2",
237
- "@deepseek-ai/dsh-session": "0.2.2-alpha.2",
238
- "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2",
239
- "@deepseek-ai/dsh-storage": "0.2.2-alpha.2",
240
- "@deepseek-ai/dsh-storage-domain": "0.2.2-alpha.2",
241
- "@deepseek-ai/dsh-storage-json": "0.2.2-alpha.2",
242
- "@deepseek-ai/dsh-subprocess": "0.2.2-alpha.2",
243
- "@deepseek-ai/dsh-subprocess-local": "0.2.2-alpha.2",
244
- "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2",
245
- "@deepseek-ai/dsh-tools": "0.2.2-alpha.2",
246
- "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2",
247
- "@deepseek-ai/dsh-util-workspace-path": "0.2.2-alpha.2",
248
- "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2",
212
+ "@deepseek-ai/cordis": "4.1.0",
213
+ "@deepseek-ai/dsh": "0.2.2-rc.1",
214
+ "@deepseek-ai/dsh-agent": "0.2.2-rc.1",
215
+ "@deepseek-ai/dsh-agent-instructions": "0.2.2-rc.1",
216
+ "@deepseek-ai/dsh-api-remotes": "0.2.2-rc.1",
217
+ "@deepseek-ai/dsh-api-workspace-files": "0.2.2-rc.1",
218
+ "@deepseek-ai/dsh-app-boot": "0.2.2-rc.1",
219
+ "@deepseek-ai/dsh-base": "0.2.2-rc.1",
220
+ "@deepseek-ai/dsh-client-connection": "0.2.2-rc.1",
221
+ "@deepseek-ai/dsh-client-locale": "0.2.2-rc.1",
222
+ "@deepseek-ai/dsh-client-store": "0.2.2-rc.1",
223
+ "@deepseek-ai/dsh-client-ui-dockkit": "0.2.2-rc.1",
224
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.2-rc.1",
225
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.2-rc.1",
226
+ "@deepseek-ai/dsh-client-ui-session": "0.2.2-rc.1",
227
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.2-rc.1",
228
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.2-rc.1",
229
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.2-rc.1",
230
+ "@deepseek-ai/dsh-commands": "0.2.2-rc.1",
231
+ "@deepseek-ai/dsh-fs": "0.2.2-rc.1",
232
+ "@deepseek-ai/dsh-fs-local": "0.2.2-rc.1",
233
+ "@deepseek-ai/dsh-fs-sandbox": "0.2.2-rc.1",
234
+ "@deepseek-ai/dsh-host-open-in-app": "0.2.2-rc.1",
235
+ "@deepseek-ai/dsh-llm": "0.2.2-rc.1",
236
+ "@deepseek-ai/dsh-lsp": "0.2.2-rc.1",
237
+ "@deepseek-ai/dsh-lsp-stdio": "0.2.2-rc.1",
238
+ "@deepseek-ai/dsh-sandbox": "0.2.2-rc.1",
239
+ "@deepseek-ai/dsh-sandbox-local": "0.2.2-rc.1",
240
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.2-rc.1",
241
+ "@deepseek-ai/dsh-sandbox-windows-acl": "0.2.2-rc.1",
242
+ "@deepseek-ai/dsh-session": "0.2.2-rc.1",
243
+ "@deepseek-ai/dsh-session-projection": "0.2.2-rc.1",
244
+ "@deepseek-ai/dsh-storage": "0.2.2-rc.1",
245
+ "@deepseek-ai/dsh-storage-domain": "0.2.2-rc.1",
246
+ "@deepseek-ai/dsh-storage-json": "0.2.2-rc.1",
247
+ "@deepseek-ai/dsh-subprocess": "0.2.2-rc.1",
248
+ "@deepseek-ai/dsh-subprocess-local": "0.2.2-rc.1",
249
+ "@deepseek-ai/dsh-system-prompt": "0.2.2-rc.1",
250
+ "@deepseek-ai/dsh-tools": "0.2.2-rc.1",
251
+ "@deepseek-ai/dsh-typert-protocol": "0.2.2-rc.1",
252
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.2-rc.1",
253
+ "@deepseek-ai/dsh-workspace": "0.2.2-rc.1",
249
254
  "@testing-library/react": "^16.3.3",
250
255
  "@modelcontextprotocol/sdk": "^1.32.2",
251
256
  "@types/node": "^22.0.0",
@@ -262,12 +267,15 @@
262
267
  "vitest": "^4.1.12",
263
268
  "yaml": "^2.9.0",
264
269
  "zustand": "~4.5.7",
265
- "@deepseek-ai/dsh-skill": "0.2.2-alpha.2",
266
- "@deepseek-ai/dsh-skill-filesystem": "0.2.2-alpha.2",
267
- "@deepseek-ai/dsh-settings": "0.2.2-alpha.2",
268
- "@deepseek-ai/dsh-api-session-controller": "0.2.2-alpha.2",
269
- "@deepseek-ai/dsh-session-query": "0.2.2-alpha.2",
270
- "@deepseek-ai/dsh-tool-skill": "0.2.2-alpha.2"
270
+ "@deepseek-ai/dsh-skill": "0.2.2-rc.1",
271
+ "@deepseek-ai/dsh-skill-filesystem": "0.2.2-rc.1",
272
+ "@deepseek-ai/dsh-settings": "0.2.2-rc.1",
273
+ "@deepseek-ai/dsh-api-session-controller": "0.2.2-rc.1",
274
+ "@deepseek-ai/dsh-session-query": "0.2.2-rc.1",
275
+ "@deepseek-ai/dsh-tool-skill": "0.2.2-rc.1",
276
+ "@deepseek-ai/node-addon-system": "0.1.2",
277
+ "@deepseek-ai/schemastery": "3.19.0",
278
+ "fontkit": "2.0.4"
271
279
  },
272
280
  "dsh": {
273
281
  "bundle": {
@@ -284,10 +292,8 @@
284
292
  }
285
293
  },
286
294
  "dependencies": {
287
- "@deepseek-ai/node-addon-system": "^0.1.2",
288
295
  "koffi": "^3.1.0",
289
- "zod": "^4.6.7",
290
- "@deepseek-ai/schemastery": "^3.18.2"
296
+ "zod": "^4.6.7"
291
297
  },
292
298
  "scripts": {
293
299
  "bench:roots": "node --experimental-transform-types scripts/bench-root-scale.mjs",
@@ -312,6 +318,7 @@
312
318
  "auto-review:fork": "node scripts/check-auto-review-fork.mjs",
313
319
  "smoke:auto-review": "node scripts/verify-auto-review.mjs",
314
320
  "registry:probe": "node scripts/check-registry-authority.mjs",
315
- "soak:tui-registry": "node scripts/observe-tui-registry.mjs"
321
+ "soak:tui-registry": "node scripts/observe-tui-registry.mjs",
322
+ "preview:gen": "node scripts/gen-detail-preview.mjs"
316
323
  }
317
324
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  中文:[README.md](./README.md)
4
4
 
5
- Auto Review is included at `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` and supports only DSH `0.2.1-rc.2`. After installing the main package, expand Multi-root Workspace's row list in the Plugin Manager and enable the `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` row (its `cordis.patch.yml` row id is `multi-root-auto-review`). This row ships disabled: while off, it mounts neither the reviewer nor review context and does not register the Auto preset. Profiles without hot reload require a restart, as reported by the manager.
5
+ Auto Review is included at `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` and supports only DSH `0.2.1-rc.2`. After installing the main package, expand Multi-root Workspace's row list in the Plugin Manager and enable the `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` row (its `cordis.patch.yml` row id is `multi-root-auto-review`). This row ships disabled: while off, it mounts neither the reviewer nor review context and does not register the Auto preset. Profiles without hot reload require a restart, as reported by the manager. The same detail page's settings card also carries an "experimental"-tagged "Multi-root Auto Review" switch below the additional-root Skills one; it writes the same persisted override and reads the same live state as the row switch, and it is off by default as well. On hosts without the plugin-manager Remote the switch does not render.
6
6
 
7
7
  The one switch mounts both current multi-root context and the reviewer, taking over the sibling official `@deepseek-ai/dsh-experimental-auto-review` row at runtime. Either bundle order works, and subsequent reloads retain one owner. Takeover does not change the official row's saved configuration. After disabling, reload/restart restores the official owner only if its bundle is still selected and its original configuration allows it to run; an unselected official bundle is not installed or enabled automatically. When the official bundle is not selected, the row still provides the same reviewer standalone (it registers the Auto preset itself); there is simply no official owner to take over.
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  English: [README.en.md](./README.en.md)
4
4
 
5
- Auto Review 已内置于 `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review`,仅支持 DSH `0.2.1-rc.2`。安装主包后,在插件管理器中展开 Multi-root Workspace 的行列表,打开 `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` 行(`cordis.patch.yml` 中的行 id 为 `multi-root-auto-review`)。该行出厂关闭;关闭时不挂载 reviewer 或 review context,也不注册 Auto preset。无热重载的 profile 需要按管理器提示重启。
5
+ Auto Review 已内置于 `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review`,仅支持 DSH `0.2.1-rc.2`。安装主包后,在插件管理器中展开 Multi-root Workspace 的行列表,打开 `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` 行(`cordis.patch.yml` 中的行 id 为 `multi-root-auto-review`)。该行出厂关闭;关闭时不挂载 reviewer 或 review context,也不注册 Auto preset。无热重载的 profile 需要按管理器提示重启。同一详情页的设置卡里还有一个标注「实验性」的「多根 Auto Review」开关(位于附属根 Skills 开关之下),它与行开关写入同一份持久覆盖、读同一份实时状态,默认同样关闭;宿主没有插件管理 Remote 时该开关不显示。
6
6
 
7
7
  启用后,同一个开关挂载当前多根 context 与 reviewer,并在运行时停止同组官方 `@deepseek-ai/dsh-experimental-auto-review` 行。官方 bundle 位于主包前后均可;后续 reload 仍保持单一 owner。接管不修改官方的持久配置。关闭后,官方仅在仍被选择且原配置允许启用时随 reload/restart 恢复;官方未被选择时不会自动安装或启用。官方 bundle 未被选择时,该行仍独立提供同一份 reviewer(自带注册 Auto preset),只是没有可接管的官方 owner。
8
8