48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* SessionStart hook: reminds Claude to index DOCS/*.md into context-mode.
|
|
* Scans for DOCS/ or docs/ folder and lists .md files to index.
|
|
*/
|
|
import { readdirSync, statSync, existsSync } from 'fs';
|
|
import { join, relative } from 'path';
|
|
|
|
const projectRoot = process.env.PROJECT_DIR || process.cwd();
|
|
|
|
let docsDir = null;
|
|
for (const candidate of ['DOCS', 'docs']) {
|
|
const fullPath = join(projectRoot, candidate);
|
|
if (existsSync(fullPath)) {
|
|
docsDir = fullPath;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!docsDir) {
|
|
process.exit(0);
|
|
}
|
|
|
|
function getMdFiles(dir) {
|
|
const files = [];
|
|
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
const fullPath = join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
files.push(...getMdFiles(fullPath));
|
|
} else if (entry.name.endsWith('.md')) {
|
|
files.push(relative(projectRoot, fullPath).replace(/\\/g, '/'));
|
|
}
|
|
}
|
|
return files;
|
|
}
|
|
|
|
const mdFiles = getMdFiles(docsDir);
|
|
|
|
if (mdFiles.length > 0) {
|
|
const instructions = {
|
|
result: "INDEX_DOCS_REMINDER",
|
|
message: `Na starcie sesji zaindeksuj poniższe pliki dokumentacji do context-mode (ctx_index) aby oszczędzać okno kontekstu. Użyj pełnych ścieżek z PROJECT_DIR.`,
|
|
files: mdFiles,
|
|
projectDir: projectRoot.replace(/\\/g, '/')
|
|
};
|
|
console.log(JSON.stringify(instructions));
|
|
}
|