@marsken/dsh-studio 0.1.0 → 0.1.1

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 CHANGED
@@ -44,18 +44,18 @@ node C:/Users/hp/.dsh/dsh-runtimes/dsh-primary-runtime/dependencies/pnpm/bin/pnp
44
44
 
45
45
  # 2) 部署:一条命令,传 index.js + dist/client.js + 整个 src/host,先备份再覆盖,最后自检
46
46
  cd ..
47
- DSH_DEPLOY_HOST=192.168.120.218 DSH_DEPLOY_USER=lyf DSH_DEPLOY_PASSWORD=*** node tools/deploy.mjs
47
+ DSH_DEPLOY_HOST=<host> DSH_DEPLOY_USER=<user> DSH_DEPLOY_PASSWORD=*** node tools/deploy.mjs
48
48
  # 没有密码就先用 --key 或 ssh-copy-id 授权本机公钥,再:node tools/deploy.mjs --dry-run 看它要传什么
49
49
 
50
50
  # 3) 冒烟:进面板 → 页签 → 看板有卡 → 用例库有行 → pageerror 必须为空
51
- STUDIO_TOKEN=$(echo 1234 | sudo -S journalctl -u dsh-web -n 50 | grep -o 'token=[A-Za-z0-9_-]*' | tail -1 | cut -d= -f2) \
51
+ STUDIO_TOKEN=$(sudo journalctl -u dsh-web -n 50 | grep -o 'token=[A-Za-z0-9_-]*' | tail -1 | cut -d= -f2) \
52
52
  node tools/visual/smoke.mjs
53
53
  ```
54
54
 
55
55
  > `tools/deploy.mjs` 会打印 `active=` / `files=` / `state=`,`active` 不是 active 就以非零退出。
56
56
  > 它依赖 `ssh2`(devDependency,只给部署用,不进插件运行时);`tools/visual/smoke.mjs` 依赖 `puppeteer-core`(同样只在 devDependencies 里),浏览器用系统 Chrome,可用 `CHROME_PATH` 指定。
57
57
 
58
- > 目标机上那个老的 `deploy-all.sh` 只作兜底(它拷 `/tmp/` 下的两个文件和 `src/`)。日常用 `tools/deploy.mjs`,别再手工 scp 拼路径。改了 `package.json`(包头、`engines`、`dsh.*`、`files`)、`cordis.patch.yml`、`locale/*.json` 时必须单独上传到 `/home/lyf/dsh-studio/` 再重启,否则改了个寂寞。改动前先 `cp package.json /tmp/package.json.bak` 留退路。
58
+ > 目标机上那个老的 `deploy-all.sh` 只作兜底(它拷 `/tmp/` 下的两个文件和 `src/`)。日常用 `tools/deploy.mjs`,别再手工 scp 拼路径。改了 `package.json`(包头、`engines`、`dsh.*`、`files`)、`cordis.patch.yml`、`locale/*.json` 时必须单独上传到插件目录(`~/dsh-studio/` 或 profile 的 `node_modules` 下)再重启,否则改了个寂寞。改动前先 `cp package.json /tmp/package.json.bak` 留退路。
59
59
  >
60
60
  > 宿主拆成 `src/host/*.js` 以后,**部署必须带整个 `src/` 目录**:`/tmp/index.js`、`/tmp/client.js`、`/tmp/src/host/{domain,dispatcher,executor,integrations,store}.js` 与 `/tmp/src/host/routes/*.js`。只传 `index.js` 会得到 `ReferenceError: sanitizeAccess is not defined`(服务 502)。
61
61
 
@@ -128,7 +128,7 @@ git remote -v # origin = ssh://git@ssh.github.com:443/marsken88/dsh-stu
128
128
  GIT_SSH_COMMAND="ssh -p 443" git push
129
129
  ```
130
130
  - 一个提交只做一件事,标题一句话说清(英文或中文均可,与既有历史保持同风格)。
131
- - **改完即推,不在本地攒**:每完成一件事(一个提交)就 `git push`。攒着会让三处对不上——远端、目标机 `.218` 上跑的、以及仓库里的,别人 `git clone` 拿到的还是旧版。历史上曾经一口气攒了 18 个提交才推,属于反面案例。
131
+ - **改完即推,不在本地攒**:每完成一件事(一个提交)就 `git push`。攒着会让三处对不上——远端、目标机上跑的、以及仓库里的,别人 `git clone` 拿到的还是旧版。历史上曾经一口气攒了 18 个提交才推,属于反面案例。
132
132
  - 提交前确保根 `client.js` 与 `dist/client.js` 一致(clone 下来即可安装靠的就是这一点)。
133
133
  - 版本号在 `package.json`;发布标签 `vX.Y.Z`。
134
134
 
package/README.md CHANGED
@@ -7,6 +7,17 @@
7
7
 
8
8
  运行环境:DSH `0.2.2-rc.1`,Node 22 以上,Linux/macOS(Windows 原生不支持 `link:` 安装 + systemd 托管)。
9
9
 
10
+ ## 它长什么样
11
+
12
+ | 看板:八列、角色负责人、卡片带进度/评论/用例 | 用例库:跨卡聚合、套件、最近回归 |
13
+ | --- | --- |
14
+ | ![看板](https://raw.githubusercontent.com/marsken88/dsh-studio/main/docs/images/board.png) | ![用例库](https://raw.githubusercontent.com/marsken88/dsh-studio/main/docs/images/cases.png) |
15
+
16
+ | 效能:一次通过率、返工率、按专家看质量 |
17
+ | --- |
18
+ | ![效能](https://raw.githubusercontent.com/marsken88/dsh-studio/main/docs/images/quality.png) |
19
+
20
+
10
21
  ## 部署
11
22
 
12
23
  仓库:https://github.com/marsken88/dsh-studio(`main` 分支,含可直接安装的构建产物 `client.js`,clone 下来就能装,不用先构建)。
@@ -692,7 +703,7 @@ node /tmp/verify-dashboard.mjs # 工作台风险计数 / flaky 不开缺陷 /
692
703
  - 每个 MR 会拉 `/pipelines` 与 `/changes`:流水线状态写进 `gitlabMR.pipeline`,改动文件写进 `coding.files`(研发没自报时自动补,提交按 MR 的 commits 计)。
693
704
  - **`opened` 且卡在「开发中」→ 自动推进到「待评审」**;**`merged` 且在「开发中/待评审」→ 自动推进到「待测试」**,两次都带一条评论说明来源;流水线失败追加一条失败评论。
694
705
  - 卡状态流转、阻塞、解除也会回写一条到 MR 的 notes(`broadcastChange`)。
695
- - 用 `tools/mock-gitlab.mjs`(127.0.0.1:18098)验证过 7/7:匹配、流水线、改动文件、自动推进都通;**真实 `git.lyf.com` 还需要令牌**(Role Developer+、scope `api`)。
706
+ - 用 `tools/mock-gitlab.mjs`(127.0.0.1:18098)验证过 7/7:匹配、流水线、改动文件、自动推进都通;**真实 GitLab 还需要令牌**(Role Developer+、scope `api`)。
696
707
 
697
708
  ### 工具数
698
709
 
@@ -874,7 +885,7 @@ Agent 的「我改了 A、B、C」现在可以和 worktree 里的 git 对账:
874
885
 
875
886
  ### 联调记录与网络前提(2026-11-09)
876
887
  - 本机用临时 slapd(`dc=test,dc=local`,`alice/Passw0rd!`、`bob/BobPass123`)跑过 `tools/verify-ldap.mjs`:**23/23 PASS**(配置写入、状态里无明文、测试连接、登录成功、显示名/邮箱/部门、users 记录、`/auth/me`、错密码 `badpass`、不存在 `notfound`、锁门 `/state` 与 401、带会话可访问、退出后失效、收尾关开关);联调用的 slapd 与测试账号已卸载清空。
877
- - **`ldap.laiyifen.com:389` 从 `.218` 不可达**(域名解析到 `10.1.0.167/10.1.0.166`,ping 全丢、TCP 389 不通,`ldapsearch` 超时)。真实参数已经写进配置(`url / baseDN / bindDN / 密码`),但 `enabled` 与 `requireLogin` **都关着**:等这台机器能访问目录服务(内网路由 / VPN / 防火墙放行 389),到设置里点「测试连接」通过后再打开开关,否则会把所有人锁在门外。
888
+ - **公司 LDAP(`ldap.<公司域>:389`)从目标机不可达**(解析到内网地址,ping 全丢、TCP 389 不通,`ldapsearch` 超时)。真实参数已经写进配置(`url / baseDN / bindDN / 密码`),但 `enabled` 与 `requireLogin` **都关着**:等这台机器能访问目录服务(内网路由 / VPN / 防火墙放行 389),到设置里点「测试连接」通过后再打开开关,否则会把所有人锁在门外。
878
889
  - `parseLdif` 支持 RFC 2849 的 `attr:: base64`(AD 的中文 `displayName` 就是这样编码的);`ldapsearch` 的过滤器必须排在属性**前面**,否则会被当成属性名、搜索退化成 `(objectClass=*)` 并触发 `Size limit exceeded`。
879
890
 
880
891
  ## 本地超管账号与免登录(2026-11-09)