diff --git a/.gitignore b/.gitignore
index cb9a35f..e7ce2ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,13 @@
build/bin/
dist/
+# ── VSCode extensions: platform-specific build artifacts (never commit) ────
+# The Go bridge is compiled per-host by vscode/build.sh and staged into each
+# extension's bin/ — committing it ships a binary for the wrong OS/arch.
+vscode/bin/
+vscode/dist/
+vscode/*/bin/
+
# ── Build platform resources (tracked — icons, plists, manifests) ─────────
# build/darwin/, build/windows/, build/linux/ are tracked for icons & metadata
diff --git a/vscode/bin/nexus-vscode-bridge b/vscode/bin/nexus-vscode-bridge
deleted file mode 100755
index e52950b..0000000
Binary files a/vscode/bin/nexus-vscode-bridge and /dev/null differ
diff --git a/vscode/leviathan/bin/nexus-vscode-bridge b/vscode/leviathan/bin/nexus-vscode-bridge
deleted file mode 100755
index e52950b..0000000
Binary files a/vscode/leviathan/bin/nexus-vscode-bridge and /dev/null differ
diff --git a/vscode/leviathan/extension.js b/vscode/leviathan/extension.js
index e6c5d88..84e5622 100644
--- a/vscode/leviathan/extension.js
+++ b/vscode/leviathan/extension.js
@@ -69,6 +69,10 @@ class Bridge {
if (!fs.existsSync(bridgePath)) {
throw new Error(`Bridge executable not found: ${bridgePath}. Run vscode/build.sh first.`);
}
+ // VSIX extraction does not always preserve the executable bit, so ensure it.
+ if (process.platform !== 'win32') {
+ try { fs.chmodSync(bridgePath, 0o755); } catch (_) { /* best effort */ }
+ }
this.proc = cp.spawn(bridgePath, ['-listen', '127.0.0.1:0'], {
stdio: ['ignore', 'pipe', 'pipe'],
windowsHide: true
@@ -776,12 +780,19 @@ class ToolPanel {
h1 { margin: 0; font-size: 15px; }
.title-wrap { min-width: 0; }
.file-state { color: var(--vscode-descriptionForeground); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+ header button, .actions button { border: 1px solid var(--vscode-button-border, transparent); background: var(--vscode-button-secondaryBackground); color: var(--vscode-button-secondaryForeground); }
+ header button:hover, .actions button:hover { background: var(--vscode-button-secondaryHoverBackground, var(--vscode-button-secondaryBackground)); }
main { display: grid; grid-template-columns: minmax(260px, 360px) 1fr; height: calc(100vh - 58px); }
- textarea { width: calc(100% - 24px); height: calc(100% - 66px); margin: 12px; resize: none; color: var(--vscode-input-foreground); background: var(--vscode-input-background); border: 1px solid var(--vscode-input-border); font-family: var(--vscode-editor-font-family); }
- .left { border-right: 1px solid var(--vscode-panel-border); }
- .actions { display: flex; gap: 6px; padding: 0 12px 12px; }
- button { padding: 5px 10px; }
+ .left { border-right: 1px solid var(--vscode-panel-border); display: flex; flex-direction: column; min-height: 0; min-width: 0; }
+ .params-head { padding: 12px 12px 6px; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--vscode-descriptionForeground); }
+ textarea { flex: 1; margin: 0 12px; resize: none; color: var(--vscode-input-foreground); background: var(--vscode-input-background); border: 1px solid var(--vscode-input-border); padding: 8px; box-sizing: border-box; font-family: var(--vscode-editor-font-family, monospace); font-size: 12px; }
+ textarea:focus { outline: none; border-color: var(--vscode-focusBorder); }
+ .actions { display: flex; gap: 6px; padding: 10px 12px; }
+ button { padding: 5px 10px; cursor: pointer; }
+ button.primary { background: var(--vscode-button-background); color: var(--vscode-button-foreground); border-color: var(--vscode-button-border, transparent); }
+ button.primary:hover { background: var(--vscode-button-hoverBackground, var(--vscode-button-background)); }
#out { margin: 0; padding: 12px; overflow: auto; height: calc(100% - 24px); box-sizing: border-box; }
+ .out-empty { color: var(--vscode-descriptionForeground); }
table { border-collapse: collapse; width: 100%; margin: 0 0 12px; }
th, td { border: 1px solid var(--vscode-panel-border); padding: 4px 6px; text-align: left; vertical-align: top; font-family: var(--vscode-editor-font-family); font-size: 12px; }
th { background: var(--vscode-editorWidget-background); position: sticky; top: 0; }
@@ -800,15 +811,20 @@ class ToolPanel {
+ Parameters (JSON)
-
+
- Run the tool to see results.
+ Adjust the parameters and select Run to see results.
-
+
connecting
@@ -858,6 +962,12 @@ class GitHubPanel {
.repo { border: 1px solid var(--vscode-panel-border); padding: 8px; }
.repo h3 { margin: 0 0 4px; font-size: 14px; }
.meta { color: var(--vscode-descriptionForeground); font-size: 12px; }
+ button { border: 1px solid var(--vscode-button-border, transparent); background: var(--vscode-button-secondaryBackground); color: var(--vscode-button-secondaryForeground); cursor: pointer; }
+ button:hover { background: var(--vscode-button-secondaryHoverBackground, var(--vscode-button-secondaryBackground)); }
+ button.primary { background: var(--vscode-button-background); color: var(--vscode-button-foreground); }
+ button.primary:hover { background: var(--vscode-button-hoverBackground, var(--vscode-button-background)); }
+ input:focus, select:focus { outline: none; border-color: var(--vscode-focusBorder); }
+ .repo p { display: flex; gap: 6px; margin: 8px 0 0; }
@@ -951,13 +1061,18 @@ class IRCPanel {
#target { width: 140px; }
#message { flex: 1; }
#log { height: calc(100vh - 92px); overflow: auto; padding: 8px; font-family: var(--vscode-editor-font-family), monospace; white-space: pre-wrap; }
- .status { color: var(--vscode-descriptionForeground); }
+ .status { color: var(--vscode-descriptionForeground); align-self: center; }
+ button { border: 1px solid var(--vscode-button-border, transparent); background: var(--vscode-button-secondaryBackground); color: var(--vscode-button-secondaryForeground); padding: 5px 10px; cursor: pointer; }
+ button:hover { background: var(--vscode-button-secondaryHoverBackground, var(--vscode-button-secondaryBackground)); }
+ button.primary { background: var(--vscode-button-background); color: var(--vscode-button-foreground); }
+ button.primary:hover { background: var(--vscode-button-hoverBackground, var(--vscode-button-background)); }
+ input:focus { outline: none; border-color: var(--vscode-focusBorder); }
-
+
diff --git a/vscode/nexus/media/nexus.svg b/vscode/nexus/media/nexus.svg
index ad12f7e..a92f1b6 100644
--- a/vscode/nexus/media/nexus.svg
+++ b/vscode/nexus/media/nexus.svg
@@ -1,9 +1,5 @@
-