114 lines
4.0 KiB
JavaScript
Executable File
114 lines
4.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// 標準入力からJSONを読み取る
|
||
let inputData = '';
|
||
|
||
process.stdin.on('data', (chunk) => {
|
||
inputData += chunk;
|
||
});
|
||
|
||
process.stdin.on('end', () => {
|
||
try {
|
||
const hookData = JSON.parse(inputData);
|
||
const source = hookData.source || 'unknown';
|
||
|
||
// sourceに応じたメッセージを構築
|
||
const lines = [
|
||
'═══════════════════════════════════════════'
|
||
];
|
||
|
||
switch (source) {
|
||
case 'startup':
|
||
lines.push([
|
||
'📋 **Session Setup - 新規セッション開始**',
|
||
'',
|
||
'作業環境をセットアップします。',
|
||
'TodoWriteツールで以下のタスクをリストの最初に追加してください:',
|
||
'',
|
||
'1. mode_list()を実行して利用可能なモードを確認する',
|
||
'2. 適切なモードを有効化する',
|
||
'',
|
||
'これらは作業開始前の準備ステップです。',
|
||
].join('\n'));
|
||
break;
|
||
|
||
case 'resume':
|
||
lines.push([
|
||
'📋 **Session Setup - セッション再開**',
|
||
'',
|
||
'中断していたセッションを再開します。',
|
||
'TodoWriteツールで以下のタスクをリストの最初に追加してください:',
|
||
'',
|
||
'1. コンテキストから最新のアクティブモードリストを検索する',
|
||
'2. mode_set()を実行してモードをMCPメモリに復元する',
|
||
'',
|
||
'これらは作業再開前の準備ステップです。',
|
||
].join('\n'));
|
||
break;
|
||
|
||
case 'clear':
|
||
lines.push([
|
||
'📋 **Session Setup - モードクリア後**',
|
||
'',
|
||
'アシスタント動作モードがクリアされました。',
|
||
'TodoWriteツールで以下のタスクをリストの最初に追加してください:',
|
||
'',
|
||
'1. mode_show()を実行してモードドキュメントを再読み込みする',
|
||
'',
|
||
'これは作業継続前の準備ステップです。',
|
||
].join('\n'));
|
||
break;
|
||
|
||
case 'compact':
|
||
lines.push([
|
||
'📋 **Session Setup - コンテキスト圧縮後の再開**',
|
||
'',
|
||
'コンテキストが圧縮されました。モード状態を復元します。',
|
||
'TodoWriteツールで以下のタスクをリストの最初に追加してください:',
|
||
'',
|
||
'1. mode_show()を実行してモード状態を復元する',
|
||
'',
|
||
'これは作業継続前の準備ステップです。',
|
||
'',
|
||
'💡 ヒント: mode_show()は「サマリが存在する場合でも原文を読み直す」指示を含んでいます。',
|
||
].join('\n'));
|
||
break;
|
||
|
||
default:
|
||
lines.push([
|
||
'📋 **Session Setup**',
|
||
'',
|
||
`セッションが開始されました (source: ${source})。`,
|
||
'TodoWriteツールで以下のタスクをリストの最初に追加してください:',
|
||
'',
|
||
'1. mode_list()を実行する',
|
||
].join('\n'));
|
||
break;
|
||
}
|
||
|
||
// .serenaディレクトリのチェック
|
||
const serenaPath = path.join(process.cwd(), '.serena');
|
||
if (fs.existsSync(serenaPath) && fs.statSync(serenaPath).isDirectory()) {
|
||
lines.push('* Serenaのアクティベートを行ってください');
|
||
}
|
||
|
||
lines.push('═══════════════════════════════════════════');
|
||
|
||
// JSON出力
|
||
const output = {
|
||
hookSpecificOutput: {
|
||
hookEventName: 'SessionStart',
|
||
additionalContext: lines.join('\n')
|
||
}
|
||
};
|
||
|
||
console.log(JSON.stringify(output, null, 2));
|
||
} catch (error) {
|
||
console.error('Error processing hook input:', error.message);
|
||
process.exit(1);
|
||
}
|
||
});
|