codedash-app 3.2.0 → 3.3.1
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/package.json +1 -1
- package/src/frontend/app.js +53 -0
- package/src/frontend/index.html +21 -0
- package/src/frontend/styles.css +15 -1
package/package.json
CHANGED
package/src/frontend/app.js
CHANGED
|
@@ -1744,6 +1744,59 @@ function focusSession(sessionId) {
|
|
|
1744
1744
|
});
|
|
1745
1745
|
}
|
|
1746
1746
|
|
|
1747
|
+
// ── Install agents ────────────────────────────────────────────
|
|
1748
|
+
|
|
1749
|
+
var AGENT_INSTALL = {
|
|
1750
|
+
claude: {
|
|
1751
|
+
name: 'Claude Code',
|
|
1752
|
+
cmd: 'curl -fsSL https://claude.ai/install.sh | bash',
|
|
1753
|
+
alt: 'npm i -g @anthropic-ai/claude-code',
|
|
1754
|
+
url: 'https://code.claude.com',
|
|
1755
|
+
},
|
|
1756
|
+
codex: {
|
|
1757
|
+
name: 'Codex CLI',
|
|
1758
|
+
cmd: 'npm i -g @openai/codex',
|
|
1759
|
+
alt: 'brew install --cask codex',
|
|
1760
|
+
url: 'https://github.com/openai/codex',
|
|
1761
|
+
},
|
|
1762
|
+
kiro: {
|
|
1763
|
+
name: 'Kiro CLI',
|
|
1764
|
+
cmd: 'curl -fsSL https://kiro.dev/install.sh | bash',
|
|
1765
|
+
alt: null,
|
|
1766
|
+
url: 'https://kiro.dev/cli/',
|
|
1767
|
+
},
|
|
1768
|
+
opencode: {
|
|
1769
|
+
name: 'OpenCode',
|
|
1770
|
+
cmd: 'curl -fsSL https://opencode.ai/install | bash',
|
|
1771
|
+
alt: 'npm i -g opencode-ai@latest',
|
|
1772
|
+
url: 'https://opencode.ai',
|
|
1773
|
+
},
|
|
1774
|
+
};
|
|
1775
|
+
|
|
1776
|
+
function installAgent(agent) {
|
|
1777
|
+
var info = AGENT_INSTALL[agent];
|
|
1778
|
+
if (!info) return;
|
|
1779
|
+
|
|
1780
|
+
var overlay = document.getElementById('confirmOverlay');
|
|
1781
|
+
document.getElementById('confirmTitle').textContent = 'Install ' + info.name;
|
|
1782
|
+
var html = '<code style="display:block;margin:8px 0;padding:10px;background:var(--bg-card);border-radius:6px;font-size:13px;cursor:pointer" onclick="navigator.clipboard.writeText(\'' + info.cmd.replace(/'/g, "\\'") + '\');document.querySelector(\'#toast\').textContent=\'Copied!\';document.querySelector(\'#toast\').classList.add(\'show\');setTimeout(function(){document.querySelector(\'#toast\').classList.remove(\'show\')},1500)">' + escHtml(info.cmd) + '</code>';
|
|
1783
|
+
if (info.alt) {
|
|
1784
|
+
html += '<span style="font-size:11px;color:var(--text-muted)">or: <code>' + escHtml(info.alt) + '</code></span><br>';
|
|
1785
|
+
}
|
|
1786
|
+
html += '<br><a href="' + info.url + '" target="_blank" style="color:var(--accent-blue);font-size:12px">' + info.url + '</a>';
|
|
1787
|
+
document.getElementById('confirmText').innerHTML = html;
|
|
1788
|
+
document.getElementById('confirmId').textContent = '';
|
|
1789
|
+
document.getElementById('confirmAction').textContent = 'Copy Install Command';
|
|
1790
|
+
document.getElementById('confirmAction').className = 'launch-btn btn-primary';
|
|
1791
|
+
document.getElementById('confirmAction').onclick = function() {
|
|
1792
|
+
navigator.clipboard.writeText(info.cmd).then(function() {
|
|
1793
|
+
showToast('Copied: ' + info.cmd);
|
|
1794
|
+
});
|
|
1795
|
+
closeConfirm();
|
|
1796
|
+
};
|
|
1797
|
+
if (overlay) overlay.style.display = 'flex';
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1747
1800
|
// ── Export/Import dialog ──────────────────────────────────────
|
|
1748
1801
|
|
|
1749
1802
|
function showExportDialog() {
|
package/src/frontend/index.html
CHANGED
|
@@ -53,10 +53,31 @@
|
|
|
53
53
|
Codex
|
|
54
54
|
</div>
|
|
55
55
|
<div class="sidebar-divider"></div>
|
|
56
|
+
<div class="sidebar-section">Install Agents</div>
|
|
57
|
+
<div class="sidebar-item small" onclick="installAgent('claude')">
|
|
58
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 17l6-6-6-6"/><path d="M12 19h8"/></svg>
|
|
59
|
+
Claude Code
|
|
60
|
+
</div>
|
|
61
|
+
<div class="sidebar-item small" onclick="installAgent('codex')">
|
|
62
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 17l6-6-6-6"/><path d="M12 19h8"/></svg>
|
|
63
|
+
Codex CLI
|
|
64
|
+
</div>
|
|
65
|
+
<div class="sidebar-item small" onclick="installAgent('kiro')">
|
|
66
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 17l6-6-6-6"/><path d="M12 19h8"/></svg>
|
|
67
|
+
Kiro CLI
|
|
68
|
+
</div>
|
|
69
|
+
<div class="sidebar-item small" onclick="installAgent('opencode')">
|
|
70
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 17l6-6-6-6"/><path d="M12 19h8"/></svg>
|
|
71
|
+
OpenCode
|
|
72
|
+
</div>
|
|
73
|
+
<div class="sidebar-divider"></div>
|
|
56
74
|
<div class="sidebar-item" onclick="showExportDialog()">
|
|
57
75
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
|
|
58
76
|
Export / Import
|
|
59
77
|
</div>
|
|
78
|
+
<div class="sidebar-author">
|
|
79
|
+
Made by <a href="https://t.me/neuraldeep" target="_blank">Valerii Kovalskii</a>
|
|
80
|
+
</div>
|
|
60
81
|
<div class="sidebar-settings">
|
|
61
82
|
<label>Terminal</label>
|
|
62
83
|
<select id="terminalSelect" onchange="saveTerminalPref(this.value)">
|
package/src/frontend/styles.css
CHANGED
|
@@ -135,6 +135,8 @@ body {
|
|
|
135
135
|
}
|
|
136
136
|
.sidebar-item:hover { background: rgba(255,255,255,0.05); color: var(--text-primary); }
|
|
137
137
|
.sidebar-item.active { color: var(--text-primary); background: rgba(255,255,255,0.08); }
|
|
138
|
+
.sidebar-item.small { padding: 6px 20px; font-size: 12px; }
|
|
139
|
+
.sidebar-item.small svg { width: 14px; height: 14px; }
|
|
138
140
|
.sidebar-item svg { width: 18px; height: 18px; opacity: 0.7; }
|
|
139
141
|
|
|
140
142
|
.sidebar-divider { height: 1px; background: var(--border); margin: 12px 20px; }
|
|
@@ -147,8 +149,20 @@ body {
|
|
|
147
149
|
color: var(--text-muted);
|
|
148
150
|
}
|
|
149
151
|
|
|
150
|
-
.sidebar-
|
|
152
|
+
.sidebar-author {
|
|
151
153
|
margin-top: auto;
|
|
154
|
+
padding: 8px 20px 0;
|
|
155
|
+
font-size: 11px;
|
|
156
|
+
text-align: center;
|
|
157
|
+
}
|
|
158
|
+
.sidebar-author a {
|
|
159
|
+
color: var(--text-muted);
|
|
160
|
+
text-decoration: none;
|
|
161
|
+
transition: color 0.15s;
|
|
162
|
+
}
|
|
163
|
+
.sidebar-author a:hover { color: var(--accent-blue); }
|
|
164
|
+
|
|
165
|
+
.sidebar-settings {
|
|
152
166
|
padding: 12px 16px;
|
|
153
167
|
border-top: 1px solid var(--border);
|
|
154
168
|
}
|