@@ -279,17 +279,48 @@ export function decodeDotPropertyNames(properties: Record<string, unknown>): Rec
279279 return decodedProperties ;
280280}
281281
282+ /**
283+ * Separates advanced inputs into a dedicated ADVANCED_INPUT_KEY object based on the first section-captioned property.
284+ * The properties from the first section-captioned property onwards are grouped under the advanced input object.
285+ */
286+ export function separateAdvancedInputsInSchema ( properties : Record < string , ISchemaProperties > ) : Record < string , ISchemaProperties > {
287+ const propertiesEntries = Object . entries ( properties ) ;
288+ const firstSectionCaptionIndex = propertiesEntries . findIndex ( ( [ _key , value ] ) => value . sectionCaption ) ;
289+ if ( firstSectionCaptionIndex === - 1 ) {
290+ return properties ;
291+ }
292+
293+ const mainInputs = propertiesEntries . slice ( 0 , firstSectionCaptionIndex ) ;
294+ const advancedInputs = propertiesEntries . slice ( firstSectionCaptionIndex ) ;
295+
296+ const propObject : Record < string , ISchemaProperties > = Object . fromEntries ( mainInputs ) ;
297+ // Use a basic object container here; additional details (like title/description) are not required at this stage
298+ propObject . advancedInput = {
299+ type : 'object' ,
300+ title : 'Advanced Inputs' ,
301+ description : 'These inputs are considered advanced and are not required for basic functionality.' ,
302+ properties : Object . fromEntries ( advancedInputs ) ,
303+ } as unknown as ISchemaProperties ;
304+
305+ return propObject ;
306+ }
307+
282308export function transformActorInputSchemaProperties (
283309 input : Readonly < IActorInputSchema > ,
284310 options ?: { separateAdvancedInputs ?: boolean } ,
285311) : ActorInputSchemaProperties {
286312 // Deep clone input to avoid mutating the original object
287313 const inputClone : IActorInputSchema = structuredClone ( input ) ;
288314
289- // Optionally separate advanced inputs section into a single ADVANCED_INPUT_KEY object
290315 if ( options ?. separateAdvancedInputs ) {
291- const separated = separateAdvancedInputsInSchema ( inputClone ) ;
292- inputClone . properties = separated ;
316+ inputClone . properties = separateAdvancedInputsInSchema ( inputClone . properties ) ;
317+ if ( inputClone . properties . advancedInput ) {
318+ // Recursively transform the advanced input properties
319+ inputClone . properties . advancedInput . properties = transformActorInputSchemaProperties (
320+ inputClone . properties . advancedInput as IActorInputSchema ,
321+ { separateAdvancedInputs : false } ,
322+ ) ;
323+ }
293324 }
294325
295326 let transformedProperties = markInputPropertiesAsRequired ( inputClone ) ;
@@ -302,32 +333,25 @@ export function transformActorInputSchemaProperties(
302333 return transformedProperties ;
303334}
304335
305- /**
306- * Separates advanced inputs into a dedicated ADVANCED_INPUT_KEY object based on the first section-captioned property.
307- * The properties from the first section-captioned property onwards are grouped under the advanced input object.
308- */
309- export function separateAdvancedInputsInSchema ( input : IActorInputSchema ) : Record < string , ISchemaProperties > {
310- if ( ! input || ! input . properties ) {
311- return input . properties ?? { } ;
312- }
336+ export function transformActorInputForGetDetails (
337+ input : Readonly < IActorInputSchema > ,
338+ options ?: { separateAdvancedInputs ?: boolean } ,
339+ ) {
340+ // Deep clone input to avoid mutating the original object
341+ const inputClone = structuredClone ( input ) as IActorInputSchema ;
313342
314- const propertiesEntries = Object . entries ( input . properties ) ;
315- const firstSectionCaptionIndex = propertiesEntries . findIndex ( ( [ _key , value ] ) => value . sectionCaption ) ;
316- if ( firstSectionCaptionIndex === - 1 ) {
317- return input . properties ;
343+ if ( options ?. separateAdvancedInputs ) {
344+ inputClone . properties = separateAdvancedInputsInSchema ( inputClone . properties ) ;
345+ if ( inputClone . properties . advancedInput ) {
346+ // Recursively transform the advanced input properties
347+ inputClone . properties . advancedInput = transformActorInputForGetDetails (
348+ inputClone . properties . advancedInput as IActorInputSchema ,
349+ { separateAdvancedInputs : false } ,
350+ ) as ISchemaProperties ;
351+ }
318352 }
319353
320- const mainInputs = propertiesEntries . slice ( 0 , firstSectionCaptionIndex ) ;
321- const advancedInputs = propertiesEntries . slice ( firstSectionCaptionIndex ) ;
322-
323- const propObject : Record < string , ISchemaProperties > = Object . fromEntries ( mainInputs ) ;
324- // Use a basic object container here; additional details (like title/description) are not required at this stage
325- propObject . advancedInput = {
326- type : 'object' ,
327- title : 'Advanced Inputs' ,
328- description : 'These inputs are considered advanced and are not required for basic functionality.' ,
329- properties : Object . fromEntries ( advancedInputs ) ,
330- } as unknown as ISchemaProperties ;
331-
332- return propObject ;
354+ inputClone . properties = filterSchemaProperties ( inputClone . properties ) ;
355+ inputClone . properties = shortenProperties ( inputClone . properties ) ;
356+ return inputClone ;
333357}
0 commit comments