Initial commit
This commit is contained in:
113
hooks/start-session.js
Executable file
113
hooks/start-session.js
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/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);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user