lee-spec-kit 0.4.7 → 0.4.8
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.en.md +186 -0
- package/README.md +5 -1
- package/assets/logo.png +0 -0
- package/dist/index.js +47 -3
- package/package.json +3 -2
package/README.en.md
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<strong>lee-spec-kit</strong>
|
|
3
|
+
</h1>
|
|
4
|
+
|
|
5
|
+
<div align="center">
|
|
6
|
+
<img src="./assets/logo.png" alt="lee-spec-kit logo" width="620" />
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<strong>CLI to generate a project docs structure for AI-assisted development</strong>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://www.npmjs.com/package/lee-spec-kit"><img src="https://img.shields.io/npm/v/lee-spec-kit.svg" alt="npm version"></a>
|
|
15
|
+
<img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node.js">
|
|
16
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="#quick-start">Quick Start</a> •
|
|
21
|
+
<a href="#features">Features</a> •
|
|
22
|
+
<a href="#usage">Usage</a> •
|
|
23
|
+
<a href="#generated-structure">Generated Structure</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<a href="./README.en.md">
|
|
28
|
+
<img src="https://img.shields.io/badge/lang-en-red.svg" alt="English">
|
|
29
|
+
</a>
|
|
30
|
+
<a href="./README.md">
|
|
31
|
+
<img src="https://img.shields.io/badge/lang-ko-blue.svg" alt="한국어">
|
|
32
|
+
</a>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Quick Start
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 1) Initialize docs structure
|
|
41
|
+
npx lee-spec-kit init
|
|
42
|
+
|
|
43
|
+
# 2) Create a feature
|
|
44
|
+
npx lee-spec-kit feature user-auth
|
|
45
|
+
|
|
46
|
+
# 3) Show next steps (for agents)
|
|
47
|
+
npx lee-spec-kit context
|
|
48
|
+
|
|
49
|
+
# 4) Show overall status
|
|
50
|
+
npx lee-spec-kit status
|
|
51
|
+
|
|
52
|
+
# 5) Validate docs / feature metadata
|
|
53
|
+
npx lee-spec-kit doctor
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Features
|
|
57
|
+
|
|
58
|
+
### 📁 Project initialization
|
|
59
|
+
|
|
60
|
+
- Interactive init or CLI options
|
|
61
|
+
- Supports `single` and `fullstack` (FE/BE split)
|
|
62
|
+
- Korean/English templates
|
|
63
|
+
|
|
64
|
+
### 🚀 Feature creation
|
|
65
|
+
|
|
66
|
+
- Generates `spec.md`, `plan.md`, `tasks.md`, `decisions.md`
|
|
67
|
+
- Fullstack mode supports FE/BE separation
|
|
68
|
+
- Integrates Issue/PR templates (docs side)
|
|
69
|
+
|
|
70
|
+
### 📊 Status management
|
|
71
|
+
|
|
72
|
+
- View feature progress at a glance
|
|
73
|
+
- Print to terminal or write a Markdown report
|
|
74
|
+
|
|
75
|
+
### 🩺 Doctor
|
|
76
|
+
|
|
77
|
+
- Checks docs structure and feature metadata (missing status, duplicate IDs, placeholders, etc.)
|
|
78
|
+
- `--json` output for automation/agents
|
|
79
|
+
|
|
80
|
+
### 🔄 Template updates
|
|
81
|
+
|
|
82
|
+
- Updates docs templates to the latest version
|
|
83
|
+
|
|
84
|
+
## Usage
|
|
85
|
+
|
|
86
|
+
### Init
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx lee-spec-kit init
|
|
90
|
+
npx lee-spec-kit init --name my-project --type fullstack
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Options:**
|
|
94
|
+
|
|
95
|
+
| Option | Description | Default |
|
|
96
|
+
| ------------------- | ----------------------------------------- | ------------- |
|
|
97
|
+
| `-n, --name <name>` | Project name | current folder |
|
|
98
|
+
| `-t, --type <type>` | `single` or `fullstack` | interactive |
|
|
99
|
+
| `-l, --lang <lang>` | `ko` or `en` | `en` |
|
|
100
|
+
| `-d, --dir <dir>` | Install directory | `./docs` |
|
|
101
|
+
| `-y, --yes` | Skip interactive prompts | - |
|
|
102
|
+
|
|
103
|
+
### Create a feature
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Single
|
|
107
|
+
npx lee-spec-kit feature user-auth
|
|
108
|
+
|
|
109
|
+
# Fullstack
|
|
110
|
+
npx lee-spec-kit feature --repo be user-auth
|
|
111
|
+
npx lee-spec-kit feature --repo fe user-profile
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Context (agent guide)
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Auto-detect (based on git branch)
|
|
118
|
+
npx lee-spec-kit context
|
|
119
|
+
|
|
120
|
+
# Specify a feature
|
|
121
|
+
npx lee-spec-kit context user-auth
|
|
122
|
+
|
|
123
|
+
# Selector: Feature ID / folder name
|
|
124
|
+
npx lee-spec-kit context F001
|
|
125
|
+
npx lee-spec-kit context F001-user-auth
|
|
126
|
+
|
|
127
|
+
# JSON output (for agents)
|
|
128
|
+
npx lee-spec-kit context --json
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Status
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
npx lee-spec-kit status
|
|
135
|
+
npx lee-spec-kit status --write
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Doctor
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npx lee-spec-kit doctor
|
|
142
|
+
npx lee-spec-kit doctor --strict
|
|
143
|
+
npx lee-spec-kit doctor --json
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Update templates
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
npx lee-spec-kit update
|
|
150
|
+
npx lee-spec-kit update --agents
|
|
151
|
+
npx lee-spec-kit update --skills
|
|
152
|
+
npx lee-spec-kit update --templates
|
|
153
|
+
npx lee-spec-kit update --force
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Configuration
|
|
157
|
+
|
|
158
|
+
### `.lee-spec-kit.json`
|
|
159
|
+
|
|
160
|
+
Running `init` creates `.lee-spec-kit.json` in your docs root (default: `docs/`).
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"projectName": "my-project",
|
|
165
|
+
"projectType": "single",
|
|
166
|
+
"lang": "en",
|
|
167
|
+
"createdAt": "YYYY-MM-DD",
|
|
168
|
+
"docsRepo": "embedded"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
| Field | Description |
|
|
173
|
+
| ------------- | ------------------------------------------------ |
|
|
174
|
+
| `projectName` | Project name |
|
|
175
|
+
| `projectType` | `single` or `fullstack` |
|
|
176
|
+
| `lang` | `ko` or `en` |
|
|
177
|
+
| `createdAt` | Creation date |
|
|
178
|
+
| `docsRepo` | `embedded` or `standalone` |
|
|
179
|
+
| `projectRoot` | (standalone only) path to the project repository |
|
|
180
|
+
|
|
181
|
+
> If you run the CLI outside the docs repo in standalone mode, set `LEE_SPEC_KIT_DOCS_DIR` to the docs repo path.
|
|
182
|
+
|
|
183
|
+
## Generated Structure
|
|
184
|
+
|
|
185
|
+
See the Korean README for the full tree examples and workflow details: `README.md`.
|
|
186
|
+
|
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
<strong>lee-spec-kit</strong>
|
|
3
3
|
</h1>
|
|
4
4
|
|
|
5
|
+
<div align="center">
|
|
6
|
+
<img src="./assets/logo.png" alt="lee-spec-kit logo" width="620" />
|
|
7
|
+
</div>
|
|
8
|
+
|
|
5
9
|
<p align="center">
|
|
6
10
|
<strong>AI 에이전트 기반 개발을 위한 프로젝트 문서 구조 생성 CLI</strong>
|
|
7
11
|
</p>
|
|
@@ -218,7 +222,7 @@ npx lee-spec-kit update --force
|
|
|
218
222
|
> `docsRepo: "standalone"`을 선택하면 `pushDocs`, `docsRemote`, `projectRoot`가 추가됩니다.
|
|
219
223
|
|
|
220
224
|
> 어디서 실행하든 설정을 찾을 수 있도록, CLI는 현재 디렉토리에서 상위로 올라가며 `.lee-spec-kit.json` 또는 `docs/.lee-spec-kit.json`을 탐색합니다.
|
|
221
|
-
> standalone 환경에서 docs 레포 바깥(예: 프로젝트 레포)에서 실행해야 한다면 `LEE_SPEC_KIT_DOCS_DIR
|
|
225
|
+
> standalone 환경에서 docs 레포 바깥(예: 프로젝트 레포)에서 실행해야 한다면 `LEE_SPEC_KIT_DOCS_DIR`에 docs 레포 경로를 지정할 수 있습니다.
|
|
222
226
|
|
|
223
227
|
### Standalone 프로젝트 설정 예시
|
|
224
228
|
|
package/assets/logo.png
ADDED
|
Binary file
|
package/dist/index.js
CHANGED
|
@@ -901,7 +901,7 @@ function getAncestorDirs(startDir) {
|
|
|
901
901
|
return dirs;
|
|
902
902
|
}
|
|
903
903
|
async function getConfig(cwd) {
|
|
904
|
-
const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR ||
|
|
904
|
+
const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || "").trim();
|
|
905
905
|
const baseDirs = [
|
|
906
906
|
...explicitDocsDir ? [path4.resolve(explicitDocsDir)] : [],
|
|
907
907
|
...getAncestorDirs(cwd)
|
|
@@ -2930,6 +2930,49 @@ function doctorCommand(program2) {
|
|
|
2930
2930
|
process.exit(exitCode);
|
|
2931
2931
|
});
|
|
2932
2932
|
}
|
|
2933
|
+
function isBannerDisabled() {
|
|
2934
|
+
const v = (process.env.LEE_SPEC_KIT_NO_BANNER || "").trim();
|
|
2935
|
+
return v === "1";
|
|
2936
|
+
}
|
|
2937
|
+
function getBanner(opts) {
|
|
2938
|
+
if (isBannerDisabled()) return "";
|
|
2939
|
+
const lee = `
|
|
2940
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588
|
|
2941
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2942
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2943
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588
|
|
2944
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2945
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2946
|
+
\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588
|
|
2947
|
+
`;
|
|
2948
|
+
const spec = `
|
|
2949
|
+
\u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588
|
|
2950
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2951
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2952
|
+
\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588
|
|
2953
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2954
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2955
|
+
\u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588
|
|
2956
|
+
`;
|
|
2957
|
+
const kit = `
|
|
2958
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588
|
|
2959
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2960
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2961
|
+
\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2962
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2963
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588
|
|
2964
|
+
\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588
|
|
2965
|
+
`;
|
|
2966
|
+
const ascii = `${lee}${spec}${kit}`;
|
|
2967
|
+
const version = opts?.version ? `v${opts.version}` : "";
|
|
2968
|
+
const footer = version ? `
|
|
2969
|
+
${version}
|
|
2970
|
+
` : "\n";
|
|
2971
|
+
if (process.stdout.isTTY) {
|
|
2972
|
+
return `${chalk6.cyan(ascii)}${chalk6.gray(footer)}`;
|
|
2973
|
+
}
|
|
2974
|
+
return `${ascii}${footer}`;
|
|
2975
|
+
}
|
|
2933
2976
|
var CACHE_FILE = path4.join(os.homedir(), ".lee-spec-kit-version-cache.json");
|
|
2934
2977
|
var CHECK_INTERVAL = 24 * 60 * 60 * 1e3;
|
|
2935
2978
|
function getCurrentVersion() {
|
|
@@ -3014,7 +3057,7 @@ function shouldCheckForUpdates() {
|
|
|
3014
3057
|
const argv = process.argv.slice(2);
|
|
3015
3058
|
const hasJsonFlag = argv.includes("--json");
|
|
3016
3059
|
const isHelpOrVersion = argv.includes("--help") || argv.includes("-h") || argv.includes("--version") || argv.includes("-V");
|
|
3017
|
-
const disabledByEnv = (process.env.
|
|
3060
|
+
const disabledByEnv = (process.env.LEE_SPEC_KIT_NO_UPDATE_CHECK || "").trim() === "1";
|
|
3018
3061
|
if (hasJsonFlag) return false;
|
|
3019
3062
|
if (!process.stdout.isTTY) return false;
|
|
3020
3063
|
if (isHelpOrVersion) return false;
|
|
@@ -3033,9 +3076,10 @@ function getCliVersion() {
|
|
|
3033
3076
|
}
|
|
3034
3077
|
return "0.0.0";
|
|
3035
3078
|
}
|
|
3079
|
+
var cliVersion = getCliVersion();
|
|
3036
3080
|
program.name("lee-spec-kit").description(
|
|
3037
3081
|
"Project documentation structure generator for AI-assisted development"
|
|
3038
|
-
).version(
|
|
3082
|
+
).version(cliVersion).addHelpText("beforeAll", getBanner({ version: cliVersion }));
|
|
3039
3083
|
initCommand(program);
|
|
3040
3084
|
featureCommand(program);
|
|
3041
3085
|
statusCommand(program);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lee-spec-kit",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.8",
|
|
4
4
|
"description": "Project documentation structure generator for AI-assisted development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"main": "./dist/index.js",
|
|
11
11
|
"files": [
|
|
12
12
|
"dist",
|
|
13
|
-
"templates"
|
|
13
|
+
"templates",
|
|
14
|
+
"assets"
|
|
14
15
|
],
|
|
15
16
|
"keywords": [
|
|
16
17
|
"docs",
|