shiden 0.1.0 → 0.3.1
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/theory-lookup.md +215 -210
- 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 +8 -1
- 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
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TheoryRepository.js","sourceRoot":"","sources":["../../src/theories/TheoryRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 教育理論サービス層
|
|
3
|
+
* TSK-006: TheoryService実装
|
|
4
|
+
* @module theories/TheoryService
|
|
5
|
+
*/
|
|
6
|
+
import * as repo from './TheoryRepository.js';
|
|
7
|
+
/**
|
|
8
|
+
* 理論を検索(FTS5 trigram)
|
|
9
|
+
* @param query 検索クエリ
|
|
10
|
+
* @param options 検索オプション
|
|
11
|
+
* @returns 検索結果
|
|
12
|
+
*/
|
|
13
|
+
export function search(query, options) {
|
|
14
|
+
const start = performance.now();
|
|
15
|
+
const { category, limit = 20 } = options || {};
|
|
16
|
+
let theories = repo.searchFTS(query, limit * 2); // カテゴリフィルタ用に多めに取得
|
|
17
|
+
if (category) {
|
|
18
|
+
theories = theories.filter((t) => t.category === category);
|
|
19
|
+
}
|
|
20
|
+
theories = theories.slice(0, limit);
|
|
21
|
+
const durationMs = performance.now() - start;
|
|
22
|
+
return {
|
|
23
|
+
theories,
|
|
24
|
+
total: theories.length,
|
|
25
|
+
query,
|
|
26
|
+
durationMs: Math.round(durationMs * 100) / 100,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* IDで理論を取得
|
|
31
|
+
* @param id 理論ID
|
|
32
|
+
* @returns 理論またはnull
|
|
33
|
+
*/
|
|
34
|
+
export function get(id) {
|
|
35
|
+
return repo.findById(id);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 全理論を取得(ページネーション対応)
|
|
39
|
+
* @param options 取得オプション
|
|
40
|
+
* @returns 理論リスト
|
|
41
|
+
*/
|
|
42
|
+
export function list(options) {
|
|
43
|
+
return repo.findAll(options);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* カテゴリ一覧を取得
|
|
47
|
+
* @returns カテゴリと件数のリスト
|
|
48
|
+
*/
|
|
49
|
+
export function categories() {
|
|
50
|
+
return repo.countByCategory();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 関連理論を取得(グラフ走査)
|
|
54
|
+
* @param id 起点となる理論ID
|
|
55
|
+
* @param options 走査オプション
|
|
56
|
+
* @returns 関連理論リスト
|
|
57
|
+
*/
|
|
58
|
+
export function related(id, options) {
|
|
59
|
+
const { depth = 2, relationTypes } = options || {};
|
|
60
|
+
let results = repo.traverseRelated(id, depth);
|
|
61
|
+
if (relationTypes && relationTypes.length > 0) {
|
|
62
|
+
results = results.filter((r) => relationTypes.includes(r.relation_type));
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 総件数を取得
|
|
68
|
+
*/
|
|
69
|
+
export function count() {
|
|
70
|
+
return repo.count();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 複数クエリで検索(OR検索)
|
|
74
|
+
* @param queries 検索クエリ配列
|
|
75
|
+
* @param options 検索オプション
|
|
76
|
+
*/
|
|
77
|
+
export function searchMultiple(queries, options) {
|
|
78
|
+
const start = performance.now();
|
|
79
|
+
const { category, limit = 20 } = options || {};
|
|
80
|
+
const theoriesMap = new Map();
|
|
81
|
+
for (const query of queries) {
|
|
82
|
+
const results = repo.searchFTS(query, limit);
|
|
83
|
+
for (const theory of results) {
|
|
84
|
+
if (!theoriesMap.has(theory.id)) {
|
|
85
|
+
theoriesMap.set(theory.id, theory);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
let theories = Array.from(theoriesMap.values());
|
|
90
|
+
if (category) {
|
|
91
|
+
theories = theories.filter((t) => t.category === category);
|
|
92
|
+
}
|
|
93
|
+
theories = theories.slice(0, limit);
|
|
94
|
+
const durationMs = performance.now() - start;
|
|
95
|
+
return {
|
|
96
|
+
theories,
|
|
97
|
+
total: theories.length,
|
|
98
|
+
query: queries.join(' OR '),
|
|
99
|
+
durationMs: Math.round(durationMs * 100) / 100,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=TheoryService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TheoryService.js","sourceRoot":"","sources":["../../src/theories/TheoryService.ts"],"names":[],"mappings":"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"}
|