beast-agent 1.9.0 → 2.1.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 (52) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +130 -130
  3. package/bin/beast-agent.js +137 -137
  4. package/package.json +1 -1
  5. package/scripts/fix-electron.js +138 -138
  6. package/scripts/release.js +137 -131
  7. package/scripts/swap-electron.js +40 -40
  8. package/src/agent/agentdefs.js +122 -122
  9. package/src/agent/bots.js +580 -580
  10. package/src/agent/bus.js +389 -389
  11. package/src/agent/computeruse.js +200 -200
  12. package/src/agent/config.js +284 -284
  13. package/src/agent/discord.js +332 -332
  14. package/src/agent/engine.js +106 -14
  15. package/src/agent/kb.js +123 -123
  16. package/src/agent/llm.js +610 -430
  17. package/src/agent/logger.js +90 -90
  18. package/src/agent/mcp.js +427 -427
  19. package/src/agent/mem0.js +605 -605
  20. package/src/agent/memory.js +427 -427
  21. package/src/agent/mqueue.js +124 -124
  22. package/src/agent/pdf.js +20 -20
  23. package/src/agent/research.js +133 -133
  24. package/src/agent/scripts/news.py +113 -113
  25. package/src/agent/scripts/stealthsearch.py +30 -30
  26. package/src/agent/scripts/websearch.py +225 -225
  27. package/src/agent/searxng.js +325 -325
  28. package/src/agent/seeds/brainstorming/SKILL.md +90 -90
  29. package/src/agent/seeds/dispatching-parallel-agents/SKILL.md +120 -120
  30. package/src/agent/seeds/executing-plans/SKILL.md +60 -60
  31. package/src/agent/seeds/subagent-driven-development/SKILL.md +167 -167
  32. package/src/agent/seeds/systematic-debugging/SKILL.md +131 -131
  33. package/src/agent/seeds/test-driven-development/SKILL.md +152 -152
  34. package/src/agent/seeds/verification-before-completion/SKILL.md +63 -63
  35. package/src/agent/seeds/writing-plans/SKILL.md +162 -162
  36. package/src/agent/seeds/writing-skills/SKILL.md +229 -229
  37. package/src/agent/skills.js +652 -652
  38. package/src/agent/store.js +378 -378
  39. package/src/agent/telegram.js +155 -155
  40. package/src/agent/tokens.js +39 -39
  41. package/src/agent/usage.js +125 -125
  42. package/src/agent/watchers.js +312 -312
  43. package/src/agent/watext.js +80 -80
  44. package/src/agent/whatsapp.js +555 -555
  45. package/src/cron.js +255 -255
  46. package/src/main.js +348 -6
  47. package/src/preload.js +9 -0
  48. package/src/renderer/browserPreload.js +73 -73
  49. package/src/renderer/i18n.js +4 -0
  50. package/src/renderer/index.html +448 -409
  51. package/src/renderer/renderer.js +824 -41
  52. package/src/renderer/style.css +264 -5
@@ -1,409 +1,448 @@
1
- <!DOCTYPE html>
2
- <html lang="tr">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta http-equiv="Content-Security-Policy"
6
- content="default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; script-src 'self'" />
7
- <title>Beast Agent</title>
8
- <link rel="stylesheet" href="style.css" />
9
- </head>
10
- <body>
11
- <div id="app">
12
- <aside id="sidebar">
13
- <div id="brand"><span class="brand-beast">BEAST</span><span class="brand-sub">Agent</span></div>
14
- <button id="newChat" title="Yeni sohbet" data-i18n="newChat">+ Yeni Sohbet</button>
15
- <div id="sessList"></div>
16
- <div id="botBar">
17
- <div id="botBarHead">
18
- <span id="botBarTitle" data-i18n="bot_head">BOTLAR</span>
19
- <span class="bot-bar-btns">
20
- <button id="botOverviewBtn" title="Tüm Botlar" data-i18n-title="bot_overview">&#x2261;</button>
21
- <button id="botAddBtn" title="Yeni Bot" data-i18n-title="bot_add">+</button>
22
- </span>
23
- </div>
24
- <div id="botList"></div>
25
- </div>
26
- <aside id="filePanel">
27
- <div id="filePanelHead">
28
- <span id="filePanelTitle" data-i18n="ide_files">DOSYALAR</span>
29
- <span class="file-spacer"></span>
30
- <button id="fileTasks" title="Görev listesi + geri al" data-i18n-title="ide_tasks"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="3" width="14" height="18" rx="2"/><path d="M9 8h6M9 12h6M9 16h4"/></svg></button>
31
- <button id="filePick" title="Klasör seç" data-i18n-title="ide_pick"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7z"/></svg></button>
32
- <button id="fileRefresh" title="Yenile" data-i18n-title="ide_refresh">&#x27F3;</button>
33
- <button id="filePreview" title="Preview" data-i18n-title="ide_preview_t">&#9654;</button>
34
- </div>
35
- <div id="filePanelPath" title="">—</div>
36
- <div id="tasksPanel" hidden></div>
37
- <div id="fileTree"></div>
38
- </aside>
39
- <div id="sideFoot">
40
- <button id="gearBtn" title="Ayarlar" data-i18n-title="tipGear">&#x2699;&#xFE0E;</button>
41
- <button id="themeBtn" title="Koyu tema">&#x263E;</button>
42
- <button id="storeBtn" title="Skills Store" data-i18n-title="tipStore"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16l-1.3 12.1a2 2 0 0 1-2 1.9H7.3a2 2 0 0 1-2-1.9L4 7z"/><path d="M8 10V6a4 4 0 0 1 8 0v4"/></svg></button>
43
- <button id="gitBtn" title="GitHub Trending" data-i18n-title="tipGithub"><svg viewBox="0 0 24 24" width="15" height="15" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></button>
44
- <button id="ideBtn" title="IDE Modu" data-i18n-title="tipIde"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6l-5 6 5 6"/><path d="M16 6l5 6-5 6"/><path d="M13.5 4l-3 16"/></svg></button>
45
- <span id="netDot" class="net-on" title="İnternet: bağlı" data-i18n-title="tipNet"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 8.82a15 15 0 0 1 20 0"/><path d="M5 12.85a10 10 0 0 1 14 0"/><path d="M8.53 16.11a6 6 0 0 1 6.95 0"/><line x1="12" y1="20" x2="12.01" y2="20"/><line class="net-slash" x1="4" y1="4" x2="20" y2="20"/></svg></span>
46
- </div>
47
- </aside>
48
-
49
- <main id="main">
50
- <header id="topbar">
51
- <span id="botChip" title="Aktif bot">🦁 Beast</span>
52
- <div id="modelDD" class="dd">
53
- <button id="modelBtn" class="dd-btn" title="Model seç" data-i18n-title="tipModel"><span id="modelBtnLabel">Model</span><span class="dd-caret">▾</span></button>
54
- <div id="modelMenu" class="dd-menu" hidden>
55
- <input id="modelFilter" class="dd-filter" placeholder="Model ara…" autocomplete="off" />
56
- <div id="modelList" class="dd-list"></div>
57
- </div>
58
- </div>
59
- <div id="thinkDD" class="dd">
60
- <button id="thinkBtn" class="dd-btn dd-icon-btn" title="Düşünme (reasoning) seviyesi" data-i18n-title="tipThink"><span id="thinkBtnLabel"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.5 2A2.5 2.5 0 0 0 7 4.5v.55A3.5 3.5 0 0 0 4.5 8.5c0 .74.23 1.43.62 2A3.5 3.5 0 0 0 4 13.5 3.5 3.5 0 0 0 7 16.95v.55A2.5 2.5 0 0 0 9.5 20a2.5 2.5 0 0 0 2.5-2.5v-13A2.5 2.5 0 0 0 9.5 2z"/><path d="M14.5 2A2.5 2.5 0 0 1 17 4.5v.55a3.5 3.5 0 0 1 2.5 3.45c0 .74-.23 1.43-.62 2a3.5 3.5 0 0 1 1.12 3 3.5 3.5 0 0 1-3 3.45v.55A2.5 2.5 0 0 1 14.5 20 2.5 2.5 0 0 1 12 17.5v-13A2.5 2.5 0 0 1 14.5 2z"/></svg></span></button>
61
- <div id="thinkMenu" class="dd-menu think-menu" hidden>
62
- <div id="thinkList" class="dd-list"></div>
63
- </div>
64
- </div>
65
- <button id="modelRefreshBtn" class="dd-btn dd-icon-btn" title="Modelleri yeniden çek" data-i18n-title="tipModelRefresh">&#x27F3;</button>
66
- <div id="pickCfg" class="dd">
67
- <button id="pickCfgBtn" class="dd-btn dd-icon-btn" title="Picker'da görünecek modeller" data-i18n-title="tipPickCfg">⚙</button>
68
- <div id="pickCfgMenu" class="dd-menu cfg-menu" hidden>
69
- <div class="cfg-head">
70
- <span>Picker modelleri</span>
71
- <span class="cfg-quick"><button id="cfgAll">Tümü</button><button id="cfgNone">Hiçbiri</button></span>
72
- </div>
73
- <div id="cfgList" class="dd-list"></div>
74
- </div>
75
- </div>
76
- <button id="railBtn" class="dd-btn dd-icon-btn" title="Paralel Ajan Konsolu" data-i18n-title="tipRail">&#x25A4;</button>
77
- <button id="watchBtn" class="dd-btn dd-icon-btn" title="İzleyiciler (Watchers)" data-i18n-title="tipWatch">&#x25CE;</button>
78
- <button id="cronBtn" class="dd-btn dd-icon-btn" title="Cron Görevler" data-i18n-title="tipCron">&#x23F1;&#xFE0E;</button>
79
- <button id="termCBtn" class="dd-btn dd-icon-btn" title="CMD terminali" data-i18n-title="tipTermC">&#x276F;&#xFE0E;</button>
80
- <button id="browserBtn" class="dd-btn dd-icon-btn" title="Dahili tarayıcı" data-i18n-title="tipBrowser">&#x29C9;</button>
81
- <button id="eyeBtn" class="dd-btn dd-icon-btn" title="Ajan tarayıcısı görünür/gizli — göz açıkken aramalar panelde izlenir, kapalıyken gizli çalışır" data-i18n-title="tipEye"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/><line class="eye-slash" x1="4" y1="4" x2="20" y2="20"/></svg></button>
82
- <div class="drag-spacer"></div>
83
- <div class="win-controls" id="winControls">
84
- <button id="winMin" title="Simge durumunda küçült" data-i18n-title="tip_win_min">&#x2500;&#xFE0E;</button>
85
- <button id="winMax" title="Pencereyi büyüt/küçült" data-i18n-title="tip_win_max">&#x25A1;&#xFE0E;</button>
86
- <button id="winClose" class="win-close" title="Kapat" data-i18n-title="btn_close">&#x2715;&#xFE0E;</button>
87
- </div>
88
- </header>
89
-
90
- <div id="chatScroll">
91
- <div id="empty">
92
- <div id="emptyLogo">BEAST</div>
93
- <div id="emptyHint" data-i18n="emptyHint">Hızlı · hafif · becerikli. Ne yapalım?</div>
94
- </div>
95
- <div id="msgs"></div>
96
- </div>
97
-
98
- <div id="composerWrap">
99
- <div id="todoPanel" hidden></div>
100
- <div id="statusRow"><div id="statusPill" hidden></div><div id="toast" hidden></div></div>
101
- <div id="chips" hidden></div>
102
- <div id="slashMenu" hidden></div>
103
- <div id="composer">
104
- <div id="composerLeft" class="dd">
105
- <button id="attachBtn" title="Dosya / resim ekle" data-i18n-title="tipAttach">+</button>
106
- <button id="micBtn" title="Sesli komut konuş, bırakınca yazıya çevirsin" data-i18n-title="tipMic"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><path d="M12 19v3"/></svg></button>
107
- </div>
108
- <textarea id="input" rows="1" placeholder="Bir şey sor ya da görev ver… (Enter: gönder · Shift+Enter: satır · /: komutlar)" data-i18n-ph="composerPh"></textarea>
109
- <button id="stopBtn" title="Durdur" hidden data-i18n-title="tipStop">■</button>
110
- <button id="sendBtn" title="Gönder" data-i18n-title="tipSend">&#x27A4;&#xFE0E;</button>
111
- </div>
112
- </div>
113
-
114
- <div id="ideRow">
115
- <section id="codePane">
116
- <div id="codeTabsBar">
117
- <div id="codeTabs"></div>
118
- <code id="codePath" title="">—</code>
119
- <button id="codeDiffBtn" title="Değişiklikleri kırmızı/yeşil göster (ajan + kendi düzenlemelerin)">Diff</button>
120
- <button id="codeSave" title="Kaydet (Ctrl+S)">Kaydet</button>
121
- <button id="codeHide" title="Editörü kapat" data-i18n-title="tipCodeHide">&#x2715;&#xFE0E;</button>
122
- </div>
123
- <div id="codeBody">
124
- <div id="codeGutter" aria-hidden="true"></div>
125
- <pre id="codeLayer" aria-hidden="true"></pre>
126
- <textarea id="codeTa" spellcheck="false" wrap="off"></textarea>
127
- <div id="codeFind" hidden>
128
- <input id="codeFindInp" placeholder="Bul… (Shift+F)" autocomplete="off" spellcheck="false" />
129
- <span id="codeFindCount">0/0</span>
130
- <button id="codeFindPrev" title="Önceki eşleşme (Shift+Enter)">&#x2191;</button>
131
- <button id="codeFindNext" title="Sonraki eşleşme (Enter)">&#x2193;</button>
132
- <button id="codeFindClose" title="Kapat (Esc)">&#x00D7;</button>
133
- </div>
134
- <div id="codeDiffView" hidden>
135
- <div id="codeDiffBar">
136
- <span id="codeDiffTitle">DEĞİŞİKLİKLER</span>
137
- <span id="codeDiffStats"></span>
138
- <span class="file-spacer"></span>
139
- <button id="codeDiffClose" title="Düzenlemeye dön">&#x2715;&#xFE0E; Kapat</button>
140
- </div>
141
- <div id="codeDiffRows"></div>
142
- </div>
143
- </div>
144
- </section>
145
-
146
- <div id="ideSplit" title="Sürükleyerek boyutlandır"></div>
147
-
148
- <div id="bcPanel">
149
- <div id="bcHead">
150
- <span id="bcTitle">BEAST CODE</span>
151
- <span id="bcCwd" title=""></span>
152
- <span class="file-spacer"></span>
153
- <button id="codeShow" title="Editörü göster" data-i18n-title="tipCodeShow" hidden>&#x25A3;&#xFE0E;</button>
154
- <button id="bcNew" title="Yeni oturum" data-i18n-title="bc_new">+</button>
155
- <button id="bcClear" title="Çıktıyı temizle" data-i18n-title="bc_clear">Temizle</button>
156
- </div>
157
- <div id="bcOut"></div>
158
- <div id="bcTodoWrap" hidden></div>
159
- <div id="bcStatus" hidden></div>
160
- <div id="bcChips" hidden></div>
161
- <div id="bcInputRow">
162
- <button id="bcAttach" title="Dosya / resim ekle" data-i18n-title="tipAttach">+</button>
163
- <button id="bcMic" title="Sesli komut konuş, bırakınca yazıya çevirsin" data-i18n-title="tipMic"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><path d="M12 19v3"/></svg></button>
164
- <textarea id="bcInput" rows="1" spellcheck="false" autocomplete="off" placeholder="Beast Code mesajı yaz Enter ile gönder…" data-i18n-ph="bc_ph"></textarea>
165
- <button id="bcStop" title="Çalışan mesajı durdur" hidden data-i18n-title="bc_stop">&#x25A0;&#xFE0E;</button>
166
- </div>
167
- </div>
168
- </div>
169
- </main>
170
-
171
- <aside id="rail">
172
- <div id="railHead">
173
- <span id="railTitle" data-i18n="labelParallel">Paralel Ajanlar</span>
174
- <button id="railClear" title="Tüm paralel ajan geçmişini sil" aria-label="Tüm paralel ajan geçmişini sil">
175
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#111" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2"/><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><path d="M10 11v6"/><path d="M14 11v6"/></svg>
176
- </button>
177
- </div>
178
- <div id="railList"></div>
179
- <div id="sideFoot2">
180
- <span class="foot-label2" data-i18n="labelParallel">Paralel Ajanlar</span>
181
- </div>
182
- </aside>
183
- </div>
184
-
185
- <div id="settingsOverlay" hidden>
186
- <div id="settingsDialog">
187
- <aside id="setTabs">
188
- <div class="set-tabs-title" data-i18n="set_title">AYARLAR</div>
189
- <nav class="set-tabs-list">
190
- <button class="tab active" data-tab="lang" data-i18n="tab_lang">Dil</button>
191
- <button class="tab" data-tab="provider" data-i18n="tab_provider">Provider</button>
192
- <button class="tab" data-tab="fallout" data-i18n="tab_fallout">Fallout</button>
193
- <button class="tab" data-tab="skills" data-i18n="tab_skills">Skills</button>
194
- <button class="tab" data-tab="agents" data-i18n="tab_agents">Paralel Ajanlar</button>
195
- <button class="tab" data-tab="tts" data-i18n="tab_tts">Sesli Yanıt</button>
196
- <button class="tab" data-tab="email" data-i18n="tab_email">E-posta</button>
197
- <button class="tab" data-tab="integrations" data-i18n="tab_integrations">Entegrasyonlar</button>
198
- <button class="tab" data-tab="websearch" data-i18n="tab_websearch">Web Arama</button>
199
- <button class="tab" data-tab="mcp" data-i18n="tab_mcp">MCP</button>
200
- <button class="tab" data-tab="events" data-i18n="tab_events">Olay Merkezi</button>
201
- <button class="tab" data-tab="cron" data-i18n="tab_cron">Cron</button>
202
- <button class="tab" data-tab="usage" data-i18n="tab_usage">Maliyet · Limit</button>
203
- <button class="tab" data-tab="logs" data-i18n="tab_logs">Log</button>
204
- <button class="tab" data-tab="dash" data-i18n="tab_dash">Dashboard</button>
205
- <button class="tab" data-tab="sec" data-i18n="tab_security">Güvenlik</button>
206
- <button class="tab" data-tab="update" data-i18n="tab_update">Güncelleme</button>
207
- </nav>
208
- <div class="set-tabs-foot">
209
- <button id="setClose" data-i18n="btn_close">Kapat</button>
210
- <div id="setVersion" class="set-version">—</div>
211
- </div>
212
- </aside>
213
- <section id="setContent">
214
- <div id="tab-lang" class="pane"></div>
215
- <div id="tab-provider" class="pane"></div>
216
- <div id="tab-fallout" class="pane" hidden></div>
217
- <div id="tab-skills" class="pane" hidden></div>
218
- <div id="tab-agents" class="pane" hidden></div>
219
- <div id="tab-tts" class="pane" hidden></div>
220
- <div id="tab-email" class="pane" hidden></div>
221
- <div id="tab-integrations" class="pane" hidden></div>
222
- <div id="tab-websearch" class="pane" hidden></div>
223
- <div id="tab-mcp" class="pane" hidden></div>
224
- <div id="tab-events" class="pane" hidden></div>
225
- <div id="tab-usage" class="pane" hidden></div>
226
- <div id="tab-logs" class="pane" hidden></div>
227
- <div id="tab-dash" class="pane" hidden></div>
228
- <div id="tab-sec" class="pane" hidden></div>
229
- <div id="tab-update" class="pane" hidden></div>
230
- <div id="tab-cron" class="pane" hidden>
231
- <h2 data-i18n="cron_h2">Cron Görevler</h2>
232
- <div class="sub" data-i18n="cron_sub">Zamanlanmış görevler — saati gelince agent otomatik çalışır</div>
233
- <div id="cronForm">
234
- <input id="cronName" placeholder="Görev adı" maxlength="80" data-i18n-ph="cron_name_ph" />
235
- <div id="cronSchedRow">
236
- <select id="cronPreset">
237
- <option value="*/5 * * * *" data-i18n="cron_pr_5">Her 5 dakika</option>
238
- <option value="*/15 * * * *" data-i18n="cron_pr_15">Her 15 dakika</option>
239
- <option value="*/30 * * * *" data-i18n="cron_pr_30">Her 30 dakika</option>
240
- <option value="0 * * * *" data-i18n="cron_pr_hour">Her saat başı</option>
241
- <option value="0 9 * * *" data-i18n="cron_pr_day9">Her gün 09:00</option>
242
- <option value="0 21 * * 1-5" data-i18n="cron_pr_wd21">Hafta içi 21:00</option>
243
- <option value="__custom" data-i18n="cron_pr_custom">Özel cron…</option>
244
- </select>
245
- <input id="cronSchedule" placeholder="*/15 * * * *" spellcheck="false" />
246
- </div>
247
- <textarea id="cronPrompt" rows="3" placeholder="Agent'a verilecek görev…" data-i18n-ph="cron_prompt_ph"></textarea>
248
- <button id="cronAddBtn" data-i18n="cron_add">+ Görev Ekle</button>
249
- </div>
250
- <div id="cronList"></div>
251
- </div>
252
- </section>
253
- </div>
254
- </div>
255
-
256
- <div id="botOverlay" hidden>
257
- <div id="botDialog">
258
- <div id="botHead">
259
- <span id="botHeadIcon">🦁</span>
260
- <span id="botHeadName">Beast</span>
261
- <span id="botHeadTag" class="bot-tag"></span>
262
- <span class="bot-head-spacer"></span>
263
- <button id="botOverviewBack" class="btn ghost" hidden data-i18n="bot_overview">Tüm Botlar</button>
264
- <button id="botClose" class="mini-close" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
265
- </div>
266
- <div id="botBody">
267
- <div id="botChatsCol">
268
- <div id="botChatsTitle" data-i18n="bot_chats">Sohbet Geçmişi</div>
269
- <div id="botChatList"></div>
270
- <div id="botChatMsgs"></div>
271
- </div>
272
- <div id="botManageCol">
273
- <nav id="botTabs">
274
- <button class="btab active" data-btab="settings" data-i18n="bot_tab_settings">Ayarlar</button>
275
- <button class="btab" data-btab="memory" data-i18n="bot_tab_memory">Memory</button>
276
- <button class="btab" data-btab="log" data-i18n="bot_tab_log">Log</button>
277
- <button class="btab" data-btab="watcher" data-i18n="bot_tab_watcher">Watcher</button>
278
- <button class="btab" data-btab="stats" data-i18n="bot_tab_stats">İstatistik</button>
279
- <button class="btab" data-btab="notes" data-i18n="bot_tab_notes">Notlar</button>
280
- <button class="btab" data-btab="dmlog" hidden>DM Log</button>
281
- </nav>
282
- <div id="botPane"></div>
283
- </div>
284
- </div>
285
- </div>
286
- </div>
287
-
288
- <div id="bbResize" hidden title="Sürükleyerek boyutlandır"></div>
289
-
290
- <div id="storeOverlay" hidden>
291
- <div id="storeDialog">
292
- <div id="storeHead">
293
- <span id="storeTitle" data-i18n="store_title">SKILLS STORE</span>
294
- <span id="storeBeastId" title="Beast kimliği (parmak izi)"></span>
295
- <span class="store-spacer"></span>
296
- <button id="storeClose" class="mini-close" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
297
- </div>
298
- <nav id="storeTabs">
299
- <button class="stab active" data-stab="trending" data-i18n="store_tab_trending">Trending</button>
300
- <button class="stab" data-stab="stars" data-i18n="store_tab_stars">Stars</button>
301
- <button class="stab" data-stab="upload" data-i18n="store_tab_upload">Upload</button>
302
- </nav>
303
- <div id="storePane"></div>
304
- </div>
305
- </div>
306
-
307
- <div id="ghOverlay" hidden>
308
- <div id="ghDialog">
309
- <div id="ghHead">
310
- <span id="ghTitle">GITHUB TRENDING</span>
311
- <span class="store-spacer"></span>
312
- <button id="ghClose" class="mini-close" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
313
- </div>
314
- <div id="ghBody">
315
- <section id="ghTrendPane" class="gh-pane">
316
- <div class="gh-pane-tabs">
317
- <button class="gh-tab on" data-ghtab="trend">Trend Repolar</button>
318
- <button class="gh-tab" data-ghtab="all">Tüm Repolar</button>
319
- </div>
320
- <div class="gh-pane-subline" id="ghTrendSub">— son 2 haftanın yıldız yükselenleri</div>
321
- <div id="ghTrendTools" class="gh-filters">
322
- <div class="gh-ranges" id="ghRanges">
323
- <button data-range="all" title="Tüm zamanlar">Tümü</button>
324
- <button data-range="6m" title="Son 6 ay">6 Ay</button>
325
- <button data-range="1m" title="Son 1 ay">1 Ay</button>
326
- <button data-range="2w" class="on" title="Son 2 hafta">2 Hafta</button>
327
- <button data-range="1w" title="Son 1 hafta">1 Hafta</button>
328
- </div>
329
- <button id="ghSortBtn" title="Yıldız sırası: azalan / artan">↓ Yıldız</button>
330
- <input id="ghSearch" placeholder="Repo ara… (Enter)" spellcheck="false" />
331
- <button id="ghTrendRefresh" class="gh-refresh" title="Sıfırla ve yenile — modal ilk açıldığı gibi">&#x27F3;</button>
332
- </div>
333
- <div id="ghAllTools" class="gh-filters" hidden>
334
- <input id="ghAllSearch" placeholder="Tüm GitHub'da ara… (Enter)" spellcheck="false" />
335
- <button id="ghAllSortBtn" title="Sıralama: en iyi eşleşme / yıldız">⭐ En İyi</button>
336
- <button id="ghAllRefresh" class="gh-refresh" title="Sıfırla ve yenile">&#x27F3;</button>
337
- </div>
338
- <div id="ghTrendList" class="gh-pane-list"></div>
339
- </section>
340
- <section id="ghFavPane" class="gh-pane">
341
- <div class="gh-pane-title">Favoriler <span class="gh-pane-sub">— yıldızladıkların burada saklanır</span></div>
342
- <div id="ghFavList" class="gh-pane-list"></div>
343
- </section>
344
- </div>
345
- </div>
346
- </div>
347
-
348
- <div id="watchOverlay" class="mini-overlay" hidden>
349
- <div class="mini-dialog">
350
- <div class="mini-head">
351
- <span class="mini-title" data-i18n="mini_watch">İzleyiciler (Watchers)</span>
352
- <button class="mini-close" id="watchClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
353
- </div>
354
- <div class="mini-body">
355
- <div id="watchList" class="mini-list"></div>
356
- </div>
357
- </div>
358
- </div>
359
-
360
- <div id="cronOverlay" class="mini-overlay" hidden>
361
- <div class="mini-dialog">
362
- <div class="mini-head">
363
- <span class="mini-title" data-i18n="mini_cron">Cron Görevler</span>
364
- <button class="mini-close" id="cronClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
365
- </div>
366
- <div class="mini-body">
367
- <div id="cronModalList" class="mini-list"></div>
368
- </div>
369
- </div>
370
- </div>
371
-
372
- <div id="browserBar" hidden>
373
- <button id="bbBack" title="Geri" data-i18n-title="tip_bb_back">&#x2190;</button>
374
- <button id="bbFwd" title="İleri" data-i18n-title="tip_bb_fwd">&#x2192;</button>
375
- <button id="bbReload" title="Yenile" data-i18n-title="tip_bb_reload">&#x21BB;</button>
376
- <input id="bbUrl" placeholder="adres yaz veya ara…" autocomplete="off" spellcheck="false" data-i18n-ph="bb_ph" />
377
- <button id="bbPhone" title="Telefon modu — mobil versiyon / web versiyonu" data-i18n-title="tip_bb_phone"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="2" width="10" height="20" rx="2.5"/><line x1="11" y1="18" x2="13" y2="18"/></svg></button>
378
- <button id="bbOpenExt" title="Tarayıcıda aç" data-i18n-title="tip_bb_open">&#x2197;</button>
379
- <button id="bbClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
380
- </div>
381
-
382
- <div id="termPanel" hidden>
383
- <div id="termHead">
384
- <span id="termTitle">TERMINAL</span>
385
- <span id="termCwd" title=""></span>
386
- <span class="term-spacer"></span>
387
- <button id="termClear" title="Çıktıyı temizle" data-i18n="term_clear" data-i18n-title="btn_close">Temizle</button>
388
- <button id="termClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
389
- </div>
390
- <div id="termBody">
391
- <div id="termOut"></div>
392
- </div>
393
- <div id="termInputRow">
394
- <span id="termPrompt">CMD&gt;</span>
395
- <input id="termInput" spellcheck="false" autocomplete="off" placeholder="komut yaz, Enter'la çalıştır…" data-i18n-ph="term_ph" />
396
- <button id="termStop" title="Çalışan komutu durdur" hidden data-i18n-title="term_stop">&#x25A0;&#xFE0E;</button>
397
- </div>
398
- </div>
399
- <div id="termResize" hidden title="Sürükleyerek boyutlandır"></div>
400
-
401
- <div id="fileCtxMenu" hidden></div>
402
-
403
- <input type="file" id="fileInput" multiple hidden
404
- accept="image/*,.txt,.md,.json,.csv,.log,.js,.ts,.py,.ps1,.bat,.cmd,.html,.css,.yaml,.yml,.xml,.ini" />
405
-
406
- <script src="i18n.js"></script>
407
- <script src="renderer.js"></script>
408
- </body>
409
- </html>
1
+ <!DOCTYPE html>
2
+ <html lang="tr">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta http-equiv="Content-Security-Policy"
6
+ content="default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; media-src 'self' blob: file:; script-src 'self'" />
7
+ <title>Beast Agent</title>
8
+ <link rel="stylesheet" href="style.css" />
9
+ </head>
10
+ <body>
11
+ <div id="app">
12
+ <aside id="sidebar">
13
+ <div id="brand"><span class="brand-beast">BEAST</span><span class="brand-sub">Agent</span></div>
14
+ <button id="newChat" title="Yeni sohbet" data-i18n="newChat">+ Yeni Sohbet</button>
15
+ <div id="sessList"></div>
16
+ <div id="botBar">
17
+ <div id="botBarHead">
18
+ <span id="botBarTitle" data-i18n="bot_head">BOTLAR</span>
19
+ <span class="bot-bar-btns">
20
+ <button id="botOverviewBtn" title="Tüm Botlar" data-i18n-title="bot_overview">&#x2261;</button>
21
+ <button id="botAddBtn" title="Yeni Bot" data-i18n-title="bot_add">+</button>
22
+ </span>
23
+ </div>
24
+ <div id="botList"></div>
25
+ </div>
26
+ <aside id="filePanel">
27
+ <div id="filePanelHead">
28
+ <span id="filePanelTitle" data-i18n="ide_files">DOSYALAR</span>
29
+ <span class="file-spacer"></span>
30
+ <button id="fileTasks" title="Görev listesi + geri al" data-i18n-title="ide_tasks"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="3" width="14" height="18" rx="2"/><path d="M9 8h6M9 12h6M9 16h4"/></svg></button>
31
+ <button id="filePick" title="Klasör seç" data-i18n-title="ide_pick"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7z"/></svg></button>
32
+ <button id="fileRefresh" title="Yenile" data-i18n-title="ide_refresh">&#x27F3;</button>
33
+ <button id="filePreview" title="Preview" data-i18n-title="ide_preview_t">&#9654;</button>
34
+ </div>
35
+ <div id="filePanelPath" title="">—</div>
36
+ <div id="tasksPanel" hidden></div>
37
+ <div id="fileTree"></div>
38
+ </aside>
39
+ <div id="sideFoot">
40
+ <button id="gearBtn" title="Ayarlar" data-i18n-title="tipGear">&#x2699;&#xFE0E;</button>
41
+ <button id="themeBtn" title="Koyu tema">&#x263E;</button>
42
+ <button id="storeBtn" title="Skills Store" data-i18n-title="tipStore"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16l-1.3 12.1a2 2 0 0 1-2 1.9H7.3a2 2 0 0 1-2-1.9L4 7z"/><path d="M8 10V6a4 4 0 0 1 8 0v4"/></svg></button>
43
+ <button id="gitBtn" title="GitHub Trending" data-i18n-title="tipGithub"><svg viewBox="0 0 24 24" width="15" height="15" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></button>
44
+ <button id="ideBtn" title="IDE Modu" data-i18n-title="tipIde"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6l-5 6 5 6"/><path d="M16 6l5 6-5 6"/><path d="M13.5 4l-3 16"/></svg></button>
45
+ <button id="studioBtn" title="Beast Studio — video yapma/düzenleme" data-i18n-title="tipStudio"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="6" width="13" height="12" rx="2"/><path d="M15 10l7-4v12l-7-4"/></svg></button>
46
+ <span id="netDot" class="net-on" title="İnternet: bağlı" data-i18n-title="tipNet"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 8.82a15 15 0 0 1 20 0"/><path d="M5 12.85a10 10 0 0 1 14 0"/><path d="M8.53 16.11a6 6 0 0 1 6.95 0"/><line x1="12" y1="20" x2="12.01" y2="20"/><line class="net-slash" x1="4" y1="4" x2="20" y2="20"/></svg></span>
47
+ </div>
48
+ </aside>
49
+
50
+ <main id="main">
51
+ <header id="topbar">
52
+ <span id="botChip" title="Aktif bot">🦁 Beast</span>
53
+ <div id="modelDD" class="dd">
54
+ <button id="modelBtn" class="dd-btn" title="Model seç" data-i18n-title="tipModel"><span id="modelBtnLabel">Model</span><span class="dd-caret">▾</span></button>
55
+ <div id="modelMenu" class="dd-menu" hidden>
56
+ <input id="modelFilter" class="dd-filter" placeholder="Model ara…" autocomplete="off" />
57
+ <div id="modelList" class="dd-list"></div>
58
+ </div>
59
+ </div>
60
+ <div id="thinkDD" class="dd">
61
+ <button id="thinkBtn" class="dd-btn dd-icon-btn" title="Düşünme (reasoning) seviyesi" data-i18n-title="tipThink"><span id="thinkBtnLabel"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.5 2A2.5 2.5 0 0 0 7 4.5v.55A3.5 3.5 0 0 0 4.5 8.5c0 .74.23 1.43.62 2A3.5 3.5 0 0 0 4 13.5 3.5 3.5 0 0 0 7 16.95v.55A2.5 2.5 0 0 0 9.5 20a2.5 2.5 0 0 0 2.5-2.5v-13A2.5 2.5 0 0 0 9.5 2z"/><path d="M14.5 2A2.5 2.5 0 0 1 17 4.5v.55a3.5 3.5 0 0 1 2.5 3.45c0 .74-.23 1.43-.62 2a3.5 3.5 0 0 1 1.12 3 3.5 3.5 0 0 1-3 3.45v.55A2.5 2.5 0 0 1 14.5 20 2.5 2.5 0 0 1 12 17.5v-13A2.5 2.5 0 0 1 14.5 2z"/></svg></span></button>
62
+ <div id="thinkMenu" class="dd-menu think-menu" hidden>
63
+ <div id="thinkList" class="dd-list"></div>
64
+ </div>
65
+ </div>
66
+ <button id="modelRefreshBtn" class="dd-btn dd-icon-btn" title="Modelleri yeniden çek" data-i18n-title="tipModelRefresh">&#x27F3;</button>
67
+ <div id="pickCfg" class="dd">
68
+ <button id="pickCfgBtn" class="dd-btn dd-icon-btn" title="Picker'da görünecek modeller" data-i18n-title="tipPickCfg">⚙</button>
69
+ <div id="pickCfgMenu" class="dd-menu cfg-menu" hidden>
70
+ <div class="cfg-head">
71
+ <span>Picker modelleri</span>
72
+ <span class="cfg-quick"><button id="cfgAll">Tümü</button><button id="cfgNone">Hiçbiri</button></span>
73
+ </div>
74
+ <div id="cfgList" class="dd-list"></div>
75
+ </div>
76
+ </div>
77
+ <button id="railBtn" class="dd-btn dd-icon-btn" title="Paralel Ajan Konsolu" data-i18n-title="tipRail">&#x25A4;</button>
78
+ <button id="watchBtn" class="dd-btn dd-icon-btn" title="İzleyiciler (Watchers)" data-i18n-title="tipWatch">&#x25CE;</button>
79
+ <button id="cronBtn" class="dd-btn dd-icon-btn" title="Cron Görevler" data-i18n-title="tipCron">&#x23F1;&#xFE0E;</button>
80
+ <button id="termCBtn" class="dd-btn dd-icon-btn" title="CMD terminali" data-i18n-title="tipTermC">&#x276F;&#xFE0E;</button>
81
+ <button id="browserBtn" class="dd-btn dd-icon-btn" title="Dahili tarayıcı" data-i18n-title="tipBrowser">&#x29C9;</button>
82
+ <button id="eyeBtn" class="dd-btn dd-icon-btn" title="Ajan tarayıcısı görünür/gizli — göz açıkken aramalar panelde izlenir, kapalıyken gizli çalışır" data-i18n-title="tipEye"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/><line class="eye-slash" x1="4" y1="4" x2="20" y2="20"/></svg></button>
83
+ <div class="drag-spacer"></div>
84
+ <div class="win-controls" id="winControls">
85
+ <button id="winMin" title="Simge durumunda küçült" data-i18n-title="tip_win_min">&#x2500;&#xFE0E;</button>
86
+ <button id="winMax" title="Pencereyi büyüt/küçült" data-i18n-title="tip_win_max">&#x25A1;&#xFE0E;</button>
87
+ <button id="winClose" class="win-close" title="Kapat" data-i18n-title="btn_close">&#x2715;&#xFE0E;</button>
88
+ </div>
89
+ </header>
90
+
91
+ <div id="chatScroll">
92
+ <div id="empty">
93
+ <div id="emptyLogo">BEAST</div>
94
+ <div id="emptyHint" data-i18n="emptyHint">Hızlı · hafif · becerikli. Ne yapalım?</div>
95
+ </div>
96
+ <div id="msgs"></div>
97
+ </div>
98
+
99
+ <div id="composerWrap">
100
+ <div id="todoPanel" hidden></div>
101
+ <div id="statusRow"><div id="statusPill" hidden></div><div id="toast" hidden></div></div>
102
+ <div id="chips" hidden></div>
103
+ <div id="slashMenu" hidden></div>
104
+ <div id="composer">
105
+ <div id="composerLeft" class="dd">
106
+ <button id="attachBtn" title="Dosya / resim ekle" data-i18n-title="tipAttach">+</button>
107
+ <button id="micBtn" title="Sesli komut — konuş, bırakınca yazıya çevirsin" data-i18n-title="tipMic"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><path d="M12 19v3"/></svg></button>
108
+ </div>
109
+ <textarea id="input" rows="1" placeholder="Bir şey sor ya da görev ver… (Enter: gönder · Shift+Enter: satır · /: komutlar)" data-i18n-ph="composerPh"></textarea>
110
+ <button id="stopBtn" title="Durdur" hidden data-i18n-title="tipStop">■</button>
111
+ <button id="sendBtn" title="Gönder" data-i18n-title="tipSend">&#x27A4;&#xFE0E;</button>
112
+ </div>
113
+ </div>
114
+
115
+ <div id="ideRow">
116
+ <section id="codePane">
117
+ <div id="codeTabsBar">
118
+ <div id="codeTabs"></div>
119
+ <code id="codePath" title="">—</code>
120
+ <button id="codeDiffBtn" title="Değişiklikleri kırmızı/yeşil göster (ajan + kendi düzenlemelerin)">Diff</button>
121
+ <button id="codeSave" title="Kaydet (Ctrl+S)">Kaydet</button>
122
+ <button id="codeHide" title="Editörü kapat" data-i18n-title="tipCodeHide">&#x2715;&#xFE0E;</button>
123
+ </div>
124
+ <div id="codeBody">
125
+ <div id="codeGutter" aria-hidden="true"></div>
126
+ <pre id="codeLayer" aria-hidden="true"></pre>
127
+ <textarea id="codeTa" spellcheck="false" wrap="off"></textarea>
128
+ <div id="codeFind" hidden>
129
+ <input id="codeFindInp" placeholder="Bul… (Shift+F)" autocomplete="off" spellcheck="false" />
130
+ <span id="codeFindCount">0/0</span>
131
+ <button id="codeFindPrev" title="Önceki eşleşme (Shift+Enter)">&#x2191;</button>
132
+ <button id="codeFindNext" title="Sonraki eşleşme (Enter)">&#x2193;</button>
133
+ <button id="codeFindClose" title="Kapat (Esc)">&#x00D7;</button>
134
+ </div>
135
+ <div id="codeDiffView" hidden>
136
+ <div id="codeDiffBar">
137
+ <span id="codeDiffTitle">DEĞİŞİKLİKLER</span>
138
+ <span id="codeDiffStats"></span>
139
+ <span class="file-spacer"></span>
140
+ <button id="codeDiffClose" title="Düzenlemeye dön">&#x2715;&#xFE0E; Kapat</button>
141
+ </div>
142
+ <div id="codeDiffRows"></div>
143
+ </div>
144
+ </div>
145
+ </section>
146
+
147
+ <div id="ideSplit" title="Sürükleyerek boyutlandır"></div>
148
+
149
+ <div id="bcPanel">
150
+ <div id="bcHead">
151
+ <span id="bcTitle">BEAST CODE</span>
152
+ <span id="bcCwd" title=""></span>
153
+ <span class="file-spacer"></span>
154
+ <button id="codeShow" title="Editörü göster" data-i18n-title="tipCodeShow" hidden>&#x25A3;&#xFE0E;</button>
155
+ <button id="bcNew" title="Yeni oturum" data-i18n-title="bc_new">+</button>
156
+ <button id="bcClear" title="Çıktıyı temizle" data-i18n-title="bc_clear">Temizle</button>
157
+ </div>
158
+ <div id="bcOut"></div>
159
+ <div id="bcTodoWrap" hidden></div>
160
+ <div id="bcStatus" hidden></div>
161
+ <div id="bcChips" hidden></div>
162
+ <div id="bcInputRow">
163
+ <button id="bcAttach" title="Dosya / resim ekle" data-i18n-title="tipAttach">+</button>
164
+ <button id="bcMic" title="Sesli komut — konuş, bırakınca yazıya çevirsin" data-i18n-title="tipMic"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><path d="M12 19v3"/></svg></button>
165
+ <textarea id="bcInput" rows="1" spellcheck="false" autocomplete="off" placeholder="Beast Code mesajı yaz — Enter ile gönder…" data-i18n-ph="bc_ph"></textarea>
166
+ <button id="bcStop" title="Çalışan mesajı durdur" hidden data-i18n-title="bc_stop">&#x25A0;&#xFE0E;</button>
167
+ </div>
168
+ </div>
169
+ </div>
170
+
171
+ <div id="studioRow">
172
+ <section id="stPanel">
173
+ <div id="stHead">
174
+ <span id="stTitle">BEAST STUDIO</span>
175
+ <span id="stCwd" title=""></span>
176
+ <span class="file-spacer"></span>
177
+ <button id="stNew" title="Yeni oturum" data-i18n-title="bc_new">+</button>
178
+ <button id="stClear" title="Çıktıyı temizle" data-i18n-title="bc_clear">Temizle</button>
179
+ </div>
180
+ <div id="stOut"></div>
181
+ <div id="stTodoWrap" hidden></div>
182
+ <div id="stStatus" hidden></div>
183
+ <div id="stChips" hidden></div>
184
+ <div id="stInputRow">
185
+ <button id="stAttach" title="Dosya / resim ekle" data-i18n-title="tipAttach">+</button>
186
+ <button id="stMic" title="Sesli komut — konuş, bırakınca yazıya çevirsin" data-i18n-title="tipMic"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><path d="M12 19v3"/></svg></button>
187
+ <textarea id="stInput" rows="1" spellcheck="false" autocomplete="off" placeholder="Beast Studio mesajı yaz — Enter ile gönder…" data-i18n-ph="st_ph"></textarea>
188
+ <button id="stStop" title="Çalışan mesajı durdur" hidden data-i18n-title="bc_stop">&#x25A0;&#xFE0E;</button>
189
+ </div>
190
+ </section>
191
+
192
+ <div id="stSplit" title="Sürükleyerek boyutlandır"></div>
193
+
194
+ <section id="stVideo">
195
+ <div id="stVideoHead">
196
+ <span id="stVideoTitle">V&#304;DEO</span>
197
+ <span id="stVideoName" title="">—</span>
198
+ <span class="file-spacer"></span>
199
+ <button id="stVideoOpen" title="Video/ses dosyası seç">Aç</button>
200
+ <button id="stVideoExt" title="Varsayılan oynatıcıda aç">&#x2197;</button>
201
+ </div>
202
+ <div id="stVideoBody">
203
+ <div id="stVideoEmpty">Soldaki klasörden bir video/ses seç<br>veya &ldquo;Aç&rdquo; ile dosya seç — ajanın ürettiği çıktılar da burada oynatılır</div>
204
+ <video id="stVideoEl" controls hidden></video>
205
+ </div>
206
+ </section>
207
+ </div>
208
+ </main>
209
+
210
+ <aside id="rail">
211
+ <div id="railHead">
212
+ <span id="railTitle" data-i18n="labelParallel">Paralel Ajanlar</span>
213
+ <button id="railClear" title="Tüm paralel ajan geçmişini sil" aria-label="Tüm paralel ajan geçmişini sil">
214
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#111" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2"/><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><path d="M10 11v6"/><path d="M14 11v6"/></svg>
215
+ </button>
216
+ </div>
217
+ <div id="railList"></div>
218
+ <div id="sideFoot2">
219
+ <span class="foot-label2" data-i18n="labelParallel">Paralel Ajanlar</span>
220
+ </div>
221
+ </aside>
222
+ </div>
223
+
224
+ <div id="settingsOverlay" hidden>
225
+ <div id="settingsDialog">
226
+ <aside id="setTabs">
227
+ <div class="set-tabs-title" data-i18n="set_title">AYARLAR</div>
228
+ <nav class="set-tabs-list">
229
+ <button class="tab active" data-tab="lang" data-i18n="tab_lang">Dil</button>
230
+ <button class="tab" data-tab="provider" data-i18n="tab_provider">Provider</button>
231
+ <button class="tab" data-tab="fallout" data-i18n="tab_fallout">Fallout</button>
232
+ <button class="tab" data-tab="skills" data-i18n="tab_skills">Skills</button>
233
+ <button class="tab" data-tab="agents" data-i18n="tab_agents">Paralel Ajanlar</button>
234
+ <button class="tab" data-tab="tts" data-i18n="tab_tts">Sesli Yanıt</button>
235
+ <button class="tab" data-tab="email" data-i18n="tab_email">E-posta</button>
236
+ <button class="tab" data-tab="integrations" data-i18n="tab_integrations">Entegrasyonlar</button>
237
+ <button class="tab" data-tab="websearch" data-i18n="tab_websearch">Web Arama</button>
238
+ <button class="tab" data-tab="mcp" data-i18n="tab_mcp">MCP</button>
239
+ <button class="tab" data-tab="events" data-i18n="tab_events">Olay Merkezi</button>
240
+ <button class="tab" data-tab="cron" data-i18n="tab_cron">Cron</button>
241
+ <button class="tab" data-tab="usage" data-i18n="tab_usage">Maliyet · Limit</button>
242
+ <button class="tab" data-tab="logs" data-i18n="tab_logs">Log</button>
243
+ <button class="tab" data-tab="dash" data-i18n="tab_dash">Dashboard</button>
244
+ <button class="tab" data-tab="sec" data-i18n="tab_security">Güvenlik</button>
245
+ <button class="tab" data-tab="update" data-i18n="tab_update">Güncelleme</button>
246
+ </nav>
247
+ <div class="set-tabs-foot">
248
+ <button id="setClose" data-i18n="btn_close">Kapat</button>
249
+ <div id="setVersion" class="set-version">—</div>
250
+ </div>
251
+ </aside>
252
+ <section id="setContent">
253
+ <div id="tab-lang" class="pane"></div>
254
+ <div id="tab-provider" class="pane"></div>
255
+ <div id="tab-fallout" class="pane" hidden></div>
256
+ <div id="tab-skills" class="pane" hidden></div>
257
+ <div id="tab-agents" class="pane" hidden></div>
258
+ <div id="tab-tts" class="pane" hidden></div>
259
+ <div id="tab-email" class="pane" hidden></div>
260
+ <div id="tab-integrations" class="pane" hidden></div>
261
+ <div id="tab-websearch" class="pane" hidden></div>
262
+ <div id="tab-mcp" class="pane" hidden></div>
263
+ <div id="tab-events" class="pane" hidden></div>
264
+ <div id="tab-usage" class="pane" hidden></div>
265
+ <div id="tab-logs" class="pane" hidden></div>
266
+ <div id="tab-dash" class="pane" hidden></div>
267
+ <div id="tab-sec" class="pane" hidden></div>
268
+ <div id="tab-update" class="pane" hidden></div>
269
+ <div id="tab-cron" class="pane" hidden>
270
+ <h2 data-i18n="cron_h2">Cron Görevler</h2>
271
+ <div class="sub" data-i18n="cron_sub">Zamanlanmış görevler — saati gelince agent otomatik çalışır</div>
272
+ <div id="cronForm">
273
+ <input id="cronName" placeholder="Görev adı" maxlength="80" data-i18n-ph="cron_name_ph" />
274
+ <div id="cronSchedRow">
275
+ <select id="cronPreset">
276
+ <option value="*/5 * * * *" data-i18n="cron_pr_5">Her 5 dakika</option>
277
+ <option value="*/15 * * * *" data-i18n="cron_pr_15">Her 15 dakika</option>
278
+ <option value="*/30 * * * *" data-i18n="cron_pr_30">Her 30 dakika</option>
279
+ <option value="0 * * * *" data-i18n="cron_pr_hour">Her saat başı</option>
280
+ <option value="0 9 * * *" data-i18n="cron_pr_day9">Her gün 09:00</option>
281
+ <option value="0 21 * * 1-5" data-i18n="cron_pr_wd21">Hafta içi 21:00</option>
282
+ <option value="__custom" data-i18n="cron_pr_custom">Özel cron…</option>
283
+ </select>
284
+ <input id="cronSchedule" placeholder="*/15 * * * *" spellcheck="false" />
285
+ </div>
286
+ <textarea id="cronPrompt" rows="3" placeholder="Agent'a verilecek görev…" data-i18n-ph="cron_prompt_ph"></textarea>
287
+ <button id="cronAddBtn" data-i18n="cron_add">+ Görev Ekle</button>
288
+ </div>
289
+ <div id="cronList"></div>
290
+ </div>
291
+ </section>
292
+ </div>
293
+ </div>
294
+
295
+ <div id="botOverlay" hidden>
296
+ <div id="botDialog">
297
+ <div id="botHead">
298
+ <span id="botHeadIcon">🦁</span>
299
+ <span id="botHeadName">Beast</span>
300
+ <span id="botHeadTag" class="bot-tag"></span>
301
+ <span class="bot-head-spacer"></span>
302
+ <button id="botOverviewBack" class="btn ghost" hidden data-i18n="bot_overview">Tüm Botlar</button>
303
+ <button id="botClose" class="mini-close" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
304
+ </div>
305
+ <div id="botBody">
306
+ <div id="botChatsCol">
307
+ <div id="botChatsTitle" data-i18n="bot_chats">Sohbet Geçmişi</div>
308
+ <div id="botChatList"></div>
309
+ <div id="botChatMsgs"></div>
310
+ </div>
311
+ <div id="botManageCol">
312
+ <nav id="botTabs">
313
+ <button class="btab active" data-btab="settings" data-i18n="bot_tab_settings">Ayarlar</button>
314
+ <button class="btab" data-btab="memory" data-i18n="bot_tab_memory">Memory</button>
315
+ <button class="btab" data-btab="log" data-i18n="bot_tab_log">Log</button>
316
+ <button class="btab" data-btab="watcher" data-i18n="bot_tab_watcher">Watcher</button>
317
+ <button class="btab" data-btab="stats" data-i18n="bot_tab_stats">İstatistik</button>
318
+ <button class="btab" data-btab="notes" data-i18n="bot_tab_notes">Notlar</button>
319
+ <button class="btab" data-btab="dmlog" hidden>DM Log</button>
320
+ </nav>
321
+ <div id="botPane"></div>
322
+ </div>
323
+ </div>
324
+ </div>
325
+ </div>
326
+
327
+ <div id="bbResize" hidden title="Sürükleyerek boyutlandır"></div>
328
+
329
+ <div id="storeOverlay" hidden>
330
+ <div id="storeDialog">
331
+ <div id="storeHead">
332
+ <span id="storeTitle" data-i18n="store_title">SKILLS STORE</span>
333
+ <span id="storeBeastId" title="Beast kimliği (parmak izi)"></span>
334
+ <span class="store-spacer"></span>
335
+ <button id="storeClose" class="mini-close" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
336
+ </div>
337
+ <nav id="storeTabs">
338
+ <button class="stab active" data-stab="trending" data-i18n="store_tab_trending">Trending</button>
339
+ <button class="stab" data-stab="stars" data-i18n="store_tab_stars">Stars</button>
340
+ <button class="stab" data-stab="upload" data-i18n="store_tab_upload">Upload</button>
341
+ </nav>
342
+ <div id="storePane"></div>
343
+ </div>
344
+ </div>
345
+
346
+ <div id="ghOverlay" hidden>
347
+ <div id="ghDialog">
348
+ <div id="ghHead">
349
+ <span id="ghTitle">GITHUB TRENDING</span>
350
+ <span class="store-spacer"></span>
351
+ <button id="ghClose" class="mini-close" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
352
+ </div>
353
+ <div id="ghBody">
354
+ <section id="ghTrendPane" class="gh-pane">
355
+ <div class="gh-pane-tabs">
356
+ <button class="gh-tab on" data-ghtab="trend">Trend Repolar</button>
357
+ <button class="gh-tab" data-ghtab="all">Tüm Repolar</button>
358
+ </div>
359
+ <div class="gh-pane-subline" id="ghTrendSub">— son 2 haftanın yıldız yükselenleri</div>
360
+ <div id="ghTrendTools" class="gh-filters">
361
+ <div class="gh-ranges" id="ghRanges">
362
+ <button data-range="all" title="Tüm zamanlar">Tümü</button>
363
+ <button data-range="6m" title="Son 6 ay">6 Ay</button>
364
+ <button data-range="1m" title="Son 1 ay">1 Ay</button>
365
+ <button data-range="2w" class="on" title="Son 2 hafta">2 Hafta</button>
366
+ <button data-range="1w" title="Son 1 hafta">1 Hafta</button>
367
+ </div>
368
+ <button id="ghSortBtn" title="Yıldız sırası: azalan / artan">↓ Yıldız</button>
369
+ <input id="ghSearch" placeholder="Repo ara… (Enter)" spellcheck="false" />
370
+ <button id="ghTrendRefresh" class="gh-refresh" title="Sıfırla ve yenile — modal ilk açıldığı gibi">&#x27F3;</button>
371
+ </div>
372
+ <div id="ghAllTools" class="gh-filters" hidden>
373
+ <input id="ghAllSearch" placeholder="Tüm GitHub'da ara… (Enter)" spellcheck="false" />
374
+ <button id="ghAllSortBtn" title="Sıralama: en iyi eşleşme / yıldız">⭐ En İyi</button>
375
+ <button id="ghAllRefresh" class="gh-refresh" title="Sıfırla ve yenile">&#x27F3;</button>
376
+ </div>
377
+ <div id="ghTrendList" class="gh-pane-list"></div>
378
+ </section>
379
+ <section id="ghFavPane" class="gh-pane">
380
+ <div class="gh-pane-title">Favoriler <span class="gh-pane-sub">— yıldızladıkların burada saklanır</span></div>
381
+ <div id="ghFavList" class="gh-pane-list"></div>
382
+ </section>
383
+ </div>
384
+ </div>
385
+ </div>
386
+
387
+ <div id="watchOverlay" class="mini-overlay" hidden>
388
+ <div class="mini-dialog">
389
+ <div class="mini-head">
390
+ <span class="mini-title" data-i18n="mini_watch">İzleyiciler (Watchers)</span>
391
+ <button class="mini-close" id="watchClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
392
+ </div>
393
+ <div class="mini-body">
394
+ <div id="watchList" class="mini-list"></div>
395
+ </div>
396
+ </div>
397
+ </div>
398
+
399
+ <div id="cronOverlay" class="mini-overlay" hidden>
400
+ <div class="mini-dialog">
401
+ <div class="mini-head">
402
+ <span class="mini-title" data-i18n="mini_cron">Cron Görevler</span>
403
+ <button class="mini-close" id="cronClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
404
+ </div>
405
+ <div class="mini-body">
406
+ <div id="cronModalList" class="mini-list"></div>
407
+ </div>
408
+ </div>
409
+ </div>
410
+
411
+ <div id="browserBar" hidden>
412
+ <button id="bbBack" title="Geri" data-i18n-title="tip_bb_back">&#x2190;</button>
413
+ <button id="bbFwd" title="İleri" data-i18n-title="tip_bb_fwd">&#x2192;</button>
414
+ <button id="bbReload" title="Yenile" data-i18n-title="tip_bb_reload">&#x21BB;</button>
415
+ <input id="bbUrl" placeholder="adres yaz veya ara…" autocomplete="off" spellcheck="false" data-i18n-ph="bb_ph" />
416
+ <button id="bbPhone" title="Telefon modu — mobil versiyon / web versiyonu" data-i18n-title="tip_bb_phone"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="2" width="10" height="20" rx="2.5"/><line x1="11" y1="18" x2="13" y2="18"/></svg></button>
417
+ <button id="bbOpenExt" title="Tarayıcıda aç" data-i18n-title="tip_bb_open">&#x2197;</button>
418
+ <button id="bbClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
419
+ </div>
420
+
421
+ <div id="termPanel" hidden>
422
+ <div id="termHead">
423
+ <span id="termTitle">TERMINAL</span>
424
+ <span id="termCwd" title=""></span>
425
+ <span class="term-spacer"></span>
426
+ <button id="termClear" title="Çıktıyı temizle" data-i18n="term_clear" data-i18n-title="btn_close">Temizle</button>
427
+ <button id="termClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
428
+ </div>
429
+ <div id="termBody">
430
+ <div id="termOut"></div>
431
+ </div>
432
+ <div id="termInputRow">
433
+ <span id="termPrompt">CMD&gt;</span>
434
+ <input id="termInput" spellcheck="false" autocomplete="off" placeholder="komut yaz, Enter'la çalıştır…" data-i18n-ph="term_ph" />
435
+ <button id="termStop" title="Çalışan komutu durdur" hidden data-i18n-title="term_stop">&#x25A0;&#xFE0E;</button>
436
+ </div>
437
+ </div>
438
+ <div id="termResize" hidden title="Sürükleyerek boyutlandır"></div>
439
+
440
+ <div id="fileCtxMenu" hidden></div>
441
+
442
+ <input type="file" id="fileInput" multiple hidden
443
+ accept="image/*,.txt,.md,.json,.csv,.log,.js,.ts,.py,.ps1,.bat,.cmd,.html,.css,.yaml,.yml,.xml,.ini" />
444
+
445
+ <script src="i18n.js"></script>
446
+ <script src="renderer.js"></script>
447
+ </body>
448
+ </html>