@sh1robana/dsh-plugin-message-edit 0.3.0 → 0.3.2
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/CHANGELOG.md +24 -0
- package/LICENSE +1 -1
- package/NOTICE.md +3 -1
- package/README.md +15 -9
- package/build-info.json +6 -6
- package/client.js +131 -88
- package/client.js.map +1 -1
- package/docs//345/217/221/345/270/203/346/214/207/345/215/227.md +22 -8
- package/index.mjs +37 -20
- package/package.json +141 -141
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# 开发与发布
|
|
2
2
|
|
|
3
|
-
项目仓库:[sh1robana/dsh-plugin-message-edit](https://github.com/sh1robana/dsh-plugin-message-edit)
|
|
3
|
+
项目仓库:[sh1robana/dsh-plugin-message-edit](https://github.com/sh1robana/dsh-plugin-message-edit)。本页以 `0.3.2` 为发行示例,首个正式版本为 `0.3.0`。上线状态以各渠道的实际条目为准。
|
|
4
|
+
|
|
5
|
+
本次发行版本为 `0.3.2`,包含 DSH `0.2.1-rc.2` 适配及日志结构修复,已获准发布到 GitHub 和 npm;两渠道结果分别在 `log/README.md` 记录。既有 `0.3.1` 发行包不覆盖,社区目录更新另按授权执行。
|
|
4
6
|
|
|
5
7
|
## 构建安装包
|
|
6
8
|
|
|
7
|
-
需要 Node.js 24
|
|
9
|
+
需要 Node.js 24 或以上。先创建 `artifacts` 目录,安装开发依赖后执行:
|
|
8
10
|
|
|
9
11
|
```sh
|
|
10
12
|
npm ci
|
|
@@ -13,21 +15,33 @@ npm test
|
|
|
13
15
|
npm pack --ignore-scripts --pack-destination artifacts
|
|
14
16
|
```
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
`npm pack` 实际生成 `artifacts/sh1robana-dsh-plugin-message-edit-0.3.2.tgz`。为统一 GitHub Release 附件名称,在 PowerShell 中复制为发行文件名:
|
|
19
|
+
|
|
20
|
+
```powershell
|
|
21
|
+
Copy-Item -LiteralPath ./artifacts/sh1robana-dsh-plugin-message-edit-0.3.2.tgz -Destination ./artifacts/dsh-plugin-message-edit-0.3.2.tgz
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
GitHub Release 上传使用复制后的 `artifacts/dsh-plugin-message-edit-0.3.2.tgz`,两份文件内容相同。安装包包含已构建的宿主与客户端、README、许可、构建指纹及演示截图,不包含本机配置、会话或备份。更新版本时,以上两个文件名中的版本号一并调整;已发布安装包不覆盖。
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
当前工作区的官方宿主开发依赖对齐 DSH `0.2.1-rc.2`、Cordis `4.0.5`,运行时依赖保留在 `peerDependencies`。顶层 `engines.dsh` 与相关 peer 使用 `0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2`;实际完成桌面验证的仍为前两个版本,`0.2.1-rc.2` 待桌面验收。改名、改版本或改源码后都需要重新构建、测试和打包。
|
|
27
|
+
|
|
28
|
+
`npm test` 默认执行 109 项检查。将 `DSH_TARGET_ATTACHMENT_CLIENT` 设置为目标宿主 `dsh-client-ui-attachment/lib/client.js` 的绝对路径,额外检查原生拖放;将 `DSH_TARGET_MODULES_CLIENT` 设置为目标 `dsh-client-modules/lib/client.js` 的绝对路径,额外检查真实模块加载器与本次客户端产物。两个输入均启用时共 111 项,只读取目标实现,不安装或重启宿主。真实 AgentLoop 回归还使用官方完整 V4 恢复校验器,覆盖首回合助手编辑后继续对话的日志结构;该校验器仅为开发依赖,不添加为运行时 peer。桌面行为由维护者在独立测试会话验收,分别记录在 `log/`。
|
|
29
|
+
|
|
30
|
+
本机已将两个目标检查输入单独保存在 `.inspection/host-inputs/0.2.1-rc.2/`,使用方式见该目录的 `README.md`,无需保留整套宿主解包副本。这些是本地可选输入,不属于源码或发行包;干净克隆按上面的目标文件路径提供,适配新版时重新从对应目标取证。
|
|
19
31
|
|
|
20
32
|
## GitHub
|
|
21
33
|
|
|
22
|
-
1.
|
|
34
|
+
1. 核对 Git 远程地址和目标分支,确认推送到本项目仓库;本工作区的 `origin` 是 Moeblack 上游,不能直接作为发布目标。
|
|
23
35
|
2. 核对 `package.json` 的 `repository`、`homepage`、`bugs` 和贡献者指向实际项目与 GitHub 公开名称。
|
|
24
36
|
3. 推送源码,保留上游来源与许可。不要推送 `.inspection`、`.local-backups`、`.dsh`、`node_modules` 或个人会话截图。
|
|
25
|
-
4. 创建 `v0.3.
|
|
37
|
+
4. 创建 `v0.3.2` Release,附上测试通过的 `dsh-plugin-message-edit-0.3.2.tgz`,核对下载内容。安装时将 Release 附件的完整链接交给 `dsh plugin add`。
|
|
26
38
|
|
|
27
39
|
GitHub CLI 可以通过 `gh auth login --hostname github.com --git-protocol https --web` 登录。账号认证由维护者本人完成。
|
|
28
40
|
|
|
29
41
|
## npm
|
|
30
42
|
|
|
43
|
+
仅在获得 npm 发布授权后执行本节;GitHub Release 发布不会自动更新 npm。
|
|
44
|
+
|
|
31
45
|
`dsh-plugin-message-edit` 的无作用域包名已被其他维护者占用。npm 包使用维护者的作用域 `@sh1robana/dsh-plugin-message-edit`;GitHub 仓库名称不受影响。
|
|
32
46
|
|
|
33
47
|
使用实际维护者的 npm 账号完成官方网页登录:
|
|
@@ -37,9 +51,9 @@ npm login --auth-type=web --registry https://registry.npmjs.org/
|
|
|
37
51
|
npm whoami
|
|
38
52
|
```
|
|
39
53
|
|
|
40
|
-
包名已经同步到 manifest、锁文件、补丁、构建配置和 README。重新构建、测试、打包后,使用检查过的安装包执行 `npm publish ./artifacts/dsh-plugin-message-edit-0.3.
|
|
54
|
+
包名已经同步到 manifest、锁文件、补丁、构建配置和 README。重新构建、测试、打包后,使用检查过的安装包执行 `npm publish ./artifacts/dsh-plugin-message-edit-0.3.2.tgz --access public --tag latest`。
|
|
41
55
|
|
|
42
|
-
网页登录或发布的双重验证由账号持有人完成,不需要向协作者提供密码或长期令牌。发布后核对 `npm view @sh1robana/dsh-plugin-message-edit@0.3.
|
|
56
|
+
网页登录或发布的双重验证由账号持有人完成,不需要向协作者提供密码或长期令牌。发布后核对 `npm view @sh1robana/dsh-plugin-message-edit@0.3.2 version dist.integrity repository`,再用干净的测试 profile 验证从 registry 拉取。
|
|
43
57
|
|
|
44
58
|
参考:[npm 作用域公共包发布说明](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages/)、[发布双重验证](https://docs.npmjs.com/requiring-2fa-for-package-publishing-and-settings-modification/)。
|
|
45
59
|
|
package/index.mjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
1
2
|
import { foldSurface } from "@deepseek-ai/dsh-session";
|
|
3
|
+
import { createSystemMessage } from "@deepseek-ai/dsh-llm";
|
|
2
4
|
//#region src/saved-user-messages.ts
|
|
3
5
|
function savedUserMessageSeq(event) {
|
|
4
6
|
if (event.type !== "user/message" || typeof event.surfaceOp !== "object" || event.surfaceOp.op !== "replace") return void 0;
|
|
@@ -32,9 +34,9 @@ function visibleUserEvents(events) {
|
|
|
32
34
|
//#region src/build-info.ts
|
|
33
35
|
/** 由构建脚本生成;前后端共享同一份构建身份。 */
|
|
34
36
|
const MESSAGE_EDIT_BUILD_INFO = Object.freeze({
|
|
35
|
-
"version": "0.3.
|
|
36
|
-
"buildId": "
|
|
37
|
-
"targetDshVersion": "0.2.
|
|
37
|
+
"version": "0.3.2",
|
|
38
|
+
"buildId": "dd2956d22ba2bccbd0c2",
|
|
39
|
+
"targetDshVersion": "0.2.1-rc.2"
|
|
38
40
|
});
|
|
39
41
|
//#endregion
|
|
40
42
|
//#region src/shared.ts
|
|
@@ -46,6 +48,7 @@ const MESSAGE_EDIT_VIEW_ORDER = 15;
|
|
|
46
48
|
const MESSAGE_EDIT_VERSION_SCHEMA = 2;
|
|
47
49
|
//#endregion
|
|
48
50
|
//#region src/index.ts
|
|
51
|
+
/** Host half of Message Edit: turn-atomic forks and structurally reversible versions. */
|
|
49
52
|
/** Stable Cordis plugin name. */
|
|
50
53
|
const name = "message-edit";
|
|
51
54
|
/** Public services used by the branch transaction and timeline projection. */
|
|
@@ -428,14 +431,19 @@ function appendSurfaceSeedEvent(events, type, data, intent) {
|
|
|
428
431
|
...intent.sourceEventSeqs === void 0 ? {} : { sourceEventSeqs: intent.sourceEventSeqs }
|
|
429
432
|
});
|
|
430
433
|
}
|
|
431
|
-
function appendManualTurn(events, manual) {
|
|
434
|
+
function appendManualTurn(events, manual, reserveSystemHead) {
|
|
432
435
|
const { turn, user, assistant } = manual;
|
|
433
436
|
appendLogSeedEvent(events, "turn/start", { turn });
|
|
434
|
-
appendSurfaceSeedEvent(events, "user/message", user, { surfaceOp: "append" });
|
|
435
437
|
appendLogSeedEvent(events, "step/start", {
|
|
436
438
|
turn,
|
|
437
439
|
step: 1
|
|
438
440
|
});
|
|
441
|
+
if (reserveSystemHead) appendSurfaceSeedEvent(events, "system/message", {
|
|
442
|
+
turn,
|
|
443
|
+
step: 1,
|
|
444
|
+
message: createSystemMessage("")
|
|
445
|
+
}, { surfaceOp: "append" });
|
|
446
|
+
appendSurfaceSeedEvent(events, "user/message", user, { surfaceOp: "append" });
|
|
439
447
|
appendSurfaceSeedEvent(events, "assistant/message", {
|
|
440
448
|
turn,
|
|
441
449
|
step: 1,
|
|
@@ -491,7 +499,7 @@ function versionSeed(source, plan, projections) {
|
|
|
491
499
|
});
|
|
492
500
|
}
|
|
493
501
|
appendLogSeedEvent(events, "message-edit/version", plan.version);
|
|
494
|
-
if (plan.manualTurn !== void 0) appendManualTurn(events, plan.manualTurn);
|
|
502
|
+
if (plan.manualTurn !== void 0) appendManualTurn(events, plan.manualTurn, foldSurface(events, projections).nodes.length === 0);
|
|
495
503
|
return {
|
|
496
504
|
events,
|
|
497
505
|
inheritedLength
|
|
@@ -686,11 +694,17 @@ async function openReference(ctx, sessionId, path, signal) {
|
|
|
686
694
|
const snapshot = await ctx.sessionQuery.readSession(sessionId);
|
|
687
695
|
const fs = ctx.get("fs");
|
|
688
696
|
if (fs === void 0) throw new Error("当前 DSH 未提供文件系统服务。");
|
|
697
|
+
const controller = sessionController(ctx);
|
|
698
|
+
let cwd = snapshot.session.cwd;
|
|
699
|
+
if (!isAbsolute(path)) {
|
|
700
|
+
const directory = (await controller.projections({ sessionId }, signal))?.values["workingDirectory"];
|
|
701
|
+
if (typeof directory === "string") cwd = directory;
|
|
702
|
+
}
|
|
689
703
|
const target = await fs.resolve(path, {
|
|
690
|
-
...
|
|
704
|
+
...cwd === void 0 ? {} : { cwd },
|
|
691
705
|
signal
|
|
692
706
|
});
|
|
693
|
-
await
|
|
707
|
+
await controller.openWorkspacePath({ path: fs.processPath(target) }, signal);
|
|
694
708
|
}
|
|
695
709
|
async function recoverOperation(inverses) {
|
|
696
710
|
const failures = [];
|
|
@@ -904,16 +918,19 @@ async function mapConcurrent(items, worker) {
|
|
|
904
918
|
return results;
|
|
905
919
|
}
|
|
906
920
|
async function timeline(ctx, sessionId) {
|
|
921
|
+
const currentLog = await ctx.sessionQuery.readSession(sessionId);
|
|
907
922
|
const targetTrace = await ctx.sessionQuery.traceSession(sessionId);
|
|
908
923
|
const rootId = targetTrace.complete ? targetTrace.root.header.id : targetTrace.ancestors.at(-1)?.header.id ?? sessionId;
|
|
909
924
|
const rootTrace = rootId === sessionId ? targetTrace : await ctx.sessionQuery.traceSession(rootId);
|
|
910
925
|
const lineage = flattenLineage(rootTrace.target, rootTrace.descendants);
|
|
911
|
-
const
|
|
912
|
-
if (record.header.id
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
926
|
+
const inspections = await mapConcurrent(lineage, async ({ record }) => {
|
|
927
|
+
if (record.header.id === sessionId) return { version: ownVersionEvent(record.header, currentLog.events, currentLog.inheritedEventCount) };
|
|
928
|
+
try {
|
|
929
|
+
const log = await ctx.sessionQuery.readSession(record.header.id);
|
|
930
|
+
return { version: ownVersionEvent(record.header, log.events, log.inheritedEventCount) };
|
|
931
|
+
} catch (error) {
|
|
932
|
+
return { unavailableReason: error instanceof Error ? error.message : String(error) };
|
|
933
|
+
}
|
|
917
934
|
});
|
|
918
935
|
const recordsById = new Map(lineage.map(({ record }) => [record.header.id, record]));
|
|
919
936
|
const currentPath = /* @__PURE__ */ new Set();
|
|
@@ -923,8 +940,8 @@ async function timeline(ctx, sessionId) {
|
|
|
923
940
|
pathId = recordsById.get(pathId)?.header.parentSession;
|
|
924
941
|
}
|
|
925
942
|
const versions = lineage.map(({ record, depth }, index) => {
|
|
926
|
-
const
|
|
927
|
-
const version =
|
|
943
|
+
const inspection = inspections[index];
|
|
944
|
+
const version = inspection?.version;
|
|
928
945
|
return {
|
|
929
946
|
sessionId: record.header.id,
|
|
930
947
|
...record.header.parentSession === void 0 ? {} : { parentSessionId: record.header.parentSession },
|
|
@@ -936,6 +953,7 @@ async function timeline(ctx, sessionId) {
|
|
|
936
953
|
depth,
|
|
937
954
|
current: record.header.id === sessionId,
|
|
938
955
|
onCurrentEffectPath: currentPath.has(record.header.id),
|
|
956
|
+
...inspection?.unavailableReason === void 0 ? {} : { unavailableReason: inspection.unavailableReason },
|
|
939
957
|
...version === void 0 ? {} : {
|
|
940
958
|
operation: version.effect.operation,
|
|
941
959
|
cascade: version.effect.cascade,
|
|
@@ -959,13 +977,12 @@ async function timeline(ctx, sessionId) {
|
|
|
959
977
|
const inverseId = undoCursor.inverseSessionId;
|
|
960
978
|
if (undoStack.includes(inverseId)) throw new Error("版本效果逆链包含循环。");
|
|
961
979
|
if (!versionsById.has(inverseId)) throw new Error(`恢复目标 ${inverseId} 不在可见版本树中。`);
|
|
980
|
+
if (versionsById.get(inverseId)?.unavailableReason !== void 0) break;
|
|
962
981
|
undoStack.push(inverseId);
|
|
963
982
|
undoCursor = versionsById.get(inverseId);
|
|
964
983
|
}
|
|
965
|
-
const redoSessionIds = versions.filter((version) => version.inverseSessionId === sessionId).map((version) => version.sessionId);
|
|
966
|
-
|
|
967
|
-
const currentLog = logs[currentIndex];
|
|
968
|
-
if (currentIndex < 0 || currentLog === void 0) throw new Error("当前版本不在版本树中。");
|
|
984
|
+
const redoSessionIds = versions.filter((version) => version.inverseSessionId === sessionId && version.unavailableReason === void 0).map((version) => version.sessionId);
|
|
985
|
+
if (versions.findIndex((version) => version.current) < 0) throw new Error("当前版本不在版本树中。");
|
|
969
986
|
const turns = closedTurns(visibleUserEvents(currentLog.events));
|
|
970
987
|
return {
|
|
971
988
|
sessionId,
|
package/package.json
CHANGED
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@sh1robana/dsh-plugin-message-edit",
|
|
3
|
-
"description": "DeepSeek Harness 桌面端消息编辑:原地保存、附件编辑、分支重生成与版本时间线",
|
|
4
|
-
"version": "0.3.
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./index.mjs",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": "./index.mjs",
|
|
9
|
-
"./client": "./client.js",
|
|
10
|
-
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
11
|
-
"./package.json": "./package.json"
|
|
12
|
-
},
|
|
13
|
-
"files": [
|
|
14
|
-
"index.mjs",
|
|
15
|
-
"client.js",
|
|
16
|
-
"client.js.map",
|
|
17
|
-
"cordis.patch.yml",
|
|
18
|
-
"README.md",
|
|
19
|
-
"NOTICE.md",
|
|
20
|
-
"build-info.json",
|
|
21
|
-
"LICENSE",
|
|
22
|
-
"docs/screenshots/editor-light.jpg",
|
|
23
|
-
"docs/screenshots/editor-dark.jpg",
|
|
24
|
-
"CHANGELOG.md",
|
|
25
|
-
"docs/发布指南.md"
|
|
26
|
-
],
|
|
27
|
-
"dsh": {
|
|
28
|
-
"bundle": {
|
|
29
|
-
"patch": "./cordis.patch.yml"
|
|
30
|
-
},
|
|
31
|
-
"client": {
|
|
32
|
-
"platform": "web",
|
|
33
|
-
"inject": [
|
|
34
|
-
"@deepseek-ai/dsh-client-connection",
|
|
35
|
-
"@deepseek-ai/dsh-api-session-controller",
|
|
36
|
-
"@deepseek-ai/dsh-client-ui-conversation",
|
|
37
|
-
"@deepseek-ai/dsh-client-ui-workspace"
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"@deepseek-ai/
|
|
61
|
-
"@deepseek-ai/dsh-
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-client-
|
|
67
|
-
"@deepseek-ai/dsh-client-
|
|
68
|
-
"@deepseek-ai/dsh-client-
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-
|
|
70
|
-
"@deepseek-ai/dsh-client-ui-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-
|
|
74
|
-
"@deepseek-ai/dsh-
|
|
75
|
-
"@deepseek-ai/dsh-session": "0.2.
|
|
76
|
-
"@deepseek-ai/dsh-session-
|
|
77
|
-
"@deepseek-ai/dsh-
|
|
78
|
-
"@
|
|
79
|
-
"@
|
|
80
|
-
"@types/react": "^18.3.0",
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"react": "^18.
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
},
|
|
93
|
-
"peerDependencies": {
|
|
94
|
-
"@deepseek-ai/cordis": "~4.0.4",
|
|
95
|
-
"@deepseek-ai/dsh-agent": "0.2.0-rc.2",
|
|
96
|
-
"@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2",
|
|
97
|
-
"@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2",
|
|
98
|
-
"@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
|
|
99
|
-
"@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
|
|
100
|
-
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
|
|
101
|
-
"@deepseek-ai/dsh-client-file-upload": "0.2.0-rc.2",
|
|
102
|
-
"@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
|
|
103
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
|
|
104
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
|
|
105
|
-
"@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
|
|
106
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
|
|
107
|
-
"@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.2",
|
|
108
|
-
"@deepseek-ai/dsh-llm": "0.2.0-rc.2",
|
|
109
|
-
"@deepseek-ai/dsh-session": "0.2.0-rc.2",
|
|
110
|
-
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.2",
|
|
111
|
-
"@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
|
|
112
|
-
"@deepseek-ai/dsh-session-query": "0.2.0-rc.2",
|
|
113
|
-
"@deepseek-ai/dsh-workspace": "0.2.0-rc.2"
|
|
114
|
-
},
|
|
115
|
-
"publishConfig": {
|
|
116
|
-
"access": "public",
|
|
117
|
-
"registry": "https://registry.npmjs.org/"
|
|
118
|
-
},
|
|
119
|
-
"contributors": [
|
|
120
|
-
{
|
|
121
|
-
"name": "shirobana",
|
|
122
|
-
"url": "https://github.com/sh1robana"
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"name": "Codex(OpenAI AI 编程助手)",
|
|
126
|
-
"url": "https://openai.com/codex/"
|
|
127
|
-
}
|
|
128
|
-
],
|
|
129
|
-
"repository": {
|
|
130
|
-
"type": "git",
|
|
131
|
-
"url": "git+https://github.com/sh1robana/dsh-plugin-message-edit.git"
|
|
132
|
-
},
|
|
133
|
-
"homepage": "https://github.com/sh1robana/dsh-plugin-message-edit#readme",
|
|
134
|
-
"bugs": {
|
|
135
|
-
"url": "https://github.com/sh1robana/dsh-plugin-message-edit/issues"
|
|
136
|
-
},
|
|
137
|
-
"author": {
|
|
138
|
-
"name": "shirobana",
|
|
139
|
-
"url": "https://github.com/sh1robana"
|
|
140
|
-
}
|
|
141
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@sh1robana/dsh-plugin-message-edit",
|
|
3
|
+
"description": "DeepSeek Harness 桌面端消息编辑:原地保存、附件编辑、分支重生成与版本时间线",
|
|
4
|
+
"version": "0.3.2",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./index.mjs",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./index.mjs",
|
|
9
|
+
"./client": "./client.js",
|
|
10
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
11
|
+
"./package.json": "./package.json"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"index.mjs",
|
|
15
|
+
"client.js",
|
|
16
|
+
"client.js.map",
|
|
17
|
+
"cordis.patch.yml",
|
|
18
|
+
"README.md",
|
|
19
|
+
"NOTICE.md",
|
|
20
|
+
"build-info.json",
|
|
21
|
+
"LICENSE",
|
|
22
|
+
"docs/screenshots/editor-light.jpg",
|
|
23
|
+
"docs/screenshots/editor-dark.jpg",
|
|
24
|
+
"CHANGELOG.md",
|
|
25
|
+
"docs/发布指南.md"
|
|
26
|
+
],
|
|
27
|
+
"dsh": {
|
|
28
|
+
"bundle": {
|
|
29
|
+
"patch": "./cordis.patch.yml"
|
|
30
|
+
},
|
|
31
|
+
"client": {
|
|
32
|
+
"platform": "web",
|
|
33
|
+
"inject": [
|
|
34
|
+
"@deepseek-ai/dsh-client-connection",
|
|
35
|
+
"@deepseek-ai/dsh-api-session-controller",
|
|
36
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
37
|
+
"@deepseek-ai/dsh-client-ui-workspace"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "node ./scripts/build.mjs",
|
|
43
|
+
"test": "node --test tests/*.test.mjs",
|
|
44
|
+
"prepublishOnly": "npm run build",
|
|
45
|
+
"check:installed": "powershell -NoProfile -File ./scripts/check-desktop-install.ps1"
|
|
46
|
+
},
|
|
47
|
+
"keywords": [
|
|
48
|
+
"deepseek-harness",
|
|
49
|
+
"dsh",
|
|
50
|
+
"dsh-plugin",
|
|
51
|
+
"message-edit",
|
|
52
|
+
"attachment",
|
|
53
|
+
"timeline"
|
|
54
|
+
],
|
|
55
|
+
"license": "MIT",
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@deepseek-ai/cordis": "~4.0.5",
|
|
58
|
+
"@deepseek-ai/dsh-agent": "0.2.1-rc.2",
|
|
59
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.1-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
|
|
63
|
+
"@deepseek-ai/dsh-client-connection": "0.2.1-rc.2",
|
|
64
|
+
"@deepseek-ai/dsh-client-file-upload": "0.2.1-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-store": "0.2.1-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.2",
|
|
71
|
+
"@deepseek-ai/dsh-llm": "0.2.1-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-session": "0.2.1-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-session-format-v3-to-v4": "0.2.1-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-session-persistence": "0.2.1-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-session-projection": "0.2.1-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-session-query": "0.2.1-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-workspace": "0.2.1-rc.2",
|
|
78
|
+
"@types/node": "^24.19.2",
|
|
79
|
+
"@types/react": "^18.3.0",
|
|
80
|
+
"@types/react-dom": "^18.3.0",
|
|
81
|
+
"immer": "^10.2.0",
|
|
82
|
+
"lightningcss": "^1.32.0",
|
|
83
|
+
"react": "^18.2.0",
|
|
84
|
+
"react-dom": "^18.3.1",
|
|
85
|
+
"tsdown": "^0.22.2",
|
|
86
|
+
"typescript": "^6.0.3",
|
|
87
|
+
"zustand": "~4.4.7"
|
|
88
|
+
},
|
|
89
|
+
"engines": {
|
|
90
|
+
"node": ">=24",
|
|
91
|
+
"dsh": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2"
|
|
92
|
+
},
|
|
93
|
+
"peerDependencies": {
|
|
94
|
+
"@deepseek-ai/cordis": "~4.0.4",
|
|
95
|
+
"@deepseek-ai/dsh-agent": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
96
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
97
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
98
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
99
|
+
"@deepseek-ai/dsh-attachment": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
100
|
+
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
101
|
+
"@deepseek-ai/dsh-client-file-upload": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
102
|
+
"@deepseek-ai/dsh-client-store": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
104
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
105
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
106
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
107
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
108
|
+
"@deepseek-ai/dsh-llm": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
109
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
111
|
+
"@deepseek-ai/dsh-session-projection": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
112
|
+
"@deepseek-ai/dsh-session-query": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
113
|
+
"@deepseek-ai/dsh-workspace": "0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2"
|
|
114
|
+
},
|
|
115
|
+
"publishConfig": {
|
|
116
|
+
"access": "public",
|
|
117
|
+
"registry": "https://registry.npmjs.org/"
|
|
118
|
+
},
|
|
119
|
+
"contributors": [
|
|
120
|
+
{
|
|
121
|
+
"name": "shirobana",
|
|
122
|
+
"url": "https://github.com/sh1robana"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"name": "Codex(OpenAI AI 编程助手)",
|
|
126
|
+
"url": "https://openai.com/codex/"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"repository": {
|
|
130
|
+
"type": "git",
|
|
131
|
+
"url": "git+https://github.com/sh1robana/dsh-plugin-message-edit.git"
|
|
132
|
+
},
|
|
133
|
+
"homepage": "https://github.com/sh1robana/dsh-plugin-message-edit#readme",
|
|
134
|
+
"bugs": {
|
|
135
|
+
"url": "https://github.com/sh1robana/dsh-plugin-message-edit/issues"
|
|
136
|
+
},
|
|
137
|
+
"author": {
|
|
138
|
+
"name": "shirobana",
|
|
139
|
+
"url": "https://github.com/sh1robana"
|
|
140
|
+
}
|
|
141
|
+
}
|