antri_cli 1.57.29 → 1.57.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/banner.d.ts.map +1 -1
- package/dist/cli/banner.js +9 -2
- package/dist/cli/banner.js.map +1 -1
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +4 -0
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/promptToolkit.d.ts.map +1 -1
- package/dist/cli/promptToolkit.js +1 -1
- package/dist/cli/promptToolkit.js.map +1 -1
- package/dist/cli/renderer.d.ts +8 -0
- package/dist/cli/renderer.d.ts.map +1 -1
- package/dist/cli/renderer.js +77 -0
- package/dist/cli/renderer.js.map +1 -1
- package/dist/core/agent.d.ts +5 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +1119 -20
- package/dist/core/agent.js.map +1 -1
- package/dist/core/codebaseBreather.d.ts +46 -0
- package/dist/core/codebaseBreather.d.ts.map +1 -0
- package/dist/core/codebaseBreather.js +310 -0
- package/dist/core/codebaseBreather.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +6 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/tools.d.ts +5 -0
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js +147 -46
- package/dist/core/tools.js.map +1 -1
- package/dist/core/updater.d.ts +1 -1
- package/dist/core/updater.js +1 -1
- package/dist/desktop/public/app.js +276 -6
- package/dist/desktop/public/index.html +149 -1
- package/dist/desktop/public/style.css +356 -0
- package/dist/desktop/server.d.ts.map +1 -1
- package/dist/desktop/server.js +75 -0
- package/dist/desktop/server.js.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/mobile/public/app.js +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/models.d.ts.map +1 -1
- package/dist/providers/models.js +2 -4
- package/dist/providers/models.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +19 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/skills/skillManager.d.ts.map +1 -1
- package/dist/skills/skillManager.js +216 -226
- package/dist/skills/skillManager.js.map +1 -1
- package/package.json +4 -1
|
@@ -169,11 +169,20 @@ async function showTab(tabName) {
|
|
|
169
169
|
const targetPanel = document.getElementById(`tab-${tabName}`);
|
|
170
170
|
if (targetPanel) targetPanel.classList.add('active');
|
|
171
171
|
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
const navBtn = document.querySelector(`.nav-item[onclick*="'${tabName}'"]`);
|
|
173
|
+
if (navBtn) {
|
|
174
|
+
navBtn.classList.add('active');
|
|
175
|
+
} else {
|
|
176
|
+
const navIndex = ['chat', 'codebase', 'workspace', 'timeline', 'dialectic', 'goal', 'profiles', 'skills', 'memory', 'artifacts', 'suggestions'].indexOf(tabName);
|
|
177
|
+
const navButtons = document.querySelectorAll('.nav-item');
|
|
178
|
+
if (navButtons[navIndex]) navButtons[navIndex].classList.add('active');
|
|
179
|
+
}
|
|
175
180
|
|
|
176
|
-
if (tabName === '
|
|
181
|
+
if (tabName === 'codebase') {
|
|
182
|
+
await loadCodebaseTab();
|
|
183
|
+
} else if (tabName === 'workspace') {
|
|
184
|
+
await loadWorkspaceTree();
|
|
185
|
+
} else if (tabName === 'profiles') {
|
|
177
186
|
await loadProfiles();
|
|
178
187
|
} else if (tabName === 'skills') {
|
|
179
188
|
await loadSkills();
|
|
@@ -1800,7 +1809,7 @@ function adoptSuggestion(index) {
|
|
|
1800
1809
|
if (!sug) return;
|
|
1801
1810
|
|
|
1802
1811
|
showTab('chat');
|
|
1803
|
-
const chatInput = document.getElementById('chat-input');
|
|
1812
|
+
const chatInput = document.getElementById('prompt-input') || document.getElementById('chat-input');
|
|
1804
1813
|
if (chatInput) {
|
|
1805
1814
|
chatInput.value = sug.prompt;
|
|
1806
1815
|
chatInput.focus();
|
|
@@ -1837,10 +1846,271 @@ function buildFromCustomIdea() {
|
|
|
1837
1846
|
}
|
|
1838
1847
|
|
|
1839
1848
|
showTab('chat');
|
|
1840
|
-
const chatInput = document.getElementById('chat-input');
|
|
1849
|
+
const chatInput = document.getElementById('prompt-input') || document.getElementById('chat-input');
|
|
1841
1850
|
if (chatInput) {
|
|
1842
1851
|
chatInput.value = val;
|
|
1843
1852
|
chatInput.focus();
|
|
1844
1853
|
}
|
|
1845
1854
|
showToast('Sent custom vision to Agent Studio.');
|
|
1846
1855
|
}
|
|
1856
|
+
|
|
1857
|
+
// 🫁 CODEBASE INTELLIGENCE RADAR LOGIC
|
|
1858
|
+
let activeCodebaseCache = null;
|
|
1859
|
+
|
|
1860
|
+
async function loadCodebaseTab() {
|
|
1861
|
+
const container = document.getElementById('codebase-dashboard-content');
|
|
1862
|
+
if (!container) return;
|
|
1863
|
+
|
|
1864
|
+
try {
|
|
1865
|
+
const res = await fetch('/api/codebase/cache');
|
|
1866
|
+
const data = await res.json();
|
|
1867
|
+
activeCodebaseCache = data.cache;
|
|
1868
|
+
renderCodebaseDashboard(activeCodebaseCache);
|
|
1869
|
+
} catch (err) {
|
|
1870
|
+
console.error('Failed to load codebase cache:', err);
|
|
1871
|
+
container.innerHTML = `<div class="error-msg">Failed to load codebase intelligence cache: ${err.message}</div>`;
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
function renderCodebaseDashboard(cache) {
|
|
1876
|
+
const container = document.getElementById('codebase-dashboard-content');
|
|
1877
|
+
if (!container || !cache) return;
|
|
1878
|
+
|
|
1879
|
+
const stackPills = (cache.techStack || [])
|
|
1880
|
+
.map((s) => `<span class="tech-pill">${escapeHtml(s)}</span>`)
|
|
1881
|
+
.join('');
|
|
1882
|
+
|
|
1883
|
+
const topDirs = (cache.topDirectories || [])
|
|
1884
|
+
.map(
|
|
1885
|
+
(d) =>
|
|
1886
|
+
`<div class="subsystem-item">
|
|
1887
|
+
<span class="subsystem-name">📁 ${escapeHtml(d.name)}</span>
|
|
1888
|
+
<span class="subsystem-count">${d.fileCount} source files</span>
|
|
1889
|
+
</div>`
|
|
1890
|
+
)
|
|
1891
|
+
.join('');
|
|
1892
|
+
|
|
1893
|
+
const keyFilesList = (cache.keyFiles || [])
|
|
1894
|
+
.map((f) => `<div class="key-file-tag">📄 ${escapeHtml(f)}</div>`)
|
|
1895
|
+
.join('');
|
|
1896
|
+
|
|
1897
|
+
const depsList = (cache.dependencies || [])
|
|
1898
|
+
.map((dep) => `<span class="dep-pill">${escapeHtml(dep)}</span>`)
|
|
1899
|
+
.join('');
|
|
1900
|
+
|
|
1901
|
+
const gitHtml = cache.gitInfo
|
|
1902
|
+
? `<div class="git-status-badge">
|
|
1903
|
+
<span>🌿 <strong>Branch:</strong> ${escapeHtml(cache.gitInfo.branch)}</span>
|
|
1904
|
+
<span>📝 <strong>Changes:</strong> ${cache.gitInfo.modifiedFilesCount} files</span>
|
|
1905
|
+
<span>🔖 <strong>Last Commit:</strong> "${escapeHtml(cache.gitInfo.lastCommit)}"</span>
|
|
1906
|
+
</div>`
|
|
1907
|
+
: `<div class="git-status-badge"><span>Git workspace not initialized</span></div>`;
|
|
1908
|
+
|
|
1909
|
+
container.innerHTML = `
|
|
1910
|
+
<!-- Top Hero Metric Card -->
|
|
1911
|
+
<div class="codebase-hero-card">
|
|
1912
|
+
<div class="hero-main-info">
|
|
1913
|
+
<div class="project-identity">
|
|
1914
|
+
<span class="project-title">${escapeHtml(cache.projectName)}</span>
|
|
1915
|
+
<span class="project-version">v${escapeHtml(cache.version)}</span>
|
|
1916
|
+
<span class="badge" style="background:var(--primary-subtle);color:var(--primary);">${escapeHtml(cache.projectType)}</span>
|
|
1917
|
+
</div>
|
|
1918
|
+
<div class="tech-stack-row">
|
|
1919
|
+
${stackPills || '<span class="tech-pill">General</span>'}
|
|
1920
|
+
</div>
|
|
1921
|
+
</div>
|
|
1922
|
+
<div class="hero-stats-grid">
|
|
1923
|
+
<div class="stat-box">
|
|
1924
|
+
<span class="stat-number">${cache.totalFiles}</span>
|
|
1925
|
+
<span class="stat-label">Source Files</span>
|
|
1926
|
+
</div>
|
|
1927
|
+
<div class="stat-box">
|
|
1928
|
+
<span class="stat-number">${cache.totalDirectories}</span>
|
|
1929
|
+
<span class="stat-label">Directories</span>
|
|
1930
|
+
</div>
|
|
1931
|
+
<div class="stat-box">
|
|
1932
|
+
<span class="stat-number">${(cache.entryPoints || []).length}</span>
|
|
1933
|
+
<span class="stat-label">Entrypoints</span>
|
|
1934
|
+
</div>
|
|
1935
|
+
</div>
|
|
1936
|
+
</div>
|
|
1937
|
+
|
|
1938
|
+
<!-- Git Workspace Info -->
|
|
1939
|
+
${gitHtml}
|
|
1940
|
+
|
|
1941
|
+
<!-- 3-Column Architecture Breakdown -->
|
|
1942
|
+
<div class="codebase-columns-grid">
|
|
1943
|
+
<!-- Col 1: Top Subsystems -->
|
|
1944
|
+
<div class="codebase-col-card">
|
|
1945
|
+
<h3>📦 Subsystem Directories</h3>
|
|
1946
|
+
<div class="subsystems-list">
|
|
1947
|
+
${topDirs || '<div style="color:var(--text-muted);font-size:12px;">Root directory only</div>'}
|
|
1948
|
+
</div>
|
|
1949
|
+
</div>
|
|
1950
|
+
|
|
1951
|
+
<!-- Col 2: Key Entrypoints & Configs -->
|
|
1952
|
+
<div class="codebase-col-card">
|
|
1953
|
+
<h3>🚀 Key Files & Entrypoints</h3>
|
|
1954
|
+
<div class="key-files-list">
|
|
1955
|
+
${keyFilesList || '<div style="color:var(--text-muted);font-size:12px;">No key files discovered</div>'}
|
|
1956
|
+
</div>
|
|
1957
|
+
</div>
|
|
1958
|
+
|
|
1959
|
+
<!-- Col 3: Dependencies & Ecosystem -->
|
|
1960
|
+
<div class="codebase-col-card">
|
|
1961
|
+
<h3>⚡ Dependencies & Packages</h3>
|
|
1962
|
+
<div class="deps-cloud">
|
|
1963
|
+
${depsList || '<div style="color:var(--text-muted);font-size:12px;">Zero external dependencies</div>'}
|
|
1964
|
+
</div>
|
|
1965
|
+
</div>
|
|
1966
|
+
</div>
|
|
1967
|
+
`;
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
async function triggerCodebaseBreathe() {
|
|
1971
|
+
const btn = document.getElementById('btn-codebase-breathe');
|
|
1972
|
+
const bar = document.getElementById('codebase-breathing-bar');
|
|
1973
|
+
|
|
1974
|
+
if (btn) btn.disabled = true;
|
|
1975
|
+
if (bar) bar.classList.remove('hidden');
|
|
1976
|
+
|
|
1977
|
+
try {
|
|
1978
|
+
const res = await fetch('/api/codebase/breathe', { method: 'POST' });
|
|
1979
|
+
const data = await res.json();
|
|
1980
|
+
if (data.success) {
|
|
1981
|
+
activeCodebaseCache = data.cache;
|
|
1982
|
+
renderCodebaseDashboard(activeCodebaseCache);
|
|
1983
|
+
showToast(`✨ ANTRI Breathed! Indexed ${data.cache.totalFiles} files in ${data.cache.projectName}.`);
|
|
1984
|
+
}
|
|
1985
|
+
} catch (err) {
|
|
1986
|
+
showToast(`Breathing error: ${err.message}`, true);
|
|
1987
|
+
} finally {
|
|
1988
|
+
if (btn) btn.disabled = false;
|
|
1989
|
+
if (bar) bar.classList.add('hidden');
|
|
1990
|
+
}
|
|
1991
|
+
}
|
|
1992
|
+
|
|
1993
|
+
// 💻 LIVE CODE WORKSPACE & PLAYGROUND LOGIC
|
|
1994
|
+
let activeWorkspaceFilePath = null;
|
|
1995
|
+
|
|
1996
|
+
async function loadWorkspaceTree() {
|
|
1997
|
+
const treeContainer = document.getElementById('workspace-tree-list');
|
|
1998
|
+
if (!treeContainer) return;
|
|
1999
|
+
|
|
2000
|
+
try {
|
|
2001
|
+
const res = await fetch('/api/workspace/tree');
|
|
2002
|
+
const data = await res.json();
|
|
2003
|
+
renderWorkspaceTree(data.items || []);
|
|
2004
|
+
} catch (err) {
|
|
2005
|
+
console.error('Failed to load workspace tree:', err);
|
|
2006
|
+
treeContainer.innerHTML = `<div style="color:var(--text-muted);font-size:12px;padding:8px;">Failed to load workspace tree</div>`;
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
2009
|
+
|
|
2010
|
+
function renderWorkspaceTree(items) {
|
|
2011
|
+
const treeContainer = document.getElementById('workspace-tree-list');
|
|
2012
|
+
if (!treeContainer) return;
|
|
2013
|
+
|
|
2014
|
+
if (items.length === 0) {
|
|
2015
|
+
treeContainer.innerHTML = `<div style="color:var(--text-muted);font-size:12px;padding:8px;">No files in workspace</div>`;
|
|
2016
|
+
return;
|
|
2017
|
+
}
|
|
2018
|
+
|
|
2019
|
+
treeContainer.innerHTML = items
|
|
2020
|
+
.map((item) => {
|
|
2021
|
+
const isDir = item.type === 'directory';
|
|
2022
|
+
const icon = isDir ? '📁' : item.name.endsWith('.html') ? '🌐' : item.name.endsWith('.css') ? '🎨' : item.name.endsWith('.js') || item.name.endsWith('.ts') ? '⚡' : '📄';
|
|
2023
|
+
const activeClass = activeWorkspaceFilePath === item.relativePath ? 'active' : '';
|
|
2024
|
+
return `
|
|
2025
|
+
<div class="tree-item ${isDir ? 'is-dir' : 'is-file'} ${activeClass}" onclick="${isDir ? '' : `openWorkspaceFile('${escapeHtml(item.relativePath)}')`}">
|
|
2026
|
+
<span class="tree-icon">${icon}</span>
|
|
2027
|
+
<span class="tree-name">${escapeHtml(item.name)}</span>
|
|
2028
|
+
</div>
|
|
2029
|
+
`;
|
|
2030
|
+
})
|
|
2031
|
+
.join('');
|
|
2032
|
+
}
|
|
2033
|
+
|
|
2034
|
+
async function openWorkspaceFile(filePath) {
|
|
2035
|
+
activeWorkspaceFilePath = filePath;
|
|
2036
|
+
renderWorkspaceTree(await (await fetch('/api/workspace/tree')).json().then((d) => d.items || []));
|
|
2037
|
+
|
|
2038
|
+
const filenameTag = document.getElementById('active-workspace-filename');
|
|
2039
|
+
const editor = document.getElementById('workspace-file-editor');
|
|
2040
|
+
const sandboxContainer = document.getElementById('workspace-sandbox-container');
|
|
2041
|
+
const sandboxIframe = document.getElementById('workspace-sandbox-iframe');
|
|
2042
|
+
const deviceToggles = document.getElementById('workspace-device-toggles');
|
|
2043
|
+
|
|
2044
|
+
if (filenameTag) filenameTag.textContent = filePath;
|
|
2045
|
+
|
|
2046
|
+
try {
|
|
2047
|
+
const res = await fetch(`/api/workspace/file?path=${encodeURIComponent(filePath)}`);
|
|
2048
|
+
const data = await res.json();
|
|
2049
|
+
if (data.success && editor) {
|
|
2050
|
+
editor.value = data.content;
|
|
2051
|
+
|
|
2052
|
+
// If HTML file, show live sandbox preview
|
|
2053
|
+
if (filePath.endsWith('.html')) {
|
|
2054
|
+
if (sandboxContainer) sandboxContainer.classList.remove('hidden');
|
|
2055
|
+
if (deviceToggles) deviceToggles.style.display = 'flex';
|
|
2056
|
+
if (sandboxIframe) {
|
|
2057
|
+
sandboxIframe.srcdoc = data.content;
|
|
2058
|
+
}
|
|
2059
|
+
} else {
|
|
2060
|
+
if (sandboxContainer) sandboxContainer.classList.add('hidden');
|
|
2061
|
+
if (deviceToggles) deviceToggles.style.display = 'none';
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
} catch (err) {
|
|
2065
|
+
showToast(`Failed to open file: ${err.message}`, true);
|
|
2066
|
+
}
|
|
2067
|
+
}
|
|
2068
|
+
|
|
2069
|
+
async function saveWorkspaceFile() {
|
|
2070
|
+
if (!activeWorkspaceFilePath) {
|
|
2071
|
+
alert('Please select a file to edit first.');
|
|
2072
|
+
return;
|
|
2073
|
+
}
|
|
2074
|
+
const editor = document.getElementById('workspace-file-editor');
|
|
2075
|
+
const content = editor?.value || '';
|
|
2076
|
+
|
|
2077
|
+
try {
|
|
2078
|
+
const res = await fetch('/api/workspace/file', {
|
|
2079
|
+
method: 'POST',
|
|
2080
|
+
headers: { 'Content-Type': 'application/json' },
|
|
2081
|
+
body: JSON.stringify({ path: activeWorkspaceFilePath, content }),
|
|
2082
|
+
});
|
|
2083
|
+
const data = await res.json();
|
|
2084
|
+
if (data.success) {
|
|
2085
|
+
showToast(`Saved ${activeWorkspaceFilePath} successfully!`);
|
|
2086
|
+
// Update sandbox if HTML
|
|
2087
|
+
if (activeWorkspaceFilePath.endsWith('.html')) {
|
|
2088
|
+
const sandboxIframe = document.getElementById('workspace-sandbox-iframe');
|
|
2089
|
+
if (sandboxIframe) sandboxIframe.srcdoc = content;
|
|
2090
|
+
}
|
|
2091
|
+
} else {
|
|
2092
|
+
showToast(`Failed to save: ${data.error}`, true);
|
|
2093
|
+
}
|
|
2094
|
+
} catch (err) {
|
|
2095
|
+
showToast(`Error saving file: ${err.message}`, true);
|
|
2096
|
+
}
|
|
2097
|
+
}
|
|
2098
|
+
|
|
2099
|
+
function setSandboxDevice(device) {
|
|
2100
|
+
const iframe = document.getElementById('workspace-sandbox-iframe');
|
|
2101
|
+
document.querySelectorAll('.device-btn').forEach((b) => b.classList.remove('active'));
|
|
2102
|
+
event?.target?.classList.add('active');
|
|
2103
|
+
|
|
2104
|
+
if (!iframe) return;
|
|
2105
|
+
if (device === 'mobile') {
|
|
2106
|
+
iframe.style.maxWidth = '375px';
|
|
2107
|
+
iframe.style.margin = '0 auto';
|
|
2108
|
+
} else if (device === 'tablet') {
|
|
2109
|
+
iframe.style.maxWidth = '768px';
|
|
2110
|
+
iframe.style.margin = '0 auto';
|
|
2111
|
+
} else {
|
|
2112
|
+
iframe.style.maxWidth = '100%';
|
|
2113
|
+
iframe.style.margin = '0';
|
|
2114
|
+
}
|
|
2115
|
+
}
|
|
2116
|
+
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<header class="app-header">
|
|
16
16
|
<div class="brand-zone">
|
|
17
17
|
<span class="logo-mark">ANTRI</span>
|
|
18
|
-
<span class="version-tag">v1.57.
|
|
18
|
+
<span class="version-tag">v1.57.32</span>
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
21
|
<!-- Mode Toggle -->
|
|
@@ -79,6 +79,15 @@
|
|
|
79
79
|
<button class="nav-item active" onclick="showTab('chat')">
|
|
80
80
|
<span class="nav-label">Agent Studio</span>
|
|
81
81
|
</button>
|
|
82
|
+
<button class="nav-item" onclick="showTab('codebase')">
|
|
83
|
+
<span class="nav-label">🫁 Codebase Radar</span>
|
|
84
|
+
</button>
|
|
85
|
+
<button class="nav-item" onclick="showTab('workspace')">
|
|
86
|
+
<span class="nav-label">💻 Code Workspace</span>
|
|
87
|
+
</button>
|
|
88
|
+
<button class="nav-item" onclick="showTab('timeline')">
|
|
89
|
+
<span class="nav-label">🧠 Thinking Timeline</span>
|
|
90
|
+
</button>
|
|
82
91
|
<button class="nav-item" onclick="showTab('dialectic')">
|
|
83
92
|
<span class="nav-label">Dialectic Arena</span>
|
|
84
93
|
</button>
|
|
@@ -497,6 +506,145 @@
|
|
|
497
506
|
</div>
|
|
498
507
|
</section>
|
|
499
508
|
|
|
509
|
+
<!-- TAB 9: Codebase Intelligence Radar (Desktop Exclusive) -->
|
|
510
|
+
<section id="tab-codebase" class="tab-panel">
|
|
511
|
+
<div class="panel-header">
|
|
512
|
+
<div class="panel-title-group">
|
|
513
|
+
<h2 class="panel-title">🫁 Codebase Intelligence Radar</h2>
|
|
514
|
+
<p class="panel-subtitle">Pre-analyzed codebase cache, technology stack matrix, subsystem modules, and Git workspace status.</p>
|
|
515
|
+
</div>
|
|
516
|
+
<button class="action-btn" id="btn-codebase-breathe" onclick="triggerCodebaseBreathe()">🫁 Breathe & Re-Index Codebase</button>
|
|
517
|
+
</div>
|
|
518
|
+
|
|
519
|
+
<div id="codebase-breathing-bar" class="breathing-progress-bar hidden">
|
|
520
|
+
<div class="breathing-pulse-indicator">✨ ANTRI is breathing... Analyzing codebase architecture & indexing context...</div>
|
|
521
|
+
</div>
|
|
522
|
+
|
|
523
|
+
<div id="codebase-dashboard-content" class="codebase-dashboard-layout">
|
|
524
|
+
<!-- Populated dynamically via loadCodebaseTab() -->
|
|
525
|
+
</div>
|
|
526
|
+
</section>
|
|
527
|
+
|
|
528
|
+
<!-- TAB 10: Code Workspace & Live File Editor (Desktop Exclusive) -->
|
|
529
|
+
<section id="tab-workspace" class="tab-panel">
|
|
530
|
+
<div class="panel-header">
|
|
531
|
+
<div class="panel-title-group">
|
|
532
|
+
<h2 class="panel-title">💻 Live Code Workspace & Playground</h2>
|
|
533
|
+
<p class="panel-subtitle">Browse workspace files, edit source code directly, and preview live HTML artifacts in real-time sandbox.</p>
|
|
534
|
+
</div>
|
|
535
|
+
<div style="display:flex;gap:8px;">
|
|
536
|
+
<button class="action-btn-secondary" onclick="loadWorkspaceTree()">⟳ Refresh Tree</button>
|
|
537
|
+
<button class="action-btn" id="btn-save-workspace-file" onclick="saveWorkspaceFile()">💾 Save File</button>
|
|
538
|
+
</div>
|
|
539
|
+
</div>
|
|
540
|
+
|
|
541
|
+
<div class="workspace-editor-layout">
|
|
542
|
+
<!-- Left: File Tree Browser -->
|
|
543
|
+
<div class="workspace-tree-sidebar">
|
|
544
|
+
<div class="tree-header">
|
|
545
|
+
<span>Workspace Files</span>
|
|
546
|
+
</div>
|
|
547
|
+
<div id="workspace-tree-list" class="workspace-tree-list">
|
|
548
|
+
<!-- Populated dynamically via JS -->
|
|
549
|
+
</div>
|
|
550
|
+
</div>
|
|
551
|
+
|
|
552
|
+
<!-- Center/Right: Code Editor & Live Preview -->
|
|
553
|
+
<div class="workspace-code-pane">
|
|
554
|
+
<div class="editor-header">
|
|
555
|
+
<span id="active-workspace-filename" class="active-file-tag">Select a file to inspect or edit</span>
|
|
556
|
+
<div class="device-toggles" id="workspace-device-toggles" style="display:none;">
|
|
557
|
+
<button class="device-btn active" onclick="setSandboxDevice('desktop')">🖥️ Desktop</button>
|
|
558
|
+
<button class="device-btn" onclick="setSandboxDevice('tablet')">📱 Tablet</button>
|
|
559
|
+
<button class="device-btn" onclick="setSandboxDevice('mobile')">📲 Mobile</button>
|
|
560
|
+
</div>
|
|
561
|
+
</div>
|
|
562
|
+
<textarea id="workspace-file-editor" class="profile-textarea code-font" placeholder="// Select a file from the left sidebar to edit..." spellcheck="false"></textarea>
|
|
563
|
+
<div id="workspace-sandbox-container" class="workspace-sandbox-container hidden">
|
|
564
|
+
<iframe id="workspace-sandbox-iframe" sandbox="allow-scripts allow-same-origin allow-popups allow-forms" class="sandbox-iframe"></iframe>
|
|
565
|
+
</div>
|
|
566
|
+
</div>
|
|
567
|
+
</div>
|
|
568
|
+
</section>
|
|
569
|
+
|
|
570
|
+
<!-- TAB 11: Autonomous Thinking Timeline (Desktop Exclusive) -->
|
|
571
|
+
<section id="tab-timeline" class="tab-panel">
|
|
572
|
+
<div class="panel-header">
|
|
573
|
+
<div class="panel-title-group">
|
|
574
|
+
<h2 class="panel-title">🧠 Autonomous Engineering Mission Control</h2>
|
|
575
|
+
<p class="panel-subtitle">Deep multi-stage thinking pipeline, architectural planning protocols, and anti-shallow code verification.</p>
|
|
576
|
+
</div>
|
|
577
|
+
<button class="action-btn" onclick="showTab('chat')">🚀 Start Coding in Studio</button>
|
|
578
|
+
</div>
|
|
579
|
+
|
|
580
|
+
<div class="thinking-timeline-layout">
|
|
581
|
+
<div class="timeline-stage-card">
|
|
582
|
+
<div class="stage-number">01</div>
|
|
583
|
+
<div class="stage-content">
|
|
584
|
+
<h3>🫁 Codebase Breathing & Intelligence Cache Retrieval</h3>
|
|
585
|
+
<p>On boot, ANTRI takes 1-2 seconds to index manifests, technology stack, directory layout, and entrypoints into active memory cache without blocking.</p>
|
|
586
|
+
<div class="stage-tags">
|
|
587
|
+
<span class="badge">1.2s Warmup</span>
|
|
588
|
+
<span class="badge">Project Radar</span>
|
|
589
|
+
<span class="badge">Git Context</span>
|
|
590
|
+
</div>
|
|
591
|
+
</div>
|
|
592
|
+
</div>
|
|
593
|
+
|
|
594
|
+
<div class="timeline-stage-card">
|
|
595
|
+
<div class="stage-number">02</div>
|
|
596
|
+
<div class="stage-content">
|
|
597
|
+
<h3>🏛️ Deep Architectural Blueprint & Type Schema Design</h3>
|
|
598
|
+
<p>Before coding, ANTRI models domain entities, DTOs, data flow, responsive breakpoints, state management, and edge cases to eliminate 4-5 line shallow codebases.</p>
|
|
599
|
+
<div class="stage-tags">
|
|
600
|
+
<span class="badge">Anti-Trivial Mandate</span>
|
|
601
|
+
<span class="badge">TypeScript Strict</span>
|
|
602
|
+
<span class="badge">State Modeling</span>
|
|
603
|
+
</div>
|
|
604
|
+
</div>
|
|
605
|
+
</div>
|
|
606
|
+
|
|
607
|
+
<div class="timeline-stage-card">
|
|
608
|
+
<div class="stage-number">03</div>
|
|
609
|
+
<div class="stage-content">
|
|
610
|
+
<h3>🧱 Modular File Scaffolding & Multi-File Generation</h3>
|
|
611
|
+
<p>Writes real physical source files directly to the project directory (<code>index.html</code>, <code>style.css</code>, <code>app.js</code>, <code>package.json</code>, components) with zero fake placeholders.</p>
|
|
612
|
+
<div class="stage-tags">
|
|
613
|
+
<span class="badge">write_file</span>
|
|
614
|
+
<span class="badge">Multi-File Architecture</span>
|
|
615
|
+
<span class="badge">Zero Placeholders</span>
|
|
616
|
+
</div>
|
|
617
|
+
</div>
|
|
618
|
+
</div>
|
|
619
|
+
|
|
620
|
+
<div class="timeline-stage-card">
|
|
621
|
+
<div class="stage-number">04</div>
|
|
622
|
+
<div class="stage-content">
|
|
623
|
+
<h3>🛡️ Defensive Engineering & High-Craft Polish</h3>
|
|
624
|
+
<p>Integrates Web Audio API sound synthesizers, keyframe animations, Chart.js visualizations, Canvas-Confetti celebrations, and comprehensive error handling.</p>
|
|
625
|
+
<div class="stage-tags">
|
|
626
|
+
<span class="badge">Web Audio API</span>
|
|
627
|
+
<span class="badge">Glassmorphism</span>
|
|
628
|
+
<span class="badge">Tactile UX</span>
|
|
629
|
+
</div>
|
|
630
|
+
</div>
|
|
631
|
+
</div>
|
|
632
|
+
|
|
633
|
+
<div class="timeline-stage-card">
|
|
634
|
+
<div class="stage-number">05</div>
|
|
635
|
+
<div class="stage-content">
|
|
636
|
+
<h3>🌐 Dual-Delivery Synergy</h3>
|
|
637
|
+
<p>Real production files safely persisted on disk for deployment & Git, plus instant interactive single-page application artifact for in-chat desktop preview.</p>
|
|
638
|
+
<div class="stage-tags">
|
|
639
|
+
<span class="badge">Disk Source Files</span>
|
|
640
|
+
<span class="badge">Live Artifact Sandbox</span>
|
|
641
|
+
<span class="badge">Instant Testing</span>
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
646
|
+
</section>
|
|
647
|
+
|
|
500
648
|
</main>
|
|
501
649
|
</div>
|
|
502
650
|
|