@xmoon76/dsh-pi-tui 0.4.5 → 0.4.7-alpha.1

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.
@@ -19,10 +19,9 @@ declare const inject: string[];
19
19
  * it is shown as the fallback version label (`>= <since>`) when the
20
20
  * bundle's own version cannot be read, so the message stays truthful.
21
21
  *
22
- * The 0.4.5 line has a minimum of the published npm release dsh-v0.1.5-rc.1
23
- * and is also compatible with dsh-v0.1.5-rc.2. The recovery guidance names
24
- * the recommended published upgrade target and allows its native install
25
- * scripts.
22
+ * The 0.4.7-alpha.1 line has a minimum of the published npm release
23
+ * dsh-v0.1.6-alpha.1. The recovery guidance names the recommended published
24
+ * upgrade target and allows its native install scripts.
26
25
  */
27
26
  interface HarnessCompatEntry {
28
27
  /** Inclusive lower bound of the incompatible range; absent = unbounded below. */
@@ -31,7 +30,7 @@ interface HarnessCompatEntry {
31
30
  max?: string;
32
31
  /** The bundle release line that first required this constraint. */
33
32
  since: string;
34
- /** Human-readable requirement, e.g. `DeepSeek Harness 0.1.5-rc.1 or later`. */
33
+ /** Human-readable requirement, e.g. `DeepSeek Harness 0.1.6-alpha.1 or later`. */
35
34
  requires: string;
36
35
  /** The target DSH version to install when the current runtime is too old. */
37
36
  upgradeDsh?: string;
@@ -65,6 +64,16 @@ interface TuiStartupValues {
65
64
  sessionId?: string;
66
65
  /** `--preset`, the agent preset a fresh session starts on. */
67
66
  presetId?: string;
67
+ /**
68
+ * Mark the TUI required surface as mounted. `src/index.ts` calls this once
69
+ * its synchronous initialization succeeded and its async startup root is
70
+ * established. The readiness handshake registered by this row exits nonzero
71
+ * when the launcher commits readiness without it: 0.1.6 app-boot treats a
72
+ * failed `tui-app` row as an OPTIONAL plugin failure, so without this the
73
+ * explicitly requested TUI could report a successful startup that never
74
+ * mounted. Optional so structural test providers can omit it.
75
+ */
76
+ markSurfaceMounted?(): void;
68
77
  }
69
78
  /**
70
79
  * Parse and provide the TUI invocation as an ordinary Cordis service. The
package/dist/startup.mjs CHANGED
@@ -69,11 +69,11 @@ const inject = ["cmdlineArgs"];
69
69
  /** The compatibility table. Entries are ordered from oldest to newest so
70
70
  * `harnessCompatEntryFor()` can return the first matching historical range. */
71
71
  const CURRENT_DSH_REQUIREMENT = {
72
- since: "0.4.5",
73
- requires: "DeepSeek Harness 0.1.5-rc.1 or later",
74
- upgradeDsh: "0.1.5-rc.2",
75
- upgradeCommand: "npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.5-rc.2",
76
- guidance: "This 0.4.5 release is validated with the published DeepSeek Harness 0.1.5-rc.1 distribution and is also compatible with 0.1.5-rc.2; see docs/dsh-compatibility.md."
72
+ since: "0.4.7-alpha.1",
73
+ requires: "DeepSeek Harness 0.1.6-alpha.1 or later",
74
+ upgradeDsh: "0.1.6-alpha.1",
75
+ upgradeCommand: "npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.6-alpha.1",
76
+ guidance: "This 0.4.7-alpha.1 line is validated with the published DeepSeek Harness 0.1.6-alpha.1 distribution; see docs/dsh-compatibility.md."
77
77
  };
78
78
  const HARNESS_COMPAT = [
79
79
  {
@@ -130,6 +130,12 @@ const HARNESS_COMPAT = [
130
130
  ...CURRENT_DSH_REQUIREMENT,
131
131
  min: "0.1.5-alpha.1",
132
132
  max: "0.1.5-rc.1"
133
+ },
134
+ {
135
+ ...CURRENT_DSH_REQUIREMENT,
136
+ min: "0.1.5-rc.1",
137
+ max: "0.1.6-alpha.1",
138
+ fallbackTui: "0.4.6"
133
139
  }
134
140
  ];
135
141
  /** The compat entry covering the installed dsh version, or undefined when
@@ -172,6 +178,19 @@ function incompatibleHarnessMessage(installed, entry) {
172
178
  }
173
179
  /** Service provided by this plugin and injected by the TUI runner row. */
174
180
  const TUI_STARTUP_SERVICE = "tuiStartup";
181
+ /**
182
+ * The actionable error for a committed startup whose TUI surface never
183
+ * mounted. The launcher proved the tree booted, but `--profile pi-tui` asked
184
+ * for this surface, so the outcome is an error rather than an optional plugin
185
+ * warning.
186
+ */
187
+ function surfaceNotMountedMessage() {
188
+ return [
189
+ `dsh-pi-tui ${bundleVersionLabel(CURRENT_DSH_REQUIREMENT.since)} was invoked with --profile pi-tui, but the required TUI surface did not mount.`,
190
+ "The tui-app row failed to import/apply or stayed pending on a dependency (see the loader warnings above); DSH app-boot treats that as an optional plugin failure.",
191
+ "This installation cannot run the terminal UI; reinstall the profile or fix its composition, then re-run: dsh --profile pi-tui"
192
+ ].join("\n");
193
+ }
175
194
  /** This app's command: its flags, its description, and its help text. */
176
195
  function tuiCommand() {
177
196
  return new Command().name("dsh --profile pi-tui").description("Run the DeepSeek Harness terminal UI.").helpOption("-h, --help", "show this help").option("--session <id>", "resume an existing session instead of creating one").option("--preset <id>", "agent preset for a fresh session (falls back to $DSH_PI_TUI_PRESET, then the saved default)").addHelpText("after", `
@@ -198,10 +217,19 @@ function apply(ctx) {
198
217
  process.stderr.write(`\n${message}\n\n`);
199
218
  }
200
219
  }
220
+ let surfaceMounted = false;
221
+ ctx.get("appReady")?.onReady(() => {
222
+ if (surfaceMounted) return;
223
+ process.stderr.write(`\n${surfaceNotMountedMessage()}\n\n`);
224
+ ctx.get("appExit")?.(1);
225
+ });
201
226
  const options = program.opts();
202
227
  ctx.provide(TUI_STARTUP_SERVICE, {
203
228
  ...options.session !== void 0 ? { sessionId: options.session } : {},
204
- ...options.preset !== void 0 ? { presetId: options.preset } : {}
229
+ ...options.preset !== void 0 ? { presetId: options.preset } : {},
230
+ markSurfaceMounted: () => {
231
+ surfaceMounted = true;
232
+ }
205
233
  });
206
234
  });
207
235
  parseCmdline(ctx, program);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmoon76/dsh-pi-tui",
3
- "version": "0.4.5",
3
+ "version": "0.4.7-alpha.1",
4
4
  "description": "The dsh-pi-tui bundle: a TUI surface for DeepSeek Harness profiles (dsh --profile pi-tui)",
5
5
  "license": "MIT",
6
6
  "author": "XMoon <xmoonox@gmail.com>",
@@ -69,114 +69,127 @@
69
69
  "dependencies": {
70
70
  "chalk": "^5.4.1",
71
71
  "commander": "^15.0.0",
72
+ "diff": "^9.0.0",
72
73
  "get-east-asian-width": "1.6.0",
73
74
  "marked": "18.0.5"
74
75
  },
75
76
  "peerDependencies": {
76
77
  "@deepseek-ai/cordis": "^4.0.2",
77
78
  "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
78
- "@deepseek-ai/dsh-agent": ">=0.1.5-rc.1",
79
- "@deepseek-ai/dsh-agent-default-model": ">=0.1.5-rc.1",
80
- "@deepseek-ai/dsh-agent-presets": ">=0.1.5-rc.1",
81
- "@deepseek-ai/dsh-authorization": ">=0.1.5-rc.1",
82
- "@deepseek-ai/dsh-cmdline": ">=0.1.5-rc.1",
83
- "@deepseek-ai/dsh-commands": ">=0.1.5-rc.1",
84
- "@deepseek-ai/dsh-credentials": ">=0.1.5-rc.1",
85
- "@deepseek-ai/dsh-goal": ">=0.1.5-rc.1",
86
- "@deepseek-ai/dsh-jobs": ">=0.1.5-rc.1",
87
- "@deepseek-ai/dsh-llm": ">=0.1.5-rc.1",
88
- "@deepseek-ai/dsh-llm-retry": ">=0.1.5-rc.1",
89
- "@deepseek-ai/dsh-permission-presets": ">=0.1.5-rc.1",
90
- "@deepseek-ai/dsh-plan-mode": ">=0.1.5-rc.1",
91
- "@deepseek-ai/dsh-sandbox-policy": ">=0.1.5-rc.1",
92
- "@deepseek-ai/dsh-session": ">=0.1.5-rc.1",
93
- "@deepseek-ai/dsh-session-log-export": ">=0.1.5-rc.1",
94
- "@deepseek-ai/dsh-session-persistence": ">=0.1.5-rc.1",
95
- "@deepseek-ai/dsh-session-title": ">=0.1.5-rc.1",
96
- "@deepseek-ai/dsh-settings": ">=0.1.5-rc.1",
97
- "@deepseek-ai/dsh-shell": ">=0.1.5-rc.1",
98
- "@deepseek-ai/dsh-skill": ">=0.1.5-rc.1",
99
- "@deepseek-ai/dsh-subagent": ">=0.1.5-rc.1",
100
- "@deepseek-ai/dsh-token-meter": ">=0.1.5-rc.1",
101
- "@deepseek-ai/dsh-tool-todo": ">=0.1.5-rc.1",
102
- "@deepseek-ai/dsh-tool-workflow": ">=0.1.5-rc.1",
103
- "@deepseek-ai/dsh-tools": ">=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",
79
+ "@deepseek-ai/dsh-agent": ">=0.1.6-alpha.1",
80
+ "@deepseek-ai/dsh-agent-default-model": ">=0.1.6-alpha.1",
81
+ "@deepseek-ai/dsh-agent-presets": ">=0.1.6-alpha.1",
82
+ "@deepseek-ai/dsh-authorization": ">=0.1.6-alpha.1",
83
+ "@deepseek-ai/dsh-cmdline": ">=0.1.6-alpha.1",
84
+ "@deepseek-ai/dsh-commands": ">=0.1.6-alpha.1",
85
+ "@deepseek-ai/dsh-credentials": ">=0.1.6-alpha.1",
86
+ "@deepseek-ai/dsh-goal": ">=0.1.6-alpha.1",
87
+ "@deepseek-ai/dsh-jobs": ">=0.1.6-alpha.1",
88
+ "@deepseek-ai/dsh-llm": ">=0.1.6-alpha.1",
89
+ "@deepseek-ai/dsh-llm-retry": ">=0.1.6-alpha.1",
90
+ "@deepseek-ai/dsh-permission-presets": ">=0.1.6-alpha.1",
91
+ "@deepseek-ai/dsh-plan-mode": ">=0.1.6-alpha.1",
92
+ "@deepseek-ai/dsh-sandbox-policy": ">=0.1.6-alpha.1",
93
+ "@deepseek-ai/dsh-session": ">=0.1.6-alpha.1",
94
+ "@deepseek-ai/dsh-session-log-export": ">=0.1.6-alpha.1",
95
+ "@deepseek-ai/dsh-session-persistence": ">=0.1.6-alpha.1",
96
+ "@deepseek-ai/dsh-session-title": ">=0.1.6-alpha.1",
97
+ "@deepseek-ai/dsh-settings": ">=0.1.6-alpha.1",
98
+ "@deepseek-ai/dsh-shell": ">=0.1.6-alpha.1",
99
+ "@deepseek-ai/dsh-skill": ">=0.1.6-alpha.1",
100
+ "@deepseek-ai/dsh-subagent": ">=0.1.6-alpha.1",
101
+ "@deepseek-ai/dsh-token-meter": ">=0.1.6-alpha.1",
102
+ "@deepseek-ai/dsh-tool-todo": ">=0.1.6-alpha.1",
103
+ "@deepseek-ai/dsh-tool-workflow": ">=0.1.6-alpha.1",
104
+ "@deepseek-ai/dsh-tools": ">=0.1.6-alpha.1",
105
+ "@deepseek-ai/dsh-user-approval": ">=0.1.6-alpha.1",
106
+ "@deepseek-ai/dsh-user-questions": ">=0.1.6-alpha.1",
106
107
  "@deepseek-ai/schemastery": "^3.18.1"
107
108
  },
108
109
  "devDependencies": {
109
110
  "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
110
- "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
111
- "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.1",
112
- "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.1",
113
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
114
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
115
- "@deepseek-ai/dsh-authorization": "0.1.5-rc.1",
116
- "@deepseek-ai/dsh-brand": "0.1.5-rc.1",
117
- "@deepseek-ai/dsh-cmdline": "0.1.5-rc.1",
118
- "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
119
- "@deepseek-ai/dsh-credentials": "0.1.5-rc.1",
120
- "@deepseek-ai/dsh-goal": "0.1.5-rc.1",
121
- "@deepseek-ai/dsh-invariants": "0.1.5-rc.1",
122
- "@deepseek-ai/dsh-jobs": "0.1.5-rc.1",
123
- "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
124
- "@deepseek-ai/dsh-llm-retry": "0.1.5-rc.1",
125
- "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.1",
126
- "@deepseek-ai/dsh-plan-mode": "0.1.5-rc.1",
127
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
128
- "@deepseek-ai/dsh-scope": "0.1.5-rc.1",
129
- "@deepseek-ai/dsh-session": "0.1.5-rc.1",
130
- "@deepseek-ai/dsh-session-log-export": "0.1.5-rc.1",
131
- "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.1",
132
- "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
133
- "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
134
- "@deepseek-ai/dsh-shell": "0.1.5-rc.1",
135
- "@deepseek-ai/dsh-skill": "0.1.5-rc.1",
136
- "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
137
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
138
- "@deepseek-ai/dsh-timeout": "0.1.5-rc.1",
139
- "@deepseek-ai/dsh-token-meter": "0.1.5-rc.1",
140
- "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.1",
141
- "@deepseek-ai/dsh-tool-workflow": "0.1.5-rc.1",
142
- "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
143
- "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
144
- "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1",
111
+ "@deepseek-ai/dsh-agent": "0.1.6-alpha.1",
112
+ "@deepseek-ai/dsh-agent-default-model": "0.1.6-alpha.1",
113
+ "@deepseek-ai/dsh-agent-instructions": "0.1.6-alpha.1",
114
+ "@deepseek-ai/dsh-agent-loop": "0.1.6-alpha.1",
115
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.1.6-alpha.1",
116
+ "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.1",
117
+ "@deepseek-ai/dsh-agent-tool-presentation": "0.1.6-alpha.1",
118
+ "@deepseek-ai/dsh-api-gateway": "0.1.6-alpha.1",
119
+ "@deepseek-ai/dsh-api-remotes": "0.1.6-alpha.1",
120
+ "@deepseek-ai/dsh-api-session-controller": "0.1.6-alpha.1",
121
+ "@deepseek-ai/dsh-attachment": "0.1.6-alpha.1",
122
+ "@deepseek-ai/dsh-authorization": "0.1.6-alpha.1",
123
+ "@deepseek-ai/dsh-brand": "0.1.6-alpha.1",
124
+ "@deepseek-ai/dsh-client-connection": "0.1.6-alpha.1",
125
+ "@deepseek-ai/dsh-client-store": "0.1.6-alpha.1",
126
+ "@deepseek-ai/dsh-cmdline": "0.1.6-alpha.1",
127
+ "@deepseek-ai/dsh-command-compact": "0.1.6-alpha.1",
128
+ "@deepseek-ai/dsh-command-goal": "0.1.6-alpha.1",
129
+ "@deepseek-ai/dsh-commands": "0.1.6-alpha.1",
130
+ "@deepseek-ai/dsh-compaction-basic": "0.1.6-alpha.1",
131
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.6-alpha.1",
132
+ "@deepseek-ai/dsh-credentials": "0.1.6-alpha.1",
133
+ "@deepseek-ai/dsh-fs-local": "0.1.6-alpha.1",
134
+ "@deepseek-ai/dsh-goal": "0.1.6-alpha.1",
135
+ "@deepseek-ai/dsh-invariants": "0.1.6-alpha.1",
136
+ "@deepseek-ai/dsh-jobs": "0.1.6-alpha.1",
137
+ "@deepseek-ai/dsh-jobs-local": "0.1.6-alpha.1",
138
+ "@deepseek-ai/dsh-llm": "0.1.6-alpha.1",
139
+ "@deepseek-ai/dsh-llm-retry": "0.1.6-alpha.1",
140
+ "@deepseek-ai/dsh-permission-presets": "0.1.6-alpha.1",
141
+ "@deepseek-ai/dsh-persona": "0.1.6-alpha.1",
142
+ "@deepseek-ai/dsh-plan-mode": "0.1.6-alpha.1",
143
+ "@deepseek-ai/dsh-remote-mock": "0.1.6-alpha.1",
144
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.6-alpha.1",
145
+ "@deepseek-ai/dsh-scope": "0.1.6-alpha.1",
146
+ "@deepseek-ai/dsh-session": "0.1.6-alpha.1",
147
+ "@deepseek-ai/dsh-session-log-export": "0.1.6-alpha.1",
148
+ "@deepseek-ai/dsh-session-persistence": "0.1.6-alpha.1",
149
+ "@deepseek-ai/dsh-session-projection": "0.1.6-alpha.1",
150
+ "@deepseek-ai/dsh-session-query": "0.1.6-alpha.1",
151
+ "@deepseek-ai/dsh-session-query-sqlite": "0.1.6-alpha.1",
152
+ "@deepseek-ai/dsh-session-title": "0.1.6-alpha.1",
153
+ "@deepseek-ai/dsh-settings": "0.1.6-alpha.1",
154
+ "@deepseek-ai/dsh-shell": "0.1.6-alpha.1",
155
+ "@deepseek-ai/dsh-skill": "0.1.6-alpha.1",
156
+ "@deepseek-ai/dsh-skill-filesystem": "0.1.6-alpha.1",
157
+ "@deepseek-ai/dsh-subagent": "0.1.6-alpha.1",
158
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.6-alpha.1",
159
+ "@deepseek-ai/dsh-system-prompt": "0.1.6-alpha.1",
160
+ "@deepseek-ai/dsh-terminal": "0.1.6-alpha.1",
161
+ "@deepseek-ai/dsh-timeout": "0.1.6-alpha.1",
162
+ "@deepseek-ai/dsh-token-meter": "0.1.6-alpha.1",
163
+ "@deepseek-ai/dsh-tool-ask-user": "0.1.6-alpha.1",
164
+ "@deepseek-ai/dsh-tool-cordis": "0.1.6-alpha.1",
165
+ "@deepseek-ai/dsh-tool-fs": "0.1.6-alpha.1",
166
+ "@deepseek-ai/dsh-tool-fs-search": "0.1.6-alpha.1",
167
+ "@deepseek-ai/dsh-tool-goal": "0.1.6-alpha.1",
168
+ "@deepseek-ai/dsh-tool-jobs": "0.1.6-alpha.1",
169
+ "@deepseek-ai/dsh-tool-ralph": "0.1.6-alpha.1",
170
+ "@deepseek-ai/dsh-tool-skill": "0.1.6-alpha.1",
171
+ "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.6-alpha.1",
172
+ "@deepseek-ai/dsh-tool-subagent": "0.1.6-alpha.1",
173
+ "@deepseek-ai/dsh-tool-subagent-control": "0.1.6-alpha.1",
174
+ "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.1",
175
+ "@deepseek-ai/dsh-tool-web": "0.1.6-alpha.1",
176
+ "@deepseek-ai/dsh-tool-workflow": "0.1.6-alpha.1",
177
+ "@deepseek-ai/dsh-tools": "0.1.6-alpha.1",
178
+ "@deepseek-ai/dsh-typert-protocol": "0.1.6-alpha.1",
179
+ "@deepseek-ai/dsh-typert-registry": "0.1.6-alpha.1",
180
+ "@deepseek-ai/dsh-user-approval": "0.1.6-alpha.1",
181
+ "@deepseek-ai/dsh-user-questions": "0.1.6-alpha.1",
145
182
  "@deepseek-ai/schemastery": "^3.18.1",
146
183
  "@types/node": "^22.0.0",
147
184
  "@xmoon76/pi-tui": "^0.84.4",
148
185
  "@xterm/headless": "5.5.0",
149
186
  "husky": "^9.1.7",
187
+ "immer": "^10.1.1",
150
188
  "semver": "7.8.5",
151
189
  "tsdown": "0.22.0",
152
190
  "tsx": "^4.23.12",
153
191
  "typescript": "^5.9.0",
154
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
155
- "@deepseek-ai/dsh-persona": "0.1.5-rc.1",
156
- "@deepseek-ai/dsh-agent-instructions": "0.1.5-rc.1",
157
- "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.1",
158
- "@deepseek-ai/dsh-tool-fs-search": "0.1.5-rc.1",
159
- "@deepseek-ai/dsh-tool-jobs": "0.1.5-rc.1",
160
- "@deepseek-ai/dsh-skill-filesystem": "0.1.5-rc.1",
161
- "@deepseek-ai/dsh-tool-skill": "0.1.5-rc.1",
162
- "@deepseek-ai/dsh-command-goal": "0.1.5-rc.1",
163
- "@deepseek-ai/dsh-tool-goal": "0.1.5-rc.1",
164
- "@deepseek-ai/dsh-compaction-basic": "0.1.5-rc.1",
165
- "@deepseek-ai/dsh-command-compact": "0.1.5-rc.1",
166
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.5-rc.1",
167
- "@deepseek-ai/dsh-tool-subagent-control": "0.1.5-rc.1",
168
- "@deepseek-ai/dsh-tool-subagent": "0.1.5-rc.1",
169
- "@deepseek-ai/dsh-workflow-worker-thread": "0.1.5-rc.1",
170
- "@deepseek-ai/dsh-tool-ralph": "0.1.5-rc.1",
171
- "@deepseek-ai/dsh-tool-ask-user": "0.1.5-rc.1",
172
- "@deepseek-ai/dsh-tool-web": "0.1.5-rc.1",
173
- "@deepseek-ai/dsh-agent-tool-presentation": "0.1.5-rc.1",
174
- "@deepseek-ai/dsh-terminal": "0.1.5-rc.1",
175
- "@deepseek-ai/dsh-fs-local": "0.1.5-rc.1",
176
- "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.5-rc.1",
177
- "@deepseek-ai/dsh-tool-cordis": "0.1.5-rc.1",
178
- "@deepseek-ai/dsh-agent-loop-testkit": "0.1.5-rc.1",
179
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.5-rc.1"
192
+ "zustand": "~4.4.7"
180
193
  },
181
194
  "engines": {
182
195
  "node": "^22.19.0 || >=24"
@@ -201,10 +214,20 @@
201
214
  "smoke:unstable": "node scripts/unstable-plugin-smoke.mjs",
202
215
  "smoke:pi2dsh": "node scripts/pi2dsh-compat-smoke.mjs",
203
216
  "smoke:official-presets": "node scripts/official-presets-smoke.mjs",
217
+ "smoke:remote-session-read": "node --import tsx/esm scripts/dsh-remote-session-read-smoke.mjs",
218
+ "smoke:remote-session-read-parity": "node --import tsx/esm scripts/dsh-remote-session-read-parity-smoke.mjs",
219
+ "smoke:remote-surface-authority-parity": "node --import tsx/esm scripts/dsh-remote-surface-authority-parity-smoke.mjs",
220
+ "smoke:remote-task-read-parity": "node --import tsx/esm scripts/dsh-remote-task-read-parity-smoke.mjs",
221
+ "smoke:remote-presentation-parity": "node --import tsx/esm scripts/dsh-remote-presentation-parity-smoke.mjs",
222
+ "smoke:remote-d1-closure": "node --import tsx/esm scripts/dsh-remote-d1-closure-smoke.mjs",
223
+ "smoke:remote-d2-write": "node --import tsx/esm scripts/dsh-remote-d2-write-smoke.mjs",
224
+ "smoke:remote-d2-lifecycle": "node scripts/dsh-remote-d2.3-parity-smoke.mjs",
204
225
  "smoke:boundary": "node scripts/dsh-runtime-boundary-smoke.mjs",
226
+ "smoke:startup-strictness": "node scripts/startup-strictness-smoke.mjs",
205
227
  "dsh:source:pack": "node scripts/dsh-source-pack.mjs",
206
228
  "compat:dsh:source": "node scripts/dsh-source-verify.mjs",
207
229
  "compat:dsh:npm": "node scripts/dsh-npm-verify.mjs",
230
+ "compat:dsh:client-family": "node scripts/dsh-client-family-compat.mjs",
208
231
  "prepare:dsh:test": "node scripts/prepare-dsh-test-environment.mjs",
209
232
  "gate:source-leak": "node scripts/dsh-source-leak-gate.mjs",
210
233
  "gate:installation-doc": "node scripts/installation-doc-gate.mjs",
@@ -227,7 +250,7 @@
227
250
  "verify:prepush:nofork": "pnpm test:docs && pnpm test:tooling && pnpm gate:installation-doc && pnpm gate:pi-divergence-ledger && pnpm gate:pi-vendor-diff --strict && node scripts/naming-gate.mjs && node scripts/check-no-session-events.mjs && pnpm gate:boundary && pnpm gate:keybindings && pnpm audit --prod --audit-level high && pnpm pack:release",
228
251
  "gate:boundary": "node scripts/client-boundary-gate.mjs",
229
252
  "gate:keybindings": "node --import tsx/esm scripts/check-host-keybindings.mts",
230
- "test:tooling": "node scripts/run-with-temp-root.mjs node --test test/dev-environment.test.mjs test/dev-bootstrap-ephemeral.test.mjs test/pre-push-hook.test.mjs test/pre-push-stages.test.mjs test/dsh-ci-context.test.mjs test/dsh-distribution.test.mjs test/dsh-npm-verify.test.mjs test/dsh-peer-window.test.mjs test/dsh-process.test.mjs test/dsh-runtime-boundary.test.mjs test/dsh-source-identity.test.mjs test/dsh-source-leak.test.mjs test/release-context.test.mjs test/release-notes.test.mjs test/source-mode-rules.test.mjs test/client-boundary-gate.test.mjs test/tarball-source-install.test.mjs test/pi2dsh-compat-smoke.test.mjs test/temp-hygiene-gate.test.mjs test/pi-vendor-diff-gate.test.mjs test/pi-divergence-ledger-gate.test.mjs test/run-with-temp-root.test.mjs test/raw-persistence-coupling-gate.test.mjs",
253
+ "test:tooling": "node scripts/run-with-temp-root.mjs node --test test/dev-environment.test.mjs test/dev-bootstrap-ephemeral.test.mjs test/client-server-migration.test.mjs test/pre-push-hook.test.mjs test/pre-push-stages.test.mjs test/dsh-ci-context.test.mjs test/dsh-distribution.test.mjs test/dsh-npm-verify.test.mjs test/dsh-peer-window.test.mjs test/dsh-process.test.mjs test/dsh-runtime-boundary.test.mjs test/dsh-source-identity.test.mjs test/dsh-source-leak.test.mjs test/release-context.test.mjs test/release-notes.test.mjs test/source-mode-rules.test.mjs test/client-boundary-gate.test.mjs test/tarball-source-install.test.mjs test/pi2dsh-compat-smoke.test.mjs test/temp-hygiene-gate.test.mjs test/pi-vendor-diff-gate.test.mjs test/pi-divergence-ledger-gate.test.mjs test/run-with-temp-root.test.mjs test/raw-persistence-coupling-gate.test.mjs",
231
254
  "test:product": "node scripts/run-with-temp-root.mjs node --test test/*.test.ts test/tarball-smoke.test.mjs"
232
255
  }
233
256
  }