@nahisaho/shikigami 1.52.1 → 2.0.0
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/.github/skills/shikigami-consulting-framework/SKILL.md +28 -0
- package/.github/skills/shikigami-deep-research/SKILL.md +28 -0
- package/.github/skills/shikigami-planner/SKILL.md +28 -0
- package/.github/skills/shikigami-writing/SKILL.md +28 -0
- package/AGENTS.md +33 -31
- package/CHANGELOG.md +37 -0
- package/README.md +80 -42
- package/mcp-server/package.json +1 -2
- package/mcp-server/src/index.ts +8 -195
- package/mcp-server/src/tools/visit/alternative/alternative-source-manager.ts +2 -2
- package/package.json +1 -1
- package/scripts/cli.js +11 -1
- package/scripts/init.js +17 -0
- package/scripts/setup-cowork.js +367 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: shikigami-consulting-framework
|
|
3
3
|
description: |
|
|
4
4
|
BCGコンサルティングフレームワーク分析。BCG Growth-Share Matrix, Experience Curve, Strategy Palette等を適用。
|
|
5
|
+
Use when: フレームワーク分析、SWOT、ポートフォリオ評価、戦略立案、コスト分析、仮説検証、MECE検証が必要な時。
|
|
5
6
|
license: MIT
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -266,3 +267,30 @@ graph TD
|
|
|
266
267
|
- **shikigami-planner**: BCGフレームワーク選択支援
|
|
267
268
|
- **shikigami-deep-research**: 分析に必要なデータ収集
|
|
268
269
|
- **shikigami-writing**: BCG分析結果のレポート化
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Gotchas
|
|
274
|
+
|
|
275
|
+
1. **MECE性の未検証** — フレームワーク適用後、必ず相互排他性(ME)・全体網羅性(CE)・同一粒度の3点を検証。未検証の分析は信頼性不足
|
|
276
|
+
2. **ベンチマーク比較の欠落** — 自社データのみの分析は「So What」が弱い。必ず業界平均・トップ企業との比較を含める
|
|
277
|
+
3. **フレームワークの不適切選択** — 成功条件タイプに合わないフレームワークを適用すると分析品質が低下。推奨マッピング表を参照
|
|
278
|
+
4. **数値裏付けなしの定性分析** — BCG分析は数値データが前提。定性的な印象のみのマトリクス配置は禁止
|
|
279
|
+
5. **仮説なしのデータ収集** — Hypothesis-Driven Approach では Day 1 Answer を先に設定。仮説なしの網羅的データ収集は非効率
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Eval Criteria
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
[CAPABILITY EVAL: consulting-framework]
|
|
287
|
+
Task: BCGフレームワークによる分析実行
|
|
288
|
+
Success Criteria:
|
|
289
|
+
- [ ] 適切なBCGフレームワーク選択(成功条件タイプに適合)
|
|
290
|
+
- [ ] MECE性検証(ME✓ CE✓ 同一粒度✓)合格
|
|
291
|
+
- [ ] 数値データに基づく分析
|
|
292
|
+
- [ ] ベンチマーク比較を含む
|
|
293
|
+
- [ ] 経営層への示唆(So What)が明確
|
|
294
|
+
Expected Output: projects/pjXXXXX_*/analysis/*.md
|
|
295
|
+
Test Command: ls projects/pjXXXXX_*/analysis/*.md
|
|
296
|
+
```
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: shikigami-deep-research
|
|
3
3
|
description: |
|
|
4
4
|
反復的深層リサーチ。Think→Report→Action→完了サイクルで高品質調査を実行。
|
|
5
|
+
Use when: 情報収集、調査、リサーチ、エビデンス収集、ファクトチェック、ソース検証が必要な時。
|
|
5
6
|
license: MIT
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -235,3 +236,30 @@ manifest.yaml `personas[].domain_knowledge.level` で調整:
|
|
|
235
236
|
- **shikigami-planner**: 事前の計画立案
|
|
236
237
|
- **shikigami-consulting-framework**: フレームワーク分析
|
|
237
238
|
- **shikigami-writing**: 最終レポート生成
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Gotchas
|
|
243
|
+
|
|
244
|
+
1. **set_project 未実行で検索開始** — Phase 0 で `set_project` を実行しないと `save_research` が保存先を特定できない。必ずプロジェクト設定後にリサーチ開始
|
|
245
|
+
2. **save_research の呼び忘れ** — search/visit 実行後に `save_research` を呼ばないとリサーチ結果が揮発する。Think→Report→Action 各サイクル完了時に即保存
|
|
246
|
+
3. **信頼度 6.0 未満で次フェーズ移行** — Gate 2→3 は confidence_score ≥ 0.6 が必須。低信頼ソースのみでは通過不可、追加ソース検索が必要
|
|
247
|
+
4. **単一ソースでの結論** — 交差検証率を維持するため最低3ソースが必要。1ソースのみの主張は「未検証」マーク付与
|
|
248
|
+
5. **日付の古いソースへの依存** — 3年超のソースは低信頼(0.5以下)。最新データの追加検索を優先
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Eval Criteria
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
[CAPABILITY EVAL: deep-research]
|
|
256
|
+
Task: 指定トピックの深層リサーチ実行
|
|
257
|
+
Success Criteria:
|
|
258
|
+
- [ ] 3ソース以上から交差検証済み
|
|
259
|
+
- [ ] confidence_score ≥ 0.6
|
|
260
|
+
- [ ] research/ に save_research で保存済み
|
|
261
|
+
- [ ] 高信頼ソース(.gov/.edu/公式)を1件以上含む
|
|
262
|
+
- [ ] Think→Report→Action サイクルを2回以上実行
|
|
263
|
+
Expected Output: research/{query}_{timestamp}.md
|
|
264
|
+
Test Command: ls projects/pjXXXXX_*/research/*.md
|
|
265
|
+
```
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: shikigami-planner
|
|
3
3
|
description: |
|
|
4
4
|
対話的目的探索・計画立案。5 Whys/JTBDで真の目的を発見し、リサーチ計画を策定。
|
|
5
|
+
Use when: リサーチ開始、プロジェクト初期化、目的の明確化、計画策定、タスク分解が必要な時。
|
|
5
6
|
license: MIT
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -182,3 +183,30 @@ deliverables:
|
|
|
182
183
|
- **shikigami-deep-research**: 計画に基づくリサーチ実行
|
|
183
184
|
- **shikigami-consulting-framework**: フレームワーク分析
|
|
184
185
|
- **shikigami-writing**: 最終レポート生成
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Gotchas
|
|
190
|
+
|
|
191
|
+
1. **ユーザー承認前にプロジェクト作成** — `npx shikigami new` はユーザーが「はい/OK/承認」と回答した後にのみ実行。確認前の実行は禁止
|
|
192
|
+
2. **1問1答ルール違反** — Phase 1 は1度に1つの質問のみ。複数質問の同時提示はユーザーを混乱させる
|
|
193
|
+
3. **3問未満での目的確定** — Gate 1→2 は dialog_count ≥ 3 が必須。早期に「分かった」と判断しても最低3問は実施
|
|
194
|
+
4. **構造化プロンプトの要素欠落** — 6要素(PURPOSE/TARGET/SCOPE/TIMELINE/CONSTRAINTS/DELIVERABLES)全てが必要。推測要素には「(推測)」マーク付与
|
|
195
|
+
5. **set_project の呼び忘れ** — Phase 0 でプロジェクト作成後、必ず `set_project` MCP ツールでコンテキスト設定
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Eval Criteria
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
[CAPABILITY EVAL: planner]
|
|
203
|
+
Task: リサーチプロジェクトの初期化と目的探索
|
|
204
|
+
Success Criteria:
|
|
205
|
+
- [ ] プロジェクトフォルダ pjXXXXX_*_YYYYMMDD/ 作成済み
|
|
206
|
+
- [ ] manifest.yaml に true_purpose 記録済み
|
|
207
|
+
- [ ] 構造化プロンプト 6要素すべて定義
|
|
208
|
+
- [ ] 対話 3問以上実施
|
|
209
|
+
- [ ] ユーザー承認キーワード取得後にCLI実行
|
|
210
|
+
Expected Output: projects/pjXXXXX_*/manifest.yaml
|
|
211
|
+
Test Command: cat projects/pjXXXXX_*/manifest.yaml | grep true_purpose
|
|
212
|
+
```
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: shikigami-writing
|
|
3
3
|
description: |
|
|
4
4
|
レポート生成・品質保証。リサーチ結果を高品質レポートに変換、Qiita対応。
|
|
5
|
+
Use when: レポート作成、文書生成、Qiita記事執筆、品質チェック、引用整形、思考フロー可視化が必要な時。
|
|
5
6
|
license: MIT
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -389,3 +390,30 @@ ASCII図を自動検出してMermaidに変換
|
|
|
389
390
|
- **shikigami-planner**: 目的・読者の明確化
|
|
390
391
|
- **shikigami-deep-research**: 素材となる調査
|
|
391
392
|
- **shikigami-consulting-framework**: フレームワーク分析
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Gotchas
|
|
397
|
+
|
|
398
|
+
1. **既存レポートの上書き** — 既存ファイルの直接編集は禁止。修正時は必ず新バージョン `[name]-v[X.Y].md` を作成
|
|
399
|
+
2. **引用なしの事実記述** — すべての事実・数値には出典URLが必須。引用なしの主張は品質スコア減点
|
|
400
|
+
3. **Qiitaタグの同義語重複** — `JavaScript` と `JS` の同時使用は禁止。正式名称を1つのみ使用
|
|
401
|
+
4. **品質スコア 7.0 未満で提出** — Gate 4→5 は品質スコア 7/10 以上が必須。不足時は修正サイクル実行
|
|
402
|
+
5. **思考フロー記録の欠落** — ピボット(仮説修正・方針転換)を検出しているのに記録しないと、レポートの信頼性が低下
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## Eval Criteria
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
[CAPABILITY EVAL: writing]
|
|
410
|
+
Task: リサーチ結果からレポート生成
|
|
411
|
+
Success Criteria:
|
|
412
|
+
- [ ] reports/[name]-v[X.Y].md に保存済み
|
|
413
|
+
- [ ] 全事実・数値に出典URL付与
|
|
414
|
+
- [ ] 品質スコア 7/10 以上
|
|
415
|
+
- [ ] consistency_check 合格
|
|
416
|
+
- [ ] executive_sync 合格
|
|
417
|
+
Expected Output: projects/pjXXXXX_*/reports/*-v*.md
|
|
418
|
+
Test Command: ls projects/pjXXXXX_*/reports/*-v*.md
|
|
419
|
+
```
|
package/AGENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SHIKIGAMI - Deep Research Agent Skills
|
|
1
|
+
# SHIKIGAMI - Deep Research Agent Skills v2.0.0
|
|
2
2
|
|
|
3
3
|
> Knowledge for AI Coding Agents — Triggers and Actions defined with WHEN/DO syntax
|
|
4
4
|
|
|
@@ -34,7 +34,7 @@ VIOLATION = WORKFLOW FAILURE
|
|
|
34
34
|
|------|-------|
|
|
35
35
|
| Version | 1.42.0 |
|
|
36
36
|
| Agent Skills | 4 |
|
|
37
|
-
| MCP Tools |
|
|
37
|
+
| MCP Tools | 7 |
|
|
38
38
|
| Frameworks | 53 |
|
|
39
39
|
| Report Templates | 33 |
|
|
40
40
|
|
|
@@ -144,20 +144,20 @@ THEN: Call set_project(autoDetect: true) to activate the project
|
|
|
144
144
|
FORBIDDEN: Web search, using search tools, or gathering information before project activation
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
### Prohibition 3: save_research Required After
|
|
147
|
+
### Prohibition 3: save_research Required After web_search/web_fetch
|
|
148
148
|
|
|
149
|
-
**🚨🚨🚨 EVERY
|
|
149
|
+
**🚨🚨🚨 EVERY web_search/web_fetch MUST be followed by save_research 🚨🚨🚨**
|
|
150
150
|
|
|
151
151
|
```
|
|
152
|
-
WHEN: Executed
|
|
152
|
+
WHEN: Executed web_search or web_fetch Copilot CLI tool
|
|
153
153
|
DO: IMMEDIATELY call save_research MCP tool (within the SAME response, not later)
|
|
154
154
|
|
|
155
155
|
MANDATORY PATTERN - NO EXCEPTIONS:
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
web_search(...) → save_research(...) → next action
|
|
157
|
+
web_fetch(...) → save_research(...) → next action
|
|
158
158
|
|
|
159
159
|
EXAMPLE 1 (Search):
|
|
160
|
-
1.
|
|
160
|
+
1. web_search(query: "AI市場動向")
|
|
161
161
|
2. save_research(
|
|
162
162
|
content: "<検索結果の全文をここに>",
|
|
163
163
|
source: "search",
|
|
@@ -165,7 +165,7 @@ EXAMPLE 1 (Search):
|
|
|
165
165
|
)
|
|
166
166
|
|
|
167
167
|
EXAMPLE 2 (Visit):
|
|
168
|
-
1.
|
|
168
|
+
1. web_fetch(url: "https://example.com/article")
|
|
169
169
|
2. save_research(
|
|
170
170
|
content: "<ページ内容の全文をここに>",
|
|
171
171
|
source: "visit",
|
|
@@ -173,8 +173,8 @@ EXAMPLE 2 (Visit):
|
|
|
173
173
|
)
|
|
174
174
|
|
|
175
175
|
FORBIDDEN (IMMEDIATE VIOLATION):
|
|
176
|
-
- Calling
|
|
177
|
-
- Calling
|
|
176
|
+
- Calling web_search then another web_search without save_research in between
|
|
177
|
+
- Calling web_fetch then summarizing without save_research first
|
|
178
178
|
- Proceeding to analysis without saving raw data
|
|
179
179
|
- "I'll save it later" - NO! Save IMMEDIATELY
|
|
180
180
|
|
|
@@ -183,7 +183,7 @@ CONSEQUENCE: Research data will be lost, workflow corrupted, unable to cite sour
|
|
|
183
183
|
|
|
184
184
|
**CORRECT FLOW**:
|
|
185
185
|
```
|
|
186
|
-
Agent:
|
|
186
|
+
Agent: web_search(query: "...")
|
|
187
187
|
→ [結果を受信]
|
|
188
188
|
→ save_research(content: <全結果>, source: "search", query: <query>)
|
|
189
189
|
→ "検索結果を保存しました。次に..."
|
|
@@ -191,7 +191,7 @@ Agent: search(query: [...])
|
|
|
191
191
|
|
|
192
192
|
**INCORRECT FLOW (VIOLATION)**:
|
|
193
193
|
```
|
|
194
|
-
Agent:
|
|
194
|
+
Agent: web_search(query: "...")
|
|
195
195
|
→ "検索結果によると..." ← ❌ save_research を呼んでいない!
|
|
196
196
|
```
|
|
197
197
|
|
|
@@ -241,7 +241,7 @@ CONSEQUENCE: PDF content will be unreadable or lost
|
|
|
241
241
|
|
|
242
242
|
Every search/visit operation MUST follow this pattern:
|
|
243
243
|
```
|
|
244
|
-
1.
|
|
244
|
+
1. web_search(query: "...") or web_fetch(url: "...")
|
|
245
245
|
2. save_research(content: <results>, source: "search"|"visit", query: <query>)
|
|
246
246
|
```
|
|
247
247
|
|
|
@@ -567,10 +567,10 @@ WHEN: Phase 2 completed, true purpose confirmed
|
|
|
567
567
|
DO:
|
|
568
568
|
LOOP:
|
|
569
569
|
1. Think: Analyze knowledge gaps
|
|
570
|
-
2. Search:
|
|
570
|
+
2. Search: web_search(query: "Japanese query") + web_search(query: "English query")
|
|
571
571
|
3. 🚨 IMMEDIATELY: save_research(content: <FULL search_results>, source: "search", query: <query>)
|
|
572
572
|
→ Do NOT proceed without this step!
|
|
573
|
-
4. Visit:
|
|
573
|
+
4. Visit: web_fetch(url: <target_url>)
|
|
574
574
|
5. 🚨 IMMEDIATELY: save_research(content: <FULL page_content>, source: "visit", query: <url>)
|
|
575
575
|
→ Do NOT proceed without this step!
|
|
576
576
|
6. Report: Organize collected information
|
|
@@ -578,19 +578,19 @@ DO:
|
|
|
578
578
|
OUTPUT: Collected information summary, source list (URL + credibility)
|
|
579
579
|
```
|
|
580
580
|
|
|
581
|
-
**🚨 CRITICAL - save_research is MANDATORY after EVERY
|
|
581
|
+
**🚨 CRITICAL - save_research is MANDATORY after EVERY web_search/web_fetch**:
|
|
582
582
|
- Steps 3 and 5 are NOT optional
|
|
583
|
-
- You MUST call save_research IMMEDIATELY after each
|
|
583
|
+
- You MUST call save_research IMMEDIATELY after each web_search/web_fetch
|
|
584
584
|
- Do NOT analyze or summarize before saving raw data
|
|
585
585
|
- Do NOT call multiple searches without saving each one
|
|
586
586
|
|
|
587
587
|
**CORRECT Phase 3 Flow**:
|
|
588
588
|
```
|
|
589
|
-
|
|
589
|
+
web_search(query: "...")
|
|
590
590
|
↓
|
|
591
591
|
save_research(content: <全結果>, source: "search", ...) ← 必須!
|
|
592
592
|
↓
|
|
593
|
-
|
|
593
|
+
web_fetch(url: ...)
|
|
594
594
|
↓
|
|
595
595
|
save_research(content: <全内容>, source: "visit", ...) ← 必須!
|
|
596
596
|
↓
|
|
@@ -598,7 +598,7 @@ save_research(content: <全内容>, source: "visit", ...) ← 必須!
|
|
|
598
598
|
```
|
|
599
599
|
|
|
600
600
|
**Search Rules**:
|
|
601
|
-
- Parallel JP/EN search required:
|
|
601
|
+
- Parallel JP/EN search required: web_search("Japanese query") + web_search("English query")
|
|
602
602
|
- For academic searches: `.ac.jp`, `.edu`, `.gov` domains auto-prioritized
|
|
603
603
|
- On 404/5xx: Wayback Machine → Archive.today fallback
|
|
604
604
|
|
|
@@ -744,16 +744,18 @@ DO:
|
|
|
744
744
|
|------|---------|-----------------|
|
|
745
745
|
| `set_project` | Set project context | Once after Phase 0 completion |
|
|
746
746
|
| `save_prompt` | Save prompts to prompts/ | Every time user input received |
|
|
747
|
-
| `save_research` | Save research results to research/ | Every time after
|
|
748
|
-
| `search` | Web search | Phase 3 |
|
|
749
|
-
| `visit` | Extract page content | Phase 3 |
|
|
750
|
-
| `parse_file` | Parse local files | As needed |
|
|
751
|
-
| `parse_directory` | Recursively parse directories | As needed |
|
|
747
|
+
| `save_research` | Save research results to research/ | Every time after web_search/web_fetch |
|
|
752
748
|
| `embed` | Generate text embedding vectors | For semantic search |
|
|
753
749
|
| `similarity` | Calculate text similarity | For relevance determination |
|
|
754
750
|
| `semantic_search` | Semantic search | For context retrieval |
|
|
755
751
|
| `get_project` | Check current project | For debugging |
|
|
756
752
|
|
|
753
|
+
**v2.0.0 で削除されたツール(Copilot CLI に委譲):**
|
|
754
|
+
| ~~`search`~~ | → Copilot CLI `web_search` |
|
|
755
|
+
| ~~`visit`~~ | → Copilot CLI `web_fetch` |
|
|
756
|
+
| ~~`parse_file`~~ | → Copilot CLI `view` |
|
|
757
|
+
| ~~`parse_directory`~~ | → Copilot CLI `glob` + `view` |
|
|
758
|
+
|
|
757
759
|
### save_prompt type Parameter
|
|
758
760
|
|
|
759
761
|
| type | Purpose |
|
|
@@ -769,8 +771,8 @@ DO:
|
|
|
769
771
|
|
|
770
772
|
| source | Purpose | Filename Example |
|
|
771
773
|
|--------|---------|------------------|
|
|
772
|
-
| `search` |
|
|
773
|
-
| `visit` | Page visit results | `visit_domain_YYYYMMDD_HHMMSS.md` |
|
|
774
|
+
| `search` | Web search results (via Copilot CLI web_search) | `search_query_YYYYMMDD_HHMMSS.md` |
|
|
775
|
+
| `visit` | Page visit results (via Copilot CLI web_fetch) | `visit_domain_YYYYMMDD_HHMMSS.md` |
|
|
774
776
|
| `manual` | Analysis notes | `manual_topic_YYYYMMDD_HHMMSS.md` |
|
|
775
777
|
|
|
776
778
|
---
|
|
@@ -1099,7 +1101,7 @@ DO: Auto-prioritize .ac.jp, .edu, .gov domains
|
|
|
1099
1101
|
### On 404/5xx Errors
|
|
1100
1102
|
|
|
1101
1103
|
```
|
|
1102
|
-
WHEN: HTTP error occurs on
|
|
1104
|
+
WHEN: HTTP error occurs on web_fetch
|
|
1103
1105
|
DO:
|
|
1104
1106
|
1. Attempt retrieval from Wayback Machine (archive.org)
|
|
1105
1107
|
2. On failure, attempt retrieval from Archive.today
|
|
@@ -1128,5 +1130,5 @@ DO: Auto-detect Shift_JIS/EUC-JP/ISO-2022-JP and convert to UTF-8
|
|
|
1128
1130
|
|
|
1129
1131
|
---
|
|
1130
1132
|
|
|
1131
|
-
**Last Updated**: 2026-
|
|
1132
|
-
**Version**:
|
|
1133
|
+
**Last Updated**: 2026-05-18
|
|
1134
|
+
**Version**: 2.0.0
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,43 @@ All notable changes to SHIKIGAMI will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.0] - 2026-05-18
|
|
9
|
+
|
|
10
|
+
### Breaking Changes
|
|
11
|
+
|
|
12
|
+
- **Copilot CLI 重複機能の削除**: GitHub Copilot CLI の組み込み機能と重複する SHIKIGAMI 機能を削除
|
|
13
|
+
- MCP Tools: `search`(→ `web_search`)、`visit`(→ `web_fetch`)、`parse_file`(→ `view`)、`parse_directory`(→ `glob` + `view`)を削除
|
|
14
|
+
- Agent Skills: `session-manager`(→ `/session`)、`context-optimizer`(→ `/context`)、`learning-hooks`(→ `store_memory`)、`codemap`(→ explore agent)、`refactor-cleaner`(→ CLI + bash)を削除
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **AGENTS.md ワークフロー更新**: リサーチワークフロー内の `search` → `web_search`、`visit` → `web_fetch` に全面移行
|
|
19
|
+
- **MCP Server**: 14ツール → 10ツールに整理(`set_project`, `get_project`, `save_prompt`, `save_research`, `embed`, `similarity`, `semantic_search`, `branch_detect`, `branch_evaluate`, `branch_select`)
|
|
20
|
+
- **Agent Skills**: 20スキル → 15スキルに整理(リサーチ4 + 品質検証5 + MUSUBIX SDD 6)
|
|
21
|
+
- **README.md**: v2.0.0 アーキテクチャ図・スキル一覧・MCP一覧を更新、Copilot CLI 連携設計を明記
|
|
22
|
+
|
|
23
|
+
### Removed
|
|
24
|
+
|
|
25
|
+
- **MCP Tools(4ツール)**: `search`, `visit`, `parse_file`, `parse_directory`
|
|
26
|
+
- **Agent Skills(5スキル)**: `session-manager`, `context-optimizer`, `learning-hooks`, `codemap`, `refactor-cleaner`
|
|
27
|
+
|
|
28
|
+
## [1.53.0] - 2026-04-07
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **MCP Server: `alternative-source-manager.ts` の `js-yaml` 残存修正**
|
|
33
|
+
- `import * as yaml from 'js-yaml'` → `import yaml from 'yaml'` に移行
|
|
34
|
+
- `yaml.load()` → `yaml.parse()` に変更
|
|
35
|
+
- devDependencies から `@types/js-yaml` を削除
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **Harness 7軸最適化: .github/skills 全スキルの品質強化**
|
|
40
|
+
- Axis 1 (Tool Coverage): 全スキルの description を「What + Use when」パターンに最適化(LLMルーティング精度向上)
|
|
41
|
+
- Axis 4 (Memory Persistence): 全スキルに標準化された `## Gotchas` セクション追加(各5項目)
|
|
42
|
+
- Axis 5 (Eval Coverage): 全スキルに `## Eval Criteria` セクション追加(pass@k評価対応)
|
|
43
|
+
- Suite: `copilot-instructions.md` 新規作成(WHEN/DOルーティング・フェーズフロー・緊急度ルーティング・共通規約)
|
|
44
|
+
|
|
8
45
|
## [1.52.1] - 2026-02-28
|
|
9
46
|
|
|
10
47
|
### Fixed
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# SHIKIGAMI
|
|
1
|
+
# SHIKIGAMI
|
|
2
2
|
|
|
3
3
|
**GitHub Copilot Agent Skills for Deep Research & McKinsey Consulting**
|
|
4
4
|
|
|
5
|
-
マッキンゼーのコンサルティング手法(仮説駆動、MECE、ピラミッド原則、7Sフレームワーク等)を活用した深層リサーチ自動化Agent Skillsパッケージです。
|
|
5
|
+
マッキンゼーのコンサルティング手法(仮説駆動、MECE、ピラミッド原則、7Sフレームワーク等)を活用した深層リサーチ自動化Agent Skillsパッケージです。GitHub Copilot CLI と連携し、Copilot CLI の組み込み機能を活用しつつ、SHIKIGAMI独自のリサーチ・コンサルティング機能を提供します。
|
|
6
6
|
|
|
7
7
|
## 🎯 できること
|
|
8
8
|
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
- **Deep Research**: WebResearcherパラダイムに基づく反復的深層リサーチ
|
|
11
11
|
- **マッキンゼー・フレームワーク分析**: 仮説駆動、イシューツリー、7S、ピラミッド原則等を適用
|
|
12
12
|
- **高品質レポート生成**: ハルシネーション防止、ソース追跡、引用管理
|
|
13
|
-
-
|
|
14
|
-
-
|
|
13
|
+
- **マルチポップ探索**: リサーチ中の分岐点を自動検出し、複数パスを同時探索
|
|
14
|
+
- **ベクトル検索**: 過去のリサーチ資産をセマンティック検索で再利用
|
|
15
|
+
- **品質検証ループ**: Build→Type→Lint→Test→Security→Diff の6フェーズ検証
|
|
15
16
|
|
|
16
17
|
## 📦 インストール
|
|
17
18
|
|
|
@@ -22,45 +23,82 @@ npm install @nahisaho/shikigami-mck
|
|
|
22
23
|
または、リポジトリをクローン:
|
|
23
24
|
|
|
24
25
|
```bash
|
|
25
|
-
git clone https://github.com/nahisaho/SHIKIGAMI
|
|
26
|
+
git clone https://github.com/nahisaho/SHIKIGAMI.git
|
|
26
27
|
```
|
|
27
28
|
|
|
28
|
-
##
|
|
29
|
+
## 🏗️ アーキテクチャ
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
対話的目的探索・計画立案スキル。
|
|
31
|
+
SHIKIGAMI v2.0.0 は GitHub Copilot CLI の組み込み機能を最大限活用する設計に移行しました。
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- **ピラミッド原則** - 結論先行の論理構造
|
|
53
|
-
- **マッキンゼーの7S** - 組織の整合性分析
|
|
54
|
-
- **3つの地平線** - 短期・中期・長期の成長管理
|
|
55
|
-
- MECE・ロジック品質検証
|
|
56
|
-
|
|
57
|
-
### shikigami-writing
|
|
58
|
-
レポート生成・品質保証スキル。
|
|
33
|
+
```
|
|
34
|
+
┌─────────────────────────────────────────────────┐
|
|
35
|
+
│ GitHub Copilot CLI │
|
|
36
|
+
│ web_search / web_fetch / store_memory / grep │
|
|
37
|
+
│ explore / research / rubber-duck agents │
|
|
38
|
+
│ /session / /context / /compact │
|
|
39
|
+
├─────────────────────────────────────────────────┤
|
|
40
|
+
│ SHIKIGAMI v2.0.0 │
|
|
41
|
+
│ ┌──────────────┐ ┌───────────────────────┐ │
|
|
42
|
+
│ │ Agent Skills │ │ MCP Server (10 tools) │ │
|
|
43
|
+
│ │ (15 skills) │ │ embed / similarity │ │
|
|
44
|
+
│ │ │ │ semantic_search │ │
|
|
45
|
+
│ │ Research │ │ branch_detect/eval/ │ │
|
|
46
|
+
│ │ Consulting │ │ select │ │
|
|
47
|
+
│ │ Quality │ │ set/get_project │ │
|
|
48
|
+
│ │ MUSUBIX SDD │ │ save_prompt/research │ │
|
|
49
|
+
│ └──────────────┘ └───────────────────────┘ │
|
|
50
|
+
└─────────────────────────────────────────────────┘
|
|
51
|
+
```
|
|
59
52
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
## 🔧 Agent Skills(15スキル)
|
|
54
|
+
|
|
55
|
+
### リサーチ・コンサルティング
|
|
56
|
+
|
|
57
|
+
| スキル | 説明 |
|
|
58
|
+
|--------|------|
|
|
59
|
+
| `shikigami-planner` | 対話的目的探索・5 Whys・JTBD・リサーチ計画立案 |
|
|
60
|
+
| `shikigami-deep-research` | Think→Report→Actionサイクルの反復的深層リサーチ |
|
|
61
|
+
| `shikigami-consulting-framework` | マッキンゼー・フレームワーク分析(仮説駆動・7S・ピラミッド原則等) |
|
|
62
|
+
| `shikigami-writing` | レポート生成・ハルシネーション検出・引用管理 |
|
|
63
|
+
|
|
64
|
+
### 品質・検証
|
|
65
|
+
|
|
66
|
+
| スキル | 説明 |
|
|
67
|
+
|--------|------|
|
|
68
|
+
| `build-fix` | ビルドエラーを分類・反復修正(TypeScript/ESLint/依存関係) |
|
|
69
|
+
| `checkpoint` | セーフポイントの作成・復元・比較(Git統合) |
|
|
70
|
+
| `e2e-runner` | Playwrightを使用したE2Eテスト生成・実行 |
|
|
71
|
+
| `eval-harness` | pass@kメトリクスでAIコード生成品質を評価 |
|
|
72
|
+
| `verification-loop` | Build→Type→Lint→Test→Security→Diff の6フェーズ検証 |
|
|
73
|
+
|
|
74
|
+
### MUSUBIX SDD
|
|
75
|
+
|
|
76
|
+
| スキル | 説明 |
|
|
77
|
+
|--------|------|
|
|
78
|
+
| `musubix-sdd-workflow` | 10憲法条項に従った仕様駆動開発ガイド |
|
|
79
|
+
| `musubix-domain-inference` | 自動ドメイン検出・コンポーネント推論 |
|
|
80
|
+
| `musubix-code-generation` | 設計仕様からのコード生成 |
|
|
81
|
+
| `musubix-test-generation` | TDD/BDDによるテスト生成 |
|
|
82
|
+
| `musubix-adr-generation` | Architecture Decision Records作成 |
|
|
83
|
+
| `musubix-best-practices` | 学習済み17ベストプラクティスガイド |
|
|
84
|
+
| `musubix-c4-design` | C4モデル設計ドキュメント作成 |
|
|
85
|
+
| `musubix-technical-writing` | 技術ドキュメント作成 |
|
|
86
|
+
| `musubix-ears-validation` | EARS形式要件の検証・作成 |
|
|
87
|
+
| `musubix-traceability` | 要件・設計・コード・テスト間のトレーサビリティ管理 |
|
|
88
|
+
|
|
89
|
+
## 🔌 MCP Server(10ツール)
|
|
90
|
+
|
|
91
|
+
| ツール | 説明 |
|
|
92
|
+
|--------|------|
|
|
93
|
+
| `set_project` / `get_project` | リサーチプロジェクトの設定・取得 |
|
|
94
|
+
| `save_prompt` | リサーチプロンプトの保存 |
|
|
95
|
+
| `save_research` | リサーチ結果の保存 |
|
|
96
|
+
| `embed` | テキストのベクトル埋め込み生成 |
|
|
97
|
+
| `similarity` | テキスト間の類似度計算 |
|
|
98
|
+
| `semantic_search` | 過去のリサーチ資産をセマンティック検索 |
|
|
99
|
+
| `branch_detect` | リサーチ中の分岐シグナル検出 |
|
|
100
|
+
| `branch_evaluate` | 分岐パスのスコアリング・評価 |
|
|
101
|
+
| `branch_select` | 最適な探索パスの選択 |
|
|
64
102
|
|
|
65
103
|
## 📝 Prompts
|
|
66
104
|
|
|
@@ -138,9 +176,9 @@ flowchart TB
|
|
|
138
176
|
```
|
|
139
177
|
ユーザー: 「新規事業の方向性を検討したい」
|
|
140
178
|
|
|
141
|
-
SHIKIGAMI
|
|
179
|
+
SHIKIGAMI:
|
|
142
180
|
1. [Planner] 「成長の目標は何ですか?」→ 真の目的を探索
|
|
143
|
-
2. [Deep Research]
|
|
181
|
+
2. [Deep Research] 市場情報を仮説駆動で収集(web_search / web_fetch 活用)
|
|
144
182
|
3. [Framework] 3つの地平線、成長のグラニュラリティを適用
|
|
145
183
|
4. [Writing] ピラミッド原則で構造化した提言レポートを生成
|
|
146
184
|
```
|
|
@@ -150,7 +188,7 @@ SHIKIGAMI-McK:
|
|
|
150
188
|
```
|
|
151
189
|
ユーザー: 「組織の問題点を分析して」
|
|
152
190
|
|
|
153
|
-
SHIKIGAMI
|
|
191
|
+
SHIKIGAMI:
|
|
154
192
|
1. [Planner] 変革の目的・成功基準を確認
|
|
155
193
|
2. [Deep Research] 組織情報を収集
|
|
156
194
|
3. [Framework] マッキンゼーの7Sで整合性を分析
|
|
@@ -162,7 +200,7 @@ SHIKIGAMI-McK:
|
|
|
162
200
|
```
|
|
163
201
|
ユーザー: 「間接費を削減したい」
|
|
164
202
|
|
|
165
|
-
SHIKIGAMI
|
|
203
|
+
SHIKIGAMI:
|
|
166
204
|
1. [Planner] 削減目標・制約を確認
|
|
167
205
|
2. [Deep Research] 間接部門の機能・コストを調査
|
|
168
206
|
3. [Framework] OVA(間接費価値分析)を適用
|
package/mcp-server/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nahisaho/shikigami-pwc-mcp-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "SHIKIGAMI-PwC MCP Server - Deep Research tools with PwC Consulting Frameworks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -36,7 +36,6 @@
|
|
|
36
36
|
"yaml": "^2.7.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@types/js-yaml": "^4.0.9",
|
|
40
39
|
"@types/node": "^20.10.0",
|
|
41
40
|
"@types/pdf-parse": "^1.1.4",
|
|
42
41
|
"tsx": "^4.7.0",
|
package/mcp-server/src/index.ts
CHANGED
|
@@ -15,9 +15,7 @@ import {
|
|
|
15
15
|
type Tool,
|
|
16
16
|
} from '@modelcontextprotocol/sdk/types.js';
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
import { visitPage, type PageContent } from './tools/visit.js';
|
|
20
|
-
import { parseFile, parseFiles, parseDirectory, type ParsedFile } from './tools/file-parser.js';
|
|
18
|
+
// search, visit, file-parser — REMOVED in v2.0.0 (Copilot CLI に委譲)
|
|
21
19
|
import {
|
|
22
20
|
embed,
|
|
23
21
|
embedBatch,
|
|
@@ -187,117 +185,11 @@ set_projectでプロジェクトを設定してから使用。`,
|
|
|
187
185
|
required: ['content'],
|
|
188
186
|
},
|
|
189
187
|
},
|
|
190
|
-
// Search & Visit Tools
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
Deep Researchの情報収集フェーズで使用。`,
|
|
196
|
-
inputSchema: {
|
|
197
|
-
type: 'object',
|
|
198
|
-
properties: {
|
|
199
|
-
query: {
|
|
200
|
-
oneOf: [
|
|
201
|
-
{ type: 'string', description: '単一の検索クエリ' },
|
|
202
|
-
{
|
|
203
|
-
type: 'array',
|
|
204
|
-
items: { type: 'string' },
|
|
205
|
-
minItems: 1,
|
|
206
|
-
description: '検索クエリのリスト(バッチ検索)',
|
|
207
|
-
},
|
|
208
|
-
],
|
|
209
|
-
description: '検索クエリ(文字列または文字列配列)',
|
|
210
|
-
},
|
|
211
|
-
maxResults: {
|
|
212
|
-
type: 'number',
|
|
213
|
-
default: 10,
|
|
214
|
-
description: '各クエリあたりの最大結果数(デフォルト: 10)',
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
required: ['query'],
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
name: 'visit',
|
|
222
|
-
description: `Webページを訪問し、内容のテキストを抽出(Jina AI Reader使用)。
|
|
223
|
-
LLM用に最適化されたクリーンなテキストを返却。
|
|
224
|
-
Deep Researchの詳細調査フェーズで使用。`,
|
|
225
|
-
inputSchema: {
|
|
226
|
-
type: 'object',
|
|
227
|
-
properties: {
|
|
228
|
-
url: {
|
|
229
|
-
oneOf: [
|
|
230
|
-
{ type: 'string', description: '単一のURL' },
|
|
231
|
-
{
|
|
232
|
-
type: 'array',
|
|
233
|
-
items: { type: 'string' },
|
|
234
|
-
description: 'URLのリスト(バッチ訪問)',
|
|
235
|
-
},
|
|
236
|
-
],
|
|
237
|
-
description: '訪問するURL(文字列または文字列配列)',
|
|
238
|
-
},
|
|
239
|
-
goal: {
|
|
240
|
-
type: 'string',
|
|
241
|
-
description: 'このページ訪問の目的(抽出する情報の指針)',
|
|
242
|
-
},
|
|
243
|
-
},
|
|
244
|
-
required: ['url'],
|
|
245
|
-
},
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
name: 'parse_file',
|
|
249
|
-
description: `ローカルファイルを解析してテキストを抽出。
|
|
250
|
-
対応形式: テキスト(txt,md,json,yaml,csv)、コード(ts,js,py等)。
|
|
251
|
-
ドキュメント調査やコード解析に使用。`,
|
|
252
|
-
inputSchema: {
|
|
253
|
-
type: 'object',
|
|
254
|
-
properties: {
|
|
255
|
-
path: {
|
|
256
|
-
oneOf: [
|
|
257
|
-
{ type: 'string', description: '単一のファイルパス' },
|
|
258
|
-
{
|
|
259
|
-
type: 'array',
|
|
260
|
-
items: { type: 'string' },
|
|
261
|
-
description: 'ファイルパスのリスト(バッチ解析)',
|
|
262
|
-
},
|
|
263
|
-
],
|
|
264
|
-
description: '解析するファイルパス(文字列または文字列配列)',
|
|
265
|
-
},
|
|
266
|
-
},
|
|
267
|
-
required: ['path'],
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
name: 'parse_directory',
|
|
272
|
-
description: `ディレクトリ内のファイルを再帰的に解析。
|
|
273
|
-
コードベース全体の理解や、プロジェクト構造の把握に使用。
|
|
274
|
-
node_modules, .git等は自動除外。`,
|
|
275
|
-
inputSchema: {
|
|
276
|
-
type: 'object',
|
|
277
|
-
properties: {
|
|
278
|
-
path: {
|
|
279
|
-
type: 'string',
|
|
280
|
-
description: '解析するディレクトリパス',
|
|
281
|
-
},
|
|
282
|
-
extensions: {
|
|
283
|
-
type: 'array',
|
|
284
|
-
items: { type: 'string' },
|
|
285
|
-
description: '解析する拡張子リスト(例: [".ts", ".js"])',
|
|
286
|
-
},
|
|
287
|
-
exclude: {
|
|
288
|
-
type: 'array',
|
|
289
|
-
items: { type: 'string' },
|
|
290
|
-
description: '除外パターン(デフォルト: node_modules, .git, dist, build)',
|
|
291
|
-
},
|
|
292
|
-
maxFiles: {
|
|
293
|
-
type: 'number',
|
|
294
|
-
default: 100,
|
|
295
|
-
description: '最大ファイル数(デフォルト: 100)',
|
|
296
|
-
},
|
|
297
|
-
},
|
|
298
|
-
required: ['path'],
|
|
299
|
-
},
|
|
300
|
-
},
|
|
188
|
+
// Search & Visit Tools — REMOVED in v2.0.0
|
|
189
|
+
// search: Copilot CLI web_search に委譲
|
|
190
|
+
// visit: Copilot CLI web_fetch に委譲
|
|
191
|
+
// parse_file: Copilot CLI view に委譲
|
|
192
|
+
// parse_directory: Copilot CLI glob + view に委譲
|
|
301
193
|
{
|
|
302
194
|
name: 'embed',
|
|
303
195
|
description: `テキストの埋め込みベクトルを生成(Ollama/OpenAI使用)。
|
|
@@ -624,87 +516,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest)
|
|
|
624
516
|
};
|
|
625
517
|
}
|
|
626
518
|
|
|
627
|
-
//
|
|
628
|
-
|
|
629
|
-
const queryInput = args?.query as string | string[];
|
|
630
|
-
const maxResults = (args?.maxResults as number) ?? 10;
|
|
631
|
-
|
|
632
|
-
const queries = Array.isArray(queryInput) ? queryInput : [queryInput];
|
|
633
|
-
const results: Record<string, SearchResult[]> = {};
|
|
634
|
-
|
|
635
|
-
for (const query of queries) {
|
|
636
|
-
results[query] = await searchDuckDuckGo(query, maxResults);
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
return {
|
|
640
|
-
content: [
|
|
641
|
-
{
|
|
642
|
-
type: 'text',
|
|
643
|
-
text: JSON.stringify(results, null, 2),
|
|
644
|
-
},
|
|
645
|
-
],
|
|
646
|
-
};
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
case 'visit': {
|
|
650
|
-
const urlInput = args?.url as string | string[];
|
|
651
|
-
const goal = (args?.goal as string) ?? '';
|
|
652
|
-
|
|
653
|
-
const urls = Array.isArray(urlInput) ? urlInput : [urlInput];
|
|
654
|
-
const results: PageContent[] = [];
|
|
655
|
-
|
|
656
|
-
for (const url of urls) {
|
|
657
|
-
const content = await visitPage(url, goal);
|
|
658
|
-
results.push(content);
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
return {
|
|
662
|
-
content: [
|
|
663
|
-
{
|
|
664
|
-
type: 'text',
|
|
665
|
-
text: JSON.stringify(results, null, 2),
|
|
666
|
-
},
|
|
667
|
-
],
|
|
668
|
-
};
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
case 'parse_file': {
|
|
672
|
-
const pathInput = args?.path as string | string[];
|
|
673
|
-
|
|
674
|
-
const paths = Array.isArray(pathInput) ? pathInput : [pathInput];
|
|
675
|
-
const results: ParsedFile[] = await parseFiles(paths);
|
|
676
|
-
|
|
677
|
-
return {
|
|
678
|
-
content: [
|
|
679
|
-
{
|
|
680
|
-
type: 'text',
|
|
681
|
-
text: JSON.stringify(results, null, 2),
|
|
682
|
-
},
|
|
683
|
-
],
|
|
684
|
-
};
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
case 'parse_directory': {
|
|
688
|
-
const dirPath = args?.path as string;
|
|
689
|
-
const extensions = args?.extensions as string[] | undefined;
|
|
690
|
-
const exclude = args?.exclude as string[] | undefined;
|
|
691
|
-
const maxFiles = (args?.maxFiles as number) ?? 100;
|
|
692
|
-
|
|
693
|
-
const results: ParsedFile[] = await parseDirectory(dirPath, {
|
|
694
|
-
extensions,
|
|
695
|
-
exclude,
|
|
696
|
-
maxFiles,
|
|
697
|
-
});
|
|
698
|
-
|
|
699
|
-
return {
|
|
700
|
-
content: [
|
|
701
|
-
{
|
|
702
|
-
type: 'text',
|
|
703
|
-
text: JSON.stringify(results, null, 2),
|
|
704
|
-
},
|
|
705
|
-
],
|
|
706
|
-
};
|
|
707
|
-
}
|
|
519
|
+
// search, visit, parse_file, parse_directory — REMOVED in v2.0.0
|
|
520
|
+
// Copilot CLI の web_search, web_fetch, view, glob に委譲
|
|
708
521
|
|
|
709
522
|
case 'embed': {
|
|
710
523
|
const textInput = args?.text as string | string[];
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import * as fs from 'fs';
|
|
13
13
|
import * as path from 'path';
|
|
14
|
-
import
|
|
14
|
+
import yaml from 'yaml';
|
|
15
15
|
import type {
|
|
16
16
|
AlternativeSource,
|
|
17
17
|
AlternativeSourceResult,
|
|
@@ -66,7 +66,7 @@ export class AlternativeSourceManager {
|
|
|
66
66
|
if (fs.existsSync(this.configPath)) {
|
|
67
67
|
try {
|
|
68
68
|
const content = fs.readFileSync(this.configPath, 'utf-8');
|
|
69
|
-
const config = yaml.
|
|
69
|
+
const config = yaml.parse(content) as AlternativeSourcesConfig;
|
|
70
70
|
|
|
71
71
|
if (config.sources) {
|
|
72
72
|
for (const [contentType, sources] of Object.entries(config.sources)) {
|
package/package.json
CHANGED
package/scripts/cli.js
CHANGED
|
@@ -32,6 +32,7 @@ Usage: npx shikigami [command] [options]
|
|
|
32
32
|
Commands:
|
|
33
33
|
init Initialize SHIKIGAMI files in current directory
|
|
34
34
|
upgrade, update Upgrade SHIKIGAMI files (same as init --force) (v1.23.0)
|
|
35
|
+
cowork [options] Set up Microsoft Copilot Cowork MCP (v2.0.0)
|
|
35
36
|
new [name] Create a new research project
|
|
36
37
|
find-related [keyword] Find related projects by keywords (v1.7.0)
|
|
37
38
|
inherit [options] Prepare knowledge inheritance from past reports (v1.8.0)
|
|
@@ -41,6 +42,8 @@ Commands:
|
|
|
41
42
|
Examples:
|
|
42
43
|
npx shikigami init # Initialize SHIKIGAMI
|
|
43
44
|
npx shikigami upgrade # Upgrade to latest version
|
|
45
|
+
npx shikigami cowork # Set up Copilot Cowork MCP (v2.0.0)
|
|
46
|
+
npx shikigami cowork --status # Check Cowork installation status
|
|
44
47
|
npx shikigami new my-research # Create new project "my-research"
|
|
45
48
|
npx shikigami new # Create new project with auto-numbered name
|
|
46
49
|
npx shikigami find-related レアアース # Find projects related to "レアアース"
|
|
@@ -68,6 +71,13 @@ if (command === 'upgrade' || command === 'update') {
|
|
|
68
71
|
process.exit(0);
|
|
69
72
|
}
|
|
70
73
|
|
|
74
|
+
// Cowork command (v2.0.0)
|
|
75
|
+
if (command === 'cowork') {
|
|
76
|
+
const { setup } = require('./setup-cowork.js');
|
|
77
|
+
setup();
|
|
78
|
+
process.exit(0);
|
|
79
|
+
}
|
|
80
|
+
|
|
71
81
|
// New project command
|
|
72
82
|
if (command === 'new') {
|
|
73
83
|
const projectName = args[1];
|
|
@@ -89,7 +99,7 @@ if (command === 'inherit') {
|
|
|
89
99
|
}
|
|
90
100
|
|
|
91
101
|
// Unknown command
|
|
92
|
-
if (command !== 'find-related' && command !== 'inherit' && command !== 'upgrade' && command !== 'update') {
|
|
102
|
+
if (command !== 'find-related' && command !== 'inherit' && command !== 'upgrade' && command !== 'update' && command !== 'cowork') {
|
|
93
103
|
console.error(`Unknown command: ${command}`);
|
|
94
104
|
console.log('Run "npx shikigami --help" for usage information.');
|
|
95
105
|
process.exit(1);
|
package/scripts/init.js
CHANGED
|
@@ -166,6 +166,23 @@ function init() {
|
|
|
166
166
|
console.log('');
|
|
167
167
|
console.log(`📊 Summary: ${copiedCount} copied, ${overwrittenCount} overwritten, ${skippedCount} skipped`);
|
|
168
168
|
console.log('');
|
|
169
|
+
|
|
170
|
+
// Check Cowork MCP status
|
|
171
|
+
try {
|
|
172
|
+
const { isInstalled, isMcpConfigured } = require('./setup-cowork.js');
|
|
173
|
+
if (!isInstalled() || !isMcpConfigured()) {
|
|
174
|
+
console.log('🤝 Copilot Cowork MCP (M365連携):');
|
|
175
|
+
console.log(' メール・カレンダー・Teams・OneDrive にCopilot CLIからアクセス可能に');
|
|
176
|
+
console.log(' セットアップ: npx shikigami cowork');
|
|
177
|
+
console.log('');
|
|
178
|
+
} else {
|
|
179
|
+
console.log('🤝 Copilot Cowork MCP: ✅ Configured');
|
|
180
|
+
console.log('');
|
|
181
|
+
}
|
|
182
|
+
} catch {
|
|
183
|
+
// Ignore errors from cowork check
|
|
184
|
+
}
|
|
185
|
+
|
|
169
186
|
console.log('📝 Next steps:');
|
|
170
187
|
console.log(' 1. cd mcp-server && npm install && npm run build');
|
|
171
188
|
console.log(' 2. Restart VS Code to activate Agent Skills');
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SHIKIGAMI - Copilot Cowork MCP Setup
|
|
4
|
+
* Usage: npx shikigami cowork [options]
|
|
5
|
+
*
|
|
6
|
+
* Sets up Microsoft Copilot Cowork as an MCP server for GitHub Copilot CLI.
|
|
7
|
+
* Enables access to M365 data (Mail, Calendar, Teams, Files) from Copilot CLI.
|
|
8
|
+
*
|
|
9
|
+
* v2.0.0: Initial release
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
const { execSync } = require('child_process');
|
|
15
|
+
|
|
16
|
+
const COWORK_REPO = 'https://github.com/msartem/copilot_cowork_mcp.git';
|
|
17
|
+
const COPILOT_DIR = path.join(require('os').homedir(), '.copilot');
|
|
18
|
+
const PLUGINS_DIR = path.join(COPILOT_DIR, 'installed-plugins');
|
|
19
|
+
const COWORK_DIR = path.join(PLUGINS_DIR, 'copilot_cowork_mcp');
|
|
20
|
+
const MCP_CONFIG = path.join(COPILOT_DIR, '.mcp.json');
|
|
21
|
+
|
|
22
|
+
function parseArgs() {
|
|
23
|
+
const args = process.argv.slice(2).filter(a => a !== 'cowork');
|
|
24
|
+
return {
|
|
25
|
+
uninstall: args.includes('--uninstall'),
|
|
26
|
+
status: args.includes('--status'),
|
|
27
|
+
help: args.includes('--help') || args.includes('-h'),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function showHelp() {
|
|
32
|
+
console.log(`
|
|
33
|
+
🤝 SHIKIGAMI - Copilot Cowork Setup
|
|
34
|
+
|
|
35
|
+
Usage: npx shikigami cowork [options]
|
|
36
|
+
|
|
37
|
+
Options:
|
|
38
|
+
--status Check installation status
|
|
39
|
+
--uninstall Remove Cowork MCP configuration
|
|
40
|
+
-h, --help Show this help message
|
|
41
|
+
|
|
42
|
+
What is Copilot Cowork?
|
|
43
|
+
Microsoft Copilot Cowork MCP enables GitHub Copilot CLI to access
|
|
44
|
+
your M365 data: Mail, Calendar, Teams messages, and OneDrive files.
|
|
45
|
+
|
|
46
|
+
Requirements:
|
|
47
|
+
- Python 3.10+
|
|
48
|
+
- Microsoft 365 account
|
|
49
|
+
- First run requires browser sign-in (Edge/Chromium)
|
|
50
|
+
|
|
51
|
+
After setup:
|
|
52
|
+
1. Restart Copilot CLI (or start a new session)
|
|
53
|
+
2. First use will open a browser for M365 authentication
|
|
54
|
+
3. After sign-in, tokens are cached for ~90 days
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function checkPython() {
|
|
59
|
+
try {
|
|
60
|
+
const version = execSync('python3 --version 2>&1', { encoding: 'utf-8' }).trim();
|
|
61
|
+
const match = version.match(/Python (\d+)\.(\d+)/);
|
|
62
|
+
if (match && (parseInt(match[1]) > 3 || (parseInt(match[1]) === 3 && parseInt(match[2]) >= 10))) {
|
|
63
|
+
return { ok: true, version };
|
|
64
|
+
}
|
|
65
|
+
return { ok: false, version, error: 'Python 3.10+ required' };
|
|
66
|
+
} catch {
|
|
67
|
+
return { ok: false, version: null, error: 'Python 3 not found' };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function checkGit() {
|
|
72
|
+
try {
|
|
73
|
+
execSync('git --version', { encoding: 'utf-8' });
|
|
74
|
+
return true;
|
|
75
|
+
} catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function isInstalled() {
|
|
81
|
+
return fs.existsSync(path.join(COWORK_DIR, 'server.py'));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function isMcpConfigured() {
|
|
85
|
+
if (!fs.existsSync(MCP_CONFIG)) return false;
|
|
86
|
+
try {
|
|
87
|
+
const config = JSON.parse(fs.readFileSync(MCP_CONFIG, 'utf-8'));
|
|
88
|
+
return !!(config.mcpServers && config.mcpServers.cowork);
|
|
89
|
+
} catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function checkDependencies() {
|
|
95
|
+
const deps = ['fastmcp', 'requests', 'playwright'];
|
|
96
|
+
const results = {};
|
|
97
|
+
for (const dep of deps) {
|
|
98
|
+
try {
|
|
99
|
+
execSync(`python3 -c "import ${dep}" 2>&1`, { encoding: 'utf-8' });
|
|
100
|
+
results[dep] = true;
|
|
101
|
+
} catch {
|
|
102
|
+
results[dep] = false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return results;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function showStatus() {
|
|
109
|
+
console.log('');
|
|
110
|
+
console.log('🤝 Copilot Cowork MCP Status');
|
|
111
|
+
console.log('════════════════════════════');
|
|
112
|
+
console.log('');
|
|
113
|
+
|
|
114
|
+
const python = checkPython();
|
|
115
|
+
console.log(` Python: ${python.ok ? `✅ ${python.version}` : `❌ ${python.error}`}`);
|
|
116
|
+
|
|
117
|
+
const installed = isInstalled();
|
|
118
|
+
console.log(` Plugin: ${installed ? '✅ Installed' : '❌ Not installed'}`);
|
|
119
|
+
|
|
120
|
+
if (installed) {
|
|
121
|
+
const deps = checkDependencies();
|
|
122
|
+
for (const [dep, ok] of Object.entries(deps)) {
|
|
123
|
+
console.log(` ${dep.padEnd(14)} ${ok ? '✅' : '❌ Missing'}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const configured = isMcpConfigured();
|
|
128
|
+
console.log(` MCP Config: ${configured ? '✅ Configured' : '❌ Not configured'}`);
|
|
129
|
+
console.log(` Config Path: ${MCP_CONFIG}`);
|
|
130
|
+
console.log('');
|
|
131
|
+
|
|
132
|
+
if (installed && configured) {
|
|
133
|
+
console.log(' ✨ Ready to use! Restart Copilot CLI to activate.');
|
|
134
|
+
} else {
|
|
135
|
+
console.log(' Run "npx shikigami cowork" to set up.');
|
|
136
|
+
}
|
|
137
|
+
console.log('');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function installDependencies() {
|
|
141
|
+
const deps = checkDependencies();
|
|
142
|
+
const missing = Object.entries(deps).filter(([, ok]) => !ok).map(([dep]) => dep);
|
|
143
|
+
|
|
144
|
+
if (missing.length === 0) {
|
|
145
|
+
console.log(' ✅ All Python dependencies already installed');
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
console.log(` 📦 Installing: ${missing.join(', ')}...`);
|
|
150
|
+
try {
|
|
151
|
+
// Try with --break-system-packages first (Ubuntu/Debian), fallback to without
|
|
152
|
+
try {
|
|
153
|
+
execSync(`pip install --break-system-packages ${missing.join(' ')} 2>&1`, {
|
|
154
|
+
encoding: 'utf-8',
|
|
155
|
+
stdio: 'pipe',
|
|
156
|
+
});
|
|
157
|
+
} catch {
|
|
158
|
+
execSync(`pip install ${missing.join(' ')} 2>&1`, {
|
|
159
|
+
encoding: 'utf-8',
|
|
160
|
+
stdio: 'pipe',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Install Playwright browser if playwright was just installed
|
|
165
|
+
if (missing.includes('playwright')) {
|
|
166
|
+
console.log(' 🌐 Installing Playwright browser (chromium)...');
|
|
167
|
+
execSync('python3 -m playwright install chromium 2>&1', {
|
|
168
|
+
encoding: 'utf-8',
|
|
169
|
+
stdio: 'pipe',
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
console.log(' ✅ Dependencies installed');
|
|
174
|
+
return true;
|
|
175
|
+
} catch (err) {
|
|
176
|
+
console.error(` ❌ Failed to install dependencies: ${err.message}`);
|
|
177
|
+
console.log(' 💡 Try manually: pip install fastmcp requests playwright');
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function clonePlugin() {
|
|
183
|
+
if (isInstalled()) {
|
|
184
|
+
console.log(' ✅ Plugin already installed');
|
|
185
|
+
// Pull latest
|
|
186
|
+
try {
|
|
187
|
+
execSync(`git -C "${COWORK_DIR}" pull --quiet 2>&1`, {
|
|
188
|
+
encoding: 'utf-8',
|
|
189
|
+
stdio: 'pipe',
|
|
190
|
+
});
|
|
191
|
+
console.log(' 🔄 Updated to latest version');
|
|
192
|
+
} catch {
|
|
193
|
+
// Ignore pull errors
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
console.log(' 📥 Cloning Copilot Cowork MCP...');
|
|
199
|
+
try {
|
|
200
|
+
fs.mkdirSync(PLUGINS_DIR, { recursive: true });
|
|
201
|
+
execSync(`git clone "${COWORK_REPO}" "${COWORK_DIR}" 2>&1`, {
|
|
202
|
+
encoding: 'utf-8',
|
|
203
|
+
stdio: 'pipe',
|
|
204
|
+
});
|
|
205
|
+
console.log(' ✅ Plugin cloned');
|
|
206
|
+
return true;
|
|
207
|
+
} catch (err) {
|
|
208
|
+
console.error(` ❌ Failed to clone: ${err.message}`);
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function configureMcp() {
|
|
214
|
+
if (isMcpConfigured()) {
|
|
215
|
+
console.log(' ✅ MCP already configured');
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
console.log(' ⚙️ Configuring MCP server...');
|
|
220
|
+
try {
|
|
221
|
+
fs.mkdirSync(COPILOT_DIR, { recursive: true });
|
|
222
|
+
|
|
223
|
+
let config = { mcpServers: {} };
|
|
224
|
+
if (fs.existsSync(MCP_CONFIG)) {
|
|
225
|
+
try {
|
|
226
|
+
config = JSON.parse(fs.readFileSync(MCP_CONFIG, 'utf-8'));
|
|
227
|
+
if (!config.mcpServers) config.mcpServers = {};
|
|
228
|
+
} catch {
|
|
229
|
+
// Corrupted config, start fresh but keep backup
|
|
230
|
+
const backup = `${MCP_CONFIG}.bak`;
|
|
231
|
+
fs.copyFileSync(MCP_CONFIG, backup);
|
|
232
|
+
console.log(` ⚠️ Backed up corrupted config to ${backup}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
config.mcpServers.cowork = {
|
|
237
|
+
type: 'stdio',
|
|
238
|
+
command: 'python3',
|
|
239
|
+
args: [path.join(COWORK_DIR, 'server.py')],
|
|
240
|
+
env: {
|
|
241
|
+
COWORK_SHOW_THINKING: 'false',
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
fs.writeFileSync(MCP_CONFIG, JSON.stringify(config, null, 2) + '\n');
|
|
246
|
+
console.log(' ✅ MCP configured');
|
|
247
|
+
return true;
|
|
248
|
+
} catch (err) {
|
|
249
|
+
console.error(` ❌ Failed to configure MCP: ${err.message}`);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function uninstall() {
|
|
255
|
+
console.log('');
|
|
256
|
+
console.log('🤝 Uninstalling Copilot Cowork MCP...');
|
|
257
|
+
console.log('');
|
|
258
|
+
|
|
259
|
+
// Remove from MCP config
|
|
260
|
+
if (fs.existsSync(MCP_CONFIG)) {
|
|
261
|
+
try {
|
|
262
|
+
const config = JSON.parse(fs.readFileSync(MCP_CONFIG, 'utf-8'));
|
|
263
|
+
if (config.mcpServers && config.mcpServers.cowork) {
|
|
264
|
+
delete config.mcpServers.cowork;
|
|
265
|
+
fs.writeFileSync(MCP_CONFIG, JSON.stringify(config, null, 2) + '\n');
|
|
266
|
+
console.log(' ✅ Removed from MCP config');
|
|
267
|
+
} else {
|
|
268
|
+
console.log(' ⏭️ Not in MCP config');
|
|
269
|
+
}
|
|
270
|
+
} catch {
|
|
271
|
+
console.log(' ⚠️ Could not parse MCP config');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Remove plugin directory
|
|
276
|
+
if (fs.existsSync(COWORK_DIR)) {
|
|
277
|
+
fs.rmSync(COWORK_DIR, { recursive: true, force: true });
|
|
278
|
+
console.log(' ✅ Removed plugin files');
|
|
279
|
+
} else {
|
|
280
|
+
console.log(' ⏭️ Plugin not installed');
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
console.log('');
|
|
284
|
+
console.log(' ✨ Uninstall complete. Restart Copilot CLI to apply.');
|
|
285
|
+
console.log('');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function setup() {
|
|
289
|
+
const { uninstall: doUninstall, status, help } = parseArgs();
|
|
290
|
+
|
|
291
|
+
if (help) {
|
|
292
|
+
showHelp();
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (status) {
|
|
297
|
+
showStatus();
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (doUninstall) {
|
|
302
|
+
uninstall();
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
console.log('');
|
|
307
|
+
console.log('🤝 Setting up Copilot Cowork MCP');
|
|
308
|
+
console.log('═════════════════════════════════');
|
|
309
|
+
console.log('');
|
|
310
|
+
|
|
311
|
+
// Step 1: Check prerequisites
|
|
312
|
+
console.log('Step 1/4: Checking prerequisites...');
|
|
313
|
+
const python = checkPython();
|
|
314
|
+
if (!python.ok) {
|
|
315
|
+
console.error(` ❌ ${python.error}`);
|
|
316
|
+
console.log(' 💡 Install Python 3.10+: https://www.python.org/downloads/');
|
|
317
|
+
process.exit(1);
|
|
318
|
+
}
|
|
319
|
+
console.log(` ✅ ${python.version}`);
|
|
320
|
+
|
|
321
|
+
if (!checkGit()) {
|
|
322
|
+
console.error(' ❌ Git not found');
|
|
323
|
+
process.exit(1);
|
|
324
|
+
}
|
|
325
|
+
console.log(' ✅ Git available');
|
|
326
|
+
console.log('');
|
|
327
|
+
|
|
328
|
+
// Step 2: Clone plugin
|
|
329
|
+
console.log('Step 2/4: Installing plugin...');
|
|
330
|
+
if (!clonePlugin()) process.exit(1);
|
|
331
|
+
console.log('');
|
|
332
|
+
|
|
333
|
+
// Step 3: Install dependencies
|
|
334
|
+
console.log('Step 3/4: Installing dependencies...');
|
|
335
|
+
if (!installDependencies()) process.exit(1);
|
|
336
|
+
console.log('');
|
|
337
|
+
|
|
338
|
+
// Step 4: Configure MCP
|
|
339
|
+
console.log('Step 4/4: Configuring MCP...');
|
|
340
|
+
if (!configureMcp()) process.exit(1);
|
|
341
|
+
console.log('');
|
|
342
|
+
|
|
343
|
+
// Done
|
|
344
|
+
console.log('═════════════════════════════════');
|
|
345
|
+
console.log('✨ Copilot Cowork MCP setup complete!');
|
|
346
|
+
console.log('');
|
|
347
|
+
console.log('📝 Next steps:');
|
|
348
|
+
console.log(' 1. Restart Copilot CLI (or start a new session)');
|
|
349
|
+
console.log(' 2. First use will open a browser for M365 sign-in');
|
|
350
|
+
console.log(' 3. After sign-in, tokens are cached for ~90 days');
|
|
351
|
+
console.log('');
|
|
352
|
+
console.log('💡 Usage examples:');
|
|
353
|
+
console.log(' "メールの未読を要約して"');
|
|
354
|
+
console.log(' "明日の会議は?"');
|
|
355
|
+
console.log(' "Teamsで自分にhelloとメッセージ送って"');
|
|
356
|
+
console.log('');
|
|
357
|
+
console.log('🔧 Commands:');
|
|
358
|
+
console.log(' npx shikigami cowork --status # Check status');
|
|
359
|
+
console.log(' npx shikigami cowork --uninstall # Remove');
|
|
360
|
+
console.log('');
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
module.exports = { setup, showStatus, isInstalled, isMcpConfigured };
|
|
364
|
+
|
|
365
|
+
if (require.main === module) {
|
|
366
|
+
setup();
|
|
367
|
+
}
|