@dsh-electron/dsh-plugin-multi-root-workspace 0.1.9 → 0.1.11

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 (62) hide show
  1. package/CHANGELOG.en.md +26 -1
  2. package/CHANGELOG.md +26 -1
  3. package/README.en.md +24 -8
  4. package/README.md +24 -8
  5. package/cordis.patch.yml +4 -0
  6. package/lib/auto-review.js +1 -1
  7. package/lib/client.js +727 -209
  8. package/lib/client.js.map +1 -1
  9. package/lib/{command-Bwd6EGNV.js → command-BGdz7VBH.js} +65 -5
  10. package/lib/command.js +1 -1
  11. package/lib/{compat-CagUNzRB.js → compat-BiW-m_q0.js} +14 -1
  12. package/lib/compat.js +1 -1
  13. package/lib/{contract-DZ4zczDT.js → contract-CStSEOcK.js} +44 -1
  14. package/lib/index.js +6 -5
  15. package/lib/{instructions-CGNS3H0H.js → instructions-MePoRigy.js} +2 -206
  16. package/lib/instructions.js +1 -1
  17. package/lib/llm-message-fYORacvh.js +206 -0
  18. package/lib/metadata-DgqSdVX_.js +35 -0
  19. package/lib/{registry-BClm6wfh.js → registry-KSsmU393.js} +60 -7
  20. package/lib/registry.js +1 -1
  21. package/lib/{review-context-D-ohSVmA.js → review-context-AH-SXHmj.js} +1 -1
  22. package/lib/review-context.js +1 -1
  23. package/lib/scope.js +6 -2
  24. package/lib/skills.js +790 -0
  25. package/lib/types/client/WorkspaceFoldersAction.d.ts +1 -1
  26. package/lib/types/client/locales.d.ts +26 -16
  27. package/lib/types/client/open-in-app/OpenInAppAction.d.ts +5 -3
  28. package/lib/types/client/open-in-app/OpenTargetButton.d.ts +16 -10
  29. package/lib/types/client/open-in-app/adapter.d.ts +5 -1
  30. package/lib/types/client/open-in-app/controller.d.ts +5 -2
  31. package/lib/types/client/open-in-app/device.d.ts +11 -0
  32. package/lib/types/client/open-in-app/locales.d.ts +1 -1
  33. package/lib/types/client/open-in-app/open-path.d.ts +6 -5
  34. package/lib/types/client/open-in-app/open-toast.d.ts +39 -0
  35. package/lib/types/client/open-in-app/outcome.d.ts +23 -0
  36. package/lib/types/client/skills-client.d.ts +23 -0
  37. package/lib/types/client/skills-settings.d.ts +10 -0
  38. package/lib/types/client/skills.d.ts +36 -0
  39. package/lib/types/client/styles.d.ts +1 -1
  40. package/lib/types/command.d.ts +1 -1
  41. package/lib/types/compat/client-session.d.ts +2 -0
  42. package/lib/types/compat/dsh-version.d.ts +5 -5
  43. package/lib/types/compat/open-in-app-device.d.ts +23 -0
  44. package/lib/types/compat/skill-content.d.ts +3 -0
  45. package/lib/types/compat/skills-client.d.ts +33 -0
  46. package/lib/types/compat/skills-settings.d.ts +8 -0
  47. package/lib/types/compat/skills.d.ts +13 -0
  48. package/lib/types/compat/storage-zod.d.ts +1 -0
  49. package/lib/types/contract.d.ts +12 -1
  50. package/lib/types/registry.d.ts +7 -0
  51. package/lib/types/roots.d.ts +4 -1
  52. package/lib/types/scope.d.ts +2 -0
  53. package/lib/types/skills/catalog.d.ts +34 -0
  54. package/lib/types/skills/invocation.d.ts +7 -0
  55. package/lib/types/skills/metadata.d.ts +13 -0
  56. package/lib/types/skills/pool.d.ts +19 -0
  57. package/lib/types/skills/reader.d.ts +3 -0
  58. package/lib/types/skills/routing.d.ts +2 -0
  59. package/lib/types/skills-contract.d.ts +39 -0
  60. package/lib/types/skills.d.ts +43 -0
  61. package/package.json +98 -85
  62. package/lib/types/client/open-in-app/open-failure-toast.d.ts +0 -11
@@ -0,0 +1,33 @@
1
+ /** Structural client seams: older hosts have namespace forms and no UserTextRule registry. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ export interface SkillsForm {
4
+ getSnapshot(): {
5
+ value?: {
6
+ enabled?: boolean;
7
+ } | undefined;
8
+ status: string;
9
+ writable: boolean;
10
+ revision?: number | undefined;
11
+ };
12
+ subscribe(listener: () => void): () => void;
13
+ mutate(ops: readonly {
14
+ op: 'set';
15
+ path: string[];
16
+ value: boolean;
17
+ }[], revision?: number): Promise<boolean>;
18
+ }
19
+ export declare function bindSkillsForm(ctx: Context): SkillsForm | undefined;
20
+ export declare function clientInject(ctx: Context, services: string[], callback: (scope: Context) => void | (() => void)): void;
21
+ export interface NamespaceRule {
22
+ id: string;
23
+ order: number;
24
+ match(text: string, from: number): {
25
+ id: string;
26
+ start: number;
27
+ end: number;
28
+ data: {
29
+ name: string;
30
+ };
31
+ } | undefined;
32
+ }
33
+ export declare function registerNamespaceRule(ctx: Context, rule: NamespaceRule): (() => void) | undefined;
@@ -0,0 +1,8 @@
1
+ /** Legacy namespace sections and modern volatile Config forms share one live switch. */
2
+ import type { Context, Fiber } from '@deepseek-ai/cordis';
3
+ export declare const SKILLS_SETTINGS_ID = "multi-root-skills";
4
+ export declare const SKILLS_BUNDLE_KEY = "@dsh-electron/dsh-plugin-multi-root-workspace";
5
+ export declare function installSkillsSettings(ctx: Context, initial: () => unknown, changed: () => void): {
6
+ read(): unknown;
7
+ fiber: Fiber;
8
+ };
@@ -0,0 +1,13 @@
1
+ /** Public native Skills seams. All borrowed-scope and optional-package coupling lives here. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { Agent } from '@deepseek-ai/dsh-agent';
4
+ import type { SkillLookupOptions } from '@deepseek-ai/dsh-skill';
5
+ /** Never infer authority from cwd, a preset key, or a lookalike Agent. */
6
+ export declare function skillAgent(ctx: Context, options: SkillLookupOptions): Agent | undefined;
7
+ export declare function skillOrigin(ctx: Context, options: SkillLookupOptions): string | undefined;
8
+ /** Absence is optional; a present but broken module must fail visibly. */
9
+ export declare function filesystemSkillsApi(): Promise<typeof import('@deepseek-ai/dsh-skill-filesystem') | undefined>;
10
+ export declare function volatileField<S>(schema: S): S;
11
+ export declare function configValue(value: unknown): unknown;
12
+ /** Cold Browser Catalog supplies a Session header, never a fabricated Agent. */
13
+ export declare function observedSkillOrigin(ctx: Context, sessionId: string): Promise<string>;
@@ -49,6 +49,7 @@ interface DomainZodModule {
49
49
  optional(): any;
50
50
  };
51
51
  array(item: unknown): any;
52
+ unknown(): any;
52
53
  }
53
54
  /**
54
55
  * The `z` namespace as the installed `@deepseek-ai/dsh-storage-domain`
@@ -28,10 +28,15 @@
28
28
  *
29
29
  * @module @dsh-electron/dsh-plugin-multi-root-workspace/contract
30
30
  */
31
+ import type { SkillsResponseMap } from './skills-contract.ts';
32
+ export { SKILLS_ENDPOINTS, skillsRequestSchema, skillsCatalogSchema, skillsPreviewSchema, skillsStatusSchema } from './skills-contract.ts';
33
+ export type { SkillsEndpoint, SkillsStatusView, SkillsCatalogView, SkillsPreviewView } from './skills-contract.ts';
34
+ export interface WorkspaceResponseMap extends PanelResponseMap, SkillsResponseMap {
35
+ }
31
36
  /** The absolute logical channel both halves speak over. */
32
37
  export declare const PANEL_CHANNEL = "/multi-root-workspace";
33
38
  /** Endpoint names, relative to {@link PANEL_CHANNEL}. */
34
- export type PanelEndpoint = 'list' | 'add' | 'remove' | 'alias' | 'move' | 'setAccess' | 'reveal';
39
+ export type PanelEndpoint = 'list' | 'add' | 'remove' | 'alias' | 'move' | 'setAccess' | 'setSkillsEnabled' | 'setAliasId' | 'reveal';
35
40
  /** Every endpoint name, for exhaustive iteration in tests and callers. */
36
41
  export declare const PANEL_ENDPOINTS: readonly PanelEndpoint[];
37
42
  /**
@@ -61,6 +66,8 @@ export interface RootView {
61
66
  /** Canonical absolute directory. */
62
67
  readonly path: string;
63
68
  /** Display alias as stored; absent when cleared. */
69
+ readonly aliasId?: string;
70
+ readonly skillsEnabled?: boolean;
64
71
  readonly alias?: string;
65
72
  /** ISO-8601 registration instant. */
66
73
  readonly addedAt: string;
@@ -119,6 +126,8 @@ export interface PanelResponseMap {
119
126
  readonly remove: RootsView;
120
127
  readonly alias: RootsView;
121
128
  readonly move: RootsView;
129
+ readonly setSkillsEnabled: RootsView;
130
+ readonly setAliasId: RootsView;
122
131
  readonly setAccess: RootsView;
123
132
  readonly reveal: RevealedView;
124
133
  }
@@ -138,6 +147,8 @@ export interface PanelRequest {
138
147
  /** Candidate directory (add). */
139
148
  readonly path?: string;
140
149
  /** Display alias (add/alias); empty clears it. */
150
+ readonly aliasId?: string;
151
+ readonly skillsEnabled?: boolean;
141
152
  readonly alias?: string;
142
153
  /** Write authority (add — defaults to `inherit` — and setAccess). */
143
154
  readonly access?: RootAccess;
@@ -146,6 +146,8 @@ type PersistedRoot = {
146
146
  readOnlyRecordedPath?: string | undefined;
147
147
  readWriteRecordedPath?: string | undefined;
148
148
  alias?: string | undefined;
149
+ aliasId?: unknown;
150
+ skillsEnabled?: unknown;
149
151
  addedAt: string;
150
152
  };
151
153
  /**
@@ -347,6 +349,10 @@ export declare class MultiRootRegistry extends Service {
347
349
  * @throws {RootValidationError} `not-found`/`invalid-alias`.
348
350
  */
349
351
  setAlias(primaryRoot: string, ref: RootRef, alias: string | undefined): Promise<readonly RootStatus[]>;
352
+ /** Change a Skill switch without changing any grant field. */
353
+ setSkillsEnabled(primaryRoot: string, ref: RootRef, skillsEnabled: boolean): Promise<readonly RootStatus[]>;
354
+ setAliasId(primaryRoot: string, ref: RootRef, aliasId: string): Promise<readonly RootStatus[]>;
355
+ private setSkillsMetadata;
350
356
  /**
351
357
  * Move one registration within the display order.
352
358
  * @param primaryRoot - the session workspace root the root belongs to.
@@ -438,6 +444,7 @@ export declare class MultiRootRegistry extends Service {
438
444
  * under a shared byte budget, so a move must update the live scope immediately.
439
445
  * Aliases and no-op moves still leave the signature unchanged.
440
446
  */
447
+ private readonly metadataPublished;
441
448
  private publish;
442
449
  /**
443
450
  * The open table.
@@ -105,6 +105,9 @@ export interface RegisteredRoot {
105
105
  readonly readWriteRecordedPath?: string;
106
106
  /** Optional display alias; absent when the operator cleared it. */
107
107
  readonly alias?: string;
108
+ /** Untrusted stored metadata; consumers must validate both fields and uniqueness. */
109
+ readonly aliasId?: unknown;
110
+ readonly skillsEnabled?: unknown;
108
111
  /** ISO-8601 instant of registration. */
109
112
  readonly addedAt: string;
110
113
  }
@@ -169,7 +172,7 @@ export type RootRef = {
169
172
  readonly addedAt: string;
170
173
  };
171
174
  /** Every way root handling can fail, as a stable code the surfaces localize. */
172
- export type RootValidationCode = 'not-absolute' | 'missing' | 'not-a-directory' | 'equals-primary' | 'primary-overlap' | 'duplicate' | 'nested' | 'invalid-alias' | 'not-found' | 'invalid-ref' | 'storage-unavailable' | 'registry-contended' | 'root-limit-reached' | 'config-invalid' | 'reveal-unavailable' | 'session-not-found' | 'unsupported-path' | 'root-unavailable';
175
+ export type RootValidationCode = 'not-absolute' | 'missing' | 'not-a-directory' | 'equals-primary' | 'primary-overlap' | 'duplicate' | 'nested' | 'invalid-alias' | 'invalid-alias-id' | 'not-found' | 'invalid-ref' | 'storage-unavailable' | 'registry-contended' | 'root-limit-reached' | 'config-invalid' | 'reveal-unavailable' | 'session-not-found' | 'unsupported-path' | 'root-unavailable';
173
176
  /** A rejected root operation; `code` is the stable contract, `message` the fallback prose. */
174
177
  export declare class RootValidationError extends Error {
175
178
  readonly code: RootValidationCode;
@@ -307,6 +307,8 @@ export declare class MultiRootScopeService extends Service {
307
307
  * (before acquisition, on contention or storage failure, at teardown) and
308
308
  * `available` only once its stored records have been published. Nothing
309
309
  * else may call it, and it never touches the root table.
310
+ * Only transitions notify: a failed refresh may republish `unavailable`,
311
+ * and notifying on that no-op would re-arm Skills clients' refresh loop.
310
312
  * @param available - whether this process holds the registry authority.
311
313
  */
312
314
  setRegistryAuthority(available: boolean): void;
@@ -0,0 +1,34 @@
1
+ import { SkillReaderPool } from './pool.ts';
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { SkillCandidate, SkillLookupOptions, SkillDefinition } from '@deepseek-ai/dsh-skill';
4
+ import type { RootStatus } from '../roots.ts';
5
+ import { rootReader } from './reader.ts';
6
+ export declare const SKILLS_PROVIDER = "multi-root-workspace";
7
+ export declare function internalSkillName(primary: string, rootId: string, skillName: string): string;
8
+ export interface LocatedSkill {
9
+ readonly primary: string;
10
+ readonly rootId: string;
11
+ readonly aliasId: string;
12
+ readonly candidate: SkillCandidate;
13
+ }
14
+ export type Reader = NonNullable<Awaited<ReturnType<typeof rootReader>>>;
15
+ export declare class AdditionalSkillCatalog {
16
+ private readonly ctx;
17
+ private readonly signal;
18
+ private readonly enabled;
19
+ private readonly generation;
20
+ private readonly loadedReceipts;
21
+ private readonly locators;
22
+ private readonly requests;
23
+ readonly pool: SkillReaderPool;
24
+ constructor(ctx: Context, signal: AbortSignal, enabled: () => boolean, generation?: () => number, invalidate?: () => void);
25
+ /** Read synchronously after awaited receipt checks, immediately before batch delivery. */
26
+ get revision(): number;
27
+ current(primary: string, id: string): RootStatus | undefined;
28
+ private withReader;
29
+ list(primary: string, options: SkillLookupOptions): Promise<SkillCandidate[]>;
30
+ /** Locators are created here and are not accepted from a client path or object. */
31
+ load(primary: string, entry: SkillCandidate, options: SkillLookupOptions, user: boolean): Promise<SkillDefinition | undefined>;
32
+ admissionValid(definition: SkillDefinition): Promise<boolean>;
33
+ dispose(): Promise<void>;
34
+ }
@@ -0,0 +1,7 @@
1
+ /** Host-only explicit gesture parsing. External messages cannot forge user intent. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { Agent } from '@deepseek-ai/dsh-agent';
4
+ import type { AdditionalSkillCatalog, LocatedSkill } from './catalog.ts';
5
+ export declare function installSkillInvocations(ctx: Context, catalog: AdditionalSkillCatalog, known: WeakMap<Agent, Map<string, LocatedSkill>>): void;
6
+ /** The tracked identity is an Agent object, never a process-global current Session. */
7
+ export type SkillCaller = Agent;
@@ -0,0 +1,13 @@
1
+ export interface SkillsMetadata {
2
+ readonly id: string;
3
+ readonly path: string;
4
+ readonly alias?: string | undefined;
5
+ readonly aliasId?: unknown;
6
+ readonly skillsEnabled?: unknown;
7
+ readonly readOnlyRecordedPath?: string | undefined;
8
+ }
9
+ export declare function validAliasId(value: unknown): value is string;
10
+ export declare function skillsMetadataValid(row: SkillsMetadata, rows: readonly SkillsMetadata[]): boolean;
11
+ export declare function validateAliasId(value: string, others: readonly SkillsMetadata[]): string;
12
+ /** Missing metadata is legacy; malformed supplied metadata is preserved and withheld. */
13
+ export declare function migrateRootSkills<T extends SkillsMetadata>(rows: readonly T[]): T[];
@@ -0,0 +1,19 @@
1
+ import type { Reader } from './catalog.ts';
2
+ export declare class SkillReaderPool {
3
+ private readonly invalidate;
4
+ readonly capacity: number;
5
+ private readonly entries;
6
+ private readonly waiters;
7
+ private closing;
8
+ private polling;
9
+ private readonly timer;
10
+ constructor(invalidate: () => void, capacity?: number, intervalMs?: number);
11
+ get size(): number;
12
+ get roots(): readonly string[];
13
+ use<T>(key: string, create: (signal: AbortSignal) => Promise<Reader | undefined>, run: (reader: Reader | undefined) => Promise<T>, signal?: AbortSignal): Promise<T>;
14
+ poll(): Promise<void>;
15
+ dispose(): Promise<void>;
16
+ private closeEntry;
17
+ }
18
+ /** No symlink target outside the Root is read or enumerated. Content reads stay on demand. */
19
+ export declare function skillTreeStamp(root: string): Promise<string>;
@@ -0,0 +1,3 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export declare function containsPath(root: string, target: string): boolean;
3
+ export declare function rootReader(ctx: Context, root: string, signal: AbortSignal, valid: () => boolean): Promise<import("@deepseek-ai/dsh-skill-filesystem").FileSystemSkillProvider | undefined>;
@@ -0,0 +1,2 @@
1
+ import type { Context, Fiber } from '@deepseek-ai/cordis';
2
+ export declare function installSkillRouting(ctx: Context): readonly Fiber[];
@@ -0,0 +1,39 @@
1
+ /** Browser-safe Skills wire shapes. Session IDs select authority; clients never send paths. */
2
+ import { z } from 'zod';
3
+ export declare const SKILLS_ENDPOINTS: readonly ["skillsList", "skillsPreview", "skillsChanges"];
4
+ export type SkillsEndpoint = typeof SKILLS_ENDPOINTS[number];
5
+ export declare const skillsRequestSchema: z.ZodObject<{
6
+ sessionId: z.ZodString;
7
+ name: z.ZodOptional<z.ZodString>;
8
+ generation: z.ZodOptional<z.ZodNumber>;
9
+ }, z.core.$strict>;
10
+ export declare const skillsStatusSchema: z.ZodObject<{
11
+ sessionId: z.ZodString;
12
+ generation: z.ZodNumber;
13
+ enabled: z.ZodBoolean;
14
+ }, z.core.$strip>;
15
+ export declare const skillsCatalogSchema: z.ZodObject<{
16
+ skills: z.ZodArray<z.ZodObject<{
17
+ name: z.ZodString;
18
+ description: z.ZodString;
19
+ modelInvocable: z.ZodBoolean;
20
+ }, z.core.$strip>>;
21
+ sessionId: z.ZodString;
22
+ generation: z.ZodNumber;
23
+ enabled: z.ZodBoolean;
24
+ }, z.core.$strip>;
25
+ export declare const skillsPreviewSchema: z.ZodObject<{
26
+ name: z.ZodString;
27
+ content: z.ZodString;
28
+ sessionId: z.ZodString;
29
+ generation: z.ZodNumber;
30
+ enabled: z.ZodBoolean;
31
+ }, z.core.$strip>;
32
+ export type SkillsStatusView = z.infer<typeof skillsStatusSchema>;
33
+ export type SkillsCatalogView = z.infer<typeof skillsCatalogSchema>;
34
+ export type SkillsPreviewView = z.infer<typeof skillsPreviewSchema>;
35
+ export interface SkillsResponseMap {
36
+ skillsList: SkillsCatalogView;
37
+ skillsPreview: SkillsPreviewView;
38
+ skillsChanges: SkillsStatusView;
39
+ }
@@ -0,0 +1,43 @@
1
+ /** Optional Skills host entry. Kept outside the carrier's module evaluation graph. */
2
+ import { Service, type Context } from '@deepseek-ai/cordis';
3
+ import z from '@deepseek-ai/schemastery';
4
+ import type { SkillsCatalogView, SkillsPreviewView, SkillsStatusView } from './skills-contract.ts';
5
+ export interface Config {
6
+ readonly enabled?: boolean;
7
+ }
8
+ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
9
+ enabled: z<boolean, boolean, "defined">;
10
+ }>>, Schemastery.ObjectT<NoInfer<{
11
+ enabled: z<boolean, boolean, "defined">;
12
+ }>>, "plain">;
13
+ declare module '@deepseek-ai/cordis' {
14
+ interface Context {
15
+ multiRootSkills: MultiRootSkills;
16
+ }
17
+ }
18
+ /** Assembly owner; discovery is installed only after native services arrive. */
19
+ export declare class MultiRootSkills extends Service {
20
+ private readonly settingsConfig;
21
+ static Config: z<Schemastery.ObjectS<NoInfer<{
22
+ enabled: z<boolean, boolean, "defined">;
23
+ }>>, Schemastery.ObjectT<NoInfer<{
24
+ enabled: z<boolean, boolean, "defined">;
25
+ }>>, "plain">;
26
+ static provide: string;
27
+ static inject: string[];
28
+ constructor(ctx: Context, settingsConfig?: Config);
29
+ private settingsRead;
30
+ private revision;
31
+ private catalog;
32
+ private readonly changed;
33
+ private closing;
34
+ get generation(): number;
35
+ invalidate(): void;
36
+ private status;
37
+ listSession(sessionId: string, signal?: AbortSignal): Promise<SkillsCatalogView>;
38
+ previewSession(sessionId: string, name: string, signal?: AbortSignal): Promise<SkillsPreviewView>;
39
+ changes(sessionId: string, generation: number, signal?: AbortSignal): Promise<SkillsStatusView>;
40
+ protected [Service.init](): Promise<void>;
41
+ get enabled(): boolean;
42
+ }
43
+ export default MultiRootSkills;
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.9",
4
+ "version": "0.1.11",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/types/index.d.ts",
@@ -70,6 +70,10 @@
70
70
  "./auto-review": {
71
71
  "types": "./lib/types/auto-review/entry.d.ts",
72
72
  "default": "./lib/auto-review.js"
73
+ },
74
+ "./skills": {
75
+ "types": "./lib/types/skills.d.ts",
76
+ "default": "./lib/skills.js"
73
77
  }
74
78
  },
75
79
  "files": [
@@ -101,29 +105,34 @@
101
105
  },
102
106
  "license": "MIT",
103
107
  "peerDependencies": {
104
- "@deepseek-ai/cordis": ">=4.0.1 <5.0.0 || 4.0.5-alpha.1 || 4.0.5-alpha.2",
105
- "@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",
106
- "@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",
107
- "@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",
108
- "@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",
109
- "@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",
110
- "@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",
111
- "@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",
112
- "@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",
113
- "@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",
114
- "@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",
115
- "@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",
116
- "@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",
117
- "@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",
118
- "@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",
119
- "@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",
120
- "@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",
121
- "@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",
122
- "@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",
123
- "@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",
124
- "@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",
125
- "@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",
126
- "@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"
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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.2-alpha.2"
127
136
  },
128
137
  "peerDependenciesMeta": {
129
138
  "@deepseek-ai/dsh-agent": {
@@ -173,51 +182,66 @@
173
182
  },
174
183
  "@deepseek-ai/dsh-util-values": {
175
184
  "optional": true
185
+ },
186
+ "@deepseek-ai/dsh-skill": {
187
+ "optional": true
188
+ },
189
+ "@deepseek-ai/dsh-skill-filesystem": {
190
+ "optional": true
191
+ },
192
+ "@deepseek-ai/dsh-settings": {
193
+ "optional": true
194
+ },
195
+ "@deepseek-ai/dsh-api-session-controller": {
196
+ "optional": true
197
+ },
198
+ "@deepseek-ai/dsh-session-query": {
199
+ "optional": true
176
200
  }
177
201
  },
178
202
  "devDependencies": {
179
- "@deepseek-ai/cordis": "4.0.5",
180
- "@deepseek-ai/dsh": "0.2.1-rc.2",
181
- "@deepseek-ai/dsh-agent": "0.2.1-rc.2",
182
- "@deepseek-ai/dsh-agent-instructions": "0.2.1-rc.2",
183
- "@deepseek-ai/dsh-api-remotes": "0.2.1-rc.2",
184
- "@deepseek-ai/dsh-api-workspace-files": "0.2.1-rc.2",
185
- "@deepseek-ai/dsh-app-boot": "0.2.1-rc.2",
186
- "@deepseek-ai/dsh-base": "0.2.1-rc.2",
187
- "@deepseek-ai/dsh-client-connection": "0.2.1-rc.2",
188
- "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
189
- "@deepseek-ai/dsh-client-store": "0.2.1-rc.2",
190
- "@deepseek-ai/dsh-client-ui-dockkit": "0.2.1-rc.2",
191
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
192
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
193
- "@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
194
- "@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.2",
195
- "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
196
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.2",
197
- "@deepseek-ai/dsh-commands": "0.2.1-rc.2",
198
- "@deepseek-ai/dsh-fs": "0.2.1-rc.2",
199
- "@deepseek-ai/dsh-fs-local": "0.2.1-rc.2",
200
- "@deepseek-ai/dsh-fs-sandbox": "0.2.1-rc.2",
201
- "@deepseek-ai/dsh-host-open-in-app": "0.2.1-rc.2",
202
- "@deepseek-ai/dsh-llm": "0.2.1-rc.2",
203
- "@deepseek-ai/dsh-lsp": "0.2.1-rc.2",
204
- "@deepseek-ai/dsh-lsp-stdio": "0.2.1-rc.2",
205
- "@deepseek-ai/dsh-sandbox": "0.2.1-rc.2",
206
- "@deepseek-ai/dsh-sandbox-local": "0.2.1-rc.2",
207
- "@deepseek-ai/dsh-sandbox-policy": "0.2.1-rc.2",
208
- "@deepseek-ai/dsh-sandbox-windows-acl": "0.2.1-rc.2",
209
- "@deepseek-ai/dsh-session": "0.2.1-rc.2",
210
- "@deepseek-ai/dsh-session-projection": "0.2.1-rc.2",
211
- "@deepseek-ai/dsh-storage": "0.2.1-rc.2",
212
- "@deepseek-ai/dsh-storage-domain": "0.2.1-rc.2",
213
- "@deepseek-ai/dsh-storage-json": "0.2.1-rc.2",
214
- "@deepseek-ai/dsh-subprocess": "0.2.1-rc.2",
215
- "@deepseek-ai/dsh-subprocess-local": "0.2.1-rc.2",
216
- "@deepseek-ai/dsh-system-prompt": "0.2.1-rc.2",
217
- "@deepseek-ai/dsh-tools": "0.2.1-rc.2",
218
- "@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.2",
219
- "@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.2",
220
- "@deepseek-ai/dsh-workspace": "0.2.1-rc.2",
203
+ "@deepseek-ai/cordis": "4.0.6-alpha.1",
204
+ "@deepseek-ai/dsh": "0.2.2-alpha.2",
205
+ "@deepseek-ai/dsh-agent": "0.2.2-alpha.2",
206
+ "@deepseek-ai/dsh-agent-instructions": "0.2.2-alpha.2",
207
+ "@deepseek-ai/dsh-api-remotes": "0.2.2-alpha.2",
208
+ "@deepseek-ai/dsh-api-workspace-files": "0.2.2-alpha.2",
209
+ "@deepseek-ai/dsh-app-boot": "0.2.2-alpha.2",
210
+ "@deepseek-ai/dsh-base": "0.2.2-alpha.2",
211
+ "@deepseek-ai/dsh-client-connection": "0.2.2-alpha.2",
212
+ "@deepseek-ai/dsh-client-locale": "0.2.2-alpha.2",
213
+ "@deepseek-ai/dsh-client-store": "0.2.2-alpha.2",
214
+ "@deepseek-ai/dsh-client-ui-dockkit": "0.2.2-alpha.2",
215
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.2-alpha.2",
216
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.2-alpha.2",
217
+ "@deepseek-ai/dsh-client-ui-session": "0.2.2-alpha.2",
218
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.2-alpha.2",
219
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.2-alpha.2",
220
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.2-alpha.2",
221
+ "@deepseek-ai/dsh-commands": "0.2.2-alpha.2",
222
+ "@deepseek-ai/dsh-fs": "0.2.2-alpha.2",
223
+ "@deepseek-ai/dsh-fs-local": "0.2.2-alpha.2",
224
+ "@deepseek-ai/dsh-fs-sandbox": "0.2.2-alpha.2",
225
+ "@deepseek-ai/dsh-host-open-in-app": "0.2.2-alpha.2",
226
+ "@deepseek-ai/dsh-llm": "0.2.2-alpha.2",
227
+ "@deepseek-ai/dsh-lsp": "0.2.2-alpha.2",
228
+ "@deepseek-ai/dsh-lsp-stdio": "0.2.2-alpha.2",
229
+ "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2",
230
+ "@deepseek-ai/dsh-sandbox-local": "0.2.2-alpha.2",
231
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.2-alpha.2",
232
+ "@deepseek-ai/dsh-sandbox-windows-acl": "0.2.2-alpha.2",
233
+ "@deepseek-ai/dsh-session": "0.2.2-alpha.2",
234
+ "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2",
235
+ "@deepseek-ai/dsh-storage": "0.2.2-alpha.2",
236
+ "@deepseek-ai/dsh-storage-domain": "0.2.2-alpha.2",
237
+ "@deepseek-ai/dsh-storage-json": "0.2.2-alpha.2",
238
+ "@deepseek-ai/dsh-subprocess": "0.2.2-alpha.2",
239
+ "@deepseek-ai/dsh-subprocess-local": "0.2.2-alpha.2",
240
+ "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2",
241
+ "@deepseek-ai/dsh-tools": "0.2.2-alpha.2",
242
+ "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2",
243
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.2-alpha.2",
244
+ "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2",
221
245
  "@testing-library/react": "^16.3.3",
222
246
  "@types/node": "^22.0.0",
223
247
  "@types/react": "~18.3.31",
@@ -233,24 +257,12 @@
233
257
  "vitest": "^4.1.8",
234
258
  "yaml": "^2.9.0",
235
259
  "zustand": "~4.5.7",
236
- "@deepseek-ai/dsh-agent-loop": "0.2.1-rc.2",
237
- "@deepseek-ai/dsh-agent-loop-testkit": "0.2.1-rc.2",
238
- "@deepseek-ai/dsh-bash-sandbox": "0.2.1-rc.2",
239
- "@deepseek-ai/dsh-compaction": "0.2.1-rc.2",
240
- "@deepseek-ai/dsh-fs-observation-policy": "0.2.1-rc.2",
241
- "@deepseek-ai/dsh-llm-deepseek": "0.2.1-rc.2",
242
- "@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.1-rc.2",
243
- "@deepseek-ai/dsh-permission-presets": "0.2.1-rc.2",
244
- "@deepseek-ai/dsh-ptc-runtime-node": "0.2.1-rc.2",
245
- "@deepseek-ai/dsh-shell": "0.2.1-rc.2",
246
- "@deepseek-ai/dsh-shell-env": "0.2.1-rc.2",
247
- "@deepseek-ai/dsh-subagent": "0.2.1-rc.2",
248
- "@deepseek-ai/dsh-tool-bash": "0.2.1-rc.2",
249
- "@deepseek-ai/dsh-tool-fs": "0.2.1-rc.2",
250
- "@deepseek-ai/dsh-tool-subagent": "0.2.1-rc.2",
251
- "@deepseek-ai/dsh-user-approval": "0.2.1-rc.2",
252
- "@deepseek-ai/dsh-working-directory": "0.2.1-rc.2",
253
- "@deepseek-ai/dsh-util-values": "0.2.1-rc.2"
260
+ "@deepseek-ai/dsh-skill": "0.2.2-alpha.2",
261
+ "@deepseek-ai/dsh-skill-filesystem": "0.2.2-alpha.2",
262
+ "@deepseek-ai/dsh-settings": "0.2.2-alpha.2",
263
+ "@deepseek-ai/dsh-api-session-controller": "0.2.2-alpha.2",
264
+ "@deepseek-ai/dsh-session-query": "0.2.2-alpha.2",
265
+ "@deepseek-ai/dsh-tool-skill": "0.2.2-alpha.2"
254
266
  },
255
267
  "dsh": {
256
268
  "bundle": {
@@ -269,7 +281,8 @@
269
281
  "dependencies": {
270
282
  "@deepseek-ai/node-addon-system": "^0.1.2",
271
283
  "koffi": "^3.1.0",
272
- "zod": "^4.6.2"
284
+ "zod": "^4.6.2",
285
+ "@deepseek-ai/schemastery": "^3.18.2"
273
286
  },
274
287
  "scripts": {
275
288
  "bench:roots": "node --experimental-transform-types scripts/bench-root-scale.mjs",
@@ -1,11 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- /**
3
- * Transient failure banner owned by the control that initiated the gesture,
4
- * so one failed request announces once, from the control the user pressed.
5
- * @returns `toast` owned by the control and `show` to announce one
6
- * failure with resolved copy; announcing again replays the banner.
7
- */
8
- export declare function useOpenFailureToast(): {
9
- toast: ReactNode;
10
- show: (text: string) => void;
11
- };