Load extension settings for hooks, agents, skills (#17245)

This commit is contained in:
christine betts
2026-01-27 14:34:14 -05:00
committed by GitHub
parent 36d618f72a
commit 9dc0994878
5 changed files with 398 additions and 25 deletions

View File

@@ -24,7 +24,7 @@ export type JsonValue =
| JsonArray;
export type VariableContext = {
[key in keyof typeof VARIABLE_SCHEMA]?: string;
[key: string]: string | undefined;
};
export function validateVariables(
@@ -33,7 +33,7 @@ export function validateVariables(
) {
for (const key in schema) {
const definition = schema[key];
if (definition.required && !variables[key as keyof VariableContext]) {
if (definition.required && !variables[key]) {
throw new Error(`Missing required variable: ${key}`);
}
}
@@ -43,30 +43,33 @@ export function hydrateString(str: string, context: VariableContext): string {
validateVariables(context, VARIABLE_SCHEMA);
const regex = /\${(.*?)}/g;
return str.replace(regex, (match, key) =>
context[key as keyof VariableContext] == null
? match
: (context[key as keyof VariableContext] as string),
context[key] == null ? match : context[key],
);
}
export function recursivelyHydrateStrings(
obj: JsonValue,
export function recursivelyHydrateStrings<T>(
obj: T,
values: VariableContext,
): JsonValue {
): T {
if (typeof obj === 'string') {
return hydrateString(obj, values);
return hydrateString(obj, values) as unknown as T;
}
if (Array.isArray(obj)) {
return obj.map((item) => recursivelyHydrateStrings(item, values));
return obj.map((item) =>
recursivelyHydrateStrings(item, values),
) as unknown as T;
}
if (typeof obj === 'object' && obj !== null) {
const newObj: JsonObject = {};
const newObj: Record<string, unknown> = {};
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
newObj[key] = recursivelyHydrateStrings(obj[key], values);
newObj[key] = recursivelyHydrateStrings(
(obj as Record<string, unknown>)[key],
values,
);
}
}
return newObj;
return newObj as T;
}
return obj;
}