growork 1.0.1 → 1.1.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.
@@ -0,0 +1,62 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Grep, Glob
3
+ description: 代码审查,检查变更是否符合项目规范
4
+ ---
5
+
6
+ ## 代码审查
7
+
8
+ 审查当前变更,核心原则:**用最少的代码实现功能**。
9
+
10
+ ### 当前变更
11
+
12
+ !`git diff --stat HEAD`
13
+
14
+ ### 审查清单
15
+
16
+ 读取变更内容 `git diff HEAD`,逐条检查:
17
+
18
+ #### 1. 删除未使用的代码
19
+ - [ ] 未使用的函数、变量、导入
20
+ - [ ] 注释掉的代码
21
+ - [ ] 未使用的 TODO 注释
22
+
23
+ #### 2. 不要提前抽象
24
+ - [ ] 只用一次的代码不需要封装成函数
25
+ - [ ] 不要写 Factory、Manager、Helper 等过度抽象
26
+ - [ ] 三行重复代码比一个过早抽象更好
27
+
28
+ #### 3. 不要写"可能用到"的代码
29
+ - [ ] 只实现当前需求
30
+ - [ ] 不要预留"将来可能需要"的接口
31
+ - [ ] 不要添加未使用的配置项
32
+
33
+ #### 4. 错误处理要简洁
34
+ - [ ] 不要过度防御(检查不可能发生的情况)
35
+ - [ ] 让错误自然抛出,顶层统一处理
36
+ - [ ] 不要给每种错误类型都写 catch 分支
37
+
38
+ #### 5. 避免过度配置化
39
+ - [ ] 不要添加不会用到的选项
40
+ - [ ] 硬编码比过度灵活更好
41
+ - [ ] 一个功能只需要一种实现方式
42
+
43
+ #### 6. 依赖和结构
44
+ - [ ] 能用标准库就不引入新依赖
45
+ - [ ] 目录结构保持扁平
46
+ - [ ] 一个函数只做一件事
47
+
48
+ ### 输出格式
49
+
50
+ ```
51
+ ## 审查结果
52
+
53
+ ✅ 通过 / ⚠️ 需要修改
54
+
55
+ ### 问题列表(如有)
56
+
57
+ 1. `文件:行号` - 违反了什么原则 - 如何简化
58
+
59
+ ### 可删除的代码
60
+
61
+ - `文件:行号` - 原因
62
+ ```
@@ -12,7 +12,8 @@
12
12
  "WebSearch",
13
13
  "NotebookEdit",
14
14
  "mcp__*",
15
- "mcp__dart__*"
15
+ "mcp__dart__*",
16
+ "mcp__figma__*"
16
17
  ]
17
18
  },
18
19
  "enableAllProjectMcpServers": true,
package/README.md CHANGED
@@ -4,51 +4,40 @@
4
4
 
5
5
  这样 AI 工具(如 Claude、Cursor、Windsurf)就能直接读取你的产品文档,帮你写代码。
6
6
 
7
- ---
7
+ [![npm](https://img.shields.io/npm/v/growork)](https://www.npmjs.com/package/growork)
8
8
 
9
- ## 这个工具能做什么?
9
+ ## 功能
10
10
 
11
- 自动下载飞书文档,转成 Markdown 格式
12
- 自动下载 Notion 页面,转成 Markdown 格式
13
- 一条命令同步所有文档
14
- 文档更新后,重新运行命令即可获取最新内容
11
+ - 自动下载飞书文档,转成 Markdown 格式
12
+ - 自动下载 Notion 页面,转成 Markdown 格式
13
+ - 支持 Figma 设计稿链接,自动生成链接文档
14
+ - 按**版本 → 功能 → 文档类型**组织文档,AI 更容易理解
15
+ - 一条命令同步所有文档
15
16
 
16
- ---
17
+ > ⚠️ **每个版本都是破坏性更新**,不保证向后兼容。升级前请查看更新日志,必要时重新初始化配置文件。
17
18
 
18
- ## 安装步骤
19
+ ## 安装
19
20
 
20
- ### 第一步:安装 Node.js
21
+ ### 1. 安装 Node.js
21
22
 
22
- GroWork 需要 Node.js 才能运行。如果你还没安装:
23
+ GroWork 需要 Node.js >= 18。如果你还没安装:
23
24
 
24
25
  1. 打开 https://nodejs.org/
25
26
  2. 点击绿色的 **"LTS"** 按钮下载
26
27
  3. 双击下载的文件,按提示完成安装
27
28
 
28
- **检查是否安装成功:**
29
-
30
- 打开「终端」(Mac)或「命令提示符」(Windows),输入:
29
+ 检查是否安装成功:
31
30
 
32
31
  ```bash
33
32
  node -v
34
33
  ```
35
34
 
36
- 如果显示类似 `v18.17.0` 的版本号,说明安装成功。
37
-
38
- ---
39
-
40
- ### 第二步:安装 GroWork
41
-
42
- 在终端中输入:
35
+ ### 2. 安装 GroWork
43
36
 
44
37
  ```bash
45
38
  npm install -g growork
46
39
  ```
47
40
 
48
- 等待安装完成即可。
49
-
50
- ---
51
-
52
41
  ## 使用方法
53
42
 
54
43
  ### 1. 初始化项目
@@ -61,14 +50,10 @@ growork init
61
50
 
62
51
  这会在当前目录创建一个 `growork.config.yaml` 配置文件。
63
52
 
64
- ---
65
-
66
53
  ### 2. 获取飞书凭证(如果你要同步飞书文档)
67
54
 
68
55
  你需要在飞书开放平台创建一个应用,获取「App ID」和「App Secret」。
69
56
 
70
- **详细步骤:**
71
-
72
57
  1. **打开飞书开放平台**
73
58
  - 国际版 Lark:https://open.larksuite.com/
74
59
  - 国内版飞书:https://open.feishu.cn/
@@ -76,41 +61,26 @@ growork init
76
61
  2. **创建应用**
77
62
  - 点击「创建企业自建应用」
78
63
  - 填写应用名称(随便起,比如「文档同步」)
79
- - 点击「创建」
80
64
 
81
65
  3. **获取凭证**
82
66
  - 在应用详情页,找到「凭证与基础信息」
83
- - 复制 **App ID**(以 `cli_` 开头)
84
- - 复制 **App Secret**
67
+ - 复制 **App ID**(以 `cli_` 开头)和 **App Secret**
85
68
 
86
69
  4. **开通权限**
87
70
  - 点击左侧「权限管理」
88
- - 搜索并开通以下权限:
89
- - `docx:document:readonly`(读取文档)
90
- - `wiki:wiki:readonly`(读取知识库)
91
- - 点击「批量开通」
71
+ - 搜索并开通:`docx:document:readonly`、`wiki:wiki:readonly`
92
72
 
93
73
  5. **发布应用**
94
- - 点击「版本管理与发布」
95
- - 点击「创建版本」,填写版本号(如 1.0.0)
96
- - 提交审核(企业内部应用一般自动通过)
97
-
98
- ---
74
+ - 点击「版本管理与发布」→「创建版本」→ 提交审核
99
75
 
100
76
  ### 3. 获取 Notion 凭证(如果你要同步 Notion 页面)
101
77
 
102
- **详细步骤:**
103
-
104
78
  1. **创建 Integration**
105
79
  - 打开 https://www.notion.so/my-integrations
106
- - 点击「New integration
107
- - 填写名称(随便起,比如「文档同步」)
108
- - 选择你的 Workspace
109
- - 点击「Submit」
80
+ - 点击「New integration」,填写名称,选择 Workspace
110
81
 
111
82
  2. **复制 Token**
112
- - 在 Integration 详情页,点击「Show」查看 Token
113
- - 复制这个 Token(以 `ntn_` 或 `secret_` 开头)
83
+ - 在 Integration 详情页,复制 Token(以 `ntn_` 或 `secret_` 开头)
114
84
 
115
85
  3. **给页面授权**(重要!)
116
86
  - 打开你要同步的 Notion 页面
@@ -118,8 +88,6 @@ growork init
118
88
  - 选择你刚创建的 Integration
119
89
  - **每个要同步的页面都需要做这一步!**
120
90
 
121
- ---
122
-
123
91
  ### 4. 编辑配置文件
124
92
 
125
93
  用任意文本编辑器打开 `growork.config.yaml`,填入你的凭证和文档链接:
@@ -127,63 +95,114 @@ growork init
127
95
  ```yaml
128
96
  # 飞书配置(如果不用飞书,可以删除这部分)
129
97
  feishu:
130
- appId: "cli_你的AppID" # 替换成你的 App ID
131
- appSecret: "你的AppSecret" # 替换成你的 App Secret
98
+ appId: "cli_你的AppID"
99
+ appSecret: "你的AppSecret"
132
100
  domain: "lark" # 国际版用 lark,国内版用 feishu
133
101
 
134
102
  # Notion 配置(如果不用 Notion,可以删除这部分)
135
103
  notion:
136
- token: "ntn_你的Token" # 替换成你的 Token
137
-
138
- # 要同步的文档列表
139
- docs:
140
- # 飞书文档示例
141
- - name: prd # 给文档起个名字(英文,方便记忆)
142
- type: feishu # 类型:feishu
143
- url: "https://xxx.larksuite.com/wiki/xxxxx" # 文档链接
144
- output: "docs/prd.md" # 保存到哪里
145
-
146
- # Notion 页面示例
147
- - name: design # 给文档起个名字
148
- type: notion # 类型:notion
149
- url: "https://notion.so/xxxxx" # 页面链接
150
- output: "docs/design.md" # 保存到哪里
104
+ token: "ntn_你的Token"
105
+
106
+ # 输出目录(默认是 docs)
107
+ outputDir: "docs"
108
+
109
+ # 全局文档(不跟版本走的公共文档)
110
+ custom:
111
+ - "https://xxx.feishu.cn/docx/xxxxx" # 直接写链接
112
+ - url: "https://www.notion.so/xxxxx"
113
+ name: "技术架构" # 可选:自定义名称
114
+
115
+ # 版本化文档(按功能模块组织)
116
+ versions:
117
+ v1.0:
118
+ 用户登录: # 功能名称
119
+ prd: # PRD 文档
120
+ - "https://xxx.feishu.cn/docx/xxxxx"
121
+ design: # 设计文档(支持 Figma 链接)
122
+ - "https://www.figma.com/design/xxx?node-id=1-20"
123
+ - "https://www.figma.com/design/xxx?node-id=1-30"
124
+ api: # 接口文档
125
+ - "https://xxx.feishu.cn/docx/zzzzz"
126
+ test: # 测试用例
127
+ - "https://www.notion.so/aaaaa"
128
+
129
+ # 简单功能可以不分类
130
+ 小优化:
131
+ - "https://xxx.feishu.cn/docx/bbbbb"
151
132
  ```
152
133
 
134
+ **配置说明:**
135
+
136
+ | 区域 | 说明 |
137
+ | ---------- | ------------------------------------------------ |
138
+ | `custom` | 全局文档,不属于任何版本(如技术架构、编码规范) |
139
+ | `versions` | 按版本和功能组织的文档 |
140
+ | `prd` | 产品需求文档 |
141
+ | `design` | 设计稿(支持 Figma 链接,自动生成链接文档) |
142
+ | `api` | 接口/技术方案 |
143
+ | `test` | 测试用例 |
144
+
153
145
  **如何获取文档链接?**
154
146
 
155
147
  - **飞书**:打开文档,直接复制浏览器地址栏的链接
156
148
  - **Notion**:打开页面,点击右上角「Share」→「Copy link」
157
-
158
- ---
149
+ - **Figma**:打开设计稿,复制浏览器地址栏的链接(可带 `node-id` 参数定位到具体页面)
159
150
 
160
151
  ### 5. 同步文档
161
152
 
162
- 运行以下命令,自动下载所有文档:
163
-
164
153
  ```bash
165
154
  growork sync
166
155
  ```
167
156
 
168
- 同步完成后,文档会保存到你配置的 `output` 路径。
157
+ 同步完成后,文档会按以下结构保存:
169
158
 
170
- **只同步某一个文档:**
171
-
172
- ```bash
173
- growork sync prd
159
+ ```
160
+ docs/
161
+ ├── custom/ # 全局文档
162
+ │ ├── 技术架构.md
163
+ │ └── 编码规范.md
164
+ └── v1.0/ # 版本目录
165
+ ├── 用户登录/ # 功能目录
166
+ │ ├── prd/
167
+ │ │ └── 用户登录PRD.md
168
+ │ ├── design/
169
+ │ │ └── design.md # Figma 链接自动合并到此文件
170
+ │ └── api/
171
+ │ └── 登录接口文档.md
172
+ └── 小优化/
173
+ └── 优化说明.md
174
174
  ```
175
175
 
176
- **查看所有已配置的文档:**
176
+ **只同步特定内容:**
177
177
 
178
178
  ```bash
179
- growork list
179
+ growork sync -c # 只同步全局文档
180
+ growork sync --ver v1.0 # 只同步 v1.0 版本
181
+ growork sync -f 用户登录 # 只同步「用户登录」功能
180
182
  ```
181
183
 
182
- ---
184
+ ## 命令速查
185
+
186
+ | 命令 | 说明 |
187
+ | --------------------------- | -------------- |
188
+ | `growork init` | 创建配置文件 |
189
+ | `growork sync` | 同步所有文档 |
190
+ | `growork sync -c` | 只同步全局文档 |
191
+ | `growork sync --ver v1.0` | 只同步指定版本 |
192
+ | `growork sync -f 功能名` | 只同步指定功能 |
193
+ | `growork list` | 查看文档列表 |
194
+
195
+ ## 支持的文档类型
196
+
197
+ | 平台 | 支持的内容 | 处理方式 |
198
+ | ------ | ---------------------------------------------- | -------------------- |
199
+ | 飞书 | 普通文档 (`/docx/`)、知识库 (`/wiki/`) | 调用 API 下载内容 |
200
+ | Notion | 任意页面(包含数据库的页面会自动转为表格) | 调用 API 下载内容 |
201
+ | Figma | 设计稿链接 (`figma.com/design/...`) | 直接生成链接文档 |
183
202
 
184
203
  ## 常见问题
185
204
 
186
- ### Q: 提示「权限不足」或「401」错误
205
+ ### 提示「权限不足」或「401」错误
187
206
 
188
207
  **飞书文档:**
189
208
  - 确认应用已开通 `docx:document:readonly` 和 `wiki:wiki:readonly` 权限
@@ -191,13 +210,9 @@ growork list
191
210
  - 确认你有权限访问该文档
192
211
 
193
212
  **Notion 页面:**
194
- - 确认你已经把 Integration 连接到了该页面(见上面第 3 步的「给页面授权」)
213
+ - 确认你已经把 Integration 连接到了该页面
195
214
 
196
- ---
197
-
198
- ### Q: 提示「找不到命令」或「command not found」
199
-
200
- Node.js 可能没有正确安装,或者 npm 全局路径没有加入系统 PATH。
215
+ ### 提示「找不到命令」或「command not found」
201
216
 
202
217
  尝试重新安装 Node.js,或者使用 `npx` 运行:
203
218
 
@@ -205,39 +220,27 @@ Node.js 可能没有正确安装,或者 npm 全局路径没有加入系统 PAT
205
220
  npx growork sync
206
221
  ```
207
222
 
208
- ---
209
-
210
- ### Q: 同步后文档是空的
223
+ ### 同步后文档是空的
211
224
 
212
225
  - 检查文档链接是否正确
213
226
  - 检查你是否有权限访问该文档
214
227
  - 飞书知识库文档需要使用 `/wiki/` 格式的链接
215
228
 
216
- ---
217
-
218
- ### Q: 如何更新已同步的文档?
229
+ ### 如何更新已同步的文档?
219
230
 
220
231
  直接再次运行 `growork sync`,会自动覆盖本地文件。
221
232
 
222
- ---
233
+ ### 文件名是怎么生成的?
223
234
 
224
- ## 支持的文档类型
235
+ 文件名会自动从文档标题获取,并处理特殊字符:
225
236
 
226
- | 平台 | 支持的内容 |
227
- | --- | --- |
228
- | 飞书 | 普通文档 (`/docx/`)、知识库 (`/wiki/`) |
229
- | Notion | 任意页面(包含数据库的页面会自动转为表格) |
237
+ - `用户登录 / 注册流程 (v1.0)` → `用户登录-注册流程-v1.0.md`
230
238
 
231
- ---
239
+ 你也可以在配置中用 `name` 字段自定义名称。
232
240
 
233
241
  ## 需要帮助?
234
242
 
235
- 如果遇到问题,可以:
236
-
237
- 1. 在 GitHub 上提 Issue:https://github.com/你的仓库/issues
238
- 2. 检查上面的「常见问题」部分
239
-
240
- ---
243
+ - [GitHub Issues](https://github.com/ThinkerJack/GroWork/issues)
241
244
 
242
245
  ## License
243
246
 
package/claude.md CHANGED
@@ -1,4 +1,105 @@
1
- # GroWork 架构原则
1
+ # GroWork
2
+
3
+ 无需关注test_export下的内容
4
+
5
+ ## 项目简介
6
+
7
+ GroWork 是一个文档同步 CLI 工具,将飞书文档和 Notion 页面自动下载到本地,转为 Markdown 格式,便于 AI 工具(Claude、Cursor 等)读取。
8
+
9
+ ## 项目结构
10
+
11
+ ```
12
+ src/
13
+ ├── index.ts # CLI 入口,使用 commander 定义命令
14
+ ├── commands/
15
+ │ ├── init.ts # growork init - 初始化配置文件
16
+ │ ├── sync.ts # growork sync [name] - 同步文档
17
+ │ └── list.ts # growork list - 列出所有文档
18
+ ├── services/
19
+ │ ├── feishu.ts # 飞书 API,转换飞书 block 为 Markdown
20
+ │ └── notion.ts # Notion API,使用 notion-to-md 库
21
+ └── utils/
22
+ └── config.ts # 配置文件解析和类型定义
23
+ ```
24
+
25
+ ## 技术栈
26
+
27
+ - **Runtime**: Node.js >= 18, ESM 模块
28
+ - **构建**: tsup
29
+ - **依赖**: commander (CLI), @larksuiteoapi/node-sdk (飞书), @notionhq/client + notion-to-md (Notion), yaml (配置), chalk (终端颜色)
30
+
31
+ ## 配置文件
32
+
33
+ `growork.config.yaml` 结构:
34
+
35
+ ```yaml
36
+ feishu:
37
+ appId: "cli_xxx"
38
+ appSecret: "xxx"
39
+ domain: "lark" # lark(国际版) 或 feishu(国内版)
40
+
41
+ notion:
42
+ token: "ntn_xxx"
43
+
44
+ outputDir: "docs" # 输出根目录
45
+
46
+ custom: # 全局文档
47
+ - "https://xxx.feishu.cn/docx/xxxxx"
48
+
49
+ versions: # 版本化文档
50
+ v1.0:
51
+ 用户登录:
52
+ prd:
53
+ - "https://xxx.feishu.cn/docx/xxxxx"
54
+ ```
55
+
56
+ ## 常用命令
57
+
58
+ ```bash
59
+ npm run build # 构建
60
+ npm run dev # 开发模式
61
+ node dist/index.js sync [name] # 同步文档
62
+ ```
63
+
64
+ ## 关键类型
65
+
66
+ ```typescript
67
+ // 文档输入格式
68
+ type DocInput = string | { url: string; name?: string };
69
+
70
+ // 功能下的文档分类
71
+ type FeatureValue = DocInput[] | {
72
+ prd?: DocInput[];
73
+ design?: DocInput[];
74
+ api?: DocInput[];
75
+ test?: DocInput[];
76
+ };
77
+
78
+ // 配置文件结构
79
+ interface GroworkConfigV2 {
80
+ feishu?: FeishuConfig;
81
+ notion?: NotionConfig;
82
+ outputDir?: string;
83
+ custom?: DocInput[];
84
+ versions?: {
85
+ [version: string]: {
86
+ [feature: string]: FeatureValue;
87
+ };
88
+ };
89
+ }
90
+
91
+ // 标准化后的文档
92
+ interface NormalizedDoc {
93
+ url: string;
94
+ name?: string;
95
+ type: 'feishu' | 'notion';
96
+ outputPath: string; // 含 {title} 占位符
97
+ }
98
+ ```
99
+
100
+ ---
101
+
102
+ # 架构原则
2
103
 
3
104
  ## 核心原则:用最少的代码实现功能
4
105
 
@@ -123,7 +224,7 @@ src/
123
224
 
124
225
  ### 命名
125
226
 
126
- - 文件名:小写 + 连字符,如 `feishu-sync.ts`
227
+ - 文件名:小写,如 `feishu.ts`, `config.ts`
127
228
  - 函数名:动词开头,如 `syncDoc`, `parseConfig`
128
229
  - 布尔变量:is/has/should 开头,如 `isValid`
129
230