cursor-sdd 1.0.12 → 1.0.14

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.md CHANGED
@@ -5,23 +5,42 @@ Cursor IDE 向けの Spec-Driven Development (SDD) テンプレート、ルー
5
5
  ## インストール
6
6
 
7
7
  ```bash
8
- npx install cursor-sdd
8
+ # 推奨(都度実行・インストール不要)
9
+ npx cursor-sdd@latest
10
+
11
+ # 依存に入れたい場合(必要な時に自分で実行する)
12
+ npm i -D cursor-sdd
9
13
  ```
10
14
 
11
- インストール時に自動的にプロジェクトの `.cursor/` フォルダにファイルがコピーされます。対話可能な環境では「新規のPJを立ち上げる / 既存PJにアサインする」を選択できます。
15
+ 実行時にプロジェクトの `.cursor/` フォルダにファイルがコピーされます。対話可能な環境では「新規のPJを立ち上げる / 既存PJにアサインする」を選択できます。
12
16
 
13
17
  ### モード指定
14
18
 
15
- - 対話プロンプト: `npx install cursor-sdd` 実行時に `new` / `assign` を選択
16
- - 非対話や CI: `npx install cursor-sdd --mode assign` または環境変数 `CURSOR_SDD_MODE=assign`
19
+ - 明示指定(おすすめ):
20
+
21
+ ```bash
22
+ npx cursor-sdd@latest --mode new
23
+ npx cursor-sdd@latest --mode assign
24
+ ```
25
+
26
+ - 対話プロンプト: `npx cursor-sdd@latest` 実行時に `new` / `assign` を選択
27
+ - 非対話や CI: `npx cursor-sdd@latest --mode assign` または環境変数 `CURSOR_SDD_MODE=assign`
17
28
  - 省略時デフォルト: `new`
18
29
 
30
+ ### 依存として入れた場合の実行
31
+
32
+ `npm i -D cursor-sdd` しただけでは `.cursor/` は変更しません。セットアップは明示的に実行してください:
33
+
34
+ ```bash
35
+ npx cursor-sdd --mode new
36
+ ```
37
+
19
38
  ### 手動セットアップ
20
39
 
21
40
  既存の `.cursor/` がある場合は自動コピーがスキップされます。強制上書きする場合:
22
41
 
23
42
  ```bash
24
- npx cursor-sdd --force
43
+ npx cursor-sdd@latest --force
25
44
  ```
26
45
 
27
46
  ## 使い方
@@ -95,10 +114,3 @@ assign モード時に配布したいファイルはリポジトリ直下の `as
95
114
  4. `/tasks` - 実装タスクを生成
96
115
  5. `/impl` - タスクを実装
97
116
  6. `/status` - 進捗を確認
98
-
99
- ## License
100
-
101
- MIT
102
-
103
- # cursor-sdd-package
104
-
package/assign/README.md CHANGED
@@ -6,4 +6,11 @@
6
6
  - `assign/rules` … アサイン時専用のルール
7
7
  - `assign/templates` … アサイン時専用のテンプレート
8
8
 
9
- `npm install cursor-sdd --mode assign` あるいは対話選択で `assign` を選ぶと、このフォルダ配下が `.cursor/` にコピーされます。
9
+ `npx cursor-sdd@latest --mode assign` あるいは対話選択で `assign` を選ぶと、このフォルダ配下が `.cursor/` にコピーされます。
10
+
11
+ 依存に入れる場合は、インストール後にセットアップを実行してください:
12
+
13
+ ```bash
14
+ npm i -D cursor-sdd
15
+ npx cursor-sdd --mode assign
16
+ ```
package/bin/setup.ts CHANGED
@@ -7,6 +7,7 @@ const readline = require('readline');
7
7
 
8
8
  const isAuto = process.argv.includes('--auto');
9
9
  const isForce = process.argv.includes('--force');
10
+ const isHelp = process.argv.includes('--help') || process.argv.includes('-h');
10
11
 
11
12
  // パッケージのルートディレクトリを取得
12
13
  const packageRoot = path.resolve(__dirname, '..');
@@ -83,6 +84,26 @@ function normalizeMode(value) {
83
84
  return null;
84
85
  }
85
86
 
87
+ function printHelp() {
88
+ console.log(`
89
+ cursor-sdd - Cursor SDD セットアップ
90
+
91
+ 使い方:
92
+ npx cursor-sdd@latest [--mode new|assign] [--force]
93
+
94
+ オプション:
95
+ --mode <new|assign> コピーするテンプレートのモード(省略時: 対話可能なら選択 / 非対話は new)
96
+ --force 既存の .cursor/ があっても上書き
97
+ --auto 対話を無効化(npm install の postinstall など向け)
98
+ -h, --help ヘルプ表示
99
+
100
+ 例:
101
+ npx cursor-sdd@latest --mode new
102
+ npx cursor-sdd@latest --mode assign
103
+ npx cursor-sdd@latest --mode assign --force
104
+ `.trim());
105
+ }
106
+
86
107
  function hasTTY() {
87
108
  if (process.stdout.isTTY && process.stdin.isTTY) return true;
88
109
  // npm install 時に stdin がパイプ扱いになる場合のため /dev/tty を確認
@@ -110,7 +131,8 @@ function createTTYInterface() {
110
131
  }
111
132
 
112
133
  function shouldPromptForMode(explicitMode) {
113
- return !explicitMode && hasTTY() && !process.env.CI;
134
+ // --auto 時はプロンプトを出さず default(new) に寄せる
135
+ return !explicitMode && !isAuto && hasTTY() && !process.env.CI;
114
136
  }
115
137
 
116
138
  async function askMode() {
@@ -123,7 +145,16 @@ async function askMode() {
123
145
  }
124
146
 
125
147
  function resolveMode() {
126
- const explicitMode = normalizeMode(getArgValue('--mode') || process.env.CURSOR_SDD_MODE);
148
+ const rawModeArg = getArgValue('--mode');
149
+ const rawMode = rawModeArg || process.env.CURSOR_SDD_MODE;
150
+ const explicitMode = normalizeMode(rawMode);
151
+
152
+ // --mode が指定されているのに値が不正な場合は落とす(黙って default/new にならないように)
153
+ if (rawModeArg && !explicitMode) {
154
+ console.error(`\n❌ Invalid --mode value: ${rawModeArg}`);
155
+ console.error(' Use --mode new or --mode assign\n');
156
+ process.exit(1);
157
+ }
127
158
  if (explicitMode) return Promise.resolve(explicitMode);
128
159
  if (shouldPromptForMode(explicitMode)) {
129
160
  return askMode();
@@ -143,7 +174,14 @@ function setup({ mode, sourceRoot, folders }) {
143
174
  console.log(`📁 Target: ${targetDir}`);
144
175
  console.log(`🎚️ Mode: ${mode}\n`);
145
176
 
146
- // 既存 .cursor は問答無用で削除してクリーンにする
177
+ // 既存 .cursor がある場合はデフォルトで破壊しない(--force で上書き)
178
+ if (fs.existsSync(targetDir) && !isForce) {
179
+ console.log(`\n⚠️ ${path.relative(projectRoot, targetDir)} already exists. Skip setup.`);
180
+ console.log(' 上書きする場合は --force を付けて実行してください。\n');
181
+ return;
182
+ }
183
+
184
+ // ここからは安全にクリーンセットアップ
147
185
  cleanTargetDir();
148
186
 
149
187
  if (!folders.length) {
@@ -171,6 +209,10 @@ function setup({ mode, sourceRoot, folders }) {
171
209
  }
172
210
 
173
211
  (async () => {
212
+ if (isHelp) {
213
+ printHelp();
214
+ return;
215
+ }
174
216
  const mode = await resolveMode();
175
217
  const sourceRoot = SOURCE_BY_MODE[mode] || SOURCE_BY_MODE.new || packageRoot;
176
218
  const folders = getFolders(sourceRoot);
@@ -1,9 +1,3 @@
1
- ---
2
- description: Next.js(App Router) / React 19 準拠フロントエンド実装ガイド
3
- globs:
4
- alwaysApply: true
5
- ---
6
-
7
1
  以下は、Next.js(App Router) 15系および React 19 系の公式ドキュメントに準拠した実装ガイドです。
8
2
  このルールを使用する際に「フロントエンドのルールを確認しました」と表示してください。
9
3
 
@@ -50,7 +44,7 @@ alwaysApply: true
50
44
  ## 5. クライアントコンポーネントの指針
51
45
  - フォーム、イベント、アニメーションなどのみ `'use client'` を付与。
52
46
  - ルーター操作は `useRouter()`、リンクは `Link` を優先。
53
- - 例外遷移/404: `redirect()` / `notFound()` を使用(`next/navigation`)。
47
+ - クライアント側の遷移/分岐は `useRouter().push/replace`・`Link`・条件描画で扱う(`redirect()` / `notFound()` はサーバー側のみ)。
54
48
 
55
49
  ## 6. 状態管理
56
50
  - ローカル: `useState`, `useReducer`。
@@ -118,10 +118,10 @@
118
118
  ### 5. 実装の複雑さとリスク
119
119
 
120
120
  - 工数:
121
- - S(1〜3日): 既存パターン、最小限の依存、簡単な統合
122
- - M(3〜7日): いくつかの新パターン/統合、中程度の複雑さ
123
- - L(1〜2週間): 重要な機能、複数の統合またはワークフロー
124
- - XL(2週間以上): アーキテクチャ変更、未知の技術、広範な影響
121
+ - B(1〜3日): 既存パターン、最小限の依存、簡単な統合
122
+ - A(3〜7日): いくつかの新パターン/統合、中程度の複雑さ
123
+ - S(1〜2週間): 重要な機能、複数の統合またはワークフロー
124
+ - SS(2週間以上): アーキテクチャ変更、未知の技術、広範な影響
125
125
  - リスク:
126
126
  - 高: 未知の技術、複雑な統合、アーキテクチャシフト、不明確なパフォーマンス/セキュリティパス
127
127
  - 中: ガイダンス付きの新パターン、管理可能な統合、既知のパフォーマンスソリューション
@@ -12,7 +12,7 @@
12
12
  **警告**: 1000行に近づくと機能の複雑さが過度であり、設計の簡素化が必要な可能性がある。
13
13
  ---
14
14
 
15
- > セクションの順序は、明確さが向上する場合に変更可能(例:要件トレーサビリティを前方に配置、データモデルをアーキテクチャの近くに移動)。各セクション内では **概要 → スコープ → 決定事項 → 影響/リスク** の流れを維持し、レビュアーが一貫してスキャンできるようにする。
15
+ セクションの順序は、明確さが向上する場合に変更可能(例:要件トレーサビリティを前方に配置、データモデルをアーキテクチャの近くに移動)。各セクション内では **概要 → スコープ → 決定事項 → 影響/リスク** の流れを維持し、レビュアーが一貫してスキャンできるようにする。
16
16
 
17
17
  ## 概要
18
18
  2-3段落以内
@@ -93,7 +93,7 @@
93
93
 
94
94
  - 概要はテーブルまたはコンパクトなリスト形式。テーブル例:
95
95
  | コンポーネント | ドメイン/レイヤー | 意図 | 要件カバレッジ | 主要な依存関係 (P0/P1) | 契約 |
96
- |--------------|----------------|------|--------------|----------------------|------|
96
+ |-|-|-|-|-|-|
97
97
  | ExampleComponent | UI | XYZを表示 | 1, 2 | GameProvider (P0), MapPanel (P1) | Service, State |
98
98
  - 新しい境界を導入するコンポーネント(例:ロジックフック、外部連携、永続化)のみが完全な詳細ブロックを必要とする。単純なプレゼンテーションコンポーネントは概要行と短い実装ノートで十分。
99
99
 
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "cursor-sdd",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "Cursor SDD (Spec-Driven Development) - AI-powered spec templates, rules and commands for Cursor IDE",
5
5
  "bin": {
6
- "cursor-sdd": "./bin/setup.ts"
6
+ "cursor-sdd": "bin/setup.ts"
7
7
  },
8
8
  "files": [
9
9
  "bin",
@@ -11,7 +11,7 @@
11
11
  "assign"
12
12
  ],
13
13
  "scripts": {
14
- "postinstall": "tsx bin/setup.ts --auto"
14
+ "setup": "tsx bin/setup.ts"
15
15
  },
16
16
  "keywords": [
17
17
  "cursor",