dsh-code 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +21 -13
- package/README.md +285 -271
- package/bin/deepseek.mjs +26 -3
- package/lib/index.mjs +2962 -1560
- package/lib/types/app.d.ts +13 -2
- package/lib/types/commands.d.ts +13 -0
- package/lib/types/editor-keys.d.ts +105 -0
- package/lib/types/git-workflow.d.ts +6 -2
- package/lib/types/index.d.ts +28 -0
- package/lib/types/input-split.d.ts +54 -0
- package/lib/types/kernel-panels.d.ts +3 -1
- package/lib/types/keyboard.d.ts +8 -0
- package/lib/types/model-capabilities.d.ts +82 -0
- package/lib/types/provider-settings.d.ts +84 -0
- package/lib/types/render/lines.d.ts +25 -0
- package/lib/types/render/markdown.d.ts +1 -1
- package/lib/types/render/projection.d.ts +22 -2
- package/lib/types/render/status.d.ts +22 -15
- package/lib/types/render/text.d.ts +15 -9
- package/lib/types/render/width.d.ts +29 -0
- package/lib/types/session-directory.d.ts +27 -0
- package/lib/types/settings-file.d.ts +33 -0
- package/lib/types/skills.d.ts +1 -1
- package/lib/types/store.d.ts +10 -0
- package/lib/types/subagents.d.ts +13 -3
- package/package.json +159 -159
- package/src/app.ts +4514 -3892
- package/src/approval.ts +8 -3
- package/src/authorization-panel.ts +2 -4
- package/src/commands.ts +27 -3
- package/src/editor-keys.ts +371 -0
- package/src/git-workflow.ts +10 -6
- package/src/index.ts +1752 -1523
- package/src/input-split.ts +191 -0
- package/src/internals.ts +26 -8
- package/src/kernel-panels.ts +26 -10
- package/src/keyboard.ts +123 -88
- package/src/mentions.ts +42 -9
- package/src/model-capabilities.ts +318 -0
- package/src/provider-settings.ts +220 -0
- package/src/questions.ts +20 -0
- package/src/render/lines.ts +415 -356
- package/src/render/markdown.ts +18 -19
- package/src/render/projection.ts +162 -52
- package/src/render/status.ts +76 -71
- package/src/render/text.ts +158 -150
- package/src/render/width.ts +189 -0
- package/src/session-directory.ts +56 -0
- package/src/settings-file.ts +56 -0
- package/src/skills.ts +19 -6
- package/src/store.ts +26 -7
- package/src/subagents.ts +39 -6
- package/src/theme-panel.ts +79 -72
|
@@ -25,8 +25,8 @@ export declare function singleLineText(text: string): string;
|
|
|
25
25
|
/**
|
|
26
26
|
* Truncate one display-safe row without ever exceeding its physical-column
|
|
27
27
|
* budget. The ellipsis is included inside the budget, matching Codex's popup
|
|
28
|
-
* truncation contract; the
|
|
29
|
-
*
|
|
28
|
+
* truncation contract; the cut walks grapheme clusters so emoji and
|
|
29
|
+
* combining sequences never split mid-cluster.
|
|
30
30
|
*/
|
|
31
31
|
export declare function truncateColumns(text: string, columns: number): string;
|
|
32
32
|
/** A display-safe suffix bounded by terminal rows and columns. */
|
|
@@ -37,13 +37,19 @@ export interface DisplayTail {
|
|
|
37
37
|
truncated: boolean;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Keep
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
40
|
+
* Keep the newest display-safe text that fits a terminal rectangle, wrapping
|
|
41
|
+
* FORWARD from the start of the text and slicing the tail rows.
|
|
42
|
+
*
|
|
43
|
+
* Forward wrapping is what keeps a streaming tail calm: rows already produced
|
|
44
|
+
* never re-wrap as tokens append (a backward scan recomputes every wrap point
|
|
45
|
+
* per chunk and the whole visible block jumps), and the wrap rules match the
|
|
46
|
+
* settled text's renderer so the flush at turn end does not reflow the block
|
|
47
|
+
* a second time. CJK kinsoku applies at both edges: closing punctuation
|
|
48
|
+
* overhangs up to two cells onto the filled row instead of starting the next
|
|
49
|
+
* one (within the caret column the caller reserves), and opening punctuation
|
|
50
|
+
* moves down instead of dangling at a row end. Tabs expand to two spaces so
|
|
51
|
+
* terminal tab stops cannot inflate the physical row count; clusters carry
|
|
52
|
+
* emoji presentation and combining marks whole.
|
|
47
53
|
* @param text - raw externally sourced text.
|
|
48
54
|
* @param columns - available terminal columns.
|
|
49
55
|
* @param rows - available terminal rows.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Precise terminal-cell width measurement — the single authority every
|
|
3
|
+
* budget, wrap, and truncation path shares. The previous heuristic
|
|
4
|
+
* (`codePoint > 0x2e7f ? 2 : 1)) mis-sized Hangul Jamo (narrow), high
|
|
5
|
+
* non-CJK code points (wide), and emoji: text-default glyphs like ✳ ⚠ ❤
|
|
6
|
+
* counted 2 while terminals draw 1, and VS16 sequences counted 1 while
|
|
7
|
+
* terminals draw 2 — the exact drift class the community dsh-TUI string
|
|
8
|
+
* engine documents (a spinner glyph drifting one column per frame). This
|
|
9
|
+
* module adapts that engine's rules without its Ink-fork renderer: an ASCII
|
|
10
|
+
* fast path, grapheme-cluster iteration via Intl.Segmenter (code-point
|
|
11
|
+
* fallback), a merged East-Asian-Wide/Fullwidth + Emoji_Presentation range
|
|
12
|
+
* table, text-default emoji = 1, VS16 = 2, marks/selectors/ZWJ = 0.
|
|
13
|
+
* @module @deepseek-ai/dsh-code/render/width
|
|
14
|
+
*/
|
|
15
|
+
/** Split text into grapheme clusters (code points when Segmenter is absent). */
|
|
16
|
+
export declare function splitGraphemes(text: string): string[];
|
|
17
|
+
/** Terminal-cell width of one grapheme cluster. */
|
|
18
|
+
export declare function graphemeWidth(cluster: string): number;
|
|
19
|
+
/** Terminal-cell width of one code point (surrogate pairs must stay paired). */
|
|
20
|
+
export declare function codePointWidth(char: string): number;
|
|
21
|
+
/**
|
|
22
|
+
* Terminal-cell width of a string: an ASCII fast path avoids the segmenter
|
|
23
|
+
* for the overwhelmingly common case; everything else sums grapheme clusters.
|
|
24
|
+
* Control characters occupy no cells (display sanitization makes them
|
|
25
|
+
* visible escapes before they ever reach a budget).
|
|
26
|
+
* @param text - display-safe or raw text to measure.
|
|
27
|
+
* @returns the column count the terminal will draw.
|
|
28
|
+
*/
|
|
29
|
+
export declare function stringWidth(text: string): number;
|
|
@@ -102,6 +102,33 @@ export declare function sessionArtifactDirectory(artifact: string, id: string):
|
|
|
102
102
|
* @returns the ids to delete, root first.
|
|
103
103
|
*/
|
|
104
104
|
export declare function collectDeletionSubtree(records: readonly SessionRecord[], id: string): string[];
|
|
105
|
+
/** One validated node of a deletion plan. */
|
|
106
|
+
export interface DeletionPlanNode {
|
|
107
|
+
/** Session id to remove. */
|
|
108
|
+
readonly id: string;
|
|
109
|
+
/** Distance from the deletion root (0 for the root itself). */
|
|
110
|
+
readonly depth: number;
|
|
111
|
+
}
|
|
112
|
+
/** A fully preflighted subtree deletion, or the refusal that produced none. */
|
|
113
|
+
export type SessionDeletionPlan = {
|
|
114
|
+
readonly ok: true;
|
|
115
|
+
readonly nodes: readonly DeletionPlanNode[];
|
|
116
|
+
} | {
|
|
117
|
+
readonly ok: false;
|
|
118
|
+
readonly reason: string;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Plan one session-subtree deletion with NO filesystem side effects: collect
|
|
122
|
+
* the doomed lineage, refuse when the root or ANY member is live (a live
|
|
123
|
+
* child would outlive its deleted parent) or missing from the listing, and
|
|
124
|
+
* order the result children-first so the executor can never leave a deleted
|
|
125
|
+
* parent behind surviving children. Artifact-location guards stay at the
|
|
126
|
+
* call site; this is the pure preflight they complete.
|
|
127
|
+
* @param records - the full directory listing.
|
|
128
|
+
* @param id - the root session id to delete.
|
|
129
|
+
* @returns the ordered plan, or a user-facing refusal reason.
|
|
130
|
+
*/
|
|
131
|
+
export declare function planSessionDeletion(records: readonly SessionRecord[], id: string): SessionDeletionPlan;
|
|
105
132
|
/**
|
|
106
133
|
* Codex-style relative time for session rows ("now", "5m ago", "3h ago",
|
|
107
134
|
* "2d ago"; older than a week falls back to the local date).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialized, crash-atomic persistence for the small user-level JSON files
|
|
3
|
+
* under the DSH home (statusline.json, theme.json). Two guarantees the bare
|
|
4
|
+
* floating `writeFile` path could not give:
|
|
5
|
+
*
|
|
6
|
+
* 1. Every save is appended to ONE chain, so rapid consecutive edits land
|
|
7
|
+
* in submission order and the last snapshot is the one on disk (parallel
|
|
8
|
+
* floating writes let an older snapshot finish last and win).
|
|
9
|
+
* 2. Each write goes to a sibling temp file first and is renamed into
|
|
10
|
+
* place, so a crash mid-write can never leave a half-written JSON
|
|
11
|
+
* document behind.
|
|
12
|
+
*
|
|
13
|
+
* The chain itself never rejects: a failed write is reported to that
|
|
14
|
+
* save's caller while later saves keep their turn.
|
|
15
|
+
*
|
|
16
|
+
* @module @deepseek-ai/dsh-code/settings-file
|
|
17
|
+
*/
|
|
18
|
+
/** The serialized persistence surface; flush() is handed to the quit sequence. */
|
|
19
|
+
export interface UserSettingsPersistence {
|
|
20
|
+
/**
|
|
21
|
+
* Queue one file snapshot. Resolves when the chain reaches (and renames)
|
|
22
|
+
* it; rejects only to THIS caller when its own write failed.
|
|
23
|
+
*/
|
|
24
|
+
save(path: string, text: string): Promise<void>;
|
|
25
|
+
/** Wait for every queued write; safe to call repeatedly. */
|
|
26
|
+
flush(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create the shared settings-write chain. One instance per process keeps
|
|
30
|
+
* every user-level JSON file mutually serialized.
|
|
31
|
+
* @returns the persistence handle.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createUserSettingsPersistence(): UserSettingsPersistence;
|
package/lib/types/skills.d.ts
CHANGED
|
@@ -43,5 +43,5 @@ interface SkillsWatch extends SkillsView {
|
|
|
43
43
|
* @param ctx - context carrying the `skills` service (optional).
|
|
44
44
|
* @returns the view the completion menu subscribes to.
|
|
45
45
|
*/
|
|
46
|
-
export declare function watchSkills(ctx: Context): SkillsWatch;
|
|
46
|
+
export declare function watchSkills(ctx: Context, fallbackCwd?: string): SkillsWatch;
|
|
47
47
|
export {};
|
package/lib/types/store.d.ts
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
* and notifies subscribers. The renderer subscribes through
|
|
4
4
|
* `useSyncExternalStore`; the runner owns event feeding.
|
|
5
5
|
*
|
|
6
|
+
* Folding runs on the same mutable replay accumulator the persisted-log
|
|
7
|
+
* path uses (`replayProjectEvent`: id-indexed row updates, in-place
|
|
8
|
+
* appends), so a live structural event costs O(1) entry work regardless of
|
|
9
|
+
* transcript length — the copy-on-write fold rebuilt the whole entries
|
|
10
|
+
* array per event, making a growing session quadratic. An immutable
|
|
11
|
+
* `TranscriptView` snapshot is materialized only when a changed view is
|
|
12
|
+
* READ (once per rendered frame under the notification throttle, never per
|
|
13
|
+
* event), and every snapshot copies its arrays, so a view already handed
|
|
14
|
+
* out never observes later folds.
|
|
15
|
+
*
|
|
6
16
|
* Notification coalescing: the fold stays synchronous — `getView()` always
|
|
7
17
|
* returns the latest state the moment `apply` returns — but listener
|
|
8
18
|
* notification is frame-throttled (~16ms) and deduplicated. The zai/GLM
|
package/lib/types/subagents.d.ts
CHANGED
|
@@ -7,8 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* This is NOT a second transcript: each child folds to ONE row (label,
|
|
9
9
|
* running state, bounded last-activity text), capped at
|
|
10
|
-
* {@link MAX_SUBAGENT_ROWS}.
|
|
11
|
-
*
|
|
10
|
+
* {@link MAX_SUBAGENT_ROWS}. The cap is a display budget, not a fan-out
|
|
11
|
+
* limit: a new running child evicts the OLDEST settled row when one
|
|
12
|
+
* exists, and while every row is busy the newcomer waits off-screen — but
|
|
13
|
+
* the observed-session total (getTotalSeen) keeps counting, so status
|
|
14
|
+
* totals never under-report the fan-out. Rows are advisory display
|
|
15
|
+
* state, rebuilt from live events; nothing here persists or replays.
|
|
16
|
+
* Notification is coalesced
|
|
12
17
|
* by the same ~16ms frame throttle as the transcript store (per-burst
|
|
13
18
|
* microtask notify chained SyncLane rerenders past React's nested update
|
|
14
19
|
* limit; a bare macrotask merge repaints a whole turn's bursts at once).
|
|
@@ -16,7 +21,7 @@
|
|
|
16
21
|
* @module @deepseek-ai/dsh-code/subagents
|
|
17
22
|
*/
|
|
18
23
|
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
19
|
-
/** Hard row cap:
|
|
24
|
+
/** Hard row cap: overflow evicts the oldest settled row; a fully busy feed waits. */
|
|
20
25
|
export declare const MAX_SUBAGENT_ROWS = 8;
|
|
21
26
|
/** One live subagent row in the feed. */
|
|
22
27
|
export interface SubagentRow {
|
|
@@ -37,6 +42,11 @@ export interface SubagentFeedView {
|
|
|
37
42
|
subscribe(listener: () => void): () => void;
|
|
38
43
|
/** Read the current rows (identity-stable between changes). */
|
|
39
44
|
getSnapshot(): readonly SubagentRow[];
|
|
45
|
+
/**
|
|
46
|
+
* Distinct child sessions observed since the last reset. The row cap is
|
|
47
|
+
* a display budget, not a count of the fan-out; totals surface this.
|
|
48
|
+
*/
|
|
49
|
+
getTotalSeen(): number;
|
|
40
50
|
}
|
|
41
51
|
/**
|
|
42
52
|
* Fold one child-session event into its feed row (pure).
|
package/package.json
CHANGED
|
@@ -1,159 +1,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.
|
|
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.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
|
+
}
|