@unlaxer/dge-toolkit 2.0.1 → 2.1.1
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/INTERNALS.md +135 -48
- package/bin/dge-tool.js +122 -0
- package/package.json +4 -2
- package/skills/dge-session.md +19 -1
- package/version.txt +1 -1
package/INTERNALS.md
CHANGED
|
@@ -4,35 +4,92 @@ DGE toolkit の内部構造。カスタマイズする際の参考に。
|
|
|
4
4
|
|
|
5
5
|
## フロー図
|
|
6
6
|
|
|
7
|
+
### 全体フロー(flow 自動判定 → 分岐)
|
|
8
|
+
|
|
7
9
|
```mermaid
|
|
8
10
|
flowchart TD
|
|
9
|
-
Start([DGE して]) -->
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
Start(["DGE して"]) --> S0{"Step 0: flow 判定"}
|
|
12
|
+
|
|
13
|
+
S0 -->|"DGE して / 壁打ち"| Quick["⚡ quick"]
|
|
14
|
+
S0 -->|"詳しく / Spec / 設計レビュー"| Full["🔍 design-review"]
|
|
15
|
+
S0 -->|"ブレスト / アイデア"| Brain["💡 brainstorm"]
|
|
16
|
+
|
|
17
|
+
subgraph Quick Flow
|
|
18
|
+
Q1["Kit 読み込み + dge-tool 検出"] --> Q2["テーマ確認"]
|
|
19
|
+
Q2 --> Q4["キャラ表示(確認なし)"]
|
|
20
|
+
Q4 --> Q5["会話劇生成"]
|
|
21
|
+
Q5 --> Q7["保存(MUST)"]
|
|
22
|
+
Q7 --> Q8["Gap 一覧 + 選択肢(MUST)"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
subgraph Design Review Flow
|
|
26
|
+
D1["Kit 読み込み + dge-tool 検出"] --> D2["テーマ確認"]
|
|
27
|
+
D2 --> D3["テンプレート選択"]
|
|
28
|
+
D3 --> D35["パターン選択"]
|
|
29
|
+
D35 --> D4["キャラ確認 ⏸"]
|
|
30
|
+
D4 --> D5["会話劇生成"]
|
|
31
|
+
D5 --> D6["Gap 構造化"]
|
|
32
|
+
D6 --> D7["保存(MUST)"]
|
|
33
|
+
D7 --> D8["Gap 一覧 + 選択肢(MUST)"]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
subgraph Brainstorm Flow
|
|
37
|
+
B1["Kit 読み込み + dge-tool 検出"] --> B2["テーマ確認"]
|
|
38
|
+
B2 --> B4["キャラ確認 ⏸"]
|
|
39
|
+
B4 --> B5["会話劇生成(Yes-and)"]
|
|
40
|
+
B5 --> B7["保存(MUST)"]
|
|
41
|
+
B7 --> B8["アイデア一覧 + 選択肢(MUST)"]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Quick --> Q1
|
|
45
|
+
Full --> D1
|
|
46
|
+
Brain --> B1
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 選択肢後の分岐
|
|
50
|
+
|
|
51
|
+
```mermaid
|
|
52
|
+
flowchart TD
|
|
53
|
+
S8["サマリー + 選択肢 ⏸"] --> C1{"ユーザー選択"}
|
|
54
|
+
|
|
55
|
+
C1 -->|"1. DGE を回す"| S9B["前回コンテキスト\n+ TreeView"]
|
|
56
|
+
C1 -->|"2. 自動反復"| S9A["自動反復モード\n(最大 5 回)"]
|
|
57
|
+
C1 -->|"3. 実装する"| S10["累積 Spec 化"]
|
|
58
|
+
C1 -->|"4. 素の LLM マージ"| S9C["subagent\n素レビュー → マージ"]
|
|
59
|
+
C1 -->|"5. 後で"| End([終了])
|
|
60
|
+
|
|
61
|
+
S9B -->|テーマ選択| S2([Step 2 へ])
|
|
62
|
+
S9A -->|未収束| S5([Step 5 へ])
|
|
26
63
|
S9A -->|収束| S10
|
|
64
|
+
S9C --> Merge["マージ結果表示 ⏸"]
|
|
65
|
+
Merge -->|実装する| S10
|
|
66
|
+
Merge -->|後で| End
|
|
27
67
|
|
|
28
68
|
S10 --> Review{"Spec レビュー ⏸"}
|
|
29
|
-
Review -->|
|
|
30
|
-
Review
|
|
31
|
-
Review
|
|
69
|
+
Review -->|OK| Impl([実装開始])
|
|
70
|
+
Review -->|修正| S10
|
|
71
|
+
Review -->|後で| End
|
|
32
72
|
```
|
|
33
73
|
|
|
34
74
|
⏸ = ユーザーの応答を待つポイント
|
|
35
75
|
|
|
76
|
+
## dge-tool モード
|
|
77
|
+
|
|
78
|
+
```mermaid
|
|
79
|
+
flowchart LR
|
|
80
|
+
S1["Step 1:\ndge-tool version"] -->|成功| TM["🔧 Tool mode"]
|
|
81
|
+
S1 -->|失敗| SM["📝 Skill mode"]
|
|
82
|
+
|
|
83
|
+
TM --> S7T["Step 7: dge-tool save"]
|
|
84
|
+
TM --> S8T["Step 8: dge-tool prompt"]
|
|
85
|
+
|
|
86
|
+
SM --> S7S["Step 7: Write ツール"]
|
|
87
|
+
SM --> S8S["Step 8: 内蔵選択肢"]
|
|
88
|
+
|
|
89
|
+
S7T -->|失敗| S7S
|
|
90
|
+
S8T -->|失敗| S8S
|
|
91
|
+
```
|
|
92
|
+
|
|
36
93
|
## データフロー図
|
|
37
94
|
|
|
38
95
|
```mermaid
|
|
@@ -44,33 +101,47 @@ flowchart LR
|
|
|
44
101
|
P[patterns.md]
|
|
45
102
|
F[flows/*.yaml]
|
|
46
103
|
PJ[projects/*.md]
|
|
104
|
+
DT[dge-tool 検出]
|
|
47
105
|
end
|
|
48
106
|
|
|
49
107
|
subgraph Engine["DGE エンジン"]
|
|
50
|
-
|
|
51
|
-
|
|
108
|
+
S0["Step 0: flow 判定"]
|
|
109
|
+
S5["Step 5: 会話劇生成\n(flow.extract.marker)"]
|
|
52
110
|
S10["Step 10: Spec 生成\n(flow.generate.types)"]
|
|
111
|
+
S9C["Step 9C: subagent\n素 LLM マージ"]
|
|
53
112
|
end
|
|
54
113
|
|
|
55
114
|
subgraph Output["出力"]
|
|
56
115
|
SE[sessions/*.md]
|
|
57
116
|
SP[specs/*.md]
|
|
117
|
+
MR[sessions/*-merged.md]
|
|
58
118
|
PR[projects/*.md 更新]
|
|
59
119
|
end
|
|
60
120
|
|
|
61
|
-
M & C & CC & P
|
|
121
|
+
M & C & CC & P --> S5
|
|
122
|
+
F --> S0
|
|
123
|
+
S0 --> S5
|
|
62
124
|
PJ --> S5
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
125
|
+
DT --> S5
|
|
126
|
+
S5 --> SE
|
|
127
|
+
S5 --> S10
|
|
128
|
+
S5 --> S9C
|
|
66
129
|
S10 --> SP
|
|
67
|
-
|
|
130
|
+
S9C --> MR
|
|
131
|
+
SE & SP & MR --> PR
|
|
68
132
|
```
|
|
69
133
|
|
|
70
134
|
## ステート図
|
|
71
135
|
|
|
72
136
|
```mermaid
|
|
73
137
|
stateDiagram-v2
|
|
138
|
+
state "Flow ライフサイクル" as FL {
|
|
139
|
+
[*] --> quick: デフォルト
|
|
140
|
+
quick --> design_review: "詳しくやる"
|
|
141
|
+
quick --> brainstorm: "ブレストして"
|
|
142
|
+
design_review --> quick: "シンプルに戻す"
|
|
143
|
+
}
|
|
144
|
+
|
|
74
145
|
state "プロジェクト" as Project {
|
|
75
146
|
[*] --> not_started
|
|
76
147
|
not_started --> explored: DGE session 実行
|
|
@@ -94,34 +165,50 @@ stateDiagram-v2
|
|
|
94
165
|
}
|
|
95
166
|
```
|
|
96
167
|
|
|
168
|
+
## 3 つの flow の比較
|
|
169
|
+
|
|
170
|
+
| | ⚡ quick | 🔍 design-review | 💡 brainstorm |
|
|
171
|
+
|---|---------|------------------|---------------|
|
|
172
|
+
| Steps | 5 | 10 | 6 |
|
|
173
|
+
| 共通 MUST | 3 | 3 | 3 |
|
|
174
|
+
| 固有 MUST | 0 | 4 | 1 |
|
|
175
|
+
| テンプレート | スキップ | 選択 | スキップ |
|
|
176
|
+
| パターン | 自動 | 選択 | 自動 |
|
|
177
|
+
| キャラ確認 | 表示のみ | 確認待ち | 確認待ち |
|
|
178
|
+
| 抽出 | Gap | Gap | アイデア |
|
|
179
|
+
| Spec 化 | なし | あり | なし |
|
|
180
|
+
| 話法 | 標準 | 標準 | Yes-and |
|
|
181
|
+
|
|
97
182
|
## Hook ポイント一覧
|
|
98
183
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
|
102
|
-
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
| 3 |
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
| 10 | Spec 生成 |
|
|
184
|
+
| Step | 名前 | Hook | Level | dge-tool |
|
|
185
|
+
|------|------|------|-------|----------|
|
|
186
|
+
| 0 | flow 判定 | trigger_keywords | 1(YAML) | — |
|
|
187
|
+
| 1 | Kit 読み込み | 読み込むファイル一覧 | 2 | version 検出 |
|
|
188
|
+
| 2 | テーマ確認 | 掘り下げロジック | 2 | — |
|
|
189
|
+
| 3 | テンプレート選択 | テンプレート追加 | 1(templates/) | — |
|
|
190
|
+
| 3.5 | パターン選択 | プリセット追加 | 1(patterns.md) | — |
|
|
191
|
+
| 4 | キャラ選択 | キャラ追加・推奨 | 1(custom/)/ 2 | — |
|
|
192
|
+
| 5 | 会話劇生成 | ナレーション・Scene | 2 | — |
|
|
193
|
+
| 6 | 抽出 | マーカー・カテゴリ | 1(YAML extract) | — |
|
|
194
|
+
| 7 | 保存 | 保存先・ファイル名 | 1(YAML output_dir) | **save** |
|
|
195
|
+
| 8 | 選択肢 | 選択肢構成 | 1(YAML post_actions) | **prompt** |
|
|
196
|
+
| 9A | 自動反復 | 収束判定・上限 | 2 | — |
|
|
197
|
+
| 9B | コンテキスト | TreeView・テーマ | 2 | — |
|
|
198
|
+
| 9C | LLM マージ | subagent 実行 | 2 | — |
|
|
199
|
+
| 10 | Spec 生成 | 成果物タイプ | 1(YAML generate) | — |
|
|
115
200
|
|
|
116
201
|
## ファイルマップ
|
|
117
202
|
|
|
118
203
|
| ファイル | 役割 | 誰が読む | 誰が書く |
|
|
119
204
|
|---------|------|---------|---------|
|
|
120
|
-
| method.md | メソッド本体 | Step 1 |
|
|
121
|
-
| characters/catalog.md | built-in キャラ | Step 1, 4 |
|
|
122
|
-
| custom/characters/*.md | カスタムキャラ | Step 1, 4 | dge-character-create
|
|
123
|
-
| patterns.md | 20 パターン +
|
|
124
|
-
|
|
|
205
|
+
| method.md | メソッド本体 | Step 1 | toolkit 提供 |
|
|
206
|
+
| characters/catalog.md | built-in 19 キャラ | Step 1, 4 | toolkit 提供 |
|
|
207
|
+
| custom/characters/*.md | カスタムキャラ | Step 1, 4 | dge-character-create |
|
|
208
|
+
| patterns.md | 20 パターン + 9 プリセット | Step 1, 3.5 | toolkit 提供 |
|
|
209
|
+
| dialogue-techniques.md | 8 会話技法 | Step 5 | toolkit 提供 |
|
|
210
|
+
| flows/*.yaml | フロー定義 | Step 0, 6, 7, 8, 10 | toolkit 提供 or ユーザー |
|
|
125
211
|
| sessions/*.md | DGE session 出力 | Step 9B, 10 | Step 7(自動) |
|
|
126
212
|
| specs/*.md | Spec ファイル | 実装時 | Step 10(自動) |
|
|
127
213
|
| projects/*.md | プロジェクト管理 | Step 9B | Step 7(自動更新) |
|
|
214
|
+
| bin/dge-tool.js | MUST 強制 CLI | Step 1, 7, 8 | toolkit 提供 |
|
package/bin/dge-tool.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const VERSION = '1.0.0';
|
|
7
|
+
const command = process.argv[2];
|
|
8
|
+
const arg = process.argv[3];
|
|
9
|
+
|
|
10
|
+
function findFlowsDir() {
|
|
11
|
+
// Look for dge/flows/ from current directory
|
|
12
|
+
const candidates = ['dge/flows', 'flows'];
|
|
13
|
+
for (const dir of candidates) {
|
|
14
|
+
if (fs.existsSync(dir)) return dir;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function cmdSave() {
|
|
20
|
+
const file = arg;
|
|
21
|
+
if (!file) {
|
|
22
|
+
console.error('ERROR: file path required. Usage: echo "content" | dge-tool save <file>');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const dir = path.dirname(file);
|
|
27
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
28
|
+
|
|
29
|
+
let content = '';
|
|
30
|
+
process.stdin.setEncoding('utf8');
|
|
31
|
+
process.stdin.on('data', chunk => { content += chunk; });
|
|
32
|
+
process.stdin.on('end', () => {
|
|
33
|
+
fs.writeFileSync(file, content);
|
|
34
|
+
const bytes = Buffer.byteLength(content);
|
|
35
|
+
console.log(`SAVED: ${file} (${bytes} bytes)`);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function cmdPrompt() {
|
|
40
|
+
const flow = arg || 'quick';
|
|
41
|
+
const flowsDir = findFlowsDir();
|
|
42
|
+
const yamlFile = flowsDir ? path.join(flowsDir, `${flow}.yaml`) : null;
|
|
43
|
+
|
|
44
|
+
if (yamlFile && fs.existsSync(yamlFile)) {
|
|
45
|
+
const content = fs.readFileSync(yamlFile, 'utf8');
|
|
46
|
+
const lines = content.split('\n');
|
|
47
|
+
|
|
48
|
+
// Extract display_name from post_actions section
|
|
49
|
+
let inPostActions = false;
|
|
50
|
+
const actions = [];
|
|
51
|
+
for (const line of lines) {
|
|
52
|
+
if (line.match(/^post_actions:/)) {
|
|
53
|
+
inPostActions = true;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (inPostActions && line.match(/^\S/) && !line.match(/^\s/)) {
|
|
57
|
+
break; // End of post_actions section
|
|
58
|
+
}
|
|
59
|
+
if (inPostActions) {
|
|
60
|
+
const match = line.match(/display_name:\s*"(.+?)"/);
|
|
61
|
+
if (match) actions.push(match[1]);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (actions.length > 0) {
|
|
66
|
+
actions.forEach((a, i) => {
|
|
67
|
+
console.log(` ${i + 1}. ${a}`);
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Default choices
|
|
74
|
+
console.log(' 1. DGE を回す');
|
|
75
|
+
console.log(' 2. 実装できるまで回す');
|
|
76
|
+
console.log(' 3. 実装する');
|
|
77
|
+
console.log(' 4. 素の LLM でも回してマージ');
|
|
78
|
+
console.log(' 5. 後で');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function cmdVersion() {
|
|
82
|
+
console.log(`dge-tool v${VERSION}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function cmdHelp() {
|
|
86
|
+
console.log(`dge-tool v${VERSION} — DGE MUST enforcement CLI
|
|
87
|
+
|
|
88
|
+
Commands:
|
|
89
|
+
save <file> Save stdin to file (ensures MUST: always save)
|
|
90
|
+
prompt [flow] Show numbered choices from flow YAML (ensures MUST: show choices)
|
|
91
|
+
version Show version
|
|
92
|
+
help Show this help
|
|
93
|
+
|
|
94
|
+
Examples:
|
|
95
|
+
echo "session content" | dge-tool save dge/sessions/auth-api.md
|
|
96
|
+
dge-tool prompt quick
|
|
97
|
+
dge-tool prompt design-review`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Dispatch
|
|
101
|
+
switch (command) {
|
|
102
|
+
case 'save':
|
|
103
|
+
cmdSave();
|
|
104
|
+
break;
|
|
105
|
+
case 'prompt':
|
|
106
|
+
cmdPrompt();
|
|
107
|
+
break;
|
|
108
|
+
case 'version':
|
|
109
|
+
case '-v':
|
|
110
|
+
case '--version':
|
|
111
|
+
cmdVersion();
|
|
112
|
+
break;
|
|
113
|
+
case 'help':
|
|
114
|
+
case '-h':
|
|
115
|
+
case '--help':
|
|
116
|
+
case undefined:
|
|
117
|
+
cmdHelp();
|
|
118
|
+
break;
|
|
119
|
+
default:
|
|
120
|
+
console.error(`ERROR: unknown command "${command}". Run "dge-tool help" for usage.`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unlaxer/dge-toolkit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "DGE (Dialogue-driven Gap Extraction) — 会話劇で設計の穴を発見するメソッドkit",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
],
|
|
19
19
|
"bin": {
|
|
20
20
|
"dge-install": "./install.sh",
|
|
21
|
-
"dge-update": "./update.sh"
|
|
21
|
+
"dge-update": "./update.sh",
|
|
22
|
+
"dge-tool": "./bin/dge-tool.js"
|
|
22
23
|
},
|
|
23
24
|
"files": [
|
|
24
25
|
"LICENSE",
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
"INTERNALS.md",
|
|
35
36
|
"CUSTOMIZING.md",
|
|
36
37
|
"dialogue-techniques.md",
|
|
38
|
+
"bin/",
|
|
37
39
|
"install.sh",
|
|
38
40
|
"update.sh"
|
|
39
41
|
],
|
package/skills/dge-session.md
CHANGED
|
@@ -36,6 +36,9 @@
|
|
|
36
36
|
3. `dge/custom/characters/*.md` があれば Prompt Core を読む
|
|
37
37
|
4. `dge/patterns.md` を読む
|
|
38
38
|
5. `dge/version.txt` があれば 1 行表示
|
|
39
|
+
6. **dge-tool 検出**: Bash で `dge-tool version` を実行。
|
|
40
|
+
- 成功 → `🔧 Tool mode (dge-tool vX.X.X)` と表示。以降 Step 7, 8 で dge-tool を使用
|
|
41
|
+
- 失敗 → Skill mode(従来通り)。dge-tool なしでも全機能動作
|
|
39
42
|
|
|
40
43
|
### Step 2: テーマ確認(全 flow 共通)
|
|
41
44
|
明確なら次へ。不明確なら掘り下げる。
|
|
@@ -62,6 +65,15 @@ built-in + カスタムキャラを統合表示。
|
|
|
62
65
|
- brainstorm: アイデアに分類を付与(severity なし)
|
|
63
66
|
|
|
64
67
|
### Step 7: 保存(全 flow 共通、MUST)
|
|
68
|
+
|
|
69
|
+
**Tool mode**: Bash で実行:
|
|
70
|
+
```
|
|
71
|
+
echo "<session 全文>" | dge-tool save <output_dir>/<theme>.md
|
|
72
|
+
```
|
|
73
|
+
→ "SAVED: ..." が返れば成功。失敗したら Write ツールでフォールバック。
|
|
74
|
+
|
|
75
|
+
**Skill mode**: Write ツールでファイル保存。
|
|
76
|
+
|
|
65
77
|
flow の output_dir に保存(デフォルト: `dge/sessions/`)。
|
|
66
78
|
プロジェクトファイルがあれば更新。
|
|
67
79
|
|
|
@@ -81,7 +93,13 @@ flow の output_dir に保存(デフォルト: `dge/sessions/`)。
|
|
|
81
93
|
**全文**: `[ファイルパス]`
|
|
82
94
|
```
|
|
83
95
|
|
|
84
|
-
|
|
96
|
+
**Tool mode**: Bash で実行:
|
|
97
|
+
```
|
|
98
|
+
dge-tool prompt <flow>
|
|
99
|
+
```
|
|
100
|
+
→ 番号付き選択肢が返る。そのまま表示。失敗したらデフォルト選択肢でフォールバック。
|
|
101
|
+
|
|
102
|
+
**Skill mode**: 選択肢は flow YAML の post_actions から表示。YAML がない場合のデフォルト:
|
|
85
103
|
```
|
|
86
104
|
1. DGE を回す
|
|
87
105
|
2. 実装できるまで回す
|
package/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.1.1
|