dsh-oc-tui 0.2.0 → 0.3.0
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.md +21 -563
- package/bin/mcp-sse-bridge.mjs +499 -499
- package/docs/assets/conversation.png +0 -0
- package/docs/assets/cover.png +0 -0
- package/docs/assets/home.png +0 -0
- package/docs/assets/settings.png +0 -0
- package/docs/dsh-std-/346/216/245/345/205/245/350/257/264/346/230/216.md +566 -0
- package/docs/user-guide.md +616 -0
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +607 -593
- package/dsh-plugin.json +69 -69
- package/lib/boot-block.js +129 -0
- package/lib/diagnostics.js +162 -120
- package/lib/dsh-version.js +161 -0
- package/lib/git-branch.js +157 -157
- package/lib/i18n.js +283 -283
- package/lib/image.js +2 -1
- package/lib/index.js +5183 -4812
- package/lib/locales/ar.js +670 -635
- package/lib/locales/de.js +639 -604
- package/lib/locales/en.js +35 -0
- package/lib/locales/es.js +639 -604
- package/lib/locales/fr.js +639 -604
- package/lib/locales/id.js +641 -606
- package/lib/locales/it.js +639 -604
- package/lib/locales/ja.js +639 -604
- package/lib/locales/ko.js +639 -604
- package/lib/locales/nl.js +639 -604
- package/lib/locales/pl.js +653 -618
- package/lib/locales/pt-BR.js +639 -604
- package/lib/locales/ru.js +653 -618
- package/lib/locales/tr.js +639 -604
- package/lib/locales/vi.js +641 -606
- package/lib/locales/zh-CN.js +640 -605
- package/lib/locales/zh-TW.js +640 -605
- package/lib/markdown.js +101 -27
- package/lib/mcp-monitor.js +189 -0
- package/lib/mcp-skill.js +93 -93
- package/lib/mcp.js +865 -838
- package/lib/model-route.js +66 -0
- package/lib/providers.js +712 -712
- package/lib/screenshot.js +140 -0
- package/lib/splash-opencode.js +29 -26
- package/lib/startup.js +66 -48
- package/lib/term.js +53 -11
- package/lib/themes.js +101 -0
- package/lib/ui.js +685 -443
- package/lib/updates.js +5 -2
- package/lib/web-settings.js +52 -21
- package/package.json +160 -146
- package/skills/mcp-import/SKILL.md +216 -216
package/lib/updates.js
CHANGED
|
@@ -12,7 +12,7 @@ import { homedir } from 'node:os'
|
|
|
12
12
|
import { fileURLToPath } from 'node:url'
|
|
13
13
|
import { stripAnsi } from './util.js'
|
|
14
14
|
import { SETTINGS_MENU, resolveTuiSetting } from './web-settings.js'
|
|
15
|
-
import { t, valueChoices } from './i18n.js'
|
|
15
|
+
import { t, tv, valueChoices } from './i18n.js'
|
|
16
16
|
|
|
17
17
|
export const DSH_PACKAGE = '@deepseek-ai/dsh'
|
|
18
18
|
export const TUI_PACKAGE = 'dsh-oc-tui'
|
|
@@ -899,7 +899,10 @@ export function buildUpdateItems(state) {
|
|
|
899
899
|
value: startupCheck,
|
|
900
900
|
// The stored id is what gets committed; the row shows its catalog label
|
|
901
901
|
// (the same valueLabel convention lib/web-settings.js uses for choice rows).
|
|
902
|
-
|
|
902
|
+
// `tv()` and not `t()`: `on`/`off` are shared `common.*` values, and a
|
|
903
|
+
// literal `value.on` key has no catalog entry — `t()` would then paint the
|
|
904
|
+
// key itself, which is exactly how this row used to read "value.on".
|
|
905
|
+
valueLabel: tv(startupCheck === 'off' ? 'off' : 'on'),
|
|
903
906
|
options: valueChoices(['on', 'off']),
|
|
904
907
|
revision: state.startupCheckRevision ?? 0,
|
|
905
908
|
disabled: state.startupCheck === null || state.settingsWritable === false,
|
package/lib/web-settings.js
CHANGED
|
@@ -2,6 +2,7 @@ import z from '@deepseek-ai/schemastery'
|
|
|
2
2
|
import { dirname } from 'node:path'
|
|
3
3
|
import { collectServers } from './mcp.js'
|
|
4
4
|
import { LOCALES, isLocaleId, localeInfo, resolveLocale, setLocale, t, tn, tv, valueChoices } from './i18n.js'
|
|
5
|
+
import { DEFAULT_THEME, THEME_IDS, themeId } from './themes.js'
|
|
5
6
|
import {
|
|
6
7
|
ACCOUNT_ROUTE,
|
|
7
8
|
URL_FAMILIES,
|
|
@@ -32,8 +33,10 @@ export const TUI_SETTINGS = [
|
|
|
32
33
|
// setting must not drag the other's language with it. `system` follows the
|
|
33
34
|
// POSIX/Windows language variables (see lib/i18n.js detectSystemLocale).
|
|
34
35
|
{ namespace: 'tui-locale', field: 'preference', configField: 'locale' },
|
|
36
|
+
{ namespace: 'tui-theme', field: 'preference', configField: 'theme' },
|
|
35
37
|
{ namespace: 'ui-conversation', field: 'busyEnter', configField: 'busyEnter' },
|
|
36
38
|
{ namespace: 'tui-updates', field: 'startupCheck', configField: 'startupCheck' },
|
|
39
|
+
{ namespace: 'tui-screenshot', field: 'directory', configField: 'screenshotDirectory' },
|
|
37
40
|
// TUI-owned graphics pipeline. `graphics: off` disables protocol rendering
|
|
38
41
|
// entirely; `imageFallback` decides what pixels become on terminals with no
|
|
39
42
|
// graphics protocol; `mermaid` gates the provider chain (local mmdc and/or
|
|
@@ -42,6 +45,10 @@ export const TUI_SETTINGS = [
|
|
|
42
45
|
{ namespace: 'tui-graphics', field: 'imageFallback', configField: 'imageFallback' },
|
|
43
46
|
{ namespace: 'tui-graphics', field: 'imageMaxRows', configField: 'imageMaxRows' },
|
|
44
47
|
{ namespace: 'tui-graphics', field: 'mermaid', configField: 'mermaid' },
|
|
48
|
+
// Developer options. `contextDetails: hide` drops the harness's own
|
|
49
|
+
// plumbing boxes (runtime-context snapshot, system prompt, system
|
|
50
|
+
// reminders) from the transcript; they are collapsible either way.
|
|
51
|
+
{ namespace: 'tui-dev', field: 'contextDetails', configField: 'contextDetails' },
|
|
45
52
|
]
|
|
46
53
|
|
|
47
54
|
const WEB_SETTING_SCHEMAS = [
|
|
@@ -54,12 +61,15 @@ const WEB_SETTING_SCHEMAS = [
|
|
|
54
61
|
['ui-conversation', z.object({ busyEnter: z.union(['queue', 'steer']).default('queue') })],
|
|
55
62
|
['tui-updates', z.object({ startupCheck: z.union(['on', 'off']).default('on') })],
|
|
56
63
|
['tui-locale', z.object({ preference: z.string().default('system') })],
|
|
64
|
+
['tui-theme', z.object({ preference: z.union(THEME_IDS).default(DEFAULT_THEME) })],
|
|
65
|
+
['tui-screenshot', z.object({ directory: z.string().default('') })],
|
|
57
66
|
['tui-graphics', z.object({
|
|
58
67
|
graphics: z.union(['auto', 'off']).default('auto'),
|
|
59
68
|
imageFallback: z.union(['halfblock', 'chip']).default('halfblock'),
|
|
60
69
|
imageMaxRows: z.union(['10', '15', '20', '28', '40']).default('20'),
|
|
61
70
|
mermaid: z.union(['auto', 'local', 'off']).default('auto'),
|
|
62
71
|
})],
|
|
72
|
+
['tui-dev', z.object({ contextDetails: z.union(['show', 'hide']).default('show') })],
|
|
63
73
|
]
|
|
64
74
|
|
|
65
75
|
// The settings dialog's left menu: Main keeps the general settings, Model
|
|
@@ -99,16 +109,17 @@ function effortOptions(models, selectedModel) {
|
|
|
99
109
|
return undefined
|
|
100
110
|
}
|
|
101
111
|
|
|
112
|
+
function hasConfigForms(settings) {
|
|
113
|
+
try { return Boolean(settings?.ownerContext?.configEditor) } catch { return false }
|
|
114
|
+
}
|
|
115
|
+
|
|
102
116
|
export function installWebSettingSchemas(ctx) {
|
|
103
117
|
const settings = ctx.get('settings')
|
|
104
118
|
if (!settings) return
|
|
105
|
-
//
|
|
106
|
-
// (
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
// failure must never take the TUI down, so registration is guarded as a
|
|
110
|
-
// whole rather than trusted to succeed.
|
|
111
|
-
if (typeof settings.register !== 'function') return
|
|
119
|
+
// Some Config-form hosts also expose a legacy register() compatibility API,
|
|
120
|
+
// while update() still writes only plugin entries. Do not create namespaces
|
|
121
|
+
// that their settings page cannot update.
|
|
122
|
+
if (typeof settings.register !== 'function' || hasConfigForms(settings)) return
|
|
112
123
|
try {
|
|
113
124
|
const registered = new Set(settings.describe().map((entry) => String(entry.ns)))
|
|
114
125
|
for (const [namespace, schema] of WEB_SETTING_SCHEMAS) {
|
|
@@ -134,7 +145,7 @@ export async function loadWebSettings(ctx) {
|
|
|
134
145
|
const add = (ns, field, label, options, extra = {}) => {
|
|
135
146
|
const owned = TUI_SETTINGS.some((entry) => entry.namespace === ns && entry.field === field)
|
|
136
147
|
const target = owned ? resolveTuiSetting(ctx, descriptors, ns, field) : undefined
|
|
137
|
-
const descriptor = target?.descriptor
|
|
148
|
+
const descriptor = owned ? target?.descriptor : descriptors.get(ns)
|
|
138
149
|
if (!descriptor || typeof descriptor.value !== 'object' || descriptor.value === null) return
|
|
139
150
|
const raw = target ? target.value : descriptor.value[field]
|
|
140
151
|
const stored = raw === undefined ? 'system' : String(raw)
|
|
@@ -171,7 +182,18 @@ export async function loadWebSettings(ctx) {
|
|
|
171
182
|
valueLabel: describeLocale(normalizePreference(locale.value)),
|
|
172
183
|
})
|
|
173
184
|
}
|
|
185
|
+
const theme = resolveTuiSetting(ctx, descriptors, 'tui-theme', 'preference')
|
|
186
|
+
if (theme) {
|
|
187
|
+
const selected = themeId(theme.value)
|
|
188
|
+
add('tui-theme', 'preference', t('settings.theme'), THEME_IDS.map((id) => ({
|
|
189
|
+
value: id, label: t('theme.' + id),
|
|
190
|
+
})), { value: selected, valueLabel: t('theme.' + selected) })
|
|
191
|
+
}
|
|
174
192
|
add('ui-conversation', 'busyEnter', t('settings.busyEnter'), ['queue', 'steer'], { translateValues: true })
|
|
193
|
+
const screenshotDirectory = resolveTuiSetting(ctx, descriptors, 'tui-screenshot', 'directory')?.value
|
|
194
|
+
add('tui-screenshot', 'directory', t('screenshot.directory'), undefined, {
|
|
195
|
+
valueLabel: screenshotDirectory || tv('system'),
|
|
196
|
+
})
|
|
175
197
|
const agentPresets = ctx.get('agentPresets')
|
|
176
198
|
let presetOptions
|
|
177
199
|
if (agentPresets) {
|
|
@@ -206,6 +228,10 @@ export async function loadWebSettings(ctx) {
|
|
|
206
228
|
let settingsDocumentPath
|
|
207
229
|
try { settingsDocumentPath = settings.documentPath } catch { /* no configuration editor */ }
|
|
208
230
|
if (settingsDocumentPath) items.push({ label: t('settings.settingsFile'), value: settingsDocumentPath, disabled: true })
|
|
231
|
+
// Last, and deliberately small: the switches here change what the transcript
|
|
232
|
+
// draws, not how the session behaves.
|
|
233
|
+
items.push({ kind: 'header', label: t('settings.developer'), value: '', disabled: true })
|
|
234
|
+
add('tui-dev', 'contextDetails', t('settings.contextDetails'), ['show', 'hide'], { translateValues: true })
|
|
209
235
|
return { settings, items, title: t('settings.title'), menu: SETTINGS_MENU, menuIndex: 0 }
|
|
210
236
|
}
|
|
211
237
|
|
|
@@ -267,22 +293,27 @@ function ownEntryDescriptor(ctx, descriptors) {
|
|
|
267
293
|
// caller omits the row rather than rendering one that cannot be read or written.
|
|
268
294
|
export function resolveTuiSetting(ctx, descriptors, namespace, field) {
|
|
269
295
|
const declared = TUI_SETTINGS.find((entry) => entry.namespace === namespace && entry.field === field)
|
|
270
|
-
const legacy = descriptors.get(namespace)
|
|
271
|
-
if (legacy && typeof legacy.value === 'object' && legacy.value !== null) {
|
|
272
|
-
return { ns: namespace, field, configField: declared?.configField, legacy: true, descriptor: legacy, value: legacy.value[field] }
|
|
273
|
-
}
|
|
274
296
|
if (!declared) return undefined
|
|
275
297
|
const own = ownEntryDescriptor(ctx, descriptors)
|
|
276
|
-
if (
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
298
|
+
if (own && typeof own.descriptor.value === 'object' && own.descriptor.value !== null
|
|
299
|
+
&& Object.hasOwn(own.descriptor.value, declared.configField)) {
|
|
300
|
+
return {
|
|
301
|
+
ns: own.ns,
|
|
302
|
+
field: declared.configField,
|
|
303
|
+
configField: declared.configField,
|
|
304
|
+
legacy: false,
|
|
305
|
+
descriptor: own.descriptor,
|
|
306
|
+
value: own.descriptor.value[declared.configField],
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// The form may not be active during apply(); readTuiSetting then falls back
|
|
310
|
+
// to the running Config instead of a stale compatibility registration.
|
|
311
|
+
if (hasConfigForms(ctx?.get?.('settings'))) return undefined
|
|
312
|
+
const legacy = descriptors.get(namespace)
|
|
313
|
+
if (legacy && typeof legacy.value === 'object' && legacy.value !== null) {
|
|
314
|
+
return { ns: namespace, field, configField: declared.configField, legacy: true, descriptor: legacy, value: legacy.value[field] }
|
|
285
315
|
}
|
|
316
|
+
return undefined
|
|
286
317
|
}
|
|
287
318
|
|
|
288
319
|
// Read one TUI-owned setting without requiring a settings service. The stored
|
package/package.json
CHANGED
|
@@ -1,146 +1,160 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dsh-oc-tui",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "A terminal UI (TUI) for DeepSeek Harness — an opencode-inspired chat client that boots as a dsh profile app plugin. | DeepSeek Harness 的终端界面(TUI),受 opencode 启发,以 dsh profile 应用插件形式启动。",
|
|
6
|
-
"keywords": [
|
|
7
|
-
"deepseek",
|
|
8
|
-
"deepseek-harness",
|
|
9
|
-
"dsh",
|
|
10
|
-
"dsh-plugin",
|
|
11
|
-
"tui",
|
|
12
|
-
"terminal",
|
|
13
|
-
"cli",
|
|
14
|
-
"opencode",
|
|
15
|
-
"cordis"
|
|
16
|
-
],
|
|
17
|
-
"homepage": "https://github.com/rayafriandion/dsh-oc-tui#readme",
|
|
18
|
-
"repository": {
|
|
19
|
-
"type": "git",
|
|
20
|
-
"url": "git+https://github.com/rayafriandion/dsh-oc-tui.git"
|
|
21
|
-
},
|
|
22
|
-
"bugs": {
|
|
23
|
-
"url": "https://github.com/rayafriandion/dsh-oc-tui/issues"
|
|
24
|
-
},
|
|
25
|
-
"author": "rayafriandion",
|
|
26
|
-
"license": "LGPL-3.0-or-later",
|
|
27
|
-
"scripts": {
|
|
28
|
-
"test": "node tests/smoke.test.mjs && node tests/i18n.test.mjs && node tests/locale.test.mjs && node tests/locale-forms.test.mjs && node tests/provider-form.test.mjs && node tests/graphics.test.mjs && node tests/render.test.mjs && node tests/reasoning.test.mjs && node tests/diagnostics.test.mjs && node tests/media.test.mjs && node tests/rail.test.mjs && node tests/rewind.test.mjs && node tests/git-branch.test.mjs && node tests/std.test.mjs && node tests/resume.test.mjs && node tests/mcp.test.mjs && node tests/mcp-form.test.mjs && node tests/mcp-sse-bridge.test.mjs && node tests/mcp-skill.test.mjs && node tests/mcp-live.test.mjs && node tests/esc-questions.test.mjs && node tests/deadline.test.mjs && node tests/secret-prompt.test.mjs && node tests/settings-paste.test.mjs && node tests/test-mermaid-ascii.mjs",
|
|
29
|
-
"check": "node --check lib/index.js && node --check lib/ui.js && node --check lib/term.js && node --check lib/diagnostics.js && node --check lib/caps.js && node --check lib/image.js && node --check lib/mcp.js && node --check lib/mcp-skill.js && node --check lib/mermaid.js && node --check lib/mermaid-ascii.js && node --check lib/providers.js && node --check lib/util.js && node --check lib/metrics.js && node --check lib/interrupt.js && node --check lib/web-settings.js && node --check lib/updates.js && node --check lib/rewind.js && node --check lib/git-branch.js && node --check lib/bridge.js && node --check lib/facet.js && node --check lib/i18n.js && node --check lib/locales/en.js && node --check lib/locales/zh-CN.js && node --check lib/locales/zh-TW.js && node --check lib/locales/ja.js && node --check lib/locales/ko.js && node --check lib/locales/de.js && node --check lib/locales/fr.js && node --check lib/locales/es.js && node --check lib/locales/pt-BR.js && node --check lib/locales/ru.js && node --check lib/locales/it.js && node --check lib/locales/tr.js && node --check lib/locales/vi.js && node --check lib/locales/id.js && node --check lib/locales/pl.js && node --check lib/locales/nl.js && node --check lib/locales/ar.js && node --check lib/std/adapt.js && node --check lib/std/presentation.js && node --check lib/std/command-list.js && node --check lib/std/commands.js && node --check bin/dsh-oc-tui.js && node --check bin/apply-update.cjs && node --check bin/mcp-sse-bridge.mjs"
|
|
30
|
-
},
|
|
31
|
-
"main": "lib/index.js",
|
|
32
|
-
"exports": {
|
|
33
|
-
".": "./lib/index.js",
|
|
34
|
-
"./startup": "./lib/startup.js"
|
|
35
|
-
},
|
|
36
|
-
"bin": {
|
|
37
|
-
"dsh-oc-tui": "bin/dsh-oc-tui.js"
|
|
38
|
-
},
|
|
39
|
-
"files": [
|
|
40
|
-
"lib",
|
|
41
|
-
"bin",
|
|
42
|
-
"skills",
|
|
43
|
-
"cordis.patch.yml",
|
|
44
|
-
"dsh-plugin.json",
|
|
45
|
-
"docs/用户手册.md"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"@
|
|
67
|
-
"@dsh-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"@deepseek-ai/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"@deepseek-ai/dsh-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"@deepseek-ai/dsh-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"@
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
"
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
"
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-oc-tui",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "A terminal UI (TUI) for DeepSeek Harness — an opencode-inspired chat client that boots as a dsh profile app plugin. | DeepSeek Harness 的终端界面(TUI),受 opencode 启发,以 dsh profile 应用插件形式启动。",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"deepseek",
|
|
8
|
+
"deepseek-harness",
|
|
9
|
+
"dsh",
|
|
10
|
+
"dsh-plugin",
|
|
11
|
+
"tui",
|
|
12
|
+
"terminal",
|
|
13
|
+
"cli",
|
|
14
|
+
"opencode",
|
|
15
|
+
"cordis"
|
|
16
|
+
],
|
|
17
|
+
"homepage": "https://github.com/rayafriandion/dsh-oc-tui#readme",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/rayafriandion/dsh-oc-tui.git"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/rayafriandion/dsh-oc-tui/issues"
|
|
24
|
+
},
|
|
25
|
+
"author": "rayafriandion",
|
|
26
|
+
"license": "LGPL-3.0-or-later",
|
|
27
|
+
"scripts": {
|
|
28
|
+
"test": "node tests/screenshot.test.mjs && node tests/smoke.test.mjs && node tests/i18n.test.mjs && node tests/locale.test.mjs && node tests/locale-forms.test.mjs && node tests/settings-mixed.test.mjs && node tests/provider-form.test.mjs && node tests/graphics.test.mjs && node tests/render.test.mjs && node tests/reasoning.test.mjs && node tests/diagnostics.test.mjs && node tests/media.test.mjs && node tests/rail.test.mjs && node tests/rewind.test.mjs && node tests/git-branch.test.mjs && node tests/std.test.mjs && node tests/resume.test.mjs && node tests/boot-gate.test.mjs && node tests/mcp.test.mjs && node tests/mcp-monitor.test.mjs && node tests/mcp-form.test.mjs && node tests/mcp-sse-bridge.test.mjs && node tests/mcp-skill.test.mjs && node tests/mcp-live.test.mjs && node tests/esc-questions.test.mjs && node tests/deadline.test.mjs && node tests/secret-prompt.test.mjs && node tests/settings-paste.test.mjs && node tests/test-mermaid-ascii.mjs",
|
|
29
|
+
"check": "node --check lib/themes.js && node --check lib/screenshot.js && node --check lib/index.js && node --check lib/ui.js && node --check lib/term.js && node --check lib/diagnostics.js && node --check lib/caps.js && node --check lib/image.js && node --check lib/mcp.js && node --check lib/mcp-monitor.js && node --check lib/mcp-skill.js && node --check lib/mermaid.js && node --check lib/mermaid-ascii.js && node --check lib/providers.js && node --check lib/util.js && node --check lib/metrics.js && node --check lib/interrupt.js && node --check lib/web-settings.js && node --check lib/model-route.js && node --check lib/dsh-version.js && node --check lib/boot-block.js && node --check lib/updates.js && node --check lib/rewind.js && node --check lib/git-branch.js && node --check lib/bridge.js && node --check lib/facet.js && node --check lib/i18n.js && node --check lib/locales/en.js && node --check lib/locales/zh-CN.js && node --check lib/locales/zh-TW.js && node --check lib/locales/ja.js && node --check lib/locales/ko.js && node --check lib/locales/de.js && node --check lib/locales/fr.js && node --check lib/locales/es.js && node --check lib/locales/pt-BR.js && node --check lib/locales/ru.js && node --check lib/locales/it.js && node --check lib/locales/tr.js && node --check lib/locales/vi.js && node --check lib/locales/id.js && node --check lib/locales/pl.js && node --check lib/locales/nl.js && node --check lib/locales/ar.js && node --check lib/std/adapt.js && node --check lib/std/presentation.js && node --check lib/std/command-list.js && node --check lib/std/commands.js && node --check bin/dsh-oc-tui.js && node --check bin/apply-update.cjs && node --check bin/mcp-sse-bridge.mjs"
|
|
30
|
+
},
|
|
31
|
+
"main": "lib/index.js",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": "./lib/index.js",
|
|
34
|
+
"./startup": "./lib/startup.js"
|
|
35
|
+
},
|
|
36
|
+
"bin": {
|
|
37
|
+
"dsh-oc-tui": "bin/dsh-oc-tui.js"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"lib",
|
|
41
|
+
"bin",
|
|
42
|
+
"skills",
|
|
43
|
+
"cordis.patch.yml",
|
|
44
|
+
"dsh-plugin.json",
|
|
45
|
+
"docs/用户手册.md",
|
|
46
|
+
"docs/user-guide.md",
|
|
47
|
+
"docs/dsh-std-接入说明.md",
|
|
48
|
+
"docs/assets"
|
|
49
|
+
],
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": "^22.19 || >=24",
|
|
52
|
+
"dsh": ">=0.1.1-rc.2 <0.3.0-0"
|
|
53
|
+
},
|
|
54
|
+
"dshSupport": {
|
|
55
|
+
"recommended": "0.2.2-rc.1",
|
|
56
|
+
"tested": [
|
|
57
|
+
"0.1.1-rc.2",
|
|
58
|
+
"0.1.2-rc.1",
|
|
59
|
+
"0.2.0-rc.2",
|
|
60
|
+
"0.2.1-rc.2",
|
|
61
|
+
"0.2.1-rc.5",
|
|
62
|
+
"0.2.2-rc.1"
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"@deepseek-ai/cordis": "*",
|
|
67
|
+
"@deepseek-ai/dsh-agent": "*",
|
|
68
|
+
"@deepseek-ai/dsh-agent-loop": "*",
|
|
69
|
+
"@deepseek-ai/dsh-agent-presets": "*",
|
|
70
|
+
"@deepseek-ai/dsh-cmdline": "*",
|
|
71
|
+
"@deepseek-ai/dsh-commands": "*",
|
|
72
|
+
"@deepseek-ai/dsh-llm": "*",
|
|
73
|
+
"@deepseek-ai/dsh-session": "*",
|
|
74
|
+
"@deepseek-ai/dsh-session-persistence": "*",
|
|
75
|
+
"@deepseek-ai/dsh-user-approval": "*",
|
|
76
|
+
"@deepseek-ai/dsh-user-questions": "*",
|
|
77
|
+
"@deepseek-ai/schemastery": "*",
|
|
78
|
+
"@dsh-std/command": "0.1.1-rc.1",
|
|
79
|
+
"@dsh-std/presentation": "0.1.1-rc.1",
|
|
80
|
+
"@dsh-std/sdk": "0.1.1-rc.2",
|
|
81
|
+
"@dsh-std/ui": "0.1.1-rc.1"
|
|
82
|
+
},
|
|
83
|
+
"peerDependenciesMeta": {
|
|
84
|
+
"@deepseek-ai/cordis": {
|
|
85
|
+
"optional": false
|
|
86
|
+
},
|
|
87
|
+
"@deepseek-ai/dsh-agent": {
|
|
88
|
+
"optional": true
|
|
89
|
+
},
|
|
90
|
+
"@deepseek-ai/dsh-agent-loop": {
|
|
91
|
+
"optional": true
|
|
92
|
+
},
|
|
93
|
+
"@deepseek-ai/dsh-agent-presets": {
|
|
94
|
+
"optional": true
|
|
95
|
+
},
|
|
96
|
+
"@deepseek-ai/dsh-commands": {
|
|
97
|
+
"optional": true
|
|
98
|
+
},
|
|
99
|
+
"@deepseek-ai/dsh-cmdline": {
|
|
100
|
+
"optional": true
|
|
101
|
+
},
|
|
102
|
+
"@deepseek-ai/dsh-llm": {
|
|
103
|
+
"optional": true
|
|
104
|
+
},
|
|
105
|
+
"@deepseek-ai/dsh-session": {
|
|
106
|
+
"optional": true
|
|
107
|
+
},
|
|
108
|
+
"@deepseek-ai/dsh-session-persistence": {
|
|
109
|
+
"optional": true
|
|
110
|
+
},
|
|
111
|
+
"@deepseek-ai/dsh-user-approval": {
|
|
112
|
+
"optional": true
|
|
113
|
+
},
|
|
114
|
+
"@deepseek-ai/dsh-user-questions": {
|
|
115
|
+
"optional": true
|
|
116
|
+
},
|
|
117
|
+
"@deepseek-ai/schemastery": {
|
|
118
|
+
"optional": false
|
|
119
|
+
},
|
|
120
|
+
"@dsh-std/command": {
|
|
121
|
+
"optional": true
|
|
122
|
+
},
|
|
123
|
+
"@dsh-std/presentation": {
|
|
124
|
+
"optional": true
|
|
125
|
+
},
|
|
126
|
+
"@dsh-std/sdk": {
|
|
127
|
+
"optional": true
|
|
128
|
+
},
|
|
129
|
+
"@dsh-std/ui": {
|
|
130
|
+
"optional": true
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"dsh": {
|
|
134
|
+
"bundle": {
|
|
135
|
+
"patch": "./cordis.patch.yml"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"dependencies": {
|
|
139
|
+
"commander": "^15.0.0",
|
|
140
|
+
"highlight.js": "^11.12.0",
|
|
141
|
+
"lovely-mermaid": "^0.3.3",
|
|
142
|
+
"markdown-it": "^15.0.2",
|
|
143
|
+
"sharp": "^0.35.4"
|
|
144
|
+
},
|
|
145
|
+
"devDependencies": {
|
|
146
|
+
"@deepseek-ai/cordis": "^4.0.4",
|
|
147
|
+
"@deepseek-ai/dsh-commands": "^0.0.1-rc.5",
|
|
148
|
+
"@deepseek-ai/dsh-llm": "^0.0.1-rc.5",
|
|
149
|
+
"@deepseek-ai/dsh-scope": "^0.0.1-rc.5",
|
|
150
|
+
"@deepseek-ai/dsh-session": "^0.0.1-rc.5",
|
|
151
|
+
"@deepseek-ai/dsh-timeout": "^0.0.1-rc.5",
|
|
152
|
+
"@deepseek-ai/dsh-user-questions": "^0.0.1-rc.5",
|
|
153
|
+
"@deepseek-ai/schemastery": "^3.18.4",
|
|
154
|
+
"@dsh-std/command": "0.1.1-rc.1",
|
|
155
|
+
"@dsh-std/manifest": "0.1.1-rc.3",
|
|
156
|
+
"@dsh-std/presentation": "0.1.1-rc.1",
|
|
157
|
+
"@dsh-std/sdk": "0.1.1-rc.2",
|
|
158
|
+
"@dsh-std/ui": "0.1.1-rc.1"
|
|
159
|
+
}
|
|
160
|
+
}
|