dsh-code 1.0.4 → 1.0.6

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 (41) hide show
  1. package/README.en.md +287 -286
  2. package/README.md +16 -13
  3. package/bin/deepseek.mjs +336 -11
  4. package/cordis.patch.yml +26 -18
  5. package/lib/index.mjs +1310 -439
  6. package/lib/types/app.d.ts +25 -6
  7. package/lib/types/attachments.d.ts +36 -4
  8. package/lib/types/git-workflow.d.ts +7 -2
  9. package/lib/types/history.d.ts +18 -11
  10. package/lib/types/index.d.ts +11 -2
  11. package/lib/types/presets.d.ts +4 -1
  12. package/lib/types/provider-settings.d.ts +6 -11
  13. package/lib/types/questions.d.ts +16 -12
  14. package/lib/types/render/animations.d.ts +74 -7
  15. package/lib/types/render/export.d.ts +0 -6
  16. package/lib/types/render/fuzzy.d.ts +21 -0
  17. package/lib/types/render/projection.d.ts +47 -5
  18. package/lib/types/session-directory.d.ts +48 -13
  19. package/lib/types/settings-file.d.ts +8 -0
  20. package/lib/types/store.d.ts +3 -0
  21. package/package.json +168 -159
  22. package/src/app.ts +480 -199
  23. package/src/attachments.ts +110 -11
  24. package/src/commands.ts +35 -5
  25. package/src/git-workflow.ts +29 -10
  26. package/src/history.ts +22 -13
  27. package/src/index.ts +1868 -1752
  28. package/src/internals.ts +61 -40
  29. package/src/permissions.ts +1 -1
  30. package/src/presets.ts +19 -6
  31. package/src/provider-settings.ts +12 -12
  32. package/src/questions.ts +57 -74
  33. package/src/render/animations.ts +606 -403
  34. package/src/render/export.ts +20 -10
  35. package/src/render/fuzzy.ts +83 -0
  36. package/src/render/projection.ts +1833 -1620
  37. package/src/session-directory.ts +94 -16
  38. package/src/settings-file.ts +38 -6
  39. package/src/skills.ts +23 -9
  40. package/src/store.ts +39 -1
  41. package/src/subagents.ts +26 -3
@@ -1,5 +1,5 @@
1
1
  /** Lightweight session-directory projection for the /resume picker. */
2
- import type { SessionEvent, SessionHeader } from '@deepseek-ai/dsh-session';
2
+ import { type SessionEvent, type SessionHeader } from '@deepseek-ai/dsh-session';
3
3
  export interface SessionRecord {
4
4
  readonly header: SessionHeader;
5
5
  readonly live: boolean;
@@ -77,23 +77,58 @@ export declare function projectSessionRows(records: readonly SessionRecord[], op
77
77
  export declare function mergeSessionTitles(rows: readonly SessionRow[], observations: readonly TitleObservationResult[]): SessionRow[];
78
78
  /**
79
79
  * Encode a session id the way the JSONL backend does for its on-disk layout
80
- * (`encodeSegment`: safe units literal, everything else `~XXXX`). Used ONLY to
81
- * validate that a `locate()` path really is this session's directory before
82
- * any deletion touches the filesystem — a local copy of the pure upstream
80
+ * (`encodeSegment`: safe units literal, everything else `~XXXX`). Used to
81
+ * validate and derive session directories a local copy of the pure upstream
83
82
  * contract, kept in sync with `session-persistence-jsonl/src/format.ts`.
84
83
  */
85
84
  export declare function encodeSessionSegment(raw: string): string;
86
- /** The session-log artifact names the JSONL backend may create. */
87
- export declare const SESSION_ARTIFACT_NAMES: readonly string[];
88
85
  /**
89
- * Guard one `locate()` artifact path before deletion (codex's scoped-path
90
- * check, adapted to the JSONL layout): the file must be a `session.jsonl`
91
- * artifact sitting in the directory named exactly `encodeSegment(id)`.
92
- * @param artifact - the path the persistence backend located.
93
- * @param id - the session id the artifact claims to belong to.
94
- * @returns the owning session directory, or undefined when the layout is unexpected.
86
+ * Encode a project cwd the way the JSONL backend groups sessions on disk
87
+ * (`projectKey`: separators collapse to one `-`, everything else mirrors
88
+ * `encodeSegment`, bounded to 251 chars). A local copy of the pure upstream
89
+ * contract, kept in sync with `session-persistence-jsonl/src/format.ts`.
90
+ */
91
+ export declare function encodeProjectKey(cwd: string): string;
92
+ /**
93
+ * Derive one session's artifact directory under the JSONL backend root,
94
+ * mirroring the upstream `<root>/<projectKey(cwd)>/<encodeSegment(id)>/`
95
+ * layout (0.1.5 `sessionDir`/`projectDir`).
96
+ * @param root - the JSONL backend's configured session root.
97
+ * @param cwd - the session's pinned working directory, when the header has one.
98
+ * @param id - the session id.
99
+ * @returns the absolute session directory path.
100
+ */
101
+ export declare function sessionDirectoryFor(root: string, cwd: string | undefined, id: string): string;
102
+ /**
103
+ * The canonical session-log artifact filenames the JSONL backend may create:
104
+ * format v0 writes the bare `session.jsonl` name; v1+ write
105
+ * `session.vN.jsonl`, each generation optionally zstd-compressed. Multiple
106
+ * immutable generations may coexist in one session directory (0.1.5). The
107
+ * range follows the installed session package's `SESSION_FORMAT_VERSION`, so
108
+ * a future generation joins the enumeration with the dependency bump.
109
+ */
110
+ export declare function sessionArtifactNames(): readonly string[];
111
+ /** True for one canonical session-log artifact filename the backend may own. */
112
+ export declare function isSessionArtifactName(name: string): boolean;
113
+ /**
114
+ * Guard a derived session directory before deletion (codex's scoped-path
115
+ * check, adapted to the JSONL layout): the directory's base name must be
116
+ * exactly `encodeSegment(id)` beneath its project grouping.
117
+ * @param dir - the derived session artifact directory.
118
+ * @param id - the session id the directory claims to belong to.
119
+ * @returns the guarded directory, or undefined when the layout is unexpected.
120
+ */
121
+ export declare function sessionArtifactDirectory(dir: string, id: string): string | undefined;
122
+ /**
123
+ * The JSONL backend's configured session root, when the mounted backend
124
+ * exposes one. The upstream service contract dropped `locate()` in 0.1.5
125
+ * (artifact paths are backend-private; only refusal diagnostics carry them),
126
+ * so the TUI derives artifact paths from the backend's public plugin config.
127
+ * Backends without a JSONL-style config (or a foreign shape) yield undefined
128
+ * and callers degrade: mtime sorting falls back to createdAt and /delete
129
+ * refuses, exactly as before.
95
130
  */
96
- export declare function sessionArtifactDirectory(artifact: string, id: string): string | undefined;
131
+ export declare function jsonlSessionRoot(persistence: unknown): string | undefined;
97
132
  /**
98
133
  * Collect one session's deletion subtree: the id plus every record whose
99
134
  * parent chain leads to it (codex deletes subagent threads with their root).
@@ -15,6 +15,14 @@
15
15
  *
16
16
  * @module @deepseek-ai/dsh-code/settings-file
17
17
  */
18
+ /**
19
+ * Write one file atomically: create the parent directory, write to a
20
+ * uniquely named temp file, and rename it into place. A crash midway
21
+ * can never leave a half-written document behind. Unique temp names
22
+ * keep concurrent writers (two terminals, two chains in one process)
23
+ * from sharing one temp path.
24
+ */
25
+ export declare function writeFileAtomically(path: string, text: string): Promise<void>;
18
26
  /** The serialized persistence surface; flush() is handed to the quit sequence. */
19
27
  export interface UserSettingsPersistence {
20
28
  /**
@@ -29,6 +29,7 @@
29
29
  *
30
30
  * @module @deepseek-ai/dsh-tui/store
31
31
  */
32
+ import type { AssistantStreamFrame } from '@deepseek-ai/dsh-agent';
32
33
  import type { SessionEvent } from '@deepseek-ai/dsh-session';
33
34
  import { type TranscriptView } from './render/projection.ts';
34
35
  /** The externally readable, event-fed transcript store for one session. */
@@ -39,6 +40,8 @@ export interface TranscriptStore {
39
40
  subscribe(listener: () => void): () => void;
40
41
  /** Fold one session event; ignored events change nothing and notify nobody. */
41
42
  apply(event: SessionEvent): void;
43
+ /** Fold one live assistant-stream frame; frames without visible deltas stay silent. */
44
+ applyStreamFrame(frame: AssistantStreamFrame): void;
42
45
  /** Drop the folded view entirely (/clear): the next event starts a fresh one. */
43
46
  reset(): void;
44
47
  }
package/package.json CHANGED
@@ -1,159 +1,168 @@
1
- {
2
- "name": "dsh-code",
3
- "description": "DeepSeek Harness CLI core bundle: interactive coding terminal, durable sessions, and model management for dsh --profile cli",
4
- "version": "1.0.4",
5
- "type": "module",
6
- "bin": {
7
- "deepseek": "./bin/deepseek.mjs",
8
- "dsh-code": "./bin/deepseek.mjs"
9
- },
10
- "main": "lib/index.mjs",
11
- "types": "lib/types/index.d.ts",
12
- "exports": {
13
- ".": {
14
- "types": "./lib/types/index.d.ts",
15
- "default": "./lib/index.mjs"
16
- },
17
- "./startup": {
18
- "types": "./lib/types/startup.d.ts",
19
- "default": "./lib/startup.mjs"
20
- },
21
- "./invariant": {
22
- "types": "./lib/types/invariant.d.ts",
23
- "default": "./lib/invariant.mjs"
24
- },
25
- "./cordis.patch.yml": "./cordis.patch.yml",
26
- "./src/*": "./src/*",
27
- "./package.json": "./package.json"
28
- },
29
- "files": [
30
- "lib",
31
- "cordis.patch.yml",
32
- "src"
33
- ],
34
- "license": "MIT",
35
- "keywords": [
36
- "deepseek",
37
- "dsh",
38
- "deepseek-harness",
39
- "tui",
40
- "terminal",
41
- "claude-code",
42
- "agent",
43
- "ink"
44
- ],
45
- "repository": {
46
- "type": "git",
47
- "url": "git+https://github.com/unlinearity/dsh-code.git"
48
- },
49
- "dsh": {
50
- "bundle": {
51
- "patch": "./cordis.patch.yml"
52
- }
53
- },
54
- "scripts": {
55
- "build": "tsdown && tsc -p tsconfig.json",
56
- "test": "vitest run",
57
- "typecheck": "tsc -p tsconfig.json --noEmit",
58
- "gen:whale": "tsx scripts/gen-whale-glyph.ts",
59
- "prepare": "pnpm build",
60
- "prepublishOnly": "pnpm typecheck && pnpm test && pnpm build"
61
- },
62
- "engines": {
63
- "node": "^22.19 || >=24"
64
- },
65
- "dependencies": {
66
- "@deepseek-ai/dsh-authorization": "0.1.1-rc.2",
67
- "@deepseek-ai/dsh-web-fetch-http": "0.1.1-rc.2",
68
- "@deepseek-ai/schemastery": "^3.18.1",
69
- "chalk": "^5.6.2",
70
- "commander": "^15.0.0",
71
- "ink": "^5.2.1",
72
- "react": "^18.3.1"
73
- },
74
- "peerDependencies": {
75
- "@deepseek-ai/cordis": "^4.0.1",
76
- "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
77
- "@deepseek-ai/dsh-attachment": "0.1.1-rc.2",
78
- "@deepseek-ai/dsh-agent": "0.1.1-rc.2",
79
- "@deepseek-ai/dsh-agent-default-model": "0.1.1-rc.2",
80
- "@deepseek-ai/dsh-agent-presets": "0.1.1-rc.2",
81
- "@deepseek-ai/dsh-cmdline": "0.1.1-rc.2",
82
- "@deepseek-ai/dsh-code-runtime-worker-thread": "0.1.1-rc.2",
83
- "@deepseek-ai/dsh-commands": "0.1.1-rc.2",
84
- "@deepseek-ai/dsh-compaction": "0.1.1-rc.2",
85
- "@deepseek-ai/dsh-cordis-host-runner": "0.1.1-rc.2",
86
- "@deepseek-ai/dsh-credentials": "0.1.1-rc.2",
87
- "@deepseek-ai/dsh-file-reference-local": "0.1.1-rc.2",
88
- "@deepseek-ai/dsh-goal": "0.1.1-rc.2",
89
- "@deepseek-ai/dsh-invariants": "0.1.1-rc.2",
90
- "@deepseek-ai/dsh-jobs": "0.1.1-rc.2",
91
- "@deepseek-ai/dsh-llm": "0.1.1-rc.2",
92
- "@deepseek-ai/dsh-llm-retry": "0.1.1-rc.2",
93
- "@deepseek-ai/dsh-permission-presets": "0.1.1-rc.2",
94
- "@deepseek-ai/dsh-plan-mode": "0.1.1-rc.2",
95
- "@deepseek-ai/dsh-sandbox-policy": "0.1.1-rc.2",
96
- "@deepseek-ai/dsh-session": "0.1.1-rc.2",
97
- "@deepseek-ai/dsh-session-persistence": "0.1.1-rc.2",
98
- "@deepseek-ai/dsh-session-reference": "0.1.1-rc.2",
99
- "@deepseek-ai/dsh-session-title": "0.1.1-rc.2",
100
- "@deepseek-ai/dsh-skill": "0.1.1-rc.2",
101
- "@deepseek-ai/dsh-user-approval": "0.1.1-rc.2",
102
- "@deepseek-ai/dsh-user-questions": "0.1.1-rc.2"
103
- },
104
- "peerDependenciesMeta": {
105
- "@deepseek-ai/cordis": { "optional": true },
106
- "@deepseek-ai/cordis-plugin-loader": { "optional": true },
107
- "@deepseek-ai/dsh-agent": { "optional": true },
108
- "@deepseek-ai/dsh-attachment": { "optional": true },
109
- "@deepseek-ai/dsh-agent-default-model": { "optional": true },
110
- "@deepseek-ai/dsh-agent-presets": { "optional": true },
111
- "@deepseek-ai/dsh-cmdline": { "optional": true },
112
- "@deepseek-ai/dsh-cordis-host-runner": { "optional": true },
113
- "@deepseek-ai/dsh-credentials": { "optional": true },
114
- "@deepseek-ai/dsh-file-reference-local": { "optional": true },
115
- "@deepseek-ai/dsh-code-runtime-worker-thread": { "optional": true },
116
- "@deepseek-ai/dsh-commands": { "optional": true },
117
- "@deepseek-ai/dsh-compaction": { "optional": true },
118
- "@deepseek-ai/dsh-goal": { "optional": true },
119
- "@deepseek-ai/dsh-invariants": { "optional": true },
120
- "@deepseek-ai/dsh-jobs": { "optional": true },
121
- "@deepseek-ai/dsh-llm": { "optional": true },
122
- "@deepseek-ai/dsh-llm-retry": { "optional": true },
123
- "@deepseek-ai/dsh-permission-presets": { "optional": true },
124
- "@deepseek-ai/dsh-plan-mode": { "optional": true },
125
- "@deepseek-ai/dsh-sandbox-policy": { "optional": true },
126
- "@deepseek-ai/dsh-session": { "optional": true },
127
- "@deepseek-ai/dsh-session-persistence": { "optional": true },
128
- "@deepseek-ai/dsh-session-reference": { "optional": true },
129
- "@deepseek-ai/dsh-session-title": { "optional": true },
130
- "@deepseek-ai/dsh-skill": { "optional": true },
131
- "@deepseek-ai/dsh-user-approval": { "optional": true },
132
- "@deepseek-ai/dsh-user-questions": { "optional": true }
133
- },
134
- "devDependencies": {
135
- "@deepseek-ai/dsh-agent-presets": "0.1.1-rc.2",
136
- "@deepseek-ai/dsh-attachment": "0.1.1-rc.2",
137
- "@deepseek-ai/dsh-compaction": "0.1.1-rc.2",
138
- "@deepseek-ai/dsh-commands": "0.1.1-rc.2",
139
- "@deepseek-ai/dsh-credentials": "0.1.1-rc.2",
140
- "@deepseek-ai/dsh-goal": "0.1.1-rc.2",
141
- "@deepseek-ai/dsh-jobs": "0.1.1-rc.2",
142
- "@deepseek-ai/dsh-llm-retry": "0.1.1-rc.2",
143
- "@deepseek-ai/dsh-permission-presets": "0.1.1-rc.2",
144
- "@deepseek-ai/dsh-plan-mode": "0.1.1-rc.2",
145
- "@deepseek-ai/dsh-sandbox-policy": "0.1.1-rc.2",
146
- "@deepseek-ai/dsh-session-persistence": "0.1.1-rc.2",
147
- "@deepseek-ai/dsh-session-reference": "0.1.1-rc.2",
148
- "@deepseek-ai/dsh-session-title": "0.1.1-rc.2",
149
- "@deepseek-ai/dsh-skill": "0.1.1-rc.2",
150
- "@deepseek-ai/dsh-user-approval": "0.1.1-rc.2",
151
- "@deepseek-ai/dsh-user-questions": "0.1.1-rc.2",
152
- "@types/node": "^24.0.0",
153
- "@types/react": "~18.3.1",
154
- "tsdown": "^0.22.2",
155
- "tsx": "^4.22.4",
156
- "typescript": "^5.9.0",
157
- "vitest": "^3.0.0"
158
- }
159
- }
1
+ {
2
+ "name": "dsh-code",
3
+ "description": "DeepSeek Harness CLI core bundle: interactive coding terminal, durable sessions, and model management for dsh --profile cli",
4
+ "version": "1.0.6",
5
+ "type": "module",
6
+ "bin": {
7
+ "deepseek": "./bin/deepseek.mjs",
8
+ "dsh-code": "./bin/deepseek.mjs"
9
+ },
10
+ "main": "lib/index.mjs",
11
+ "types": "lib/types/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./lib/types/index.d.ts",
15
+ "default": "./lib/index.mjs"
16
+ },
17
+ "./startup": {
18
+ "types": "./lib/types/startup.d.ts",
19
+ "default": "./lib/startup.mjs"
20
+ },
21
+ "./invariant": {
22
+ "types": "./lib/types/invariant.d.ts",
23
+ "default": "./lib/invariant.mjs"
24
+ },
25
+ "./cordis.patch.yml": "./cordis.patch.yml",
26
+ "./src/*": "./src/*",
27
+ "./package.json": "./package.json"
28
+ },
29
+ "files": [
30
+ "lib",
31
+ "cordis.patch.yml",
32
+ "src"
33
+ ],
34
+ "license": "MIT",
35
+ "keywords": [
36
+ "deepseek",
37
+ "dsh",
38
+ "deepseek-harness",
39
+ "tui",
40
+ "terminal",
41
+ "claude-code",
42
+ "agent",
43
+ "ink"
44
+ ],
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/unlinearity/dsh-code.git"
48
+ },
49
+ "dsh": {
50
+ "bundle": {
51
+ "patch": "./cordis.patch.yml"
52
+ }
53
+ },
54
+ "scripts": {
55
+ "build": "tsdown && tsc -p tsconfig.json",
56
+ "test": "vitest run",
57
+ "typecheck": "tsc -p tsconfig.json --noEmit",
58
+ "gen:whale": "tsx scripts/gen-whale-glyph.ts",
59
+ "prepare": "pnpm build",
60
+ "prepublishOnly": "pnpm typecheck && pnpm test && pnpm build"
61
+ },
62
+ "engines": {
63
+ "node": "^22.19 || >=24"
64
+ },
65
+ "dependencies": {
66
+ "@deepseek-ai/dsh-authorization": "0.1.5-rc.1",
67
+ "@deepseek-ai/dsh-web-fetch-http": "0.1.5-rc.1",
68
+ "@deepseek-ai/dsh-util-values": "0.1.5-rc.1",
69
+ "@deepseek-ai/schemastery": "^3.18.2",
70
+ "chalk": "^5.6.2",
71
+ "commander": "^15.0.0",
72
+ "ink": "^5.2.1",
73
+ "react": "^18.3.1"
74
+ },
75
+ "peerDependencies": {
76
+ "@deepseek-ai/cordis": "^4.0.2",
77
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
78
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
79
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
80
+ "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.1",
81
+ "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
82
+ "@deepseek-ai/dsh-cmdline": "0.1.5-rc.1",
83
+ "@deepseek-ai/dsh-code-runtime-worker-thread": "0.1.5-rc.1",
84
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
85
+ "@deepseek-ai/dsh-compaction": "0.1.5-rc.1",
86
+ "@deepseek-ai/dsh-cordis-host-runner": "0.1.5-rc.1",
87
+ "@deepseek-ai/dsh-credentials": "0.1.5-rc.1",
88
+ "@deepseek-ai/dsh-file-reference-local": "0.1.5-rc.1",
89
+ "@deepseek-ai/dsh-goal": "0.1.5-rc.1",
90
+ "@deepseek-ai/dsh-invariants": "0.1.5-rc.1",
91
+ "@deepseek-ai/dsh-jobs": "0.1.5-rc.1",
92
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
93
+ "@deepseek-ai/dsh-llm-retry": "0.1.5-rc.1",
94
+ "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.1",
95
+ "@deepseek-ai/dsh-plan-mode": "0.1.5-rc.1",
96
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
97
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1",
98
+ "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.1",
99
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.1",
100
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
101
+ "@deepseek-ai/dsh-session-reference": "0.1.5-rc.1",
102
+ "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
103
+ "@deepseek-ai/dsh-skill": "0.1.5-rc.1",
104
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
105
+ "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1"
106
+ },
107
+ "peerDependenciesMeta": {
108
+ "@deepseek-ai/cordis": { "optional": true },
109
+ "@deepseek-ai/cordis-plugin-loader": { "optional": true },
110
+ "@deepseek-ai/dsh-agent": { "optional": true },
111
+ "@deepseek-ai/dsh-attachment": { "optional": true },
112
+ "@deepseek-ai/dsh-agent-default-model": { "optional": true },
113
+ "@deepseek-ai/dsh-agent-presets": { "optional": true },
114
+ "@deepseek-ai/dsh-cmdline": { "optional": true },
115
+ "@deepseek-ai/dsh-cordis-host-runner": { "optional": true },
116
+ "@deepseek-ai/dsh-credentials": { "optional": true },
117
+ "@deepseek-ai/dsh-file-reference-local": { "optional": true },
118
+ "@deepseek-ai/dsh-code-runtime-worker-thread": { "optional": true },
119
+ "@deepseek-ai/dsh-commands": { "optional": true },
120
+ "@deepseek-ai/dsh-compaction": { "optional": true },
121
+ "@deepseek-ai/dsh-goal": { "optional": true },
122
+ "@deepseek-ai/dsh-invariants": { "optional": true },
123
+ "@deepseek-ai/dsh-jobs": { "optional": true },
124
+ "@deepseek-ai/dsh-llm": { "optional": true },
125
+ "@deepseek-ai/dsh-llm-retry": { "optional": true },
126
+ "@deepseek-ai/dsh-permission-presets": { "optional": true },
127
+ "@deepseek-ai/dsh-plan-mode": { "optional": true },
128
+ "@deepseek-ai/dsh-sandbox-policy": { "optional": true },
129
+ "@deepseek-ai/dsh-session": { "optional": true },
130
+ "@deepseek-ai/dsh-session-persistence": { "optional": true },
131
+ "@deepseek-ai/dsh-session-persistence-jsonl": { "optional": true },
132
+ "@deepseek-ai/dsh-subagent": { "optional": true },
133
+ "@deepseek-ai/dsh-session-reference": { "optional": true },
134
+ "@deepseek-ai/dsh-session-title": { "optional": true },
135
+ "@deepseek-ai/dsh-skill": { "optional": true },
136
+ "@deepseek-ai/dsh-user-approval": { "optional": true },
137
+ "@deepseek-ai/dsh-user-questions": { "optional": true }
138
+ },
139
+ "devDependencies": {
140
+ "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
141
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
142
+ "@deepseek-ai/dsh-compaction": "0.1.5-rc.1",
143
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
144
+ "@deepseek-ai/dsh-credentials": "0.1.5-rc.1",
145
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
146
+ "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.1",
147
+ "@deepseek-ai/dsh-goal": "0.1.5-rc.1",
148
+ "@deepseek-ai/dsh-jobs": "0.1.5-rc.1",
149
+ "@deepseek-ai/dsh-llm-retry": "0.1.5-rc.1",
150
+ "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.1",
151
+ "@deepseek-ai/dsh-plan-mode": "0.1.5-rc.1",
152
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
153
+ "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.1",
154
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.1",
155
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
156
+ "@deepseek-ai/dsh-session-reference": "0.1.5-rc.1",
157
+ "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
158
+ "@deepseek-ai/dsh-skill": "0.1.5-rc.1",
159
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
160
+ "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1",
161
+ "@types/node": "^24.0.0",
162
+ "@types/react": "~18.3.1",
163
+ "tsdown": "^0.22.2",
164
+ "tsx": "^4.22.4",
165
+ "typescript": "^5.9.0",
166
+ "vitest": "^3.0.0"
167
+ }
168
+ }