minecraft-dev-starter 0.1.1 → 0.1.3
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/AGENTS.md +19 -1
- package/README.md +12 -0
- package/lib/client.js +1 -1
- package/package.json +11 -4
- package/src/client/DetailTab.js +1 -1
- package/src/index.js +18 -2
package/AGENTS.md
CHANGED
|
@@ -73,6 +73,7 @@ node <npm>/@deepseek-ai/dsh/lib/bin.js --profile m0test --port 3499 --no-open
|
|
|
73
73
|
| 中文日志乱码 | `.bat` 输出按 GBK 编码 | `decodeLine`:先按 UTF-8 解,失败再按 GBK |
|
|
74
74
|
| 工具报 "value is not lossless JSON" | 返回值里带了 `undefined` | 只放存在的字段;测试里用 `assertLossless()` |
|
|
75
75
|
| 改 profile 后启动失败 | `package.json` 写入了 BOM | 用无 BOM 的 UTF-8 写;改完必须重启 DSH |
|
|
76
|
+
| 仓库的 `node_modules` 神秘消失 | 在某个 profile 里把 `link:` 依赖换成 `file:`/npm 包时,pnpm 解链会**删掉被链接目录的 `node_modules`**(实测:`plugin add link:` → 在 → `plugin add file:tgz` → 没了) | 别在同一 profile 里来回切换安装方式;tarball/registry 验证用独立 profile;发现消失就 `npm install --ignore-scripts` 重装 |
|
|
76
77
|
| 侧栏标签打不开 | `openTab` 的展开是异步的 | 打开后等一帧再断言 `isExpanded()` |
|
|
77
78
|
|
|
78
79
|
其他约定:
|
|
@@ -158,9 +159,26 @@ server:`Done (…s)!`);状态落盘并做重启后对账。顺带修了 GB
|
|
|
158
159
|
- 面板改名「MC 工程」→「Mod Dev」(功能名,不是名词描述),浮层表头/标签/详情页统一。
|
|
159
160
|
- 单工程工作区跳过工程列表:表头直接承担工程身份(名字 + loader/版本 + 路径)。
|
|
160
161
|
|
|
162
|
+
## 发布记录
|
|
163
|
+
|
|
164
|
+
- `0.1.0` → 首版。
|
|
165
|
+
- `0.1.1` → 修「最小 profile 起不来」:`webServer` 从 `inject` 里拿掉,改用
|
|
166
|
+
`ctx.inject(['webServer'], …)` 可选等待。原来在没有 web 层的 profile(只有 `dsh-base`)里会
|
|
167
|
+
`pending (waiting for service: webServer)`,整个 plugin tree 加载失败。
|
|
168
|
+
- `0.1.2` → 修「装 0.1.1 却打印 0.1.0」:`VERSION` 改为启动时读 `package.json`。
|
|
169
|
+
|
|
170
|
+
发版注意:
|
|
171
|
+
|
|
172
|
+
- 账号用的是 **granular token(只允许暂存)**,直接 `npm publish` 会被拒为 `E_STAGE_REQUIRED`。
|
|
173
|
+
流程是 `npm stage publish` → `npm stage list`(等 `status: validated`)→
|
|
174
|
+
`npm stage approve <stage-id>`(人工过 2FA)。token 不能批准,批准必须是人。
|
|
175
|
+
- 发布前必须 `npm run build`:`lib/client.js` 是提交进仓库的产物,忘了构建就会发出旧客户端。
|
|
176
|
+
- 新版本发出去后,用干净 profile 装一次并看启动日志里的 `host ready (x.y.z)`,
|
|
177
|
+
这条同时验证了「版本号读对了」与「包结构完整」。
|
|
178
|
+
|
|
161
179
|
## 还没做的事
|
|
162
180
|
|
|
163
181
|
- **M6 通用启动器**:HMCL 实例库 + 直启 java,让面板也能起非 Gradle 工程(估 5–8 天)。
|
|
164
|
-
- **发布**:目前只在本地 `link:` 安装。发布流程见 README 的「发布」一节。
|
|
165
182
|
- 跨 profile 共用 `~/.dsh/mc-dev-starter/state.json`:不同 profile 的实例记录会混在一起,
|
|
166
183
|
日志标签已按工程过滤,暂不影响使用,但值得按 profile 分目录。
|
|
184
|
+
- 桌面版目前仍用 `link:` 安装(改代码即时生效);切到 npm 版本需要每次改完都发版。
|
package/README.md
CHANGED
|
@@ -105,6 +105,18 @@ DSH 插件的分发就是 npm 包 + 一份清单声明,没有单独的注册
|
|
|
105
105
|
3. **自检**:`npm test`,`npm pack --dry-run` 看包里有没有多余文件(`files` 字段已限定
|
|
106
106
|
`src`、`lib`、`cordis.patch.yml`、README、AGENTS)。
|
|
107
107
|
4. **发布**:`npm publish --access public`。版本号走 semver,破坏性改动升主版本。
|
|
108
|
+
|
|
109
|
+
如果用的是 granular token(只允许暂存),会被拒为 `E_STAGE_REQUIRED`,改走两步:
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
npm stage publish # 提交到暂存区,拿到 stage-id
|
|
113
|
+
npm stage list # 看到 status: validated 再批准
|
|
114
|
+
npm stage approve <stage-id> # 需要人工过 2FA(网页确认)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
暂存 → 人工批准是 npm 的设计:机器提交、人确认,token 泄露也发不出正式版本。
|
|
118
|
+
批准后 `latest` 自动指向新版本,通常十几秒内可从 registry 拉到。
|
|
119
|
+
|
|
108
120
|
5. **兼容性**:宿主 API 会演进(本插件按 0.2.1-rc.3 的 `dsh-tools` 开发)。发布前把
|
|
109
121
|
`dependencies` 里的 `@deepseek-ai/dsh-tools` 与 `peerDependencies` 的 cordis 范围对齐
|
|
110
122
|
目标运行时;跨大版本时最好发两个版本而不是硬兼容。
|
package/lib/client.js
CHANGED
|
@@ -868,7 +868,7 @@ function DetailTab() {
|
|
|
868
868
|
)
|
|
869
869
|
)
|
|
870
870
|
],
|
|
871
|
-
h("div", { className: "mcdev-hint", style: { marginTop: 6 } }, "\u5E26 ? \u7684\u4EFB\u52A1\u662F\u6309 loader \u60EF\u4F8B\u63A8\u6D4B\u7684\uFF0C\u672A\
|
|
871
|
+
h("div", { className: "mcdev-hint", style: { marginTop: 6 } }, "\u5E26 ? \u7684\u4EFB\u52A1\u662F\u6309 loader \u60EF\u4F8B\u63A8\u6D4B\u7684\uFF0C\u5C1A\u672A\u771F\u5B9E\u8FD0\u884C\u9A8C\u8BC1\uFF1B\u53EF\u4EE5\u76F4\u63A5\u542F\u52A8\u8BD5\uFF0C\u5931\u8D25\u65F6\u65E5\u5FD7\u91CC\u4F1A\u7ED9\u51FA\u539F\u56E0\u3002")
|
|
872
872
|
]),
|
|
873
873
|
section(
|
|
874
874
|
"\u8BC1\u636E",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minecraft-dev-starter",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "DSH plugin that detects Minecraft mod projects and launches the client from the session header, with live logs in the sidebar",
|
|
6
6
|
"type": "module",
|
|
@@ -44,13 +44,20 @@
|
|
|
44
44
|
"test": "node --test \"test/*.test.js\""
|
|
45
45
|
},
|
|
46
46
|
"license": "MIT",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "git+https://github.com/Chemiofitor4096/minecraft-dev-starter.git"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/Chemiofitor4096/minecraft-dev-starter#readme",
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/Chemiofitor4096/minecraft-dev-starter/issues"
|
|
49
54
|
},
|
|
50
55
|
"peerDependencies": {
|
|
51
|
-
"@deepseek-ai/cordis": "^4.0.1"
|
|
56
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
57
|
+
"@deepseek-ai/dsh-tools": "^0.2.1-rc.1"
|
|
52
58
|
},
|
|
53
59
|
"devDependencies": {
|
|
60
|
+
"@deepseek-ai/dsh-tools": "0.2.1-rc.3",
|
|
54
61
|
"esbuild": "^0.28.2"
|
|
55
62
|
}
|
|
56
63
|
}
|
package/src/client/DetailTab.js
CHANGED
|
@@ -158,7 +158,7 @@ export function DetailTab() {
|
|
|
158
158
|
),
|
|
159
159
|
),
|
|
160
160
|
]),
|
|
161
|
-
h('div', { className: 'mcdev-hint', style: { marginTop: 6 } }, '带 ? 的任务是按 loader
|
|
161
|
+
h('div', { className: 'mcdev-hint', style: { marginTop: 6 } }, '带 ? 的任务是按 loader 惯例推测的,尚未真实运行验证;可以直接启动试,失败时日志里会给出原因。'),
|
|
162
162
|
]),
|
|
163
163
|
|
|
164
164
|
section(
|
package/src/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* @module minecraft-dev-starter
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { readFileSync } from 'node:fs'
|
|
9
10
|
import { createApi } from './lib/api.js'
|
|
10
11
|
import { createLaunchService } from './lib/launches.js'
|
|
11
12
|
import { applyTools } from './tools.js'
|
|
@@ -22,8 +23,23 @@ export const name = 'mcdev-host'
|
|
|
22
23
|
*/
|
|
23
24
|
export const inject = ['sessions', 'tools']
|
|
24
25
|
|
|
25
|
-
/**
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* 插件版本;客户端会显示,用来确认两边同一份代码。
|
|
28
|
+
*
|
|
29
|
+
* 从 package.json 读,不再手写——手写的常量在发版后必然忘记同步,
|
|
30
|
+
* 面板上就会出现"装了 0.1.1、显示 0.1.0"的假版本。
|
|
31
|
+
*/
|
|
32
|
+
const VERSION = readPackageVersion()
|
|
33
|
+
|
|
34
|
+
/** @returns {string} */
|
|
35
|
+
function readPackageVersion() {
|
|
36
|
+
try {
|
|
37
|
+
const url = new URL('../package.json', import.meta.url)
|
|
38
|
+
return String(JSON.parse(readFileSync(url, 'utf8')).version)
|
|
39
|
+
} catch {
|
|
40
|
+
return '0.0.0-unknown'
|
|
41
|
+
}
|
|
42
|
+
}
|
|
27
43
|
|
|
28
44
|
/**
|
|
29
45
|
* @param {import('node:http').IncomingMessage} req
|