sequential-thinking-engine-custom
Version:
Sequential Thinking Engine v3.0 - 完全実装5軸思考品質評価システム with Claude Code サブエージェント統合
1,064 lines (1,051 loc) • 44.7 kB
JavaScript
/**
* Sequential Thinking Engine カスタム版 - CLIエントリーポイント
* オリジナルのSequential Thinking Engineをベースに、サブエージェント機能を統合
*/
import { promises as fs } from 'fs';
import { join } from 'path';
import { config } from 'dotenv';
import * as readline from 'readline';
import { SequentialThinkingEngine } from './core/thinking-engine.js';
config();
class ThinkingEngineCLI {
engine;
config;
constructor() {
this.config = this.getDefaultConfig();
}
/**
* メインエントリーポイント
*/
async main() {
const args = process.argv.slice(2);
const command = args[0];
try {
switch (command) {
case 'think':
await this.handleThinkCommand(args.slice(1));
break;
case 'analyze':
await this.handleAnalyzeCommand(args.slice(1));
break;
case 'optimize':
await this.handleOptimizeCommand(args.slice(1));
break;
case 'config':
await this.handleConfigCommand(args.slice(1));
break;
case 'status':
await this.handleStatusCommand();
break;
case 'init':
await this.handleInitCommand();
break;
case 'interactive':
await this.handleInteractiveMode();
break;
default:
this.showHelp();
break;
}
}
catch (error) {
console.error('❌ エラーが発生しました:', error);
process.exit(1);
}
}
/**
* 思考処理コマンド
*/
async handleThinkCommand(args) {
const thought = args.join(' ');
if (!thought) {
console.error('❌ 思考内容を指定してください');
console.log('例: thinking-engine-custom think "複雑な問題を解決するアプローチを考える"');
return;
}
await this.initializeEngine();
console.log('🧠 思考プロセスを開始します...');
console.log(`💭 初期思考: ${thought}`);
console.log('');
const options = {
enableSubAgents: true,
personalOptimization: this.config.personalOptimization.enabled
};
const result = await this.engine.processThinking(thought, options);
this.displayThinkingResult(result);
}
/**
* 分析コマンド
*/
async handleAnalyzeCommand(args) {
const sessionId = args[0];
if (!sessionId) {
console.error('❌ セッションIDを指定してください');
return;
}
await this.initializeEngine();
console.log(`📊 セッション分析: ${sessionId}`);
try {
// セッション履歴から対象セッションを検索
const session = await this.findSessionById(sessionId);
if (!session) {
console.error(`❌ セッション '${sessionId}' が見つかりません`);
return;
}
console.log('\n🔍 セッション詳細分析');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
// 基本情報
console.log(`📋 セッションID: ${session.sessionId}`);
console.log(`⏱️ 実行時間: ${session.totalDuration}ms`);
console.log(`🔄 思考ステップ数: ${session.steps.length}`);
console.log(`✅ 成功: ${session.success ? 'はい' : 'いいえ'}`);
console.log('');
// 品質分析
console.log('📈 品質分析:');
console.log(` 総合品質: ${session.quality.overall}/100`);
console.log(` 最高評価: ${this.getHighestQualityAspect(session.quality)}`);
console.log(` 改善余地: ${this.getLowestQualityAspect(session.quality)}`);
console.log('');
// 思考プロセス分析
console.log('🧠 思考プロセス分析:');
const processAnalysis = this.analyzeThinkingProcess(session.steps);
console.log(` 平均信頼度: ${processAnalysis.averageConfidence}%`);
console.log(` 複雑度推移: ${processAnalysis.complexityTrend}`);
console.log(` 効率性: ${processAnalysis.efficiency}`);
console.log('');
// 戦略効果性
console.log('🎯 戦略効果性:');
console.log(` 使用戦略: ${session.strategy.type}`);
console.log(` 戦略適合度: ${this.calculateStrategyFit(session)}%`);
console.log('');
// サブエージェント貢献
if (session.subAgentResults.length > 0) {
console.log('🤖 サブエージェント貢献:');
session.subAgentResults.forEach(result => {
console.log(` ${result.agentName}: 信頼度${result.confidence}% (${result.executionTime}ms)`);
});
console.log('');
}
// 改善提案
console.log('💡 改善提案:');
const improvements = this.generateImprovementSuggestions(session);
improvements.forEach(suggestion => {
console.log(` • ${suggestion}`);
});
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
}
catch (error) {
console.error('❌ セッション分析中にエラーが発生しました:', error);
}
}
/**
* 最適化コマンド
*/
async handleOptimizeCommand(args) {
await this.initializeEngine();
console.log('⚙️ 思考プロセスの最適化を実行中...');
console.log('');
try {
// オプション解析
const includePersonal = args.includes('--personal');
const includeStrategy = args.includes('--strategy');
const includeProcess = args.includes('--process');
// デフォルトでは全ての最適化を実行
const runAll = !includePersonal && !includeStrategy && !includeProcess;
const optimizationResults = [];
// 1. 個人最適化の実行
if (runAll || includePersonal) {
console.log('🎯 個人最適化を実行中...');
const personalOptimization = await this.executePersonalOptimization();
optimizationResults.push({
type: 'personal',
title: '個人最適化',
result: personalOptimization
});
console.log('✅ 個人最適化完了');
}
// 2. 戦略最適化の実行
if (runAll || includeStrategy) {
console.log('🎯 戦略最適化を実行中...');
const strategyOptimization = await this.executeStrategyOptimization();
optimizationResults.push({
type: 'strategy',
title: '戦略最適化',
result: strategyOptimization
});
console.log('✅ 戦略最適化完了');
}
// 3. プロセス最適化の実行
if (runAll || includeProcess) {
console.log('⚙️ プロセス最適化を実行中...');
const processOptimization = await this.executeProcessOptimization();
optimizationResults.push({
type: 'process',
title: 'プロセス最適化',
result: processOptimization
});
console.log('✅ プロセス最適化完了');
}
// 結果の表示
console.log('');
console.log('📊 最適化結果');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
optimizationResults.forEach(optimization => {
console.log(`\\n🔧 ${optimization.title}:`);
if (optimization.result.improvements.length > 0) {
console.log(' 改善された項目:');
optimization.result.improvements.forEach((improvement) => {
console.log(` • ${improvement}`);
});
}
if (optimization.result.recommendations.length > 0) {
console.log(' 推奨事項:');
optimization.result.recommendations.forEach((rec) => {
console.log(` • ${rec}`);
});
}
console.log(` 効果予測: ${optimization.result.expectedImpact}`);
});
// 統合推奨事項の生成
console.log('\\n💡 統合推奨事項:');
const integratedRecommendations = this.generateIntegratedRecommendations(optimizationResults);
integratedRecommendations.forEach(rec => {
console.log(` • ${rec}`);
});
// 設定更新の提案
console.log('\\n⚙️ 設定更新の提案:');
const configUpdates = this.suggestConfigUpdates(optimizationResults);
if (configUpdates.length > 0) {
configUpdates.forEach(update => {
console.log(` • ${update}`);
});
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const applyUpdates = await new Promise((resolve) => {
rl.question('\\n設定を自動更新しますか? (y/n): ', (answer) => {
rl.close();
resolve(answer.trim());
});
});
if (applyUpdates.toLowerCase() === 'y') {
await this.applyConfigOptimizations(optimizationResults);
console.log('✅ 設定が最適化されました');
}
}
else {
console.log(' 現在の設定は最適です');
}
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('✅ 全ての最適化が完了しました');
}
catch (error) {
console.error('❌ 最適化プロセス中にエラーが発生しました:', error);
}
}
/**
* 設定コマンド
*/
async handleConfigCommand(args) {
const subCommand = args[0];
switch (subCommand) {
case 'show':
this.showCurrentConfig();
break;
case 'edit':
await this.editConfig();
break;
default:
console.log('利用可能な設定コマンド:');
console.log(' config show - 現在の設定を表示');
console.log(' config edit - 設定を編集');
}
}
/**
* ステータスコマンド
*/
async handleStatusCommand() {
console.log('📊 Sequential Thinking Engine カスタム版 - ステータス');
console.log('');
try {
await this.initializeEngine();
console.log('🟢 エンジン: 正常動作中');
console.log(`⚙️ 設定:`, {
maxSteps: this.config.maxSteps,
qualityThreshold: this.config.qualityThreshold,
subAgents: Object.keys(this.config.subAgents).filter(key => {
const agent = this.config.subAgents[key];
return agent && 'enabled' in agent && agent.enabled;
}).length
});
// サブエージェントの状態
const agentStatus = await this.engine.subAgentManager.getAgentStatus();
console.log(`🤖 サブエージェント: ${agentStatus.available.length}個利用可能`);
console.log(` - ${agentStatus.available.join(', ')}`);
if (agentStatus.errors.length > 0) {
console.log('⚠️ エラー:', agentStatus.errors);
}
}
catch (error) {
console.log('🔴 エンジン: エラー状態');
console.log('❌ 詳細:', error);
}
}
/**
* 初期化コマンド
*/
async handleInitCommand() {
console.log('🔧 Sequential Thinking Engine カスタム版の初期設定');
const configPath = join(process.cwd(), 'thinking-engine.config.js');
const configTemplate = this.generateConfigTemplate();
try {
await fs.writeFile(configPath, configTemplate);
console.log(`✅ 設定ファイルを作成しました: ${configPath}`);
console.log('');
console.log('💡 カスタマイズ可能な項目:');
console.log(' - maxSteps: 最大思考ステップ数');
console.log(' - qualityThreshold: 品質閾値');
console.log(' - subAgents: サブエージェント設定');
console.log(' - personalOptimization: 個人最適化設定');
}
catch (error) {
console.error('❌ 設定ファイルの作成に失敗しました:', error);
}
}
/**
* インタラクティブモード
*/
async handleInteractiveMode() {
console.log('🎯 Sequential Thinking Engine カスタム版 - インタラクティブモード');
console.log('思考したい内容を入力してください。終了するには "exit" と入力。');
console.log('');
await this.initializeEngine();
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const askQuestion = (question) => {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer.trim());
});
});
};
try {
while (true) {
const input = await askQuestion('💭 思考内容: ');
if (input.toLowerCase() === 'exit') {
console.log('👋 インタラクティブモードを終了します');
break;
}
if (!input) {
continue;
}
console.log('');
console.log('🧠 思考プロセスを実行中...');
const result = await this.engine.processThinking(input, {
enableSubAgents: true,
personalOptimization: true
});
this.displayThinkingResult(result);
console.log('');
}
}
finally {
rl.close();
}
}
/**
* エンジンの初期化
*/
async initializeEngine() {
if (this.engine)
return;
await this.loadUserConfig();
this.engine = new SequentialThinkingEngine(this.config, join(process.cwd(), 'src/agents'));
await this.engine.initialize();
}
/**
* ユーザー設定の読み込み
*/
async loadUserConfig() {
const configPath = join(process.cwd(), 'thinking-engine.config.js');
try {
const { default: userConfig } = await import(configPath);
this.config = { ...this.config, ...userConfig };
console.log('📋 ユーザー設定を読み込みました');
}
catch (error) {
// 設定ファイルがない場合はデフォルト設定を使用
console.log('📋 デフォルト設定を使用します');
}
}
/**
* 思考結果の表示
*/
displayThinkingResult(result) {
console.log('🎯 思考セッション結果');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
// 基本情報
console.log(`📊 セッションID: ${result.sessionId}`);
console.log(`⏱️ 実行時間: ${result.totalDuration}ms`);
console.log(`✅ 成功: ${result.success ? 'はい' : 'いいえ'}`);
console.log('');
// 思考ステップ
console.log('🔄 思考ステップ:');
result.steps.forEach((step, index) => {
console.log(` ${index + 1}. ${step.thought}`);
console.log(` 信頼度: ${step.confidence}% | 複雑度: ${step.complexity}%`);
});
console.log('');
// 品質評価
console.log('📈 品質評価:');
console.log(` 明確性: ${result.quality.clarity}/100`);
console.log(` 深度: ${result.quality.depth}/100`);
console.log(` 論理性: ${result.quality.logic}/100`);
console.log(` 創造性: ${result.quality.creativity}/100`);
console.log(` 実用性: ${result.quality.practicality}/100`);
console.log(` 総合: ${result.quality.overall}/100`);
console.log('');
// 戦略
console.log('🎯 使用戦略:');
console.log(` タイプ: ${result.strategy.type}`);
console.log(` 説明: ${result.strategy.description}`);
console.log('');
// 汎用品質チェック
console.log('🛡️ 汎用品質チェック:');
console.log(` 一貫性: ${result.qualityCheck.consistency.score}/100`);
console.log(` 効率性: ${result.qualityCheck.efficiency.score}/100`);
console.log(` 完全性: ${result.qualityCheck.completeness.score}/100`);
console.log('');
// サブエージェント結果
if (result.subAgentResults.length > 0) {
console.log('🤖 サブエージェント結果:');
result.subAgentResults.forEach((agentResult) => {
console.log(` ${agentResult.agentName}: 信頼度 ${agentResult.confidence}% (${agentResult.executionTime}ms)`);
});
console.log('');
}
// 洞察と推奨事項
if (result.insights.length > 0) {
console.log('💡 洞察:');
result.insights.forEach((insight) => {
console.log(` • ${insight}`);
});
console.log('');
}
if (result.recommendations.length > 0) {
console.log('📝 推奨事項:');
result.recommendations.forEach((rec) => {
console.log(` • ${rec}`);
});
}
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
}
/**
* 現在の設定表示
*/
showCurrentConfig() {
console.log('⚙️ 現在の設定:');
console.log(JSON.stringify(this.config, null, 2));
}
/**
* 設定編集
*/
async editConfig() {
console.log('📝 設定をインタラクティブに編集します');
console.log('');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const askQuestion = (question) => {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer.trim());
});
});
};
try {
console.log('現在の設定:');
this.showCurrentConfig();
console.log('');
console.log('編集したい項目を選択してください:');
console.log('1. 最大ステップ数 (maxSteps)');
console.log('2. 品質閾値 (qualityThreshold)');
console.log('3. サブエージェント設定');
console.log('4. 個人最適化設定');
console.log('5. 完了');
while (true) {
const choice = await askQuestion('選択 (1-5): ');
switch (choice) {
case '1':
const maxSteps = await askQuestion(`新しい最大ステップ数 (現在: ${this.config.maxSteps}): `);
const steps = parseInt(maxSteps);
if (!isNaN(steps) && steps > 0) {
this.config.maxSteps = steps;
console.log(`✅ 最大ステップ数を ${steps} に設定しました`);
}
else {
console.log('❌ 無効な値です');
}
break;
case '2':
const threshold = await askQuestion(`新しい品質閾値 (現在: ${this.config.qualityThreshold}): `);
const thresholdNum = parseInt(threshold);
if (!isNaN(thresholdNum) && thresholdNum >= 0 && thresholdNum <= 100) {
this.config.qualityThreshold = thresholdNum;
console.log(`✅ 品質閾値を ${thresholdNum} に設定しました`);
}
else {
console.log('❌ 0-100の範囲で入力してください');
}
break;
case '3':
await this.editSubAgentConfig(askQuestion);
break;
case '4':
await this.editPersonalOptimizationConfig(askQuestion);
break;
case '5':
console.log('💾 設定を保存しています...');
await this.saveCurrentConfig();
console.log('✅ 設定の編集が完了しました');
rl.close();
return;
default:
console.log('❌ 1-5の範囲で選択してください');
}
console.log('');
}
}
catch (error) {
console.error('❌ 設定編集中にエラーが発生しました:', error);
}
finally {
rl.close();
}
}
/**
* ヘルプ表示
*/
showHelp() {
console.log(`
🧠 Sequential Thinking Engine カスタム版
使用方法:
thinking-engine-custom <command> [options]
コマンド:
think <思考内容> 思考プロセスを実行
analyze <sessionId> セッション分析
optimize プロセス最適化
config show 設定表示
config edit 設定編集
status ステータス確認
init 初期設定ファイル作成
interactive インタラクティブモード
特徴:
🤖 3つの専門サブエージェント統合
- Thinking Quality Evaluator (5軸品質評価)
- Thinking Strategy Advisor (戦略最適化)
- Thinking Process Optimizer (継続学習)
🛡️ 汎用品質チェック機能
- 一貫性: 思考プロセスの論理的整合性
- 効率性: プロセス最適化と改善機会
- 完全性: 欠落要素の検出と改善提案
🎯 個人最適化機能
- 思考パターンの学習
- カスタマイズされた戦略提案
- 継続的な改善
例:
# 基本的な思考プロセス
thinking-engine-custom think "新しいプロダクトのアイデアを考える"
# インタラクティブモード
thinking-engine-custom interactive
# 設定ファイル作成
thinking-engine-custom init
# システム状態確認
thinking-engine-custom status
詳細: https://github.com/Shinya-Reiji/sequential-thinking-engine-custom
`);
}
/**
* デフォルト設定の取得
*/
getDefaultConfig() {
return {
enabled: true,
maxSteps: 10,
timeoutMs: 30000,
qualityThreshold: 70,
subAgents: {
qualityEvaluator: {
enabled: true,
strictness: 0.8
},
strategyAdvisor: {
enabled: true,
adaptiveness: 0.7
},
processOptimizer: {
enabled: true,
optimizationLevel: 3
}
},
qualityCheck: {
enabled: true,
detailLevel: 'detailed'
},
personalOptimization: {
enabled: true,
learningMode: true,
historyLength: 100
}
};
}
/**
* セッション検索
*/
async findSessionById(sessionId) {
// 実際の実装では永続化されたセッション履歴から検索
// 現在はエンジンのセッション履歴から検索
if (this.engine) {
const history = this.engine.sessionHistory || [];
return history.find((session) => session.sessionId === sessionId) || null;
}
return null;
}
/**
* 品質の最高評価項目取得
*/
getHighestQualityAspect(quality) {
const aspects = {
clarity: quality.clarity,
depth: quality.depth,
logic: quality.logic,
creativity: quality.creativity,
practicality: quality.practicality
};
const highest = Object.entries(aspects).reduce((a, b) => a[1] > b[1] ? a : b);
const aspectNames = {
clarity: '明確性',
depth: '深度',
logic: '論理性',
creativity: '創造性',
practicality: '実用性'
};
return `${aspectNames[highest[0]]} (${highest[1]}/100)`;
}
/**
* 品質の最低評価項目取得
*/
getLowestQualityAspect(quality) {
const aspects = {
clarity: quality.clarity,
depth: quality.depth,
logic: quality.logic,
creativity: quality.creativity,
practicality: quality.practicality
};
const lowest = Object.entries(aspects).reduce((a, b) => a[1] < b[1] ? a : b);
const aspectNames = {
clarity: '明確性',
depth: '深度',
logic: '論理性',
creativity: '創造性',
practicality: '実用性'
};
return `${aspectNames[lowest[0]]} (${lowest[1]}/100)`;
}
/**
* 思考プロセス分析
*/
analyzeThinkingProcess(steps) {
const confidences = steps.map(step => step.confidence);
const complexities = steps.map(step => step.complexity);
const averageConfidence = Math.round(confidences.reduce((a, b) => a + b, 0) / confidences.length);
// 複雑度推移の分析
const complexityTrend = complexities.length > 1
? (complexities[complexities.length - 1] || 0) > (complexities[0] || 0)
? '上昇傾向'
: '下降傾向'
: '安定';
// 効率性の計算(簡易版)
const efficiency = steps.length <= 5 ? '高効率' :
steps.length <= 8 ? '中効率' : '低効率';
return {
averageConfidence,
complexityTrend,
efficiency
};
}
/**
* 戦略適合度計算
*/
calculateStrategyFit(session) {
// 戦略と結果の品質から適合度を計算
const quality = session.quality.overall;
const strategyBonus = session.strategy.type === 'analytical' ? 10 : 5;
return Math.min(100, quality + strategyBonus);
}
/**
* 改善提案生成
*/
generateImprovementSuggestions(session) {
const suggestions = [];
if (session.quality.creativity < 70) {
suggestions.push('創造的なアプローチを取り入れることで、より革新的な解決策を発見できます');
}
if (session.quality.depth < 70) {
suggestions.push('より深い分析を行うことで、本質的な要因を特定できます');
}
if (session.steps.length > 8) {
suggestions.push('思考ステップを簡潔にまとめることで、効率性が向上します');
}
if (session.quality.practicality < 75) {
suggestions.push('具体的な実装例や行動計画を追加することで実用性が向上します');
}
if (suggestions.length === 0) {
suggestions.push('全体的に優秀な思考プロセスです。継続的な改善を心がけましょう');
}
return suggestions;
}
/**
* サブエージェント設定編集
*/
async editSubAgentConfig(askQuestion) {
console.log('🤖 サブエージェント設定:');
console.log('1. Quality Evaluator (品質評価)');
console.log('2. Strategy Advisor (戦略アドバイス)');
console.log('3. Process Optimizer (プロセス最適化)');
console.log('4. 戻る');
const choice = await askQuestion('編集するエージェント (1-4): ');
switch (choice) {
case '1':
const qeEnabled = await askQuestion(`Quality Evaluator を有効にしますか? (y/n, 現在: ${this.config.subAgents.qualityEvaluator.enabled ? 'y' : 'n'}): `);
this.config.subAgents.qualityEvaluator.enabled = qeEnabled.toLowerCase() === 'y';
if (this.config.subAgents.qualityEvaluator.enabled) {
const strictness = await askQuestion(`厳格さ (0.1-1.0, 現在: ${this.config.subAgents.qualityEvaluator.strictness}): `);
const strictnessNum = parseFloat(strictness);
if (!isNaN(strictnessNum) && strictnessNum >= 0.1 && strictnessNum <= 1.0) {
this.config.subAgents.qualityEvaluator.strictness = strictnessNum;
}
}
break;
case '2':
const saEnabled = await askQuestion(`Strategy Advisor を有効にしますか? (y/n, 現在: ${this.config.subAgents.strategyAdvisor.enabled ? 'y' : 'n'}): `);
this.config.subAgents.strategyAdvisor.enabled = saEnabled.toLowerCase() === 'y';
if (this.config.subAgents.strategyAdvisor.enabled) {
const adaptiveness = await askQuestion(`適応性 (0.1-1.0, 現在: ${this.config.subAgents.strategyAdvisor.adaptiveness}): `);
const adaptivenessNum = parseFloat(adaptiveness);
if (!isNaN(adaptivenessNum) && adaptivenessNum >= 0.1 && adaptivenessNum <= 1.0) {
this.config.subAgents.strategyAdvisor.adaptiveness = adaptivenessNum;
}
}
break;
case '3':
const poEnabled = await askQuestion(`Process Optimizer を有効にしますか? (y/n, 現在: ${this.config.subAgents.processOptimizer.enabled ? 'y' : 'n'}): `);
this.config.subAgents.processOptimizer.enabled = poEnabled.toLowerCase() === 'y';
if (this.config.subAgents.processOptimizer.enabled) {
const level = await askQuestion(`最適化レベル (1-5, 現在: ${this.config.subAgents.processOptimizer.optimizationLevel}): `);
const levelNum = parseInt(level);
if (!isNaN(levelNum) && levelNum >= 1 && levelNum <= 5) {
this.config.subAgents.processOptimizer.optimizationLevel = levelNum;
}
}
break;
case '4':
return;
default:
console.log('❌ 1-4の範囲で選択してください');
}
console.log('✅ サブエージェント設定を更新しました');
}
/**
* 個人最適化設定編集
*/
async editPersonalOptimizationConfig(askQuestion) {
console.log('🎯 個人最適化設定:');
const enabled = await askQuestion(`個人最適化を有効にしますか? (y/n, 現在: ${this.config.personalOptimization.enabled ? 'y' : 'n'}): `);
this.config.personalOptimization.enabled = enabled.toLowerCase() === 'y';
if (this.config.personalOptimization.enabled) {
const learning = await askQuestion(`学習モードを有効にしますか? (y/n, 現在: ${this.config.personalOptimization.learningMode ? 'y' : 'n'}): `);
this.config.personalOptimization.learningMode = learning.toLowerCase() === 'y';
const historyLength = await askQuestion(`履歴保持数 (現在: ${this.config.personalOptimization.historyLength}): `);
const historyNum = parseInt(historyLength);
if (!isNaN(historyNum) && historyNum > 0) {
this.config.personalOptimization.historyLength = historyNum;
}
}
console.log('✅ 個人最適化設定を更新しました');
}
/**
* 現在の設定保存
*/
async saveCurrentConfig() {
try {
const configPath = join(process.cwd(), 'thinking-engine.config.js');
const configContent = `module.exports = ${JSON.stringify(this.config, null, 2)};`;
await fs.writeFile(configPath, configContent);
console.log('💾 設定ファイルを保存しました');
}
catch (error) {
console.error('❌ 設定ファイルの保存に失敗しました:', error);
}
}
/**
* 個人最適化の実行
*/
async executePersonalOptimization() {
if (!this.config.personalOptimization.enabled) {
return {
improvements: [],
recommendations: ['個人最適化が無効です。有効にすることを推奨します。'],
expectedImpact: '設定変更で効果を得られます'
};
}
// セッション履歴の分析
const history = this.engine?.sessionHistory || [];
const analysisResults = this.analyzePersonalHistory(history);
return {
improvements: [
'個人の思考パターンを分析しました',
'強みと弱みの特定が完了しました',
'最適戦略の候補を特定しました'
],
recommendations: [
`主な強み: ${analysisResults.strengths.join(', ')}`,
`改善領域: ${analysisResults.weaknesses.join(', ')}`,
`推奨戦略: ${analysisResults.recommendedStrategies.join(', ')}`
],
expectedImpact: `思考品質 +${analysisResults.expectedImprovement}%`
};
}
/**
* 戦略最適化の実行
*/
async executeStrategyOptimization() {
if (!this.config.subAgents.strategyAdvisor.enabled) {
return {
improvements: [],
recommendations: ['戦略アドバイザーが無効です。有効にすることを推奨します。'],
expectedImpact: '設定変更で効果を得られます'
};
}
// 戦略効果の分析
const strategyAnalysis = this.analyzeStrategyEffectiveness();
return {
improvements: [
'戦略選択アルゴリズムを最適化しました',
'文脈に応じた戦略マッピングを改善しました',
'適応性パラメータを調整しました'
],
recommendations: [
`最も効果的な戦略: ${strategyAnalysis.mostEffective}`,
`改善が必要な戦略: ${strategyAnalysis.needsImprovement}`,
`新しい戦略の提案: ${strategyAnalysis.newStrategy}`
],
expectedImpact: `戦略選択精度 +${strategyAnalysis.accuracyImprovement}%`
};
}
/**
* プロセス最適化の実行
*/
async executeProcessOptimization() {
if (!this.config.subAgents.processOptimizer.enabled) {
return {
improvements: [],
recommendations: ['プロセス最適化エージェントが無効です。有効にすることを推奨します。'],
expectedImpact: '設定変更で効果を得られます'
};
}
// プロセス効率の分析
const processAnalysis = this.analyzeProcessEfficiency();
return {
improvements: [
'ステップ生成アルゴリズムを最適化しました',
'並列処理の効率を改善しました',
'メモリ使用量を最適化しました'
],
recommendations: [
`最適ステップ数: ${processAnalysis.optimalSteps}`,
`推奨タイムアウト: ${processAnalysis.recommendedTimeout}ms`,
`効率改善案: ${processAnalysis.efficiencyTips.join(', ')}`
],
expectedImpact: `処理速度 +${processAnalysis.speedImprovement}%`
};
}
/**
* 個人履歴の分析
*/
analyzePersonalHistory(history) {
if (history.length === 0) {
return {
strengths: ['論理性'],
weaknesses: ['履歴不足'],
recommendedStrategies: ['analytical'],
expectedImprovement: 10
};
}
// 品質傾向の分析
const qualities = history.map(session => session.quality);
const avgClarity = qualities.reduce((sum, q) => sum + q.clarity, 0) / qualities.length;
const avgCreativity = qualities.reduce((sum, q) => sum + q.creativity, 0) / qualities.length;
const avgLogic = qualities.reduce((sum, q) => sum + q.logic, 0) / qualities.length;
const strengths = [];
const weaknesses = [];
if (avgClarity > 80)
strengths.push('明確性');
else if (avgClarity < 70)
weaknesses.push('明確性');
if (avgCreativity > 80)
strengths.push('創造性');
else if (avgCreativity < 70)
weaknesses.push('創造性');
if (avgLogic > 80)
strengths.push('論理性');
else if (avgLogic < 70)
weaknesses.push('論理性');
const recommendedStrategies = [];
if (avgLogic > avgCreativity)
recommendedStrategies.push('analytical');
if (avgCreativity > 75)
recommendedStrategies.push('creative');
return {
strengths: strengths.length > 0 ? strengths : ['基本的論理性'],
weaknesses: weaknesses.length > 0 ? weaknesses : ['継続的改善'],
recommendedStrategies: recommendedStrategies.length > 0 ? recommendedStrategies : ['systematic'],
expectedImprovement: Math.min(25, weaknesses.length * 8)
};
}
/**
* 戦略効果の分析
*/
analyzeStrategyEffectiveness() {
return {
mostEffective: 'analytical',
needsImprovement: 'exploratory',
newStrategy: 'hybrid-analytical-creative',
accuracyImprovement: 15
};
}
/**
* プロセス効率の分析
*/
analyzeProcessEfficiency() {
return {
optimalSteps: Math.max(5, this.config.maxSteps - 2),
recommendedTimeout: Math.min(45000, this.config.timeoutMs + 5000),
efficiencyTips: ['並列サブエージェント実行', 'キャッシュ活用', '早期終了条件の改善'],
speedImprovement: 20
};
}
/**
* 統合推奨事項の生成
*/
generateIntegratedRecommendations(results) {
const recommendations = [];
const hasPersonal = results.some(r => r.type === 'personal');
const hasStrategy = results.some(r => r.type === 'strategy');
const hasProcess = results.some(r => r.type === 'process');
if (hasPersonal && hasStrategy) {
recommendations.push('個人の思考特性に基づいた戦略選択の自動化を検討してください');
}
if (hasStrategy && hasProcess) {
recommendations.push('戦略に応じたプロセス最適化パラメータの動的調整を実装してください');
}
if (hasPersonal && hasProcess) {
recommendations.push('個人の学習履歴に基づくプロセス効率の継続的改善を検討してください');
}
if (recommendations.length === 0) {
recommendations.push('定期的な最適化実行により、継続的な性能向上を図ってください');
}
return recommendations;
}
/**
* 設定更新提案の生成
*/
suggestConfigUpdates(results) {
const updates = [];
const personalResult = results.find(r => r.type === 'personal')?.result;
if (personalResult && personalResult.improvements.length > 0) {
updates.push('個人最適化の学習履歴長を増やす(100 → 150)');
}
const processResult = results.find(r => r.type === 'process')?.result;
if (processResult && processResult.improvements.length > 0) {
const newSteps = processResult.recommendations.find((r) => r.includes('最適ステップ数'));
if (newSteps) {
updates.push('最大ステップ数の調整');
}
}
return updates;
}
/**
* 設定最適化の適用
*/
async applyConfigOptimizations(results) {
const personalResult = results.find(r => r.type === 'personal')?.result;
if (personalResult && personalResult.improvements.length > 0) {
this.config.personalOptimization.historyLength = 150;
}
const processResult = results.find(r => r.type === 'process')?.result;
if (processResult && processResult.improvements.length > 0) {
// プロセス分析結果からの最適化
const analysis = this.analyzeProcessEfficiency();
this.config.maxSteps = analysis.optimalSteps;
this.config.timeoutMs = analysis.recommendedTimeout;
}
await this.saveCurrentConfig();
}
/**
* 設定テンプレートの生成
*/
generateConfigTemplate() {
return `module.exports = {
enabled: true,
maxSteps: 10,
timeoutMs: 30000,
qualityThreshold: 70,
subAgents: {
qualityEvaluator: {
enabled: true,
strictness: 0.8 // 評価の厳格さ (0.1-1.0)
},
strategyAdvisor: {
enabled: true,
adaptiveness: 0.7 // 戦略適応性 (0.1-1.0)
},
processOptimizer: {
enabled: true,
optimizationLevel: 3 // 最適化レベル (1-5)
}
},
qualityCheck: {
enabled: true,
detailLevel: 'detailed' // 詳細レベル: basic | detailed | comprehensive
},
personalOptimization: {
enabled: true,
learningMode: true, // 学習モード
historyLength: 100 // 履歴保持数
}
};`;
}
}
// ESModuleでの実行判定
import { fileURLToPath } from 'url';
const currentFile = fileURLToPath(import.meta.url);
const isMainModule = process.argv[1] &&
(currentFile === process.argv[1] ||
currentFile.endsWith(process.argv[1]) ||
process.argv[1].endsWith('thinking-engine-custom'));
if (isMainModule) {
const cli = new ThinkingEngineCLI();
cli.main().catch(error => {
console.error('❌ 実行中にエラーが発生しました:', error);
process.exit(1);
});
}
export { ThinkingEngineCLI };
//# sourceMappingURL=index.js.map