cursor-sdd 1.0.9 → 1.0.11

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.
Files changed (2) hide show
  1. package/bin/setup.ts +16 -36
  2. package/package.json +1 -1
package/bin/setup.ts CHANGED
@@ -10,13 +10,10 @@ const isForce = process.argv.includes('--force');
10
10
 
11
11
  // パッケージのルートディレクトリを取得
12
12
  const packageRoot = path.resolve(__dirname, '..');
13
- const FOLDERS_BY_MODE = {
14
- new: ['commands', 'rules', 'templates'],
15
- assign: ['assign'],
13
+ const SOURCE_BY_MODE = {
14
+ new: path.join(packageRoot, 'new'),
15
+ assign: path.join(packageRoot, 'assign'),
16
16
  };
17
- const MANAGED_FOLDERS = Array.from(
18
- new Set([...FOLDERS_BY_MODE.new, ...FOLDERS_BY_MODE.assign, 'bin'])
19
- );
20
17
 
21
18
  // プロジェクトのルートを取得(node_modules の2つ上)
22
19
  function getProjectRoot() {
@@ -63,18 +60,11 @@ function copyRecursive(src, dest) {
63
60
  }
64
61
  }
65
62
 
66
- function cleanOtherFolders(mode) {
67
- if (!fs.existsSync(targetDir)) return;
68
-
69
- const keep = new Set(FOLDERS_BY_MODE[mode] || []);
70
- for (const folder of MANAGED_FOLDERS) {
71
- if (keep.has(folder)) continue;
72
- const dest = path.join(targetDir, folder);
73
- if (fs.existsSync(dest)) {
74
- fs.rmSync(dest, { recursive: true, force: true });
75
- console.log(` 🧹 Removed: ${path.relative(projectRoot, dest)}`);
76
- }
63
+ function cleanTargetDir() {
64
+ if (fs.existsSync(targetDir)) {
65
+ fs.rmSync(targetDir, { recursive: true, force: true });
77
66
  }
67
+ fs.mkdirSync(targetDir, { recursive: true });
78
68
  }
79
69
 
80
70
  function getArgValue(flag) {
@@ -141,9 +131,11 @@ function resolveMode() {
141
131
  return Promise.resolve('new');
142
132
  }
143
133
 
144
- function getFolders(mode) {
145
- const candidates = FOLDERS_BY_MODE[mode] || [];
146
- return candidates.filter((folder) => fs.existsSync(path.join(packageRoot, folder)));
134
+ function getFolders(sourceRoot) {
135
+ if (!fs.existsSync(sourceRoot)) return [];
136
+ return fs
137
+ .readdirSync(sourceRoot)
138
+ .filter((item) => fs.statSync(path.join(sourceRoot, item)).isDirectory());
147
139
  }
148
140
 
149
141
  function setup({ mode, sourceRoot, folders }) {
@@ -151,20 +143,8 @@ function setup({ mode, sourceRoot, folders }) {
151
143
  console.log(`📁 Target: ${targetDir}`);
152
144
  console.log(`🎚️ Mode: ${mode}\n`);
153
145
 
154
- // 選択したモード以外のフォルダを先に掃除
155
- cleanOtherFolders(mode);
156
-
157
- // 自動実行時は既存の .cursor がある場合スキップ
158
- if (isAuto && fs.existsSync(targetDir) && !isForce) {
159
- console.log('ℹ️ .cursor already exists. Run `npx cursor-sdd --force` to overwrite.');
160
- console.log('ℹ️ Cleaned other mode folders, skipping copy due to --auto.');
161
- process.exit(0);
162
- }
163
-
164
- // .cursor ディレクトリを作成
165
- if (!fs.existsSync(targetDir)) {
166
- fs.mkdirSync(targetDir, { recursive: true });
167
- }
146
+ // 既存 .cursor は問答無用で削除してクリーンにする
147
+ cleanTargetDir();
168
148
 
169
149
  if (!folders.length) {
170
150
  console.log(`ℹ️ No folders to copy for mode: ${mode}.`);
@@ -192,8 +172,8 @@ function setup({ mode, sourceRoot, folders }) {
192
172
 
193
173
  (async () => {
194
174
  const mode = await resolveMode();
195
- const sourceRoot = packageRoot;
196
- const folders = getFolders(mode);
175
+ const sourceRoot = SOURCE_BY_MODE[mode] || SOURCE_BY_MODE.new || packageRoot;
176
+ const folders = getFolders(sourceRoot);
197
177
 
198
178
  setup({ mode, sourceRoot, folders });
199
179
  })().catch((err) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursor-sdd",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "Cursor SDD (Spec-Driven Development) - AI-powered spec templates, rules and commands for Cursor IDE",
5
5
  "bin": {
6
6
  "cursor-sdd": "./bin/setup.ts"