@xirang-ai/dsh-teamflow 0.0.0-stage → 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/LICENSE +21 -0
- package/README.en.md +131 -0
- package/README.md +130 -2
- package/RELEASE.md +184 -0
- package/cordis.patch.yml +1042 -0
- package/lib/client.js +17261 -0
- package/lib/create.d.ts +51 -0
- package/lib/create.js +65 -0
- package/lib/dev.d.ts +45 -0
- package/lib/dev.js +46 -0
- package/lib/errors.d.ts +19 -0
- package/lib/errors.js +25 -0
- package/lib/i18n.d.ts +18 -0
- package/lib/i18n.js +33 -0
- package/lib/index.d.ts +40 -0
- package/lib/index.js +71 -0
- package/lib/permission-tier.d.ts +86 -0
- package/lib/permission-tier.js +102 -0
- package/lib/remote/contract.d.ts +382 -0
- package/lib/remote/contract.js +240 -0
- package/lib/remote/service.d.ts +185 -0
- package/lib/remote/service.js +530 -0
- package/lib/requirement-discussion.d.ts +44 -0
- package/lib/requirement-discussion.js +60 -0
- package/lib/store/db.d.ts +112 -0
- package/lib/store/db.js +266 -0
- package/lib/store/docs.d.ts +80 -0
- package/lib/store/docs.js +228 -0
- package/lib/store/ids.d.ts +16 -0
- package/lib/store/ids.js +28 -0
- package/lib/store/model.d.ts +430 -0
- package/lib/store/model.js +66 -0
- package/lib/store/paths.d.ts +26 -0
- package/lib/store/paths.js +68 -0
- package/lib/store/schema.d.ts +57 -0
- package/lib/store/schema.js +1083 -0
- package/lib/store/transaction.d.ts +16 -0
- package/lib/store/transaction.js +24 -0
- package/lib/store/upgrades.d.ts +51 -0
- package/lib/store/upgrades.js +22 -0
- package/lib/store/versions.d.ts +31 -0
- package/lib/store/versions.js +85 -0
- package/lib/store/workflow.d.ts +226 -0
- package/lib/store/workflow.js +1599 -0
- package/lib/tools/begin-self-test.d.ts +3 -0
- package/lib/tools/begin-self-test.js +68 -0
- package/lib/tools/cancel-run.d.ts +3 -0
- package/lib/tools/cancel-run.js +62 -0
- package/lib/tools/create-bug.d.ts +3 -0
- package/lib/tools/create-bug.js +85 -0
- package/lib/tools/create-design-doc.d.ts +3 -0
- package/lib/tools/create-design-doc.js +83 -0
- package/lib/tools/create-requirement.d.ts +3 -0
- package/lib/tools/create-requirement.js +87 -0
- package/lib/tools/create-story.d.ts +3 -0
- package/lib/tools/create-story.js +116 -0
- package/lib/tools/delete-story.d.ts +22 -0
- package/lib/tools/delete-story.js +94 -0
- package/lib/tools/finish-run.d.ts +3 -0
- package/lib/tools/finish-run.js +103 -0
- package/lib/tools/get-bug.d.ts +27 -0
- package/lib/tools/get-bug.js +100 -0
- package/lib/tools/get-design-doc.d.ts +26 -0
- package/lib/tools/get-design-doc.js +96 -0
- package/lib/tools/get-requirement.d.ts +3 -0
- package/lib/tools/get-requirement.js +140 -0
- package/lib/tools/get-story.d.ts +51 -0
- package/lib/tools/get-story.js +150 -0
- package/lib/tools/index.d.ts +54 -0
- package/lib/tools/index.js +158 -0
- package/lib/tools/link-requirement-session.d.ts +3 -0
- package/lib/tools/link-requirement-session.js +58 -0
- package/lib/tools/list-records.d.ts +3 -0
- package/lib/tools/list-records.js +121 -0
- package/lib/tools/list-workspaces.d.ts +3 -0
- package/lib/tools/list-workspaces.js +50 -0
- package/lib/tools/run-shared.d.ts +32 -0
- package/lib/tools/run-shared.js +76 -0
- package/lib/tools/shared.d.ts +37 -0
- package/lib/tools/shared.js +150 -0
- package/lib/tools/update-bug.d.ts +13 -0
- package/lib/tools/update-bug.js +93 -0
- package/lib/tools/update-design-doc.d.ts +3 -0
- package/lib/tools/update-design-doc.js +65 -0
- package/lib/tools/update-requirement.d.ts +3 -0
- package/lib/tools/update-requirement.js +66 -0
- package/lib/tools/update-story.d.ts +13 -0
- package/lib/tools/update-story.js +105 -0
- package/lib/version.d.ts +8 -0
- package/lib/version.js +45 -0
- package/locale/en.json +336 -0
- package/locale/zh.json +336 -0
- package/package.json +120 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 xirang-ai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.en.md
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Teamflow Workbench
|
|
2
|
+
|
|
3
|
+
[中文](README.md) | [English](README.en.md)
|
|
4
|
+
|
|
5
|
+
Teamflow (`@xirang-ai/dsh-teamflow`) is a [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH) plugin that turns **requirements → high-level design → detailed design → stories → development runs → bug fixes** into a persistent, resumable pipeline. It also adds a team workbench called **Xirang Workbench** to the DSH Web UI.
|
|
6
|
+
|
|
7
|
+
Version: **`0.1.1`** (adds drag and drop to the create page attachments; see [CHANGELOG.md](CHANGELOG.md)).
|
|
8
|
+
|
|
9
|
+
- Data lives in SQLite; documents live in the workspace, so closing a session does not lose progress.
|
|
10
|
+
- Five agent presets cover requirements, stories, bugs, development, and detailed design. Each preset controls its own tool boundary.
|
|
11
|
+
- The workbench provides lists, detail pages, a flow chart, a create page, a read-only session tab, and guarded deletion.
|
|
12
|
+
- Nineteen `teamflow_*` tools write interview and development results back to the database and workspace documents.
|
|
13
|
+
|
|
14
|
+
## Requirements
|
|
15
|
+
|
|
16
|
+
| Item | Requirement |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| DSH | `@deepseek-ai/dsh` **0.2.2-rc.1** (`engines.dsh` is `>=0.2.2-rc.1 <0.3.0`) |
|
|
19
|
+
| Node.js | `>=24.9.0` (matches DSH `engines`; uses built-in `node:sqlite`) |
|
|
20
|
+
| Browser | Any modern browser supported by the current DSH Web UI |
|
|
21
|
+
|
|
22
|
+
## Install
|
|
23
|
+
|
|
24
|
+
Install and verify DSH first:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
npm i -g @deepseek-ai/dsh@0.2.2-rc.1
|
|
28
|
+
dsh --version
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Add the plugin to the profile you use (the default `web` profile below):
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
dsh plugin --profile web add @xirang-ai/dsh-teamflow
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
You can also install a local tarball:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
dsh plugin --profile web add ./xirang-ai-dsh-teamflow-<version>.tgz
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Restart the Host** after installing. Refreshing the browser alone does not load a new plugin:
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
dsh --profile web --no-open
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Open the new token URL printed at startup. **Xirang Workbench** appears in the left sidebar. If startup reports an incompatible `engines.dsh`, upgrade DSH to the supported range above.
|
|
50
|
+
|
|
51
|
+
Uninstall:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
dsh plugin --profile web remove @xirang-ai/dsh-teamflow
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Quick Start
|
|
58
|
+
|
|
59
|
+
1. Open **Xirang Workbench** in the left sidebar and click **Create** in the top-right corner.
|
|
60
|
+
2. Choose a type (requirement / story / bug) and a workspace, then write a description. The agent generates the title for you.
|
|
61
|
+
3. Submitting starts a new session with the matching preset. The agent asks for missing details and saves the record once it has enough information.
|
|
62
|
+
4. Open the requirement detail page: read the high-level design, add detailed designs, split stories, then click **Run** on a story row.
|
|
63
|
+
5. In the development session the agent implements and self-tests the story, then calls `teamflow_finish_run` with a pass or fail result. **A successful run is not completion** — click **Complete** on the detail page.
|
|
64
|
+
6. Bugs follow the same loop: create a bug → start a fix → self-test → confirm the fix.
|
|
65
|
+
|
|
66
|
+
### What the workbench offers
|
|
67
|
+
|
|
68
|
+
- **Lists**: four views (open / in progress / ready / completed) across requirements, standalone stories, and bugs.
|
|
69
|
+
- **Requirement detail**: high-level design, detailed-design file tree, story list, execution flow chart, linked sessions, and a properties panel.
|
|
70
|
+
- **Story / bug detail**: body, status, run history, and manual actions such as run, cancel, and complete.
|
|
71
|
+
- **Three permission tiers**: the **Run** button on a story row, the story page, and the bug page has an arrow menu for **Normal run / Read-only run / Full permission run**. The main button always starts a normal run; the choice is not remembered, so picking full permission once does not carry over. The session starts with the matching sandbox mode and approval policy, and its header shows a short Normal / Read-only / Full badge (sessions started before this feature have no record and show no badge).
|
|
72
|
+
- **Create page**: pick a type and workspace to start a session without choosing an agent manually. Files can be attached too: the attachment card is both a click target and a drop zone, and a drop goes through the same rules as a picker selection (images are checked against the same rules the session composer uses — type, per-file size, count and total taken from `ctx.attachments.imageLimits`, never a second list defined here; other file types carry no extra limits), with a reason for every refused file. Each picked file can be removed, and the submission sends them as attachments on the new conversation's first message next to the workspace and description. The submit button is held back until uploading finishes so no attachment is lost.
|
|
73
|
+
- **Composer type picker**: an empty session switches between requirement / story / bug; a discussion session started from a requirement detail also offers requirement & outline / detailed design / story splitting.
|
|
74
|
+
- **Session tab**: read-only view of the requirement, story, or bug linked to the current session.
|
|
75
|
+
- **Delete and clean up**: only records with no active agent run can be deleted. The confirmation shows the impact; deletion is physical and cannot be undone.
|
|
76
|
+
|
|
77
|
+
## Data and Files
|
|
78
|
+
|
|
79
|
+
| Item | Location |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| Database | `$DSH_HOME/xirang-ai/dsh-teamflow/teamflow.sqlite` |
|
|
82
|
+
| Requirement / high-level design | `<workspace>/.xirang-ai/dsh-teamflow/requirements/<req>/requirement.md` |
|
|
83
|
+
| Detailed design | `<workspace>/.xirang-ai/dsh-teamflow/requirements/<req>/docs/<doc>.md` |
|
|
84
|
+
| Story | `<workspace>/.xirang-ai/dsh-teamflow/stories/<story>/story.md` |
|
|
85
|
+
| Bug | `<workspace>/.xirang-ai/dsh-teamflow/bugs/<bug>/bug.md` |
|
|
86
|
+
|
|
87
|
+
- The workspace root `.gitignore` gets an `.xirang-ai/` entry automatically, so documents stay out of version control by default.
|
|
88
|
+
- The schema version lives in `PRAGMA user_version` and is currently `16`. Migrations run at startup; a database newer than the installed plugin refuses to start.
|
|
89
|
+
- Back up `teamflow.sqlite` and `.xirang-ai/dsh-teamflow/` before upgrading or reinstalling.
|
|
90
|
+
|
|
91
|
+
## Configuration
|
|
92
|
+
|
|
93
|
+
The bundle config layer provides these defaults:
|
|
94
|
+
|
|
95
|
+
| Field | Type | Default | Description |
|
|
96
|
+
| --- | --- | --- | --- |
|
|
97
|
+
| `dataDir` | string | `''` | Data directory; empty means `$DSH_HOME/xirang-ai/dsh-teamflow`. Supports `~`. |
|
|
98
|
+
| `busyTimeoutMs` | number | `5000` | SQLite `busy_timeout` for concurrent writers (0–60000). |
|
|
99
|
+
|
|
100
|
+
To override them, edit the user config layer of the current profile, for example `$DSH_HOME/profiles/web/cordis.patch.yml`:
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
- id: teamflow
|
|
104
|
+
name: "@xirang-ai/dsh-teamflow"
|
|
105
|
+
config:
|
|
106
|
+
dataDir: "~/teamflow-data"
|
|
107
|
+
busyTimeoutMs: 10000
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Do not edit files inside `node_modules`. Restart the Host after changing configuration.
|
|
111
|
+
|
|
112
|
+
## Development
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
pnpm install
|
|
116
|
+
pnpm run verify # typecheck → lint → build → test
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Run a local dev profile:
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
dsh --profile dev --from-default-profile web --dump-config > /dev/null
|
|
123
|
+
dsh plugin --profile dev add .
|
|
124
|
+
dsh --profile dev --port 3091 --no-open
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Development rules, official documentation links, and the full verification checklist are in [AGENTS.md](https://github.com/xirang-ai/dsh-teamflow/blob/main/AGENTS.md) and [RELEASE.md](RELEASE.md).
|
|
128
|
+
|
|
129
|
+
## License
|
|
130
|
+
|
|
131
|
+
[MIT](LICENSE)
|
package/README.md
CHANGED
|
@@ -1,3 +1,131 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Teamflow 息壤工作台
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[中文](README.md) | [English](README.en.md)
|
|
4
|
+
|
|
5
|
+
Teamflow(`@xirang-ai/dsh-teamflow`)是 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(下称 DSH)的插件:把**需求 → 概要设计 → 详细设计 → 故事拆分 → 研发执行 → 缺陷修复**做成一条可持久化、可断点续跑的流水线,并在 Web 端提供团队工作台「息壤工作台」。
|
|
6
|
+
|
|
7
|
+
当前版本:**`0.1.1`**(新增创建页附件拖放,变更记录见 [CHANGELOG.md](CHANGELOG.md))。
|
|
8
|
+
|
|
9
|
+
- 数据落在 SQLite,文档落在工作区,关掉会话不丢进度。
|
|
10
|
+
- 五个 Agent 预设分别负责需求、故事、缺陷、研发和详细设计,工具边界由预设控制。
|
|
11
|
+
- 工作台提供列表、详情、流程图、创建页、会话内只读页签,以及受控的删除入口。
|
|
12
|
+
- 十九个 `teamflow_*` 工具把访谈与研发结果写回数据库和工作区文档。
|
|
13
|
+
|
|
14
|
+
## 环境要求
|
|
15
|
+
|
|
16
|
+
| 项 | 要求 |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| DSH | `@deepseek-ai/dsh` **0.2.2-rc.1**(`engines.dsh` 为 `>=0.2.2-rc.1 <0.3.0`) |
|
|
19
|
+
| Node.js | `>=24.9.0`(与 DSH 的 `engines` 一致,使用内置 `node:sqlite`) |
|
|
20
|
+
| 浏览器 | 当前 DSH Web 支持的现代浏览器 |
|
|
21
|
+
|
|
22
|
+
## 安装
|
|
23
|
+
|
|
24
|
+
先安装并确认 DSH:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
npm i -g @deepseek-ai/dsh@0.2.2-rc.1
|
|
28
|
+
dsh --version
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
把插件装进要使用的 profile(下面是默认的 `web`):
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
dsh plugin --profile web add @xirang-ai/dsh-teamflow
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
也可以安装本地打包产物:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
dsh plugin --profile web add ./xirang-ai-dsh-teamflow-<version>.tgz
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
安装后**必须重启 Host**,只刷新浏览器不会加载新插件:
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
dsh --profile web --no-open
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
用启动输出里的新 token URL 打开页面,左侧栏会出现「息壤工作台」。如果启动时提示 `engines.dsh` 不兼容,请先把 DSH 升级到上面的兼容范围。
|
|
50
|
+
|
|
51
|
+
卸载:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
dsh plugin --profile web remove @xirang-ai/dsh-teamflow
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 快速开始
|
|
58
|
+
|
|
59
|
+
1. 打开左侧栏「息壤工作台」,点右上角「创建」。
|
|
60
|
+
2. 选择类型(需求 / 故事 / 缺陷)、工作区,填写一段描述。标题由对应 Agent 归纳,不需要先想标题。
|
|
61
|
+
3. 提交后会在新会话里启动对应预设。Agent 会追问缺失信息,并在信息齐全后调用工具落库。
|
|
62
|
+
4. 打开需求详情:阅读概要设计,补充详细设计,拆分故事,然后在故事行点「执行」。
|
|
63
|
+
5. 研发会话里 Agent 编码、自测,最后调用 `teamflow_finish_run` 报告通过或失败。**运行成功不等于完成**,仍需在详情页点「完成」。
|
|
64
|
+
6. 缺陷走同样的闭环:创建缺陷 → 开始修复 → 自测 → 确认解决。
|
|
65
|
+
|
|
66
|
+
### 工作台能做什么
|
|
67
|
+
|
|
68
|
+
- **列表**:未完成 / 执行中 / 待开始 / 已完成四个视图;需求、独立故事、缺陷分组展示。
|
|
69
|
+
- **需求详情**:概设正文、详设文件树、故事列表、执行流程图、关联会话和属性面板。
|
|
70
|
+
- **故事 / 缺陷详情**:正文、状态、运行记录,以及执行、取消、完成等人工动作。
|
|
71
|
+
- **三档权限执行**:需求详情的故事行、故事页、缺陷页三处的「执行」按钮右侧带箭头菜单,可选「普通执行 / 仅查看执行 / 完全权限执行」。主按钮直接按「普通执行」启动;默认档不记忆,上一次选「完全权限执行」也不会留到下一次。会话以对应沙箱模式与审批策略启动,会话头部显示「普通 / 仅查看 / 完全权限」短标签(旧会话没有记录,不显示)。
|
|
72
|
+
- **创建页**:选类型和工作区后直接开新会话,不需要手动挑 Agent。还可以附带文件:附件区整块可点击选择,也可以把文件直接拖进附件卡片,拖放与点选走同一套规则(图片按宿主会话上传的同一套规则校验,类型、单张大小、条数与总大小取自 `ctx.attachments.imageLimits`,不在本页另立白名单;其它类型的文件不设额外限制),不合规的文件逐条给出原因;已选文件可逐个移除,提交时与工作区、描述一起作为第一条消息的附件发进新会话。附件上传完成前提交按钮会拦住,避免丢附件。
|
|
73
|
+
- **输入框「创建类型」**:空白会话下可切换需求 / 故事 / 缺陷;从需求详情发起的讨论会话还会显示「需求与概要设计」/「详细设计」/「故事拆分」,用于继续对应的讨论。
|
|
74
|
+
- **会话页签**:在会话顶部只读查看当前会话关联的需求、故事或缺陷。
|
|
75
|
+
- **删除与清理**:只允许删除没有 Agent 正在执行的记录;删除前展示影响范围,物理删除不可恢复。
|
|
76
|
+
|
|
77
|
+
## 数据与文件
|
|
78
|
+
|
|
79
|
+
| 项 | 位置 |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| 数据库 | `$DSH_HOME/xirang-ai/dsh-teamflow/teamflow.sqlite` |
|
|
82
|
+
| 需求 / 概设 | `<workspace>/.xirang-ai/dsh-teamflow/requirements/<req>/requirement.md` |
|
|
83
|
+
| 详细设计 | `<workspace>/.xirang-ai/dsh-teamflow/requirements/<req>/docs/<doc>.md` |
|
|
84
|
+
| 故事 | `<workspace>/.xirang-ai/dsh-teamflow/stories/<story>/story.md` |
|
|
85
|
+
| 缺陷 | `<workspace>/.xirang-ai/dsh-teamflow/bugs/<bug>/bug.md` |
|
|
86
|
+
|
|
87
|
+
- 工作区根 `.gitignore` 会自动追加 `.xirang-ai/`,文档默认不进版本库。
|
|
88
|
+
- 数据结构版本写在 `PRAGMA user_version`,当前为 `16`;启动时自动迁移,结构版本高于当前插件时拒绝启动。
|
|
89
|
+
- 升级或重装前建议备份 `teamflow.sqlite` 与 `.xirang-ai/dsh-teamflow/`。
|
|
90
|
+
|
|
91
|
+
## 配置
|
|
92
|
+
|
|
93
|
+
默认值已经写在 bundle 的配置层里:
|
|
94
|
+
|
|
95
|
+
| 字段 | 类型 | 默认 | 说明 |
|
|
96
|
+
| --- | --- | --- | --- |
|
|
97
|
+
| `dataDir` | string | `''` | 数据目录;留空表示 `$DSH_HOME/xirang-ai/dsh-teamflow`,支持 `~` |
|
|
98
|
+
| `busyTimeoutMs` | number | `5000` | SQLite `busy_timeout`,多会话并发写时的等待上限(0–60000) |
|
|
99
|
+
|
|
100
|
+
要覆盖默认值,编辑当前 profile 的用户配置层,例如 `$DSH_HOME/profiles/web/cordis.patch.yml`:
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
- id: teamflow
|
|
104
|
+
name: "@xirang-ai/dsh-teamflow"
|
|
105
|
+
config:
|
|
106
|
+
dataDir: "~/teamflow-data"
|
|
107
|
+
busyTimeoutMs: 10000
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
不要修改 `node_modules` 里的包内文件。改完重启 Host。
|
|
111
|
+
|
|
112
|
+
## 开发
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
pnpm install
|
|
116
|
+
pnpm run verify # typecheck → lint → build → test
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
在隔离的 dev profile 里联调:
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
dsh --profile dev --from-default-profile web --dump-config > /dev/null
|
|
123
|
+
dsh plugin --profile dev add .
|
|
124
|
+
dsh --profile dev --port 3091 --no-open
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
开发规则、官方文档入口与完整验证清单见 [AGENTS.md](https://github.com/xirang-ai/dsh-teamflow/blob/main/AGENTS.md) 和 [RELEASE.md](RELEASE.md)。
|
|
128
|
+
|
|
129
|
+
## 许可证
|
|
130
|
+
|
|
131
|
+
[MIT](LICENSE)
|
package/RELEASE.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# 发版检查清单(Release Checklist)
|
|
2
|
+
|
|
3
|
+
> 适用范围:`@xirang-ai/dsh-teamflow` bundle 的正式版 / RC 发布。
|
|
4
|
+
> 规则来源:DSH 官方 [publish.md](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md) 与 [AGENTS.md](AGENTS.md)。
|
|
5
|
+
> 发版前必须逐项勾选;未完成项不得发布。涉及版本号与兼容范围的条目,必须由开发者明确确认。
|
|
6
|
+
> 每次发版的实际结论记在 `docs/release-<version>-checklist.md`(格式见 [docs/release-0.1.0-checklist.md](docs/release-0.1.0-checklist.md));本文件只保留通用条目。
|
|
7
|
+
|
|
8
|
+
## 0. 发版信息
|
|
9
|
+
|
|
10
|
+
| 项 | 值 |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| 目标版本号 | **0.1.1**(用户已确认) |
|
|
13
|
+
| 发布分支 / commit | 发布时填写 |
|
|
14
|
+
| 发布日期 | 发布时填写 |
|
|
15
|
+
| 发布人 | 发布时填写 |
|
|
16
|
+
| npm registry | `https://registry.npmjs.org` |
|
|
17
|
+
| dist-tag | `latest` |
|
|
18
|
+
|
|
19
|
+
- [ ] 版本号已由开发者明确确认,且 `package.json`、`lib/client.js` banner、README / CHANGELOG 中的版本声明一致。
|
|
20
|
+
- [ ] 发布后打 `v<version>` tag,并在 GitHub Release 写清配置、`engines.dsh` 与数据结构版本(当前 schema `16`)。
|
|
21
|
+
|
|
22
|
+
## 1. 与 DSH 官方 tag 的兼容性核对
|
|
23
|
+
|
|
24
|
+
只对比**正式版**和 **RC**;alpha / beta 一律忽略。官方 tag 列表:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
git ls-remote --tags --refs https://github.com/deepseek-ai/deepseek-harness.git \
|
|
28
|
+
| sed 's#.*refs/tags/##' \
|
|
29
|
+
| grep -E '^dsh-v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$' \
|
|
30
|
+
| sort -V
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
2026-11-11 核对结果:
|
|
34
|
+
|
|
35
|
+
| 项 | 结果 |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| 官方仓库最高 RC tag | `dsh-v0.2.2-rc.1` |
|
|
38
|
+
| 官方仓库正式 tag(无 `-rc` 后缀) | 未发现 |
|
|
39
|
+
| 当前 `engines.dsh` | `>=0.2.2-rc.1 <0.3.0` |
|
|
40
|
+
| 覆盖情况 | 覆盖 `dsh-v0.2.2-rc.1`;不覆盖 17 个更早的 RC(最低 `dsh-v0.1.0-rc.7`) |
|
|
41
|
+
| 差异结论 | 当前范围只支持最新 RC;没有“范围内但漏掉”的更高 RC tag |
|
|
42
|
+
|
|
43
|
+
- [ ] 已重新执行上面的 tag 命令,确认没有新增正式版 / RC。
|
|
44
|
+
- [ ] 已确认 `engines.dsh` 的范围与上表一致;如需支持旧 RC,先改范围并做真实安装验证。
|
|
45
|
+
- [ ] 已检查 npm 上的正式版(tag 可能滞后):
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
npm view @deepseek-ai/dsh versions --json --registry=https://registry.npmjs.org
|
|
49
|
+
npm view @deepseek-ai/dsh dist-tags --json --registry=https://registry.npmjs.org
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- [ ] **开发者确认**:`engines.dsh` 保持 `>=0.2.2-rc.1 <0.3.0`,还是调整为其他范围。
|
|
53
|
+
- [ ] **开发者确认**:旧 RC(`<0.2.2-rc.1`)不承诺兼容,是否接受。
|
|
54
|
+
|
|
55
|
+
> 注意:`@deepseek-ai/dsh-package-manifest` 的 Known Limitations 说 manifest 校验是声明式的;官方 publish.md 说 `engines.dsh` 在安装和 profile 启动时强制执行。以官方 publish.md 为准,真实安装验证不能省。
|
|
56
|
+
|
|
57
|
+
## 2. 依赖与打包
|
|
58
|
+
|
|
59
|
+
官方规则:共享宿主实例的 DSH 包同时写 `peerDependencies` 与 `devDependencies`;无状态 DSH 工具放 `dependencies`;只在浏览器使用的第三方实现放 `devDependencies`;`dsh.client.inject` 里列出的包只放 `devDependencies`。
|
|
60
|
+
|
|
61
|
+
- [ ] `@deepseek-ai/schemastery` 在 `dependencies`,不在 peer / dev。
|
|
62
|
+
- [ ] `@xyflow/react` 在 `devDependencies`(已内联进 `lib/client.js`),不在 `dependencies`。
|
|
63
|
+
- [ ] 所有 `@deepseek-ai/dsh-*` peer 包都有同版本 `devDependencies` 条目(含 `dsh-home-paths`)。
|
|
64
|
+
- [ ] `dsh.client.inject` 覆盖 `slots` 提供方 `@deepseek-ai/dsh-client-ui-renderer`,以及 sidebar / layout / conversation / locale / workspace / api-gateway。
|
|
65
|
+
- [ ] `dsh.client.inject` 中的包都在 `devDependencies`,没有误放 `dependencies`。
|
|
66
|
+
- [ ] `files` 含 `lib`、`locale`、`cordis.patch.yml`、`README.md`、`README.en.md`、`RELEASE.md`、`LICENSE`。
|
|
67
|
+
- [ ] `main` / `types` / `exports` 与 `lib/` 实际产物一致(`lib/index.js`、`lib/index.d.ts`、`lib/tools/index.js`、`lib/client.js`)。
|
|
68
|
+
- [ ] `engines.node >=24.9.0`,发布机 Node 实际版本不低于该值。
|
|
69
|
+
|
|
70
|
+
命令:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
pnpm install --frozen-lockfile
|
|
74
|
+
pnpm peers check
|
|
75
|
+
pnpm run verify
|
|
76
|
+
npm pack --dry-run --json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- [ ] 仓库内 `pnpm peers check` 无 `missing peer` / `unmet peer`。
|
|
80
|
+
- [ ] 干净 profile 里 `pnpm peers check` 对 `@deepseek-ai/dsh-*` 宿主包报 `missing peer` 属预期:这些实例由正在运行的 DSH 提供,不要为了消除警告把它们改成 optional;以真实启动成功为准。
|
|
81
|
+
- [ ] `npm pack --dry-run` 的 93 个文件中没有 `src/`、`test/`、`docs/`、`design/`、`.tmp/`、`.devhome/`、`.xirang-ai/`、`*.sqlite*`。
|
|
82
|
+
- [ ] `prepublishOnly` 已配置为 `pnpm run verify`,干净 checkout 发布时会先构建。
|
|
83
|
+
|
|
84
|
+
## 3. 干净 profile 安装与真实启动
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
# 打包
|
|
88
|
+
npm pack
|
|
89
|
+
|
|
90
|
+
# 新建隔离 DSH_HOME,避免污染日常 profile
|
|
91
|
+
export DSH_HOME=/tmp/tf-release
|
|
92
|
+
dsh plugin --profile web add ./xirang-ai-dsh-teamflow-<version>.tgz
|
|
93
|
+
|
|
94
|
+
# 配置层必须出现本包
|
|
95
|
+
dsh --profile web --dump-config | grep -n "== @xirang-ai/dsh-teamflow"
|
|
96
|
+
|
|
97
|
+
# 启动,使用输出里的新 token URL
|
|
98
|
+
dsh --profile web --port 3099 --no-open
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
- [ ] 安装输出无 `skipped bundle`;宿主 peer 的 `missing peer` 警告按 §2 判定为预期。
|
|
102
|
+
- [ ] `--dump-config` 出现 `# == @xirang-ai/dsh-teamflow`。
|
|
103
|
+
- [ ] 启动后侧栏出现「息壤工作台」,页面能渲染,浏览器控制台无插件模块错误。
|
|
104
|
+
- [ ] 数据库生成在 `$DSH_HOME/xirang-ai/dsh-teamflow/teamflow.sqlite`:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
sqlite3 "$DSH_HOME/xirang-ai/dsh-teamflow/teamflow.sqlite" \
|
|
108
|
+
'PRAGMA user_version; SELECT key, value FROM meta; SELECT key, name FROM roles;'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
- [ ] `PRAGMA user_version = 16`。
|
|
112
|
+
- [ ] `meta.plugin_version` 等于 `package.json` 版本。
|
|
113
|
+
- [ ] `roles` 含 `product` / `dev`。
|
|
114
|
+
- [ ] 至少真实调用一次 `teamflow_*` 工具(含一次错误分支)。
|
|
115
|
+
- [ ] 卸载 / 重载插件后无残留监听器、定时器、watcher、后台任务、打开句柄。
|
|
116
|
+
|
|
117
|
+
> `dsh --profile <p> --dump-config-schema` 在 DSH 0.2.2-rc.1 上会对 preset 的嵌套 `plugins` 行报 `unrecognized Loader tree carrier`;全新 web 模板也会报同类错误。这是 DSH 当前限制,不是 teamflow 回归。不要用该命令的退出码作为本插件发布门禁;以 `--dump-config` + 真实启动 + UI 验证为准,并在发版说明中记录该例外。
|
|
118
|
+
|
|
119
|
+
## 4. README 与文档
|
|
120
|
+
|
|
121
|
+
- [ ] 中文 [README.md](README.md) 与英文 [README.en.md](README.en.md) 都存在,顶部有语言切换。
|
|
122
|
+
- [ ] 两边都包含:项目介绍、安装说明、简单使用指南、配置项、开发 / 验证方式、许可证。
|
|
123
|
+
- [ ] 安装命令使用 `dsh plugin --profile <profile> add ...`,并说明安装后要重启 Host,不能只刷新浏览器。
|
|
124
|
+
- [ ] Node 版本写 `>=24.9.0`,与 `engines.node` 一致。
|
|
125
|
+
- [ ] 开发端口统一为 `3091`(与本文件、AGENTS.md §5.1 一致)。
|
|
126
|
+
- [ ] README 中的链接均可访问;仓库根的 `docs/` 仅作为提示词一致性报告、快照、Demo 走查结论与历次发版检查留痕保留,不进入 npm 包。
|
|
127
|
+
- [ ] 配置说明指向 **profile 配置层** 的 `id: teamflow` 覆盖,而不是让用户改 `node_modules` 里的包内文件。
|
|
128
|
+
- [ ] 版本号、schema 版本、工具数量(当前 19 个)、预设数量(当前 5 个)与实际一致。
|
|
129
|
+
- [ ] 本文件已按本次发版更新;AGENTS.md 的阅读路径与文档索引没有死链。
|
|
130
|
+
|
|
131
|
+
## 5. 代码、敏感信息与数据卫生
|
|
132
|
+
|
|
133
|
+
- [ ] 仓库与发布包中没有 token、password、API key、cookie、私钥、`.credentials.yaml`、个人绝对路径、机器名。
|
|
134
|
+
- [ ] 没有未完成功能、`TODO` / `FIXME` / `HACK` / `XXX`、注释掉的半成品代码、调试日志。
|
|
135
|
+
- [ ] 没有 smoke / mock / demo / fixture / seed 数据进入 `src/` 或 npm 包(测试临时目录必须在 `tmpdir()` 下创建并清理)。
|
|
136
|
+
- [ ] 本地 scratch 已删除:`.tmp/`、`.devhome/`、`.xirang-ai/`、`*.sqlite*`、`*.log`、临时截图 / 原型。
|
|
137
|
+
- [ ] `design/` 已按维护决定删除;`docs/` 只保留提示词一致性报告与快照、Demo 走查结论、发版检查留痕,测试依赖其中的快照,不得删除,且不进入 npm 包。
|
|
138
|
+
- [ ] `lib/` 未提交(由构建生成),但发布包中必须包含最新构建。
|
|
139
|
+
- [ ] `git status` 干净;`git ls-files` 包含 `package.json`、`cordis.patch.yml`、`src/`、`test/`、`locale/`、`scripts/`,不再只有 README / LICENSE。
|
|
140
|
+
|
|
141
|
+
建议扫描:
|
|
142
|
+
|
|
143
|
+
```sh
|
|
144
|
+
grep -RInE 'TODO|FIXME|HACK|XXX|@ts-ignore|eslint-disable' src test scripts || true
|
|
145
|
+
grep -RInE 'token|secret|password|api[_-]?key|BEGIN (RSA|OPENSSH|EC) PRIVATE KEY' \
|
|
146
|
+
src test scripts cordis.patch.yml README.md README.en.md || true
|
|
147
|
+
grep -RInE '/Users/|/home/|C:\\\\Users' src test scripts locale cordis.patch.yml README.md README.en.md || true
|
|
148
|
+
find . -maxdepth 2 \( -name '*.sqlite*' -o -name '.tmp' -o -name '.devhome' -o -name '.xirang-ai' \) -print
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## 6. 国际化
|
|
152
|
+
|
|
153
|
+
- [ ] `locale/en.json` 与 `locale/zh.json` 键集合完全一致,无空值。
|
|
154
|
+
- [ ] 英文表里没有残留中文;中文表没有漏翻的英文句子(专有名词、工具名、状态代码除外)。
|
|
155
|
+
- [ ] 所有用户可见 UI 文案都来自 locale 字典;组件里没有硬编码文案。
|
|
156
|
+
- [ ] Remote 返回的是数据或稳定错误码;错误文案经 `translate(locale, key)` 本地化,没有写死中英文句子。
|
|
157
|
+
- [ ] Agent 人设 / prompt 中的语言与目标用户一致;新增语言时同时补字典、`normalizeLocale` 与测试。
|
|
158
|
+
- [ ] `pnpm test` 中的 locale 测试通过。
|
|
159
|
+
|
|
160
|
+
当前核对(2026-11-11):en / zh 各 334 个键,集合一致、无空值;en 无中文残留;`src/remote` 的错误均走 `translate()`;客户端硬编码中文只出现在注释与验收标准正则中。
|
|
161
|
+
|
|
162
|
+
## 7. Git、npm 与发布
|
|
163
|
+
|
|
164
|
+
- [ ] `git add -A` 前确认没有 `.tmp/`、`.devhome/`、`.xirang-ai/`、`lib/`、`*.sqlite*`、日志、凭据。
|
|
165
|
+
- [ ] 提交信息清晰;打 tag 前再次跑 `pnpm run verify`。
|
|
166
|
+
- [ ] `npm whoami --registry https://registry.npmjs.org` 已登录。
|
|
167
|
+
- [ ] `npm org ls xirang-ai --registry https://registry.npmjs.org` 确认当前账号是组织成员。
|
|
168
|
+
- [ ] `npm publish --access public --registry=https://registry.npmjs.org`。
|
|
169
|
+
- [ ] 发布后用 registry 版本在**全新** `DSH_HOME` 再装一次,重复第 3 节验证。
|
|
170
|
+
- [ ] `npm view @xirang-ai/dsh-teamflow@<version> dist.tarball` 可访问,`files` 内容正确。
|
|
171
|
+
- [ ] GitHub Release / CHANGELOG 写明:版本号、DSH 兼容范围、Node 要求、schema 版本、破坏性变更、已知限制(`dump-config-schema`)。
|
|
172
|
+
|
|
173
|
+
## 8. 开发者确认(Go / No-Go)
|
|
174
|
+
|
|
175
|
+
| 确认项 | 结论 | 确认人 / 日期 |
|
|
176
|
+
| --- | --- | --- |
|
|
177
|
+
| 目标版本号 | 待确认 | |
|
|
178
|
+
| `engines.dsh` 范围 | 待确认 | |
|
|
179
|
+
| 旧 RC 不兼容是否接受 | 待确认 | |
|
|
180
|
+
| README 中英文内容 | 待确认 | |
|
|
181
|
+
| 依赖分区调整 | 待确认 | |
|
|
182
|
+
| 发版说明 / 已知限制 | 待确认 | |
|
|
183
|
+
|
|
184
|
+
- [ ] 以上全部确认后,才执行 `npm publish`。
|