43 lines
1.2 KiB
JavaScript
Executable file
43 lines
1.2 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
/**
|
|
* SessionStart hook — loads BYAN soul/tao/soul-memory and injects them
|
|
* into the session's initial context via additionalContext.
|
|
*
|
|
* Safe: missing files are skipped silently, script always exits 0.
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const projectDir = process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
|
|
const files = [
|
|
{ label: 'soul', path: path.join(projectDir, '_byan', 'soul.md') },
|
|
{ label: 'tao', path: path.join(projectDir, '_byan', 'tao.md') },
|
|
{ label: 'soul-memory', path: path.join(projectDir, '_byan', 'soul-memory.md') },
|
|
];
|
|
|
|
const chunks = [];
|
|
for (const f of files) {
|
|
try {
|
|
if (fs.existsSync(f.path)) {
|
|
const content = fs.readFileSync(f.path, 'utf8').trim();
|
|
if (content.length > 0) {
|
|
chunks.push(`=== BYAN ${f.label.toUpperCase()} (${path.relative(projectDir, f.path)}) ===\n${content}`);
|
|
}
|
|
}
|
|
} catch {
|
|
// Ignore read errors — hook must never block session start.
|
|
}
|
|
}
|
|
|
|
const additionalContext =
|
|
chunks.length > 0
|
|
? `BYAN Soul System (loaded at session start):\n\n${chunks.join('\n\n')}`
|
|
: '';
|
|
|
|
if (additionalContext) {
|
|
process.stdout.write(JSON.stringify({ systemMessage: additionalContext }));
|
|
} else {
|
|
process.stdout.write('{}');
|
|
}
|