@unlaxer/dde-toolkit 0.1.3 → 0.1.5

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/flows/quick.yaml CHANGED
@@ -5,10 +5,17 @@ trigger_keywords: ["DDE して", "DDE", "ドキュメントレビュー", "用
5
5
 
6
6
  defaults:
7
7
  exclude_dirs: ["dde", "dge", "node_modules", ".git", ".claude"]
8
- article_intent: educational # educational / reference / deep-dive
8
+ article_intent: match_existing # match_existing / educational / reference / deep-dive
9
+ # match_existing: 既存 glossary 記事が 1 件以上あればそのスタイルを踏襲。なければ educational にフォールバック
9
10
 
10
11
  workflow:
11
12
  steps:
13
+ - id: resume_check
14
+ display_name: "前回セッションの確認"
15
+ note: "dde/sessions/ の最新ファイルを読んで未完了の作業を検出。新規なら skip"
16
+ - id: scan_glossary
17
+ display_name: "既存 glossary をスキャン"
18
+ note: "docs/glossary/ の既存記事一覧を収集。相互リンク候補 + 抽出除外リストに使う"
12
19
  - id: select_docs
13
20
  display_name: "対象ドキュメント群を選択"
14
21
  mode: confirm
@@ -23,7 +30,7 @@ workflow:
23
30
  - id: article_intent
24
31
  display_name: "記事のインテント設定"
25
32
  mode: confirm
26
- note: "educational / reference / deep-dive、または自由記述"
33
+ note: "match_existing(推奨)/ educational / reference / deep-dive、または自由記述"
27
34
  - id: extract
28
35
  display_name: "用語抽出(LLM)— 全レベル対象"
29
36
  actor: llm
@@ -46,6 +53,10 @@ must_rules:
46
53
  text: "抽出した用語を一覧テーブルで出力してからユーザーに確認"
47
54
  - id: choices
48
55
  text: "記事生成後に番号付き選択肢を提示(省略しない)"
56
+ - id: crosslink_existing_only
57
+ text: "「さらに学ぶために」は docs/glossary/ に実在するファイル + 同一バッチ生成記事のみリンク可。存在しないファイルへのリンク禁止"
58
+ - id: scan_glossary_first
59
+ text: "セッション開始時に docs/glossary/ をスキャンして既存記事リストを作る(抽出除外 + 相互リンク候補に使用)"
49
60
 
50
61
  extract:
51
62
  actor: llm
@@ -64,6 +75,7 @@ articleize:
64
75
  ja: "<slug>.ja.md"
65
76
  both: "両ファイル生成。dictionary.yaml に en/ja キーで用語マッピングを追加"
66
77
  intents:
78
+ match_existing: "既存 glossary 記事を 1〜3 件サンプリングしてスタイル(構成・文体・分量・例え話の有無)を推定し、新規記事に踏襲。既存記事がなければ educational にフォールバック"
67
79
  educational: "読んだ人が背景・動機・仕組みごと理解できる記事。例え話・図・なぜ?を含む。分量は目的に従って自然に決める"
68
80
  reference: "定義・使い方・例を簡潔に。調べたい人向けのクイックリファレンス"
69
81
  deep-dive: "実装詳細・コード例・エッジケース・トレードオフまで網羅"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unlaxer/dde-toolkit",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Document Deficit Extraction — find what's not understood in your docs",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -47,9 +47,44 @@ DDE toolkit v0.1.3 — Document Deficit Extraction
47
47
 
48
48
  ## 手順
49
49
 
50
- ### Step 0: flow 読み込み
50
+ ### Step 0: 前回セッション確認 + 既存 glossary スキャン
51
+
52
+ **0-A: flow 読み込み**
51
53
  `dde/flows/` の YAML、なければ `kit/flows/` の YAML を読む。
52
54
 
55
+ **0-B: 前回セッション確認**
56
+ `dde/sessions/` の最新ファイルを読む。未完了の作業(未生成の用語リスト等)があれば:
57
+
58
+ ```
59
+ 前回セッションが見つかりました(dde/sessions/2024-01-15_session.md)。
60
+ 未生成の用語: OAuth 2.0, リフレッシュトークン
61
+
62
+ 前回の続きから再開しますか?
63
+ 1. はい(前回の続きから)
64
+ 2. いいえ(最初から)
65
+ ```
66
+
67
+ 新規セッションの場合は skip。
68
+
69
+ **0-C: 既存 glossary スキャン(MUST)**
70
+ `docs/glossary/` の `.md` ファイル一覧を収集する。これを 2 つの目的に使う:
71
+
72
+ 1. **抽出除外リスト** — 既存記事がある用語は抽出対象から除外(Step 6)
73
+ 2. **相互リンク候補リスト** — 「さらに学ぶために」で使えるリンク一覧(Step 7)
74
+
75
+ ```
76
+ 既存 glossary: 12 記事
77
+ jwt.md, oauth2.md, session-management.md, ...
78
+ → これらの用語は抽出対象から除外
79
+ → 「さらに学ぶために」のリンク候補として使用
80
+ ```
81
+
82
+ ファイルが存在しない場合は空リストで OK(新規プロジェクト)。
83
+
84
+ **CRITICAL RULE — 相互リンク**:
85
+ 「さらに学ぶために」に書くリンクは、**記事生成時点で `docs/glossary/` に実在するファイルのみ**。
86
+ 存在しないファイルへのリンクは絶対に書かない。同一バッチで新規生成する記事同士は相互リンク可。
87
+
53
88
  ### Step 1: 対象ドキュメント群の選択(MUST: ユーザーに確認)
54
89
 
55
90
  プロジェクト内の `.md` ファイルを列挙する。
@@ -107,6 +142,25 @@ DDE toolkit v0.1.3 — Document Deficit Extraction
107
142
 
108
143
  **文字数ではなく「読んだ人にどうなってほしいか」で指定する。**
109
144
 
145
+ Step 0-C で既存 glossary 記事が見つかった場合は、まずそのスタイルを分析して選択肢に追加する。
146
+
147
+ **既存記事がある場合の表示例:**
148
+ ```
149
+ 既存 glossary のスタイルを分析しました:
150
+ → educational narrative(例え話・ASCIIダイアグラム・相互リンクあり)
151
+
152
+ 記事のインテントを選んでください:
153
+ 1. 既存に合わせる(推奨)— 既存記事のスタイル・分量・構成を踏襲
154
+ 2. educational — 背景・動機・仕組みごと理解できる記事
155
+ 例え話・図・なぜ?を含む。分量は目的に従って自然に決まる
156
+ 3. reference — 定義と使い方を簡潔に。調べたい人向け
157
+ 4. deep-dive — 実装詳細・コード例・エッジケースまで網羅
158
+ 5. 自由記述 — 例: 「新入社員が読んで業務背景ごと理解できるように」
159
+
160
+ デフォルト: 1(既存に合わせる)
161
+ ```
162
+
163
+ **既存記事がない場合の表示例:**
110
164
  ```
111
165
  記事のインテントを選んでください:
112
166
  1. educational — 背景・動機・仕組みごと理解できる記事
@@ -118,6 +172,13 @@ DDE toolkit v0.1.3 — Document Deficit Extraction
118
172
  デフォルト: educational
119
173
  ```
120
174
 
175
+ **「既存に合わせる」を選んだ場合:**
176
+ 既存記事を 1〜3 件サンプリングして以下を推定し、新規記事に適用する:
177
+ - セクション構成(見出しの種類・順序)
178
+ - 文体(ですます / だ・である、日本語 / 英語混在度)
179
+ - 分量感(短め / 中程度 / 詳細)
180
+ - 例え話・図の有無
181
+
121
182
  ### Step 6: 用語抽出(LLM)
122
183
 
123
184
  **レベルで絞らず、誰かが分からない可能性がある用語を全て抽出する。**
@@ -125,7 +186,7 @@ DDE toolkit v0.1.3 — Document Deficit Extraction
125
186
  対象ドキュメント群を読んで用語を一括抽出する。
126
187
 
127
188
  **抽出ルール:**
128
- - `docs/glossary/` に既存記事があるものは除外
189
+ - `docs/glossary/` に既存記事があるものは除外(Step 0-C で収集したリストを使う)
129
190
  - 固有名詞(プロダクト名・企業名)は除外
130
191
  - コードブロック内の識別子は除外
131
192
  - 重要度: その用語なしでは内容が理解できない → 🔴 High / 補足があると助かる → 🟡 Medium
@@ -187,6 +248,12 @@ N 件抽出しました。記事を生成しますか?
187
248
  - [関連用語B](<相対パス>) — この文脈でなぜ関連するか1行で
188
249
  ```
189
250
 
251
+ **「さらに学ぶために」のリンクルール(CRITICAL):**
252
+ - Step 0-C で収集した既存 glossary ファイル一覧のみを使う
253
+ - 同一バッチで今回新たに生成する記事同士も相互リンク可(生成後に存在するため)
254
+ - 存在しないファイルへのリンクは絶対に書かない(dead link 防止)
255
+ - 候補がない場合はセクションを省略するか「(現在リンク先なし)」と明記する
256
+
190
257
  **reference intent の場合:**
191
258
  ```markdown
192
259
  # <用語>
package/version.txt CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.5