shiden 0.1.0 → 0.3.2
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/prompts/meta-prompt.md +22 -5
- package/.github/skills/theory-lookup.md +215 -210
- package/AGENTS.md +72 -1
- package/README.md +78 -10
- package/dist/cli/commands/theories.js +191 -0
- package/dist/cli/commands/theories.js.map +1 -0
- package/dist/cli/index.js +30 -59
- package/dist/cli/index.js.map +1 -1
- package/dist/theories/TheoryRepository.js +169 -0
- package/dist/theories/TheoryRepository.js.map +1 -0
- package/dist/theories/TheoryService.js +102 -0
- package/dist/theories/TheoryService.js.map +1 -0
- package/dist/theories/database.js +62 -0
- package/dist/theories/database.js.map +1 -0
- package/dist/theories/index.js +10 -0
- package/dist/theories/index.js.map +1 -0
- package/dist/theories/types.js +7 -0
- package/dist/theories/types.js.map +1 -0
- package/dist/types/cli/commands/theories.d.ts +12 -0
- package/dist/types/cli/commands/theories.d.ts.map +1 -0
- package/dist/types/theories/TheoryRepository.d.ts +52 -0
- package/dist/types/theories/TheoryRepository.d.ts.map +1 -0
- package/dist/types/theories/TheoryService.d.ts +48 -0
- package/dist/types/theories/TheoryService.d.ts.map +1 -0
- package/dist/types/theories/database.d.ts +20 -0
- package/dist/types/theories/database.d.ts.map +1 -0
- package/dist/types/theories/index.d.ts +8 -0
- package/dist/types/theories/index.d.ts.map +1 -0
- package/dist/types/theories/types.d.ts +132 -0
- package/dist/types/theories/types.d.ts.map +1 -0
- package/package.json +10 -3
- package/src/data/relations.json +464 -0
- package/src/data/theories.db +0 -0
- package/src/data/theories.db-shm +0 -0
- package/src/data/theories.db-wal +0 -0
- package/src/data/theories.json +6063 -0
- package/templates/.github/prompts/assessment.md +25 -11
- package/templates/.github/prompts/feedback.md +26 -11
- package/templates/.github/prompts/guidance.md +27 -13
- package/templates/.github/prompts/individual.md +28 -16
- package/templates/.github/prompts/lesson-plan.md +26 -18
- package/templates/.github/prompts/materials.md +25 -9
- package/templates/.github/prompts/meta-prompt.md +30 -6
- package/templates/.github/skills/context-manager.md +2 -2
- package/templates/.github/skills/orchestrator.md +14 -6
- package/templates/.github/skills/theory-lookup.md +215 -210
- package/templates/.vscode/mcp.json +35 -0
- package/templates/AGENTS.md +72 -1
package/README.md
CHANGED
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
6
|
**SHIDEN**(紫電)は、教育者のためのGitHub Copilot Agent Skillsパッケージです。
|
|
7
|
-
|
|
7
|
+
**175件の教育理論を内蔵**し、エビデンスベースの教育コンテンツ作成を支援します。
|
|
8
8
|
|
|
9
9
|
## ✨ 特徴
|
|
10
10
|
|
|
11
11
|
- 🎯 **6つのユースケーススキル** - 授業計画、教材、評価、個別指導、フィードバック、生活指導
|
|
12
12
|
- 🧠 **メタプロンプト生成** - 曖昧なリクエストを構造化し、最適なコンテンツを生成
|
|
13
|
-
- 📚 **
|
|
13
|
+
- 📚 **175件の教育理論を内蔵** - FTS5 trigramで日本語全文検索対応(v0.3.0 NEW!)
|
|
14
14
|
- 🔄 **スキルオーケストレーション** - 複数スキルの自動連携
|
|
15
|
+
- 🚀 **ゼロコンフィグ** - Docker不要、インストール即利用可能(v0.3.0 NEW!)
|
|
15
16
|
|
|
16
17
|
## 🚀 クイックスタート(3ステップ)
|
|
17
18
|
|
|
@@ -40,6 +41,39 @@ VS Codeでプロジェクトを開き、GitHub Copilot Chatで以下のように
|
|
|
40
41
|
@workspace 中学2年生の数学で「一次関数」の授業計画を作成してください
|
|
41
42
|
```
|
|
42
43
|
|
|
44
|
+
## 🆕 v0.3.0: 教育理論CLI
|
|
45
|
+
|
|
46
|
+
**175件の教育理論をSQLiteデータベースとして内蔵**。Docker/外部依存なしで即座に利用可能です。
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# カテゴリ一覧
|
|
50
|
+
npx shiden theories categories
|
|
51
|
+
|
|
52
|
+
# 理論を検索(日本語対応)
|
|
53
|
+
npx shiden theories search "社会的構成主義"
|
|
54
|
+
|
|
55
|
+
# 理論の詳細を取得
|
|
56
|
+
npx shiden theories get theory-003
|
|
57
|
+
|
|
58
|
+
# 関連理論をグラフ走査
|
|
59
|
+
npx shiden theories related theory-003 -d 2
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### カテゴリ一覧
|
|
63
|
+
|
|
64
|
+
| カテゴリ | 件数 | 説明 |
|
|
65
|
+
|---------|------|------|
|
|
66
|
+
| `learning_theory` | 45 | 学習理論(構成主義、行動主義など) |
|
|
67
|
+
| `asian_education` | 27 | アジアの教育理論 |
|
|
68
|
+
| `instructional_design` | 19 | 授業設計・教授法 |
|
|
69
|
+
| `technology_enhanced` | 18 | 教育工学・ICT活用 |
|
|
70
|
+
| `modern_education` | 14 | 現代教育(21世紀型スキルなど) |
|
|
71
|
+
| `social_learning` | 11 | 社会的学習・協調学習 |
|
|
72
|
+
| `assessment` | 10 | 評価理論 |
|
|
73
|
+
| `curriculum` | 10 | カリキュラム設計 |
|
|
74
|
+
| `developmental` | 10 | 発達心理学 |
|
|
75
|
+
| `motivation` | 10 | 動機づけ理論 |
|
|
76
|
+
|
|
43
77
|
## 📖 6つのユースケーススキル
|
|
44
78
|
|
|
45
79
|
| スキル | 説明 | 例 |
|
|
@@ -51,9 +85,41 @@ VS Codeでプロジェクトを開き、GitHub Copilot Chatで以下のように
|
|
|
51
85
|
| **フィードバック** | Growth Mindsetに基づく振り返り支援 | 「この作文にフィードバックを」 |
|
|
52
86
|
| **生活指導案** | 発達段階を考慮した指導案 | 「友人関係のトラブルへの対応を」 |
|
|
53
87
|
|
|
54
|
-
## 🔗 TENJIN GraphRAG
|
|
88
|
+
## 🔗 TENJIN GraphRAG連携(オプション)
|
|
89
|
+
|
|
90
|
+
より高度な推薦・分析機能が必要な場合は、[TENJIN](https://github.com/nahisaho/TENJIN) MCP Serverと連携できます。
|
|
55
91
|
|
|
56
|
-
SHIDEN
|
|
92
|
+
> **v0.3.0 Note**: 基本的な理論検索はSHIDEN内蔵のSQLiteデータベースで動作します。TENJINはオプションです。
|
|
93
|
+
|
|
94
|
+
### TENJINセットアップ
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# TENJINリポジトリをクローン
|
|
98
|
+
git clone https://github.com/nahisaho/TENJIN.git
|
|
99
|
+
cd TENJIN
|
|
100
|
+
|
|
101
|
+
# Neo4j + ChromaDB + Redisを起動
|
|
102
|
+
docker-compose up -d
|
|
103
|
+
|
|
104
|
+
# TENJINインストール
|
|
105
|
+
uvx tenjin-server
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### SHIDEN vs TENJIN 比較
|
|
109
|
+
|
|
110
|
+
| 機能 | SHIDEN (v0.3.0) | TENJIN MCP |
|
|
111
|
+
|------|-----------------|------------|
|
|
112
|
+
| セットアップ | `npx shiden init` | Docker + Neo4j + ChromaDB |
|
|
113
|
+
| 依存関係 | **なし** | Neo4j, ChromaDB, Ollama |
|
|
114
|
+
| 理論数 | 175 | 175+ |
|
|
115
|
+
| 検索方式 | FTS5 trigram | ベクトル検索 + GraphRAG |
|
|
116
|
+
| オフライン | ✅ | ❌ |
|
|
117
|
+
| 推薦機能 | ❌ | ✅(LLM利用) |
|
|
118
|
+
| 深層分析 | ❌ | ✅(LLM利用) |
|
|
119
|
+
|
|
120
|
+
**推奨**:
|
|
121
|
+
- **教育者・素早く始めたい方**: SHIDEN のみ
|
|
122
|
+
- **高度な推薦・分析が必要な方**: SHIDEN + TENJIN
|
|
57
123
|
|
|
58
124
|
### 連携される理論の例
|
|
59
125
|
|
|
@@ -69,6 +135,8 @@ SHIDENは[TENJIN](https://github.com/nahisaho/tenjin)と連携し、教育理論
|
|
|
69
135
|
```
|
|
70
136
|
your-project/
|
|
71
137
|
├── AGENTS.md # エントリーポイント
|
|
138
|
+
├── .vscode/
|
|
139
|
+
│ └── mcp.json # TENJIN MCP設定
|
|
72
140
|
├── .github/
|
|
73
141
|
│ ├── prompts/ # スキル定義
|
|
74
142
|
│ │ ├── meta-prompt.md # メタプロンプト生成
|
|
@@ -91,11 +159,12 @@ your-project/
|
|
|
91
159
|
# Agent Skillsファイルをプロジェクトにコピー
|
|
92
160
|
npx shiden init
|
|
93
161
|
|
|
94
|
-
#
|
|
95
|
-
npx shiden
|
|
96
|
-
|
|
97
|
-
#
|
|
98
|
-
npx shiden
|
|
162
|
+
# 教育理論CLI
|
|
163
|
+
npx shiden theories categories # カテゴリ一覧
|
|
164
|
+
npx shiden theories search "キーワード" # 検索
|
|
165
|
+
npx shiden theories get <id> # 詳細取得
|
|
166
|
+
npx shiden theories list # 一覧
|
|
167
|
+
npx shiden theories related <id> # 関連理論
|
|
99
168
|
|
|
100
169
|
# バージョン表示
|
|
101
170
|
npx shiden -v
|
|
@@ -110,7 +179,6 @@ npx shiden -h
|
|
|
110
179
|
|
|
111
180
|
- Node.js >= 20.0.0
|
|
112
181
|
- VS Code + GitHub Copilot拡張機能
|
|
113
|
-
- (推奨)TENJIN MCP Server(教育理論連携用)
|
|
114
182
|
|
|
115
183
|
## 📄 ライセンス
|
|
116
184
|
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* theories コマンド実装
|
|
3
|
+
* TSK-007: CLIコマンド実装
|
|
4
|
+
* @module cli/commands/theories
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import * as TheoryService from '../../theories/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* 理論を整形して表示
|
|
11
|
+
*/
|
|
12
|
+
function formatTheory(theory, verbose = false) {
|
|
13
|
+
const lines = [];
|
|
14
|
+
lines.push(chalk.cyan(`${theory.id}: ${theory.name}`));
|
|
15
|
+
if (theory.name_ja) {
|
|
16
|
+
lines.push(chalk.gray(` ${theory.name_ja}`));
|
|
17
|
+
}
|
|
18
|
+
lines.push(chalk.yellow(` Category: ${theory.category}`));
|
|
19
|
+
if (verbose) {
|
|
20
|
+
if (theory.description) {
|
|
21
|
+
lines.push(chalk.white(` Description: ${theory.description.substring(0, 200)}...`));
|
|
22
|
+
}
|
|
23
|
+
if (theory.key_principles.length > 0) {
|
|
24
|
+
lines.push(chalk.green(` Principles: ${theory.key_principles.slice(0, 3).join(', ')}`));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return lines.join('\n');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 関連理論をツリー形式で表示
|
|
31
|
+
*/
|
|
32
|
+
function formatRelatedTree(theories) {
|
|
33
|
+
const lines = [];
|
|
34
|
+
for (const theory of theories) {
|
|
35
|
+
const indent = ' '.repeat(theory.depth);
|
|
36
|
+
const prefix = theory.depth === 1 ? '└─' : '└─';
|
|
37
|
+
lines.push(`${indent}${prefix} ${chalk.cyan(theory.id)}: ${theory.name} ` +
|
|
38
|
+
chalk.gray(`(${theory.relation_type})`));
|
|
39
|
+
}
|
|
40
|
+
return lines.join('\n');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* theories コマンドを作成
|
|
44
|
+
*/
|
|
45
|
+
export function createTheoriesCommand() {
|
|
46
|
+
const theories = new Command('theories')
|
|
47
|
+
.description('教育理論データベースの操作');
|
|
48
|
+
// theories list
|
|
49
|
+
theories
|
|
50
|
+
.command('list')
|
|
51
|
+
.description('理論一覧を表示')
|
|
52
|
+
.option('-c, --category <category>', 'カテゴリでフィルタ')
|
|
53
|
+
.option('-l, --limit <number>', '表示件数', '20')
|
|
54
|
+
.option('-o, --offset <number>', 'オフセット', '0')
|
|
55
|
+
.action((options) => {
|
|
56
|
+
const limit = parseInt(options.limit, 10);
|
|
57
|
+
const offset = parseInt(options.offset, 10);
|
|
58
|
+
const category = options.category;
|
|
59
|
+
const theories = TheoryService.list({ category, limit, offset });
|
|
60
|
+
const total = TheoryService.count();
|
|
61
|
+
console.log(chalk.bold(`\n📚 教育理論一覧 (${theories.length}/${total}件)\n`));
|
|
62
|
+
for (const theory of theories) {
|
|
63
|
+
console.log(formatTheory(theory));
|
|
64
|
+
console.log('');
|
|
65
|
+
}
|
|
66
|
+
if (category) {
|
|
67
|
+
console.log(chalk.gray(`フィルタ: category=${category}`));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// theories search
|
|
71
|
+
theories
|
|
72
|
+
.command('search <query>')
|
|
73
|
+
.description('理論を検索(FTS5 trigram)')
|
|
74
|
+
.option('-c, --category <category>', 'カテゴリでフィルタ')
|
|
75
|
+
.option('-l, --limit <number>', '表示件数', '10')
|
|
76
|
+
.option('-v, --verbose', '詳細表示')
|
|
77
|
+
.action((query, options) => {
|
|
78
|
+
const limit = parseInt(options.limit, 10);
|
|
79
|
+
const result = TheoryService.search(query, {
|
|
80
|
+
category: options.category,
|
|
81
|
+
limit,
|
|
82
|
+
});
|
|
83
|
+
console.log(chalk.bold(`\n🔍 検索結果: "${query}" (${result.total}件, ${result.durationMs}ms)\n`));
|
|
84
|
+
if (result.theories.length === 0) {
|
|
85
|
+
console.log(chalk.yellow(' 該当する理論が見つかりませんでした。'));
|
|
86
|
+
console.log(chalk.gray(' ヒント: 3文字以上のクエリを使用してください(trigramインデックス)'));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
for (const theory of result.theories) {
|
|
90
|
+
console.log(formatTheory(theory, options.verbose));
|
|
91
|
+
console.log('');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
// theories get
|
|
96
|
+
theories
|
|
97
|
+
.command('get <id>')
|
|
98
|
+
.description('理論の詳細を取得')
|
|
99
|
+
.action((id) => {
|
|
100
|
+
const theory = TheoryService.get(id);
|
|
101
|
+
if (!theory) {
|
|
102
|
+
console.log(chalk.red(`\n❌ 理論が見つかりません: ${id}`));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log(chalk.bold(`\n📖 ${theory.name}\n`));
|
|
106
|
+
if (theory.name_ja) {
|
|
107
|
+
console.log(chalk.cyan(`日本語名: ${theory.name_ja}`));
|
|
108
|
+
}
|
|
109
|
+
console.log(chalk.yellow(`カテゴリ: ${theory.category}`));
|
|
110
|
+
console.log(chalk.gray(`ID: ${theory.id}`));
|
|
111
|
+
console.log('');
|
|
112
|
+
if (theory.description) {
|
|
113
|
+
console.log(chalk.bold('説明:'));
|
|
114
|
+
console.log(` ${theory.description}`);
|
|
115
|
+
console.log('');
|
|
116
|
+
}
|
|
117
|
+
if (theory.description_ja) {
|
|
118
|
+
console.log(chalk.bold('説明(日本語):'));
|
|
119
|
+
console.log(` ${theory.description_ja}`);
|
|
120
|
+
console.log('');
|
|
121
|
+
}
|
|
122
|
+
if (theory.key_principles.length > 0) {
|
|
123
|
+
console.log(chalk.bold('主要原則:'));
|
|
124
|
+
for (const p of theory.key_principles) {
|
|
125
|
+
console.log(chalk.green(` • ${p}`));
|
|
126
|
+
}
|
|
127
|
+
console.log('');
|
|
128
|
+
}
|
|
129
|
+
if (theory.applications.length > 0) {
|
|
130
|
+
console.log(chalk.bold('応用分野:'));
|
|
131
|
+
for (const a of theory.applications) {
|
|
132
|
+
console.log(chalk.blue(` • ${a}`));
|
|
133
|
+
}
|
|
134
|
+
console.log('');
|
|
135
|
+
}
|
|
136
|
+
if (theory.strengths.length > 0) {
|
|
137
|
+
console.log(chalk.bold('強み:'));
|
|
138
|
+
for (const s of theory.strengths) {
|
|
139
|
+
console.log(chalk.green(` ✓ ${s}`));
|
|
140
|
+
}
|
|
141
|
+
console.log('');
|
|
142
|
+
}
|
|
143
|
+
if (theory.limitations.length > 0) {
|
|
144
|
+
console.log(chalk.bold('限界・制約:'));
|
|
145
|
+
for (const l of theory.limitations) {
|
|
146
|
+
console.log(chalk.red(` ✗ ${l}`));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
// theories categories
|
|
151
|
+
theories
|
|
152
|
+
.command('categories')
|
|
153
|
+
.description('カテゴリ一覧を表示')
|
|
154
|
+
.action(() => {
|
|
155
|
+
const categories = TheoryService.categories();
|
|
156
|
+
const total = categories.reduce((sum, c) => sum + c.count, 0);
|
|
157
|
+
console.log(chalk.bold(`\n📁 カテゴリ一覧 (${categories.length}カテゴリ, ${total}理論)\n`));
|
|
158
|
+
for (const cat of categories) {
|
|
159
|
+
const bar = '█'.repeat(Math.ceil(cat.count / 5));
|
|
160
|
+
console.log(` ${chalk.cyan(cat.name.padEnd(25))} ${chalk.yellow(String(cat.count).padStart(3))}件 ${chalk.gray(bar)}`);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// theories related
|
|
164
|
+
theories
|
|
165
|
+
.command('related <id>')
|
|
166
|
+
.description('関連理論を取得(グラフ走査)')
|
|
167
|
+
.option('-d, --depth <number>', '走査深さ (1-3)', '2')
|
|
168
|
+
.action((id, options) => {
|
|
169
|
+
const depth = Math.min(Math.max(parseInt(options.depth, 10), 1), 3);
|
|
170
|
+
const theory = TheoryService.get(id);
|
|
171
|
+
if (!theory) {
|
|
172
|
+
console.log(chalk.red(`\n❌ 理論が見つかりません: ${id}`));
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const related = TheoryService.related(id, { depth });
|
|
176
|
+
console.log(chalk.bold(`\n🔗 関連理論: ${theory.name}\n`));
|
|
177
|
+
console.log(chalk.gray(` 起点: ${id} (深さ: ${depth})`));
|
|
178
|
+
console.log('');
|
|
179
|
+
if (related.length === 0) {
|
|
180
|
+
console.log(chalk.yellow(' 関連理論が見つかりませんでした。'));
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.log(formatRelatedTree(related));
|
|
184
|
+
console.log('');
|
|
185
|
+
console.log(chalk.gray(` ${related.length}件の関連理論`));
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
return theories;
|
|
189
|
+
}
|
|
190
|
+
export default createTheoriesCommand;
|
|
191
|
+
//# sourceMappingURL=theories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theories.js","sourceRoot":"","sources":["../../../src/cli/commands/theories.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* SHIDEN CLI
|
|
3
3
|
* @module cli
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { Command } from 'commander';
|
|
6
6
|
import * as fs from 'node:fs';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { createTheoriesCommand } from './commands/theories.js';
|
|
9
10
|
// ESM でのディレクトリパス取得
|
|
10
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
12
|
const __dirname = path.dirname(__filename);
|
|
@@ -20,23 +21,6 @@ function getVersion() {
|
|
|
20
21
|
return '1.0.0';
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
// ヘルプメッセージ
|
|
24
|
-
const HELP_MESSAGE = `
|
|
25
|
-
🎓 SHIDEN - 教育者向けGitHub Copilot Agent Skills
|
|
26
|
-
|
|
27
|
-
Usage: npx shiden <command> [options]
|
|
28
|
-
|
|
29
|
-
Commands:
|
|
30
|
-
init [path] プロジェクトにSHIDEN Agent Skillsを初期化
|
|
31
|
-
-v, --version バージョンを表示
|
|
32
|
-
-h, --help このヘルプメッセージを表示
|
|
33
|
-
|
|
34
|
-
Examples:
|
|
35
|
-
npx shiden init 現在のディレクトリに初期化
|
|
36
|
-
npx shiden init ./myproject 指定ディレクトリに初期化
|
|
37
|
-
|
|
38
|
-
詳細: https://github.com/nahisaho/SHIDEN
|
|
39
|
-
`;
|
|
40
24
|
// 成功メッセージ
|
|
41
25
|
function getSuccessMessage(targetDir) {
|
|
42
26
|
return `
|
|
@@ -46,6 +30,7 @@ function getSuccessMessage(targetDir) {
|
|
|
46
30
|
${targetDir}/AGENTS.md - Agent Skills エントリーポイント
|
|
47
31
|
${targetDir}/.github/prompts/ - 教育スキルプロンプト
|
|
48
32
|
${targetDir}/.github/skills/ - 統合スキル
|
|
33
|
+
${targetDir}/.vscode/mcp.json - TENJIN MCP設定
|
|
49
34
|
|
|
50
35
|
🚀 次のステップ:
|
|
51
36
|
1. VS Code で ${targetDir} を開く
|
|
@@ -53,8 +38,11 @@ function getSuccessMessage(targetDir) {
|
|
|
53
38
|
3. @workspace に質問する(例: 「中学2年の数学の授業計画を作成して」)
|
|
54
39
|
|
|
55
40
|
💡 TENJIN GraphRAG 連携(推奨):
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
175+の教育理論を活用するには、以下のセットアップが必要です:
|
|
42
|
+
1. Docker で Neo4j + ChromaDB を起動
|
|
43
|
+
2. uvx または pip で TENJIN をインストール
|
|
44
|
+
3. .vscode/mcp.json の環境変数を調整
|
|
45
|
+
詳細: https://github.com/nahisaho/TENJIN
|
|
58
46
|
|
|
59
47
|
📖 ドキュメント: https://github.com/nahisaho/SHIDEN
|
|
60
48
|
`;
|
|
@@ -122,6 +110,13 @@ function initCommand(targetPath = '.') {
|
|
|
122
110
|
copyDirRecursive(skillsSrc, skillsDest);
|
|
123
111
|
console.log(` ✓ .github/skills/`);
|
|
124
112
|
}
|
|
113
|
+
// .vscode/mcp.json をコピー(TENJIN MCP設定)
|
|
114
|
+
const mcpSrc = path.join(templatesDir, '.vscode', 'mcp.json');
|
|
115
|
+
const mcpDest = path.join(targetDir, '.vscode', 'mcp.json');
|
|
116
|
+
if (fs.existsSync(mcpSrc)) {
|
|
117
|
+
copyFile(mcpSrc, mcpDest);
|
|
118
|
+
console.log(` ✓ .vscode/mcp.json`);
|
|
119
|
+
}
|
|
125
120
|
console.log(getSuccessMessage(targetDir));
|
|
126
121
|
}
|
|
127
122
|
catch (error) {
|
|
@@ -131,45 +126,21 @@ function initCommand(targetPath = '.') {
|
|
|
131
126
|
}
|
|
132
127
|
// メイン処理
|
|
133
128
|
function main() {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if (values.version) {
|
|
150
|
-
console.log(`shiden v${getVersion()}`);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
// ヘルプ表示
|
|
154
|
-
if (values.help || positionals.length === 0) {
|
|
155
|
-
console.log(HELP_MESSAGE);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
const command = positionals[0];
|
|
159
|
-
switch (command) {
|
|
160
|
-
case 'init':
|
|
161
|
-
initCommand(positionals[1]);
|
|
162
|
-
break;
|
|
163
|
-
default:
|
|
164
|
-
console.error(`\n❌ 不明なコマンド: ${command}`);
|
|
165
|
-
console.log(HELP_MESSAGE);
|
|
166
|
-
process.exit(1);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
console.error('エラーが発生しました:', error);
|
|
171
|
-
process.exit(1);
|
|
172
|
-
}
|
|
129
|
+
const program = new Command();
|
|
130
|
+
program
|
|
131
|
+
.name('shiden')
|
|
132
|
+
.description('🎓 SHIDEN - 教育者向けGitHub Copilot Agent Skills')
|
|
133
|
+
.version(getVersion(), '-v, --version', 'バージョンを表示');
|
|
134
|
+
// init コマンド
|
|
135
|
+
program
|
|
136
|
+
.command('init [path]')
|
|
137
|
+
.description('プロジェクトにSHIDEN Agent Skillsを初期化')
|
|
138
|
+
.action((targetPath) => {
|
|
139
|
+
initCommand(targetPath);
|
|
140
|
+
});
|
|
141
|
+
// theories サブコマンドを追加
|
|
142
|
+
program.addCommand(createTheoriesCommand());
|
|
143
|
+
program.parse();
|
|
173
144
|
}
|
|
174
145
|
main();
|
|
175
146
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 教育理論データアクセス層
|
|
3
|
+
* TSK-005: TheoryRepository実装
|
|
4
|
+
* @module theories/TheoryRepository
|
|
5
|
+
*/
|
|
6
|
+
import { getDatabase } from './database.js';
|
|
7
|
+
/**
|
|
8
|
+
* データベース行をTheoryに変換
|
|
9
|
+
*/
|
|
10
|
+
function rowToTheory(row) {
|
|
11
|
+
return {
|
|
12
|
+
id: row.id,
|
|
13
|
+
name: row.name,
|
|
14
|
+
name_ja: row.name_ja,
|
|
15
|
+
category: row.category,
|
|
16
|
+
description: row.description,
|
|
17
|
+
description_ja: row.description_ja,
|
|
18
|
+
theorists: JSON.parse(row.theorists || '[]'),
|
|
19
|
+
priority: row.priority,
|
|
20
|
+
key_principles: JSON.parse(row.key_principles || '[]'),
|
|
21
|
+
applications: JSON.parse(row.applications || '[]'),
|
|
22
|
+
strengths: JSON.parse(row.strengths || '[]'),
|
|
23
|
+
limitations: JSON.parse(row.limitations || '[]'),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 関連理論行をRelatedTheoryに変換
|
|
28
|
+
*/
|
|
29
|
+
function rowToRelatedTheory(row) {
|
|
30
|
+
return {
|
|
31
|
+
...rowToTheory(row),
|
|
32
|
+
depth: row.depth,
|
|
33
|
+
relation_type: row.relation_type,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* FTS5 trigram検索
|
|
38
|
+
* @param query 検索クエリ(3文字以上推奨)
|
|
39
|
+
* @param limit 取得件数上限
|
|
40
|
+
* @returns マッチした理論リスト
|
|
41
|
+
*/
|
|
42
|
+
export function searchFTS(query, limit = 20) {
|
|
43
|
+
const db = getDatabase();
|
|
44
|
+
// 検索クエリが短い場合はLIKE検索にフォールバック
|
|
45
|
+
if (query.length < 3) {
|
|
46
|
+
const stmt = db.prepare(`
|
|
47
|
+
SELECT * FROM theories
|
|
48
|
+
WHERE name LIKE ? OR name_ja LIKE ? OR description LIKE ? OR description_ja LIKE ?
|
|
49
|
+
LIMIT ?
|
|
50
|
+
`);
|
|
51
|
+
const pattern = `%${query}%`;
|
|
52
|
+
const rows = stmt.all(pattern, pattern, pattern, pattern, limit);
|
|
53
|
+
return rows.map(rowToTheory);
|
|
54
|
+
}
|
|
55
|
+
// FTS5 trigram検索
|
|
56
|
+
const stmt = db.prepare(`
|
|
57
|
+
SELECT t.*, bm25(theories_fts) as score
|
|
58
|
+
FROM theories_fts
|
|
59
|
+
JOIN theories t ON theories_fts.rowid = t.rowid
|
|
60
|
+
WHERE theories_fts MATCH ?
|
|
61
|
+
ORDER BY score
|
|
62
|
+
LIMIT ?
|
|
63
|
+
`);
|
|
64
|
+
const rows = stmt.all(query, limit);
|
|
65
|
+
return rows.map(rowToTheory);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* IDで理論を取得
|
|
69
|
+
* @param id 理論ID (e.g., "theory-001")
|
|
70
|
+
* @returns 理論またはnull
|
|
71
|
+
*/
|
|
72
|
+
export function findById(id) {
|
|
73
|
+
const db = getDatabase();
|
|
74
|
+
const stmt = db.prepare('SELECT * FROM theories WHERE id = ?');
|
|
75
|
+
const row = stmt.get(id);
|
|
76
|
+
return row ? rowToTheory(row) : null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 全理論を取得
|
|
80
|
+
* @param options フィルタオプション
|
|
81
|
+
* @returns 理論リスト
|
|
82
|
+
*/
|
|
83
|
+
export function findAll(options) {
|
|
84
|
+
const db = getDatabase();
|
|
85
|
+
const { category, limit = 100, offset = 0 } = options || {};
|
|
86
|
+
let sql = 'SELECT * FROM theories';
|
|
87
|
+
const params = [];
|
|
88
|
+
if (category) {
|
|
89
|
+
sql += ' WHERE category = ?';
|
|
90
|
+
params.push(category);
|
|
91
|
+
}
|
|
92
|
+
sql += ' ORDER BY priority DESC, name ASC LIMIT ? OFFSET ?';
|
|
93
|
+
params.push(limit, offset);
|
|
94
|
+
const stmt = db.prepare(sql);
|
|
95
|
+
const rows = stmt.all(...params);
|
|
96
|
+
return rows.map(rowToTheory);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* カテゴリ別件数を取得
|
|
100
|
+
* @returns カテゴリと件数のリスト
|
|
101
|
+
*/
|
|
102
|
+
export function countByCategory() {
|
|
103
|
+
const db = getDatabase();
|
|
104
|
+
const stmt = db.prepare(`
|
|
105
|
+
SELECT category as name, COUNT(*) as count
|
|
106
|
+
FROM theories
|
|
107
|
+
GROUP BY category
|
|
108
|
+
ORDER BY count DESC
|
|
109
|
+
`);
|
|
110
|
+
return stmt.all();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 総件数を取得
|
|
114
|
+
*/
|
|
115
|
+
export function count() {
|
|
116
|
+
const db = getDatabase();
|
|
117
|
+
const stmt = db.prepare('SELECT COUNT(*) as count FROM theories');
|
|
118
|
+
const result = stmt.get();
|
|
119
|
+
return result.count;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* WITH RECURSIVE CTEによるグラフ走査
|
|
123
|
+
* @param id 起点となる理論ID
|
|
124
|
+
* @param maxDepth 走査深さ(最大3)
|
|
125
|
+
* @returns 関連理論リスト
|
|
126
|
+
*/
|
|
127
|
+
export function traverseRelated(id, maxDepth = 2) {
|
|
128
|
+
const db = getDatabase();
|
|
129
|
+
const depth = Math.min(Math.max(maxDepth, 1), 3); // 1-3の範囲に制限
|
|
130
|
+
const stmt = db.prepare(`
|
|
131
|
+
WITH RECURSIVE related_graph AS (
|
|
132
|
+
-- 起点
|
|
133
|
+
SELECT target_id, relation_type, 1 as depth
|
|
134
|
+
FROM theory_relations
|
|
135
|
+
WHERE source_id = ?
|
|
136
|
+
|
|
137
|
+
UNION ALL
|
|
138
|
+
|
|
139
|
+
-- 再帰
|
|
140
|
+
SELECT r.target_id, r.relation_type, rg.depth + 1
|
|
141
|
+
FROM theory_relations r
|
|
142
|
+
INNER JOIN related_graph rg ON r.source_id = rg.target_id
|
|
143
|
+
WHERE rg.depth < ?
|
|
144
|
+
)
|
|
145
|
+
SELECT DISTINCT t.*, rg.depth, rg.relation_type
|
|
146
|
+
FROM related_graph rg
|
|
147
|
+
JOIN theories t ON t.id = rg.target_id
|
|
148
|
+
ORDER BY rg.depth, t.name
|
|
149
|
+
`);
|
|
150
|
+
const rows = stmt.all(id, depth);
|
|
151
|
+
return rows.map(rowToRelatedTheory);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 特定の関係タイプで関連する理論を取得
|
|
155
|
+
* @param id 理論ID
|
|
156
|
+
* @param relationType 関係タイプ
|
|
157
|
+
*/
|
|
158
|
+
export function findRelatedByType(id, relationType) {
|
|
159
|
+
const db = getDatabase();
|
|
160
|
+
const stmt = db.prepare(`
|
|
161
|
+
SELECT t.* FROM theories t
|
|
162
|
+
JOIN theory_relations r ON t.id = r.target_id
|
|
163
|
+
WHERE r.source_id = ? AND r.relation_type = ?
|
|
164
|
+
ORDER BY t.name
|
|
165
|
+
`);
|
|
166
|
+
const rows = stmt.all(id, relationType);
|
|
167
|
+
return rows.map(rowToTheory);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=TheoryRepository.js.map
|