{{ message }}
Repository navigation
Expand file tree
/
Copy pathai.html
More file actions
197 lines (191 loc) · 18.2 KB
/
Copy pathai.html
File metadata and controls
197 lines (191 loc) · 18.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#14253a" />
<meta name="description" content="An AI workspace for building, thinking and research." />
<title>360 AI · 360 Workspace</title>
<link rel="icon" type="image/png" href="/favicon-32x32.png" />
<link rel="manifest" href="/manifest.json" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/assets/css/main.css" />
<link rel="stylesheet" href="/assets/css/wide.css" />
<link rel="stylesheet" href="/assets/css/gallium.css" />
<link rel="stylesheet" href="/assets/css/cursor.css" />
<link rel="stylesheet" href="/assets/css/workspace-tools.css" />
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
<script src="/assets/js/360-settings.js"></script>
<script>window.SKIP_AUTH_CHIP = true;</script>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.0.9/purify.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<link rel="stylesheet" href="/assets/css/ai.css" />
<link rel="stylesheet" href="/assets/css/workspace-360.css?v=1" />
<link rel="stylesheet" href="/assets/css/mcp-hub.css?v=1" />
<script>
(() => {
const routes = { '/ai.html': '/ai/', '/library.html': '/library/', '/health.html': '/health/', '/scholar.html': '/scholar/', '/plugins.html': '/plugins/' };
const target = routes[window.location.pathname];
if (target) window.location.replace(target + window.location.search + window.location.hash);
})();
</script>
</head><body class="desk-body ai-page">
<div class="desk-layout ai-layout">
<aside class="sidebar" id="sidebar" aria-label="360 navigation"><span id="sidebar-slot"></span></aside>
<div class="overlay" id="overlay"></div>
<div class="settings-panel" id="settingsPanel">
<h3>Appearance</h3>
<div class="settings-label">Theme</div>
<div class="theme-swatches">
<div class="theme-option"><div class="swatch" data-theme="ocean"></div><span>Ocean</span></div>
<div class="theme-option"><div class="swatch" data-theme="midnight"></div><span>Midnight</span></div>
<div class="theme-option"><div class="swatch" data-theme="sunset"></div><span>Sunset</span></div>
<div class="theme-option"><div class="swatch" data-theme="mint"></div><span>Mint</span></div>
<div class="theme-option"><div class="swatch" data-theme="neon"></div><span>Neon</span></div>
<div class="theme-option"><div class="swatch" data-theme="mono"></div><span>Mono</span></div>
</div>
<div class="settings-label" style="margin-top:20px;">Mode</div>
<label style="display:flex;align-items:center;gap:10px;cursor:pointer;">
<span style="font-size:14px;">Dark mode</span>
<input id="darkToggle" type="checkbox"/>
</label>
<h3 style="margin-top:20px;">Cursor</h3>
<div class="settings-label">Style</div>
<div class="cursor-options">
<div class="cursor-option active" data-cursor="default"><div class="cursor-preview preview-default"></div>Default</div>
<div class="cursor-option" data-cursor="dot"><div class="cursor-preview preview-dot"></div>Dot</div>
<div class="cursor-option" data-cursor="ring"><div class="cursor-preview preview-ring"></div>Ring</div>
<div class="cursor-option" data-cursor="crosshair"><div class="cursor-preview preview-crosshair"></div>Crosshair</div>
<div class="cursor-option" data-cursor="blob"><div class="cursor-preview preview-blob"></div>Blob</div>
<div class="cursor-option" data-cursor="system"><div class="cursor-preview preview-system"></div>System</div>
</div>
<div class="cursor-color-row">
<label>Cursor color</label>
<input id="cursorColorPicker" type="color" value="#3b82f6"/>
<button id="cursorColorReset">Reset</button>
</div>
<div class="settings-box" style="margin-top:20px;">
<div class="settings-label">Background Image</div>
<input accept="image/*" class="settings-input" id="bgUpload" type="file"/>
<input class="settings-input" id="bgUrlInput" placeholder="Paste image URL…" type="text"/>
<button class="settings-btn" id="bgUrlBtn">Apply URL</button>
<button class="settings-btn" id="bgResetBtn">Reset</button>
</div>
</div>
<aside class="desk-rail" aria-label="360 workspace">
<button class="desk-menu-trigger sidebar-toggle" id="sidebarToggle" type="button" aria-label="Open 360 menu" title="Menu" aria-controls="sidebar" aria-expanded="false">
<svg width="21" height="21" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg>
</button>
<div class="desk-rail-rule"></div>
<nav class="desk-rail-nav"><a class="desk-rail-link active" href="/ai/" aria-label="AI" title="AI"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 3h10a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H7a4 4 0 0 1-4-4V7a4 4 0 0 1 4-4Z M8 9h8 M8 13h5"/></svg><span>AI</span></a><a class="desk-rail-link" href="/library/" aria-label="Library" title="Library"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 4h10a2 2 0 0 1 2 2v14H7a3 3 0 0 1-3-3V6a2 2 0 0 1 2-2Z M8 8h6 M8 12h6 M8 16h4"/></svg><span>Library</span></a><a class="desk-rail-link" href="/scholar/" aria-label="Scholar" title="Scholar"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3 2 8l10 5 10-5-10-5Z M6 10v6c3 3 9 3 12 0v-6 M22 8v7"/></svg><span>Scholar</span></a><a class="desk-rail-link" href="/health/" aria-label="Health" title="Health"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12h4l3-7 4 14 3-7h4"/></svg><span>Health</span></a><a class="desk-rail-link" href="/plugins/" aria-label="Plugins" title="Plugins"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3v5 M15 3v5 M4 9h16v3a3 3 0 0 0 0 6v3H4v-3a3 3 0 0 0 0-6V9Z"/></svg><span>Plugins</span></a></nav>
</aside>
<div class="desk-main ai-desk-main">
<header class="desk-topbar ai-topbar">
<div class="desk-topbar-heading"><h1>AI</h1></div>
<div class="desk-topbar-actions ai-topbar-actions">
<button id="ai-chat-sidebar-toggle" class="quiet-button history-trigger" type="button"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5h16 M4 9h16 M4 13h10 M4 17h8"/></svg> <span>History</span></button>
<button id="mcp-btn" class="quiet-button connector-trigger" type="button" title="Connected tools">Tools <span class="connector-dot"></span></button><div class="ai-topbar-model" aria-hidden="true"><span class="ai-status-pip"></span><span>AI online</span></div>
<div id="usage-meter" class="ai-usage-meter" title="Daily AI usage" aria-hidden="true"><div id="usage-meter-bar"><div id="usage-meter-fill"></div></div><span id="usage-meter-label">—</span></div>
<div class="desk-profile-wrap ai-profile-wrap">
<button class="desk-profile-btn" id="ai-profile-btn" type="button" aria-expanded="false" aria-haspopup="menu"><span class="desk-avatar" id="ai-profile-avatar">G</span><span class="desk-profile-copy"><strong id="ai-profile-name">Guest</strong><small id="ai-profile-subtitle">AI preferences</small></span><span class="desk-profile-caret">⌄</span></button>
<div class="desk-profile-menu ai-profile-menu" id="ai-profile-menu" role="menu" hidden>
<div class="desk-profile-menu-head"><span class="desk-avatar large" id="ai-profile-menu-avatar">G</span><span><strong id="ai-profile-menu-name">Guest</strong><small id="ai-profile-menu-email">Not signed in</small></span></div>
<button id="ai-open-settings" type="button" class="desk-menu-button" role="menuitem">AI preferences <span>⌘</span></button>
<a role="menuitem" href="/settings">Account settings</a>
<button id="ai-profile-auth-action" type="button" class="desk-menu-button" role="menuitem">Sign in</button>
</div>
</div>
</div>
</header>
<div class="ai-shell sidebar-collapsed" id="ai-shell">
<aside id="ai-sidebar" class="ai-history-drawer collapsed" aria-label="Conversation history" aria-hidden="true">
<div class="history-head"><div><span class="drawer-overline">YOUR WORK</span><h2>Conversation history</h2></div><button id="ai-sidebar-collapse" class="drawer-close" type="button" aria-label="Close history">×</button></div>
<button id="new-chat-btn" class="new-thread-button" type="button"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14 M5 12h14"/></svg> <span>New conversation</span><kbd>+</kbd></button>
<label class="history-search-wrap"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14 M16 16l4 4"/></svg><input id="conv-search" type="search" placeholder="Find a conversation" /></label>
<div class="history-section-label">RECENT</div>
<div id="conv-list" aria-label="Recent chats"><div class="conv-empty">Your saved chats will appear here.</div></div>
</aside>
<button class="history-backdrop" id="history-backdrop" type="button" aria-label="Close history" hidden></button>
<main class="ai-main" id="ai-main">
<div id="conv-title-bar" class="ai-conv-title-bar"><span class="conv-title-label" id="conv-title-label">Untitled conversation</span><span class="title-bar-label">THREAD</span></div>
<div id="ai-output" class="ai-output"><div id="ai-welcome" class="ai-welcome">
<h2>What do you want to work on?</h2>
<p>Start with a prompt, or just type below.</p>
<div class="welcome-actions" aria-label="Suggested prompts">
<button class="wl-chip welcome-card build-card" type="button" data-prompt="Help me plan and build a small web app. Start with the structure and core interactions."><span class="welcome-card-icon">{ }</span><span><strong>Build something</strong><small>Plan an idea or write code</small></span><b>↗</b></button>
<button class="wl-chip welcome-card learn-card" type="button" data-prompt="Explain a difficult topic in plain language, then give me a concrete example and a way to check my understanding."><span class="welcome-card-icon">⌁</span><span><strong>Learn a topic</strong><small>Understand the key ideas</small></span><b>↗</b></button>
<button class="wl-chip welcome-card research-card" type="button" data-prompt="!web Research this topic using credible primary sources and respected publications. Give me a concise synthesis with direct links and limitations: "><span class="welcome-card-icon">◎</span><span><strong>Research sources</strong><small>Find evidence and citations</small></span><b>↗</b></button>
<button class="wl-chip welcome-card stock-card" type="button" data-prompt="Analyze $NVDA using the latest 360 Stocks market snapshot, including recent price history, valuation metrics, and technical indicators. Explain what the data does and does not show. Do not give personalized investment advice."><span class="welcome-card-icon">$</span><span><strong>Analyze a stock</strong><small>Use live 360 Stocks data</small></span><b>↗</b></button>
</div>
</div></div>
<div class="ai-input-area">
<div id="file-preview" class="ai-file-preview"><div id="fp-thumb"></div><span id="fp-name"></span><button id="fp-cancel" type="button" title="Remove attachment" aria-label="Remove attachment">×</button></div>
<div id="mcp-context-bar" class="mcp-context-bar"><span class="mcp-ctx-dot"></span><span id="mcp-ctx-label">Connected tools are available</span><button id="mcp-ctx-close" type="button" title="Dismiss">×</button></div>
<div class="ai-composer-card">
<textarea id="ai-input" rows="1" placeholder="What do you want to work through?" aria-label="Message 360 AI"></textarea>
<div class="composer-toolbar">
<div class="composer-tools"><button id="ai-attach-btn" type="button" class="composer-icon-btn" title="Attach a file" aria-label="Attach a file"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14 M5 12h14"/></svg></button><button id="model-picker-btn" type="button" class="model-picker-chip" aria-label="Choose AI model"><span class="model-picker-glyph">◈</span><span id="model-picker-label">Default model</span><span class="caret-small">⌄</span></button><button id="ai-web-toggle" class="research-toggle" type="button" aria-pressed="false"><span>◎</span> Web research</button></div>
<div class="composer-submit"><span class="composer-key-hint">↵ send</span><button id="ai-send-btn" type="button" title="Send message" aria-label="Send message"><svg width="19" height="19" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5 M5 12l7-7 7 7"/></svg></button></div>
</div>
</div>
<div class="ai-input-foot"><span>AI can make mistakes. Verify important details and market data.</span></div>
</div>
</main>
</div>
</div>
</div>
<div id="ai-settings-backdrop" class="ai-settings-backdrop" hidden><section class="ai-settings-dialog" role="dialog" aria-modal="true" aria-labelledby="ai-settings-title">
<div class="ai-settings-heading"><div><h2 id="ai-settings-title">AI preferences</h2><p>Choose how AI searches and responds.</p></div><button id="ai-settings-close" type="button" aria-label="Close settings">×</button></div>
<button id="ai-open-models-dialog" type="button" class="ai-setting-model"><span><strong>Default model</strong><small>Pick a specific model or let 360 choose.</small></span><span id="ai-settings-model-name">Default model ›</span></button>
<label class="ai-setting-toggle"><span><strong>Web research</strong><small>Search current web sources when you ask a question.</small></span><input id="ai-web-research-toggle" type="checkbox" /></label>
<label class="ai-setting-toggle"><span><strong>Scholar mode</strong><small>Prefer reputable publications, primary sources and clear caveats.</small></span><input id="ai-scholar-mode-toggle" type="checkbox" /></label>
<p class="ai-settings-note">Web research may take longer. Always verify important claims against the linked source.</p>
</section></div>
<span id="admin-badge">ADMIN</span><input type="file" id="ai-file-input" hidden />
<!-- MCP Connector overlay + panel -->
<div id="mcp-overlay"></div>
<div id="mcp-panel" role="dialog" aria-label="Connected tools">
<div id="mcp-panel-head">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.22 4.22l2.12 2.12M17.66 17.66l2.12 2.12M2 12h3M19 12h3M4.22 19.78l2.12-2.12M17.66 6.34l2.12-2.12"/></svg>
<h2>Connected tools</h2>
<button id="mcp-panel-close" title="Close">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
<div id="mcp-panel-body">
<!-- Cards injected by mcp.js -->
</div>
</div>
<!-- Model picker popup: category tabs + search across all OpenRouter models -->
<div id="model-overlay"></div>
<div id="model-modal" role="dialog" aria-label="Choose AI model">
<div id="model-modal-head">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="3"/><path d="M9 9h.01M15 9h.01M9 15h6"/></svg>
<h2>Choose a model</h2>
<button id="model-modal-close" title="Close">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
<div id="model-search-row">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<input id="model-search-input" type="text" placeholder="Search all models by name or id…" autocomplete="off" />
</div>
<div id="model-tabs"></div>
<div id="model-list"></div>
</div>
<script src="/assets/js/main.js"></script>
<script src="/assets/js/wide.js"></script>
<script src="/assets/js/gallium.js"></script>
<script src="/assets/js/cursor.js"></script>
<script src="/assets/js/ai.js"></script>
<script src="/assets/js/ai-ui.js"></script>
<script src="/assets/js/apps-ui.js"></script>
<script src="/assets/js/mcp-hub.js"></script>
<script src="/assets/js/mcp.js"></script>
</body></html>
You can’t perform that action at this time.
