@norman-else/dsh-claude 0.1.18 → 0.1.20

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/INSTALL.md CHANGED
@@ -16,7 +16,7 @@ Stop if Doctor cannot find an authenticated local Claude Code installation. Do n
16
16
 
17
17
  ## 2. Link the bundle into the current Web profile
18
18
 
19
- The bundle retains its package-contained system preset and installs a protected compatibility copy at `$DSH_HOME/.agent-presets/claude` during Host activation. This works around DSH `0.1.0-rc.6` through `0.1.0-rc.8` replacing third-party preset roots. Existing user-modified files are preserved rather than overwritten.
19
+ The bundle retains its package-contained system preset and installs a protected compatibility copy at `$DSH_HOME/.agent-presets/claude` during Host activation. This works around supported DSH release-candidate builds replacing third-party preset roots. Existing user-modified files are preserved rather than overwritten.
20
20
 
21
21
  ```sh
22
22
  dsh plugin --profile web add "link:$(pwd)"
package/README.md CHANGED
@@ -17,7 +17,7 @@ Run the local Claude Code CLI as a first-class main conversation inside DeepSeek
17
17
  ## Requirements
18
18
 
19
19
  - macOS (v0.1 verification target).
20
- - DeepSeek Harness compatible with `0.1.0-rc.5` public plugin APIs.
20
+ - DeepSeek Harness Desktop public plugin APIs on the `0.1.1-rc.2` package line.
21
21
  - A local Claude Code installation already authenticated by the user.
22
22
  - Node.js 20 or later.
23
23
 
@@ -33,7 +33,7 @@ dsh plugin --profile web add @norman-else/dsh-claude
33
33
 
34
34
  Wait for the Web profile to rebuild, then refresh the existing DSH page. Open a new conversation and select **Claude** from the Agent Preset picker.
35
35
 
36
- The package ships a read-only system preset and, during Host activation, installs a protected compatibility copy at `$DSH_HOME/.agent-presets/claude`. The compatibility copy is required because DSH `0.1.0-rc.6` through `0.1.0-rc.8` replace third-party preset roots during profile boot. Installation is idempotent and never overwrites user-modified preset content.
36
+ The package ships a read-only system preset and, during Host activation, installs a protected compatibility copy at `$DSH_HOME/.agent-presets/claude`. The compatibility copy is required because supported DSH release-candidate builds replace third-party preset roots during profile boot. Installation is idempotent and never overwrites user-modified preset content.
37
37
 
38
38
  ## Use
39
39
 
@@ -62,7 +62,7 @@ Every Claude permission callback is bridged to `ctx.approval.request(...)`:
62
62
  - DSH access modes map to Claude permission modes: `read-only` → `plan`, `workspace-write` → `acceptEdits`, and explicitly acknowledged `danger-full-access` → `bypassPermissions`.
63
63
  - Claude `AskUserQuestion` is always routed to `ctx.userQuestions`, including under Full access; cancellation or an unavailable question surface denies the interaction, and answer content is not copied into the sidecar.
64
64
 
65
- This is a permission-policy bridge, not kernel-level workspace confinement. DSH `0.1.0-rc.5` exposes one writable sandbox root, while full Claude compatibility also requires writable `~/.claude`. The plugin therefore does **not** claim that paths outside the workspace are technically unwritable. It still uses DSH managed subprocess ownership for explicit argv, credential-shaped environment scrubbing, cancellation, and whole-process-tree termination.
65
+ This is a permission-policy bridge, not kernel-level workspace confinement. The supported DSH Desktop contract exposes one writable sandbox root, while full Claude compatibility also requires writable `~/.claude`. The plugin therefore does **not** claim that paths outside the workspace are technically unwritable. It still uses DSH managed subprocess ownership for explicit argv, credential-shaped environment scrubbing, cancellation, and whole-process-tree termination.
66
66
 
67
67
  ## Process and recovery behavior
68
68
 
package/lib/bin.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as parseClaudeVersion, n as ensureManagedPreset, r as removeManagedPreset } from "./preset-installer-B0NrA4Hi.mjs";
2
+ import { i as parseClaudeVersion, n as ensureManagedPreset, r as removeManagedPreset } from "./preset-installer-DMANIjwu.mjs";
3
3
  import { access } from "node:fs/promises";
4
4
  import { delimiter, isAbsolute, join } from "node:path";
5
5
  import { homedir } from "node:os";
package/lib/client.d.ts CHANGED
@@ -1,121 +1,233 @@
1
- window.__ModuleLoader__.load({
2
- id: "@norman-else/dsh-claude",
3
- factory: (require) => {
4
- var module = { exports: {} };
5
- var exports = module.exports;
6
- var { ClientContext } = require("@deepseek-ai/dsh-client-runtime/client");
7
- //#region src/client/locales.d.ts
8
- declare const en: {
9
- readonly nav: "Claude Code";
10
- readonly title: "Claude Code";
11
- readonly description: "DSH uses the local Claude Code and preserves its agent loop, tools, CLAUDE.md, Skills, Hooks, and MCP configuration.";
12
- readonly activity: "Claude Code activity";
13
- readonly detail: "Show redacted detail";
14
- readonly thinking: "Think";
15
- readonly running: "Running";
16
- readonly failed: "Failed";
17
- readonly done: "Done";
18
- readonly subagent: "Subagent";
19
- readonly tokens: "{count} tokens";
20
- readonly doctor: "Run Doctor";
21
- readonly refreshing: "Running Doctor…";
22
- readonly diagnostics: "Runtime status";
23
- readonly diagnosticsBody: "Check the Claude Code executable, authentication, protocol handshake, and current process configuration.";
24
- readonly diagnosticsLoading: "Loading diagnostics…";
25
- readonly executable: "Executable";
26
- readonly version: "Version";
27
- readonly authentication: "Authentication";
28
- readonly handshake: "Protocol handshake";
29
- readonly processes: "Live processes";
30
- readonly limits: "Process limits";
31
- readonly processSummary: "{total} total · {active} active";
32
- readonly limitSummary: "{max} max · {minutes} min idle";
33
- readonly missing: "Not found";
34
- readonly unknown: "Unknown";
35
- readonly error: "Doctor failed";
36
- readonly security: "Permission boundary";
37
- readonly securityBody: "Claude tool permissions are decided through the DSH approval UI. This version does not claim kernel-level write isolation for ~/.claude or paths outside the workspace.";
38
- readonly globalSettings: "Claude Code global settings";
39
- readonly globalSettingsBody: "Modify supported ~/.claude/settings.json values while preserving every other field.";
40
- readonly globalSettingsLoading: "Loading global settings…";
41
- readonly globalSettingsNewSession: "Output Style changes apply only to new Claude sessions.";
42
- readonly globalSettingsError: "Global settings save failed";
43
- readonly outputStyle: "Output Style";
44
- readonly pluginUpdate: "Plugin updates";
45
- readonly pluginUpdateBody: "Check npm for new releases. Only a uniquely identified npm installation can update in place; local development links are never replaced.";
46
- readonly updateNotChecked: "Updates have not been checked yet.";
47
- readonly installedVersion: "Installed version";
48
- readonly latestVersion: "Latest version";
49
- readonly installSource: "Installation source";
50
- readonly updateStatus: "Update status";
51
- readonly checkUpdates: "Check for updates";
52
- readonly checkingUpdates: "Checking…";
53
- readonly updatePlugin: "Update";
54
- readonly updatingPlugin: "Updating…";
55
- readonly updateError: "Update failed";
56
- readonly restartRequired: "Restart DSH Desktop to load the updated plugin.";
57
- readonly updateSource_registry: "npm";
58
- readonly updateSource_link: "Local development link";
59
- readonly updateSource_unsupported: "Unsupported source";
60
- readonly updateSource_unknown: "Unknown";
61
- readonly updateState_current: "Up to date";
62
- readonly updateState_available: "Update available";
63
- readonly updateState_linked: "Updated from the linked source checkout";
64
- readonly updateState_unsupported: "This installation source cannot update automatically";
65
- readonly updateState_unavailable: "The active DSH profile cannot be identified safely";
66
- readonly updateState_error: "Check failed";
67
- readonly tasks: "Tasks";
68
- readonly tasksPanel: "Background tasks";
69
- readonly tasksPanelTurn: "Tasks for this run";
70
- readonly tasksTurnNumber: "Turn {turn}";
71
- readonly tasksEmpty: "No subagents or background tasks";
72
- readonly tasksOpen: "Show background tasks";
73
- readonly tasksClose: "Close tasks panel";
74
- readonly tasksRunning: "Running";
75
- readonly tasksNoneRunning: "No tasks are running";
76
- readonly tasksSettled: "Finished";
77
- readonly tasksClear: "Clear";
78
- readonly tasksViewActivity: "View activity";
79
- readonly tasksHideActivity: "Hide activity";
80
- readonly tasksRunningCount: "{count} running task(s)";
81
- readonly tasksTurnRunning: "{count} task(s) running";
82
- readonly tasksTurnCompleted: "{count} task(s) completed";
83
- readonly tasksTurnFailed: "{failed} failed, {completed} completed";
84
- readonly tasksToolUses: "{count} tool use(s)";
85
- readonly tasksCompleted: "Completed";
86
- readonly tasksFailed: "Failed";
87
- readonly tasksStopped: "Stopped";
88
- readonly tasksKilled: "Killed";
89
- readonly tasksBackground: "Background";
90
- readonly tasksLastTool: "Last tool {tool}";
91
- };
92
- type ClaudeCodeSettingsKey = keyof typeof en;
93
- //#endregion
94
- //#region src/client/index.d.ts
95
- /** The right-side details column slot declared by dsh-client-ui-layout
96
- * (kind 'single', scope 'session'). Merged locally because this package does
97
- * not depend on the layout package's client types. */
98
- declare module '@deepseek-ai/dsh-client-ui-slots' {
99
- interface SlotMap {
100
- details: {
101
- kind: 'single';
102
- scope: 'session';
103
- };
104
- }
105
- }
106
- declare module '@deepseek-ai/dsh-client-ui-slots' {
107
- interface LocaleNamespaceMap {
108
- 'settings.claude-code': ClaudeCodeSettingsKey;
109
- }
110
- }
111
- declare const name = "dsh-claude-client";
112
- declare const inject: string[];
113
- declare function apply(ctx: ClientContext): void;
114
- //#endregion
115
- module.exports.apply = apply;
116
- module.exports.inject = inject;
117
- module.exports.name = name;
118
- return module.exports;
119
- }
120
- });
1
+ import { ClientContext } from "@deepseek-ai/dsh-client-runtime/client";
2
+ //#region src/client/locales.d.ts
3
+ declare const en: {
4
+ readonly nav: "Claude Code";
5
+ readonly title: "Claude Code";
6
+ readonly description: "DSH uses the local Claude Code and preserves its agent loop, tools, CLAUDE.md, Skills, Hooks, and MCP configuration.";
7
+ readonly activity: "Claude Code activity";
8
+ readonly detail: "Show redacted detail";
9
+ readonly thinking: "Think";
10
+ readonly running: "Running";
11
+ readonly failed: "Failed";
12
+ readonly done: "Done";
13
+ readonly subagent: "Subagent";
14
+ readonly usedTool: "Used 1 tool";
15
+ readonly usedTools: "Used {count} tools";
16
+ readonly toolInput: "Input";
17
+ readonly toolOutput: "Output";
18
+ readonly toolError: "Error";
19
+ readonly tokens: "{count} tokens";
20
+ readonly doctor: "Run Doctor";
21
+ readonly refreshing: "Running Doctor…";
22
+ readonly diagnostics: "Runtime status";
23
+ readonly diagnosticsBody: "Check the Claude Code executable, authentication, protocol handshake, and current process configuration.";
24
+ readonly diagnosticsLoading: "Loading diagnostics…";
25
+ readonly executable: "Executable";
26
+ readonly version: "Version";
27
+ readonly authentication: "Authentication";
28
+ readonly handshake: "Protocol handshake";
29
+ readonly processes: "Live processes";
30
+ readonly limits: "Process limits";
31
+ readonly processSummary: "{total} total · {active} active";
32
+ readonly limitSummary: "{max} max · {minutes} min idle";
33
+ readonly missing: "Not found";
34
+ readonly unknown: "Unknown";
35
+ readonly error: "Doctor failed";
36
+ readonly security: "Permission boundary";
37
+ readonly securityBody: "Claude tool permissions are decided through the DSH approval UI. This version does not claim kernel-level write isolation for ~/.claude or paths outside the workspace.";
38
+ readonly globalSettings: "Claude Code settings";
39
+ readonly globalSettingsBody: "Modify supported Claude Code and plugin settings while preserving every other field.";
40
+ readonly globalSettingsLoading: "Loading global settings…";
41
+ readonly globalSettingsNewSession: "Output Style changes apply only to new Claude sessions.";
42
+ readonly globalSettingsError: "Global settings save failed";
43
+ readonly outputStyle: "Output Style";
44
+ readonly worktreeBranchPrefix: "Worktree branch prefix";
45
+ readonly worktreeBranchPrefixEffect: "Prefix changes apply to subsequently generated Worktree branches. Explicit full branch names remain unchanged.";
46
+ readonly pluginUpdate: "Plugin updates";
47
+ readonly pluginUpdateBody: "Check npm for new releases. Only a uniquely identified npm installation can update in place; local development links are never replaced.";
48
+ readonly updateNotChecked: "Updates have not been checked yet.";
49
+ readonly installedVersion: "Installed version";
50
+ readonly latestVersion: "Latest version";
51
+ readonly installSource: "Installation source";
52
+ readonly updateStatus: "Update status";
53
+ readonly checkUpdates: "Check for updates";
54
+ readonly checkingUpdates: "Checking…";
55
+ readonly updatePlugin: "Update";
56
+ readonly updatingPlugin: "Updating…";
57
+ readonly updateError: "Update failed";
58
+ readonly restartRequired: "Restart DSH Desktop to load the updated plugin.";
59
+ readonly updateSource_registry: "npm";
60
+ readonly updateSource_link: "Local development link";
61
+ readonly updateSource_unsupported: "Unsupported source";
62
+ readonly updateSource_unknown: "Unknown";
63
+ readonly updateState_current: "Up to date";
64
+ readonly updateState_available: "Update available";
65
+ readonly updateState_linked: "Updated from the linked source checkout";
66
+ readonly updateState_unsupported: "This installation source cannot update automatically";
67
+ readonly updateState_unavailable: "The active DSH profile cannot be identified safely";
68
+ readonly updateState_error: "Check failed";
69
+ readonly tasks: "Tasks";
70
+ readonly tasksPanel: "Background tasks";
71
+ readonly tasksPanelTurn: "Tasks for this run";
72
+ readonly tasksTurnNumber: "Turn {turn}";
73
+ readonly tasksEmpty: "No subagents or background tasks";
74
+ readonly tasksOpen: "Show background tasks";
75
+ readonly tasksClose: "Close tasks panel";
76
+ readonly tasksRunning: "Running";
77
+ readonly tasksNoneRunning: "No tasks are running";
78
+ readonly tasksSettled: "Finished";
79
+ readonly tasksClear: "Clear";
80
+ readonly tasksViewActivity: "View activity";
81
+ readonly tasksHideActivity: "Hide activity";
82
+ readonly tasksRunningCount: "{count} running task(s)";
83
+ readonly repositoryRateLimited: "Rate limited";
84
+ readonly tasksTurnRunning: "{count} task(s) running";
85
+ readonly tasksTurnCompleted: "{count} task(s) completed";
86
+ readonly tasksTurnFailed: "{failed} failed, {completed} completed";
87
+ readonly tasksToolUses: "{count} tool use(s)";
88
+ readonly tasksCompleted: "Completed";
89
+ readonly tasksFailed: "Failed";
90
+ readonly tasksStopped: "Stopped";
91
+ readonly tasksKilled: "Killed";
92
+ readonly tasksBackground: "Background";
93
+ readonly tasksLastTool: "Last tool {tool}";
94
+ readonly repositoryOpen: "Show repository and pull request details";
95
+ readonly repositoryPanel: "Repository status";
96
+ readonly repositoryClose: "Close repository panel";
97
+ readonly repositorySection: "Repository";
98
+ readonly repositoryStatus: "Status";
99
+ readonly repositoryAvailable: "Available";
100
+ readonly repositoryUnavailable: "Repository status unavailable";
101
+ readonly repositoryNotGit: "Not a Git repository";
102
+ readonly repositoryCwd: "Session directory";
103
+ readonly repositoryRoot: "Repository root";
104
+ readonly repositoryBranch: "Branch";
105
+ readonly repositoryBranchSearch: "Search branches";
106
+ readonly repositoryBranchSearchEmpty: "No matching branches";
107
+ readonly repositoryBranchesLoading: "Loading branches…";
108
+ readonly repositoryProgressTitle: "Creating Worktree";
109
+ readonly repositoryProgressFailed: "Worktree creation failed";
110
+ readonly repositoryProgressDismiss: "Dismiss Worktree progress";
111
+ readonly repositoryProgress_inspecting: "Checking repository and branch";
112
+ readonly repositoryProgress_fetching: "Refreshing remote references";
113
+ readonly 'repositoryProgress_creating-worktree': "Creating branch and Worktree";
114
+ readonly 'repositoryProgress_saving-worktree': "Saving Worktree state";
115
+ readonly 'repositoryProgress_switching-branch': "Switching local branch";
116
+ readonly 'repositoryProgress_creating-workspace': "Creating DSH Workspace";
117
+ readonly 'repositoryProgress_starting-session': "Starting Claude session";
118
+ readonly 'repositoryProgress_transferring-draft': "Transferring message and attachments";
119
+ readonly repositoryProgress_submitting: "Submitting message";
120
+ readonly repositorySessionUnavailable: "The target session could not be prepared.";
121
+ readonly repositoryDraftTransferFailed: "Draft attachments could not be moved to the worktree session.";
122
+ readonly repositoryDetached: "Detached HEAD";
123
+ readonly repositoryUnknownBranch: "Unknown branch";
124
+ readonly repositoryWorktree: "Worktree";
125
+ readonly repositoryWorktreeLabel: "Git worktree";
126
+ readonly repositoryChanges: "Changes";
127
+ readonly repositoryModified: "Modified";
128
+ readonly repositoryClean: "Clean";
129
+ readonly repositoryLocal: "Local repository";
130
+ readonly repositoryPullRequest: "Pull request";
131
+ readonly repositoryNoPr: "No pull request for this branch";
132
+ readonly repositoryPr: "PR #{number}";
133
+ readonly repositoryPrDraft: "Draft PR #{number}";
134
+ readonly repositoryPrState: "PR state";
135
+ readonly repositoryDraft: "Draft";
136
+ readonly repositoryState_open: "Open";
137
+ readonly repositoryState_closed: "Closed";
138
+ readonly repositoryState_merged: "Merged";
139
+ readonly repositoryMergedInto: "Merged into {branch}";
140
+ readonly repositoryMergedAgo: "{age} ago";
141
+ readonly repositoryChecks: "Checks";
142
+ readonly repositoryChecks_passing: "Checks passing";
143
+ readonly repositoryChecks_pending: "Checks pending";
144
+ readonly repositoryChecks_failing: "Checks failing";
145
+ readonly repositoryChecks_none: "No checks";
146
+ readonly repositoryReview: "Review";
147
+ readonly repositoryReview_approved: "Approved";
148
+ readonly 'repositoryReview_changes-requested': "Changes requested";
149
+ readonly 'repositoryReview_review-required': "Review required";
150
+ readonly repositoryReview_none: "No review status";
151
+ readonly repositoryMergeState: "Merge state";
152
+ readonly repositoryOpenPr: "Open PR #{number} in browser";
153
+ readonly yes: "Yes";
154
+ readonly no: "No";
155
+ readonly diffOpen: "View branch changes";
156
+ readonly diffClose: "Close diff panel";
157
+ readonly diffWorkingTree: "Branch changes";
158
+ readonly diffFiles: "{count} modified file(s)";
159
+ readonly diffFilesShort: "{count} files";
160
+ readonly diffTruncated: "The diff exceeds the safe display limit. Use the terminal to inspect the complete content.";
161
+ readonly diffEmpty: "No tracked file changes to display";
162
+ readonly diffMaximize: "Maximize diff panel";
163
+ readonly diffRestore: "Restore diff panel";
164
+ readonly diffCommit: "Commit";
165
+ readonly diffCommitMenu: "Open commit actions";
166
+ readonly diffCommitPush: "Commit & Push…";
167
+ readonly diffPush: "Push";
168
+ readonly diffCreatePr: "Create PR…";
169
+ readonly diffConfirmDescription: "Confirm the repository snapshot and Git operation.";
170
+ readonly diffPushDescription: "Push local commits to the remote branch.";
171
+ readonly diffPushAhead: "{count} unpushed commit(s)";
172
+ readonly diffPushCompleted: "Pushed commit {commit}";
173
+ readonly diffGeneratingMessage: "Reading the repository and generating a commit message…";
174
+ readonly diffActionFailed: "Repository action failed.";
175
+ readonly diffIncludeUnstaged: "Include unstaged and untracked changes";
176
+ readonly diffCommitMessage: "Commit message";
177
+ readonly diffStaged: "Staged";
178
+ readonly diffUnstaged: "Unstaged";
179
+ readonly diffStagedUnstaged: "Staged + unstaged";
180
+ readonly diffUntracked: "Untracked";
181
+ readonly diffPrTitle: "PR title";
182
+ readonly diffPrBase: "Base branch";
183
+ readonly diffPrBaseDefault: "Use the remote default branch";
184
+ readonly diffPrDescription: "PR description (Summary and Changes only)";
185
+ readonly diffPrDraft: "Create as a Draft PR";
186
+ readonly diffCancel: "Cancel";
187
+ readonly diffConfirm: "Confirm";
188
+ readonly diffSubmitting: "Working…";
189
+ readonly diffDone: "Done";
190
+ readonly diffCommitCompleted: "Created commit {commit}";
191
+ readonly diffCommitPreserved: "Local commit {commit} was preserved.";
192
+ readonly diffOpenPr: "Open pull request";
193
+ readonly reviewCommentAdd: "Add line comment";
194
+ readonly reviewCommentPlaceholder: "Request changes";
195
+ readonly reviewCommentSubmit: "Comment";
196
+ readonly reviewCommentCancel: "Cancel";
197
+ readonly reviewCommentRemove: "Remove comment";
198
+ readonly reviewCommentFailed: "The comment could not be saved.";
199
+ readonly reviewCommentsClear: "Clear all comments";
200
+ readonly reviewCommentsSend: "Send comments";
201
+ readonly reviewCommentsSendDraft: "Please address the attached review comments.";
202
+ readonly reviewCommentOldSide: "Old line {line}";
203
+ readonly reviewCommentNewSide: "Line {line}";
204
+ };
205
+ type ClaudeCodeSettingsKey = keyof typeof en;
206
+ //#endregion
207
+ //#region src/client/index.d.ts
208
+ /** The right-side details column slot declared by dsh-client-ui-layout
209
+ * (kind 'single', scope 'session'). Merged locally because this package does
210
+ * not depend on the layout package's client types. */
211
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
212
+ interface SlotMap {
213
+ details: {
214
+ kind: 'single';
215
+ scope: 'session';
216
+ };
217
+ 'shell.overlay': {
218
+ kind: 'list';
219
+ scope: 'root';
220
+ };
221
+ }
222
+ }
223
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
224
+ interface LocaleNamespaceMap {
225
+ 'settings.claude-code': ClaudeCodeSettingsKey;
226
+ }
227
+ }
228
+ declare const name = "dsh-claude-client";
229
+ declare const inject: string[];
230
+ declare function apply(ctx: ClientContext): void;
231
+ //#endregion
232
+ export { apply, inject, name };
121
233
  //# sourceMappingURL=client.d.ts.map