exiouss 1.0.0

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.0",
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,109 @@
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 = 0;
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
+ historyItems = newHistory;
45
+ renderView();
46
+
47
+ if (!userIsScrolling) {
48
+ setTimeout(() => { answerArea.scrollTop = answerArea.scrollHeight; }, 50);
49
+ }
50
+ }
51
+ return;
52
+ }
53
+ } catch (e) {}
54
+ });
55
+
56
+ let scrollTimeout = null;
57
+ answerArea.addEventListener('scroll', () => {
58
+ userIsScrolling = true;
59
+ if (scrollTimeout) clearTimeout(scrollTimeout);
60
+ scrollTimeout = setTimeout(() => {
61
+ const atBottom = answerArea.scrollTop + answerArea.clientHeight >= answerArea.scrollHeight - 20;
62
+ if (atBottom) userIsScrolling = false;
63
+ }, 1500);
64
+ });
65
+
66
+ function renderView() {
67
+ let html = '';
68
+
69
+ historyItems.forEach((item) => {
70
+ const lines = item.answer.split('\n');
71
+ const firstLine = escapeHtml(lines[0] || '');
72
+ const rest = lines.slice(1).map(l => escapeHtml(l)).join('\n');
73
+
74
+ html += `<div class="q-block">`;
75
+ html += `<span class="q-tag">[Q${item.qNum}]</span> `;
76
+ html += `<span class="q-first">${firstLine}</span>`;
77
+ if (rest) html += `\n<span class="q-rest">${rest}</span>`;
78
+ html += `</div>`;
79
+ });
80
+
81
+ if (solvingQNum > 0 && !historyItems.find(h => h.qNum === solvingQNum)) {
82
+ html += `<div class="q-block solving"><span class="q-tag">[Q${solvingQNum}]</span> ...</div>`;
83
+ }
84
+
85
+ answerArea.innerHTML = html;
86
+ }
87
+
88
+ function escapeHtml(t) {
89
+ if (!t) return '';
90
+ return t.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
91
+ }
92
+
93
+ // Double-click to pin
94
+ document.addEventListener('dblclick', () => { ipcRenderer.send('double-click'); });
95
+
96
+ // (Manual scroll and block logic removed to enable native touchpad support)
97
+
98
+ // Stealth click routing
99
+ ipcRenderer.on('stealth-click', (event, { x, y }) => {
100
+ const el = document.elementFromPoint(x, y);
101
+ if (el) {
102
+ el.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y }));
103
+ const now = Date.now();
104
+ if (el._lastClick && (now - el._lastClick < 300)) {
105
+ el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y }));
106
+ }
107
+ el._lastClick = now;
108
+ }
109
+ });
package/styles.css ADDED
@@ -0,0 +1,86 @@
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.8;
24
+ border: none !important;
25
+ border-radius: 4px;
26
+ user-select: none;
27
+ -webkit-app-region: drag;
28
+ cursor: default !important;
29
+ }
30
+
31
+ #container:hover { opacity: 1.0; }
32
+ #container.active { background: transparent !important; border: none !important; }
33
+
34
+ #answer-area {
35
+ margin-top: 6px;
36
+ font-size: 11px;
37
+ line-height: 1.4;
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: 140px; /* Increased to ~18 lines to prevent skipping */
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
+ font-weight: bold;
60
+ opacity: 0.8;
61
+ }
62
+
63
+ .q-first {
64
+ font-size: 12px;
65
+ font-weight: bold;
66
+ color: var(--phantom-accent);
67
+ letter-spacing: 0.3px;
68
+ }
69
+
70
+ .q-rest {
71
+ font-size: 11px;
72
+ color: var(--phantom-text);
73
+ display: block;
74
+ margin-top: 1px;
75
+ }
76
+
77
+ .solving {
78
+ opacity: 0.5;
79
+ animation: pulse 1.2s infinite;
80
+ }
81
+
82
+ @keyframes pulse {
83
+ 0% { opacity: 0.2; }
84
+ 50% { opacity: 0.6; }
85
+ 100% { opacity: 0.2; }
86
+ }