update
This commit is contained in:
47
.claude/hooks/index-docs.mjs
Normal file
47
.claude/hooks/index-docs.mjs
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/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));
|
||||
}
|
||||
Reference in New Issue
Block a user