@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.
Files changed (227) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +209 -0
  3. package/bin/mark.js +27 -0
  4. package/out/renderer/assets/icon-DHo2CYph.svg +1 -0
  5. package/out/renderer/assets/index-G2fADWO-.js +4768 -0
  6. package/out/renderer/assets/index-f3mVse3c.css +1 -0
  7. package/out/renderer/assets/music-cover-CG4vi3kZ.png +0 -0
  8. package/out/renderer/assets/poppins-devanagari-400-normal-CJDn6rn8.woff2 +0 -0
  9. package/out/renderer/assets/poppins-devanagari-400-normal-CqVvlrh5.woff +0 -0
  10. package/out/renderer/assets/poppins-devanagari-500-normal-BIdkeU1p.woff2 +0 -0
  11. package/out/renderer/assets/poppins-devanagari-500-normal-DMPDjHtT.woff +0 -0
  12. package/out/renderer/assets/poppins-devanagari-600-normal-ClASKHrr.woff +0 -0
  13. package/out/renderer/assets/poppins-devanagari-600-normal-STEjXBNN.woff2 +0 -0
  14. package/out/renderer/assets/poppins-devanagari-700-normal-O-jipLrW.woff2 +0 -0
  15. package/out/renderer/assets/poppins-devanagari-700-normal-fHs-vx92.woff +0 -0
  16. package/out/renderer/assets/poppins-latin-400-normal-BOb3E3N0.woff +0 -0
  17. package/out/renderer/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
  18. package/out/renderer/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
  19. package/out/renderer/assets/poppins-latin-500-normal-DGXqpDMm.woff +0 -0
  20. package/out/renderer/assets/poppins-latin-600-normal-BJdTmd5m.woff +0 -0
  21. package/out/renderer/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
  22. package/out/renderer/assets/poppins-latin-700-normal-BVuQR_eA.woff +0 -0
  23. package/out/renderer/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
  24. package/out/renderer/assets/poppins-latin-ext-400-normal-DaBSavcJ.woff +0 -0
  25. package/out/renderer/assets/poppins-latin-ext-400-normal-by3JarPu.woff2 +0 -0
  26. package/out/renderer/assets/poppins-latin-ext-500-normal-CK-6C4Hw.woff2 +0 -0
  27. package/out/renderer/assets/poppins-latin-ext-500-normal-CgAe2rWW.woff +0 -0
  28. package/out/renderer/assets/poppins-latin-ext-600-normal-CAhIAdZj.woff2 +0 -0
  29. package/out/renderer/assets/poppins-latin-ext-600-normal-Df5ffKXP.woff +0 -0
  30. package/out/renderer/assets/poppins-latin-ext-700-normal-DctTR6Tg.woff +0 -0
  31. package/out/renderer/assets/poppins-latin-ext-700-normal-cby-RkWa.woff2 +0 -0
  32. package/out/renderer/favicon.ico +0 -0
  33. package/out/renderer/icon-256.png +0 -0
  34. package/out/renderer/icon.svg +1 -0
  35. package/out/renderer/index.html +25 -0
  36. package/out/renderer/manifest.json +25 -0
  37. package/out/renderer/robot-simulator.html +1640 -0
  38. package/package.json +106 -0
  39. package/src/cli/index.js +332 -0
  40. package/src/cli/monitor.js +413 -0
  41. package/src/cli/theme.js +347 -0
  42. package/src/launcher/MarkTray.cs +227 -0
  43. package/src/main/browser-agent.js +1132 -0
  44. package/src/main/git-service.js +90 -0
  45. package/src/main/google/google-calendar.js +69 -0
  46. package/src/main/google/google-drive.js +263 -0
  47. package/src/main/google/google-gmail.js +131 -0
  48. package/src/main/google/google-service.js +241 -0
  49. package/src/main/node-tools.js +23 -0
  50. package/src/main/pc-agent-scripts/mouse-locker.ps1 +76 -0
  51. package/src/main/pc-agent-scripts/ocr-region.ps1 +185 -0
  52. package/src/main/pc-agent-scripts/pc-daemon.ps1 +726 -0
  53. package/src/main/pc-agent-scripts/pc-overlay.ps1 +253 -0
  54. package/src/main/pc-agent-scripts/pick-folder.ps1 +33 -0
  55. package/src/main/pc-agent-scripts/read-ui.ps1 +181 -0
  56. package/src/main/pc-agent-scripts/take-screenshot.ps1 +24 -0
  57. package/src/main/pc-agent-scripts/win-action.ps1 +380 -0
  58. package/src/main/plugins/plugin-loader.js +306 -0
  59. package/src/main/skills/skill-manager.js +265 -0
  60. package/src/main/syntax-validator.js +455 -0
  61. package/src/main/task-daemon.js +117 -0
  62. package/src/main/telegram/telegram-service.js +835 -0
  63. package/src/main/tools/browser-tools.js +516 -0
  64. package/src/main/tools/file-tools.js +1126 -0
  65. package/src/main/tools/git-tools.js +79 -0
  66. package/src/main/tools/google-tools.js +566 -0
  67. package/src/main/tools/index.js +36 -0
  68. package/src/main/tools/media-tools.js +42 -0
  69. package/src/main/tools/system-tools.js +295 -0
  70. package/src/main/tools/task-tools.js +73 -0
  71. package/src/main/tools/telegram-tools.js +101 -0
  72. package/src/renderer/index.html +24 -0
  73. package/src/renderer/public/favicon.ico +0 -0
  74. package/src/renderer/public/icon-256.png +0 -0
  75. package/src/renderer/public/icon.svg +1 -0
  76. package/src/renderer/public/manifest.json +25 -0
  77. package/src/renderer/public/robot-simulator.html +1640 -0
  78. package/src/renderer/src/App.jsx +304 -0
  79. package/src/renderer/src/api/ai/awareness.js +294 -0
  80. package/src/renderer/src/api/ai/chatSummarizer.js +79 -0
  81. package/src/renderer/src/api/ai/contextCompactor.js +129 -0
  82. package/src/renderer/src/api/ai/contextManager.js +1130 -0
  83. package/src/renderer/src/api/ai/core.js +167 -0
  84. package/src/renderer/src/api/ai/index.js +4 -0
  85. package/src/renderer/src/api/ai/memoryGroomer.js +101 -0
  86. package/src/renderer/src/api/ai/persona.js +115 -0
  87. package/src/renderer/src/api/ai/planning.js +317 -0
  88. package/src/renderer/src/api/ai/relationship.js +177 -0
  89. package/src/renderer/src/api/ai/skillSynthesizer.js +168 -0
  90. package/src/renderer/src/api/ai/tools.js +167 -0
  91. package/src/renderer/src/api/ai/utils.js +359 -0
  92. package/src/renderer/src/api/db.js +1013 -0
  93. package/src/renderer/src/api/oramaStore.js +592 -0
  94. package/src/renderer/src/api/ragPipeline.js +87 -0
  95. package/src/renderer/src/api/subagent/subagentExecutor.js +780 -0
  96. package/src/renderer/src/api/subagent/subagentPrompt.js +44 -0
  97. package/src/renderer/src/api/subagent/subagentStore.js +173 -0
  98. package/src/renderer/src/api/taskExecutor.js +18 -0
  99. package/src/renderer/src/api/taskStore.js +315 -0
  100. package/src/renderer/src/api/tools/core-tools.js +707 -0
  101. package/src/renderer/src/api/tools/index.js +151 -0
  102. package/src/renderer/src/api/turnPairMigrator.js +200 -0
  103. package/src/renderer/src/api/vectorMemory.js +136 -0
  104. package/src/renderer/src/api/wakeWord.js +101 -0
  105. package/src/renderer/src/api/web-bridge.js +885 -0
  106. package/src/renderer/src/api/webSpeech.js +178 -0
  107. package/src/renderer/src/api/workspaceRag.js +76 -0
  108. package/src/renderer/src/assets/electron.svg +10 -0
  109. package/src/renderer/src/assets/icon.svg +1 -0
  110. package/src/renderer/src/assets/main.css +589 -0
  111. package/src/renderer/src/assets/music-cover.png +0 -0
  112. package/src/renderer/src/assets/wavy-lines.svg +25 -0
  113. package/src/renderer/src/components/Chat/ApprovalBubble.jsx +127 -0
  114. package/src/renderer/src/components/Chat/CodeBlock.jsx +83 -0
  115. package/src/renderer/src/components/Chat/DurableTaskBubble.jsx +455 -0
  116. package/src/renderer/src/components/Chat/FileDiffModal.jsx +328 -0
  117. package/src/renderer/src/components/Chat/GeminiWidgets.jsx +82 -0
  118. package/src/renderer/src/components/Chat/MemoryFooterBubble.jsx +34 -0
  119. package/src/renderer/src/components/Chat/MessageBubble.jsx +459 -0
  120. package/src/renderer/src/components/Chat/PluginExecutionBubble.jsx +41 -0
  121. package/src/renderer/src/components/Chat/ThinkingBubble.jsx +316 -0
  122. package/src/renderer/src/components/Chat/YoutubeSearchBubble.jsx +43 -0
  123. package/src/renderer/src/components/Chat/YoutubeSummaryBubble.jsx +40 -0
  124. package/src/renderer/src/components/Chat/index.js +11 -0
  125. package/src/renderer/src/components/ChatList.jsx +434 -0
  126. package/src/renderer/src/components/GlobalCameraManager.jsx +67 -0
  127. package/src/renderer/src/components/Versions.jsx +15 -0
  128. package/src/renderer/src/components/YoutubeMusicPlayer.jsx +375 -0
  129. package/src/renderer/src/components/camera/CameraPreview.jsx +236 -0
  130. package/src/renderer/src/components/config/AiEngineSection.jsx +363 -0
  131. package/src/renderer/src/components/config/CameraSection.jsx +100 -0
  132. package/src/renderer/src/components/config/PermissionsSection.jsx +130 -0
  133. package/src/renderer/src/components/config/ShortcutSection.jsx +102 -0
  134. package/src/renderer/src/components/config/VoiceSection.jsx +110 -0
  135. package/src/renderer/src/components/config/index.js +5 -0
  136. package/src/renderer/src/components/core/Avatar.jsx +2197 -0
  137. package/src/renderer/src/components/core/ConfirmModal.jsx +80 -0
  138. package/src/renderer/src/components/core/DraggableHoloCard.jsx +125 -0
  139. package/src/renderer/src/components/core/FloatingMenu.jsx +272 -0
  140. package/src/renderer/src/components/core/HoloCard.jsx +64 -0
  141. package/src/renderer/src/components/core/InputBar.jsx +1346 -0
  142. package/src/renderer/src/components/core/ProcessPanel.jsx +216 -0
  143. package/src/renderer/src/components/core/ResponseArea.jsx +149 -0
  144. package/src/renderer/src/components/core/StatusIndicator.jsx +59 -0
  145. package/src/renderer/src/components/core/ThoughtNeuralFlow.jsx +168 -0
  146. package/src/renderer/src/components/core/ToolClustersDeck.jsx +210 -0
  147. package/src/renderer/src/components/core/native-skills.js +43 -0
  148. package/src/renderer/src/components/neural-core/EmotionalCortexLobe.jsx +359 -0
  149. package/src/renderer/src/components/neural-core/NodeDissectionModal.jsx +57 -0
  150. package/src/renderer/src/components/neural-core/ProceduralMatrixLobe.jsx +193 -0
  151. package/src/renderer/src/components/neural-core/ProceduralSkillModal.jsx +53 -0
  152. package/src/renderer/src/components/neural-core/ResetAiModal.jsx +198 -0
  153. package/src/renderer/src/components/neural-core/SynapticMemoryLobe.jsx +204 -0
  154. package/src/renderer/src/components/neural-core/traitMeta.js +102 -0
  155. package/src/renderer/src/components/subagent/AgentChatFeed.jsx +603 -0
  156. package/src/renderer/src/components/subagent/AgentInspector.jsx +224 -0
  157. package/src/renderer/src/components/subagent/AgentSidebar.jsx +216 -0
  158. package/src/renderer/src/components/subagent/SubagentIntercom.jsx +572 -0
  159. package/src/renderer/src/components/subagent/SubagentTopologyMap.jsx +423 -0
  160. package/src/renderer/src/contexts/ApprovalContext.jsx +425 -0
  161. package/src/renderer/src/contexts/ChatContext.jsx +61 -0
  162. package/src/renderer/src/contexts/YoutubeMusicContext.jsx +333 -0
  163. package/src/renderer/src/data/faqData.js +202 -0
  164. package/src/renderer/src/hooks/agent/executeAgentTool.js +895 -0
  165. package/src/renderer/src/hooks/agent/index.js +4 -0
  166. package/src/renderer/src/hooks/agent/useMarkMusic.js +75 -0
  167. package/src/renderer/src/hooks/agent/useMarkPlan.js +2739 -0
  168. package/src/renderer/src/hooks/agent/useMarkState.js +173 -0
  169. package/src/renderer/src/hooks/agent/useMarkYoutube.js +82 -0
  170. package/src/renderer/src/hooks/agent/useRelationalGrowth.js +201 -0
  171. package/src/renderer/src/hooks/telegram/useTelegramBot.js +63 -0
  172. package/src/renderer/src/hooks/useAwareness.js +289 -0
  173. package/src/renderer/src/hooks/useChatArchiver.js +52 -0
  174. package/src/renderer/src/hooks/useConfirm.jsx +68 -0
  175. package/src/renderer/src/hooks/useMarkAgent.js +454 -0
  176. package/src/renderer/src/hooks/useMemoryGroomer.js +152 -0
  177. package/src/renderer/src/hooks/useVAD.js +511 -0
  178. package/src/renderer/src/hooks/useWebSpeechWakeWord.js +122 -0
  179. package/src/renderer/src/main.jsx +12 -0
  180. package/src/renderer/src/pages/ChatStudio.jsx +922 -0
  181. package/src/renderer/src/pages/Configuration.jsx +360 -0
  182. package/src/renderer/src/pages/GoogleWorkspace.jsx +293 -0
  183. package/src/renderer/src/pages/Guidebook.jsx +917 -0
  184. package/src/renderer/src/pages/Knowledge.jsx +241 -0
  185. package/src/renderer/src/pages/MarkHome.jsx +491 -0
  186. package/src/renderer/src/pages/NeuralCore.jsx +786 -0
  187. package/src/renderer/src/pages/Plugins.jsx +630 -0
  188. package/src/renderer/src/pages/SkillEditor.jsx +380 -0
  189. package/src/renderer/src/pages/Skills.jsx +219 -0
  190. package/src/renderer/src/pages/Subagents.jsx +342 -0
  191. package/src/renderer/src/pages/TelegramBot.jsx +343 -0
  192. package/src/renderer/src/utils/chatContentParser.js +203 -0
  193. package/src/renderer/src/utils/toolClusters.js +201 -0
  194. package/src/server/bin/sha3_wasm_bg.wasm +0 -0
  195. package/src/server/config-manager.js +57 -0
  196. package/src/server/index.js +195 -0
  197. package/src/server/launcher.js +87 -0
  198. package/src/server/memory/db-store.js +758 -0
  199. package/src/server/memory/orama-store.js +177 -0
  200. package/src/server/memory/vector-engine.js +109 -0
  201. package/src/server/routes/ai.routes.js +280 -0
  202. package/src/server/routes/awareness.routes.js +62 -0
  203. package/src/server/routes/chat.routes.js +61 -0
  204. package/src/server/routes/config.routes.js +41 -0
  205. package/src/server/routes/index.js +35 -0
  206. package/src/server/routes/integrations.routes.js +116 -0
  207. package/src/server/routes/memory.routes.js +256 -0
  208. package/src/server/routes/plugins.routes.js +72 -0
  209. package/src/server/routes/skills.routes.js +139 -0
  210. package/src/server/routes/subagents.routes.js +70 -0
  211. package/src/server/routes/tasks.routes.js +175 -0
  212. package/src/server/routes/workspace.routes.js +127 -0
  213. package/src/server/services/ai/ai-utils.js +161 -0
  214. package/src/server/services/ai/openai-provider.js +757 -0
  215. package/src/server/services/ai/web-provider.js +729 -0
  216. package/src/server/services/ai-bridge.js +46 -0
  217. package/src/server/services/deepseek-web.js +956 -0
  218. package/src/server/services/gemini-web.js +170 -0
  219. package/src/server/services/notification-service.js +91 -0
  220. package/src/server/services/updater.js +125 -0
  221. package/src/server/tools/awareness-tracker.js +292 -0
  222. package/src/server/tools/group-tools.js +1164 -0
  223. package/src/server/tools/media-tools.js +244 -0
  224. package/src/server/tools/pc-agent.js +327 -0
  225. package/src/server/tools/screen-service.js +51 -0
  226. package/src/server/ws-hub.js +168 -0
  227. package/src/shared/parsers/mark-tag-parser.js +275 -0
@@ -0,0 +1,102 @@
1
+ import { useState } from 'react'
2
+
3
+ export const ShortcutSection = ({ config, setConfig }) => {
4
+ const [isRecordingShortcut, setIsRecordingShortcut] = useState(false)
5
+
6
+ const handleShortcutRecorderKeyDown = (e) => {
7
+ e.preventDefault()
8
+ e.stopPropagation()
9
+
10
+ if (['Control', 'Alt', 'Shift', 'Meta'].includes(e.key)) return
11
+
12
+ const modifiers = []
13
+ if (e.ctrlKey || e.metaKey) modifiers.push('CommandOrControl')
14
+ if (e.altKey) modifiers.push('Alt')
15
+ if (e.shiftKey) modifiers.push('Shift')
16
+
17
+ let keyName = e.key.toUpperCase()
18
+ if (e.code === 'Space' || keyName === ' ') keyName = 'Space'
19
+
20
+ const fullShortcut = [...modifiers, keyName].join('+')
21
+
22
+ setConfig((prev) => {
23
+ const updated = { ...prev, shortcutKey: fullShortcut }
24
+ window.dispatchEvent(new CustomEvent('config-updated', { detail: updated }))
25
+ if (window.api && window.api.syncConfig) window.api.syncConfig(updated)
26
+ return updated
27
+ })
28
+ setIsRecordingShortcut(false)
29
+ }
30
+
31
+ const PRESET_SHORTCUTS = [
32
+ 'CommandOrControl+Alt+M',
33
+ 'CommandOrControl+Shift+Space',
34
+ 'Alt+Space',
35
+ 'CommandOrControl+Space',
36
+ 'F9'
37
+ ]
38
+
39
+ return (
40
+ <section id="tour-shortcut" className="space-y-5 p-2 -mx-2 rounded-lg">
41
+ <h2 className="text-base font-bold uppercase tracking-wider opacity-70">
42
+ Global Shortcut Key
43
+ </h2>
44
+
45
+ <div className="space-y-1.5">
46
+ <div className="flex justify-between items-end">
47
+ <p className="text-sm font-semibold">Tombol Panggilan Cepat</p>
48
+ <span className="text-[10px] font-mono opacity-50">Aktif Lintas Aplikasi</span>
49
+ </div>
50
+
51
+ <div className="relative w-full">
52
+ <input
53
+ type="text"
54
+ readOnly
55
+ onFocus={() => setIsRecordingShortcut(true)}
56
+ onBlur={() => setIsRecordingShortcut(false)}
57
+ onKeyDown={handleShortcutRecorderKeyDown}
58
+ value={
59
+ isRecordingShortcut
60
+ ? 'Tekan kombinasi tombol di keyboard...'
61
+ : (config.shortcutKey || 'CommandOrControl+Alt+M').replace(
62
+ /CommandOrControl|Control/g,
63
+ 'Ctrl'
64
+ )
65
+ }
66
+ className={`input input-bordered w-full font-mono text-sm cursor-pointer select-none ${
67
+ isRecordingShortcut
68
+ ? 'input-primary border-2 animate-pulse bg-primary/10 text-primary font-bold'
69
+ : 'hover:border-primary/60'
70
+ }`}
71
+ />
72
+ </div>
73
+
74
+ <div className="flex flex-wrap gap-1.5 mt-2">
75
+ <span className="text-xs opacity-60 w-full mb-1">Preset Cepat:</span>
76
+ {PRESET_SHORTCUTS.map((preset) => (
77
+ <button
78
+ key={preset}
79
+ type="button"
80
+ onClick={() => {
81
+ setConfig((prev) => {
82
+ const updated = { ...prev, shortcutKey: preset }
83
+ window.dispatchEvent(new CustomEvent('config-updated', { detail: updated }))
84
+ if (window.api && window.api.syncConfig) window.api.syncConfig(updated)
85
+ return updated
86
+ })
87
+ }}
88
+ className={`btn btn-xs ${config.shortcutKey === preset ? 'btn-primary' : 'btn-ghost border-base-content/20'} font-mono`}
89
+ >
90
+ {preset.replace('CommandOrControl', 'Ctrl')}
91
+ </button>
92
+ ))}
93
+ </div>
94
+ <span className="text-[11px] opacity-60 block mt-1">
95
+ Cukup <b>klik kotak input di atas</b> lalu tekan kombinasi tombol di keyboard kamu
96
+ (misal: <code>Ctrl+Alt+A</code>, <code>Alt+Space</code>, <code>F9</code>).
97
+ Shortcut langsung aktif seketika di OS!
98
+ </span>
99
+ </div>
100
+ </section>
101
+ )
102
+ }
@@ -0,0 +1,110 @@
1
+ export const VoiceSection = ({ config, setConfig }) => {
2
+ const handleCustomWakeWordsChange = (e) =>
3
+ setConfig((prev) => ({ ...prev, customWakeWords: e.target.value }))
4
+
5
+ const handleSpeechLanguageChange = (e) =>
6
+ setConfig((prev) => ({ ...prev, speechLanguage: e.target.value }))
7
+
8
+ const openSoundSettings = async () => {
9
+ if (window.api && window.api.osOpen) {
10
+ try {
11
+ await window.api.osOpen('ms-settings:sound')
12
+ } catch (_) {
13
+ if (window.api.executeNativeTool) {
14
+ await window.api.executeNativeTool('run-powershell', 'start ms-settings:sound')
15
+ }
16
+ }
17
+ } else if (window.api && window.api.executeNativeTool) {
18
+ await window.api.executeNativeTool('run-powershell', 'start ms-settings:sound')
19
+ }
20
+ }
21
+
22
+ return (
23
+ <div id="tour-tts" className="space-y-6 p-2 -mx-2 rounded-lg">
24
+ <h2 className="text-base font-bold uppercase tracking-wider opacity-70 mb-5">
25
+ Audio & Voice Engine
26
+ </h2>
27
+
28
+ {/* Custom Wake Words Input */}
29
+ <div id="tour-wakeword" className="space-y-2">
30
+ <div className="flex justify-between items-end">
31
+ <p className="text-sm font-semibold">Kata Pemicu Kustom (Custom Wake Words)</p>
32
+ <span className="text-[10px] opacity-50">Fitur Bawaan Aktif</span>
33
+ </div>
34
+ <input
35
+ type="text"
36
+ placeholder="Contoh: Jarvis, Komputer, Bro"
37
+ className="input input-bordered w-full"
38
+ value={config.customWakeWords || ''}
39
+ onChange={handleCustomWakeWordsChange}
40
+ />
41
+ <p className="text-xs opacity-50">
42
+ Pola bawaan seperti <strong>"Hey Mark"</strong>, <strong>"Halo Mark"</strong>, dan{' '}
43
+ <strong>"Mark"</strong> sudah aktif otomatis di latar belakang. Masukkan kata atau
44
+ nama panggilan tambahan di atas (pisahkan dengan koma).
45
+ </p>
46
+ </div>
47
+
48
+ {/* Speech Recognition Language */}
49
+ <div className="space-y-1.5">
50
+ <p className="text-sm font-semibold">Bahasa Input Suara</p>
51
+ <select
52
+ className="select select-bordered w-full"
53
+ value={config.speechLanguage || 'id-ID'}
54
+ onChange={handleSpeechLanguageChange}
55
+ >
56
+ <option value="id-ID">Bahasa Indonesia (id-ID)</option>
57
+ <option value="en-US">English - United States (en-US)</option>
58
+ <option value="jv-ID">Bahasa Jawa (jv-ID)</option>
59
+ <option value="su-ID">Bahasa Sunda (su-ID)</option>
60
+ </select>
61
+ <p className="text-xs opacity-40">
62
+ Pilih bahasa utama yang kamu gunakan saat berbicara dengan Mark.
63
+ </p>
64
+ </div>
65
+
66
+ {/* Microphone Information & OS Shortcut */}
67
+ <div className="space-y-2.5 p-3.5 bg-base-200/50 rounded-xl border border-white/5">
68
+ <div className="flex items-center justify-between">
69
+ <div className="flex items-center gap-2">
70
+ <span className="w-2 h-2 rounded-full bg-success animate-pulse"></span>
71
+ <p className="text-sm font-semibold">Perangkat Mikrofon</p>
72
+ </div>
73
+ <button
74
+ type="button"
75
+ onClick={openSoundSettings}
76
+ className="btn btn-xs btn-primary gap-1.5 shadow-sm"
77
+ title="Buka Pengaturan Suara Windows untuk memilih Mikrofon Utama"
78
+ >
79
+ <svg
80
+ xmlns="http://www.w3.org/2000/svg"
81
+ width="12"
82
+ height="12"
83
+ viewBox="0 0 24 24"
84
+ fill="none"
85
+ stroke="currentColor"
86
+ strokeWidth="2"
87
+ strokeLinecap="round"
88
+ strokeLinejoin="round"
89
+ >
90
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
91
+ <polyline points="15 3 21 3 21 9" />
92
+ <line x1="10" y1="14" x2="21" y2="3" />
93
+ </svg>
94
+ <span>Ganti Mikrofon di Windows</span>
95
+ </button>
96
+ </div>
97
+
98
+ <p className="font-medium text-xs text-white/90">
99
+ Mark otomatis menggunakan{' '}
100
+ <strong>mikrofon utama (default) laptop atau PC kamu</strong>.
101
+ </p>
102
+ <p className="text-xs opacity-50">
103
+ Kalau kamu punya mikrofon eksternal (seperti headset atau mic USB) dan ingin
104
+ menggunakannya, klik tombol <em>"Ganti Mikrofon di Windows"</em> di atas lalu
105
+ pilih mikrofon tersebut sebagai perangkat utama.
106
+ </p>
107
+ </div>
108
+ </div>
109
+ )
110
+ }
@@ -0,0 +1,5 @@
1
+ export { AiEngineSection } from './AiEngineSection'
2
+ export { CameraSection, ConfigCameraPreview } from './CameraSection'
3
+ export { ShortcutSection } from './ShortcutSection'
4
+ export { VoiceSection } from './VoiceSection'
5
+ export { PermissionsSection } from './PermissionsSection'