From d93825bb6d7c092d06174d4ad0b849d43840a82f Mon Sep 17 00:00:00 2001 From: rcholic Date: Wed, 14 Jan 2026 01:25:10 +0000 Subject: [PATCH] chore: sync extension files from sentience-chrome v2.4.1 --- sentience/extension/background.js | 6 +- sentience/extension/content.js | 47 +++++++-- sentience/extension/injected_api.js | 67 ++++++------ sentience/extension/manifest.json | 2 +- sentience/extension/pkg/sentience_core.js | 14 +-- .../extension/pkg/sentience_core_bg.wasm | Bin 107422 -> 107496 bytes sentience/extension/release.json | 95 +++++++++--------- 7 files changed, 137 insertions(+), 94 deletions(-) diff --git a/sentience/extension/background.js b/sentience/extension/background.js index aff49b0..2923f55 100644 --- a/sentience/extension/background.js +++ b/sentience/extension/background.js @@ -28,14 +28,14 @@ async function handleSnapshotProcessing(rawData, options = {}) { const startTime = performance.now(); try { if (!Array.isArray(rawData)) throw new Error("rawData must be an array"); - if (rawData.length > 1e4 && (rawData = rawData.slice(0, 1e4)), await initWASM(), + if (rawData.length > 1e4 && (rawData = rawData.slice(0, 1e4)), await initWASM(), !wasmReady) throw new Error("WASM module not initialized"); let analyzedElements, prunedRawData; try { const wasmPromise = new Promise((resolve, reject) => { try { let result; - result = options.limit || options.filter ? analyze_page_with_options(rawData, options) : analyze_page(rawData), + result = options.limit || options.filter ? analyze_page_with_options(rawData, options) : analyze_page(rawData), resolve(result); } catch (e) { reject(e); @@ -101,4 +101,4 @@ initWASM().catch(err => {}), chrome.runtime.onMessage.addListener((request, send event.preventDefault(); }), self.addEventListener("unhandledrejection", event => { event.preventDefault(); -}); +}); \ No newline at end of file diff --git a/sentience/extension/content.js b/sentience/extension/content.js index 9d5b3bf..b65cfb5 100644 --- a/sentience/extension/content.js +++ b/sentience/extension/content.js @@ -82,7 +82,7 @@ if (!elements || !Array.isArray(elements)) return; removeOverlay(); const host = document.createElement("div"); - host.id = OVERLAY_HOST_ID, host.style.cssText = "\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n pointer-events: none !important;\n z-index: 2147483647 !important;\n margin: 0 !important;\n padding: 0 !important;\n ", + host.id = OVERLAY_HOST_ID, host.style.cssText = "\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n pointer-events: none !important;\n z-index: 2147483647 !important;\n margin: 0 !important;\n padding: 0 !important;\n ", document.body.appendChild(host); const shadow = host.attachShadow({ mode: "closed" @@ -94,15 +94,15 @@ let color; color = isTarget ? "#FF0000" : isPrimary ? "#0066FF" : "#00FF00"; const importanceRatio = maxImportance > 0 ? importance / maxImportance : .5, borderOpacity = isTarget ? 1 : isPrimary ? .9 : Math.max(.4, .5 + .5 * importanceRatio), fillOpacity = .2 * borderOpacity, borderWidth = isTarget ? 2 : isPrimary ? 1.5 : Math.max(.5, Math.round(2 * importanceRatio)), hexOpacity = Math.round(255 * fillOpacity).toString(16).padStart(2, "0"), box = document.createElement("div"); - if (box.style.cssText = `\n position: absolute;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: ${borderWidth}px solid ${color};\n background-color: ${color}${hexOpacity};\n box-sizing: border-box;\n opacity: ${borderOpacity};\n pointer-events: none;\n `, + if (box.style.cssText = `\n position: absolute;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: ${borderWidth}px solid ${color};\n background-color: ${color}${hexOpacity};\n box-sizing: border-box;\n opacity: ${borderOpacity};\n pointer-events: none;\n `, importance > 0 || isPrimary) { const badge = document.createElement("span"); - badge.textContent = isPrimary ? `⭐${importance}` : `${importance}`, badge.style.cssText = `\n position: absolute;\n top: -18px;\n left: 0;\n background: ${color};\n color: white;\n font-size: 11px;\n font-weight: bold;\n padding: 2px 6px;\n font-family: Arial, sans-serif;\n border-radius: 3px;\n opacity: 0.95;\n white-space: nowrap;\n pointer-events: none;\n `, + badge.textContent = isPrimary ? `⭐${importance}` : `${importance}`, badge.style.cssText = `\n position: absolute;\n top: -18px;\n left: 0;\n background: ${color};\n color: white;\n font-size: 11px;\n font-weight: bold;\n padding: 2px 6px;\n font-family: Arial, sans-serif;\n border-radius: 3px;\n opacity: 0.95;\n white-space: nowrap;\n pointer-events: none;\n `, box.appendChild(badge); } if (isTarget) { const targetIndicator = document.createElement("span"); - targetIndicator.textContent = "🎯", targetIndicator.style.cssText = "\n position: absolute;\n top: -18px;\n right: 0;\n font-size: 16px;\n pointer-events: none;\n ", + targetIndicator.textContent = "🎯", targetIndicator.style.cssText = "\n position: absolute;\n top: -18px;\n right: 0;\n font-size: 16px;\n pointer-events: none;\n ", box.appendChild(targetIndicator); } shadow.appendChild(box); @@ -114,13 +114,48 @@ case "SENTIENCE_CLEAR_OVERLAY": removeOverlay(); + break; + + case "SENTIENCE_SHOW_GRID_OVERLAY": + !function(data) { + const {grids: grids, targetGridId: targetGridId} = data; + if (!grids || !Array.isArray(grids)) return; + removeOverlay(); + const host = document.createElement("div"); + host.id = OVERLAY_HOST_ID, host.style.cssText = "\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n pointer-events: none !important;\n z-index: 2147483647 !important;\n margin: 0 !important;\n padding: 0 !important;\n ", + document.body.appendChild(host); + const shadow = host.attachShadow({ + mode: "closed" + }); + grids.forEach(grid => { + const bbox = grid.bbox; + if (!bbox) return; + const isTarget = grid.grid_id === targetGridId, isDominant = !0 === grid.is_dominant; + let color = "#9B59B6"; + isTarget ? color = "#FF0000" : isDominant && (color = "#FF8C00"); + const borderStyle = isTarget ? "solid" : "dashed", borderWidth = isTarget ? 3 : isDominant ? 2.5 : 2, opacity = isTarget ? 1 : isDominant ? .9 : .8, fillOpacity = .1 * opacity, hexOpacity = Math.round(255 * fillOpacity).toString(16).padStart(2, "0"), box = document.createElement("div"); + box.style.cssText = `\n position: absolute;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: ${borderWidth}px ${borderStyle} ${color};\n background-color: ${color}${hexOpacity};\n box-sizing: border-box;\n opacity: ${opacity};\n pointer-events: none;\n `; + let labelText = grid.label ? `Grid ${grid.grid_id}: ${grid.label}` : `Grid ${grid.grid_id}`; + grid.is_dominant && (labelText = `⭐ ${labelText} (dominant)`); + const badge = document.createElement("span"); + if (badge.textContent = labelText, badge.style.cssText = `\n position: absolute;\n top: -18px;\n left: 0;\n background: ${color};\n color: white;\n font-size: 11px;\n font-weight: bold;\n padding: 2px 6px;\n font-family: Arial, sans-serif;\n border-radius: 3px;\n opacity: 0.95;\n white-space: nowrap;\n pointer-events: none;\n `, + box.appendChild(badge), isTarget) { + const targetIndicator = document.createElement("span"); + targetIndicator.textContent = "🎯", targetIndicator.style.cssText = "\n position: absolute;\n top: -18px;\n right: 0;\n font-size: 16px;\n pointer-events: none;\n ", + box.appendChild(targetIndicator); + } + shadow.appendChild(box); + }), overlayTimeout = setTimeout(() => { + removeOverlay(); + }, 5e3); + }(event.data); } }); const OVERLAY_HOST_ID = "sentience-overlay-host"; let overlayTimeout = null; function removeOverlay() { const existing = document.getElementById(OVERLAY_HOST_ID); - existing && existing.remove(), overlayTimeout && (clearTimeout(overlayTimeout), + existing && existing.remove(), overlayTimeout && (clearTimeout(overlayTimeout), overlayTimeout = null); } -}(); +}(); \ No newline at end of file diff --git a/sentience/extension/injected_api.js b/sentience/extension/injected_api.js index 983b4da..e70bfb4 100644 --- a/sentience/extension/injected_api.js +++ b/sentience/extension/injected_api.js @@ -112,7 +112,7 @@ if (labelEl) { let text = ""; try { - if (text = (labelEl.innerText || "").trim(), !text && labelEl.textContent && (text = labelEl.textContent.trim()), + if (text = (labelEl.innerText || "").trim(), !text && labelEl.textContent && (text = labelEl.textContent.trim()), !text && labelEl.getAttribute) { const ariaLabel = labelEl.getAttribute("aria-label"); ariaLabel && (text = ariaLabel.trim()); @@ -281,7 +281,7 @@ }); const checkStable = () => { const timeSinceLastChange = Date.now() - lastChange, totalWait = Date.now() - startTime; - timeSinceLastChange >= quietPeriod || totalWait >= maxWait ? (observer.disconnect(), + timeSinceLastChange >= quietPeriod || totalWait >= maxWait ? (observer.disconnect(), resolve()) : setTimeout(checkStable, 50); }; checkStable(); @@ -301,7 +301,7 @@ }); const checkQuiet = () => { const timeSinceLastChange = Date.now() - lastChange, totalWait = Date.now() - startTime; - timeSinceLastChange >= quietPeriod || totalWait >= maxWait ? (quietObserver.disconnect(), + timeSinceLastChange >= quietPeriod || totalWait >= maxWait ? (quietObserver.disconnect(), resolve()) : setTimeout(checkQuiet, 50); }; checkQuiet(); @@ -468,8 +468,8 @@ const requestId = `iframe-${idx}-${Date.now()}`, timeout = setTimeout(() => { resolve(null); }, 5e3), listener = event => { - "SENTIENCE_IFRAME_SNAPSHOT_RESPONSE" === event.data?.type && event.data, "SENTIENCE_IFRAME_SNAPSHOT_RESPONSE" === event.data?.type && event.data?.requestId === requestId && (clearTimeout(timeout), - window.removeEventListener("message", listener), event.data.error ? resolve(null) : (event.data.snapshot, + "SENTIENCE_IFRAME_SNAPSHOT_RESPONSE" === event.data?.type && event.data, "SENTIENCE_IFRAME_SNAPSHOT_RESPONSE" === event.data?.type && event.data?.requestId === requestId && (clearTimeout(timeout), + window.removeEventListener("message", listener), event.data.error ? resolve(null) : (event.data.snapshot, resolve({ iframe: iframe, data: event.data.snapshot, @@ -485,7 +485,7 @@ ...options, collectIframes: !0 } - }, "*") : (clearTimeout(timeout), window.removeEventListener("message", listener), + }, "*") : (clearTimeout(timeout), window.removeEventListener("message", listener), resolve(null)); } catch (error) { clearTimeout(timeout), window.removeEventListener("message", listener), resolve(null); @@ -535,7 +535,7 @@ }, 25e3), listener = e => { if ("SENTIENCE_SNAPSHOT_RESULT" === e.data.type && e.data.requestId === requestId) { if (resolved) return; - resolved = !0, clearTimeout(timeout), window.removeEventListener("message", listener), + resolved = !0, clearTimeout(timeout), window.removeEventListener("message", listener), e.data.error ? reject(new Error(e.data.error)) : resolve({ elements: e.data.elements, raw_elements: e.data.raw_elements, @@ -552,7 +552,7 @@ options: options }, "*"); } catch (error) { - resolved || (resolved = !0, clearTimeout(timeout), window.removeEventListener("message", listener), + resolved || (resolved = !0, clearTimeout(timeout), window.removeEventListener("message", listener), reject(new Error(`Failed to send snapshot request: ${error.message}`))); } }); @@ -562,7 +562,7 @@ options.screenshot && (screenshot = await function(options) { return new Promise(resolve => { const requestId = Math.random().toString(36).substring(7), listener = e => { - "SENTIENCE_SCREENSHOT_RESULT" === e.data.type && e.data.requestId === requestId && (window.removeEventListener("message", listener), + "SENTIENCE_SCREENSHOT_RESULT" === e.data.type && e.data.requestId === requestId && (window.removeEventListener("message", listener), resolve(e.data.screenshot)); }; window.addEventListener("message", listener), window.postMessage({ @@ -609,15 +609,15 @@ } if (node.nodeType !== Node.ELEMENT_NODE) return; const tag = node.tagName.toLowerCase(); - if ("h1" === tag && (markdown += "\n# "), "h2" === tag && (markdown += "\n## "), - "h3" === tag && (markdown += "\n### "), "li" === tag && (markdown += "\n- "), insideLink || "p" !== tag && "div" !== tag && "br" !== tag || (markdown += "\n"), - "strong" !== tag && "b" !== tag || (markdown += "**"), "em" !== tag && "i" !== tag || (markdown += "_"), - "a" === tag && (markdown += "[", insideLink = !0), node.shadowRoot ? Array.from(node.shadowRoot.childNodes).forEach(walk) : node.childNodes.forEach(walk), + if ("h1" === tag && (markdown += "\n# "), "h2" === tag && (markdown += "\n## "), + "h3" === tag && (markdown += "\n### "), "li" === tag && (markdown += "\n- "), insideLink || "p" !== tag && "div" !== tag && "br" !== tag || (markdown += "\n"), + "strong" !== tag && "b" !== tag || (markdown += "**"), "em" !== tag && "i" !== tag || (markdown += "_"), + "a" === tag && (markdown += "[", insideLink = !0), node.shadowRoot ? Array.from(node.shadowRoot.childNodes).forEach(walk) : node.childNodes.forEach(walk), "a" === tag) { const href = node.getAttribute("href"); markdown += href ? `](${href})` : "]", insideLink = !1; } - "strong" !== tag && "b" !== tag || (markdown += "**"), "em" !== tag && "i" !== tag || (markdown += "_"), + "strong" !== tag && "b" !== tag || (markdown += "**"), "em" !== tag && "i" !== tag || (markdown += "_"), insideLink || "h1" !== tag && "h2" !== tag && "h3" !== tag && "p" !== tag && "div" !== tag || (markdown += "\n"); }(tempDiv), markdown.replace(/\n{3,}/g, "\n\n").trim(); }(document.body) : function(root) { @@ -630,7 +630,7 @@ const style = window.getComputedStyle(node); if ("none" === style.display || "hidden" === style.visibility) return; const isBlock = "block" === style.display || "flex" === style.display || "P" === node.tagName || "DIV" === node.tagName; - isBlock && (text += " "), node.shadowRoot ? Array.from(node.shadowRoot.childNodes).forEach(walk) : node.childNodes.forEach(walk), + isBlock && (text += " "), node.shadowRoot ? Array.from(node.shadowRoot.childNodes).forEach(walk) : node.childNodes.forEach(walk), isBlock && (text += "\n"); } } else text += node.textContent; @@ -729,25 +729,25 @@ } function startRecording(options = {}) { const {highlightColor: highlightColor = "#ff0000", successColor: successColor = "#00ff00", autoDisableTimeout: autoDisableTimeout = 18e5, keyboardShortcut: keyboardShortcut = "Ctrl+Shift+I"} = options; - if (!window.sentience_registry || 0 === window.sentience_registry.length) return alert("Registry empty. Run `await window.sentience.snapshot()` first!"), + if (!window.sentience_registry || 0 === window.sentience_registry.length) return alert("Registry empty. Run `await window.sentience.snapshot()` first!"), () => {}; window.sentience_registry_map = new Map, window.sentience_registry.forEach((el, idx) => { el && window.sentience_registry_map.set(el, idx); }); let highlightBox = document.getElementById("sentience-highlight-box"); - highlightBox || (highlightBox = document.createElement("div"), highlightBox.id = "sentience-highlight-box", - highlightBox.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 2147483647;\n border: 2px solid ${highlightColor};\n background: rgba(255, 0, 0, 0.1);\n display: none;\n transition: all 0.1s ease;\n box-sizing: border-box;\n `, + highlightBox || (highlightBox = document.createElement("div"), highlightBox.id = "sentience-highlight-box", + highlightBox.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 2147483647;\n border: 2px solid ${highlightColor};\n background: rgba(255, 0, 0, 0.1);\n display: none;\n transition: all 0.1s ease;\n box-sizing: border-box;\n `, document.body.appendChild(highlightBox)); let recordingIndicator = document.getElementById("sentience-recording-indicator"); - recordingIndicator || (recordingIndicator = document.createElement("div"), recordingIndicator.id = "sentience-recording-indicator", - recordingIndicator.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 3px;\n background: ${highlightColor};\n z-index: 2147483646;\n pointer-events: none;\n `, + recordingIndicator || (recordingIndicator = document.createElement("div"), recordingIndicator.id = "sentience-recording-indicator", + recordingIndicator.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 3px;\n background: ${highlightColor};\n z-index: 2147483646;\n pointer-events: none;\n `, document.body.appendChild(recordingIndicator)), recordingIndicator.style.display = "block"; const mouseOverHandler = e => { const el = e.target; if (!el || el === highlightBox || el === recordingIndicator) return; const rect = el.getBoundingClientRect(); - highlightBox.style.display = "block", highlightBox.style.top = rect.top + window.scrollY + "px", - highlightBox.style.left = rect.left + window.scrollX + "px", highlightBox.style.width = rect.width + "px", + highlightBox.style.display = "block", highlightBox.style.top = rect.top + window.scrollY + "px", + highlightBox.style.left = rect.left + window.scrollX + "px", highlightBox.style.width = rect.width + "px", highlightBox.style.height = rect.height + "px"; }, clickHandler = e => { e.preventDefault(), e.stopPropagation(); @@ -824,7 +824,7 @@ debug_snapshot: rawData }, jsonString = JSON.stringify(snippet, null, 2); navigator.clipboard.writeText(jsonString).then(() => { - highlightBox.style.border = `2px solid ${successColor}`, highlightBox.style.background = "rgba(0, 255, 0, 0.2)", + highlightBox.style.border = `2px solid ${successColor}`, highlightBox.style.background = "rgba(0, 255, 0, 0.2)", setTimeout(() => { highlightBox.style.border = `2px solid ${highlightColor}`, highlightBox.style.background = "rgba(255, 0, 0, 0.1)"; }, 500); @@ -834,15 +834,15 @@ }; let timeoutId = null; const stopRecording = () => { - document.removeEventListener("mouseover", mouseOverHandler, !0), document.removeEventListener("click", clickHandler, !0), - document.removeEventListener("keydown", keyboardHandler, !0), timeoutId && (clearTimeout(timeoutId), - timeoutId = null), highlightBox && (highlightBox.style.display = "none"), recordingIndicator && (recordingIndicator.style.display = "none"), + document.removeEventListener("mouseover", mouseOverHandler, !0), document.removeEventListener("click", clickHandler, !0), + document.removeEventListener("keydown", keyboardHandler, !0), timeoutId && (clearTimeout(timeoutId), + timeoutId = null), highlightBox && (highlightBox.style.display = "none"), recordingIndicator && (recordingIndicator.style.display = "none"), window.sentience_registry_map && window.sentience_registry_map.clear(), window.sentience_stopRecording === stopRecording && delete window.sentience_stopRecording; }, keyboardHandler = e => { - (e.ctrlKey || e.metaKey) && e.shiftKey && "I" === e.key && (e.preventDefault(), + (e.ctrlKey || e.metaKey) && e.shiftKey && "I" === e.key && (e.preventDefault(), stopRecording()); }; - return document.addEventListener("mouseover", mouseOverHandler, !0), document.addEventListener("click", clickHandler, !0), + return document.addEventListener("mouseover", mouseOverHandler, !0), document.addEventListener("click", clickHandler, !0), document.addEventListener("keydown", keyboardHandler, !0), autoDisableTimeout > 0 && (timeoutId = setTimeout(() => { stopRecording(); }, autoDisableTimeout)), window.sentience_stopRecording = stopRecording, stopRecording; @@ -855,6 +855,14 @@ timestamp: Date.now() }, "*"); } + function showGrid(grids, targetGridId = null) { + grids && Array.isArray(grids) && window.postMessage({ + type: "SENTIENCE_SHOW_GRID_OVERLAY", + grids: grids, + targetGridId: targetGridId, + timestamp: Date.now() + }, "*"); + } function clearOverlay() { window.postMessage({ type: "SENTIENCE_CLEAR_OVERLAY" @@ -875,6 +883,7 @@ click: click, startRecording: startRecording, showOverlay: showOverlay, + showGrid: showGrid, clearOverlay: clearOverlay }, window.sentience_iframe_handler_setup || (window.addEventListener("message", async event => { if ("SENTIENCE_IFRAME_SNAPSHOT_REQUEST" === event.data?.type) { @@ -902,4 +911,4 @@ } }), window.sentience_iframe_handler_setup = !0)); })(); -}(); +}(); \ No newline at end of file diff --git a/sentience/extension/manifest.json b/sentience/extension/manifest.json index 7c821a4..b497bf3 100644 --- a/sentience/extension/manifest.json +++ b/sentience/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Sentience Semantic Visual Grounding Extractor", - "version": "2.4.0", + "version": "2.4.1", "description": "Extract semantic visual grounding data from web pages", "permissions": ["activeTab", "scripting"], "host_permissions": [""], diff --git a/sentience/extension/pkg/sentience_core.js b/sentience/extension/pkg/sentience_core.js index 2696a64..ecba479 100644 --- a/sentience/extension/pkg/sentience_core.js +++ b/sentience/extension/pkg/sentience_core.js @@ -47,7 +47,7 @@ function getArrayU8FromWasm0(ptr, len) { let cachedDataViewMemory0 = null; function getDataViewMemory0() { - return (null === cachedDataViewMemory0 || !0 === cachedDataViewMemory0.buffer.detached || void 0 === cachedDataViewMemory0.buffer.detached && cachedDataViewMemory0.buffer !== wasm.memory.buffer) && (cachedDataViewMemory0 = new DataView(wasm.memory.buffer)), + return (null === cachedDataViewMemory0 || !0 === cachedDataViewMemory0.buffer.detached || void 0 === cachedDataViewMemory0.buffer.detached && cachedDataViewMemory0.buffer !== wasm.memory.buffer) && (cachedDataViewMemory0 = new DataView(wasm.memory.buffer)), cachedDataViewMemory0; } @@ -58,7 +58,7 @@ function getStringFromWasm0(ptr, len) { let cachedUint8ArrayMemory0 = null; function getUint8ArrayMemory0() { - return null !== cachedUint8ArrayMemory0 && 0 !== cachedUint8ArrayMemory0.byteLength || (cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer)), + return null !== cachedUint8ArrayMemory0 && 0 !== cachedUint8ArrayMemory0.byteLength || (cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer)), cachedUint8ArrayMemory0; } @@ -87,7 +87,7 @@ function isLikeNone(x) { function passStringToWasm0(arg, malloc, realloc) { if (void 0 === realloc) { const buf = cachedTextEncoder.encode(arg), ptr = malloc(buf.length, 1) >>> 0; - return getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf), WASM_VECTOR_LEN = buf.length, + return getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf), WASM_VECTOR_LEN = buf.length, ptr; } let len = arg.length, ptr = malloc(len, 1) >>> 0; @@ -188,7 +188,7 @@ function __wbg_get_imports() { return Number(getObject(arg0)); }, imports.wbg.__wbg___wbindgen_bigint_get_as_i64_6e32f5e6aff02e1d = function(arg0, arg1) { const v = getObject(arg1), ret = "bigint" == typeof v ? v : void 0; - getDataViewMemory0().setBigInt64(arg0 + 8, isLikeNone(ret) ? BigInt(0) : ret, !0), + getDataViewMemory0().setBigInt64(arg0 + 8, isLikeNone(ret) ? BigInt(0) : ret, !0), getDataViewMemory0().setInt32(arg0 + 0, !isLikeNone(ret), !0); }, imports.wbg.__wbg___wbindgen_boolean_get_dea25b33882b895b = function(arg0) { const v = getObject(arg0), ret = "boolean" == typeof v ? v : void 0; @@ -296,7 +296,7 @@ function __wbg_get_imports() { } function __wbg_finalize_init(instance, module) { - return wasm = instance.exports, __wbg_init.__wbindgen_wasm_module = module, cachedDataViewMemory0 = null, + return wasm = instance.exports, __wbg_init.__wbindgen_wasm_module = module, cachedDataViewMemory0 = null, cachedUint8ArrayMemory0 = null, wasm; } @@ -310,7 +310,7 @@ function initSync(module) { async function __wbg_init(module_or_path) { if (void 0 !== wasm) return wasm; - void 0 !== module_or_path && Object.getPrototypeOf(module_or_path) === Object.prototype && ({module_or_path: module_or_path} = module_or_path), + void 0 !== module_or_path && Object.getPrototypeOf(module_or_path) === Object.prototype && ({module_or_path: module_or_path} = module_or_path), void 0 === module_or_path && (module_or_path = new URL("sentience_core_bg.wasm", import.meta.url)); const imports = __wbg_get_imports(); ("string" == typeof module_or_path || "function" == typeof Request && module_or_path instanceof Request || "function" == typeof URL && module_or_path instanceof URL) && (module_or_path = fetch(module_or_path)); @@ -320,4 +320,4 @@ async function __wbg_init(module_or_path) { export { initSync }; -export default __wbg_init; +export default __wbg_init; \ No newline at end of file diff --git a/sentience/extension/pkg/sentience_core_bg.wasm b/sentience/extension/pkg/sentience_core_bg.wasm index 77c665abfd9e43f919d035790da226c96abcfa3a..71ba05599bb4624d0f43180988cc56107801b5cc 100644 GIT binary patch delta 8838 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 C`J#~k delta 8634 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 diff --git a/sentience/extension/release.json b/sentience/extension/release.json index e8f6da2..bfe54d3 100644 --- a/sentience/extension/release.json +++ b/sentience/extension/release.json @@ -1,45 +1,45 @@ { - "url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/275780781", - "assets_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/275780781/assets", - "upload_url": "https://uploads.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/275780781/assets{?name,label}", - "html_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/tag/v2.4.0", - "id": 275780781, + "url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/276563152", + "assets_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/276563152/assets", + "upload_url": "https://uploads.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/276563152/assets{?name,label}", + "html_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/tag/v2.4.1", + "id": 276563152, "author": { - "login": "github-actions[bot]", - "id": 41898282, - "node_id": "MDM6Qm90NDE4OTgyODI=", - "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "login": "rcholic", + "id": 135060, + "node_id": "MDQ6VXNlcjEzNTA2MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/135060?v=4", "gravatar_id": "", - "url": "https://api.github.com/users/github-actions%5Bbot%5D", - "html_url": "https://github.com/apps/github-actions", - "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", - "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", - "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", - "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", - "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", - "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", - "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", - "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", - "type": "Bot", + "url": "https://api.github.com/users/rcholic", + "html_url": "https://github.com/rcholic", + "followers_url": "https://api.github.com/users/rcholic/followers", + "following_url": "https://api.github.com/users/rcholic/following{/other_user}", + "gists_url": "https://api.github.com/users/rcholic/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rcholic/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rcholic/subscriptions", + "organizations_url": "https://api.github.com/users/rcholic/orgs", + "repos_url": "https://api.github.com/users/rcholic/repos", + "events_url": "https://api.github.com/users/rcholic/events{/privacy}", + "received_events_url": "https://api.github.com/users/rcholic/received_events", + "type": "User", "user_view_type": "public", "site_admin": false }, - "node_id": "RE_kwDOQshiJ84QcBSt", - "tag_name": "v2.4.0", + "node_id": "RE_kwDOQshiJ84QfATQ", + "tag_name": "v2.4.1", "target_commitish": "main", - "name": "Release v2.4.0", + "name": "Release v2.4.1", "draft": false, "immutable": false, "prerelease": false, - "created_at": "2026-01-11T03:04:44Z", - "updated_at": "2026-01-11T03:07:27Z", - "published_at": "2026-01-11T03:06:49Z", + "created_at": "2026-01-14T01:02:36Z", + "updated_at": "2026-01-14T01:04:42Z", + "published_at": "2026-01-14T01:04:00Z", "assets": [ { - "url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/338955721", - "id": 338955721, - "node_id": "RA_kwDOQshiJ84UNA3J", + "url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/340210571", + "id": 340210571, + "node_id": "RA_kwDOQshiJ84URzOL", "name": "extension-files.tar.gz", "label": "", "uploader": { @@ -65,17 +65,17 @@ }, "content_type": "application/gzip", "state": "uploaded", - "size": 73936, - "digest": "sha256:8e15a80621f3494616a751764e98a935933cea18b88423121d9f4373f0766306", - "download_count": 3, - "created_at": "2026-01-11T03:06:50Z", - "updated_at": "2026-01-11T03:06:50Z", - "browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.0/extension-files.tar.gz" + "size": 74389, + "digest": "sha256:ed8aeac5d364186b1a6b255aa3aeb5b562f204830f75402d528f2c7e6d819cfd", + "download_count": 0, + "created_at": "2026-01-14T01:04:41Z", + "updated_at": "2026-01-14T01:04:42Z", + "browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.1/extension-files.tar.gz" }, { - "url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/338955720", - "id": 338955720, - "node_id": "RA_kwDOQshiJ84UNA3I", + "url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/340210572", + "id": 340210572, + "node_id": "RA_kwDOQshiJ84URzOM", "name": "extension-package.zip", "label": "", "uploader": { @@ -101,16 +101,15 @@ }, "content_type": "application/zip", "state": "uploaded", - "size": 76016, - "digest": "sha256:56dcf5134d47ed4ab8025fb81c21946acf51461baa6973a60ea59727d6d44351", + "size": 76376, + "digest": "sha256:7f209ac1eac7d1a3be1a12248bf523f82a47f6767501dba7dc01660ed218763e", "download_count": 0, - "created_at": "2026-01-11T03:06:49Z", - "updated_at": "2026-01-11T03:06:50Z", - "browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.0/extension-package.zip" + "created_at": "2026-01-14T01:04:41Z", + "updated_at": "2026-01-14T01:04:42Z", + "browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.1/extension-package.zip" } ], - "tarball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/tarball/v2.4.0", - "zipball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/zipball/v2.4.0", - "body": "## What's Changed\r\n* Structural tags by @rcholic in https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/pull/28\r\n\r\n\r\n**Full Changelog**: https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/compare/v2.3.0...v2.4.0", - "mentions_count": 1 + "tarball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/tarball/v2.4.1", + "zipball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/zipball/v2.4.1", + "body": "" }