@xmoon76/dsh-pi-tui 0.4.9 → 0.5.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.
@@ -0,0 +1,80 @@
1
+ import { readFileSync, realpathSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ //#region src/client/launcher/version.ts
4
+ /**
5
+ * The Client-local launcher/version reads: the installed dsh (DeepSeek
6
+ * Harness CLI) version, resolved from the launcher's real path — `process.argv[1]`
7
+ * is the `dsh` bin, whose realpath walks up to the `@deepseek-ai/dsh/package.json`
8
+ * that owns it — plus the bundle's OWN version reads (`bundleVersion`,
9
+ * `packageVersion`). The header and the welcome card show the harness the TUI
10
+ * runs on, not this bundle's own patch level; `dshVersion` is undefined when
11
+ * the launcher path is unreadable. The combined welcome-card display line lives
12
+ * in the application presentation owner (`app/surface/version-display.ts`).
13
+ *
14
+ * This is Client-local platform IO: it reads the local process argv and the
15
+ * locally installed package manifests. The zero-dependency startup island keeps
16
+ * its own private comparator and never imports this module.
17
+ * @module @xmoon76/dsh-pi-tui/client/launcher/version
18
+ */
19
+ /** @returns the installed dsh version string, or undefined. */
20
+ function dshVersion() {
21
+ const bin = process.argv[1];
22
+ if (bin === void 0) return void 0;
23
+ try {
24
+ let dir = dirname(realpathSync(bin));
25
+ for (let depth = 0; depth < 8; depth += 1) {
26
+ try {
27
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
28
+ if (pkg.name === "@deepseek-ai/dsh" && typeof pkg.version === "string") return pkg.version;
29
+ } catch {}
30
+ const parent = dirname(dir);
31
+ if (parent === dir) return void 0;
32
+ dir = parent;
33
+ }
34
+ } catch {}
35
+ }
36
+ /**
37
+ * The bundle's OWN manifest version (`@xmoon76/dsh-pi-tui`), resolved by
38
+ * walking up from THIS module's directory instead of assuming a fixed depth:
39
+ * the source layout (`src/client/launcher/**`, the depth TS8-F2 introduced)
40
+ * and the flat packed layout (`dist/*.mjs`) both reach the shipped manifest,
41
+ * and an installed copy reaches its own `node_modules` manifest first.
42
+ * @returns the version string, or undefined when no own manifest is reachable.
43
+ */
44
+ function ownBundleVersion() {
45
+ let dir = import.meta.dirname;
46
+ for (let depth = 0; depth < 8; depth += 1) {
47
+ try {
48
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
49
+ if (pkg.name === "@xmoon76/dsh-pi-tui" && typeof pkg.version === "string") return pkg.version;
50
+ } catch {}
51
+ const parent = dirname(dir);
52
+ if (parent === dir) return void 0;
53
+ dir = parent;
54
+ }
55
+ }
56
+ /**
57
+ * The bundle's own version, read from package.json at runtime so the welcome
58
+ * card never drifts from the shipped version. The DISPLAYED version prefers
59
+ * the installed dsh version (`dshVersion` — shared with the header badge),
60
+ * falling back to this one.
61
+ * @returns the version string, or a fallback when the file is unreadable.
62
+ */
63
+ function packageVersion() {
64
+ return dshVersion() ?? ownBundleVersion() ?? "0.0.0";
65
+ }
66
+ /**
67
+ * The BUNDLE's OWN version (`@xmoon76/dsh-pi-tui`'s package.json),
68
+ * INDEPENDENT of the installed dsh version. The status snapshot's
69
+ * host.tuiVersion and the footer's `version(format=tui)` item must report
70
+ * the TUI's own patch level — the welcome-card helper above deliberately
71
+ * prefers the dsh version for display, so reusing it made `tui` show the
72
+ * harness version (and `both` show the dsh version twice) inside a real
73
+ * dsh installation (the review's P2).
74
+ * @returns the bundle version string, or a fallback when the file is unreadable.
75
+ */
76
+ function bundleVersion() {
77
+ return ownBundleVersion() ?? "0.0.0";
78
+ }
79
+ //#endregion
80
+ export { dshVersion as n, packageVersion as r, bundleVersion as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmoon76/dsh-pi-tui",
3
- "version": "0.4.9",
3
+ "version": "0.5.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>",
@@ -84,124 +84,146 @@
84
84
  "peerDependencies": {
85
85
  "@deepseek-ai/cordis": "~4.0.4",
86
86
  "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
87
- "@deepseek-ai/dsh-agent": ">=0.1.7-rc.2",
88
- "@deepseek-ai/dsh-agent-default-model": ">=0.1.7-rc.2",
89
- "@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-rc.2",
90
- "@deepseek-ai/dsh-api-session-controller": ">=0.1.7-rc.2",
91
- "@deepseek-ai/dsh-authorization": ">=0.1.7-rc.2",
92
- "@deepseek-ai/dsh-cmdline": ">=0.1.7-rc.2",
93
- "@deepseek-ai/dsh-commands": ">=0.1.7-rc.2",
94
- "@deepseek-ai/dsh-credentials": ">=0.1.7-rc.2",
95
- "@deepseek-ai/dsh-goal": ">=0.1.7-rc.2",
96
- "@deepseek-ai/dsh-jobs": ">=0.1.7-rc.2",
97
- "@deepseek-ai/dsh-llm": ">=0.1.7-rc.2",
98
- "@deepseek-ai/dsh-llm-retry": ">=0.1.7-rc.2",
99
- "@deepseek-ai/dsh-permission-presets": ">=0.1.7-rc.2",
100
- "@deepseek-ai/dsh-plan-mode": ">=0.1.7-rc.2",
101
- "@deepseek-ai/dsh-plugin-manager": ">=0.1.7-rc.2",
102
- "@deepseek-ai/dsh-sandbox-policy": ">=0.1.7-rc.2",
103
- "@deepseek-ai/dsh-session": ">=0.1.7-rc.2",
104
- "@deepseek-ai/dsh-session-log-export": ">=0.1.7-rc.2",
105
- "@deepseek-ai/dsh-session-persistence": ">=0.1.7-rc.2",
106
- "@deepseek-ai/dsh-session-title": ">=0.1.7-rc.2",
107
- "@deepseek-ai/dsh-settings": ">=0.1.7-rc.2",
108
- "@deepseek-ai/dsh-shell": ">=0.1.7-rc.2",
109
- "@deepseek-ai/dsh-skill": ">=0.1.7-rc.2",
110
- "@deepseek-ai/dsh-subagent": ">=0.1.7-rc.2",
111
- "@deepseek-ai/dsh-token-meter": ">=0.1.7-rc.2",
112
- "@deepseek-ai/dsh-tool-todo": ">=0.1.7-rc.2",
113
- "@deepseek-ai/dsh-tool-workflow": ">=0.1.7-rc.2",
114
- "@deepseek-ai/dsh-tools": ">=0.1.7-rc.2",
115
- "@deepseek-ai/dsh-user-approval": ">=0.1.7-rc.2",
116
- "@deepseek-ai/dsh-user-questions": ">=0.1.7-rc.2",
87
+ "@deepseek-ai/dsh-agent": ">=0.2.0-rc.2",
88
+ "@deepseek-ai/dsh-agent-default-model": ">=0.2.0-rc.2",
89
+ "@deepseek-ai/dsh-agent-preset-registry": ">=0.2.0-rc.2",
90
+ "@deepseek-ai/dsh-api-gateway": ">=0.2.0-rc.2",
91
+ "@deepseek-ai/dsh-api-job-controller": ">=0.2.0-rc.2",
92
+ "@deepseek-ai/dsh-api-remotes": ">=0.2.0-rc.2",
93
+ "@deepseek-ai/dsh-api-session-controller": ">=0.2.0-rc.2",
94
+ "@deepseek-ai/dsh-api-settings-controller": ">=0.2.0-rc.2",
95
+ "@deepseek-ai/dsh-authorization": ">=0.2.0-rc.2",
96
+ "@deepseek-ai/dsh-client-connection": ">=0.2.0-rc.2",
97
+ "@deepseek-ai/dsh-client-file-upload": ">=0.2.0-rc.2",
98
+ "@deepseek-ai/dsh-cmdline": ">=0.2.0-rc.2",
99
+ "@deepseek-ai/dsh-commands": ">=0.2.0-rc.2",
100
+ "@deepseek-ai/dsh-credentials": ">=0.2.0-rc.2",
101
+ "@deepseek-ai/dsh-file-reference": ">=0.2.0-rc.2",
102
+ "@deepseek-ai/dsh-goal": ">=0.2.0-rc.2",
103
+ "@deepseek-ai/dsh-jobs": ">=0.2.0-rc.2",
104
+ "@deepseek-ai/dsh-llm": ">=0.2.0-rc.2",
105
+ "@deepseek-ai/dsh-llm-retry": ">=0.2.0-rc.2",
106
+ "@deepseek-ai/dsh-permission-presets": ">=0.2.0-rc.2",
107
+ "@deepseek-ai/dsh-plan-mode": ">=0.2.0-rc.2",
108
+ "@deepseek-ai/dsh-plugin-manager": ">=0.2.0-rc.2",
109
+ "@deepseek-ai/dsh-sandbox-policy": ">=0.2.0-rc.2",
110
+ "@deepseek-ai/dsh-session": ">=0.2.0-rc.2",
111
+ "@deepseek-ai/dsh-session-log-export": ">=0.2.0-rc.2",
112
+ "@deepseek-ai/dsh-session-persistence": ">=0.2.0-rc.2",
113
+ "@deepseek-ai/dsh-session-stats": ">=0.2.0-rc.2",
114
+ "@deepseek-ai/dsh-session-title": ">=0.2.0-rc.2",
115
+ "@deepseek-ai/dsh-session-turn-outline": ">=0.2.0-rc.2",
116
+ "@deepseek-ai/dsh-settings": ">=0.2.0-rc.2",
117
+ "@deepseek-ai/dsh-shell": ">=0.2.0-rc.2",
118
+ "@deepseek-ai/dsh-skill": ">=0.2.0-rc.2",
119
+ "@deepseek-ai/dsh-subagent": ">=0.2.0-rc.2",
120
+ "@deepseek-ai/dsh-token-meter": ">=0.2.0-rc.2",
121
+ "@deepseek-ai/dsh-tool-todo": ">=0.2.0-rc.2",
122
+ "@deepseek-ai/dsh-tool-workflow": ">=0.2.0-rc.2",
123
+ "@deepseek-ai/dsh-tools": ">=0.2.0-rc.2",
124
+ "@deepseek-ai/dsh-typert-protocol": ">=0.2.0-rc.2",
125
+ "@deepseek-ai/dsh-typert-registry": ">=0.2.0-rc.2",
126
+ "@deepseek-ai/dsh-user-approval": ">=0.2.0-rc.2",
127
+ "@deepseek-ai/dsh-user-questions": ">=0.2.0-rc.2",
117
128
  "@deepseek-ai/schemastery": "~3.18.4"
118
129
  },
119
130
  "devDependencies": {
120
131
  "@deepseek-ai/cordis": "~4.0.4",
121
132
  "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
122
- "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
123
- "@deepseek-ai/dsh-agent-default-model": "0.1.7-rc.2",
124
- "@deepseek-ai/dsh-agent-instructions": "0.1.7-rc.2",
125
- "@deepseek-ai/dsh-agent-loop": "0.1.7-rc.2",
126
- "@deepseek-ai/dsh-agent-loop-testkit": "0.1.7-rc.2",
127
- "@deepseek-ai/dsh-agent-preset": "0.1.7-rc.2",
128
- "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-rc.2",
129
- "@deepseek-ai/dsh-agent-tool-presentation": "0.1.7-rc.2",
130
- "@deepseek-ai/dsh-api-gateway": "0.1.7-rc.2",
131
- "@deepseek-ai/dsh-api-job-controller": "0.1.7-rc.2",
132
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
133
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
134
- "@deepseek-ai/dsh-attachment": "0.1.7-rc.2",
135
- "@deepseek-ai/dsh-authorization": "0.1.7-rc.2",
136
- "@deepseek-ai/dsh-brand": "0.1.7-rc.2",
137
- "@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
138
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
139
- "@deepseek-ai/dsh-cmdline": "0.1.7-rc.2",
140
- "@deepseek-ai/dsh-command-compact": "0.1.7-rc.2",
141
- "@deepseek-ai/dsh-command-goal": "0.1.7-rc.2",
142
- "@deepseek-ai/dsh-commands": "0.1.7-rc.2",
143
- "@deepseek-ai/dsh-compaction-basic": "0.1.7-rc.2",
144
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.7-rc.2",
145
- "@deepseek-ai/dsh-credentials": "0.1.7-rc.2",
146
- "@deepseek-ai/dsh-fs-local": "0.1.7-rc.2",
147
- "@deepseek-ai/dsh-goal": "0.1.7-rc.2",
148
- "@deepseek-ai/dsh-invariants": "0.1.7-rc.2",
149
- "@deepseek-ai/dsh-jobs": "0.1.7-rc.2",
150
- "@deepseek-ai/dsh-jobs-local": "0.1.7-rc.2",
151
- "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
152
- "@deepseek-ai/dsh-llm-retry": "0.1.7-rc.2",
153
- "@deepseek-ai/dsh-permission-presets": "0.1.7-rc.2",
154
- "@deepseek-ai/dsh-persona": "0.1.7-rc.2",
155
- "@deepseek-ai/dsh-plan-mode": "0.1.7-rc.2",
156
- "@deepseek-ai/dsh-plugin-manager": "0.1.7-rc.2",
157
- "@deepseek-ai/dsh-remote-mock": "0.1.7-rc.2",
158
- "@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.2",
159
- "@deepseek-ai/dsh-scope": "0.1.7-rc.2",
160
- "@deepseek-ai/dsh-session": "0.1.7-rc.2",
161
- "@deepseek-ai/dsh-session-format": "0.1.7-rc.2",
162
- "@deepseek-ai/dsh-session-format-v3-to-v4": "0.1.7-rc.2",
163
- "@deepseek-ai/dsh-session-log-export": "0.1.7-rc.2",
164
- "@deepseek-ai/dsh-session-persistence": "0.1.7-rc.2",
165
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.2",
166
- "@deepseek-ai/dsh-session-projection": "0.1.7-rc.2",
167
- "@deepseek-ai/dsh-session-query": "0.1.7-rc.2",
168
- "@deepseek-ai/dsh-session-query-sqlite": "0.1.7-rc.2",
169
- "@deepseek-ai/dsh-session-title": "0.1.7-rc.2",
170
- "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
171
- "@deepseek-ai/dsh-shell": "0.1.7-rc.2",
172
- "@deepseek-ai/dsh-skill": "0.1.7-rc.2",
173
- "@deepseek-ai/dsh-skill-filesystem": "0.1.7-rc.2",
174
- "@deepseek-ai/dsh-storage": "0.1.7-rc.2",
175
- "@deepseek-ai/dsh-storage-domain": "0.1.7-rc.2",
176
- "@deepseek-ai/dsh-storage-json": "0.1.7-rc.2",
177
- "@deepseek-ai/dsh-subagent": "0.1.7-rc.2",
178
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.7-rc.2",
179
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
180
- "@deepseek-ai/dsh-terminal": "0.1.7-rc.2",
181
- "@deepseek-ai/dsh-timeout": "0.1.7-rc.2",
182
- "@deepseek-ai/dsh-token-meter": "0.1.7-rc.2",
183
- "@deepseek-ai/dsh-tool-ask-user": "0.1.7-rc.2",
184
- "@deepseek-ai/dsh-tool-cordis": "0.1.7-rc.2",
185
- "@deepseek-ai/dsh-tool-fs": "0.1.7-rc.2",
186
- "@deepseek-ai/dsh-tool-fs-search": "0.1.7-rc.2",
187
- "@deepseek-ai/dsh-tool-goal": "0.1.7-rc.2",
188
- "@deepseek-ai/dsh-tool-jobs": "0.1.7-rc.2",
189
- "@deepseek-ai/dsh-tool-ralph": "0.1.7-rc.2",
190
- "@deepseek-ai/dsh-tool-skill": "0.1.7-rc.2",
191
- "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.7-rc.2",
192
- "@deepseek-ai/dsh-tool-subagent": "0.1.7-rc.2",
193
- "@deepseek-ai/dsh-tool-subagent-control": "0.1.7-rc.2",
194
- "@deepseek-ai/dsh-tool-todo": "0.1.7-rc.2",
195
- "@deepseek-ai/dsh-tool-web": "0.1.7-rc.2",
196
- "@deepseek-ai/dsh-tool-workflow": "0.1.7-rc.2",
197
- "@deepseek-ai/dsh-tools": "0.1.7-rc.2",
198
- "@deepseek-ai/dsh-typert-protocol": "0.1.7-rc.2",
199
- "@deepseek-ai/dsh-typert-registry": "0.1.7-rc.2",
200
- "@deepseek-ai/dsh-user-approval": "0.1.7-rc.2",
201
- "@deepseek-ai/dsh-user-questions": "0.1.7-rc.2",
202
- "@deepseek-ai/dsh-web-app": "0.1.7-rc.2",
203
- "@deepseek-ai/dsh-workspace": "0.1.7-rc.2",
133
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
134
+ "@deepseek-ai/dsh-agent-default-model": "0.2.0-rc.2",
135
+ "@deepseek-ai/dsh-agent-instructions": "0.2.0-rc.2",
136
+ "@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2",
137
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.2.0-rc.2",
138
+ "@deepseek-ai/dsh-agent-preset": "0.2.0-rc.2",
139
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2",
140
+ "@deepseek-ai/dsh-agent-tool-presentation": "0.2.0-rc.2",
141
+ "@deepseek-ai/dsh-api-gateway": "0.2.0-rc.2",
142
+ "@deepseek-ai/dsh-api-job-controller": "0.2.0-rc.2",
143
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2",
144
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
145
+ "@deepseek-ai/dsh-api-settings-controller": "0.2.0-rc.2",
146
+ "@deepseek-ai/dsh-app-boot": "0.2.0-rc.2",
147
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
148
+ "@deepseek-ai/dsh-attachment-local": "0.2.0-rc.2",
149
+ "@deepseek-ai/dsh-authorization": "0.2.0-rc.2",
150
+ "@deepseek-ai/dsh-brand": "0.2.0-rc.2",
151
+ "@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
152
+ "@deepseek-ai/dsh-client-file-upload": "0.2.0-rc.2",
153
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
154
+ "@deepseek-ai/dsh-cmdline": "0.2.0-rc.2",
155
+ "@deepseek-ai/dsh-command-compact": "0.2.0-rc.2",
156
+ "@deepseek-ai/dsh-command-goal": "0.2.0-rc.2",
157
+ "@deepseek-ai/dsh-commands": "0.2.0-rc.2",
158
+ "@deepseek-ai/dsh-compaction-basic": "0.2.0-rc.2",
159
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.0-rc.2",
160
+ "@deepseek-ai/dsh-config-editor": "0.2.0-rc.2",
161
+ "@deepseek-ai/dsh-credentials": "0.2.0-rc.2",
162
+ "@deepseek-ai/dsh-credentials-local": "0.2.0-rc.2",
163
+ "@deepseek-ai/dsh-file-reference": "0.2.0-rc.2",
164
+ "@deepseek-ai/dsh-file-reference-local": "0.2.0-rc.2",
165
+ "@deepseek-ai/dsh-fs-local": "0.2.0-rc.2",
166
+ "@deepseek-ai/dsh-goal": "0.2.0-rc.2",
167
+ "@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
168
+ "@deepseek-ai/dsh-jobs": "0.2.0-rc.2",
169
+ "@deepseek-ai/dsh-jobs-local": "0.2.0-rc.2",
170
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
171
+ "@deepseek-ai/dsh-llm-retry": "0.2.0-rc.2",
172
+ "@deepseek-ai/dsh-permission-presets": "0.2.0-rc.2",
173
+ "@deepseek-ai/dsh-persona": "0.2.0-rc.2",
174
+ "@deepseek-ai/dsh-plan-mode": "0.2.0-rc.2",
175
+ "@deepseek-ai/dsh-plugin-manager": "0.2.0-rc.2",
176
+ "@deepseek-ai/dsh-remote-mock": "0.2.0-rc.2",
177
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
178
+ "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
179
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
180
+ "@deepseek-ai/dsh-session-format": "0.2.0-rc.2",
181
+ "@deepseek-ai/dsh-session-format-v3-to-v4": "0.2.0-rc.2",
182
+ "@deepseek-ai/dsh-session-log-export": "0.2.0-rc.2",
183
+ "@deepseek-ai/dsh-session-persistence": "0.2.0-rc.2",
184
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.0-rc.2",
185
+ "@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
186
+ "@deepseek-ai/dsh-session-query": "0.2.0-rc.2",
187
+ "@deepseek-ai/dsh-session-query-sqlite": "0.2.0-rc.2",
188
+ "@deepseek-ai/dsh-session-stats": "0.2.0-rc.2",
189
+ "@deepseek-ai/dsh-session-title": "0.2.0-rc.2",
190
+ "@deepseek-ai/dsh-session-turn-outline": "0.2.0-rc.2",
191
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.2",
192
+ "@deepseek-ai/dsh-shell": "0.2.0-rc.2",
193
+ "@deepseek-ai/dsh-skill": "0.2.0-rc.2",
194
+ "@deepseek-ai/dsh-skill-filesystem": "0.2.0-rc.2",
195
+ "@deepseek-ai/dsh-storage": "0.2.0-rc.2",
196
+ "@deepseek-ai/dsh-storage-domain": "0.2.0-rc.2",
197
+ "@deepseek-ai/dsh-storage-json": "0.2.0-rc.2",
198
+ "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
199
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.2.0-rc.2",
200
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
201
+ "@deepseek-ai/dsh-terminal": "0.2.0-rc.2",
202
+ "@deepseek-ai/dsh-timeout": "0.2.0-rc.2",
203
+ "@deepseek-ai/dsh-token-meter": "0.2.0-rc.2",
204
+ "@deepseek-ai/dsh-tool-ask-user": "0.2.0-rc.2",
205
+ "@deepseek-ai/dsh-tool-cordis": "0.2.0-rc.2",
206
+ "@deepseek-ai/dsh-tool-fs": "0.2.0-rc.2",
207
+ "@deepseek-ai/dsh-tool-fs-search": "0.2.0-rc.2",
208
+ "@deepseek-ai/dsh-tool-goal": "0.2.0-rc.2",
209
+ "@deepseek-ai/dsh-tool-jobs": "0.2.0-rc.2",
210
+ "@deepseek-ai/dsh-tool-ralph": "0.2.0-rc.2",
211
+ "@deepseek-ai/dsh-tool-skill": "0.2.0-rc.2",
212
+ "@deepseek-ai/dsh-tool-str-replace-editor": "0.2.0-rc.2",
213
+ "@deepseek-ai/dsh-tool-subagent": "0.2.0-rc.2",
214
+ "@deepseek-ai/dsh-tool-subagent-control": "0.2.0-rc.2",
215
+ "@deepseek-ai/dsh-tool-todo": "0.2.0-rc.2",
216
+ "@deepseek-ai/dsh-tool-web": "0.2.0-rc.2",
217
+ "@deepseek-ai/dsh-tool-workflow": "0.2.0-rc.2",
218
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
219
+ "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
220
+ "@deepseek-ai/dsh-typert-registry": "0.2.0-rc.2",
221
+ "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
222
+ "@deepseek-ai/dsh-user-questions": "0.2.0-rc.2",
223
+ "@deepseek-ai/dsh-web-app": "0.2.0-rc.2",
224
+ "@deepseek-ai/dsh-workspace": "0.2.0-rc.2",
204
225
  "@deepseek-ai/schemastery": "~3.18.4",
226
+ "@stencil-hq/tern": "0.1.0",
205
227
  "@types/node": "^22.0.0",
206
228
  "@xmoon76/pi-tui": "^0.84.4",
207
229
  "@xterm/headless": "5.5.0",
@@ -248,7 +270,9 @@
248
270
  "smoke:remote-d1-closure": "node --import tsx/esm scripts/dsh-remote-d1-closure-smoke.mjs",
249
271
  "smoke:remote-d2-fork": "node scripts/dsh-remote-d2.4-fork-parity-smoke.mjs",
250
272
  "smoke:remote-d2-closure": "node scripts/dsh-remote-d2-closure-smoke.mjs",
273
+ "smoke:remote-session-lifecycle-parity": "node scripts/dsh-remote-session-lifecycle-parity-smoke.mjs",
251
274
  "smoke:boundary": "node scripts/dsh-runtime-boundary-smoke.mjs",
275
+ "smoke:pi-tui-file-reference-built": "node --import tsx/esm scripts/pi-tui-file-reference-built-smoke.mjs",
252
276
  "smoke:startup-strictness": "node scripts/startup-strictness-smoke.mjs",
253
277
  "dsh:source:pack": "node scripts/dsh-source-pack.mjs",
254
278
  "compat:dsh:source": "node scripts/dsh-source-verify.mjs",
@@ -272,11 +296,12 @@
272
296
  "dev:doctor": "node scripts/dev-doctor.mjs",
273
297
  "dev:bootstrap": "node scripts/dev-bootstrap.mjs",
274
298
  "dev:shell": "node scripts/dev-shell.mjs",
275
- "verify:prepush": "pnpm typecheck:fork && pnpm typecheck:bench && pnpm test:fork && 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",
276
- "verify:prepush:nofork": "pnpm typecheck:bench && 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",
299
+ "verify:prepush": "pnpm typecheck:fork && pnpm typecheck:bench && pnpm test:fork && 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:architecture && pnpm gate:keybindings && pnpm audit --prod --audit-level high && pnpm pack:release",
300
+ "verify:prepush:nofork": "pnpm typecheck:bench && 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:architecture && pnpm gate:keybindings && pnpm audit --prod --audit-level high && pnpm pack:release",
277
301
  "gate:boundary": "node scripts/client-boundary-gate.mjs",
302
+ "gate:architecture": "node scripts/application-architecture-gate.mjs",
278
303
  "gate:keybindings": "node --import tsx/esm scripts/check-host-keybindings.mts",
279
- "test:tooling": "node scripts/run-with-temp-root.mjs node --test test/bench-smoke.test.mjs 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-p1-profile-smoke.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 test/dsh-preset-parity.test.mjs test/retired-source-scan.test.mjs test/runtime-hardening-profile.test.mjs",
304
+ "test:tooling": "node scripts/run-with-temp-root.mjs node --test test/bench-smoke.test.mjs 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-p1-profile-smoke.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/application-architecture-gate.test.mjs test/host-keybindings-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 test/dsh-preset-parity.test.mjs test/retired-source-scan.test.mjs test/runtime-hardening-profile.test.mjs",
280
305
  "test:product": "node scripts/run-with-temp-root.mjs node --test test/*.test.ts test/tarball-smoke.test.mjs",
281
306
  "gen:dsh-presets": "node scripts/generate-dsh-presets.mjs",
282
307
  "gate:dsh-preset-parity": "node scripts/generate-dsh-presets.mjs --check",
@@ -1 +0,0 @@
1
- import { EventEmitter } from "events";