diff --git a/repository/src/main/java/org/orderofthebee/addons/support/tools/repo/jsconsole/AlfrescoScriptAPITernGet.java b/repository/src/main/java/org/orderofthebee/addons/support/tools/repo/jsconsole/AlfrescoScriptAPITernGet.java
new file mode 100644
index 0000000..743cf7f
--- /dev/null
+++ b/repository/src/main/java/org/orderofthebee/addons/support/tools/repo/jsconsole/AlfrescoScriptAPITernGet.java
@@ -0,0 +1,1237 @@
+/**
+ * Copyright (C) 2016 - 2022 Order of the Bee
+ *
+ * This file is part of OOTBee Support Tools
+ *
+ * OOTBee Support Tools is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * OOTBee Support Tools is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with OOTBee Support Tools. If not, see
+ * .
+ *
+ * Linked to Alfresco
+ * Copyright (C) 2005 - 2022 Alfresco Software Limited.
+ *
+ * This file is part of code forked from the JavaScript Console project
+ * which was licensed under the Apache License, Version 2.0 at the time.
+ * In accordance with that license, the modifications / derivative work
+ * is now being licensed under the LGPL as part of the OOTBee Support Tools
+ * addon.
+ */
+
+ /**
+ * forked from https://github.com/AFaust/js-console
+ */
+
+package org.orderofthebee.addons.support.tools.repo.jsconsole;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.alfresco.processor.ProcessorExtension;
+import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
+import org.alfresco.repo.jscript.NativeMap;
+import org.alfresco.repo.jscript.Scopeable;
+import org.alfresco.repo.jscript.ScriptLogger;
+import org.alfresco.repo.jscript.ScriptNode;
+import org.alfresco.repo.jscript.ScriptableHashMap;
+import org.alfresco.repo.jscript.ScriptableQNameMap;
+import org.alfresco.repo.processor.BaseProcessor;
+import org.alfresco.repo.processor.BaseProcessorExtension;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.repo.workflow.WorkflowModel;
+import org.alfresco.service.ServiceRegistry;
+import org.alfresco.service.cmr.dictionary.AspectDefinition;
+import org.alfresco.service.cmr.dictionary.ClassDefinition;
+import org.alfresco.service.cmr.dictionary.DictionaryService;
+import org.alfresco.service.cmr.dictionary.PropertyDefinition;
+import org.alfresco.service.cmr.dictionary.TypeDefinition;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.ScriptService;
+import org.alfresco.service.cmr.security.PersonService;
+import org.alfresco.service.namespace.NamespaceService;
+import org.alfresco.service.namespace.QName;
+import org.alfresco.util.Pair;
+import org.alfresco.util.PropertyCheck;
+import org.mozilla.javascript.Scriptable;
+import org.mozilla.javascript.ScriptableObject;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.core.ParameterNameDiscoverer;
+import org.springframework.extensions.surf.util.I18NUtil;
+import org.springframework.extensions.webscripts.Cache;
+import org.springframework.extensions.webscripts.DeclarativeWebScript;
+import org.springframework.extensions.webscripts.ScriptableLinkedHashMap;
+import org.springframework.extensions.webscripts.ScriptableMap;
+import org.springframework.extensions.webscripts.Status;
+import org.springframework.extensions.webscripts.WebScript;
+import org.springframework.extensions.webscripts.WebScriptRequest;
+
+/**
+ * @author Axel Faust
+ */
+public class AlfrescoScriptAPITernGet extends DeclarativeWebScript implements InitializingBean
+{
+
+ private static final Collection> PRIMITIVE_NUMBER_CLASSES = Collections.unmodifiableList(Arrays.> asList(byte.class,
+ short.class, int.class, long.class, float.class, double.class));
+
+ private static final Collection> CUTOFF_CLASSES = Collections.unmodifiableList(Arrays.> asList(Object.class,
+ Scriptable.class, org.springframework.extensions.webscripts.processor.BaseProcessorExtension.class,
+ BaseProcessorExtension.class, BaseScopableProcessorExtension.class, ScriptableObject.class, List.class, Map.class, Set.class));
+
+ private static final Collection> CUTOFF_INTERFACES = Collections.unmodifiableList(Arrays.> asList(Scriptable.class,
+ ProcessorExtension.class, org.springframework.extensions.surf.core.processor.ProcessorExtension.class, Scopeable.class,
+ ApplicationContextAware.class, InitializingBean.class, DisposableBean.class));
+
+ private static final Collection INIT_METHOD_NAMES = Collections.unmodifiableSet(new HashSet(Arrays. asList(
+ "init", "register")));
+
+ private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new LocalVariableTableParameterNameDiscoverer();
+
+ protected NamespaceService namespaceService;
+
+ protected DictionaryService dictionaryService;
+
+ protected ScriptService scriptService;
+
+ protected PersonService personService;
+
+ protected ServiceRegistry serviceRegistry;
+
+ protected BaseProcessor scriptProcessor;
+
+ protected Properties properties;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void afterPropertiesSet()
+ {
+ PropertyCheck.mandatory(this, "namespaceService", this.namespaceService);
+ PropertyCheck.mandatory(this, "dictionaryService", this.dictionaryService);
+ PropertyCheck.mandatory(this, "scriptService", this.scriptService);
+ PropertyCheck.mandatory(this, "personService", this.personService);
+ PropertyCheck.mandatory(this, "serviceRegistry", this.serviceRegistry);
+ PropertyCheck.mandatory(this, "scriptProcessor", this.scriptProcessor);
+
+ PropertyCheck.mandatory(this, "properties", this.properties);
+ }
+
+ /**
+ * @param namespaceService
+ * the namespaceService to set
+ */
+ public void setNamespaceService(final NamespaceService namespaceService)
+ {
+ this.namespaceService = namespaceService;
+ }
+
+ /**
+ * @param dictionaryService
+ * the dictionaryService to set
+ */
+ public void setDictionaryService(final DictionaryService dictionaryService)
+ {
+ this.dictionaryService = dictionaryService;
+ }
+
+ /**
+ * @param scriptService
+ * the scriptService to set
+ */
+ public void setScriptService(final ScriptService scriptService)
+ {
+ this.scriptService = scriptService;
+ }
+
+ /**
+ * @param personService
+ * the personService to set
+ */
+ public void setPersonService(final PersonService personService)
+ {
+ this.personService = personService;
+ }
+
+ /**
+ * @param serviceRegistry
+ * the serviceRegistry to set
+ */
+ public void setServiceRegistry(final ServiceRegistry serviceRegistry)
+ {
+ this.serviceRegistry = serviceRegistry;
+ }
+
+ /**
+ * @param scriptProcessor
+ * the scriptProcessor to set
+ */
+ public void setScriptProcessor(final BaseProcessor scriptProcessor)
+ {
+ this.scriptProcessor = scriptProcessor;
+ }
+
+ /**
+ * @param properties
+ * the properties to set
+ */
+ public void setProperties(final Properties properties)
+ {
+ this.properties = properties;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected Map executeImpl(final WebScriptRequest req, final Status status, final Cache cache)
+ {
+ final Map model = new HashMap();
+
+ this.prepareCoreScriptAPIJavaTypeDefinitions(model);
+ this.prepareCoreScriptAPIGlobalDefinitions(model);
+ this.preparePropertyDefinitions(model);
+ // TODO Process action definitions + parameters
+
+ this.prepareWebScriptAPIJavaTypeDefinitions(req, model);
+ this.prepareWebScriptAPIGlobalDefinitions(req, model);
+
+ return model;
+ }
+
+ /**
+ * Prepares the type definitions for the core script API of Alfresco (common across all use cases)
+ *
+ * @param model
+ * the current web script model into which to insert the definitions
+ */
+ protected void prepareCoreScriptAPIJavaTypeDefinitions(final Map model)
+ {
+ final Map scriptModel = this.buildScriptAPIModel();
+ model.put("scriptAPIJavaTypeDefinitions", this.prepareJavaTypeDefinitions(scriptModel));
+ }
+
+ /**
+ * Prepares the type definitions for the script API specific to Alfresco web scripts
+ *
+ * @param req
+ * the current web script request
+ * @param model
+ * the current web script model into which to insert the definitions
+ */
+ protected void prepareWebScriptAPIJavaTypeDefinitions(final WebScriptRequest req, final Map model)
+ {
+ final ScriptDetails script = this.getExecuteScript(req.getContentType());
+ final Map scriptModel = this.createScriptParameters(req, null, script, Collections. emptyMap());
+
+ this.removeCoreScriptAPIGlobalsFromWebScriptAPI(scriptModel);
+
+ model.put("webScriptAPIJavaTypeDefinitions", this.prepareJavaTypeDefinitions(scriptModel));
+ }
+
+ /**
+ * Removes core script API globals from a script model specific to web script execution
+ *
+ * @param scriptModel
+ * the script model of a web script
+ */
+ protected void removeCoreScriptAPIGlobalsFromWebScriptAPI(final Map scriptModel)
+ {
+ // avoid unnecessary overlap between web script and standard script API model
+ // remove well known types handled in core script API
+ final Collection keysToRemove = new HashSet();
+ for (final Entry entry : scriptModel.entrySet())
+ {
+ final Object value = entry.getValue();
+ if (value instanceof ScriptNode || value instanceof NodeRef || value instanceof ScriptLogger)
+ {
+ keysToRemove.add(entry.getKey());
+ }
+ }
+ }
+
+ /**
+ * Prepares the type definitions for Java classes found in a specific model.
+ *
+ * @param model
+ * the model containing objects exposed to scripts
+ * @return the list of models for each type found directly or transitively (via public properties / methods) in the model elements
+ */
+ protected List