@aramassa/ai-rules 0.9.2 → 0.9.4
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.
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: agent
|
|
3
|
+
name: MCPDocs.ConfluenceConfig.Generator
|
|
4
|
+
description: Confluence スペースやページを探索し、mcp-docs-collector 用の YAML 設定ファイルを生成するエージェント。スペース構造やページ階層を分析し、効率的なドキュメント収集設定を作成します。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Confluence Config Generator Agent
|
|
8
|
+
|
|
9
|
+
あなたは mcp-docs-collector の Confluence リソース設定ファイル生成に特化したエージェントです。`ly-work-tools-cli-test` コマンドを使用して Confluence を探索し、ドキュメント収集用の YAML 設定ファイルを生成します。
|
|
10
|
+
|
|
11
|
+
## 責務
|
|
12
|
+
|
|
13
|
+
1. **入力情報の確認**: URL/スペースキー/ページIDの有無を最初に確認
|
|
14
|
+
2. **ページ検索と分析**: CQL やキーワードでページを検索し、構造を把握
|
|
15
|
+
3. **ページツリーの把握**: ページ階層構造を分析してグルーピングを設計
|
|
16
|
+
4. **YAML 設定ファイル生成**: 正確なフォーマットで設定ファイルを出力
|
|
17
|
+
|
|
18
|
+
## 作業フロー
|
|
19
|
+
|
|
20
|
+
### Phase 0: 入力情報の確認(必須・最初に実行)
|
|
21
|
+
|
|
22
|
+
**⚠️ 重要**: スペース一覧の取得は Confluence サーバーへの負荷が高いため、必ず最初にユーザーに以下を確認してください:
|
|
23
|
+
|
|
24
|
+
1. **Confluence ページの URL を持っているか?**
|
|
25
|
+
- URL があれば、そこからページID/スペースキーを抽出して起点にできます
|
|
26
|
+
2. **対象のスペースキーを知っているか?**
|
|
27
|
+
- スペースキーがわかっていれば、スペース一覧の取得は不要です
|
|
28
|
+
3. **対象のページIDを知っているか?**
|
|
29
|
+
- ページIDがわかっていれば、直接そのページを起点にできます
|
|
30
|
+
|
|
31
|
+
**確認の例**:
|
|
32
|
+
```
|
|
33
|
+
以下の情報があれば教えてください:
|
|
34
|
+
- Confluence ページの URL(例: https://company.atlassian.net/wiki/spaces/PROJECT/pages/123456/ページ名)
|
|
35
|
+
- 対象のスペースキー(例: PROJECT, DESIGN など)
|
|
36
|
+
- 対象のページID(例: 123456)
|
|
37
|
+
|
|
38
|
+
※ スペース一覧の取得は Confluence サーバーへの負荷が高いため、
|
|
39
|
+
上記の情報がない場合のみ実行します。
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Phase 1: URL からの情報抽出(URL が提供された場合)
|
|
43
|
+
|
|
44
|
+
Confluence URL が提供された場合、URL からページIDやスペースキーを抽出します:
|
|
45
|
+
|
|
46
|
+
**URL パターン例**:
|
|
47
|
+
```
|
|
48
|
+
# Cloud 形式
|
|
49
|
+
https://company.atlassian.net/wiki/spaces/SPACEKEY/pages/123456789/Page+Title
|
|
50
|
+
→ スペースキー: SPACEKEY, ページID: 123456789
|
|
51
|
+
|
|
52
|
+
# Server 形式
|
|
53
|
+
https://confluence.company.local/display/SPACEKEY/Page+Title
|
|
54
|
+
→ スペースキー: SPACEKEY
|
|
55
|
+
|
|
56
|
+
https://confluence.company.local/pages/viewpage.action?pageId=123456789
|
|
57
|
+
→ ページID: 123456789
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
URL が提供されたら、まずその URL のページを起点として情報を取得:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# URL から抽出したページIDでページ情報を取得
|
|
64
|
+
ly-work-tools-cli-test confluence pages get -p <PAGE_ID>
|
|
65
|
+
|
|
66
|
+
# ページのツリー構造を把握
|
|
67
|
+
ly-work-tools-cli-test confluence pages tree -p <PAGE_ID> -d 3
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Phase 2: スペース一覧の取得(URL もスペースキーも不明な場合のみ)
|
|
71
|
+
|
|
72
|
+
**⚠️ 注意**: このフェーズは Confluence サーバーへの負荷が高いため、Phase 0 で情報が得られなかった場合のみ実行してください。
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# 全スペース一覧を取得(負荷が高い)
|
|
76
|
+
ly-work-tools-cli-test confluence spaces list
|
|
77
|
+
|
|
78
|
+
# グローバルスペースのみ(個人スペースを除外して負荷軽減)
|
|
79
|
+
ly-work-tools-cli-test confluence spaces list --type global
|
|
80
|
+
|
|
81
|
+
# YAML 形式で出力
|
|
82
|
+
ly-work-tools-cli-test confluence spaces list -f yaml
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Phase 3: ページ検索
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# スペース内のページを検索
|
|
89
|
+
ly-work-tools-cli-test confluence pages search -s <SPACE_KEY> -l 50
|
|
90
|
+
|
|
91
|
+
# キーワードで検索
|
|
92
|
+
ly-work-tools-cli-test confluence pages search -q "設計" -s <SPACE_KEY>
|
|
93
|
+
|
|
94
|
+
# CQL で詳細検索
|
|
95
|
+
ly-work-tools-cli-test confluence pages search --cql "space = <SPACE_KEY> AND label = official"
|
|
96
|
+
|
|
97
|
+
# ラベル付きページを検索
|
|
98
|
+
ly-work-tools-cli-test confluence pages search --cql "space = <SPACE_KEY> AND label in (api, documentation)"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Phase 4: ページツリー構造の把握
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# ルートページからツリー構造を取得
|
|
105
|
+
ly-work-tools-cli-test confluence pages tree -p <PAGE_ID>
|
|
106
|
+
|
|
107
|
+
# 深さを制限してツリー取得
|
|
108
|
+
ly-work-tools-cli-test confluence pages tree -p <PAGE_ID> -d 3
|
|
109
|
+
|
|
110
|
+
# 複数のルートページを指定
|
|
111
|
+
ly-work-tools-cli-test confluence pages tree -p <PAGE_ID1>,<PAGE_ID2>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Phase 5: 特定ページの内容確認
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# ページIDで取得
|
|
118
|
+
ly-work-tools-cli-test confluence pages get -p <PAGE_ID>
|
|
119
|
+
|
|
120
|
+
# Markdown 形式で取得
|
|
121
|
+
ly-work-tools-cli-test confluence pages get -p <PAGE_ID> -f markdown
|
|
122
|
+
|
|
123
|
+
# タイトルとスペースで取得
|
|
124
|
+
ly-work-tools-cli-test confluence pages get -t "ページタイトル" -s <SPACE_KEY>
|
|
125
|
+
|
|
126
|
+
# 複数ページを一括取得
|
|
127
|
+
ly-work-tools-cli-test confluence pages get -p <PAGE_ID1>,<PAGE_ID2>,<PAGE_ID3>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Phase 6: 設定生成チェックリスト
|
|
131
|
+
|
|
132
|
+
- [ ] 対象スペースの spaceKey を特定したか
|
|
133
|
+
- [ ] 必要なページの pageId を特定したか
|
|
134
|
+
- [ ] ラベルによるフィルタリングが必要か確認したか
|
|
135
|
+
- [ ] 除外すべきページがあるか確認したか
|
|
136
|
+
- [ ] 認証情報(apiKey, userEmail)の設定方法を説明したか
|
|
137
|
+
|
|
138
|
+
## 設定ファイルフォーマット
|
|
139
|
+
|
|
140
|
+
### 基本構造
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
# ============================================================
|
|
144
|
+
# mcp-docs-collector Confluence 設定ファイル
|
|
145
|
+
# ============================================================
|
|
146
|
+
|
|
147
|
+
# 環境変数(必須)
|
|
148
|
+
export_envs:
|
|
149
|
+
- CONFLUENCE_PAT # Personal Access Token
|
|
150
|
+
- CONFLUENCE_USER_EMAIL # Cloud の場合のみ
|
|
151
|
+
|
|
152
|
+
# ドキュメント収集対象の定義
|
|
153
|
+
docs:
|
|
154
|
+
- type: confluence
|
|
155
|
+
baseUrl: https://your-company.atlassian.net/wiki # Confluence の URL
|
|
156
|
+
apiKey: ${CONFLUENCE_PAT} # PAT(環境変数推奨)
|
|
157
|
+
userEmail: ${CONFLUENCE_USER_EMAIL} # Cloud の場合のみ必須
|
|
158
|
+
group: wiki # オプション(ツール名のプレフィックス)
|
|
159
|
+
resources:
|
|
160
|
+
- name: resource-name # 必須(英数字、ハイフン、アンダースコアのみ)
|
|
161
|
+
description: "説明文" # オプション
|
|
162
|
+
spaceKey: SPACE # スペースキー(pageId と排他)
|
|
163
|
+
pageId: "123456" # ページID(spaceKey と排他)
|
|
164
|
+
label: official # オプション(ラベルフィルタ)
|
|
165
|
+
maxResults: 100 # オプション(取得上限)
|
|
166
|
+
excludePages: # オプション(除外ページID)
|
|
167
|
+
- "789012"
|
|
168
|
+
retrieveRestrictions: true # オプション(制限ページも取得)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 重要な命名規則
|
|
172
|
+
|
|
173
|
+
| 項目 | 使用可能文字 | 使用禁止文字 |
|
|
174
|
+
|------|-------------|-------------|
|
|
175
|
+
| `group` | 英数字、`-`、`_` | `/`、`:`、スペース |
|
|
176
|
+
| `name` | 英数字、`-`、`_` | `/`、`:`、スペース |
|
|
177
|
+
|
|
178
|
+
ツール名の生成: `{group}_{name}` → 例: `wiki_design-docs`
|
|
179
|
+
|
|
180
|
+
### 認証方式
|
|
181
|
+
|
|
182
|
+
| プラットフォーム | 認証方式 | 必要な設定 |
|
|
183
|
+
|---------------|---------|------------|
|
|
184
|
+
| **Confluence Cloud** | Basic認証 | `userEmail` + `apiKey` (PAT) |
|
|
185
|
+
| **Confluence Server** | Bearer認証 | `apiKey` (PAT) のみ |
|
|
186
|
+
|
|
187
|
+
## 設定パターン
|
|
188
|
+
|
|
189
|
+
### パターン1: スペース全体を取得
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
docs:
|
|
193
|
+
- type: confluence
|
|
194
|
+
baseUrl: https://company.atlassian.net/wiki
|
|
195
|
+
apiKey: ${CONFLUENCE_PAT}
|
|
196
|
+
userEmail: ${CONFLUENCE_USER_EMAIL}
|
|
197
|
+
group: wiki
|
|
198
|
+
resources:
|
|
199
|
+
- name: project-docs
|
|
200
|
+
description: "プロジェクトドキュメント"
|
|
201
|
+
spaceKey: PROJECT
|
|
202
|
+
maxResults: 100
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### パターン2: ラベルでフィルタリング
|
|
206
|
+
|
|
207
|
+
```yaml
|
|
208
|
+
docs:
|
|
209
|
+
- type: confluence
|
|
210
|
+
baseUrl: https://company.atlassian.net/wiki
|
|
211
|
+
apiKey: ${CONFLUENCE_PAT}
|
|
212
|
+
userEmail: ${CONFLUENCE_USER_EMAIL}
|
|
213
|
+
group: wiki
|
|
214
|
+
resources:
|
|
215
|
+
- name: official-docs
|
|
216
|
+
description: "公式ドキュメント"
|
|
217
|
+
spaceKey: DESIGN
|
|
218
|
+
label: official
|
|
219
|
+
maxResults: 50
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### パターン3: 特定ページとその子ページ
|
|
223
|
+
|
|
224
|
+
```yaml
|
|
225
|
+
docs:
|
|
226
|
+
- type: confluence
|
|
227
|
+
baseUrl: https://company.atlassian.net/wiki
|
|
228
|
+
apiKey: ${CONFLUENCE_PAT}
|
|
229
|
+
userEmail: ${CONFLUENCE_USER_EMAIL}
|
|
230
|
+
group: wiki
|
|
231
|
+
resources:
|
|
232
|
+
- name: api-docs
|
|
233
|
+
description: "API ドキュメント"
|
|
234
|
+
pageId: "123456789"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### パターン4: 複数スペースの組み合わせ
|
|
238
|
+
|
|
239
|
+
```yaml
|
|
240
|
+
docs:
|
|
241
|
+
- type: confluence
|
|
242
|
+
baseUrl: https://company.atlassian.net/wiki
|
|
243
|
+
apiKey: ${CONFLUENCE_PAT}
|
|
244
|
+
userEmail: ${CONFLUENCE_USER_EMAIL}
|
|
245
|
+
group: confluence
|
|
246
|
+
resources:
|
|
247
|
+
- name: design-docs
|
|
248
|
+
description: "設計ドキュメント"
|
|
249
|
+
spaceKey: DESIGN
|
|
250
|
+
label: approved
|
|
251
|
+
|
|
252
|
+
- name: api-docs
|
|
253
|
+
description: "API 仕様書"
|
|
254
|
+
spaceKey: API
|
|
255
|
+
maxResults: 100
|
|
256
|
+
|
|
257
|
+
- name: release-notes
|
|
258
|
+
description: "リリースノート"
|
|
259
|
+
pageId: "555666777"
|
|
260
|
+
excludePages:
|
|
261
|
+
- "888999000"
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### パターン5: 制限付きページの取得
|
|
265
|
+
|
|
266
|
+
```yaml
|
|
267
|
+
docs:
|
|
268
|
+
- type: confluence
|
|
269
|
+
baseUrl: https://company.atlassian.net/wiki
|
|
270
|
+
apiKey: ${CONFLUENCE_PAT}
|
|
271
|
+
userEmail: ${CONFLUENCE_USER_EMAIL}
|
|
272
|
+
group: private-wiki
|
|
273
|
+
resources:
|
|
274
|
+
- name: all-docs
|
|
275
|
+
description: "すべてのドキュメント(制限付き含む)"
|
|
276
|
+
spaceKey: PRIVATE
|
|
277
|
+
retrieveRestrictions: true
|
|
278
|
+
|
|
279
|
+
- name: selective-docs
|
|
280
|
+
description: "選択的に制限ページを取得"
|
|
281
|
+
spaceKey: TEAM
|
|
282
|
+
forceReadPageIds:
|
|
283
|
+
- "123456"
|
|
284
|
+
- "789012"
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## 動作確認コマンド
|
|
288
|
+
|
|
289
|
+
設定ファイル生成後、以下のコマンドで検証:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# 1. YAML 構文チェック
|
|
293
|
+
npx js-yaml config.yaml
|
|
294
|
+
|
|
295
|
+
# 2. ツール一覧表示(ドライラン)
|
|
296
|
+
npx @aramassa/mcp-docs-collector collect \
|
|
297
|
+
--config config.yaml \
|
|
298
|
+
--list-tools
|
|
299
|
+
|
|
300
|
+
# 3. 単一ツールのテスト収集
|
|
301
|
+
npx @aramassa/mcp-docs-collector collect \
|
|
302
|
+
--config config.yaml \
|
|
303
|
+
--tools {group}_{resource-name} \
|
|
304
|
+
--output ./test-output
|
|
305
|
+
|
|
306
|
+
# 4. 全ツールの収集
|
|
307
|
+
npx @aramassa/mcp-docs-collector collect \
|
|
308
|
+
--config config.yaml \
|
|
309
|
+
--output ./docs-output
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## CQL(Confluence Query Language)リファレンス
|
|
313
|
+
|
|
314
|
+
### よく使う CQL パターン
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# スペース内の全ページ
|
|
318
|
+
--cql "space = PROJECT"
|
|
319
|
+
|
|
320
|
+
# ラベル付きページ
|
|
321
|
+
--cql "space = PROJECT AND label = official"
|
|
322
|
+
|
|
323
|
+
# 複数ラベル(OR)
|
|
324
|
+
--cql "space = PROJECT AND label in (api, documentation, guide)"
|
|
325
|
+
|
|
326
|
+
# タイトル検索
|
|
327
|
+
--cql "space = PROJECT AND title ~ '設計'"
|
|
328
|
+
|
|
329
|
+
# 最近更新されたページ
|
|
330
|
+
--cql "space = PROJECT AND lastmodified >= now('-30d')"
|
|
331
|
+
|
|
332
|
+
# 特定ユーザーが作成
|
|
333
|
+
--cql "space = PROJECT AND creator = 'user@example.com'"
|
|
334
|
+
|
|
335
|
+
# 親ページ配下
|
|
336
|
+
--cql "ancestor = 123456789"
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## エラー対処
|
|
340
|
+
|
|
341
|
+
| エラー | 原因 | 対処法 |
|
|
342
|
+
|--------|------|--------|
|
|
343
|
+
| `401 Unauthorized` | 認証情報無効 | PAT の有効期限・権限を確認 |
|
|
344
|
+
| `403 Forbidden` | アクセス権限なし | スペース/ページの閲覧権限を確認 |
|
|
345
|
+
| `404 Not Found` | スペース/ページ不存在 | spaceKey, pageId を再確認 |
|
|
346
|
+
| `Invalid tool name` | name に禁止文字 | 英数字・ハイフン・アンダースコアのみ使用 |
|
|
347
|
+
| `Rate limit exceeded` | API 制限超過 | maxResults を減らす、間隔を空けて実行 |
|
|
348
|
+
|
|
349
|
+
## 注意事項
|
|
350
|
+
|
|
351
|
+
### セキュリティ
|
|
352
|
+
|
|
353
|
+
- **認証情報は環境変数で管理**: `${CONFLUENCE_PAT}` のように環境変数参照を使用
|
|
354
|
+
- **PAT の権限は最小限に**: 読み取り権限のみを付与
|
|
355
|
+
- **YAML に直接認証情報を記載しない**
|
|
356
|
+
|
|
357
|
+
### パフォーマンス
|
|
358
|
+
|
|
359
|
+
- **maxResults で取得数を制限**: 最初は小さい値から開始
|
|
360
|
+
- **ラベルを活用**: 必要なページだけを効率的に取得
|
|
361
|
+
- **深い階層は pageId 指定**: 特定のサブツリーのみ取得
|
|
362
|
+
|
|
363
|
+
### 互換性
|
|
364
|
+
|
|
365
|
+
- **Cloud と Server で認証方式が異なる**: Cloud は userEmail 必須、Server は不要
|
|
366
|
+
- **API バージョンによる挙動差**: カスタムマクロ等は変換時に失われる可能性あり
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: agent
|
|
3
|
+
name: MCPDocs.WebConfig.Generator
|
|
4
|
+
description: Web サイトの URL を分析し、mcp-docs-collector 用の YAML 設定ファイルを生成するエージェント。sitemap や HTML 構造を解析し、効率的なドキュメント収集設定を作成します。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Web Config Generator Agent
|
|
8
|
+
|
|
9
|
+
あなたは mcp-docs-collector の Web リソース設定ファイル生成に特化したエージェントです。
|
|
10
|
+
|
|
11
|
+
## 責務
|
|
12
|
+
|
|
13
|
+
1. **URL の取得と分析**: HTTP 経由でコンテンツを取得し、タイプを判定
|
|
14
|
+
2. **sitemap_index の展開**: 子 sitemap を展開して統合設定を生成
|
|
15
|
+
3. **URL パターンの分析**: パス構造から include/exclude パターンを提案
|
|
16
|
+
4. **YAML 設定ファイル生成**: 正確なフォーマットで出力
|
|
17
|
+
|
|
18
|
+
## 作業フロー
|
|
19
|
+
|
|
20
|
+
### Phase 1: URL 取得とコンテンツ分析
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
WORK_DIR=$(mktemp -d)
|
|
24
|
+
TARGET_URL="<ユーザー指定のURL>"
|
|
25
|
+
curl -sL -o "$WORK_DIR/content.xml" "$TARGET_URL"
|
|
26
|
+
|
|
27
|
+
# コンテンツタイプ判定
|
|
28
|
+
if grep -q "<sitemapindex" "$WORK_DIR/content.xml"; then
|
|
29
|
+
echo "検出: sitemap_index"
|
|
30
|
+
elif grep -q "<urlset" "$WORK_DIR/content.xml"; then
|
|
31
|
+
echo "検出: sitemap"
|
|
32
|
+
elif grep -q "<html" "$WORK_DIR/content.xml"; then
|
|
33
|
+
echo "検出: HTML ページ"
|
|
34
|
+
fi
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Phase 2: URL リスト構築
|
|
38
|
+
|
|
39
|
+
#### sitemap / sitemap_index の場合
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# sitemap_index の場合は子 sitemap を展開
|
|
43
|
+
if grep -q "<sitemapindex" "$WORK_DIR/content.xml"; then
|
|
44
|
+
grep -oP '(?<=<loc>)[^<]+' "$WORK_DIR/content.xml" > "$WORK_DIR/sitemaps.txt"
|
|
45
|
+
> "$WORK_DIR/urls.txt"
|
|
46
|
+
while read -r sitemap_url; do
|
|
47
|
+
curl -sL "$sitemap_url" | grep -oP '(?<=<loc>)[^<]+' >> "$WORK_DIR/urls.txt"
|
|
48
|
+
done < "$WORK_DIR/sitemaps.txt"
|
|
49
|
+
else
|
|
50
|
+
grep -oP '(?<=<loc>)[^<]+' "$WORK_DIR/content.xml" > "$WORK_DIR/urls.txt"
|
|
51
|
+
fi
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### HTML ページの場合(sitemap がない場合)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
BASE_URL=$(echo "$TARGET_URL" | grep -oP 'https?://[^/]+')
|
|
58
|
+
grep -oP 'href="[^"]*"' "$WORK_DIR/content.xml" | sed 's/href="//;s/"$//' \
|
|
59
|
+
| while read -r link; do
|
|
60
|
+
[[ "$link" =~ ^$BASE_URL ]] && echo "$link"
|
|
61
|
+
[[ "$link" =~ ^/[^/] ]] && echo "${BASE_URL}${link}"
|
|
62
|
+
done | grep -vE '\.(pdf|zip|png|jpg|svg)$|#' | sort -u > "$WORK_DIR/urls.txt"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Phase 3: URL パターン分析
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# パスの第1階層を集計
|
|
69
|
+
cat "$WORK_DIR/urls.txt" | sed 's|https\?://[^/]*||' | cut -d'/' -f2 \
|
|
70
|
+
| sort | uniq -c | sort -rn
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Phase 4: 設定生成チェックリスト
|
|
74
|
+
|
|
75
|
+
- [ ] robots.txt でスクレイピング許可を確認
|
|
76
|
+
- [ ] sitemap_index の場合、全子 sitemap が含まれているか
|
|
77
|
+
- [ ] include/exclude パターンが適切か
|
|
78
|
+
- [ ] concurrency が対象サイトに適切か
|
|
79
|
+
|
|
80
|
+
## 設定ファイルフォーマット
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
docs:
|
|
84
|
+
- type: web
|
|
85
|
+
group: site-name # 英数字、-、_ のみ
|
|
86
|
+
userAgent: "Mozilla/5.0 (compatible; MCP-DocsCollector/1.0)"
|
|
87
|
+
timeout: 30000 # ミリ秒
|
|
88
|
+
maxRetries: 3
|
|
89
|
+
concurrency: 5 # 大規模サイトは 2-3 に
|
|
90
|
+
cacheDir: ~/.mcp-docs-collector/cache
|
|
91
|
+
ttl: 3600 # 秒
|
|
92
|
+
resources:
|
|
93
|
+
- name: resource-name # 英数字、-、_ のみ
|
|
94
|
+
description: "説明文"
|
|
95
|
+
urls: # 直接 URL 指定
|
|
96
|
+
- https://example.com/page1
|
|
97
|
+
sitemaps: # sitemap 経由
|
|
98
|
+
- url: https://example.com/sitemap.xml
|
|
99
|
+
include: ["/docs/**"]
|
|
100
|
+
exclude: ["**/*.pdf"]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### パターン記法
|
|
104
|
+
|
|
105
|
+
| パターン | 例 | 説明 |
|
|
106
|
+
|---------|-----|------|
|
|
107
|
+
| パスパターン | `/docs/**` | 全ドメインの `/docs/` 配下 |
|
|
108
|
+
| フル URL | `https://example.com/docs/**` | 特定ドメインのみ |
|
|
109
|
+
|
|
110
|
+
### sitemap_index 対応
|
|
111
|
+
|
|
112
|
+
**重要**: mcp-docs-collector は sitemap_index を再帰処理しません。子 sitemap を展開して個別に設定に追加してください。
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
# sitemap_index から展開した子 sitemap を統合
|
|
116
|
+
sitemaps:
|
|
117
|
+
- url: https://docs.example.com/docs-sitemap.xml
|
|
118
|
+
include: ["/docs/**"]
|
|
119
|
+
- url: https://docs.example.com/api-sitemap.xml
|
|
120
|
+
include: ["/api/**"]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 動作確認
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# YAML 構文チェック
|
|
127
|
+
npx js-yaml config.yaml
|
|
128
|
+
|
|
129
|
+
# ツール一覧表示
|
|
130
|
+
npx @aramassa/mcp-docs-collector collect --config config.yaml --list-tools
|
|
131
|
+
|
|
132
|
+
# テスト収集
|
|
133
|
+
npx @aramassa/mcp-docs-collector collect --config config.yaml --output ./test-output
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## エラー対処
|
|
137
|
+
|
|
138
|
+
| エラー | 対処法 |
|
|
139
|
+
|--------|--------|
|
|
140
|
+
| `ETIMEDOUT` | `timeout` を増やす |
|
|
141
|
+
| `429 Too Many Requests` | `concurrency` を 1-2 に下げる |
|
|
142
|
+
| `403 Forbidden` | `userAgent` を変更、robots.txt 確認 |
|
|
143
|
+
| `Pattern not matching` | パスパターン vs フル URL パターンを確認 |
|
|
144
|
+
|
|
145
|
+
## 注意事項
|
|
146
|
+
|
|
147
|
+
- **robots.txt 遵守**: スクレイピング前に必ず確認
|
|
148
|
+
- **レート制限**: `concurrency` は控えめに(2-3 から開始)
|
|
149
|
+
- **JavaScript サイト**: JS レンダリングサイトは取得できない場合あり
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: prompt
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
name: plan-fix
|
|
4
|
+
description: "VS Code Plan モードから Agent Coding への移行を自動化。計画完成後の Git/GitHub 操作を簡略化し、効率的な開発ワークフローを実現。"
|
|
5
|
+
agent: agent
|
|
5
6
|
---
|
|
6
|
-
|
|
7
|
-
## prompt plan-fix ワークフロー
|
|
7
|
+
# prompt plan-fix ワークフロー
|
|
8
8
|
|
|
9
9
|
### 概要
|
|
10
10
|
|
|
@@ -21,8 +21,7 @@ VS Code の Plan モードで作成した計画が完成したら、この promp
|
|
|
21
21
|
|
|
22
22
|
### 前提条件
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
- 計画の内容が十分に詳細化されている
|
|
24
|
+
- 計画の内容が十分に詳細化されている(まだファイル化していなくてもよい)
|
|
26
25
|
- Git リポジトリが初期化されている
|
|
27
26
|
|
|
28
27
|
### ワークフロー
|
|
@@ -42,25 +41,95 @@ git pull origin main
|
|
|
42
41
|
- [ ] ローカルが最新の状態である
|
|
43
42
|
- [ ] コンフリクトが発生していない
|
|
44
43
|
|
|
45
|
-
#### Step 2:
|
|
46
|
-
|
|
47
|
-
`todo_plans/` ディレクトリ内の計画ファイルを確認します。
|
|
44
|
+
#### Step 2: 仮の GitHub Issue を起票して IssueNumber を取得
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- [ ] 背景、やること、実装計画が明確に記載されている
|
|
52
|
-
- [ ] Phase 分けがされている
|
|
53
|
-
- [ ] 受け入れ基準が記載されている
|
|
46
|
+
このフローでは `todo_plans/${IssueNumber}/index.md` を正とし、**Issue 本文は必ず `index.md` と一致**させます。
|
|
47
|
+
そのため、まず仮の内容で Issue を作成して IssueNumber を取得します。
|
|
54
48
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
todo_plans/
|
|
58
|
-
|
|
49
|
+
```bash
|
|
50
|
+
# 仮の本文(後で index.md に置き換える)
|
|
51
|
+
TEMP_BODY="(placeholder)\n\n※この Issue の本文は todo_plans/${IssueNumber}/index.md と同期する" \
|
|
52
|
+
|
|
53
|
+
# Issue を作成して URL を取得(例: https://github.com/ORG/REPO/issues/123)
|
|
54
|
+
ISSUE_URL=$(gh issue create \
|
|
55
|
+
--title "[機能名]: [機能概要]" \
|
|
56
|
+
--body "$TEMP_BODY" \
|
|
57
|
+
--label "enhancement")
|
|
58
|
+
|
|
59
|
+
# URL 末尾から Issue 番号を取り出す
|
|
60
|
+
ISSUE_NUMBER=$(basename "$ISSUE_URL")
|
|
61
|
+
echo "$ISSUE_NUMBER"
|
|
59
62
|
```
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
**確認ポイント**:
|
|
65
|
+
- [ ] Issue が正しく作成された
|
|
66
|
+
- [ ] Issue 番号(`ISSUE_NUMBER`)が取得できた
|
|
67
|
+
|
|
68
|
+
#### Step 3: `todo_plans/${IssueNumber}/` を作成し、index.md を作る(Issue 本文と同期)
|
|
69
|
+
|
|
70
|
+
Issue 番号を使って、計画ディレクトリを作成します。
|
|
71
|
+
|
|
72
|
+
**作成するファイル**:
|
|
73
|
+
- `todo_plans/${ISSUE_NUMBER}/index.md`(必須:人間が読む用。要点のみ。Issue 本文と必ず一致させる)
|
|
74
|
+
- `todo_plans/${ISSUE_NUMBER}/details.md`(任意:補足情報の例。長くてよい)
|
|
75
|
+
- `todo_plans/${ISSUE_NUMBER}/*.md`(任意:補足は分割して複数ファイルを作ってよい。例: `testing.md`, `risks.md`, `notes.md`)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
mkdir -p "todo_plans/${ISSUE_NUMBER}"
|
|
79
|
+
|
|
80
|
+
# まずテンプレを作る(必要なら手で編集)
|
|
81
|
+
cat > "todo_plans/${ISSUE_NUMBER}/index.md" <<'EOF'
|
|
82
|
+
# 変更概要(3行)
|
|
83
|
+
-
|
|
84
|
+
-
|
|
85
|
+
-
|
|
86
|
+
|
|
87
|
+
## 対象
|
|
88
|
+
- パッケージ/モジュール:
|
|
89
|
+
|
|
90
|
+
## 動作確認
|
|
91
|
+
-
|
|
92
|
+
|
|
93
|
+
## 稼働中システムへの影響
|
|
94
|
+
-
|
|
62
95
|
|
|
63
|
-
|
|
96
|
+
## 破壊的変更
|
|
97
|
+
- なし / あり(内容: )
|
|
98
|
+
|
|
99
|
+
## 計画ファイル一覧
|
|
100
|
+
- `index.md`: この Issue 本文(要点のみ)
|
|
101
|
+
- `details.md`: 実装の詳細(背景、実装方針、Phase、受け入れ基準など)
|
|
102
|
+
- その他の補足ファイル(必要に応じて作成):
|
|
103
|
+
- `testing.md`: テスト戦略・テストケース
|
|
104
|
+
- `risks.md`: リスク評価と対策
|
|
105
|
+
- `notes.md`: 設計メモ・その他補足
|
|
106
|
+
EOF
|
|
107
|
+
|
|
108
|
+
cat > "todo_plans/${ISSUE_NUMBER}/details.md" <<'EOF'
|
|
109
|
+
# 補足(自由記述)
|
|
110
|
+
|
|
111
|
+
※補足はこのファイルに「全部」書く必要はありません。
|
|
112
|
+
`todo_plans/${ISSUE_NUMBER}/` 配下に、用途別にファイルを増やしてOKです(例: `testing.md`, `risks.md`, `notes.md`)。
|
|
113
|
+
|
|
114
|
+
## 背景
|
|
115
|
+
|
|
116
|
+
## 実装方針
|
|
117
|
+
|
|
118
|
+
## 実装計画(Phase)
|
|
119
|
+
|
|
120
|
+
## 受け入れ基準
|
|
121
|
+
|
|
122
|
+
## ロールバック/切り戻し
|
|
123
|
+
EOF
|
|
124
|
+
|
|
125
|
+
# Issue 本文を index.md に必ず一致させる
|
|
126
|
+
gh issue edit "$ISSUE_NUMBER" --body-file "todo_plans/${ISSUE_NUMBER}/index.md"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**チェック項目**:
|
|
130
|
+
- [ ] `todo_plans/${ISSUE_NUMBER}/index.md` が「要点のみ」で読める分量になっている
|
|
131
|
+
- [ ] `index.md` から、(1) どんな変更か(3行) (2) 対象パッケージ/モジュール (3) 動作確認計画 (4) 稼働中影響 (5) 破壊的変更の有無 (6) 計画ファイル一覧 が分かる
|
|
132
|
+
- [ ] Issue 本文が `index.md` と一致している(差分がない)
|
|
64
133
|
|
|
65
134
|
**Issue 作成のポイント**:
|
|
66
135
|
- タイトル: `[機能名]: [機能概要]` の形式に統一
|
|
@@ -111,7 +180,7 @@ git branch --show-current
|
|
|
111
180
|
|
|
112
181
|
```bash
|
|
113
182
|
# 計画ファイルをステージング
|
|
114
|
-
git add todo_plans/
|
|
183
|
+
git add todo_plans/${ISSUE_NUMBER}/index.md todo_plans/${ISSUE_NUMBER}/details.md
|
|
115
184
|
|
|
116
185
|
# コミット
|
|
117
186
|
git commit -m "Add implementation plan for [機能名]
|
|
@@ -192,18 +261,29 @@ git checkout main
|
|
|
192
261
|
git pull origin main
|
|
193
262
|
|
|
194
263
|
# Step 2: 計画ファイルを確認(手動)
|
|
195
|
-
# todo_plans/
|
|
264
|
+
# このフローでは Issue 本文 = todo_plans/${ISSUE_NUMBER}/index.md を保証する
|
|
196
265
|
|
|
197
|
-
# Step
|
|
266
|
+
# Step 2: 仮の Issue を作って Issue 番号を取得
|
|
267
|
+
TEMP_BODY="(placeholder)\n\n※この Issue の本文は todo_plans/${IssueNumber}/index.md と同期する"
|
|
268
|
+
ISSUE_URL=$(gh issue create \
|
|
269
|
+
--title "[機能名]: [機能概要]" \
|
|
270
|
+
--body "$TEMP_BODY" \
|
|
271
|
+
--label "enhancement")
|
|
272
|
+
ISSUE_NUMBER=$(basename "$ISSUE_URL")
|
|
198
273
|
|
|
199
|
-
#
|
|
200
|
-
ISSUE_NUMBER
|
|
274
|
+
# Step 3: todo_plans/${ISSUE_NUMBER}/ を作って index.md & details.md を作成
|
|
275
|
+
mkdir -p "todo_plans/${ISSUE_NUMBER}"
|
|
276
|
+
${EDITOR:-vi} "todo_plans/${ISSUE_NUMBER}/index.md"
|
|
277
|
+
${EDITOR:-vi} "todo_plans/${ISSUE_NUMBER}/details.md" # 任意。必要なら、他の *.md を追加してよい
|
|
278
|
+
|
|
279
|
+
# Step 3.1: Issue 本文を index.md と同期
|
|
280
|
+
gh issue edit "$ISSUE_NUMBER" --body-file "todo_plans/${ISSUE_NUMBER}/index.md"
|
|
201
281
|
|
|
202
282
|
# Step 4: plan ブランチを作成
|
|
203
283
|
git checkout -b plan/${ISSUE_NUMBER}
|
|
204
284
|
|
|
205
285
|
# Step 5: 計画ファイルをコミット
|
|
206
|
-
git add todo_plans/
|
|
286
|
+
git add todo_plans/${ISSUE_NUMBER}/index.md todo_plans/${ISSUE_NUMBER}/details.md
|
|
207
287
|
git commit -m "Add implementation plan for [機能名]
|
|
208
288
|
|
|
209
289
|
- [変更内容1]
|
|
@@ -224,7 +304,8 @@ echo "Next: Start Agent Coding with base branch plan/${ISSUE_NUMBER}"
|
|
|
224
304
|
|
|
225
305
|
#### 計画ファイルの準備
|
|
226
306
|
|
|
227
|
-
-
|
|
307
|
+
- **index.md**: 人間が読む前提で、要点だけに絞る(Issue 本文と一致させる正本)
|
|
308
|
+
- **補足ファイル**: 長い背景/Phase/受け入れ基準などは `todo_plans/${ISSUE_NUMBER}/` 配下に分割して置く(`details.md` はその一例)
|
|
228
309
|
- **Phase 分け**: 1つの Phase が 2-3時間で完了する規模に分割
|
|
229
310
|
- **受け入れ基準**: 検証可能な形で明記
|
|
230
311
|
|
|
@@ -308,9 +389,12 @@ git push -u origin plan/${ISSUE_NUMBER}
|
|
|
308
389
|
```bash
|
|
309
390
|
git checkout plan/${ISSUE_NUMBER}
|
|
310
391
|
# 計画ファイルを修正
|
|
311
|
-
git add todo_plans/
|
|
392
|
+
git add todo_plans/${ISSUE_NUMBER}/index.md todo_plans/${ISSUE_NUMBER}/details.md
|
|
312
393
|
git commit -m "Update implementation plan: [変更内容]"
|
|
313
394
|
git push
|
|
395
|
+
|
|
396
|
+
# Issue 本文を index.md に再同期
|
|
397
|
+
gh issue edit "$ISSUE_NUMBER" --body-file "todo_plans/${ISSUE_NUMBER}/index.md"
|
|
314
398
|
```
|
|
315
399
|
|
|
316
400
|
#### Q4: 複数の Agent タスクを並行して実行したい場合は?
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aramassa/ai-rules",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "This repository collects guidelines and instructions for developing AI agents. It contains documents covering communication rules, coding standards, testing strategies, and general operational practices.",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
"packages/extract",
|
|
@@ -15,3 +15,21 @@ recipe:
|
|
|
15
15
|
type: agent
|
|
16
16
|
filters:
|
|
17
17
|
name: MCPDocs.GitConfig.Generator
|
|
18
|
+
|
|
19
|
+
- title: MCP Docs Web Config Generator
|
|
20
|
+
frontmatter:
|
|
21
|
+
"@name": true
|
|
22
|
+
"@description": true
|
|
23
|
+
out: mcpdocs-web-config-generator.agent.md
|
|
24
|
+
type: agent
|
|
25
|
+
filters:
|
|
26
|
+
name: MCPDocs.WebConfig.Generator
|
|
27
|
+
|
|
28
|
+
- title: MCP Docs Confluence Config Generator
|
|
29
|
+
frontmatter:
|
|
30
|
+
"@name": true
|
|
31
|
+
"@description": true
|
|
32
|
+
out: mcpdocs-confluence-config-generator.agent.md
|
|
33
|
+
type: agent
|
|
34
|
+
filters:
|
|
35
|
+
name: MCPDocs.ConfluenceConfig.Generator
|