Skip to content

Commit 3b0f37a

Browse files
committed
sends toolbox to AI (should improve pref + allow extension support)
1 parent 3cd038a commit 3b0f37a

2 files changed

Lines changed: 51 additions & 9 deletions

File tree

‎src/addons/addons/ai-integration/helpers.js‎

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,19 @@ export default class helpers {
137137
const rootElement = xmlDoc.createElement("project");
138138
xmlDoc.appendChild(rootElement);
139139

140-
for(var x of addon.tab.redux.state.scratchGui.vm.runtime.targets){
141-
// Create a child element with text content
142-
const childElement = xmlDoc.createElement("sprite");
143-
childElement.innerHTML = x.blocks.toXML();
144-
rootElement.appendChild(childElement);
140+
for (var x of addon.tab.redux.state.scratchGui.vm.runtime.targets) {
141+
// Create a child element with text content
142+
const childElement = xmlDoc.createElement("sprite");
143+
childElement.innerHTML = x.blocks.toXML();
144+
rootElement.appendChild(childElement);
145145
}
146146
// Serialize XML to string
147147
const serializer = new XMLSerializer();
148148
const xmlString = serializer.serializeToString(xmlDoc);
149149

150150
console.log(xmlString);
151151
}
152-
static APIKeyRequiredModal(){
152+
static APIKeyRequiredModal() {
153153
const div = document.createElement('div');
154154
div.className = 'container';
155155
div.id = 'torchyPopup';
@@ -181,8 +181,50 @@ export default class helpers {
181181
</div>`;
182182
document.body.appendChild(div);
183183
document.getElementById('closePopup').addEventListener('click', () => {
184-
document.getElementById('torchyPopup').remove();
185-
document.AI_INTEGRATION.popupOpen = false;
184+
document.getElementById('torchyPopup').remove();
185+
document.AI_INTEGRATION.popupOpen = false;
186186
});
187187
}
188+
static returnSterilizedToolbox(Gaddon) {
189+
if (Gaddon == null) return;
190+
function extractBlockReturnType(block) {
191+
if (block) {
192+
var returnType = "Stack";
193+
if (block.outputConnection) {
194+
// Check if the block is a boolean
195+
if (block.outputConnection.check_ && block.outputConnection.check_.includes("Boolean")) {
196+
returnType = "Reporter";
197+
} else {
198+
returnType = "Boolean";
199+
}
200+
}
201+
return returnType;
202+
} else {
203+
return null;
204+
}
205+
}
206+
var workspace = new Blockly.Workspace();
207+
208+
var toolbox = Gaddon.tab.redux.state.scratchGui.toolbox.toolboxXML;
209+
var parser = new DOMParser();
210+
var xmlDoc = parser.parseFromString(toolbox, "text/xml");
211+
var sterializedToolbox = document.implementation.createDocument("", "", null);
212+
var rootElement = sterializedToolbox.createElement("toolbox");
213+
sterializedToolbox.appendChild(rootElement);
214+
var blocks = xmlDoc.getElementsByTagName("block");
215+
for (var block of blocks) {
216+
var blockElement = block.cloneNode(true);
217+
var newBlock = Blockly.Xml.domToBlock(blockElement, workspace)
218+
var returnType = extractBlockReturnType(newBlock);
219+
var blockCopy = block.cloneNode(true);
220+
blockCopy.removeAttribute("id");
221+
blockCopy.setAttribute("blockType", returnType);
222+
rootElement.appendChild(blockCopy);
223+
}
224+
workspace.dispose();
225+
var serializer = new XMLSerializer();
226+
var xmlString = serializer.serializeToString(sterializedToolbox);
227+
console.log("[DEBUG] toolbox has # of blocks: " + blocks.length);
228+
return xmlString.replace(/>\s+</g, '><').trim();
229+
}
188230
}

‎src/addons/addons/ai-integration/userscript.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ function popupFunctionality() {
376376
var data = {
377377
api_key: authTokenToUse,
378378
message: messageContents,
379-
history: document.AI_INTEGRATION.chatHistory,
379+
history: [{ "role": "user", "message": helpers.returnSterilizedToolbox(Gaddon,mainWorkspace) },...document.AI_INTEGRATION.chatHistory],
380380
ai_model: document.getElementById('AI_Selector_select').value,
381381
};
382382

0 commit comments

Comments
 (0)