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 +24 -12
- package/assign/README.md +8 -1
- package/bin/setup.ts +45 -3
- package/new/rules/frontend.md +1 -7
- package/new/rules/gap-analysis.md +4 -4
- package/new/templates/specs/design.md +2 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -5,23 +5,42 @@ Cursor IDE 向けの Spec-Driven Development (SDD) テンプレート、ルー
|
|
|
5
5
|
## インストール
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
# 推奨(都度実行・インストール不要)
|
|
9
|
+
npx cursor-sdd@latest
|
|
10
|
+
|
|
11
|
+
# 依存に入れたい場合(必要な時に自分で実行する)
|
|
12
|
+
npm i -D cursor-sdd
|
|
9
13
|
```
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
実行時にプロジェクトの `.cursor/` フォルダにファイルがコピーされます。対話可能な環境では「新規のPJを立ち上げる / 既存PJにアサインする」を選択できます。
|
|
12
16
|
|
|
13
17
|
### モード指定
|
|
14
18
|
|
|
15
|
-
-
|
|
16
|
-
|
|
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
|
-
`
|
|
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
|
-
|
|
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
|
|
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);
|
package/new/rules/frontend.md
CHANGED
|
@@ -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
|
-
-
|
|
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
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
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.
|
|
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": "
|
|
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
|
-
"
|
|
14
|
+
"setup": "tsx bin/setup.ts"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [
|
|
17
17
|
"cursor",
|