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.
Files changed (48) hide show
  1. package/.github/prompts/meta-prompt.md +22 -5
  2. package/.github/skills/theory-lookup.md +215 -210
  3. package/AGENTS.md +72 -1
  4. package/README.md +78 -10
  5. package/dist/cli/commands/theories.js +191 -0
  6. package/dist/cli/commands/theories.js.map +1 -0
  7. package/dist/cli/index.js +30 -59
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/theories/TheoryRepository.js +169 -0
  10. package/dist/theories/TheoryRepository.js.map +1 -0
  11. package/dist/theories/TheoryService.js +102 -0
  12. package/dist/theories/TheoryService.js.map +1 -0
  13. package/dist/theories/database.js +62 -0
  14. package/dist/theories/database.js.map +1 -0
  15. package/dist/theories/index.js +10 -0
  16. package/dist/theories/index.js.map +1 -0
  17. package/dist/theories/types.js +7 -0
  18. package/dist/theories/types.js.map +1 -0
  19. package/dist/types/cli/commands/theories.d.ts +12 -0
  20. package/dist/types/cli/commands/theories.d.ts.map +1 -0
  21. package/dist/types/theories/TheoryRepository.d.ts +52 -0
  22. package/dist/types/theories/TheoryRepository.d.ts.map +1 -0
  23. package/dist/types/theories/TheoryService.d.ts +48 -0
  24. package/dist/types/theories/TheoryService.d.ts.map +1 -0
  25. package/dist/types/theories/database.d.ts +20 -0
  26. package/dist/types/theories/database.d.ts.map +1 -0
  27. package/dist/types/theories/index.d.ts +8 -0
  28. package/dist/types/theories/index.d.ts.map +1 -0
  29. package/dist/types/theories/types.d.ts +132 -0
  30. package/dist/types/theories/types.d.ts.map +1 -0
  31. package/package.json +10 -3
  32. package/src/data/relations.json +464 -0
  33. package/src/data/theories.db +0 -0
  34. package/src/data/theories.db-shm +0 -0
  35. package/src/data/theories.db-wal +0 -0
  36. package/src/data/theories.json +6063 -0
  37. package/templates/.github/prompts/assessment.md +25 -11
  38. package/templates/.github/prompts/feedback.md +26 -11
  39. package/templates/.github/prompts/guidance.md +27 -13
  40. package/templates/.github/prompts/individual.md +28 -16
  41. package/templates/.github/prompts/lesson-plan.md +26 -18
  42. package/templates/.github/prompts/materials.md +25 -9
  43. package/templates/.github/prompts/meta-prompt.md +30 -6
  44. package/templates/.github/skills/context-manager.md +2 -2
  45. package/templates/.github/skills/orchestrator.md +14 -6
  46. package/templates/.github/skills/theory-lookup.md +215 -210
  47. package/templates/.vscode/mcp.json +35 -0
  48. package/templates/AGENTS.md +72 -1
package/README.md CHANGED
@@ -4,14 +4,15 @@
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
6
  **SHIDEN**(紫電)は、教育者のためのGitHub Copilot Agent Skillsパッケージです。
7
- TENJIN GraphRAGと連携し、175+の教育理論に基づいたエビデンスベースの教育コンテンツ作成を支援します。
7
+ **175件の教育理論を内蔵**し、エビデンスベースの教育コンテンツ作成を支援します。
8
8
 
9
9
  ## ✨ 特徴
10
10
 
11
11
  - 🎯 **6つのユースケーススキル** - 授業計画、教材、評価、個別指導、フィードバック、生活指導
12
12
  - 🧠 **メタプロンプト生成** - 曖昧なリクエストを構造化し、最適なコンテンツを生成
13
- - 📚 **TENJIN GraphRAG連携** - 175+の教育理論に基づくエビデンス引用
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は[TENJIN](https://github.com/nahisaho/tenjin)と連携し、教育理論のエビデンスを自動引用します。
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 init --force
96
-
97
- # コピー対象のプレビュー(実行なし)
98
- npx shiden init --dry-run
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 { parseArgs } from 'node:util';
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
- TENJIN MCP Serverをセットアップすると、175+の教育理論を活用できます。
57
- https://github.com/nahisaho/TENJIN
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
- try {
135
- const { values, positionals } = parseArgs({
136
- allowPositionals: true,
137
- options: {
138
- version: {
139
- type: 'boolean',
140
- short: 'v',
141
- },
142
- help: {
143
- type: 'boolean',
144
- short: 'h',
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
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