@xiaoso/dsh-tool-plus 0.1.12 → 0.1.14-beta.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.en.md +12 -1
- package/README.md +13 -2
- package/assets/icon.png +0 -0
- package/assets/wordmark.png +0 -0
- package/lib/client.js +27 -4
- package/lib/index.mjs +2 -2
- package/lib/{scrapers-DX4nr7xx.mjs → scrapers-bxXbHII6.mjs} +1 -1
- package/lib/types/web/client/ToolCardShell.d.ts +1 -1
- package/lib/types/web/client/labels.d.ts +1 -1
- package/lib/types/web/client/rows/search-card-facts.d.ts +5 -0
- package/lib/{utils-DjXB89ml.mjs → utils-C_FVuzli.mjs} +1 -1
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +63 -49
- package/presets/tool-plus-ptc.patch.yml +8 -26
- package/presets/tool-plus-standard.patch.yml +8 -26
package/README.en.md
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img width="160" src="assets/icon.png" alt="dsh tool plus icon"><br>
|
|
3
|
+
<img width="240" src="assets/wordmark.png" alt="dsh tool plus">
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div align="center">
|
|
2
7
|
|
|
3
8
|
[简体中文](./README.md) | English
|
|
4
9
|
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div align="center">
|
|
13
|
+
|
|
5
14
|
[](https://www.npmjs.com/package/@xiaoso/dsh-tool-plus)
|
|
6
15
|
[](LICENSE)
|
|
7
16
|
[](https://nodejs.org)
|
|
8
17
|
[]()
|
|
9
18
|
|
|
19
|
+
</div>
|
|
20
|
+
|
|
10
21
|
Essential tools enhancement for DeepSeek Harness: persistent bash, structured read, multi-mode edit, atomic write, full-text search, and direct image reading — one plugin covers it all. Ported from the [Oh My Pi](https://github.com/can1357/oh-my-pi) core; once installed it automatically takes over the official bash / pwsh / file / search tools, with optional `ast_grep` / `ast_edit` structural search and rewrite.
|
|
11
22
|
|
|
12
23
|
## Features
|
package/README.md
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img width="160" src="assets/icon.png" alt="dsh tool plus icon"><br>
|
|
3
|
+
<img width="240" src="assets/wordmark.png" alt="dsh tool plus">
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div align="center">
|
|
2
7
|
|
|
3
8
|
简体中文 | [English](./README.en.md)
|
|
4
9
|
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div align="center">
|
|
13
|
+
|
|
5
14
|
[](https://www.npmjs.com/package/@xiaoso/dsh-tool-plus)
|
|
6
15
|
[](LICENSE)
|
|
7
16
|
[](https://nodejs.org)
|
|
8
17
|
[]()
|
|
9
18
|
|
|
19
|
+
</div>
|
|
20
|
+
|
|
10
21
|
DeepSeek Harness 基础工具增强:持久 bash、结构化 read、多模式 edit、原子 write、全文搜索、图像直读,一个插件全覆盖。基于 [Oh My Pi](https://github.com/can1357/oh-my-pi) 内核移植,安装后自动接管官方 bash / pwsh / 文件 / 搜索工具,另有可选的 `ast_grep` / `ast_edit` 结构化搜索与重写。
|
|
11
22
|
|
|
12
23
|
## 功能特性
|
|
@@ -87,7 +98,7 @@ dsh plugin --profile web add link:<本仓库路径>
|
|
|
87
98
|
- **dsh CLI**:需全局安装,`npm i -g @deepseek-ai/dsh`
|
|
88
99
|
- **Node.js** ≥ 22.19 或 ≥ 24
|
|
89
100
|
- **Git Bash**(推荐):Windows 上作为 bash 执行环境
|
|
90
|
-
- 适用于 DeepSeek Harness `dsh` v0.2.
|
|
101
|
+
- 适用于 DeepSeek Harness `dsh` v0.2.1-rc.1(pre-release,接口可能变动)
|
|
91
102
|
|
|
92
103
|
## 注意事项
|
|
93
104
|
|
package/assets/icon.png
ADDED
|
Binary file
|
|
Binary file
|
package/lib/client.js
CHANGED
|
@@ -3710,6 +3710,7 @@ window.__ModuleLoader__.load({
|
|
|
3710
3710
|
"search.collapseAria": "收起结果",
|
|
3711
3711
|
"search.expandAria": "展开其余 {count} 行结果",
|
|
3712
3712
|
"search.expandRest": "… 其余 {count} 行",
|
|
3713
|
+
"terminal.commandLine": "命令第 {n} 行",
|
|
3713
3714
|
"terminal.signal": "信号 {signal}",
|
|
3714
3715
|
"terminal.exitCode": "退出码 {code}",
|
|
3715
3716
|
"terminal.running": "运行中",
|
|
@@ -3778,6 +3779,7 @@ window.__ModuleLoader__.load({
|
|
|
3778
3779
|
"search.collapseAria": "Collapse results",
|
|
3779
3780
|
"search.expandAria": "Expand {count} more result lines",
|
|
3780
3781
|
"search.expandRest": "… {count} more lines",
|
|
3782
|
+
"terminal.commandLine": "Command line {n}",
|
|
3781
3783
|
"terminal.signal": "signal {signal}",
|
|
3782
3784
|
"terminal.exitCode": "exit code {code}",
|
|
3783
3785
|
"terminal.running": "Running",
|
|
@@ -4154,6 +4156,7 @@ window.__ModuleLoader__.load({
|
|
|
4154
4156
|
/** Bind the card dictionary to the terminal primitive's chrome labels. */
|
|
4155
4157
|
function terminalBlockLabels(t) {
|
|
4156
4158
|
return {
|
|
4159
|
+
commandLine: (line) => t("terminal.commandLine", { n: line }),
|
|
4157
4160
|
signal: (signal) => t("terminal.signal", { signal }),
|
|
4158
4161
|
exitCode: (exitCode) => t("terminal.exitCode", { code: exitCode }),
|
|
4159
4162
|
noExitCode: t("terminal.noExitCode"),
|
|
@@ -4863,7 +4866,7 @@ window.__ModuleLoader__.load({
|
|
|
4863
4866
|
title,
|
|
4864
4867
|
tool: toolName,
|
|
4865
4868
|
summary,
|
|
4866
|
-
summarySuffix:
|
|
4869
|
+
summarySuffix: `· ${t("astEdit.replacements", { count: meta.replacements })} · ${t("astEdit.files", { count: files })}`,
|
|
4867
4870
|
filePath: single,
|
|
4868
4871
|
openFile,
|
|
4869
4872
|
inspect,
|
|
@@ -4949,7 +4952,7 @@ window.__ModuleLoader__.load({
|
|
|
4949
4952
|
title,
|
|
4950
4953
|
tool: toolName,
|
|
4951
4954
|
summary,
|
|
4952
|
-
summarySuffix:
|
|
4955
|
+
summarySuffix: `· +${totals.added} -${totals.removed}`,
|
|
4953
4956
|
filePath: single,
|
|
4954
4957
|
openFile,
|
|
4955
4958
|
inspect,
|
|
@@ -5448,6 +5451,26 @@ window.__ModuleLoader__.load({
|
|
|
5448
5451
|
if (!scope.includes(";")) return displayPath(scope, cwd);
|
|
5449
5452
|
return scope.split(";").map((entry) => displayPath(entry.trim(), cwd)).join("; ");
|
|
5450
5453
|
}
|
|
5454
|
+
/** Longest scope the collapsed head shows, in characters. */
|
|
5455
|
+
const SCOPE_MAX = 28;
|
|
5456
|
+
/**
|
|
5457
|
+
* Bound an over-long scope to a row-sized maximum, keeping its tail and
|
|
5458
|
+
* starting at a path boundary.
|
|
5459
|
+
*
|
|
5460
|
+
* The fragment sits outside the summary's ellipsis and never shrinks, so an
|
|
5461
|
+
* unbounded target — an absolute path outside the workspace, the common case
|
|
5462
|
+
* in a temp tree — would consume the row and leave the subject at `exp…`. The
|
|
5463
|
+
* tail is the end worth keeping: the leaf names the tree, the drive letter and
|
|
5464
|
+
* the user name do not.
|
|
5465
|
+
* @param scope - the already workspace-shortened scope.
|
|
5466
|
+
* @returns the scope, or its tail behind a leading ellipsis.
|
|
5467
|
+
*/
|
|
5468
|
+
function clipScope(scope) {
|
|
5469
|
+
if (scope.length <= SCOPE_MAX) return scope;
|
|
5470
|
+
const tail = scope.slice(scope.length - SCOPE_MAX + 1);
|
|
5471
|
+
const boundary = tail.search(/[\\/]/);
|
|
5472
|
+
return boundary <= 0 ? `…${tail}` : `…${tail.slice(boundary)}`;
|
|
5473
|
+
}
|
|
5451
5474
|
/**
|
|
5452
5475
|
* The search card's collapsed trailing fragment: the scope the call searched,
|
|
5453
5476
|
* then what the search found.
|
|
@@ -5461,7 +5484,7 @@ window.__ModuleLoader__.load({
|
|
|
5461
5484
|
const facts = [];
|
|
5462
5485
|
if (meta.shape === "matches") {
|
|
5463
5486
|
const scope = argText(args, "path");
|
|
5464
|
-
if (scope !== null) facts.push(t("search.scope", { path: displayScope(scope, cwd) }));
|
|
5487
|
+
if (scope !== null) facts.push(t("search.scope", { path: clipScope(displayScope(scope, cwd)) }));
|
|
5465
5488
|
}
|
|
5466
5489
|
if (meta.total === 0) facts.push(t("search.noResults"));
|
|
5467
5490
|
else if (meta.shape === "matches") {
|
|
@@ -5694,7 +5717,7 @@ window.__ModuleLoader__.load({
|
|
|
5694
5717
|
title,
|
|
5695
5718
|
tool: toolName,
|
|
5696
5719
|
summary: displayPath(path, cwd),
|
|
5697
|
-
summarySuffix: lines + skip
|
|
5720
|
+
summarySuffix: `· ${lines + skip}`,
|
|
5698
5721
|
filePath: path,
|
|
5699
5722
|
openFile,
|
|
5700
5723
|
inspect,
|
package/lib/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ __installBunShim();
|
|
|
3
3
|
import { n as fs_promises_shim_exports, t as exists } from "./fs-promises-shim-B2YFWkcd.mjs";
|
|
4
4
|
import { i as setRuntimeLogger, n as systemChromiumCandidatesForTest, r as runtimeLogger } from "./launch-BIWNyrBB.mjs";
|
|
5
5
|
import { $ as isEnoent, A as formatCount, C as warn, D as installBunShim, F as $flag, N as $env, O as formatAge, P as $envpos, Q as hasFsCode, U as getAutoQaDbPath, V as VERSION, X as getRemoteDir, Y as getPuppeteerDir, at as findOnPath, b as debug, c as combineSignals, d as $which, et as isEnotdir, it as untilAborted, k as formatBytes$1, l as exec, m as readImageMetadata, nt as peekFile, q as getInstallId, tt as isProbablyBinary, u as render, x as error } from "./src-AELUUb5U.mjs";
|
|
6
|
-
import { C as truncateToWidth$1, S as replaceTabs, _ as formatCodeFrameLine, a as fetchBinary, b as LRUCache, c as getParallelExtractContent, d as convertFileWithMarkit, f as Settings, g as capParseErrors, h as OMP_DEFAULTS, i as convertWithMarkit, l as ensureTool, m as settings, o as extractWithParallel, p as isSettingsInitialized, s as findParallelApiKey, u as CONVERTIBLE_EXTENSIONS, v as formatParseErrors, x as padding, y as shortenPath } from "./utils-
|
|
6
|
+
import { C as truncateToWidth$1, S as replaceTabs, _ as formatCodeFrameLine, a as fetchBinary, b as LRUCache, c as getParallelExtractContent, d as convertFileWithMarkit, f as Settings, g as capParseErrors, h as OMP_DEFAULTS, i as convertWithMarkit, l as ensureTool, m as settings, o as extractWithParallel, p as isSettingsInitialized, s as findParallelApiKey, u as CONVERTIBLE_EXTENSIONS, v as formatParseErrors, x as padding, y as shortenPath } from "./utils-C_FVuzli.mjs";
|
|
7
7
|
import { t as sanitizeText } from "./sanitize-text-BCf5KmCf.mjs";
|
|
8
8
|
import { n as isRecord$5 } from "./type-guards-CttAANEx.mjs";
|
|
9
9
|
import { n as ToolError, r as throwIfAborted, t as ToolAbortError } from "./tool-errors-DoyxivAR.mjs";
|
|
@@ -11479,7 +11479,7 @@ let specialHandlersPromise;
|
|
|
11479
11479
|
* requires a special handler, so we keep them out of the cold-startup graph.
|
|
11480
11480
|
*/
|
|
11481
11481
|
function loadSpecialHandlers() {
|
|
11482
|
-
specialHandlersPromise ??= import("./scrapers-
|
|
11482
|
+
specialHandlersPromise ??= import("./scrapers-bxXbHII6.mjs").then((m) => m.specialHandlers);
|
|
11483
11483
|
return specialHandlersPromise;
|
|
11484
11484
|
}
|
|
11485
11485
|
/**
|
|
@@ -3,7 +3,7 @@ __installBunShim();
|
|
|
3
3
|
import { n as fs_promises_shim_exports } from "./fs-promises-shim-B2YFWkcd.mjs";
|
|
4
4
|
import { $ as isEnoent, B as USER_AGENT, C as warn, G as getDocsRsCacheDir, N as $env, c as combineSignals, j as formatNumber, k as formatBytes, l as exec, s as Snowflake, y as parseFrontmatter } from "./src-AELUUb5U.mjs";
|
|
5
5
|
import { W as tryParseJson } from "./utils-cZX3f_Ls.mjs";
|
|
6
|
-
import { a as fetchBinary, c as getParallelExtractContent, i as convertWithMarkit, l as ensureTool, m as settings, n as asRecord, o as extractWithParallel, r as asString, s as findParallelApiKey, t as asNumber } from "./utils-
|
|
6
|
+
import { a as fetchBinary, c as getParallelExtractContent, i as convertWithMarkit, l as ensureTool, m as settings, n as asRecord, o as extractWithParallel, r as asString, s as findParallelApiKey, t as asNumber } from "./utils-C_FVuzli.mjs";
|
|
7
7
|
import { n as isRecord } from "./type-guards-CttAANEx.mjs";
|
|
8
8
|
import { r as throwIfAborted, t as ToolAbortError } from "./tool-errors-DoyxivAR.mjs";
|
|
9
9
|
import { c as getLocalizedText, d as looksLikeHtml, i as decodeHtmlEntities, l as htmlToBasicMarkdown, o as formatIsoDate, r as buildResult, s as formatMediaDuration, u as loadPage } from "./types-BLrLohwK.mjs";
|
|
@@ -33,7 +33,7 @@ export interface ToolCardShellProps {
|
|
|
33
33
|
title: string;
|
|
34
34
|
/** Collapsed summary after the separator; empty renders no separator. */
|
|
35
35
|
summary?: string | null | undefined;
|
|
36
|
-
/** Trailing fragment kept outside the summary's ellipsis (e.g.
|
|
36
|
+
/** Trailing fragment kept outside the summary's ellipsis; the row opens it with `· ` (e.g. `· +3 -1`). */
|
|
37
37
|
summarySuffix?: string | null | undefined;
|
|
38
38
|
/** Render the summary in the error tone (a failure line, not a description). */
|
|
39
39
|
summaryTone?: 'default' | 'error' | undefined;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
/** Locale namespace of the tool-card bundle (registered by `registerToolCards`). */
|
|
18
18
|
export declare const CARD_LOCALE_NS = "tool-plus-cards";
|
|
19
19
|
/** Every copy key of the tool-card namespace. */
|
|
20
|
-
export type ToolCardLocaleKey = 'copy' | 'copied' | 'collapse' | 'expand' | 'collapseAria' | 'expandAria' | 'expandRest' | 'files.one' | 'files.other' | 'codeBlock.title' | 'codeBlock.wrap' | 'codeBlock.unwrap' | 'running' | 'done' | 'failed' | 'stopped' | 'cancelled' | 'timedOut' | 'noOutput' | 'title.bash' | 'title.read' | 'title.write' | 'title.edit' | 'title.grep' | 'title.glob' | 'title.astGrep' | 'title.astEdit' | 'write.lines' | 'write.madeExecutable' | 'astEdit.replacements' | 'astEdit.files' | 'astEdit.parseErrors' | 'astEdit.rules' | 'astEdit.rulesRest' | 'read.window' | 'read.collapseAria' | 'read.expandAria' | 'read.expandRest' | 'search.paths' | 'search.paths.truncated' | 'search.matches' | 'search.matches.truncated' | 'search.noResults' | 'search.scope' | 'search.collapseAria' | 'search.expandAria' | 'search.expandRest' | 'terminal.signal' | 'terminal.exitCode' | 'terminal.running' | 'terminal.failed' | 'terminal.done' | 'terminal.noOutput' | 'terminal.noExitCode' | 'bash.background' | 'image.loading' | 'image.loadFailed' | 'image.open' | 'image.openNamed' | 'image.dialog' | 'image.close' | 'image.unnamed' | 'image.caption' | 'generic.params' | 'generic.noDetail' | 'inspect';
|
|
20
|
+
export type ToolCardLocaleKey = 'copy' | 'copied' | 'collapse' | 'expand' | 'collapseAria' | 'expandAria' | 'expandRest' | 'files.one' | 'files.other' | 'codeBlock.title' | 'codeBlock.wrap' | 'codeBlock.unwrap' | 'running' | 'done' | 'failed' | 'stopped' | 'cancelled' | 'timedOut' | 'noOutput' | 'title.bash' | 'title.read' | 'title.write' | 'title.edit' | 'title.grep' | 'title.glob' | 'title.astGrep' | 'title.astEdit' | 'write.lines' | 'write.madeExecutable' | 'astEdit.replacements' | 'astEdit.files' | 'astEdit.parseErrors' | 'astEdit.rules' | 'astEdit.rulesRest' | 'read.window' | 'read.collapseAria' | 'read.expandAria' | 'read.expandRest' | 'search.paths' | 'search.paths.truncated' | 'search.matches' | 'search.matches.truncated' | 'search.noResults' | 'search.scope' | 'search.collapseAria' | 'search.expandAria' | 'search.expandRest' | 'terminal.commandLine' | 'terminal.signal' | 'terminal.exitCode' | 'terminal.running' | 'terminal.failed' | 'terminal.done' | 'terminal.noOutput' | 'terminal.noExitCode' | 'bash.background' | 'image.loading' | 'image.loadFailed' | 'image.open' | 'image.openNamed' | 'image.dialog' | 'image.close' | 'image.unnamed' | 'image.caption' | 'generic.params' | 'generic.noDetail' | 'inspect';
|
|
21
21
|
/** Simplified Chinese copy (the source dictionary). */
|
|
22
22
|
export declare const zh: Record<ToolCardLocaleKey, string>;
|
|
23
23
|
/** English dictionary, checked complete against the zh key set. */
|
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
* - the count, or "no results" instead of a zero count (a zero count is what
|
|
19
19
|
* the empty-state failure reads as, not what it says).
|
|
20
20
|
*
|
|
21
|
+
* The fragment's own box never shrinks (`.twc-summarySuffix` is `flex:none`),
|
|
22
|
+
* so the scope it carries is bounded by {@link clipScope}: an unbounded target
|
|
23
|
+
* path would not clip the fragment, it would take the row and squeeze the
|
|
24
|
+
* subject — the pattern, the one thing the head is for — down to `exp…`.
|
|
25
|
+
*
|
|
21
26
|
* The counting labels are the {@link searchBlockLabels} adapter the block body
|
|
22
27
|
* already uses, so the head and the body say the same thing in the same words,
|
|
23
28
|
* including the "showing N of M" wording of a capped payload.
|
|
@@ -6267,7 +6267,7 @@ const settings = {
|
|
|
6267
6267
|
};
|
|
6268
6268
|
//#endregion
|
|
6269
6269
|
//#region package.json
|
|
6270
|
-
var version = "0.1.
|
|
6270
|
+
var version = "0.1.14-beta.0";
|
|
6271
6271
|
/** `.tmp` files older than this are treated as orphaned writes and swept. */
|
|
6272
6272
|
const TMP_ORPHAN_MAX_AGE_MS = 3e5;
|
|
6273
6273
|
function markitConversionCacheKey(bytes, extension) {
|
package/locale/en.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xiaoso/dsh-tool-plus",
|
|
3
3
|
"description": "Oh My Pi bash runtime ported as a deepseek-harness tool plugin: persistent shell session, output minimizer, managed background jobs, command interception",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.14-beta.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"deepseek-harness",
|
|
@@ -33,10 +33,12 @@
|
|
|
33
33
|
"tag": "latest"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
|
-
"node": "^22.19.0 || >=24.0.0"
|
|
36
|
+
"node": "^22.19.0 || >=24.0.0",
|
|
37
|
+
"dsh": ">=0.2.1-0 <0.3.0-0"
|
|
37
38
|
},
|
|
38
39
|
"main": "lib/index.mjs",
|
|
39
40
|
"types": "lib/types/index.d.ts",
|
|
41
|
+
"icon": "./assets/icon.png",
|
|
40
42
|
"exports": {
|
|
41
43
|
".": {
|
|
42
44
|
"types": "./lib/types/index.d.ts",
|
|
@@ -48,6 +50,7 @@
|
|
|
48
50
|
},
|
|
49
51
|
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
50
52
|
"./presets/*.patch.yml": "./presets/*.patch.yml",
|
|
53
|
+
"./locale/*.json": "./locale/*.json",
|
|
51
54
|
"./package.json": "./package.json"
|
|
52
55
|
},
|
|
53
56
|
"files": [
|
|
@@ -59,7 +62,10 @@
|
|
|
59
62
|
"src/bash-runtime/shell-snapshot-fn-env.sh",
|
|
60
63
|
"README.md",
|
|
61
64
|
"LICENSE",
|
|
62
|
-
"THIRD_PARTY_NOTICES.md"
|
|
65
|
+
"THIRD_PARTY_NOTICES.md",
|
|
66
|
+
"locale/*.json",
|
|
67
|
+
"assets/icon.png",
|
|
68
|
+
"assets/wordmark.png"
|
|
63
69
|
],
|
|
64
70
|
"dsh": {
|
|
65
71
|
"manifestVersion": 1,
|
|
@@ -80,39 +86,38 @@
|
|
|
80
86
|
},
|
|
81
87
|
"scripts": {
|
|
82
88
|
"build": "tsdown -c tsdown.config.ts && tsc -p tsconfig.json && node scripts/copy-assets.mjs",
|
|
83
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
89
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p e2e/tsconfig.json",
|
|
84
90
|
"test": "vitest run --config vitest.config.ts",
|
|
85
91
|
"presets:build": "node scripts/build-preset-patches.mjs",
|
|
86
92
|
"presets:check": "node scripts/build-preset-patches.mjs --check",
|
|
87
93
|
"e2e": "tsx tests/support/harness/dsh-e2e.ts",
|
|
88
|
-
"e2e:
|
|
94
|
+
"e2e:browser": "e2e run --config e2e/e2e.config.ts",
|
|
89
95
|
"mock:llm": "tsx tests/support/mock-openai/cli.ts",
|
|
90
96
|
"postinstall": "node scripts/patch-pi-natives.mjs"
|
|
91
97
|
},
|
|
92
98
|
"peerDependencies": {
|
|
93
99
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
94
|
-
"@deepseek-ai/dsh-agent": "0.2.0-
|
|
95
|
-
"@deepseek-ai/dsh-agent-preset": "0.2.0-
|
|
96
|
-
"@deepseek-ai/dsh-agent-preset-registry": "0.2.0-
|
|
97
|
-
"@deepseek-ai/dsh-attachment": "0.2.0-
|
|
98
|
-
"@deepseek-ai/dsh-client-connection": "0.2.0-
|
|
99
|
-
"@deepseek-ai/dsh-fs": "0.2.0-
|
|
100
|
-
"@deepseek-ai/dsh-jobs": "0.2.0-
|
|
101
|
-
"@deepseek-ai/dsh-llm": "0.2.0-
|
|
102
|
-
"@deepseek-ai/dsh-sandbox": "0.2.0-
|
|
103
|
-
"@deepseek-ai/dsh-session": "0.2.0-
|
|
104
|
-
"@deepseek-ai/dsh-settings": "0.2.0-
|
|
105
|
-
"@deepseek-ai/dsh-shell": "0.2.0-
|
|
106
|
-
"@deepseek-ai/dsh-shell-env": "0.2.0-
|
|
107
|
-
"@deepseek-ai/dsh-system-prompt": "0.2.0-
|
|
108
|
-
"@deepseek-ai/dsh-tools": "0.2.0-
|
|
100
|
+
"@deepseek-ai/dsh-agent": ">=0.2.1-0 <0.3.0-0",
|
|
101
|
+
"@deepseek-ai/dsh-agent-preset": ">=0.2.1-0 <0.3.0-0",
|
|
102
|
+
"@deepseek-ai/dsh-agent-preset-registry": ">=0.2.1-0 <0.3.0-0",
|
|
103
|
+
"@deepseek-ai/dsh-attachment": ">=0.2.1-0 <0.3.0-0",
|
|
104
|
+
"@deepseek-ai/dsh-client-connection": ">=0.2.1-0 <0.3.0-0",
|
|
105
|
+
"@deepseek-ai/dsh-fs": ">=0.2.1-0 <0.3.0-0",
|
|
106
|
+
"@deepseek-ai/dsh-jobs": ">=0.2.1-0 <0.3.0-0",
|
|
107
|
+
"@deepseek-ai/dsh-llm": ">=0.2.1-0 <0.3.0-0",
|
|
108
|
+
"@deepseek-ai/dsh-sandbox": ">=0.2.1-0 <0.3.0-0",
|
|
109
|
+
"@deepseek-ai/dsh-session": ">=0.2.1-0 <0.3.0-0",
|
|
110
|
+
"@deepseek-ai/dsh-settings": ">=0.2.1-0 <0.3.0-0",
|
|
111
|
+
"@deepseek-ai/dsh-shell": ">=0.2.1-0 <0.3.0-0",
|
|
112
|
+
"@deepseek-ai/dsh-shell-env": ">=0.2.1-0 <0.3.0-0",
|
|
113
|
+
"@deepseek-ai/dsh-system-prompt": ">=0.2.1-0 <0.3.0-0",
|
|
114
|
+
"@deepseek-ai/dsh-tools": ">=0.2.1-0 <0.3.0-0"
|
|
109
115
|
},
|
|
110
116
|
"optionalPeerDependencies": {
|
|
111
117
|
"sharp": ">=0.33"
|
|
112
118
|
},
|
|
113
119
|
"dependencies": {
|
|
114
|
-
"@deepseek-ai/dsh-brand": "0.2.
|
|
115
|
-
"@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
|
|
120
|
+
"@deepseek-ai/dsh-brand": "0.2.1-rc.1",
|
|
116
121
|
"@deepseek-ai/schemastery": "~3.18.4",
|
|
117
122
|
"@oh-my-pi/omptype": "18.1.17",
|
|
118
123
|
"@oh-my-pi/pi-agent-core": "18.1.17",
|
|
@@ -127,37 +132,46 @@
|
|
|
127
132
|
"yaml": "^2.9.0"
|
|
128
133
|
},
|
|
129
134
|
"devDependencies": {
|
|
135
|
+
"@ai-sdk/openai-compatible": "^3.0.67",
|
|
130
136
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
131
|
-
"@deepseek-ai/dsh-agent": "0.2.
|
|
132
|
-
"@deepseek-ai/dsh-
|
|
133
|
-
"@deepseek-ai/dsh-
|
|
134
|
-
"@deepseek-ai/dsh-
|
|
135
|
-
"@deepseek-ai/dsh-
|
|
136
|
-
"@deepseek-ai/dsh-
|
|
137
|
-
"@deepseek-ai/dsh-client-
|
|
138
|
-
"@deepseek-ai/dsh-client-
|
|
139
|
-
"@deepseek-ai/dsh-client-
|
|
140
|
-
"@deepseek-ai/dsh-client-ui-
|
|
141
|
-
"@deepseek-ai/dsh-client-ui-
|
|
142
|
-
"@deepseek-ai/dsh-client-ui-
|
|
143
|
-
"@deepseek-ai/dsh-client-ui-
|
|
144
|
-
"@deepseek-ai/dsh-client-ui-
|
|
145
|
-
"@deepseek-ai/dsh-
|
|
146
|
-
"@deepseek-ai/dsh-
|
|
147
|
-
"@deepseek-ai/dsh-
|
|
148
|
-
"@deepseek-ai/dsh-
|
|
149
|
-
"@deepseek-ai/dsh-
|
|
150
|
-
"@deepseek-ai/dsh-
|
|
151
|
-
"@deepseek-ai/dsh-
|
|
152
|
-
"@deepseek-ai/dsh-
|
|
153
|
-
"@deepseek-ai/dsh-
|
|
154
|
-
"@deepseek-ai/dsh-
|
|
155
|
-
"@deepseek-ai/dsh-
|
|
156
|
-
"@deepseek-ai/dsh-
|
|
157
|
-
"@deepseek-ai/dsh-
|
|
137
|
+
"@deepseek-ai/dsh-agent": "0.2.1-rc.1",
|
|
138
|
+
"@deepseek-ai/dsh-agent-preset": "0.2.1-rc.1",
|
|
139
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-rc.1",
|
|
140
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.1-rc.1",
|
|
141
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.1",
|
|
142
|
+
"@deepseek-ai/dsh-attachment": "0.2.1-rc.1",
|
|
143
|
+
"@deepseek-ai/dsh-client-connection": "0.2.1-rc.1",
|
|
144
|
+
"@deepseek-ai/dsh-client-locale": "0.2.1-rc.1",
|
|
145
|
+
"@deepseek-ai/dsh-client-store": "0.2.1-rc.1",
|
|
146
|
+
"@deepseek-ai/dsh-client-ui-chat": "0.2.1-rc.1",
|
|
147
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.1",
|
|
148
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.1",
|
|
149
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.1",
|
|
150
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.1",
|
|
151
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.1-rc.1",
|
|
152
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.1",
|
|
153
|
+
"@deepseek-ai/dsh-client-ui-tool": "0.2.1-rc.1",
|
|
154
|
+
"@deepseek-ai/dsh-fs": "0.2.1-rc.1",
|
|
155
|
+
"@deepseek-ai/dsh-fs-local": "0.2.1-rc.1",
|
|
156
|
+
"@deepseek-ai/dsh-jobs": "0.2.1-rc.1",
|
|
157
|
+
"@deepseek-ai/dsh-jobs-local": "0.2.1-rc.1",
|
|
158
|
+
"@deepseek-ai/dsh-llm": "0.2.1-rc.1",
|
|
159
|
+
"@deepseek-ai/dsh-sandbox": "0.2.1-rc.1",
|
|
160
|
+
"@deepseek-ai/dsh-session": "0.2.1-rc.1",
|
|
161
|
+
"@deepseek-ai/dsh-settings": "0.2.1-rc.1",
|
|
162
|
+
"@deepseek-ai/dsh-shell": "0.2.1-rc.1",
|
|
163
|
+
"@deepseek-ai/dsh-shell-env": "0.2.1-rc.1",
|
|
164
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-rc.1",
|
|
165
|
+
"@deepseek-ai/dsh-token-meter": "0.2.1-rc.1",
|
|
166
|
+
"@deepseek-ai/dsh-tool-jobs": "0.2.1-rc.1",
|
|
167
|
+
"@deepseek-ai/dsh-tool-str-replace-editor": "0.2.1-rc.1",
|
|
168
|
+
"@deepseek-ai/dsh-tools": "0.2.1-rc.1",
|
|
169
|
+
"@e2e-dev/web": "0.14.0",
|
|
158
170
|
"@types/node": "^22.19.0",
|
|
159
171
|
"@types/react": "^19.0.0",
|
|
160
172
|
"@types/react-dom": "^19.0.0",
|
|
173
|
+
"ai": "^7.0.137",
|
|
174
|
+
"e2e": "0.19.0",
|
|
161
175
|
"react": "^19.0.0",
|
|
162
176
|
"react-dom": "^19.0.0",
|
|
163
177
|
"sharp": "^0.35.4",
|
|
@@ -29,12 +29,13 @@
|
|
|
29
29
|
- id: persona
|
|
30
30
|
name: '@deepseek-ai/dsh-persona'
|
|
31
31
|
config:
|
|
32
|
-
suffix: Your working directory is {{cwd}}.
|
|
33
32
|
prefix: You are a coding agent powered by the {{model}} model.
|
|
34
33
|
- id: agent-instructions
|
|
35
34
|
name: '@deepseek-ai/dsh-agent-instructions'
|
|
36
35
|
config:
|
|
37
36
|
maxBytes: 65536
|
|
37
|
+
- id: time-context
|
|
38
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
38
39
|
- id: tool-plus
|
|
39
40
|
name: '@xiaoso/dsh-tool-plus'
|
|
40
41
|
disabled: true
|
|
@@ -43,6 +44,8 @@
|
|
|
43
44
|
disabled: true
|
|
44
45
|
- id: tool-jobs
|
|
45
46
|
name: '@deepseek-ai/dsh-tool-jobs'
|
|
47
|
+
- id: tool-schedule
|
|
48
|
+
name: '@deepseek-ai/dsh-tool-schedule'
|
|
46
49
|
- id: skill-filesystem
|
|
47
50
|
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
48
51
|
- id: tool-skill
|
|
@@ -61,7 +64,7 @@
|
|
|
61
64
|
name: '@deepseek-ai/dsh-plan-mode'
|
|
62
65
|
config:
|
|
63
66
|
section: |
|
|
64
|
-
You are in plan mode. Stay in plan mode until
|
|
67
|
+
You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
|
|
65
68
|
|
|
66
69
|
Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
|
|
67
70
|
|
|
@@ -105,29 +108,11 @@
|
|
|
105
108
|
provider: spawn
|
|
106
109
|
toolName: subagent
|
|
107
110
|
modelSelectionSettings: true
|
|
108
|
-
backgroundMode: continuable
|
|
109
111
|
- id: tool-subagent-fork
|
|
110
112
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
111
113
|
config:
|
|
112
114
|
provider: fork
|
|
113
115
|
toolName: subagent_fork
|
|
114
|
-
backgroundMode: continuable
|
|
115
|
-
- id: tool-subagent-codex
|
|
116
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
117
|
-
disabled: true
|
|
118
|
-
config:
|
|
119
|
-
provider: codex
|
|
120
|
-
toolName: subagent_codex
|
|
121
|
-
backgroundMode: one-shot
|
|
122
|
-
maxDepth: provider-managed
|
|
123
|
-
- id: tool-subagent-claude-code
|
|
124
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
125
|
-
disabled: true
|
|
126
|
-
config:
|
|
127
|
-
provider: claude-code
|
|
128
|
-
toolName: subagent_claude_code
|
|
129
|
-
backgroundMode: one-shot
|
|
130
|
-
maxDepth: provider-managed
|
|
131
116
|
- id: workflow-ptc
|
|
132
117
|
name: '@deepseek-ai/dsh-workflow-ptc'
|
|
133
118
|
disabled: true
|
|
@@ -136,12 +121,6 @@
|
|
|
136
121
|
- id: tool-workflow
|
|
137
122
|
name: '@deepseek-ai/dsh-tool-workflow'
|
|
138
123
|
disabled: true
|
|
139
|
-
- id: tool-ralph
|
|
140
|
-
name: '@deepseek-ai/dsh-tool-ralph'
|
|
141
|
-
disabled: true
|
|
142
|
-
config:
|
|
143
|
-
subagentProvider: spawn
|
|
144
|
-
maxRounds: 64
|
|
145
124
|
- id: tool-ask-user
|
|
146
125
|
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
147
126
|
- id: tool-todo
|
|
@@ -162,3 +141,6 @@
|
|
|
162
141
|
- id: tool-plugin-manager
|
|
163
142
|
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
164
143
|
disabled: true
|
|
144
|
+
- id: tool-plugin-market
|
|
145
|
+
name: '@deepseek-ai/dsh-plugin-market/tools'
|
|
146
|
+
disabled: true
|
|
@@ -29,12 +29,13 @@
|
|
|
29
29
|
- id: persona
|
|
30
30
|
name: '@deepseek-ai/dsh-persona'
|
|
31
31
|
config:
|
|
32
|
-
suffix: Your working directory is {{cwd}}.
|
|
33
32
|
prefix: You are a coding agent powered by the {{model}} model.
|
|
34
33
|
- id: agent-instructions
|
|
35
34
|
name: '@deepseek-ai/dsh-agent-instructions'
|
|
36
35
|
config:
|
|
37
36
|
maxBytes: 65536
|
|
37
|
+
- id: time-context
|
|
38
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
38
39
|
- id: tool-plus
|
|
39
40
|
name: '@xiaoso/dsh-tool-plus'
|
|
40
41
|
disabled: true
|
|
@@ -43,6 +44,8 @@
|
|
|
43
44
|
disabled: true
|
|
44
45
|
- id: tool-jobs
|
|
45
46
|
name: '@deepseek-ai/dsh-tool-jobs'
|
|
47
|
+
- id: tool-schedule
|
|
48
|
+
name: '@deepseek-ai/dsh-tool-schedule'
|
|
46
49
|
- id: skill-filesystem
|
|
47
50
|
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
48
51
|
- id: tool-skill
|
|
@@ -61,7 +64,7 @@
|
|
|
61
64
|
name: '@deepseek-ai/dsh-plan-mode'
|
|
62
65
|
config:
|
|
63
66
|
section: |
|
|
64
|
-
You are in plan mode. Stay in plan mode until
|
|
67
|
+
You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
|
|
65
68
|
|
|
66
69
|
Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
|
|
67
70
|
|
|
@@ -105,41 +108,17 @@
|
|
|
105
108
|
provider: spawn
|
|
106
109
|
toolName: subagent
|
|
107
110
|
modelSelectionSettings: true
|
|
108
|
-
backgroundMode: continuable
|
|
109
111
|
- id: tool-subagent-fork
|
|
110
112
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
111
113
|
config:
|
|
112
114
|
provider: fork
|
|
113
115
|
toolName: subagent_fork
|
|
114
|
-
backgroundMode: continuable
|
|
115
|
-
- id: tool-subagent-codex
|
|
116
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
117
|
-
disabled: true
|
|
118
|
-
config:
|
|
119
|
-
provider: codex
|
|
120
|
-
toolName: subagent_codex
|
|
121
|
-
backgroundMode: one-shot
|
|
122
|
-
maxDepth: provider-managed
|
|
123
|
-
- id: tool-subagent-claude-code
|
|
124
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
125
|
-
disabled: true
|
|
126
|
-
config:
|
|
127
|
-
provider: claude-code
|
|
128
|
-
toolName: subagent_claude_code
|
|
129
|
-
backgroundMode: one-shot
|
|
130
|
-
maxDepth: provider-managed
|
|
131
116
|
- id: workflow-ptc
|
|
132
117
|
name: '@deepseek-ai/dsh-workflow-ptc'
|
|
133
118
|
config:
|
|
134
119
|
provider: spawn
|
|
135
120
|
- id: tool-workflow
|
|
136
121
|
name: '@deepseek-ai/dsh-tool-workflow'
|
|
137
|
-
- id: tool-ralph
|
|
138
|
-
name: '@deepseek-ai/dsh-tool-ralph'
|
|
139
|
-
disabled: true
|
|
140
|
-
config:
|
|
141
|
-
subagentProvider: spawn
|
|
142
|
-
maxRounds: 64
|
|
143
122
|
- id: tool-ask-user
|
|
144
123
|
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
145
124
|
- id: tool-todo
|
|
@@ -156,3 +135,6 @@
|
|
|
156
135
|
- id: tool-plugin-manager
|
|
157
136
|
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
158
137
|
disabled: true
|
|
138
|
+
- id: tool-plugin-market
|
|
139
|
+
name: '@deepseek-ai/dsh-plugin-market/tools'
|
|
140
|
+
disabled: true
|