@banbolee/dsh-fish-shell 0.6.0 → 0.7.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/package.json +40 -40
- package/terminal-fish.js +18 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@banbolee/dsh-fish-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Fish shell executors and tool for DeepSeek Harness: run commands with fish instead of bash.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -32,48 +32,48 @@
|
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
35
|
-
"@deepseek-ai/dsh-agent": "^0.
|
|
36
|
-
"@deepseek-ai/dsh-bash-local": "^0.
|
|
37
|
-
"@deepseek-ai/dsh-bash-sandbox": "^0.
|
|
38
|
-
"@deepseek-ai/dsh-home-paths": "^0.
|
|
39
|
-
"@deepseek-ai/dsh-jobs": "^0.
|
|
40
|
-
"@deepseek-ai/dsh-llm": "^0.
|
|
41
|
-
"@deepseek-ai/dsh-sandbox": "^0.
|
|
42
|
-
"@deepseek-ai/dsh-sandbox-policy": "^0.
|
|
43
|
-
"@deepseek-ai/dsh-scope": "^0.
|
|
44
|
-
"@deepseek-ai/dsh-session-projection": "^0.
|
|
45
|
-
"@deepseek-ai/dsh-shell": "^0.
|
|
46
|
-
"@deepseek-ai/dsh-shell-env": "^0.
|
|
47
|
-
"@deepseek-ai/dsh-subprocess": "^0.
|
|
48
|
-
"@deepseek-ai/dsh-system-prompt": "^0.
|
|
49
|
-
"@deepseek-ai/dsh-terminal": "^0.
|
|
50
|
-
"@deepseek-ai/dsh-terminal-bash": "^0.
|
|
51
|
-
"@deepseek-ai/dsh-tools": "^0.
|
|
52
|
-
"@deepseek-ai/dsh-user-approval": "^0.
|
|
35
|
+
"@deepseek-ai/dsh-agent": "^0.2.0-rc.1",
|
|
36
|
+
"@deepseek-ai/dsh-bash-local": "^0.2.0-rc.1",
|
|
37
|
+
"@deepseek-ai/dsh-bash-sandbox": "^0.2.0-rc.1",
|
|
38
|
+
"@deepseek-ai/dsh-home-paths": "^0.2.0-rc.1",
|
|
39
|
+
"@deepseek-ai/dsh-jobs": "^0.2.0-rc.1",
|
|
40
|
+
"@deepseek-ai/dsh-llm": "^0.2.0-rc.1",
|
|
41
|
+
"@deepseek-ai/dsh-sandbox": "^0.2.0-rc.1",
|
|
42
|
+
"@deepseek-ai/dsh-sandbox-policy": "^0.2.0-rc.1",
|
|
43
|
+
"@deepseek-ai/dsh-scope": "^0.2.0-rc.1",
|
|
44
|
+
"@deepseek-ai/dsh-session-projection": "^0.2.0-rc.1",
|
|
45
|
+
"@deepseek-ai/dsh-shell": "^0.2.0-rc.1",
|
|
46
|
+
"@deepseek-ai/dsh-shell-env": "^0.2.0-rc.1",
|
|
47
|
+
"@deepseek-ai/dsh-subprocess": "^0.2.0-rc.1",
|
|
48
|
+
"@deepseek-ai/dsh-system-prompt": "^0.2.0-rc.1",
|
|
49
|
+
"@deepseek-ai/dsh-terminal": "^0.2.0-rc.1",
|
|
50
|
+
"@deepseek-ai/dsh-terminal-bash": "^0.2.0-rc.1",
|
|
51
|
+
"@deepseek-ai/dsh-tools": "^0.2.0-rc.1",
|
|
52
|
+
"@deepseek-ai/dsh-user-approval": "^0.2.0-rc.1"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
56
|
-
"@deepseek-ai/dsh-agent": "^0.
|
|
57
|
-
"@deepseek-ai/dsh-bash-local": "^0.
|
|
58
|
-
"@deepseek-ai/dsh-bash-sandbox": "^0.
|
|
59
|
-
"@deepseek-ai/dsh-home-paths": "^0.
|
|
60
|
-
"@deepseek-ai/dsh-invariants": "^0.
|
|
61
|
-
"@deepseek-ai/dsh-jobs": "^0.
|
|
62
|
-
"@deepseek-ai/dsh-llm": "^0.
|
|
63
|
-
"@deepseek-ai/dsh-pwsh-local": "^0.
|
|
64
|
-
"@deepseek-ai/dsh-sandbox": "^0.
|
|
65
|
-
"@deepseek-ai/dsh-sandbox-policy": "^0.
|
|
66
|
-
"@deepseek-ai/dsh-scope": "^0.
|
|
67
|
-
"@deepseek-ai/dsh-session-projection": "^0.
|
|
68
|
-
"@deepseek-ai/dsh-shell": "^0.
|
|
69
|
-
"@deepseek-ai/dsh-shell-env": "^0.
|
|
70
|
-
"@deepseek-ai/dsh-subprocess": "^0.
|
|
71
|
-
"@deepseek-ai/dsh-subprocess-local": "^0.
|
|
72
|
-
"@deepseek-ai/dsh-system-prompt": "^0.
|
|
73
|
-
"@deepseek-ai/dsh-terminal": "^0.
|
|
74
|
-
"@deepseek-ai/dsh-terminal-bash": "^0.
|
|
75
|
-
"@deepseek-ai/dsh-tools": "^0.
|
|
76
|
-
"@deepseek-ai/dsh-user-approval": "^0.
|
|
56
|
+
"@deepseek-ai/dsh-agent": "^0.2.0-rc.1",
|
|
57
|
+
"@deepseek-ai/dsh-bash-local": "^0.2.0-rc.1",
|
|
58
|
+
"@deepseek-ai/dsh-bash-sandbox": "^0.2.0-rc.1",
|
|
59
|
+
"@deepseek-ai/dsh-home-paths": "^0.2.0-rc.1",
|
|
60
|
+
"@deepseek-ai/dsh-invariants": "^0.2.0-rc.1",
|
|
61
|
+
"@deepseek-ai/dsh-jobs": "^0.2.0-rc.1",
|
|
62
|
+
"@deepseek-ai/dsh-llm": "^0.2.0-rc.1",
|
|
63
|
+
"@deepseek-ai/dsh-pwsh-local": "^0.2.0-rc.1",
|
|
64
|
+
"@deepseek-ai/dsh-sandbox": "^0.2.0-rc.1",
|
|
65
|
+
"@deepseek-ai/dsh-sandbox-policy": "^0.2.0-rc.1",
|
|
66
|
+
"@deepseek-ai/dsh-scope": "^0.2.0-rc.1",
|
|
67
|
+
"@deepseek-ai/dsh-session-projection": "^0.2.0-rc.1",
|
|
68
|
+
"@deepseek-ai/dsh-shell": "^0.2.0-rc.1",
|
|
69
|
+
"@deepseek-ai/dsh-shell-env": "^0.2.0-rc.1",
|
|
70
|
+
"@deepseek-ai/dsh-subprocess": "^0.2.0-rc.1",
|
|
71
|
+
"@deepseek-ai/dsh-subprocess-local": "^0.2.0-rc.1",
|
|
72
|
+
"@deepseek-ai/dsh-system-prompt": "^0.2.0-rc.1",
|
|
73
|
+
"@deepseek-ai/dsh-terminal": "^0.2.0-rc.1",
|
|
74
|
+
"@deepseek-ai/dsh-terminal-bash": "^0.2.0-rc.1",
|
|
75
|
+
"@deepseek-ai/dsh-tools": "^0.2.0-rc.1",
|
|
76
|
+
"@deepseek-ai/dsh-user-approval": "^0.2.0-rc.1",
|
|
77
77
|
"yaml": "^2.8.0"
|
|
78
78
|
},
|
|
79
79
|
"keywords": [
|
package/terminal-fish.js
CHANGED
|
@@ -72,6 +72,11 @@ const DEFAULT_PTY_CONFIG = {
|
|
|
72
72
|
exactProbeAfterMs: 150,
|
|
73
73
|
idleSilenceMs: 3e3,
|
|
74
74
|
handoffGraceMs: 500,
|
|
75
|
+
// The official default is `0` (tail grace DISABLED, i.e. the pre-`promptTailGraceMs`
|
|
76
|
+
// behaviour). This backend keeps that default rather than inventing a positive
|
|
77
|
+
// one: the fish prompt is verified to arrive whole under `TERM=dumb`, so the
|
|
78
|
+
// tolerance is only there for a caller that asks for it.
|
|
79
|
+
promptTailGraceMs: 0,
|
|
75
80
|
timeoutMs: 3e4,
|
|
76
81
|
disposeGraceMs: 3e3,
|
|
77
82
|
}
|
|
@@ -100,6 +105,7 @@ const DEFAULT_PTY_CONFIG = {
|
|
|
100
105
|
* @property {number} exactProbeAfterMs - delay before exact syscall probes.
|
|
101
106
|
* @property {number} idleSilenceMs - silence that yields `inferred_idle`.
|
|
102
107
|
* @property {number} handoffGraceMs - extra wait for foreground handoff.
|
|
108
|
+
* @property {number} promptTailGraceMs - extra wait for a controlled prompt prefix to complete; `0` disables the tail grace.
|
|
103
109
|
* @property {number} timeoutMs - readiness deadline for one startup sequence.
|
|
104
110
|
* @property {number} disposeGraceMs - SIGTERM→SIGKILL grace for the PTY session.
|
|
105
111
|
*/
|
|
@@ -171,12 +177,24 @@ export function validateConfig(config) {
|
|
|
171
177
|
if (resolved.backendType.length === 0) throw new Error('terminal-fish: backendType must be non-empty')
|
|
172
178
|
if (resolved.shellPath.length === 0) throw new Error('terminal-fish: shellPath must be non-empty')
|
|
173
179
|
for (const [field, value] of Object.entries(resolved)) {
|
|
180
|
+
// `promptTailGraceMs` is the one duration that legally reads `0` (it means
|
|
181
|
+
// "no tail grace", which is the official default), so it is checked on its
|
|
182
|
+
// own below instead of by the positive-integer rule.
|
|
183
|
+
if (field === 'promptTailGraceMs') continue
|
|
174
184
|
if (typeof value === 'number' && (!Number.isSafeInteger(value) || value <= 0)) {
|
|
175
185
|
throw new Error(`terminal-fish: ${field} must be a positive safe integer`)
|
|
176
186
|
}
|
|
177
187
|
}
|
|
188
|
+
if (!Number.isSafeInteger(resolved.promptTailGraceMs) || resolved.promptTailGraceMs < 0) {
|
|
189
|
+
throw new Error('terminal-fish: promptTailGraceMs must be a non-negative safe integer (0 disables the prompt tail grace)')
|
|
190
|
+
}
|
|
178
191
|
if (resolved.maxReadBytes > resolved.scrollbackMaxBytes) throw new Error('terminal-fish: maxReadBytes must not exceed scrollbackMaxBytes')
|
|
179
192
|
if (resolved.handoffGraceMs < resolved.pollIntervalMs) throw new Error('terminal-fish: handoffGraceMs must be at least pollIntervalMs so one readiness poll runs inside the grace window')
|
|
193
|
+
// A nonzero tolerance shorter than one poll cannot observe the rest of the
|
|
194
|
+
// prompt, so it would be a silent no-op; the official schema rejects it too.
|
|
195
|
+
if (resolved.promptTailGraceMs !== 0 && resolved.promptTailGraceMs < resolved.pollIntervalMs) {
|
|
196
|
+
throw new Error('terminal-fish: promptTailGraceMs must be zero or at least pollIntervalMs so a nonzero tail grace covers one readiness poll')
|
|
197
|
+
}
|
|
180
198
|
}
|
|
181
199
|
|
|
182
200
|
/**
|