cursor-sdd 1.0.10 → 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 -39
  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,16 +60,11 @@ function copyRecursive(src, dest) {
63
60
  }
64
61
  }
65
62
 
66
- function cleanOtherFolders(mode) {
67
- const keep = new Set(FOLDERS_BY_MODE[mode] || []);
68
- for (const folder of MANAGED_FOLDERS) {
69
- if (keep.has(folder)) continue;
70
- const dest = path.join(targetDir, folder);
71
- if (fs.existsSync(dest)) {
72
- fs.rmSync(dest, { recursive: true, force: true });
73
- console.log(` 🧹 Removed: ${path.relative(projectRoot, dest)}`);
74
- }
63
+ function cleanTargetDir() {
64
+ if (fs.existsSync(targetDir)) {
65
+ fs.rmSync(targetDir, { recursive: true, force: true });
75
66
  }
67
+ fs.mkdirSync(targetDir, { recursive: true });
76
68
  }
77
69
 
78
70
  function getArgValue(flag) {
@@ -139,9 +131,11 @@ function resolveMode() {
139
131
  return Promise.resolve('new');
140
132
  }
141
133
 
142
- function getFolders(mode) {
143
- const candidates = FOLDERS_BY_MODE[mode] || [];
144
- 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());
145
139
  }
146
140
 
147
141
  function setup({ mode, sourceRoot, folders }) {
@@ -149,22 +143,8 @@ function setup({ mode, sourceRoot, folders }) {
149
143
  console.log(`📁 Target: ${targetDir}`);
150
144
  console.log(`🎚️ Mode: ${mode}\n`);
151
145
 
152
- // 自動実行時は既存の .cursor がある場合スキップ
153
- if (isAuto && fs.existsSync(targetDir) && !isForce) {
154
- // 最低限 .cursor がある前提で掃除だけはする
155
- cleanOtherFolders(mode);
156
- console.log('ℹ️ .cursor already exists. Run `npx cursor-sdd --force` to overwrite.');
157
- console.log('ℹ️ Cleaned other mode folders, skipping copy due to --auto.');
158
- process.exit(0);
159
- }
160
-
161
- // .cursor ディレクトリを作成
162
- if (!fs.existsSync(targetDir)) {
163
- fs.mkdirSync(targetDir, { recursive: true });
164
- }
165
-
166
- // 選択したモード以外のフォルダを掃除(手動実行時も確実に実施)
167
- cleanOtherFolders(mode);
146
+ // 既存 .cursor は問答無用で削除してクリーンにする
147
+ cleanTargetDir();
168
148
 
169
149
  if (!folders.length) {
170
150
  console.log(`ℹ️ No folders to copy for mode: ${mode}.`);
@@ -180,9 +160,6 @@ function setup({ mode, sourceRoot, folders }) {
180
160
  copyRecursive(src, dest);
181
161
  }
182
162
 
183
- // 念のためコピー後にも掃除を一度実施
184
- cleanOtherFolders(mode);
185
-
186
163
  console.log('\n✨ Cursor SDD setup complete!\n');
187
164
  console.log('Available commands:');
188
165
  console.log(' /init - Initialize project specs');
@@ -195,8 +172,8 @@ function setup({ mode, sourceRoot, folders }) {
195
172
 
196
173
  (async () => {
197
174
  const mode = await resolveMode();
198
- const sourceRoot = packageRoot;
199
- const folders = getFolders(mode);
175
+ const sourceRoot = SOURCE_BY_MODE[mode] || SOURCE_BY_MODE.new || packageRoot;
176
+ const folders = getFolders(sourceRoot);
200
177
 
201
178
  setup({ mode, sourceRoot, folders });
202
179
  })().catch((err) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursor-sdd",
3
- "version": "1.0.10",
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"