60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
|
|
import {
|
||
|
|
filterBootstrapFilesForSession,
|
||
|
|
loadExtraBootstrapFiles,
|
||
|
|
} from "../../../agents/workspace.js";
|
||
|
|
import { resolveHookConfig } from "../../config.js";
|
||
|
|
import { isAgentBootstrapEvent, type HookHandler } from "../../hooks.js";
|
||
|
|
|
||
|
|
const HOOK_KEY = "bootstrap-extra-files";
|
||
|
|
|
||
|
|
function normalizeStringArray(value: unknown): string[] {
|
||
|
|
if (!Array.isArray(value)) {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
return value.map((v) => (typeof v === "string" ? v.trim() : "")).filter(Boolean);
|
||
|
|
}
|
||
|
|
|
||
|
|
function resolveExtraBootstrapPatterns(hookConfig: Record<string, unknown>): string[] {
|
||
|
|
const fromPaths = normalizeStringArray(hookConfig.paths);
|
||
|
|
if (fromPaths.length > 0) {
|
||
|
|
return fromPaths;
|
||
|
|
}
|
||
|
|
const fromPatterns = normalizeStringArray(hookConfig.patterns);
|
||
|
|
if (fromPatterns.length > 0) {
|
||
|
|
return fromPatterns;
|
||
|
|
}
|
||
|
|
return normalizeStringArray(hookConfig.files);
|
||
|
|
}
|
||
|
|
|
||
|
|
const bootstrapExtraFilesHook: HookHandler = async (event) => {
|
||
|
|
if (!isAgentBootstrapEvent(event)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const context = event.context;
|
||
|
|
const hookConfig = resolveHookConfig(context.cfg, HOOK_KEY);
|
||
|
|
if (!hookConfig || hookConfig.enabled === false) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const patterns = resolveExtraBootstrapPatterns(hookConfig as Record<string, unknown>);
|
||
|
|
if (patterns.length === 0) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
const extras = await loadExtraBootstrapFiles(context.workspaceDir, patterns);
|
||
|
|
if (extras.length === 0) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
context.bootstrapFiles = filterBootstrapFilesForSession(
|
||
|
|
[...context.bootstrapFiles, ...extras],
|
||
|
|
context.sessionKey,
|
||
|
|
);
|
||
|
|
} catch (err) {
|
||
|
|
console.warn(`[bootstrap-extra-files] failed: ${String(err)}`);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
export default bootstrapExtraFilesHook;
|