@mazees/mark 5.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.
- package/LICENSE +29 -0
- package/README.md +209 -0
- package/bin/mark.js +27 -0
- package/out/renderer/assets/icon-DHo2CYph.svg +1 -0
- package/out/renderer/assets/index-G2fADWO-.js +4768 -0
- package/out/renderer/assets/index-f3mVse3c.css +1 -0
- package/out/renderer/assets/music-cover-CG4vi3kZ.png +0 -0
- package/out/renderer/assets/poppins-devanagari-400-normal-CJDn6rn8.woff2 +0 -0
- package/out/renderer/assets/poppins-devanagari-400-normal-CqVvlrh5.woff +0 -0
- package/out/renderer/assets/poppins-devanagari-500-normal-BIdkeU1p.woff2 +0 -0
- package/out/renderer/assets/poppins-devanagari-500-normal-DMPDjHtT.woff +0 -0
- package/out/renderer/assets/poppins-devanagari-600-normal-ClASKHrr.woff +0 -0
- package/out/renderer/assets/poppins-devanagari-600-normal-STEjXBNN.woff2 +0 -0
- package/out/renderer/assets/poppins-devanagari-700-normal-O-jipLrW.woff2 +0 -0
- package/out/renderer/assets/poppins-devanagari-700-normal-fHs-vx92.woff +0 -0
- package/out/renderer/assets/poppins-latin-400-normal-BOb3E3N0.woff +0 -0
- package/out/renderer/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-500-normal-DGXqpDMm.woff +0 -0
- package/out/renderer/assets/poppins-latin-600-normal-BJdTmd5m.woff +0 -0
- package/out/renderer/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-700-normal-BVuQR_eA.woff +0 -0
- package/out/renderer/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-ext-400-normal-DaBSavcJ.woff +0 -0
- package/out/renderer/assets/poppins-latin-ext-400-normal-by3JarPu.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-ext-500-normal-CK-6C4Hw.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-ext-500-normal-CgAe2rWW.woff +0 -0
- package/out/renderer/assets/poppins-latin-ext-600-normal-CAhIAdZj.woff2 +0 -0
- package/out/renderer/assets/poppins-latin-ext-600-normal-Df5ffKXP.woff +0 -0
- package/out/renderer/assets/poppins-latin-ext-700-normal-DctTR6Tg.woff +0 -0
- package/out/renderer/assets/poppins-latin-ext-700-normal-cby-RkWa.woff2 +0 -0
- package/out/renderer/favicon.ico +0 -0
- package/out/renderer/icon-256.png +0 -0
- package/out/renderer/icon.svg +1 -0
- package/out/renderer/index.html +25 -0
- package/out/renderer/manifest.json +25 -0
- package/out/renderer/robot-simulator.html +1640 -0
- package/package.json +106 -0
- package/src/cli/index.js +332 -0
- package/src/cli/monitor.js +413 -0
- package/src/cli/theme.js +347 -0
- package/src/launcher/MarkTray.cs +227 -0
- package/src/main/browser-agent.js +1132 -0
- package/src/main/git-service.js +90 -0
- package/src/main/google/google-calendar.js +69 -0
- package/src/main/google/google-drive.js +263 -0
- package/src/main/google/google-gmail.js +131 -0
- package/src/main/google/google-service.js +241 -0
- package/src/main/node-tools.js +23 -0
- package/src/main/pc-agent-scripts/mouse-locker.ps1 +76 -0
- package/src/main/pc-agent-scripts/ocr-region.ps1 +185 -0
- package/src/main/pc-agent-scripts/pc-daemon.ps1 +726 -0
- package/src/main/pc-agent-scripts/pc-overlay.ps1 +253 -0
- package/src/main/pc-agent-scripts/pick-folder.ps1 +33 -0
- package/src/main/pc-agent-scripts/read-ui.ps1 +181 -0
- package/src/main/pc-agent-scripts/take-screenshot.ps1 +24 -0
- package/src/main/pc-agent-scripts/win-action.ps1 +380 -0
- package/src/main/plugins/plugin-loader.js +306 -0
- package/src/main/skills/skill-manager.js +265 -0
- package/src/main/syntax-validator.js +455 -0
- package/src/main/task-daemon.js +117 -0
- package/src/main/telegram/telegram-service.js +835 -0
- package/src/main/tools/browser-tools.js +516 -0
- package/src/main/tools/file-tools.js +1126 -0
- package/src/main/tools/git-tools.js +79 -0
- package/src/main/tools/google-tools.js +566 -0
- package/src/main/tools/index.js +36 -0
- package/src/main/tools/media-tools.js +42 -0
- package/src/main/tools/system-tools.js +295 -0
- package/src/main/tools/task-tools.js +73 -0
- package/src/main/tools/telegram-tools.js +101 -0
- package/src/renderer/index.html +24 -0
- package/src/renderer/public/favicon.ico +0 -0
- package/src/renderer/public/icon-256.png +0 -0
- package/src/renderer/public/icon.svg +1 -0
- package/src/renderer/public/manifest.json +25 -0
- package/src/renderer/public/robot-simulator.html +1640 -0
- package/src/renderer/src/App.jsx +304 -0
- package/src/renderer/src/api/ai/awareness.js +294 -0
- package/src/renderer/src/api/ai/chatSummarizer.js +79 -0
- package/src/renderer/src/api/ai/contextCompactor.js +129 -0
- package/src/renderer/src/api/ai/contextManager.js +1130 -0
- package/src/renderer/src/api/ai/core.js +167 -0
- package/src/renderer/src/api/ai/index.js +4 -0
- package/src/renderer/src/api/ai/memoryGroomer.js +101 -0
- package/src/renderer/src/api/ai/persona.js +115 -0
- package/src/renderer/src/api/ai/planning.js +317 -0
- package/src/renderer/src/api/ai/relationship.js +177 -0
- package/src/renderer/src/api/ai/skillSynthesizer.js +168 -0
- package/src/renderer/src/api/ai/tools.js +167 -0
- package/src/renderer/src/api/ai/utils.js +359 -0
- package/src/renderer/src/api/db.js +1013 -0
- package/src/renderer/src/api/oramaStore.js +592 -0
- package/src/renderer/src/api/ragPipeline.js +87 -0
- package/src/renderer/src/api/subagent/subagentExecutor.js +780 -0
- package/src/renderer/src/api/subagent/subagentPrompt.js +44 -0
- package/src/renderer/src/api/subagent/subagentStore.js +173 -0
- package/src/renderer/src/api/taskExecutor.js +18 -0
- package/src/renderer/src/api/taskStore.js +315 -0
- package/src/renderer/src/api/tools/core-tools.js +707 -0
- package/src/renderer/src/api/tools/index.js +151 -0
- package/src/renderer/src/api/turnPairMigrator.js +200 -0
- package/src/renderer/src/api/vectorMemory.js +136 -0
- package/src/renderer/src/api/wakeWord.js +101 -0
- package/src/renderer/src/api/web-bridge.js +885 -0
- package/src/renderer/src/api/webSpeech.js +178 -0
- package/src/renderer/src/api/workspaceRag.js +76 -0
- package/src/renderer/src/assets/electron.svg +10 -0
- package/src/renderer/src/assets/icon.svg +1 -0
- package/src/renderer/src/assets/main.css +589 -0
- package/src/renderer/src/assets/music-cover.png +0 -0
- package/src/renderer/src/assets/wavy-lines.svg +25 -0
- package/src/renderer/src/components/Chat/ApprovalBubble.jsx +127 -0
- package/src/renderer/src/components/Chat/CodeBlock.jsx +83 -0
- package/src/renderer/src/components/Chat/DurableTaskBubble.jsx +455 -0
- package/src/renderer/src/components/Chat/FileDiffModal.jsx +328 -0
- package/src/renderer/src/components/Chat/GeminiWidgets.jsx +82 -0
- package/src/renderer/src/components/Chat/MemoryFooterBubble.jsx +34 -0
- package/src/renderer/src/components/Chat/MessageBubble.jsx +459 -0
- package/src/renderer/src/components/Chat/PluginExecutionBubble.jsx +41 -0
- package/src/renderer/src/components/Chat/ThinkingBubble.jsx +316 -0
- package/src/renderer/src/components/Chat/YoutubeSearchBubble.jsx +43 -0
- package/src/renderer/src/components/Chat/YoutubeSummaryBubble.jsx +40 -0
- package/src/renderer/src/components/Chat/index.js +11 -0
- package/src/renderer/src/components/ChatList.jsx +434 -0
- package/src/renderer/src/components/GlobalCameraManager.jsx +67 -0
- package/src/renderer/src/components/Versions.jsx +15 -0
- package/src/renderer/src/components/YoutubeMusicPlayer.jsx +375 -0
- package/src/renderer/src/components/camera/CameraPreview.jsx +236 -0
- package/src/renderer/src/components/config/AiEngineSection.jsx +363 -0
- package/src/renderer/src/components/config/CameraSection.jsx +100 -0
- package/src/renderer/src/components/config/PermissionsSection.jsx +130 -0
- package/src/renderer/src/components/config/ShortcutSection.jsx +102 -0
- package/src/renderer/src/components/config/VoiceSection.jsx +110 -0
- package/src/renderer/src/components/config/index.js +5 -0
- package/src/renderer/src/components/core/Avatar.jsx +2197 -0
- package/src/renderer/src/components/core/ConfirmModal.jsx +80 -0
- package/src/renderer/src/components/core/DraggableHoloCard.jsx +125 -0
- package/src/renderer/src/components/core/FloatingMenu.jsx +272 -0
- package/src/renderer/src/components/core/HoloCard.jsx +64 -0
- package/src/renderer/src/components/core/InputBar.jsx +1346 -0
- package/src/renderer/src/components/core/ProcessPanel.jsx +216 -0
- package/src/renderer/src/components/core/ResponseArea.jsx +149 -0
- package/src/renderer/src/components/core/StatusIndicator.jsx +59 -0
- package/src/renderer/src/components/core/ThoughtNeuralFlow.jsx +168 -0
- package/src/renderer/src/components/core/ToolClustersDeck.jsx +210 -0
- package/src/renderer/src/components/core/native-skills.js +43 -0
- package/src/renderer/src/components/neural-core/EmotionalCortexLobe.jsx +359 -0
- package/src/renderer/src/components/neural-core/NodeDissectionModal.jsx +57 -0
- package/src/renderer/src/components/neural-core/ProceduralMatrixLobe.jsx +193 -0
- package/src/renderer/src/components/neural-core/ProceduralSkillModal.jsx +53 -0
- package/src/renderer/src/components/neural-core/ResetAiModal.jsx +198 -0
- package/src/renderer/src/components/neural-core/SynapticMemoryLobe.jsx +204 -0
- package/src/renderer/src/components/neural-core/traitMeta.js +102 -0
- package/src/renderer/src/components/subagent/AgentChatFeed.jsx +603 -0
- package/src/renderer/src/components/subagent/AgentInspector.jsx +224 -0
- package/src/renderer/src/components/subagent/AgentSidebar.jsx +216 -0
- package/src/renderer/src/components/subagent/SubagentIntercom.jsx +572 -0
- package/src/renderer/src/components/subagent/SubagentTopologyMap.jsx +423 -0
- package/src/renderer/src/contexts/ApprovalContext.jsx +425 -0
- package/src/renderer/src/contexts/ChatContext.jsx +61 -0
- package/src/renderer/src/contexts/YoutubeMusicContext.jsx +333 -0
- package/src/renderer/src/data/faqData.js +202 -0
- package/src/renderer/src/hooks/agent/executeAgentTool.js +895 -0
- package/src/renderer/src/hooks/agent/index.js +4 -0
- package/src/renderer/src/hooks/agent/useMarkMusic.js +75 -0
- package/src/renderer/src/hooks/agent/useMarkPlan.js +2739 -0
- package/src/renderer/src/hooks/agent/useMarkState.js +173 -0
- package/src/renderer/src/hooks/agent/useMarkYoutube.js +82 -0
- package/src/renderer/src/hooks/agent/useRelationalGrowth.js +201 -0
- package/src/renderer/src/hooks/telegram/useTelegramBot.js +63 -0
- package/src/renderer/src/hooks/useAwareness.js +289 -0
- package/src/renderer/src/hooks/useChatArchiver.js +52 -0
- package/src/renderer/src/hooks/useConfirm.jsx +68 -0
- package/src/renderer/src/hooks/useMarkAgent.js +454 -0
- package/src/renderer/src/hooks/useMemoryGroomer.js +152 -0
- package/src/renderer/src/hooks/useVAD.js +511 -0
- package/src/renderer/src/hooks/useWebSpeechWakeWord.js +122 -0
- package/src/renderer/src/main.jsx +12 -0
- package/src/renderer/src/pages/ChatStudio.jsx +922 -0
- package/src/renderer/src/pages/Configuration.jsx +360 -0
- package/src/renderer/src/pages/GoogleWorkspace.jsx +293 -0
- package/src/renderer/src/pages/Guidebook.jsx +917 -0
- package/src/renderer/src/pages/Knowledge.jsx +241 -0
- package/src/renderer/src/pages/MarkHome.jsx +491 -0
- package/src/renderer/src/pages/NeuralCore.jsx +786 -0
- package/src/renderer/src/pages/Plugins.jsx +630 -0
- package/src/renderer/src/pages/SkillEditor.jsx +380 -0
- package/src/renderer/src/pages/Skills.jsx +219 -0
- package/src/renderer/src/pages/Subagents.jsx +342 -0
- package/src/renderer/src/pages/TelegramBot.jsx +343 -0
- package/src/renderer/src/utils/chatContentParser.js +203 -0
- package/src/renderer/src/utils/toolClusters.js +201 -0
- package/src/server/bin/sha3_wasm_bg.wasm +0 -0
- package/src/server/config-manager.js +57 -0
- package/src/server/index.js +195 -0
- package/src/server/launcher.js +87 -0
- package/src/server/memory/db-store.js +758 -0
- package/src/server/memory/orama-store.js +177 -0
- package/src/server/memory/vector-engine.js +109 -0
- package/src/server/routes/ai.routes.js +280 -0
- package/src/server/routes/awareness.routes.js +62 -0
- package/src/server/routes/chat.routes.js +61 -0
- package/src/server/routes/config.routes.js +41 -0
- package/src/server/routes/index.js +35 -0
- package/src/server/routes/integrations.routes.js +116 -0
- package/src/server/routes/memory.routes.js +256 -0
- package/src/server/routes/plugins.routes.js +72 -0
- package/src/server/routes/skills.routes.js +139 -0
- package/src/server/routes/subagents.routes.js +70 -0
- package/src/server/routes/tasks.routes.js +175 -0
- package/src/server/routes/workspace.routes.js +127 -0
- package/src/server/services/ai/ai-utils.js +161 -0
- package/src/server/services/ai/openai-provider.js +757 -0
- package/src/server/services/ai/web-provider.js +729 -0
- package/src/server/services/ai-bridge.js +46 -0
- package/src/server/services/deepseek-web.js +956 -0
- package/src/server/services/gemini-web.js +170 -0
- package/src/server/services/notification-service.js +91 -0
- package/src/server/services/updater.js +125 -0
- package/src/server/tools/awareness-tracker.js +292 -0
- package/src/server/tools/group-tools.js +1164 -0
- package/src/server/tools/media-tools.js +244 -0
- package/src/server/tools/pc-agent.js +327 -0
- package/src/server/tools/screen-service.js +51 -0
- package/src/server/ws-hub.js +168 -0
- package/src/shared/parsers/mark-tag-parser.js +275 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
2
|
+
Add-Type -AssemblyName System.Drawing
|
|
3
|
+
|
|
4
|
+
$cSharpCode = @"
|
|
5
|
+
using System;
|
|
6
|
+
using System.Drawing;
|
|
7
|
+
using System.Drawing.Drawing2D;
|
|
8
|
+
using System.Drawing.Text;
|
|
9
|
+
using System.Runtime.InteropServices;
|
|
10
|
+
using System.Diagnostics;
|
|
11
|
+
using System.Windows.Forms;
|
|
12
|
+
|
|
13
|
+
public class MarkPcOverlayForm : Form {
|
|
14
|
+
private const int WH_MOUSE_LL = 14;
|
|
15
|
+
private const int WH_KEYBOARD_LL = 13;
|
|
16
|
+
private const uint LLMHF_INJECTED = 0x01;
|
|
17
|
+
private const uint LLMHF_LOWER_IL_INJECTED = 0x02;
|
|
18
|
+
private const int WM_KEYDOWN = 0x0100;
|
|
19
|
+
private const int WM_SYSKEYDOWN = 0x0104;
|
|
20
|
+
|
|
21
|
+
private const int VK_S = 0x53;
|
|
22
|
+
private const int VK_CONTROL = 0x11;
|
|
23
|
+
private const int VK_SHIFT = 0x10;
|
|
24
|
+
private const int VK_LCONTROL = 0xA2;
|
|
25
|
+
private const int VK_RCONTROL = 0xA3;
|
|
26
|
+
private const int VK_LSHIFT = 0xA0;
|
|
27
|
+
private const int VK_RSHIFT = 0xA1;
|
|
28
|
+
|
|
29
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
30
|
+
private struct MSLLHOOKSTRUCT {
|
|
31
|
+
public int x;
|
|
32
|
+
public int y;
|
|
33
|
+
public uint mouseData;
|
|
34
|
+
public uint flags;
|
|
35
|
+
public uint time;
|
|
36
|
+
public IntPtr dwExtraInfo;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
40
|
+
private struct KBDLLHOOKSTRUCT {
|
|
41
|
+
public uint vkCode;
|
|
42
|
+
public uint scanCode;
|
|
43
|
+
public uint flags;
|
|
44
|
+
public uint time;
|
|
45
|
+
public IntPtr dwExtraInfo;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
|
|
49
|
+
|
|
50
|
+
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
51
|
+
private static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);
|
|
52
|
+
|
|
53
|
+
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
54
|
+
[return: MarshalAs(UnmanagedType.Bool)]
|
|
55
|
+
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
|
|
56
|
+
|
|
57
|
+
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
58
|
+
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
|
59
|
+
|
|
60
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
61
|
+
private static extern IntPtr GetModuleHandle(string lpModuleName);
|
|
62
|
+
|
|
63
|
+
[DllImport("user32.dll")]
|
|
64
|
+
private static extern short GetAsyncKeyState(int vKey);
|
|
65
|
+
|
|
66
|
+
private static IntPtr _mouseHook = IntPtr.Zero;
|
|
67
|
+
private static IntPtr _kbdHook = IntPtr.Zero;
|
|
68
|
+
private static HookProc _mouseProc = MouseHookCallback;
|
|
69
|
+
private static HookProc _kbdProc = KbdHookCallback;
|
|
70
|
+
|
|
71
|
+
public static MarkPcOverlayForm Instance = null;
|
|
72
|
+
public static bool IsAborted = false;
|
|
73
|
+
|
|
74
|
+
private Timer pulseTimer;
|
|
75
|
+
private int pulseAlpha = 255;
|
|
76
|
+
private bool pulseDec = true;
|
|
77
|
+
|
|
78
|
+
public MarkPcOverlayForm() {
|
|
79
|
+
this.FormBorderStyle = FormBorderStyle.None;
|
|
80
|
+
this.StartPosition = FormStartPosition.Manual;
|
|
81
|
+
this.TopMost = true;
|
|
82
|
+
this.ShowInTaskbar = false;
|
|
83
|
+
this.Size = new Size(510, 36);
|
|
84
|
+
this.BackColor = Color.FromArgb(15, 23, 21); // #0f1715 Mark Theme Base
|
|
85
|
+
this.Opacity = 0.98;
|
|
86
|
+
|
|
87
|
+
this.SetStyle(ControlStyles.AllPaintingInWmPaint |
|
|
88
|
+
ControlStyles.UserPaint |
|
|
89
|
+
ControlStyles.OptimizedDoubleBuffer |
|
|
90
|
+
ControlStyles.ResizeRedraw, true);
|
|
91
|
+
|
|
92
|
+
Rectangle primary = Screen.PrimaryScreen.Bounds;
|
|
93
|
+
int x = (primary.Width - this.Width) / 2;
|
|
94
|
+
int y = 16;
|
|
95
|
+
this.Location = new Point(x, y);
|
|
96
|
+
|
|
97
|
+
pulseTimer = new Timer();
|
|
98
|
+
pulseTimer.Interval = 40;
|
|
99
|
+
pulseTimer.Tick += (s, e) => {
|
|
100
|
+
if (pulseDec) {
|
|
101
|
+
pulseAlpha -= 14;
|
|
102
|
+
if (pulseAlpha <= 100) pulseDec = false;
|
|
103
|
+
} else {
|
|
104
|
+
pulseAlpha += 14;
|
|
105
|
+
if (pulseAlpha >= 255) pulseDec = true;
|
|
106
|
+
}
|
|
107
|
+
this.Invalidate();
|
|
108
|
+
};
|
|
109
|
+
pulseTimer.Start();
|
|
110
|
+
|
|
111
|
+
Instance = this;
|
|
112
|
+
InitHooks();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
public static void InitHooks() {
|
|
116
|
+
using (Process curProcess = Process.GetCurrentProcess())
|
|
117
|
+
using (ProcessModule curModule = curProcess.MainModule) {
|
|
118
|
+
IntPtr hModule = GetModuleHandle(curModule.ModuleName);
|
|
119
|
+
_mouseHook = SetWindowsHookEx(WH_MOUSE_LL, _mouseProc, hModule, 0);
|
|
120
|
+
_kbdHook = SetWindowsHookEx(WH_KEYBOARD_LL, _kbdProc, hModule, 0);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
AppDomain.CurrentDomain.ProcessExit += (s, e) => {
|
|
124
|
+
CleanupHooks();
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
public static void CleanupHooks() {
|
|
129
|
+
if (_mouseHook != IntPtr.Zero) {
|
|
130
|
+
UnhookWindowsHookEx(_mouseHook);
|
|
131
|
+
_mouseHook = IntPtr.Zero;
|
|
132
|
+
}
|
|
133
|
+
if (_kbdHook != IntPtr.Zero) {
|
|
134
|
+
UnhookWindowsHookEx(_kbdHook);
|
|
135
|
+
_kbdHook = IntPtr.Zero;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
public static void TriggerAbort() {
|
|
140
|
+
if (IsAborted) return;
|
|
141
|
+
IsAborted = true;
|
|
142
|
+
Console.WriteLine("{\"event\":\"abort\"}");
|
|
143
|
+
CleanupHooks();
|
|
144
|
+
if (Instance != null && !Instance.IsDisposed) {
|
|
145
|
+
try {
|
|
146
|
+
Instance.BeginInvoke(new Action(() => {
|
|
147
|
+
Instance.Close();
|
|
148
|
+
}));
|
|
149
|
+
} catch {}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private static IntPtr MouseHookCallback(int nCode, IntPtr wParam, IntPtr lParam) {
|
|
154
|
+
if (nCode >= 0) {
|
|
155
|
+
MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
|
|
156
|
+
|
|
157
|
+
// Allow injected events (AI automation) to pass, block physical user movements
|
|
158
|
+
bool isInjected = (hookStruct.flags & LLMHF_INJECTED) != 0 ||
|
|
159
|
+
(hookStruct.flags & LLMHF_LOWER_IL_INJECTED) != 0;
|
|
160
|
+
|
|
161
|
+
if (!isInjected) {
|
|
162
|
+
return (IntPtr)1; // Block physical mouse movement 100%
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return CallNextHookEx(_mouseHook, nCode, wParam, lParam);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private static IntPtr KbdHookCallback(int nCode, IntPtr wParam, IntPtr lParam) {
|
|
169
|
+
if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)) {
|
|
170
|
+
KBDLLHOOKSTRUCT kb = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
|
|
171
|
+
if (kb.vkCode == VK_S) {
|
|
172
|
+
bool isCtrl = (GetAsyncKeyState(VK_CONTROL) & 0x8000) != 0 ||
|
|
173
|
+
(GetAsyncKeyState(VK_LCONTROL) & 0x8000) != 0 ||
|
|
174
|
+
(GetAsyncKeyState(VK_RCONTROL) & 0x8000) != 0;
|
|
175
|
+
bool isShift = (GetAsyncKeyState(VK_SHIFT) & 0x8000) != 0 ||
|
|
176
|
+
(GetAsyncKeyState(VK_LSHIFT) & 0x8000) != 0 ||
|
|
177
|
+
(GetAsyncKeyState(VK_RSHIFT) & 0x8000) != 0;
|
|
178
|
+
|
|
179
|
+
if (isCtrl && isShift) {
|
|
180
|
+
TriggerAbort();
|
|
181
|
+
return (IntPtr)1; // Block key
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return CallNextHookEx(_kbdHook, nCode, wParam, lParam);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
protected override void OnPaint(PaintEventArgs e) {
|
|
189
|
+
base.OnPaint(e);
|
|
190
|
+
Graphics g = e.Graphics;
|
|
191
|
+
g.SmoothingMode = SmoothingMode.AntiAlias;
|
|
192
|
+
g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
|
|
193
|
+
|
|
194
|
+
// Background Dark Ground (#0f1715)
|
|
195
|
+
using (SolidBrush bgBrush = new SolidBrush(Color.FromArgb(15, 23, 21))) {
|
|
196
|
+
g.FillRectangle(bgBrush, 0, 0, this.Width, this.Height);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Animated Pulsing Red Dot (Recording / Locked state indicator)
|
|
200
|
+
using (SolidBrush dotBrush = new SolidBrush(Color.FromArgb(pulseAlpha, 239, 68, 68))) {
|
|
201
|
+
g.FillEllipse(dotBrush, 14, (this.Height - 8) / 2, 8, 8);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Fonts & Typography
|
|
205
|
+
using (Font fontBold = new Font("Segoe UI", 9.0f, FontStyle.Bold))
|
|
206
|
+
using (Font fontRegular = new Font("Segoe UI", 9.0f, FontStyle.Regular))
|
|
207
|
+
using (SolidBrush textGreen = new SolidBrush(Color.FromArgb(31, 184, 84))) // #1fb854 Mark Green
|
|
208
|
+
using (SolidBrush textWhite = new SolidBrush(Color.FromArgb(240, 240, 240)))
|
|
209
|
+
using (SolidBrush textMuted = new SolidBrush(Color.FromArgb(150, 165, 158)))
|
|
210
|
+
using (Pen divPen = new Pen(Color.FromArgb(35, 75, 60), 1.0f))
|
|
211
|
+
{
|
|
212
|
+
float curX = 30;
|
|
213
|
+
float textY = (this.Height - fontRegular.Height) / 2.0f;
|
|
214
|
+
|
|
215
|
+
// [MARK PC AUTOMATION]
|
|
216
|
+
string tag = "MARK PC AUTOMATION";
|
|
217
|
+
g.DrawString(tag, fontBold, textGreen, curX, textY);
|
|
218
|
+
curX += g.MeasureString(tag, fontBold).Width + 10;
|
|
219
|
+
|
|
220
|
+
// Divider Line 1
|
|
221
|
+
g.DrawLine(divPen, curX, 8, curX, this.Height - 8);
|
|
222
|
+
curX += 10;
|
|
223
|
+
|
|
224
|
+
// Hotkey Instruction Text
|
|
225
|
+
string cancelPrefix = "Buka Kunci Mouse: ";
|
|
226
|
+
g.DrawString(cancelPrefix, fontRegular, textMuted, curX, textY);
|
|
227
|
+
curX += g.MeasureString(cancelPrefix, fontRegular).Width;
|
|
228
|
+
|
|
229
|
+
string hotkey = "Ctrl + Shift + S";
|
|
230
|
+
g.DrawString(hotkey, fontBold, textGreen, curX, textY);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
protected override void Dispose(bool disposing) {
|
|
235
|
+
if (disposing) {
|
|
236
|
+
CleanupHooks();
|
|
237
|
+
if (pulseTimer != null) {
|
|
238
|
+
pulseTimer.Stop();
|
|
239
|
+
pulseTimer.Dispose();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
base.Dispose(disposing);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
"@
|
|
246
|
+
|
|
247
|
+
Add-Type -TypeDefinition $cSharpCode -ReferencedAssemblies "System.Windows.Forms", "System.Drawing"
|
|
248
|
+
|
|
249
|
+
[System.Windows.Forms.Application]::EnableVisualStyles()
|
|
250
|
+
|
|
251
|
+
$overlay = New-Object MarkPcOverlayForm
|
|
252
|
+
[System.Console]::WriteLine("READY")
|
|
253
|
+
[System.Windows.Forms.Application]::Run($overlay)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
[CmdletBinding()]
|
|
2
|
+
param(
|
|
3
|
+
[string]$Title = "Pilih Folder Workspace Proyek"
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
$ErrorActionPreference = 'SilentlyContinue'
|
|
7
|
+
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
8
|
+
|
|
9
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
10
|
+
|
|
11
|
+
# Gunakan Form TopMost sebagai Owner agar dialog pasti muncul di paling depan
|
|
12
|
+
$owner = New-Object System.Windows.Forms.Form
|
|
13
|
+
$owner.TopMost = $true
|
|
14
|
+
$owner.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen
|
|
15
|
+
$owner.Width = 0
|
|
16
|
+
$owner.Height = 0
|
|
17
|
+
$owner.ShowInTaskbar = $false
|
|
18
|
+
$owner.Opacity = 0
|
|
19
|
+
$owner.Show()
|
|
20
|
+
$owner.Activate()
|
|
21
|
+
|
|
22
|
+
$dialog = New-Object System.Windows.Forms.FolderBrowserDialog
|
|
23
|
+
$dialog.Description = $Title
|
|
24
|
+
$dialog.ShowNewFolderButton = $true
|
|
25
|
+
|
|
26
|
+
$res = $dialog.ShowDialog($owner)
|
|
27
|
+
|
|
28
|
+
if ($res -eq [System.Windows.Forms.DialogResult]::OK -and -not [string]::IsNullOrWhiteSpace($dialog.SelectedPath)) {
|
|
29
|
+
[Console]::Out.Write($dialog.SelectedPath)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
$owner.Close()
|
|
33
|
+
$owner.Dispose()
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# read-ui.ps1
|
|
2
|
+
# Windows UIAutomation Accessibility Tree reader for MARK PC Automation
|
|
3
|
+
# Zero Vision Cost: Extracts interactive GUI elements as JSON text (~200-400 tokens)
|
|
4
|
+
|
|
5
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
6
|
+
|
|
7
|
+
Add-Type -AssemblyName UIAutomationClient
|
|
8
|
+
Add-Type -AssemblyName UIAutomationTypes
|
|
9
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
10
|
+
|
|
11
|
+
# Get foreground window handle
|
|
12
|
+
$code = @"
|
|
13
|
+
using System;
|
|
14
|
+
using System.Runtime.InteropServices;
|
|
15
|
+
using System.Text;
|
|
16
|
+
|
|
17
|
+
public class Win32 {
|
|
18
|
+
[DllImport("user32.dll")]
|
|
19
|
+
public static extern IntPtr GetForegroundWindow();
|
|
20
|
+
|
|
21
|
+
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
|
|
22
|
+
public static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
|
|
23
|
+
|
|
24
|
+
[DllImport("user32.dll")]
|
|
25
|
+
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
|
|
26
|
+
|
|
27
|
+
[DllImport("user32.dll")]
|
|
28
|
+
public static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
|
|
29
|
+
|
|
30
|
+
[DllImport("user32.dll")]
|
|
31
|
+
public static extern bool IsWindowVisible(IntPtr hWnd);
|
|
32
|
+
|
|
33
|
+
[DllImport("user32.dll")]
|
|
34
|
+
public static extern bool IsIconic(IntPtr hWnd);
|
|
35
|
+
|
|
36
|
+
[DllImport("user32.dll")]
|
|
37
|
+
public static extern int GetWindowTextLength(IntPtr hWnd);
|
|
38
|
+
|
|
39
|
+
[DllImport("user32.dll")]
|
|
40
|
+
public static extern bool SetForegroundWindow(IntPtr hWnd);
|
|
41
|
+
|
|
42
|
+
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
|
|
43
|
+
|
|
44
|
+
public static bool IsMarkWindow(string title) {
|
|
45
|
+
if (string.IsNullOrWhiteSpace(title)) return true;
|
|
46
|
+
string t = title.Trim();
|
|
47
|
+
if (t == "Program Manager" || t == "Default IME" || t.StartsWith("MSCTFIME")) return true;
|
|
48
|
+
string lower = t.ToLower();
|
|
49
|
+
if (lower == "mark" || lower.StartsWith("mark -") || lower.StartsWith("mark_pc_stop") || lower.StartsWith("mark_unblock") || lower.Contains("mark agent") || lower.Contains("mark pc automation")) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public static IntPtr GetTargetWindow() {
|
|
56
|
+
IntPtr fg = GetForegroundWindow();
|
|
57
|
+
string fgTitle = "";
|
|
58
|
+
int fgLen = GetWindowTextLength(fg);
|
|
59
|
+
if (fgLen > 0) {
|
|
60
|
+
StringBuilder fgSb = new StringBuilder(fgLen + 1);
|
|
61
|
+
GetWindowText(fg, fgSb, fgSb.Capacity);
|
|
62
|
+
fgTitle = fgSb.ToString();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!IsMarkWindow(fgTitle)) {
|
|
66
|
+
return fg;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
IntPtr target = IntPtr.Zero;
|
|
70
|
+
EnumWindows(delegate(IntPtr hWnd, IntPtr lParam) {
|
|
71
|
+
if (!IsWindowVisible(hWnd) || IsIconic(hWnd)) return true;
|
|
72
|
+
int len = GetWindowTextLength(hWnd);
|
|
73
|
+
if (len <= 0) return true;
|
|
74
|
+
StringBuilder sb = new StringBuilder(len + 1);
|
|
75
|
+
GetWindowText(hWnd, sb, sb.Capacity);
|
|
76
|
+
string title = sb.ToString();
|
|
77
|
+
|
|
78
|
+
if (!IsMarkWindow(title)) {
|
|
79
|
+
target = hWnd;
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}, IntPtr.Zero);
|
|
84
|
+
|
|
85
|
+
if (target != IntPtr.Zero) {
|
|
86
|
+
SetForegroundWindow(target);
|
|
87
|
+
return target;
|
|
88
|
+
}
|
|
89
|
+
return fg;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
"@
|
|
93
|
+
Add-Type -TypeDefinition $code -Language CSharp
|
|
94
|
+
|
|
95
|
+
$hwnd = [Win32]::GetTargetWindow()
|
|
96
|
+
$titleBuilder = New-Object System.Text.StringBuilder 512
|
|
97
|
+
[Win32]::GetWindowText($hwnd, $titleBuilder, $titleBuilder.Capacity) | Out-Null
|
|
98
|
+
$windowTitle = $titleBuilder.ToString()
|
|
99
|
+
|
|
100
|
+
$processId = 0
|
|
101
|
+
[Win32]::GetWindowThreadProcessId($hwnd, [ref]$processId) | Out-Null
|
|
102
|
+
$processName = "unknown"
|
|
103
|
+
if ($processId -gt 0) {
|
|
104
|
+
try {
|
|
105
|
+
$proc = Get-Process -Id $processId
|
|
106
|
+
$processName = $proc.ProcessName + ".exe"
|
|
107
|
+
} catch {}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Traverse Accessibility Tree of Foreground Window
|
|
111
|
+
$elements = @()
|
|
112
|
+
$idCounter = 1
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
$windowElement = [System.Windows.Automation.AutomationElement]::FromHandle($hwnd)
|
|
116
|
+
if ($windowElement) {
|
|
117
|
+
$condition = [System.Windows.Automation.Condition]::TrueCondition
|
|
118
|
+
$treeWalker = [System.Windows.Automation.TreeWalker]::ControlViewWalker
|
|
119
|
+
|
|
120
|
+
# We search descendants using FindAll with TrueCondition, limited to top 60 interactive elements
|
|
121
|
+
$allControls = $windowElement.FindAll([System.Windows.Automation.TreeScope]::Descendants, $condition)
|
|
122
|
+
|
|
123
|
+
foreach ($el in $allControls) {
|
|
124
|
+
if ($idCounter -gt 60) { break }
|
|
125
|
+
|
|
126
|
+
# Check if element is enabled and offscreen=false
|
|
127
|
+
$enabled = $el.Current.IsEnabled
|
|
128
|
+
$offscreen = $el.Current.IsOffscreen
|
|
129
|
+
if (-not $enabled -or $offscreen) { continue }
|
|
130
|
+
|
|
131
|
+
$role = $el.Current.ControlType.ProgrammaticName.Replace("ControlType.", "")
|
|
132
|
+
$interactiveRoles = @("Button", "Edit", "MenuItem", "TabItem", "ComboBox", "CheckBox", "RadioButton", "Hyperlink", "ListItem", "TreeItem", "DataItem", "Text")
|
|
133
|
+
if ($interactiveRoles -notcontains $role) { continue }
|
|
134
|
+
|
|
135
|
+
$name = $el.Current.Name
|
|
136
|
+
$autoId = $el.Current.AutomationId
|
|
137
|
+
$rect = $el.Current.BoundingRectangle
|
|
138
|
+
|
|
139
|
+
# Skip elements with empty name & empty autoId unless it's an Edit control
|
|
140
|
+
if ([string]::IsNullOrWhiteSpace($name) -and [string]::IsNullOrWhiteSpace($autoId) -and $role -ne "Edit") {
|
|
141
|
+
continue
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
# Extract Value if Edit
|
|
145
|
+
$val = ""
|
|
146
|
+
if ($role -eq "Edit") {
|
|
147
|
+
try {
|
|
148
|
+
$valuePattern = $el.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)
|
|
149
|
+
if ($valuePattern) { $val = $valuePattern.Current.Value }
|
|
150
|
+
} catch {}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
$elementObj = @{
|
|
154
|
+
id = $idCounter
|
|
155
|
+
name = if ($name) { $name } else { $autoId }
|
|
156
|
+
role = $role
|
|
157
|
+
rect = @([int]$rect.X, [int]$rect.Y, [int]$rect.Width, [int]$rect.Height)
|
|
158
|
+
}
|
|
159
|
+
if ($val) {
|
|
160
|
+
$elementObj["value"] = $val
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
$elements += $elementObj
|
|
164
|
+
$idCounter++
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
} catch {
|
|
168
|
+
# If error reading Accessibility Tree, return empty elements array so caller can fallback to OCR
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
$output = @{
|
|
172
|
+
window = $windowTitle
|
|
173
|
+
process = $processName
|
|
174
|
+
elements = $elements
|
|
175
|
+
element_count = $elements.Count
|
|
176
|
+
method = "uiautomation"
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
$json = $output | ConvertTo-Json -Depth 5 -Compress
|
|
180
|
+
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
181
|
+
Write-Output $json
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
2
|
+
Add-Type -AssemblyName System.Drawing
|
|
3
|
+
|
|
4
|
+
$screens = [System.Windows.Forms.Screen]::AllScreens
|
|
5
|
+
$results = @()
|
|
6
|
+
|
|
7
|
+
foreach ($screen in $screens) {
|
|
8
|
+
$bounds = $screen.Bounds
|
|
9
|
+
$bitmap = New-Object System.Drawing.Bitmap $bounds.Width, $bounds.Height
|
|
10
|
+
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
|
|
11
|
+
$graphics.CopyFromScreen($bounds.Location, [System.Drawing.Point]::Empty, $bounds.Size)
|
|
12
|
+
|
|
13
|
+
$memoryStream = New-Object System.IO.MemoryStream
|
|
14
|
+
$bitmap.Save($memoryStream, [System.Drawing.Imaging.ImageFormat]::Jpeg)
|
|
15
|
+
$base64 = [Convert]::ToBase64String($memoryStream.ToArray())
|
|
16
|
+
|
|
17
|
+
$graphics.Dispose()
|
|
18
|
+
$bitmap.Dispose()
|
|
19
|
+
$memoryStream.Dispose()
|
|
20
|
+
|
|
21
|
+
$results += $base64
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
Write-Output ($results -join '|||')
|