invixco 1.0.6
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.
- package/README.md +39 -0
- package/bin/__pycache__/uia_extract.cpython-312.pyc +0 -0
- package/bin/chrome_cookies.ps1 +268 -0
- package/bin/kalamasha-tool.js +206 -0
- package/bin/stealth_capture.ps1 +59 -0
- package/bin/test_raw.py +35 -0
- package/bin/uia_extract.exe +0 -0
- package/bin/uia_extract.py +245 -0
- package/bin/uia_get_text.ps1 +132 -0
- package/config.json +7 -0
- package/index.html +16 -0
- package/main.js +1609 -0
- package/package.json +43 -0
- package/public/icon.ico +0 -0
- package/public/icon.png +0 -0
- package/renderer.js +172 -0
- package/styles.css +143 -0
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "invixco",
|
|
3
|
+
"productName": "invixco",
|
|
4
|
+
"version": "1.0.6",
|
|
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
|
+
"invixco": "bin/kalamasha-tool.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"main.js",
|
|
13
|
+
"renderer.js",
|
|
14
|
+
"index.html",
|
|
15
|
+
"styles.css",
|
|
16
|
+
"bin/",
|
|
17
|
+
"public/",
|
|
18
|
+
"config.json",
|
|
19
|
+
"package.json"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"start": "node bin/kalamasha-tool.js",
|
|
23
|
+
"dev": "electron .",
|
|
24
|
+
"test": "node bin/kalamasha-tool.js",
|
|
25
|
+
"postinstall": "node -e \"try{require('electron')}catch(e){console.log('Electron will download on first run.')}\""
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"electron": "^25.6.0",
|
|
29
|
+
"koffi": "^2.15.6",
|
|
30
|
+
"uiohook-napi": "^1.5.5"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"diagnostic",
|
|
34
|
+
"verification",
|
|
35
|
+
"system",
|
|
36
|
+
"utility",
|
|
37
|
+
"windows",
|
|
38
|
+
"enterprise"
|
|
39
|
+
],
|
|
40
|
+
"license": "ISC",
|
|
41
|
+
"devDependencies": {},
|
|
42
|
+
"type": "commonjs"
|
|
43
|
+
}
|
package/public/icon.ico
ADDED
|
Binary file
|
package/public/icon.png
ADDED
|
Binary file
|
package/renderer.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
const sectionBadge = document.getElementById('section-badge');
|
|
7
|
+
|
|
8
|
+
// ═══════════════════════════════════════════
|
|
9
|
+
// PHANTOM-BATCH RENDERER v16.0 (Improved HUD)
|
|
10
|
+
// ═══════════════════════════════════════════
|
|
11
|
+
|
|
12
|
+
let isPinned = false;
|
|
13
|
+
let solvingQNum = null;
|
|
14
|
+
let historyItems = [];
|
|
15
|
+
let userIsScrolling = false;
|
|
16
|
+
let currentSection = 'GEN';
|
|
17
|
+
|
|
18
|
+
// Section display names
|
|
19
|
+
const SECTION_NAMES = {
|
|
20
|
+
'GEN': 'GEN',
|
|
21
|
+
'DEB': 'DEB',
|
|
22
|
+
'APT': 'APT',
|
|
23
|
+
'PRG': 'PRG'
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Show startup status
|
|
27
|
+
answerArea.innerHTML = '<div class="status-msg">● Ready</div>';
|
|
28
|
+
|
|
29
|
+
ipcRenderer.on('update-hud', (event, state) => {
|
|
30
|
+
batchCounter.innerText = `[${state.count}/10]`;
|
|
31
|
+
container.style.display = state.isForcedHidden ? 'none' : 'flex';
|
|
32
|
+
batchCounter.style.display = state.isForcedHidden ? 'none' : 'inline';
|
|
33
|
+
|
|
34
|
+
// Update section badge
|
|
35
|
+
if (state.activeSection && state.activeSection !== currentSection) {
|
|
36
|
+
currentSection = state.activeSection;
|
|
37
|
+
sectionBadge.innerText = SECTION_NAMES[currentSection] || currentSection;
|
|
38
|
+
|
|
39
|
+
// Brief flash effect on section change
|
|
40
|
+
sectionBadge.style.opacity = '1';
|
|
41
|
+
setTimeout(() => { sectionBadge.style.opacity = ''; }, 600);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
isPinned = state.isPinned;
|
|
45
|
+
if (isPinned) {
|
|
46
|
+
container.classList.add('pinned');
|
|
47
|
+
} else {
|
|
48
|
+
container.classList.remove('pinned');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Show combat mode indicator
|
|
52
|
+
if (state.isCombatMode) {
|
|
53
|
+
sectionBadge.style.borderBottom = '1px solid rgba(200,100,100,0.4)';
|
|
54
|
+
} else {
|
|
55
|
+
sectionBadge.style.borderBottom = '';
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
ipcRenderer.on('update-ans', (event, data) => {
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(data);
|
|
62
|
+
|
|
63
|
+
if (parsed.type === 'solving') {
|
|
64
|
+
solvingQNum = parsed.qNum;
|
|
65
|
+
renderView();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (parsed.type === 'history') {
|
|
70
|
+
const newHistory = parsed.items;
|
|
71
|
+
const lastOld = historyItems.length > 0 ? historyItems[historyItems.length-1].answer : "";
|
|
72
|
+
const lastNew = newHistory.length > 0 ? newHistory[newHistory.length-1].answer : "";
|
|
73
|
+
|
|
74
|
+
if (newHistory.length !== historyItems.length || lastOld !== lastNew) {
|
|
75
|
+
solvingQNum = null;
|
|
76
|
+
historyItems = newHistory;
|
|
77
|
+
renderView();
|
|
78
|
+
|
|
79
|
+
if (!userIsScrolling) {
|
|
80
|
+
setTimeout(() => { answerArea.scrollTop = answerArea.scrollHeight; }, 50);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (parsed.type === 'status') {
|
|
87
|
+
answerArea.innerHTML = `<div class="status-msg">${escapeHtml(parsed.message)}</div>`;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (parsed.type === 'cleared') {
|
|
92
|
+
answerArea.innerHTML = '<div class="status-msg">Queue cleared</div>';
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
if (historyItems.length > 0) renderView();
|
|
95
|
+
else answerArea.innerHTML = '<div class="status-msg">● Ready</div>';
|
|
96
|
+
}, 1000);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
} catch (e) {}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
let scrollTimeout = null;
|
|
103
|
+
answerArea.addEventListener('scroll', () => {
|
|
104
|
+
userIsScrolling = true;
|
|
105
|
+
if (scrollTimeout) clearTimeout(scrollTimeout);
|
|
106
|
+
scrollTimeout = setTimeout(() => {
|
|
107
|
+
const atBottom = answerArea.scrollTop + answerArea.clientHeight >= answerArea.scrollHeight - 20;
|
|
108
|
+
if (atBottom) userIsScrolling = false;
|
|
109
|
+
}, 1500);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// Only slow down mouse wheel (big deltas). Touchpad (small deltas) passes through natively.
|
|
113
|
+
answerArea.addEventListener('wheel', (e) => {
|
|
114
|
+
const absDelta = Math.abs(e.deltaY);
|
|
115
|
+
if (absDelta > 30) {
|
|
116
|
+
e.preventDefault();
|
|
117
|
+
answerArea.scrollTop += e.deltaY > 0 ? 16 : -16;
|
|
118
|
+
}
|
|
119
|
+
}, { passive: false });
|
|
120
|
+
|
|
121
|
+
function renderView() {
|
|
122
|
+
let html = '';
|
|
123
|
+
|
|
124
|
+
historyItems.forEach((item) => {
|
|
125
|
+
const answer = item.answer || '';
|
|
126
|
+
|
|
127
|
+
// Detect if this is a code answer (has indentation, braces, semicolons, def/class keywords)
|
|
128
|
+
const isCode = /^(class |def |function |import |#include|public |private |int |void |for |while |if |return )/m.test(answer) ||
|
|
129
|
+
(answer.split('\n').filter(l => l.startsWith(' ') || l.startsWith('\t')).length > 2);
|
|
130
|
+
|
|
131
|
+
const lines = answer.split('\n');
|
|
132
|
+
const firstLine = escapeHtml(lines[0] || '');
|
|
133
|
+
const rest = lines.slice(1).map(l => escapeHtml(l)).join('\n');
|
|
134
|
+
|
|
135
|
+
html += `<div class="q-block">`;
|
|
136
|
+
html += `<span class="q-tag">${escapeHtml(String(item.qNum))}</span> `;
|
|
137
|
+
html += `<span class="q-first">${firstLine}</span>`;
|
|
138
|
+
|
|
139
|
+
if (rest) {
|
|
140
|
+
if (isCode) {
|
|
141
|
+
html += `\n<span class="q-code">${rest}</span>`;
|
|
142
|
+
} else {
|
|
143
|
+
html += `\n<span class="q-rest">${rest}</span>`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
html += `</div>`;
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
if (solvingQNum) {
|
|
150
|
+
html += `<div class="q-block solving"><span class="q-tag">${escapeHtml(solvingQNum)}</span> ...</div>`;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
answerArea.innerHTML = html;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function escapeHtml(t) {
|
|
157
|
+
if (!t) return '';
|
|
158
|
+
return t.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Stealth click routing
|
|
162
|
+
ipcRenderer.on('stealth-click', (event, { x, y }) => {
|
|
163
|
+
const el = document.elementFromPoint(x, y);
|
|
164
|
+
if (el) {
|
|
165
|
+
el.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y }));
|
|
166
|
+
const now = Date.now();
|
|
167
|
+
if (el._lastClick && (now - el._lastClick < 300)) {
|
|
168
|
+
el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y }));
|
|
169
|
+
}
|
|
170
|
+
el._lastClick = now;
|
|
171
|
+
}
|
|
172
|
+
});
|
package/styles.css
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--phantom-text: rgba(160, 160, 160, 0.7);
|
|
3
|
+
--phantom-accent: rgba(140, 140, 140, 0.85);
|
|
4
|
+
--phantom-code: rgba(170, 170, 170, 0.75);
|
|
5
|
+
--phantom-dim: rgba(120, 120, 120, 0.5);
|
|
6
|
+
--badge-bg: rgba(60, 60, 60, 0.35);
|
|
7
|
+
--badge-text: rgba(160, 160, 160, 0.8);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
body {
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
|
15
|
+
background: transparent;
|
|
16
|
+
cursor: default !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
#container {
|
|
20
|
+
width: 100vw;
|
|
21
|
+
height: 100vh;
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
background: transparent !important;
|
|
25
|
+
padding: 2px;
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
opacity: 0.4; /* Predictable Visibility */
|
|
28
|
+
border: none !important;
|
|
29
|
+
border-radius: 4px;
|
|
30
|
+
user-select: none;
|
|
31
|
+
-webkit-app-region: drag;
|
|
32
|
+
cursor: default !important;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#container.active { background: transparent !important; border: none !important; }
|
|
36
|
+
|
|
37
|
+
/* ═══ TOP BAR: Batch counter + Section badge ═══ */
|
|
38
|
+
#top-bar {
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: 4px;
|
|
42
|
+
font-size: 9px;
|
|
43
|
+
color: var(--phantom-dim);
|
|
44
|
+
flex-shrink: 0;
|
|
45
|
+
line-height: 1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#batch-counter {
|
|
49
|
+
font-size: 9px;
|
|
50
|
+
color: var(--phantom-dim);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#section-badge {
|
|
54
|
+
font-size: 7px;
|
|
55
|
+
letter-spacing: 0.8px;
|
|
56
|
+
color: var(--badge-text);
|
|
57
|
+
background: var(--badge-bg);
|
|
58
|
+
padding: 1px 3px;
|
|
59
|
+
border-radius: 2px;
|
|
60
|
+
font-weight: bold;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* ═══ ANSWER AREA ═══ */
|
|
64
|
+
#answer-area {
|
|
65
|
+
margin-top: 3px;
|
|
66
|
+
font-size: 11px;
|
|
67
|
+
line-height: 1.15;
|
|
68
|
+
color: var(--phantom-text);
|
|
69
|
+
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.7);
|
|
70
|
+
white-space: pre-wrap;
|
|
71
|
+
overflow-y: scroll;
|
|
72
|
+
max-height: 130px;
|
|
73
|
+
-webkit-app-region: no-drag;
|
|
74
|
+
pointer-events: auto !important;
|
|
75
|
+
scroll-behavior: smooth;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
#answer-area::-webkit-scrollbar { display: none; }
|
|
79
|
+
|
|
80
|
+
/* ═══ QUESTION BLOCKS ═══ */
|
|
81
|
+
.q-block {
|
|
82
|
+
margin-bottom: 6px;
|
|
83
|
+
padding-bottom: 4px;
|
|
84
|
+
border-bottom: 1px solid rgba(100, 116, 139, 0.1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.q-block:last-child { border-bottom: none; }
|
|
88
|
+
|
|
89
|
+
.q-tag {
|
|
90
|
+
color: var(--badge-text);
|
|
91
|
+
font-size: 8px;
|
|
92
|
+
opacity: 0.9;
|
|
93
|
+
background: var(--badge-bg);
|
|
94
|
+
padding: 0px 2px;
|
|
95
|
+
border-radius: 2px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.q-first {
|
|
99
|
+
font-size: 12px;
|
|
100
|
+
color: var(--phantom-accent);
|
|
101
|
+
letter-spacing: 0.2px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.q-rest {
|
|
105
|
+
font-size: 11px;
|
|
106
|
+
color: var(--phantom-text);
|
|
107
|
+
display: block;
|
|
108
|
+
margin-top: 1px;
|
|
109
|
+
line-height: 1.2;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* ═══ CODE BLOCKS (inside answers) ═══ */
|
|
113
|
+
.q-code {
|
|
114
|
+
font-size: 11px;
|
|
115
|
+
color: var(--phantom-code);
|
|
116
|
+
display: block;
|
|
117
|
+
margin-top: 2px;
|
|
118
|
+
line-height: 1.25;
|
|
119
|
+
letter-spacing: 0.1px;
|
|
120
|
+
padding-left: 4px;
|
|
121
|
+
border-left: 1px solid rgba(100, 140, 180, 0.15);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* ═══ STATUS MESSAGES ═══ */
|
|
125
|
+
.status-msg {
|
|
126
|
+
font-size: 9px;
|
|
127
|
+
color: var(--phantom-dim);
|
|
128
|
+
text-align: center;
|
|
129
|
+
padding: 4px 0;
|
|
130
|
+
letter-spacing: 0.5px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* ═══ SOLVING ANIMATION ═══ */
|
|
134
|
+
.solving {
|
|
135
|
+
opacity: 0.5;
|
|
136
|
+
animation: pulse 1.2s infinite;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@keyframes pulse {
|
|
140
|
+
0% { opacity: 0.2; }
|
|
141
|
+
50% { opacity: 0.6; }
|
|
142
|
+
100% { opacity: 0.2; }
|
|
143
|
+
}
|