From 18aa73e437ad4a42dc7ef53a5d77c7be53a6b1b9 Mon Sep 17 00:00:00 2001 From: godfuzz3r Date: Tue, 17 Feb 2026 11:07:31 +0300 Subject: [PATCH] add execution_method in *_sources.json and forge_register -executionMethod command --- .../forge/forge/agentfunctions/builder.go | 1 + .../forge/agentfunctions/forge_download.go | 6 +++- .../forge/agentfunctions/forge_register.go | 29 ++++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Payload_Type/forge/forge/agentfunctions/builder.go b/Payload_Type/forge/forge/agentfunctions/builder.go index 332fb3d..6eb81c4 100644 --- a/Payload_Type/forge/forge/agentfunctions/builder.go +++ b/Payload_Type/forge/forge/agentfunctions/builder.go @@ -177,6 +177,7 @@ type collectionSourceCommandData struct { RepoURL string `json:"repo_url"` CustomDownloadURL string `json:"custom_download_url"` CustomVersion string `json:"custom_version"` + ExecutionMethod string `json:"execution_method"` // optional: "execute_assembly" or "inline_assembly" customAssemblyFileID string customBofFileIDs []string customBofExtensionFileID string diff --git a/Payload_Type/forge/forge/agentfunctions/forge_download.go b/Payload_Type/forge/forge/agentfunctions/forge_download.go index d1d9668..37ba1e2 100644 --- a/Payload_Type/forge/forge/agentfunctions/forge_download.go +++ b/Payload_Type/forge/forge/agentfunctions/forge_download.go @@ -243,6 +243,10 @@ func createAssemblyCommand(commandSource collectionSourceCommandData, collection if commandSource.CustomVersion != "" { defaultChoices = []string{commandSource.CustomVersion} } + defaultExecutionMethod := "execute_assembly" + if commandSource.ExecutionMethod != "" { + defaultExecutionMethod = commandSource.ExecutionMethod + } newCommand := agentstructs.Command{ Name: fmt.Sprintf("%s%s", AssemblyPrefix, commandSource.CommandName), Description: fmt.Sprintf("%s\nFrom: %s", commandSource.Description, originatingSource), @@ -288,7 +292,7 @@ func createAssemblyCommand(commandSource collectionSourceCommandData, collection ParameterType: agentstructs.COMMAND_PARAMETER_TYPE_CHOOSE_ONE, Choices: []string{"inline_assembly", "execute_assembly"}, Description: "Specify how the assembly should execute. Execute_assembly is a fork-and-run style architecture, inline_assembly is within the current process.", - DefaultValue: "execute_assembly", + DefaultValue: defaultExecutionMethod, ModalDisplayName: "Execution Options", ParameterGroupInformation: []agentstructs.ParameterGroupInfo{ { diff --git a/Payload_Type/forge/forge/agentfunctions/forge_register.go b/Payload_Type/forge/forge/agentfunctions/forge_register.go index ca01def..9c14202 100644 --- a/Payload_Type/forge/forge/agentfunctions/forge_register.go +++ b/Payload_Type/forge/forge/agentfunctions/forge_register.go @@ -129,6 +129,19 @@ func init() { }, }, }, + { + Name: "executionMethod", + ParameterType: agentstructs.COMMAND_PARAMETER_TYPE_CHOOSE_ONE, + Choices: []string{"execute_assembly", "inline_assembly"}, + Description: "Override the default execution method for assembly commands", + ModalDisplayName: "Execution Method", + DefaultValue: "", + ParameterGroupInformation: []agentstructs.ParameterGroupInfo{ + { + ParameterIsRequired: false, + }, + }, + }, }, TaskFunctionCreateTasking: func(taskData *agentstructs.PTTaskMessageAllData) agentstructs.PTTaskCreateTaskingMessageResponse { response := agentstructs.PTTaskCreateTaskingMessageResponse{ @@ -151,7 +164,14 @@ func init() { } remove, err := taskData.Args.GetBooleanArg("remove") if err != nil { - logging.LogError(err, "failed to get commandName") + logging.LogError(err, "failed to get remove") + response.Success = false + response.Error = err.Error() + return response + } + executionMethod, err := taskData.Args.GetChooseOneArg("executionMethod") + if err != nil { + logging.LogError(err, "failed to get executionMethod") response.Success = false response.Error = err.Error() return response @@ -160,6 +180,9 @@ func init() { if remove { displayParams += " -remove" } + if executionMethod != "" { + displayParams += fmt.Sprintf(" -executionMethod %s", executionMethod) + } response.DisplayParams = &displayParams collectionSourceData, err := getCollectionSource(collection) if err != nil { @@ -207,6 +230,10 @@ func init() { TaskID: taskData.Task.ID, Response: []byte(fmt.Sprintf("Registering new command %s\n", prefixedCommandName)), }) + // Override execution method if provided via parameter + if executionMethod != "" { + commandSource.ExecutionMethod = executionMethod + } newCommand := createAssemblyCommand(commandSource, collectionSourceData, true) agentstructs.AllPayloadData.Get(PayloadTypeName).AddCommand(newCommand) }