Hi!
What i'am trying to achieve: run plugin inside terminal app, which would internally start IStrategy instance(s). But I see some strange behaviour, looks like a bug 

JForex version: 3.6.42
JForex API version: 2.13.98
OS: macOS 12.1 
Reproducing:
1. Save this code as jforex terminal plugin with file name as TestPlugin.java:
package jforex;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.JFException;
import com.dukascopy.api.JFXInject;
import com.dukascopy.api.plugins.IPluginContext;
import com.dukascopy.api.strategy.IStrategyResponse;
import com.dukascopy.api.strategy.local.ILocalStrategyDescriptor;
import com.dukascopy.api.strategy.local.ILocalStrategyManager;
import com.dukascopy.api.strategy.local.LocalStrategyListener;
import java.io.File;
import java.nio.file.Paths;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class TestPlugin extends com.dukascopy.api.plugins.Plugin {
    @JFXInject
    public IConsole console;
    @Override
    public void onStart(IPluginContext context) throws JFException {
        try {
            console.getOut().println("Plugin started!");
            final ILocalStrategyManager localManager = context.getLocalStrategyManager();
            localManager.addStrategyListener(new LocalStrategyListener() {
                @Override
                public void onStrategyRun(ILocalStrategyDescriptor strategyDescriptor) {
                    console.getOut().printf("Strategy successfully started! Descriptor: %s%n", strategyDescriptor);
                }
                @Override
                public void onStrategyStop(ILocalStrategyDescriptor strategyDescriptor) {
                    console.getOut().printf("Strategy stopped. Descriptor: %s%n", strategyDescriptor);
                }
            });
            final String javaStratFileName = "DemoStrategy.java";
            final String jfxStratFileName = "DemoStrategy.jfx";
            // loadableDir will be used to store DemoStrategy.java file and compiled output for it
            final File loadableDir = context.getFilesDir();
            // create abs path for strategy (java file)
            final File strategyFile = Paths.get(loadableDir.getAbsolutePath(), javaStratFileName).toFile();
            // this will compile java -> jfx, but result is null, while compiled file exists
            final File jfxRes = localManager.compileStrategy(strategyFile);
            if (jfxRes == null) {
                console.getOut().println("Compiled jfx file is null");
            }
            // workaround for null exception - manually create path to compiled jfx file
            final File jfxFile = Paths.get(loadableDir.getAbsolutePath(), jfxStratFileName).toFile();
            console.getOut().printf("Path: %s%n", jfxFile.getAbsolutePath());
            // startStrategy method always throw Timeout exception, but strategy is started (without specified timeout, it will wait...)
            final IStrategyResponse<UUID> response = localManager.startStrategy(jfxFile).get(10000, TimeUnit.MILLISECONDS);
            if (response.isError()) throw new Exception(response.getErrorMessage());
            console.getOut().printf("Strategy started. ID: %s%n", response.getResult());
        } catch (Exception e) {
            e.printStackTrace(console.getErr());
            context.stop();
        }
    }
    @Override
    public void onStop() throws JFException {
        console.getOut().println("Plugin stopped!");
    }
}
2. Save the code below in file called 'DemoStrategy.java' inside 
loadableDir (look at variable inside plugin code):
package jforex;
import com.dukascopy.api.*;
public class DemoStrategy implements IStrategy {
    @JFXInject
    public IConsole console;
    @Override
    public void onStart(IContext context) throws JFException {
        try {
            console.getOut().println("Strategy started!");
            // making some work for 3 secs
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace(console.getErr());
        } finally {
            context.stop();
        }
    }
    @Override
    public void onTick(Instrument instrument, ITick tick) throws JFException {
    }
    @Override
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
    }
    @Override
    public void onMessage(IMessage message) throws JFException {
    }
    @Override
    public void onAccount(IAccount account) throws JFException {
    }
    @Override
    public void onStop() throws JFException {
        console.getOut().println("Strategy stopped!");
    }
}
3. Activate plugin
Expected: Successfully started strategy without some kind of exceptions.
I have two issues in this code:
1. ILocalStrategyManager.compileStrategy(io.File java_file) - return null for io.File instance, while compilation is successfull -> I expected it will return io.File for compiled DemoStrategy.jfx file.
2. ILocalStrategyManager.startStrategy(io.File jfx_file) - return instance of java Future that never completes, while strategy is started successfully and manager callback (LocalStrategyListener) is invoked -> I expected future would successfully completed after some time.
Thanks.