flowbook 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/README.de.md +66 -3
- package/README.es.md +66 -3
- package/README.fr.md +66 -3
- package/README.ja.md +66 -3
- package/README.ko.md +66 -3
- package/README.md +66 -3
- package/README.pt-BR.md +66 -3
- package/README.ru.md +66 -3
- package/README.zh-CN.md +66 -3
- package/dist/cli.js +53 -6
- package/package.json +5 -2
- package/src/node/init.ts +46 -2
- package/src/skills/flowbook/SKILL.md +499 -0
package/README.zh-CN.md
CHANGED
|
@@ -12,9 +12,6 @@
|
|
|
12
12
|
## 快速开始
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
# 安装
|
|
16
|
-
npm install -D flowbook
|
|
17
|
-
|
|
18
15
|
# 初始化 — 添加脚本 + 示例文件
|
|
19
16
|
npx flowbook@latest init
|
|
20
17
|
|
|
@@ -92,6 +89,72 @@ Flowbook 默认扫描以下模式:
|
|
|
92
89
|
|
|
93
90
|
忽略 `node_modules/`、`.git/` 和 `dist/`。
|
|
94
91
|
|
|
92
|
+
## AI Agent Skill
|
|
93
|
+
|
|
94
|
+
`flowbook init` 自动将 AI 代理技能安装到所有支持的编码代理目录中。
|
|
95
|
+
当编码代理(Claude Code、OpenAI Codex、VS Code Copilot、Cursor、Gemini CLI 等)检测到你的提示中有 **"flowbook"** 关键字时,它会:
|
|
96
|
+
|
|
97
|
+
1. 分析你的代码库中的逻辑流(API 路由、认证、状态管理、业务逻辑等)
|
|
98
|
+
2. 如果尚未初始化,设置 Flowbook
|
|
99
|
+
3. 为每个重要流程生成包含 Mermaid 图表的 `.flow.md` 文件
|
|
100
|
+
4. 验证构建
|
|
101
|
+
|
|
102
|
+
### 手动技能安装
|
|
103
|
+
|
|
104
|
+
如果你没有使用 `flowbook init`,请手动复制技能:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Claude Code
|
|
108
|
+
mkdir -p .claude/skills/flowbook
|
|
109
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .claude/skills/flowbook/
|
|
110
|
+
|
|
111
|
+
# OpenAI Codex
|
|
112
|
+
mkdir -p .agents/skills/flowbook
|
|
113
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .agents/skills/flowbook/
|
|
114
|
+
|
|
115
|
+
# VS Code / GitHub Copilot
|
|
116
|
+
mkdir -p .github/skills/flowbook
|
|
117
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .github/skills/flowbook/
|
|
118
|
+
|
|
119
|
+
# Google Antigravity
|
|
120
|
+
mkdir -p .agent/skills/flowbook
|
|
121
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .agent/skills/flowbook/
|
|
122
|
+
|
|
123
|
+
# Gemini CLI
|
|
124
|
+
mkdir -p .gemini/skills/flowbook
|
|
125
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .gemini/skills/flowbook/
|
|
126
|
+
|
|
127
|
+
# Cursor
|
|
128
|
+
mkdir -p .cursor/skills/flowbook
|
|
129
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .cursor/skills/flowbook/
|
|
130
|
+
|
|
131
|
+
# Windsurf (Codeium)
|
|
132
|
+
mkdir -p .windsurf/skills/flowbook
|
|
133
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .windsurf/skills/flowbook/
|
|
134
|
+
|
|
135
|
+
# AmpCode
|
|
136
|
+
mkdir -p .amp/skills/flowbook
|
|
137
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .amp/skills/flowbook/
|
|
138
|
+
|
|
139
|
+
# OpenCode / oh-my-opencode
|
|
140
|
+
mkdir -p .opencode/skills/flowbook
|
|
141
|
+
cp node_modules/flowbook/src/skills/flowbook/SKILL.md .opencode/skills/flowbook/
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 兼容代理
|
|
145
|
+
|
|
146
|
+
| 代理 | 技能位置 |
|
|
147
|
+
|-------|---------------|
|
|
148
|
+
| Claude Code | `.claude/skills/flowbook/SKILL.md` |
|
|
149
|
+
| OpenAI Codex | `.agents/skills/flowbook/SKILL.md` |
|
|
150
|
+
| VS Code / GitHub Copilot | `.github/skills/flowbook/SKILL.md` |
|
|
151
|
+
| Google Antigravity | `.agent/skills/flowbook/SKILL.md` |
|
|
152
|
+
| Gemini CLI | `.gemini/skills/flowbook/SKILL.md` |
|
|
153
|
+
| Cursor | `.cursor/skills/flowbook/SKILL.md` |
|
|
154
|
+
| Windsurf (Codeium) | `.windsurf/skills/flowbook/SKILL.md` |
|
|
155
|
+
| AmpCode | `.amp/skills/flowbook/SKILL.md` |
|
|
156
|
+
| OpenCode / oh-my-opencode | `.opencode/skills/flowbook/SKILL.md` |
|
|
157
|
+
|
|
95
158
|
## 工作原理
|
|
96
159
|
|
|
97
160
|
```
|
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/node/init.ts
|
|
4
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
5
|
-
import { resolve } from "path";
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync } from "fs";
|
|
5
|
+
import { resolve, dirname } from "path";
|
|
6
6
|
import { execSync } from "child_process";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
var __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
9
|
var EXAMPLE_FLOW = `---
|
|
8
10
|
title: Example Flow
|
|
9
11
|
category: Getting Started
|
|
@@ -64,6 +66,51 @@ async function initFlowbook() {
|
|
|
64
66
|
} else {
|
|
65
67
|
console.log(" \u2713 Example flow already exists");
|
|
66
68
|
}
|
|
69
|
+
const gitignorePath = resolve(cwd, ".gitignore");
|
|
70
|
+
if (existsSync(gitignorePath)) {
|
|
71
|
+
const gitignore = readFileSync(gitignorePath, "utf-8");
|
|
72
|
+
if (!gitignore.includes("flowbook-static")) {
|
|
73
|
+
writeFileSync(gitignorePath, gitignore.trimEnd() + "\nflowbook-static\n");
|
|
74
|
+
console.log(" \u2713 Added flowbook-static to .gitignore");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const skillSrc = resolve(__dirname, "..", "src", "skills", "flowbook", "SKILL.md");
|
|
78
|
+
const skillDirs = [
|
|
79
|
+
resolve(cwd, ".claude", "skills", "flowbook"),
|
|
80
|
+
// Claude Code
|
|
81
|
+
resolve(cwd, ".agents", "skills", "flowbook"),
|
|
82
|
+
// OpenAI Codex / cross-tool alias
|
|
83
|
+
resolve(cwd, ".github", "skills", "flowbook"),
|
|
84
|
+
// VS Code / GitHub Copilot
|
|
85
|
+
resolve(cwd, ".agent", "skills", "flowbook"),
|
|
86
|
+
// Google Antigravity
|
|
87
|
+
resolve(cwd, ".gemini", "skills", "flowbook"),
|
|
88
|
+
// Gemini CLI
|
|
89
|
+
resolve(cwd, ".cursor", "skills", "flowbook"),
|
|
90
|
+
// Cursor
|
|
91
|
+
resolve(cwd, ".windsurf", "skills", "flowbook"),
|
|
92
|
+
// Windsurf (Codeium)
|
|
93
|
+
resolve(cwd, ".amp", "skills", "flowbook"),
|
|
94
|
+
// AmpCode
|
|
95
|
+
resolve(cwd, ".opencode", "skills", "flowbook")
|
|
96
|
+
// OpenCode / oh-my-opencode
|
|
97
|
+
];
|
|
98
|
+
if (existsSync(skillSrc)) {
|
|
99
|
+
let installed = 0;
|
|
100
|
+
for (const dir of skillDirs) {
|
|
101
|
+
const dest = resolve(dir, "SKILL.md");
|
|
102
|
+
if (!existsSync(dest)) {
|
|
103
|
+
mkdirSync(dir, { recursive: true });
|
|
104
|
+
copyFileSync(skillSrc, dest);
|
|
105
|
+
installed++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (installed > 0) {
|
|
109
|
+
console.log(` \u2713 Installed AI agent skill to ${installed} agent directories`);
|
|
110
|
+
} else {
|
|
111
|
+
console.log(" \u2713 AI agent skills already installed");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
67
114
|
const run = pm === "yarn" ? "yarn" : `${pm} run`;
|
|
68
115
|
console.log("");
|
|
69
116
|
console.log(" Next steps:");
|
|
@@ -181,11 +228,11 @@ function flowbookPlugin(options = {}) {
|
|
|
181
228
|
}
|
|
182
229
|
|
|
183
230
|
// src/node/server.ts
|
|
184
|
-
import { resolve as resolve2, dirname } from "path";
|
|
185
|
-
import { fileURLToPath } from "url";
|
|
186
|
-
var
|
|
231
|
+
import { resolve as resolve2, dirname as dirname2 } from "path";
|
|
232
|
+
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
233
|
+
var __dirname2 = dirname2(fileURLToPath2(import.meta.url));
|
|
187
234
|
function getClientDir() {
|
|
188
|
-
return resolve2(
|
|
235
|
+
return resolve2(__dirname2, "..", "src", "client");
|
|
189
236
|
}
|
|
190
237
|
function createConfig(options) {
|
|
191
238
|
const cwd = options.cwd ?? process.cwd();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flowbook",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"flowbook": "./dist/cli.js"
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"dev": "vite",
|
|
14
14
|
"build": "tsup",
|
|
15
|
-
"preview": "vite preview"
|
|
15
|
+
"preview": "vite preview",
|
|
16
|
+
"flowbook": "flowbook dev",
|
|
17
|
+
"build-flowbook": "flowbook build"
|
|
16
18
|
},
|
|
17
19
|
"dependencies": {
|
|
18
20
|
"@tailwindcss/vite": "^4.0.0",
|
|
@@ -29,6 +31,7 @@
|
|
|
29
31
|
"@types/node": "^25.3.3",
|
|
30
32
|
"@types/react": "^19.0.0",
|
|
31
33
|
"@types/react-dom": "^19.0.0",
|
|
34
|
+
"flowbook": "^0.1.2",
|
|
32
35
|
"tsup": "^8.0.0",
|
|
33
36
|
"typescript": "^5.7.0"
|
|
34
37
|
}
|
package/src/node/init.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync } from "node:fs";
|
|
2
|
+
import { resolve, dirname } from "node:path";
|
|
3
3
|
import { execSync } from "node:child_process";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
4
7
|
|
|
5
8
|
const EXAMPLE_FLOW = `---
|
|
6
9
|
title: Example Flow
|
|
@@ -75,6 +78,47 @@ export async function initFlowbook() {
|
|
|
75
78
|
console.log(" ✓ Example flow already exists");
|
|
76
79
|
}
|
|
77
80
|
|
|
81
|
+
// 4. Add flowbook-static to .gitignore
|
|
82
|
+
const gitignorePath = resolve(cwd, ".gitignore");
|
|
83
|
+
if (existsSync(gitignorePath)) {
|
|
84
|
+
const gitignore = readFileSync(gitignorePath, "utf-8");
|
|
85
|
+
if (!gitignore.includes("flowbook-static")) {
|
|
86
|
+
writeFileSync(gitignorePath, gitignore.trimEnd() + "\nflowbook-static\n");
|
|
87
|
+
console.log(" ✓ Added flowbook-static to .gitignore");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// 5. Install AI agent skill to all supported agent directories
|
|
92
|
+
const skillSrc = resolve(__dirname, "..", "src", "skills", "flowbook", "SKILL.md");
|
|
93
|
+
const skillDirs = [
|
|
94
|
+
resolve(cwd, ".claude", "skills", "flowbook"), // Claude Code
|
|
95
|
+
resolve(cwd, ".agents", "skills", "flowbook"), // OpenAI Codex / cross-tool alias
|
|
96
|
+
resolve(cwd, ".github", "skills", "flowbook"), // VS Code / GitHub Copilot
|
|
97
|
+
resolve(cwd, ".agent", "skills", "flowbook"), // Google Antigravity
|
|
98
|
+
resolve(cwd, ".gemini", "skills", "flowbook"), // Gemini CLI
|
|
99
|
+
resolve(cwd, ".cursor", "skills", "flowbook"), // Cursor
|
|
100
|
+
resolve(cwd, ".windsurf", "skills", "flowbook"), // Windsurf (Codeium)
|
|
101
|
+
resolve(cwd, ".amp", "skills", "flowbook"), // AmpCode
|
|
102
|
+
resolve(cwd, ".opencode", "skills", "flowbook"), // OpenCode / oh-my-opencode
|
|
103
|
+
];
|
|
104
|
+
|
|
105
|
+
if (existsSync(skillSrc)) {
|
|
106
|
+
let installed = 0;
|
|
107
|
+
for (const dir of skillDirs) {
|
|
108
|
+
const dest = resolve(dir, "SKILL.md");
|
|
109
|
+
if (!existsSync(dest)) {
|
|
110
|
+
mkdirSync(dir, { recursive: true });
|
|
111
|
+
copyFileSync(skillSrc, dest);
|
|
112
|
+
installed++;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (installed > 0) {
|
|
116
|
+
console.log(` \u2713 Installed AI agent skill to ${installed} agent directories`);
|
|
117
|
+
} else {
|
|
118
|
+
console.log(" \u2713 AI agent skills already installed");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
78
122
|
const run = pm === "yarn" ? "yarn" : `${pm} run`;
|
|
79
123
|
console.log("");
|
|
80
124
|
console.log(" Next steps:");
|