cct-cli 0.7.9.0__py3-none-any.whl

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 (325) hide show
  1. calc_terminal/__init__.py +14 -0
  2. calc_terminal/__main__.py +14 -0
  3. calc_terminal/activity.py +1334 -0
  4. calc_terminal/agent.py +3387 -0
  5. calc_terminal/agent_runtime.py +519 -0
  6. calc_terminal/ai_context.py +447 -0
  7. calc_terminal/ai_modes.py +752 -0
  8. calc_terminal/ai_personalization.py +286 -0
  9. calc_terminal/ai_preview_feedback.py +213 -0
  10. calc_terminal/aicore.py +2572 -0
  11. calc_terminal/anim.py +367 -0
  12. calc_terminal/app.py +3685 -0
  13. calc_terminal/art.py +639 -0
  14. calc_terminal/atomsim.py +368 -0
  15. calc_terminal/attachments.py +743 -0
  16. calc_terminal/benchmark_system.py +414 -0
  17. calc_terminal/browser/__init__.py +36 -0
  18. calc_terminal/browser/browser_state.py +346 -0
  19. calc_terminal/browser/devserver.py +176 -0
  20. calc_terminal/browser/engine.py +494 -0
  21. calc_terminal/browser/navigation.py +84 -0
  22. calc_terminal/browser/preview.py +429 -0
  23. calc_terminal/browser/preview_entry.py +95 -0
  24. calc_terminal/browser/project_detector.py +144 -0
  25. calc_terminal/browser/server.py +449 -0
  26. calc_terminal/browser/state.py +75 -0
  27. calc_terminal/browser/watcher.py +99 -0
  28. calc_terminal/browser_gui/__init__.py +1 -0
  29. calc_terminal/browser_gui/__main__.py +3 -0
  30. calc_terminal/browser_gui/launcher.py +173 -0
  31. calc_terminal/browser_gui/playwright_browser.py +117 -0
  32. calc_terminal/browser_gui/qt_browser.py +1501 -0
  33. calc_terminal/browser_gui/webview_browser.py +57 -0
  34. calc_terminal/capabilities/__init__.py +35 -0
  35. calc_terminal/capabilities/adapters/__init__.py +33 -0
  36. calc_terminal/capabilities/adapters/bioinformatics.py +204 -0
  37. calc_terminal/capabilities/adapters/browser_adapter.py +205 -0
  38. calc_terminal/capabilities/adapters/filesystem.py +206 -0
  39. calc_terminal/capabilities/adapters/git_adapter.py +202 -0
  40. calc_terminal/capabilities/adapters/jupyter_adapter.py +138 -0
  41. calc_terminal/capabilities/adapters/ml_frameworks.py +158 -0
  42. calc_terminal/capabilities/adapters/platforms.py +200 -0
  43. calc_terminal/capabilities/adapters/python_exec.py +93 -0
  44. calc_terminal/capabilities/adapters/quantum_adapter.py +150 -0
  45. calc_terminal/capabilities/adapters/scientific_comp.py +123 -0
  46. calc_terminal/capabilities/adapters/structural_bio.py +161 -0
  47. calc_terminal/capabilities/adapters/terminal.py +99 -0
  48. calc_terminal/capabilities/bus.py +178 -0
  49. calc_terminal/capabilities/discovery.py +207 -0
  50. calc_terminal/capabilities/schema.py +221 -0
  51. calc_terminal/cat.ico +0 -0
  52. calc_terminal/cat_browser.py +2018 -0
  53. calc_terminal/chat_store.py +703 -0
  54. calc_terminal/cli.py +1178 -0
  55. calc_terminal/code_editor.py +640 -0
  56. calc_terminal/collaboration.py +723 -0
  57. calc_terminal/commands_data.py +139 -0
  58. calc_terminal/compatibility_engine.py +352 -0
  59. calc_terminal/compute/__init__.py +31 -0
  60. calc_terminal/compute/fabric.py +350 -0
  61. calc_terminal/config.py +227 -0
  62. calc_terminal/core/__init__.py +41 -0
  63. calc_terminal/core/checkpoint.py +156 -0
  64. calc_terminal/core/input/__init__.py +45 -0
  65. calc_terminal/core/mode_registry.py +300 -0
  66. calc_terminal/core/project_graph.py +172 -0
  67. calc_terminal/core/recovery.py +129 -0
  68. calc_terminal/core/security_layer.py +112 -0
  69. calc_terminal/core/task_graph.py +202 -0
  70. calc_terminal/core/unified_runtime.py +184 -0
  71. calc_terminal/core/verification.py +257 -0
  72. calc_terminal/customization.py +1566 -0
  73. calc_terminal/derivations.py +153 -0
  74. calc_terminal/device_control.py +263 -0
  75. calc_terminal/diagnostics/__init__.py +27 -0
  76. calc_terminal/diagnostics/doctor_engine.py +382 -0
  77. calc_terminal/diagnostics/self_test.py +247 -0
  78. calc_terminal/doctor.py +519 -0
  79. calc_terminal/easter_eggs.py +274 -0
  80. calc_terminal/editor/__init__.py +1 -0
  81. calc_terminal/editor/actions.py +263 -0
  82. calc_terminal/editor/commands.py +160 -0
  83. calc_terminal/editor/shortcuts.py +226 -0
  84. calc_terminal/engine.py +259 -0
  85. calc_terminal/errors.py +120 -0
  86. calc_terminal/event_stream.py +146 -0
  87. calc_terminal/eventbus.py +133 -0
  88. calc_terminal/extensions.py +733 -0
  89. calc_terminal/fallback_cli.py +1321 -0
  90. calc_terminal/first_run.py +265 -0
  91. calc_terminal/fomoji_auth.py +1043 -0
  92. calc_terminal/formulas.py +82 -0
  93. calc_terminal/fs_cache.py +121 -0
  94. calc_terminal/fs_watcher.py +277 -0
  95. calc_terminal/game.py +193 -0
  96. calc_terminal/gen1.py +5 -0
  97. calc_terminal/generators.py +245 -0
  98. calc_terminal/gestures/__init__.py +42 -0
  99. calc_terminal/gestures/bindings.py +175 -0
  100. calc_terminal/gestures/manager.py +477 -0
  101. calc_terminal/goodbye.py +363 -0
  102. calc_terminal/gpu3d.py +290 -0
  103. calc_terminal/graphs.py +358 -0
  104. calc_terminal/hardware_analyzer.py +440 -0
  105. calc_terminal/host/__init__.py +30 -0
  106. calc_terminal/host/browser_manager.py +187 -0
  107. calc_terminal/host/desktop.py +1386 -0
  108. calc_terminal/host/launcher.py +395 -0
  109. calc_terminal/host/terminal.py +279 -0
  110. calc_terminal/identity.py +216 -0
  111. calc_terminal/input/__init__.py +54 -0
  112. calc_terminal/input/capabilities.py +258 -0
  113. calc_terminal/input/focus.py +87 -0
  114. calc_terminal/input/gestures.py +64 -0
  115. calc_terminal/input/pointer.py +114 -0
  116. calc_terminal/input/touch.py +345 -0
  117. calc_terminal/keys.py +84 -0
  118. calc_terminal/live_automation.py +165 -0
  119. calc_terminal/mathtext.py +433 -0
  120. calc_terminal/mcp.py +386 -0
  121. calc_terminal/memory.py +337 -0
  122. calc_terminal/memory_v2.py +479 -0
  123. calc_terminal/metrics.py +333 -0
  124. calc_terminal/mode_detection.py +146 -0
  125. calc_terminal/model.py +2431 -0
  126. calc_terminal/model_router.py +665 -0
  127. calc_terminal/models/__init__.py +0 -0
  128. calc_terminal/models/active_state.py +187 -0
  129. calc_terminal/models/dynamic_registry.py +584 -0
  130. calc_terminal/models/manager.py +781 -0
  131. calc_terminal/models/model_metadata.json +3526 -0
  132. calc_terminal/models/profiles.py +194 -0
  133. calc_terminal/models/registry.py +265 -0
  134. calc_terminal/models/schema.py +197 -0
  135. calc_terminal/models/validator.py +287 -0
  136. calc_terminal/models/verification_engine.py +368 -0
  137. calc_terminal/native_picker.py +215 -0
  138. calc_terminal/ollama_catalog.py +279 -0
  139. calc_terminal/ollama_download.py +233 -0
  140. calc_terminal/orchestrator.py +304 -0
  141. calc_terminal/package_research.py +322 -0
  142. calc_terminal/packages.py +1024 -0
  143. calc_terminal/pc_specs.py +116 -0
  144. calc_terminal/permissions.py +334 -0
  145. calc_terminal/pet.py +106 -0
  146. calc_terminal/pipeline.py +505 -0
  147. calc_terminal/platform/__init__.py +491 -0
  148. calc_terminal/platform/desktop.py +491 -0
  149. calc_terminal/platform/web.py +781 -0
  150. calc_terminal/preview/__init__.py +1 -0
  151. calc_terminal/preview/dev_server.py +303 -0
  152. calc_terminal/preview/diagnostics.py +131 -0
  153. calc_terminal/preview/live_reload.py +66 -0
  154. calc_terminal/preview/manager.py +129 -0
  155. calc_terminal/project_stats.py +209 -0
  156. calc_terminal/projects.py +328 -0
  157. calc_terminal/providers/__init__.py +0 -0
  158. calc_terminal/providers/adapters/__init__.py +80 -0
  159. calc_terminal/providers/adapters/anthropic_adapter.py +127 -0
  160. calc_terminal/providers/adapters/base.py +106 -0
  161. calc_terminal/providers/adapters/chinese_adapters.py +420 -0
  162. calc_terminal/providers/adapters/gemini_adapter.py +101 -0
  163. calc_terminal/providers/adapters/ollama_adapter.py +83 -0
  164. calc_terminal/providers/adapters/openai_adapter.py +159 -0
  165. calc_terminal/providers/adapters/other_adapters.py +246 -0
  166. calc_terminal/providers/anthropic_provider.py +172 -0
  167. calc_terminal/providers/auto_update.py +416 -0
  168. calc_terminal/providers/base_provider.py +105 -0
  169. calc_terminal/providers/discovery_manager.py +207 -0
  170. calc_terminal/providers/gemini_provider.py +178 -0
  171. calc_terminal/providers/lifecycle.py +767 -0
  172. calc_terminal/providers/ollama_adapter.py +707 -0
  173. calc_terminal/providers/openai_provider.py +254 -0
  174. calc_terminal/providers/provider_manager.py +1827 -0
  175. calc_terminal/providers/providers.json +4075 -0
  176. calc_terminal/reactionsim.py +279 -0
  177. calc_terminal/registry.py +337 -0
  178. calc_terminal/report.py +162 -0
  179. calc_terminal/research/__init__.py +45 -0
  180. calc_terminal/research/artifact_intel.py +126 -0
  181. calc_terminal/research/data_lineage.py +123 -0
  182. calc_terminal/research/experiment_ledger.py +303 -0
  183. calc_terminal/research/reproducibility.py +131 -0
  184. calc_terminal/resilience/__init__.py +47 -0
  185. calc_terminal/resilience/agent_state.py +121 -0
  186. calc_terminal/resilience/capability_matcher.py +174 -0
  187. calc_terminal/resilience/circuit_breaker.py +158 -0
  188. calc_terminal/resilience/failover_engine.py +230 -0
  189. calc_terminal/resilience/health_monitor.py +192 -0
  190. calc_terminal/resilience/ollama_adapter.py +125 -0
  191. calc_terminal/resilience/orchestrator.py +312 -0
  192. calc_terminal/resilience/types.py +134 -0
  193. calc_terminal/sandbox.py +98 -0
  194. calc_terminal/scires.py +558 -0
  195. calc_terminal/security_scanner.py +126 -0
  196. calc_terminal/session.py +294 -0
  197. calc_terminal/sim3d.py +206 -0
  198. calc_terminal/solver.py +276 -0
  199. calc_terminal/sound.py +127 -0
  200. calc_terminal/task_reports.py +287 -0
  201. calc_terminal/terminal_host.py +201 -0
  202. calc_terminal/terminal_identity.py +411 -0
  203. calc_terminal/test_ai_mode_reliability.py +344 -0
  204. calc_terminal/test_browser.py +368 -0
  205. calc_terminal/test_code_editor_upgrade.py +485 -0
  206. calc_terminal/test_customization.py +1148 -0
  207. calc_terminal/test_customization_ui.py +612 -0
  208. calc_terminal/test_dynamic_registry.py +304 -0
  209. calc_terminal/test_extensions.py +436 -0
  210. calc_terminal/test_overhaul.py +557 -0
  211. calc_terminal/test_project_detect.py +255 -0
  212. calc_terminal/test_root_cause_fix.py +527 -0
  213. calc_terminal/test_stability.py +532 -0
  214. calc_terminal/test_terminal_identity.py +132 -0
  215. calc_terminal/test_v079_speed.py +460 -0
  216. calc_terminal/theme.py +1107 -0
  217. calc_terminal/timeline.py +139 -0
  218. calc_terminal/todos.py +246 -0
  219. calc_terminal/tool_call_normalizer.py +419 -0
  220. calc_terminal/tui.py +104 -0
  221. calc_terminal/ui/__init__.py +8 -0
  222. calc_terminal/ui/activity_panel.py +231 -0
  223. calc_terminal/ui/activity_stream_panel.py +238 -0
  224. calc_terminal/ui/animations.py +122 -0
  225. calc_terminal/ui/app.py +7271 -0
  226. calc_terminal/ui/attach_panel.py +597 -0
  227. calc_terminal/ui/attachments.py +424 -0
  228. calc_terminal/ui/backup_panel.py +810 -0
  229. calc_terminal/ui/browser_shell.py +887 -0
  230. calc_terminal/ui/cat_agent.py +357 -0
  231. calc_terminal/ui/chats_panel.py +899 -0
  232. calc_terminal/ui/command_palette.py +125 -0
  233. calc_terminal/ui/command_palette_modal.py +166 -0
  234. calc_terminal/ui/composer.py +1141 -0
  235. calc_terminal/ui/context_menu.py +197 -0
  236. calc_terminal/ui/conversation.py +1435 -0
  237. calc_terminal/ui/customization_panel.py +1229 -0
  238. calc_terminal/ui/dashboard.py +404 -0
  239. calc_terminal/ui/design_system.py +557 -0
  240. calc_terminal/ui/diff_panel.py +213 -0
  241. calc_terminal/ui/editor.py +2102 -0
  242. calc_terminal/ui/empty_state.py +302 -0
  243. calc_terminal/ui/events.py +487 -0
  244. calc_terminal/ui/extensions_panel.py +815 -0
  245. calc_terminal/ui/footer.py +166 -0
  246. calc_terminal/ui/gestures_panel.py +383 -0
  247. calc_terminal/ui/goodbye_screen.py +100 -0
  248. calc_terminal/ui/header.py +1034 -0
  249. calc_terminal/ui/help_panel.py +254 -0
  250. calc_terminal/ui/live_activities.py +914 -0
  251. calc_terminal/ui/mcp_panel.py +570 -0
  252. calc_terminal/ui/memory_center.py +524 -0
  253. calc_terminal/ui/mode_colors_panel.py +525 -0
  254. calc_terminal/ui/nav_screens.py +747 -0
  255. calc_terminal/ui/ollama_panel.py +536 -0
  256. calc_terminal/ui/palette.py +221 -0
  257. calc_terminal/ui/permission_panel.py +269 -0
  258. calc_terminal/ui/personalization_panel.py +517 -0
  259. calc_terminal/ui/personalize_center.py +1568 -0
  260. calc_terminal/ui/preview_panel.py +441 -0
  261. calc_terminal/ui/resizers.py +402 -0
  262. calc_terminal/ui/sidebar.py +1285 -0
  263. calc_terminal/ui/statusbar.py +168 -0
  264. calc_terminal/ui/theme_css.py +1396 -0
  265. calc_terminal/ui/thinking.py +226 -0
  266. calc_terminal/ui/timeline_panel.py +102 -0
  267. calc_terminal/ui/todo_panel.py +193 -0
  268. calc_terminal/ui/viewport.py +136 -0
  269. calc_terminal/ui/vision_panel.py +489 -0
  270. calc_terminal/ui/welcome_modal.py +343 -0
  271. calc_terminal/ui/widgets.py +160 -0
  272. calc_terminal/ui/workspace.py +831 -0
  273. calc_terminal/viewers/__init__.py +1 -0
  274. calc_terminal/viewers/document_viewer.py +252 -0
  275. calc_terminal/viewers/image_viewer.py +241 -0
  276. calc_terminal/viewers/pdf_viewer.py +203 -0
  277. calc_terminal/viewers/presentation_viewer.py +164 -0
  278. calc_terminal/viewers/registry.py +120 -0
  279. calc_terminal/viewers/spreadsheet_viewer.py +204 -0
  280. calc_terminal/vision/__init__.py +89 -0
  281. calc_terminal/vision/analysis.py +194 -0
  282. calc_terminal/vision/annotations.py +297 -0
  283. calc_terminal/vision/capture.py +171 -0
  284. calc_terminal/vision/context.py +231 -0
  285. calc_terminal/vision/correlation.py +169 -0
  286. calc_terminal/vision/cursor.py +258 -0
  287. calc_terminal/vision/events.py +66 -0
  288. calc_terminal/vision/frame_pipeline.py +259 -0
  289. calc_terminal/vision/priority.py +218 -0
  290. calc_terminal/vision/provider.py +180 -0
  291. calc_terminal/vision/safety.py +149 -0
  292. calc_terminal/vision/session.py +281 -0
  293. calc_terminal/vision/verify.py +162 -0
  294. calc_terminal/vision.py +514 -0
  295. calc_terminal/vscode_integration.py +113 -0
  296. calc_terminal/web/__init__.py +8 -0
  297. calc_terminal/web/cat_runtime.py +710 -0
  298. calc_terminal/web/server.py +2891 -0
  299. calc_terminal/web/static/css/app.css +3152 -0
  300. calc_terminal/web/static/icons/badge-72.png +0 -0
  301. calc_terminal/web/static/icons/cat.ico +0 -0
  302. calc_terminal/web/static/icons/icon-128.png +0 -0
  303. calc_terminal/web/static/icons/icon-144.png +0 -0
  304. calc_terminal/web/static/icons/icon-152.png +0 -0
  305. calc_terminal/web/static/icons/icon-192.png +0 -0
  306. calc_terminal/web/static/icons/icon-384.png +0 -0
  307. calc_terminal/web/static/icons/icon-512.png +0 -0
  308. calc_terminal/web/static/icons/icon-72.png +0 -0
  309. calc_terminal/web/static/icons/icon-96.png +0 -0
  310. calc_terminal/web/static/icons/icon.svg +34 -0
  311. calc_terminal/web/static/icons/new-project.png +0 -0
  312. calc_terminal/web/static/icons/open-project.png +0 -0
  313. calc_terminal/web/static/index.html +734 -0
  314. calc_terminal/web/static/js/app.js +2403 -0
  315. calc_terminal/web/static/manifest.json +88 -0
  316. calc_terminal/web/static/sw.js +230 -0
  317. calc_terminal/workflow_engine.py +769 -0
  318. calc_terminal/workspace.py +593 -0
  319. calc_terminal/workspace_index.py +385 -0
  320. cct_cli-0.7.9.0.dist-info/METADATA +210 -0
  321. cct_cli-0.7.9.0.dist-info/RECORD +325 -0
  322. cct_cli-0.7.9.0.dist-info/WHEEL +5 -0
  323. cct_cli-0.7.9.0.dist-info/entry_points.txt +4 -0
  324. cct_cli-0.7.9.0.dist-info/licenses/LICENSE +21 -0
  325. cct_cli-0.7.9.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,734 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
6
+ <meta name="theme-color" content="#161822">
7
+ <title>CAT v0.7.9.0 — Coding Agent Terminal</title>
8
+ <link rel="stylesheet" href="/static/css/app.css">
9
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🐱</text></svg>">
10
+ </head>
11
+ <body>
12
+ <div id="app">
13
+ <!-- Top Header Bar: ≡ ○ CAT | [ 🔒 Ask Every Time ] | ▣ compressed -->
14
+ <header id="cct-header">
15
+ <div class="cct-header-left" onclick="FATTY.toggleNavMenu()" title="Main Menu">
16
+ <span class="cct-brand-menu">≡</span>
17
+ <span class="cct-brand-circle">○</span>
18
+ <span class="cct-brand-title">CAT</span>
19
+ </div>
20
+
21
+ <div class="cct-header-center">
22
+ <button class="cct-perm-pill-btn" id="cct-perm-pill-btn" onclick="FATTY.togglePermissionModal()" title="Click to Change Permission Mode">
23
+ <span id="cct-perm-icon">🔒</span>
24
+ <span id="cct-perm-text">Ask Every Time</span>
25
+ </button>
26
+ </div>
27
+
28
+ <div class="cct-header-right" onclick="FATTY.openFolderDialog()" title="Current Workspace Directory">
29
+ <span class="cct-ws-icon">▣</span>
30
+ <span class="cct-ws-name" id="cct-header-ws-name">compressed</span>
31
+ </div>
32
+ </header>
33
+
34
+ <!-- Main Menu Popup Dropdown (Attached to ≡ ○ CAT) -->
35
+ <div id="cct-main-menu-popup" class="cct-menu-dropdown" style="display: none;" onclick="event.stopPropagation()">
36
+ <div class="cct-menu-scroll" id="cct-main-menu-items">
37
+ <!-- Injected dynamically from /api/menu -->
38
+ </div>
39
+ </div>
40
+
41
+ <!-- Main Workspace Area -->
42
+ <div id="cct-workspace">
43
+ <!-- Left Sidebar: File Explorer -->
44
+ <aside id="cct-sidebar">
45
+ <div class="cct-sidebar-scroll">
46
+ <div class="cct-sidebar-top">
47
+ <span class="cct-sidebar-chevron" onclick="FATTY.toggleSidebar()">▾</span>
48
+ <button class="cct-open-folder-btn" onclick="FATTY.openFolderDialog()">Open Folder</button>
49
+ </div>
50
+
51
+ <!-- Active Workspace Info -->
52
+ <div class="cct-ws-summary">
53
+ <div class="cct-ws-title">
54
+ <span>📁</span>
55
+ <span id="cct-ws-folder-name">compressed</span>
56
+ </div>
57
+ <div class="cct-ws-languages" id="cct-ws-folder-sub">HTML, JavaScript, CSS · 3</div>
58
+ </div>
59
+
60
+ <!-- ASCII Directory Tree -->
61
+ <div class="cct-filetree" id="cct-tree-container">
62
+ <!-- Dynamic tree injected by JS -->
63
+ </div>
64
+
65
+ <!-- Recent Projects -->
66
+ <div class="cct-recent-section" id="cct-recent-container">
67
+ <!-- Recent rows injected by JS -->
68
+ </div>
69
+
70
+ <!-- Drop Notice -->
71
+ <div class="cct-dropzone-notice">
72
+ Drag & drop files here, or into Chat/Editor, to attach them for the AI.
73
+ </div>
74
+ </div>
75
+ </aside>
76
+
77
+ <!-- Sidebar Resizer -->
78
+ <div class="cct-resizer" id="cct-sidebar-resizer"></div>
79
+
80
+ <!-- Center Main Work / Conversation Column -->
81
+ <main id="cct-main">
82
+ <div id="cct-conversation">
83
+ <!-- Top Right Folder Tag -->
84
+ <div class="cct-opened-folder-tag" id="cct-opened-folder-tag">Opened folder: C:\Users\ADMIN</div>
85
+
86
+ <!-- State A: Welcome Dashboard (Screenshot 1) -->
87
+ <div id="cct-welcome-view">
88
+ <!-- CAT ASCII Art -->
89
+ <pre class="cct-ascii-hero"> ██████╗ █████╗ ████████╗
90
+ ██╔════╝ ██╔══██╗╚══██╔══╝
91
+ ██║ ███████║ ██║
92
+ ██║ ██╔══██║ ██║
93
+ ╚██████╗ ██║ ██║ ██║
94
+ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ </pre>
95
+
96
+ <div class="cct-hero-info">
97
+ <div class="cct-version-row">CAT v0.7.9.0</div>
98
+ <div class="cct-tagline-row">Chemistry • Coding • Intelligence</div>
99
+ <div class="cct-ready-row">
100
+ <span class="cct-ready-dot">●</span>
101
+ <span>CAT Build</span>
102
+ <span class="cct-ready-faint">ready · type to start, / for commands</span>
103
+ </div>
104
+ <div class="cct-suggest-row">Create · Analyze · Build · Debug · Research</div>
105
+ <div class="cct-ai-status-row">
106
+ <span class="cct-ready-dot">●</span>
107
+ <span>AI STATUS — </span>
108
+ <span class="cct-ai-status-model" id="cct-welcome-model">ollama deepseek-r1</span>
109
+ <span class="cct-ready-faint">· Ready</span>
110
+ </div>
111
+ </div>
112
+
113
+ <!-- 4 Action Buttons -->
114
+ <div class="cct-welcome-actions">
115
+ <button class="cct-action-btn" onclick="FATTY.openFolderDialog()">📁 Open Folder</button>
116
+ <button class="cct-action-btn" onclick="FATTY.newChat()">📝 New Chat</button>
117
+ <button class="cct-action-btn" onclick="FATTY.openSettings()">⚙ Settings</button>
118
+ <button class="cct-action-btn" onclick="FATTY.openDocs()">📖 Documentation</button>
119
+ </div>
120
+
121
+ <!-- 2 Columns -->
122
+ <div class="cct-welcome-columns">
123
+ <div class="cct-column">
124
+ <div class="cct-column-title">Recent Projects</div>
125
+ <div class="cct-column-item" onclick="FATTY.openRecentPath('ADMIN')">📁 ADMIN</div>
126
+ <div class="cct-column-item" onclick="FATTY.openRecentPath('compressed')">📁 compressed</div>
127
+ <div class="cct-column-item" onclick="FATTY.openRecentPath('CAT_v0.7.9')">📁 CAT_v0.7.9</div>
128
+ <div class="cct-column-item" onclick="FATTY.openRecentPath('Downloads')">📁 Downloads</div>
129
+ <div class="cct-column-item" onclick="FATTY.openRecentPath('Scripts')">📁 Scripts</div>
130
+ </div>
131
+
132
+ <div class="cct-column">
133
+ <div class="cct-column-title">Session Notebooks</div>
134
+ <div class="cct-column-item" id="cct-session-count">0 solved this session</div>
135
+ <div class="cct-column-faint">No generated files yet.</div>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- Divider -->
140
+ <div class="cct-welcome-divider">- · - · -</div>
141
+ </div>
142
+
143
+ <!-- State B: Active Chat Messages (Screenshot 2) -->
144
+ <div id="cct-chat-turns" style="display: none;">
145
+ <!-- Turns will be appended dynamically by JS -->
146
+ </div>
147
+ </div>
148
+
149
+ <!-- Sticky Composer Docked at Bottom of Main Column -->
150
+ <div id="cct-composer">
151
+ <div class="cct-composer-input-row">
152
+ <span class="cct-prompt-symbol">&gt;</span>
153
+ <textarea class="cct-composer-textarea" id="cct-message-input" placeholder="Type a message..." rows="1"></textarea>
154
+ </div>
155
+ <div class="cct-composer-footer">
156
+ <div class="cct-footer-left">
157
+ <span class="cct-mode-blocks">
158
+ <span class="cct-mode-block b1"></span>
159
+ <span class="cct-mode-block b2"></span>
160
+ <span class="cct-mode-block b3"></span>
161
+ <span class="cct-mode-block b4"></span>
162
+ </span>
163
+ <span class="cct-mode-badge" id="cct-mode-badge" onclick="FATTY.openModeSelector()" title="Click to change AI mode (Ctrl+M)">🔨 Build</span>
164
+ <span class="cct-badge-sep">·</span>
165
+ <span class="cct-model-badge" id="cct-model-badge" onclick="FATTY.openModelPicker()" title="Click to select provider & model">OLLAMA deepseek-r1</span>
166
+ <span class="cct-badge-sep">·</span>
167
+ <span class="cct-workspace-badge" id="cct-ws-badge" onclick="FATTY.openFolderDialog()" title="Current workspace">Workspace</span>
168
+ </div>
169
+ <div class="cct-footer-right">
170
+ <span class="cct-context-indicator" id="cct-context-indicator">Context 0K</span>
171
+ <button class="cct-footer-btn" onclick="FATTY.openSettings()" title="Settings">⚙</button>
172
+ <button class="cct-footer-btn" onclick="FATTY.triggerAttach()" title="Attach file">📎</button>
173
+ <button class="cct-footer-btn cct-send-btn" onclick="FATTY.sendMessage()" title="Send message (Enter)">➤</button>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ </main>
178
+
179
+ <!-- Editor Resizer -->
180
+ <div class="cct-resizer" id="cct-editor-resizer" style="display: none;"></div>
181
+
182
+ <!-- Right Column: Code Editor Pane -->
183
+ <aside id="cct-editor-pane">
184
+ <div class="cct-editor-toolbar">
185
+ <div class="cct-editor-file-info">
186
+ <span class="cct-editor-menu-glyph">≡</span>
187
+ <span class="cct-editor-dot">○</span>
188
+ <span class="cct-editor-filename" id="cct-editor-filename">index.html</span>
189
+ </div>
190
+ <div class="cct-editor-controls">
191
+ <button class="cct-editor-btn cct-btn-run" onclick="FATTY.runPreview()" title="Run Web Preview (▷)">▷</button>
192
+ <button class="cct-editor-btn cct-btn-split" onclick="FATTY.toggleSplitView()" title="Split Preview View (⿻)">⿻</button>
193
+ <button class="cct-editor-btn cct-btn-close" onclick="FATTY.closeEditor()" title="Close Editor (✕)">✕</button>
194
+ </div>
195
+ </div>
196
+
197
+ <div class="cct-editor-body">
198
+ <div class="cct-line-numbers" id="cct-line-numbers">
199
+ <!-- Line numbers injected by JS -->
200
+ </div>
201
+ <div class="cct-code-container" id="cct-code-container">
202
+ <textarea class="cct-code-textarea" id="cct-code-editor" spellcheck="false"></textarea>
203
+ </div>
204
+ <iframe id="cct-web-preview" title="Web Preview Frame"></iframe>
205
+ </div>
206
+ </aside>
207
+ </div>
208
+ </div>
209
+
210
+ <!-- Hidden File Input for Attachments -->
211
+ <input type="file" id="cct-file-input" style="display: none;" onchange="FATTY.handleFileAttach(event)">
212
+
213
+ <!-- MODAL: Permission Mode Menu -->
214
+ <div class="cct-modal-backdrop" id="cct-perm-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
215
+ <div class="cct-modal-box" onclick="event.stopPropagation()">
216
+ <div class="cct-modal-titlebar">
217
+ <span>Permission Mode</span>
218
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
219
+ </div>
220
+ <div class="cct-modal-content">
221
+ <div class="cct-option-item" id="opt-perm-ask" onclick="FATTY.setPermissionMode('ask')">
222
+ <div class="cct-option-title">🔒 Ask Every Time</div>
223
+ <div class="cct-option-desc">Ask me before executing protected actions (file write, delete, terminal commands).</div>
224
+ </div>
225
+ <div class="cct-option-item" id="opt-perm-restricted" onclick="FATTY.setPermissionMode('restricted')">
226
+ <div class="cct-option-title">🛡 Restricted</div>
227
+ <div class="cct-option-desc">Analyze and help, but block all protected actions automatically.</div>
228
+ </div>
229
+ <div class="cct-option-item" id="opt-perm-full" onclick="FATTY.setPermissionMode('full')">
230
+ <div class="cct-option-title">⚡ Full Access</div>
231
+ <div class="cct-option-desc">Work automatically within allowed workspace without interactive prompts.</div>
232
+ </div>
233
+ </div>
234
+ </div>
235
+ </div>
236
+
237
+ <!-- MODAL: Startup Welcome Screen (Screenshot 2 / welcome_modal.py) -->
238
+ <div class="cct-modal-backdrop" id="cct-welcome-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
239
+ <div class="cct-modal-box cct-welcome-box" onclick="event.stopPropagation()">
240
+ <div class="cct-modal-titlebar">
241
+ <span class="cct-welcome-title">Welcome to CAT v0.7.9.0</span>
242
+ <button class="cct-modal-close-btn" onclick="FATTY.dismissWelcomeModal()">✕</button>
243
+ </div>
244
+ <div class="cct-modal-content cct-welcome-content">
245
+ <pre class="cct-ascii-welcome"> ██████╗ █████╗ ████████╗
246
+ ██╔════╝ ██╔══██╗╚══██╔══╝
247
+ ██║ ███████║ ██║
248
+ ██║ ██╔══██║ ██║
249
+ ╚██████╗ ██║ ██║ ██║
250
+ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ </pre>
251
+ <div class="cct-welcome-tagline">Coding · Agents · Intelligence — the terminal for builders.</div>
252
+
253
+ <!-- Staged Boot Progress Bar -->
254
+ <div class="cct-boot-progress-wrap">
255
+ <div class="cct-boot-progress-bar" id="cct-boot-progress-bar" style="width: 100%;"></div>
256
+ </div>
257
+ <div class="cct-boot-status" id="cct-boot-status">● System ready. All subsystems initialized.</div>
258
+
259
+ <!-- Highlights Grid -->
260
+ <div class="cct-highlights-grid" id="cct-highlights-grid">
261
+ <!-- Injected dynamically from /api/startup/status -->
262
+ </div>
263
+ </div>
264
+ <div class="cct-modal-footer cct-welcome-footer">
265
+ <label class="cct-welcome-checkbox-label">
266
+ <input type="checkbox" id="cct-welcome-dont-show"> Don't show again on startup
267
+ </label>
268
+ <button class="cct-modal-btn primary" onclick="FATTY.dismissWelcomeModal()">Get Started ➜</button>
269
+ </div>
270
+ </div>
271
+ </div>
272
+
273
+ <!-- MODAL: Open Folder Dialog (Method A: Browse & Method B: Enter Path) -->
274
+ <div class="cct-modal-backdrop" id="cct-folder-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
275
+ <div class="cct-modal-box" style="width: 620px;" onclick="event.stopPropagation()">
276
+ <div class="cct-modal-titlebar">
277
+ <span>📁 Open Folder</span>
278
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
279
+ </div>
280
+ <!-- Tab Navigation -->
281
+ <div class="cct-tabs-header">
282
+ <button class="cct-tab-btn active" id="tab-folder-browse" onclick="FATTY.switchFolderTab('browse')">📂 Browse Directory</button>
283
+ <button class="cct-tab-btn" id="tab-folder-path" onclick="FATTY.switchFolderTab('path')">⌨ Enter Path Directly</button>
284
+ </div>
285
+ <div class="cct-modal-content">
286
+ <!-- Tab 1: Method A Directory Tree Browser -->
287
+ <div id="cct-folder-tab-browse">
288
+ <div class="cct-fs-nav-bar">
289
+ <button class="cct-fs-up-btn" onclick="FATTY.browseFolderUp()" title="Go up one folder">⬆ Up</button>
290
+ <div class="cct-fs-current-path" id="cct-fs-current-path" title="Current browsing directory">...</div>
291
+ </div>
292
+ <div class="cct-fs-drives-row" id="cct-fs-drives-row">
293
+ <!-- Drive buttons: C:\, D:\, etc. -->
294
+ </div>
295
+ <div class="cct-fs-folder-list" id="cct-fs-folder-list">
296
+ <!-- Folder items loaded from /api/fs/browse -->
297
+ </div>
298
+ </div>
299
+
300
+ <!-- Tab 2: Method B Direct Path with Live Validation -->
301
+ <div id="cct-folder-tab-path" style="display: none;">
302
+ <div class="cct-form-group">
303
+ <label class="cct-form-label">Full Directory Path:</label>
304
+ <input type="text" class="cct-form-input" id="cct-folder-input" placeholder="e.g. C:\Users\ADMIN\my-project" oninput="FATTY.onFolderInputChanged(this.value)">
305
+ </div>
306
+ <div class="cct-validation-msg" id="cct-folder-validation-msg">Enter path to validate...</div>
307
+ </div>
308
+ </div>
309
+ <div class="cct-modal-footer">
310
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Cancel</button>
311
+ <button class="cct-modal-btn primary" id="cct-folder-confirm-btn" onclick="FATTY.confirmOpenFolder()">Open Folder</button>
312
+ </div>
313
+ </div>
314
+ </div>
315
+
316
+ <!-- MODAL: Recent Workspaces -->
317
+ <div class="cct-modal-backdrop" id="cct-recent-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
318
+ <div class="cct-modal-box" style="width: 640px;" onclick="event.stopPropagation()">
319
+ <div class="cct-modal-titlebar">
320
+ <span>🕓 Recent Workspaces</span>
321
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
322
+ </div>
323
+ <div class="cct-modal-content">
324
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;">
325
+ <span class="cct-column-title">Workspaces History (~/.cct_projects.json)</span>
326
+ <button class="cct-action-link-btn" onclick="FATTY.clearRecentWorkspaces()">Clear Missing</button>
327
+ </div>
328
+ <div class="cct-recent-modal-list" id="cct-recent-modal-list">
329
+ <!-- Injected dynamically from /api/workspace/recent -->
330
+ </div>
331
+ </div>
332
+ <div class="cct-modal-footer">
333
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Close</button>
334
+ </div>
335
+ </div>
336
+ </div>
337
+
338
+ <!-- MODAL: Saved Chats (chat_store.py) -->
339
+ <div class="cct-modal-backdrop" id="cct-chats-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
340
+ <div class="cct-modal-box" style="width: 620px;" onclick="event.stopPropagation()">
341
+ <div class="cct-modal-titlebar">
342
+ <span>💬 Saved Chat Sessions</span>
343
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
344
+ </div>
345
+ <div class="cct-modal-content">
346
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;">
347
+ <span class="cct-column-title">Sessions (~/.cat/chats/)</span>
348
+ <button class="cct-modal-btn primary" style="padding: 3px 10px; font-size: 11px;" onclick="FATTY.createNewChatSession()">+ New Chat</button>
349
+ </div>
350
+ <div class="cct-chats-modal-list" id="cct-chats-modal-list">
351
+ <!-- Injected dynamically from /api/chats -->
352
+ </div>
353
+ </div>
354
+ <div class="cct-modal-footer">
355
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Close</button>
356
+ </div>
357
+ </div>
358
+ </div>
359
+
360
+ <!-- MODAL: Model Context Protocol Servers (mcp.py) -->
361
+ <div class="cct-modal-backdrop" id="cct-mcp-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
362
+ <div class="cct-modal-box" style="width: 660px;" onclick="event.stopPropagation()">
363
+ <div class="cct-modal-titlebar">
364
+ <span>🔌 Model Context Protocol (MCP) Servers</span>
365
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
366
+ </div>
367
+ <div class="cct-modal-content">
368
+ <div class="cct-column-title">Configured MCP Servers:</div>
369
+ <div class="cct-mcp-servers-list" id="cct-mcp-servers-list">
370
+ <!-- Injected dynamically from /api/mcp/servers -->
371
+ </div>
372
+
373
+ <div class="cct-column-title" style="margin-top: 14px;">Add / Edit MCP Server:</div>
374
+ <div class="cct-form-group">
375
+ <label class="cct-form-label">Server Name / ID:</label>
376
+ <input type="text" class="cct-form-input" id="cct-mcp-name" placeholder="e.g. filesystem or fetch">
377
+ </div>
378
+ <div class="cct-form-group">
379
+ <label class="cct-form-label">Command:</label>
380
+ <input type="text" class="cct-form-input" id="cct-mcp-cmd" placeholder="e.g. npx or python">
381
+ </div>
382
+ <div class="cct-form-group">
383
+ <label class="cct-form-label">Arguments (space separated):</label>
384
+ <input type="text" class="cct-form-input" id="cct-mcp-args" placeholder="e.g. -y @modelcontextprotocol/server-filesystem C:\">
385
+ </div>
386
+ <div style="display: flex; justify-content: flex-end; margin-top: 6px;">
387
+ <button class="cct-modal-btn primary" onclick="FATTY.saveMcpServer()">Save MCP Server</button>
388
+ </div>
389
+ </div>
390
+ <div class="cct-modal-footer">
391
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Close</button>
392
+ </div>
393
+ </div>
394
+ </div>
395
+
396
+ <!-- MODAL: Backup Providers (Automatic Failover Chain) -->
397
+ <div class="cct-modal-backdrop" id="cct-backup-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
398
+ <div class="cct-modal-box" style="width: 620px;" onclick="event.stopPropagation()">
399
+ <div class="cct-modal-titlebar">
400
+ <span>📡 Backup Providers Failover Chain</span>
401
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
402
+ </div>
403
+ <div class="cct-modal-content">
404
+ <div class="cct-notice-banner">
405
+ Automatic Failover Chain: If your primary provider experiences rate limits, timeouts, or downtime, CAT streams uninterrupted by falling back down this ordered chain.
406
+ </div>
407
+ <div class="cct-column-title" style="margin-top: 8px;">Active Failover Chain Order:</div>
408
+ <div class="cct-backup-chain-list" id="cct-backup-chain-list">
409
+ <!-- Injected dynamically from /api/backup-providers -->
410
+ </div>
411
+ </div>
412
+ <div class="cct-modal-footer">
413
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Close</button>
414
+ <button class="cct-modal-btn primary" onclick="FATTY.saveBackupChain()">Save Chain Order</button>
415
+ </div>
416
+ </div>
417
+ </div>
418
+
419
+ <!-- MODAL: Themes & Color Palette -->
420
+ <div class="cct-modal-backdrop" id="cct-themes-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
421
+ <div class="cct-modal-box" style="width: 600px;" onclick="event.stopPropagation()">
422
+ <div class="cct-modal-titlebar">
423
+ <span>◑ Themes & Appearance</span>
424
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
425
+ </div>
426
+ <div class="cct-modal-content">
427
+ <div class="cct-column-title">Available Textual & Terminal Themes:</div>
428
+ <div class="cct-themes-grid" id="cct-themes-grid">
429
+ <!-- Injected dynamically from /api/themes -->
430
+ </div>
431
+ </div>
432
+ <div class="cct-modal-footer">
433
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Done</button>
434
+ </div>
435
+ </div>
436
+ </div>
437
+
438
+ <!-- MODAL: User Profile & Identity -->
439
+ <div class="cct-modal-backdrop" id="cct-user-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
440
+ <div class="cct-modal-box" style="width: 580px;" onclick="event.stopPropagation()">
441
+ <div class="cct-modal-titlebar">
442
+ <span>☺ User Profile & Identity</span>
443
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
444
+ </div>
445
+ <div class="cct-modal-content" id="cct-user-modal-content">
446
+ <!-- Injected dynamically from /api/user/profile -->
447
+ </div>
448
+ <div class="cct-modal-footer">
449
+ <button class="cct-modal-btn" onclick="FATTY.openSignOutModal()">Sign Out</button>
450
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Done</button>
451
+ </div>
452
+ </div>
453
+ </div>
454
+
455
+ <!-- MODAL: Sign Out Confirmation -->
456
+ <div class="cct-modal-backdrop" id="cct-signout-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
457
+ <div class="cct-modal-box" style="width: 440px;" onclick="event.stopPropagation()">
458
+ <div class="cct-modal-titlebar">
459
+ <span>⎋ Sign Out</span>
460
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
461
+ </div>
462
+ <div class="cct-modal-content" style="font-size: 13px; line-height: 1.5; padding: 16px 0;">
463
+ <p>Are you sure you want to sign out from CAT?</p>
464
+ <p class="cct-text-muted" style="font-size: 11.5px; margin-top: 6px;">This will revoke active tokens, terminate local auth sessions, and switch to local guest mode.</p>
465
+ </div>
466
+ <div class="cct-modal-footer">
467
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Cancel</button>
468
+ <button class="cct-modal-btn danger" onclick="FATTY.confirmSignOut()">Sign Out</button>
469
+ </div>
470
+ </div>
471
+ </div>
472
+
473
+ <!-- MODAL: Gestures -->
474
+ <div class="cct-modal-backdrop" id="cct-gestures-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
475
+ <div class="cct-modal-box" style="width: 580px;" onclick="event.stopPropagation()">
476
+ <div class="cct-modal-titlebar">
477
+ <span>✋ Gesture Shortcuts & Controls</span>
478
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
479
+ </div>
480
+ <div class="cct-modal-content">
481
+ <div class="cct-column-title">Configured Gestures:</div>
482
+ <div class="cct-gestures-list" id="cct-gestures-list">
483
+ <!-- Injected dynamically from /api/gestures -->
484
+ </div>
485
+ </div>
486
+ <div class="cct-modal-footer">
487
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Done</button>
488
+ </div>
489
+ </div>
490
+ </div>
491
+
492
+ <!-- MODAL: Personalize & Customization (3D Skeuomorphic Studio) -->
493
+ <div class="cct-modal-backdrop" id="cct-personalize-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
494
+ <div class="cct-modal-box" style="width: 640px;" onclick="event.stopPropagation()">
495
+ <div class="cct-modal-titlebar">
496
+ <span>🎨 Personalize & AI Customization Studio</span>
497
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
498
+ </div>
499
+ <div class="cct-modal-content" style="display: flex; flex-direction: column; gap: 12px;">
500
+ <div class="cct-form-group">
501
+ <label class="cct-form-label" style="font-weight: bold; color: var(--accent-build);">Choose AI Persona:</label>
502
+ <div id="cct-persona-cards" style="display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 4px;">
503
+ <!-- Rendered dynamically as 3D tactile cards -->
504
+ </div>
505
+ <select class="cct-form-input" id="cct-persona-select" style="display: none;" onchange="FATTY.onPersonaSelected(this.value)">
506
+ <!-- Hidden select sync -->
507
+ </select>
508
+ </div>
509
+ <div class="cct-form-group">
510
+ <label class="cct-form-label" style="font-weight: bold;">Custom Persona Instructions:</label>
511
+ <textarea class="cct-form-input cct-search-input" id="cct-custom-prompt" rows="3" placeholder="Additional persona instructions, tone rules, or role constraints..."></textarea>
512
+ </div>
513
+ <div class="cct-form-group">
514
+ <div style="display: flex; justify-content: space-between; align-items: center;">
515
+ <label class="cct-form-label" style="font-weight: bold;">Creativity & Temperature:</label>
516
+ <span class="cct-badge" id="cct-temp-val" style="background: rgba(224,175,104,0.15); border: 1px solid var(--accent-build); color: var(--accent-build); padding: 2px 8px; font-weight: bold;">0.70</span>
517
+ </div>
518
+ <input type="range" min="0" max="1" step="0.05" value="0.7" id="cct-temp-slider" oninput="document.getElementById('cct-temp-val').textContent=parseFloat(this.value).toFixed(2)" style="accent-color: var(--accent-build); cursor: pointer; margin-top: 6px;">
519
+ </div>
520
+ </div>
521
+ <div class="cct-modal-footer">
522
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Cancel</button>
523
+ <button class="cct-modal-btn primary" onclick="FATTY.savePersonalization()">Save Personalization</button>
524
+ </div>
525
+ </div>
526
+ </div>
527
+
528
+ <!-- MODAL: Settings Dialog -->
529
+ <div class="cct-modal-backdrop" id="cct-settings-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
530
+ <div class="cct-modal-box" onclick="event.stopPropagation()">
531
+ <div class="cct-modal-titlebar">
532
+ <span>Settings & Model Configuration</span>
533
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
534
+ </div>
535
+ <div class="cct-modal-content">
536
+ <div class="cct-form-group">
537
+ <label class="cct-form-label">AI Provider:</label>
538
+ <input type="text" class="cct-form-input" id="cct-cfg-provider" value="ollama">
539
+ </div>
540
+ <div class="cct-form-group">
541
+ <label class="cct-form-label">Model Name:</label>
542
+ <input type="text" class="cct-form-input" id="cct-cfg-model" value="deepseek-r1">
543
+ </div>
544
+ <div class="cct-form-group">
545
+ <label class="cct-form-label">API Key / Endpoint:</label>
546
+ <input type="text" class="cct-form-input" id="cct-cfg-endpoint" value="http://localhost:11434">
547
+ </div>
548
+ </div>
549
+ <div class="cct-modal-footer">
550
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Cancel</button>
551
+ <button class="cct-modal-btn primary" onclick="FATTY.saveSettings()">Save Configuration</button>
552
+ </div>
553
+ </div>
554
+ </div>
555
+
556
+ <!-- MODAL: Documentation -->
557
+ <div class="cct-modal-backdrop" id="cct-docs-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
558
+ <div class="cct-modal-box" style="width: 580px;" onclick="event.stopPropagation()">
559
+ <div class="cct-modal-titlebar">
560
+ <span>CAT CLI Documentation</span>
561
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
562
+ </div>
563
+ <div class="cct-modal-content" style="font-size: 12.5px; line-height: 1.6;">
564
+ <div><b>Commands:</b> Type <code>/</code> in chat for slash command suggestions.</div>
565
+ <div><b>/model</b> — Switch AI provider & model</div>
566
+ <div><b>/setup</b> — Reconfigure current AI provider</div>
567
+ <div><b>/verify</b> — Test AI connectivity</div>
568
+ <div><b>/workspace</b> — Manage project workspace</div>
569
+ <div><b>/clear</b> — Reset conversation to Welcome screen</div>
570
+ <div><b>Keyboard Shortcuts:</b></div>
571
+ <div><code>Enter</code>: Send message | <code>Shift+Enter</code>: New line</div>
572
+ <div><code>Ctrl+K</code> or <code>/</code>: Command Palette (86 commands)</div>
573
+ <div><code>Ctrl+M</code>: Switch AI Mode (Build, Plan, Research, Debugger, Agent, Notebook)</div>
574
+ <div><code>Ctrl+S</code>: Save open file in editor</div>
575
+ <div><code>Ctrl+B</code>: Toggle file explorer sidebar</div>
576
+ </div>
577
+ <div class="cct-modal-footer">
578
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Close</button>
579
+ </div>
580
+ </div>
581
+ </div>
582
+
583
+ <!-- MODAL: Command Palette (Ctrl+K / /) -->
584
+ <div class="cct-modal-backdrop" id="cct-command-palette-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
585
+ <div class="cct-palette-box" onclick="event.stopPropagation()">
586
+ <div class="cct-palette-input-wrap">
587
+ <span class="cct-palette-prompt">&gt;</span>
588
+ <input type="text" class="cct-palette-input" id="cct-palette-input" placeholder="Type a command or search (e.g. /solve, /model, /workspace, /atomsim)..." autocomplete="off" spellcheck="false">
589
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
590
+ </div>
591
+ <div class="cct-palette-list" id="cct-palette-list">
592
+ <!-- Injected dynamically by JS -->
593
+ </div>
594
+ </div>
595
+ </div>
596
+
597
+ <!-- MODAL: Model & Provider Picker -->
598
+ <div class="cct-modal-backdrop" id="cct-model-picker-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
599
+ <div class="cct-modal-box cct-picker-box" onclick="event.stopPropagation()">
600
+ <div class="cct-modal-titlebar">
601
+ <span>AI Providers & Models</span>
602
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
603
+ </div>
604
+ <div class="cct-modal-content">
605
+ <div class="cct-form-group">
606
+ <label class="cct-form-label">Search Provider:</label>
607
+ <input type="text" class="cct-form-input" id="cct-picker-filter" placeholder="Filter providers (ollama, openai, groq, deepseek, anthropic...)" oninput="FATTY.filterProviders(this.value)">
608
+ </div>
609
+ <div class="cct-column-title" style="margin-top: 4px;">Providers (<span id="cct-provider-count">155</span>):</div>
610
+ <div class="cct-provider-list" id="cct-picker-providers">
611
+ <!-- Injected dynamically by JS -->
612
+ </div>
613
+ <div class="cct-column-title" style="margin-top: 6px;">Available Models:</div>
614
+ <div class="cct-model-list" id="cct-picker-models">
615
+ <!-- Injected dynamically by JS -->
616
+ </div>
617
+ </div>
618
+ <div class="cct-modal-footer">
619
+ <button class="cct-modal-btn" onclick="FATTY.closeAllModals()">Cancel</button>
620
+ <button class="cct-modal-btn primary" onclick="FATTY.applySelectedModel()">Select Model</button>
621
+ </div>
622
+ </div>
623
+ </div>
624
+
625
+ <!-- MODAL: Mode Selector (Ctrl+M) -->
626
+ <div class="cct-modal-backdrop" id="cct-mode-selector-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
627
+ <div class="cct-modal-box" style="width: 560px;" onclick="event.stopPropagation()">
628
+ <div class="cct-modal-titlebar">
629
+ <span>Switch AI Mode (Ctrl+M)</span>
630
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
631
+ </div>
632
+ <div class="cct-modal-content">
633
+ <div class="cct-mode-grid" id="cct-mode-grid">
634
+ <!-- Injected dynamically by JS -->
635
+ </div>
636
+ </div>
637
+ </div>
638
+ </div>
639
+
640
+ <!-- MODAL: Memory Center (/memory) -->
641
+ <div class="cct-modal-backdrop" id="cct-memory-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
642
+ <div class="cct-modal-box" style="width: 580px;" onclick="event.stopPropagation()">
643
+ <div class="cct-modal-titlebar">
644
+ <span>Memory Center (~/.cct_memory.json)</span>
645
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
646
+ </div>
647
+ <div class="cct-modal-content">
648
+ <div class="cct-column-title">Remembered Facts:</div>
649
+ <div class="cct-memory-list" id="cct-memory-list">
650
+ <!-- Injected dynamically by JS -->
651
+ </div>
652
+ <div class="cct-memory-input-row">
653
+ <input type="text" class="cct-form-input" id="cct-add-fact-input" style="flex: 1;" placeholder="Add a durable fact (e.g. 'Exam is in May', 'Use TypeScript')...">
654
+ <button class="cct-modal-btn primary" onclick="FATTY.addMemoryFact()">Add Fact</button>
655
+ </div>
656
+ </div>
657
+ <div class="cct-modal-footer">
658
+ <button class="cct-modal-btn" onclick="FATTY.clearAllMemory()">Clear All</button>
659
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Done</button>
660
+ </div>
661
+ </div>
662
+ </div>
663
+
664
+ <!-- MODAL: Extensions Manager (/extensions) -->
665
+ <div class="cct-modal-backdrop" id="cct-extensions-modal" style="display: none;" onclick="FATTY.closeAllModals(event)">
666
+ <div class="cct-modal-box" style="width: 580px;" onclick="event.stopPropagation()">
667
+ <div class="cct-modal-titlebar">
668
+ <span>CAT Extensions & Plugins</span>
669
+ <button class="cct-modal-close-btn" onclick="FATTY.closeAllModals()">✕</button>
670
+ </div>
671
+ <div class="cct-modal-content">
672
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;">
673
+ <span style="font-size: 12px; color: var(--term-text-muted);">Manage installed extensions or build your own custom plugins.</span>
674
+ <button class="cct-modal-btn primary" id="cct-open-create-ext-btn" onclick="FATTY.openCreateExtensionModal()" style="padding: 4px 10px; font-size: 11px; white-space: nowrap;">+ Create Extension</button>
675
+ </div>
676
+ <div class="cct-ext-list" id="cct-extensions-list">
677
+ <!-- Injected dynamically by JS -->
678
+ </div>
679
+ </div>
680
+ <div class="cct-modal-footer">
681
+ <button class="cct-modal-btn primary" onclick="FATTY.closeAllModals()">Done</button>
682
+ </div>
683
+ </div>
684
+ </div>
685
+
686
+ <!-- MODAL: Create Extension -->
687
+ <div class="cct-modal-backdrop" id="cct-create-ext-modal" style="display: none;" onclick="FATTY.closeCreateExtensionModal(event)">
688
+ <div class="cct-modal-box" style="width: 520px;" onclick="event.stopPropagation()">
689
+ <div class="cct-modal-titlebar">
690
+ <span>⚡ Create Custom Extension</span>
691
+ <button class="cct-modal-close-btn" onclick="FATTY.closeCreateExtensionModal()">✕</button>
692
+ </div>
693
+ <div class="cct-modal-content" style="display: flex; flex-direction: column; gap: 10px;">
694
+ <div>
695
+ <label style="font-size: 11px; color: var(--term-text-muted); display: block; margin-bottom: 4px;">Extension Name *</label>
696
+ <input type="text" id="cct-create-ext-name" class="cct-input" placeholder="e.g. Code Formatter Pro" style="width: 100%; box-sizing: border-box;" />
697
+ </div>
698
+ <div style="display: flex; gap: 10px;">
699
+ <div style="flex: 2;">
700
+ <label style="font-size: 11px; color: var(--term-text-muted); display: block; margin-bottom: 4px;">ID (slug) *</label>
701
+ <input type="text" id="cct-create-ext-id" class="cct-input" placeholder="e.g. code_formatter" style="width: 100%; box-sizing: border-box;" />
702
+ </div>
703
+ <div style="flex: 1;">
704
+ <label style="font-size: 11px; color: var(--term-text-muted); display: block; margin-bottom: 4px;">Icon</label>
705
+ <input type="text" id="cct-create-ext-icon" class="cct-input" placeholder="⚡" value="⚡" style="width: 100%; box-sizing: border-box; text-align: center;" />
706
+ </div>
707
+ </div>
708
+ <div>
709
+ <label style="font-size: 11px; color: var(--term-text-muted); display: block; margin-bottom: 4px;">Description</label>
710
+ <input type="text" id="cct-create-ext-desc" class="cct-input" placeholder="What does this extension do?" style="width: 100%; box-sizing: border-box;" />
711
+ </div>
712
+ <div>
713
+ <label style="font-size: 11px; color: var(--term-text-muted); display: block; margin-bottom: 4px;">Category</label>
714
+ <select id="cct-create-ext-cat" class="cct-input" style="width: 100%; box-sizing: border-box;">
715
+ <option value="Productivity">Productivity</option>
716
+ <option value="Developer Tools">Developer Tools</option>
717
+ <option value="AI & ML">AI & ML</option>
718
+ <option value="Utilities">Utilities</option>
719
+ <option value="Custom">Custom</option>
720
+ </select>
721
+ </div>
722
+ <div id="cct-create-ext-error" style="color: var(--term-error, #f43f5e); font-size: 11px; display: none;"></div>
723
+ </div>
724
+ <div class="cct-modal-footer" style="display: flex; justify-content: flex-end; gap: 8px;">
725
+ <button class="cct-modal-btn" onclick="FATTY.closeCreateExtensionModal()">Cancel</button>
726
+ <button class="cct-modal-btn primary" id="cct-create-ext-submit" onclick="FATTY.submitCreateExtension()">Create & Install</button>
727
+ </div>
728
+ </div>
729
+ </div>
730
+
731
+ <script src="/static/js/app.js"></script>
732
+ </body>
733
+ </html>
734
+