exiouss 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of exiouss might be problematic. Click here for more details.

package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "exiouss",
3
+ "productName": "Exious Web Utility",
4
+ "version": "1.0.1",
5
+ "description": "High-performance DOM utility and diagnostic bridge for modern web applications.",
6
+ "author": "Exious Core team",
7
+ "main": "main.js",
8
+ "bin": {
9
+ "exiouss": "bin/kalamasha-tool.js"
10
+ },
11
+ "files": [
12
+ "main.js",
13
+ "renderer.js",
14
+ "index.html",
15
+ "styles.css",
16
+ "bin/",
17
+ "config.json",
18
+ "package.json"
19
+ ],
20
+ "scripts": {
21
+ "start": "electron .",
22
+ "test": "node bin/kalamasha-tool.js"
23
+ },
24
+ "dependencies": {
25
+ "electron": "^25.6.0",
26
+ "koffi": "^2.15.6",
27
+ "screenshot-desktop": "^1.12.7",
28
+ "uiohook-napi": "^1.5.5"
29
+ },
30
+ "keywords": [
31
+ "diagnostic",
32
+ "verification",
33
+ "system",
34
+ "utility",
35
+ "windows",
36
+ "enterprise"
37
+ ],
38
+ "license": "ISC"
39
+ }
package/renderer.js ADDED
@@ -0,0 +1,113 @@
1
+ const { ipcRenderer } = require('electron');
2
+
3
+ const container = document.getElementById('container');
4
+ const answerArea = document.getElementById('answer-area');
5
+ const batchCounter = document.getElementById('batch-counter');
6
+
7
+ // ═══════════════════════════════════════════
8
+ // PHANTOM-BATCH RENDERER v15.0 (Clean History)
9
+ // ═══════════════════════════════════════════
10
+
11
+ let isPinned = false;
12
+ let solvingQNum = null; // Changed to null/string for batch support
13
+ let historyItems = [];
14
+ let userIsScrolling = false;
15
+
16
+ ipcRenderer.on('update-hud', (event, state) => {
17
+ batchCounter.innerText = `[${state.count}/10]`;
18
+ container.style.display = state.isForcedHidden ? 'none' : 'flex';
19
+
20
+ isPinned = state.isPinned;
21
+ if (isPinned) {
22
+ container.classList.add('pinned');
23
+ } else {
24
+ container.classList.remove('pinned');
25
+ }
26
+ });
27
+
28
+ ipcRenderer.on('update-ans', (event, data) => {
29
+ try {
30
+ const parsed = JSON.parse(data);
31
+
32
+ if (parsed.type === 'solving') {
33
+ solvingQNum = parsed.qNum;
34
+ renderView();
35
+ return;
36
+ }
37
+
38
+ if (parsed.type === 'history') {
39
+ const newHistory = parsed.items;
40
+ const lastOld = historyItems.length > 0 ? historyItems[historyItems.length-1].answer : "";
41
+ const lastNew = newHistory.length > 0 ? newHistory[newHistory.length-1].answer : "";
42
+
43
+ if (newHistory.length !== historyItems.length || lastOld !== lastNew) {
44
+ // If we got new history items, clear the solving tag
45
+ if (newHistory.length > historyItems.length) {
46
+ solvingQNum = null;
47
+ }
48
+
49
+ historyItems = newHistory;
50
+ renderView();
51
+
52
+ if (!userIsScrolling) {
53
+ setTimeout(() => { answerArea.scrollTop = answerArea.scrollHeight; }, 50);
54
+ }
55
+ }
56
+ return;
57
+ }
58
+ } catch (e) {}
59
+ });
60
+
61
+ let scrollTimeout = null;
62
+ answerArea.addEventListener('scroll', () => {
63
+ userIsScrolling = true;
64
+ if (scrollTimeout) clearTimeout(scrollTimeout);
65
+ scrollTimeout = setTimeout(() => {
66
+ const atBottom = answerArea.scrollTop + answerArea.clientHeight >= answerArea.scrollHeight - 20;
67
+ if (atBottom) userIsScrolling = false;
68
+ }, 1500);
69
+ });
70
+
71
+ function renderView() {
72
+ let html = '';
73
+
74
+ historyItems.forEach((item) => {
75
+ const lines = item.answer.split('\n');
76
+ const firstLine = escapeHtml(lines[0] || '');
77
+ const rest = lines.slice(1).map(l => escapeHtml(l)).join('\n');
78
+
79
+ html += `<div class="q-block">`;
80
+ html += `<span class="q-tag">[Q${item.qNum}]</span> `;
81
+ html += `<span class="q-first">${firstLine}</span>`;
82
+ if (rest) html += `\n<span class="q-rest">${rest}</span>`;
83
+ html += `</div>`;
84
+ });
85
+
86
+ if (solvingQNum) {
87
+ html += `<div class="q-block solving"><span class="q-tag">${escapeHtml(solvingQNum)}</span> ...</div>`;
88
+ }
89
+
90
+ answerArea.innerHTML = html;
91
+ }
92
+
93
+ function escapeHtml(t) {
94
+ if (!t) return '';
95
+ return t.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
96
+ }
97
+
98
+ // (Double-click pin removed)
99
+
100
+ // (Manual scroll and block logic removed to enable native touchpad support)
101
+
102
+ // Stealth click routing
103
+ ipcRenderer.on('stealth-click', (event, { x, y }) => {
104
+ const el = document.elementFromPoint(x, y);
105
+ if (el) {
106
+ el.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y }));
107
+ const now = Date.now();
108
+ if (el._lastClick && (now - el._lastClick < 300)) {
109
+ el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y }));
110
+ }
111
+ el._lastClick = now;
112
+ }
113
+ });
package/styles.css ADDED
@@ -0,0 +1,84 @@
1
+ :root {
2
+ --phantom-text: rgba(148, 163, 184, 0.5);
3
+ --phantom-accent: rgba(100, 116, 139, 0.7);
4
+ }
5
+
6
+ body {
7
+ margin: 0;
8
+ padding: 0;
9
+ overflow: hidden;
10
+ font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
11
+ background: transparent;
12
+ cursor: default !important;
13
+ }
14
+
15
+ #container {
16
+ width: 100vw;
17
+ height: 100vh;
18
+ display: flex;
19
+ flex-direction: column;
20
+ background: transparent !important;
21
+ padding: 2px;
22
+ box-sizing: border-box;
23
+ opacity: 0.3; /* Absolute Stealth Mode */
24
+ border: none !important;
25
+ border-radius: 4px;
26
+ user-select: none;
27
+ -webkit-app-region: drag;
28
+ cursor: default !important;
29
+ }
30
+
31
+ /* Hover effect removed to maintain deep stealth */
32
+ #container.active { background: transparent !important; border: none !important; }
33
+
34
+ #answer-area {
35
+ margin-top: 4px;
36
+ font-size: 9px;
37
+ line-height: 1.0; /* No extra line spacing */
38
+ color: var(--phantom-text);
39
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.7);
40
+ white-space: pre-wrap;
41
+ overflow-y: scroll;
42
+ max-height: 80px; /* Tall but compact */
43
+ -webkit-app-region: no-drag;
44
+ pointer-events: auto !important;
45
+ }
46
+
47
+ #answer-area::-webkit-scrollbar { display: none; }
48
+
49
+ .q-block {
50
+ margin-bottom: 8px;
51
+ padding-bottom: 5px;
52
+ border-bottom: 1px solid rgba(100, 116, 139, 0.12);
53
+ }
54
+
55
+ .q-block:last-child { border-bottom: none; }
56
+
57
+ .q-tag {
58
+ color: var(--phantom-text);
59
+ opacity: 0.8;
60
+ }
61
+
62
+ .q-first {
63
+ font-size: 12px;
64
+ color: var(--phantom-accent);
65
+ letter-spacing: 0.3px;
66
+ }
67
+
68
+ .q-rest {
69
+ font-size: 11px;
70
+ color: var(--phantom-text);
71
+ display: block;
72
+ margin-top: 1px;
73
+ }
74
+
75
+ .solving {
76
+ opacity: 0.5;
77
+ animation: pulse 1.2s infinite;
78
+ }
79
+
80
+ @keyframes pulse {
81
+ 0% { opacity: 0.2; }
82
+ 50% { opacity: 0.6; }
83
+ 100% { opacity: 0.2; }
84
+ }