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 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`(또는 `LSK_DOCS_DIR`)에 docs 레포 경로를 지정할 수 있습니다.
225
+ > standalone 환경에서 docs 레포 바깥(예: 프로젝트 레포)에서 실행해야 한다면 `LEE_SPEC_KIT_DOCS_DIR`에 docs 레포 경로를 지정할 수 있습니다.
222
226
 
223
227
  ### Standalone 프로젝트 설정 예시
224
228
 
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 || process.env.LSK_DOCS_DIR || "").trim();
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.LSK_NO_UPDATE_CHECK || "").trim() === "1" || (process.env.LEE_SPEC_KIT_NO_UPDATE_CHECK || "").trim() === "1";
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(getCliVersion());
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.7",
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",