feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI - #11

Merged
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal
Jun 7, 2026
Merged

feat(terminal): open-in-terminal, running-terminals indicator + t3 open CLI#11
Ecko95 merged 4 commits into
gitsfrom
feat/gits-terminal

Conversation

@Ecko95

Copy link
Copy Markdown
Owner

Terminal & CLI

Implements the terminal/CLI features from the Better Stack T3 Code review.

Features

  • shell.openInTerminal capability wired across the stack.
  • "Open in terminal" entry added to project and thread context menus.
  • Running terminal sessions surfaced in the sidebar (indicator of active terminals).
  • t3 open <dir> CLI — open a directory in the app from the terminal (the reviewer's feat(gits): H0 confinement + verifier-critic foundation #1 wishlist item).

Verification

  • ✅ typecheck — all terminal feature code 0 errors (contracts, client-runtime, web; isolated server-file check clean)
  • ✅ lint (oxlint) — 0 errors across 17 changed files
  • ✅ tests — 57 tests across touched server + web areas

Notes

  • Pre-existing, unrelated server typecheck errors exist in GitsDevCommands.ts / HermesCliAdapter.ts (not in this changeset).
  • Deferred by design (v2): desktop single-instance lock + t3:// deeplink window focus, OpenInPicker "Terminal" parity entry.

22 files changed. Branched off gits (11 commits behind origin/gits — rebase before merge).

🤖 Generated with Claude Code

@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from 08541c8 to ac5d405CompareJune 7, 2026 10:39
Ecko95and others added 4 commits June 7, 2026 13:02
Mirror the existing shell.openInEditor vertical slice with a parallel
openInTerminal launcher: an OpenInTerminalInput contract, a per-platform
resolveTerminalLaunch/launchTerminal in ExternalLauncher (darwin/win32/WSL
plus a Linux emulator fallback list that degrades gracefully when none is
found), the shell.openInTerminal WS method, client-runtime + LocalApi
plumbing, and unit tests for resolveTerminalLaunch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the new shell.openInTerminal LocalApi into the sidebar project "..."
menu (and the thread context menu, disabled when the thread has no
workspace path) so users can open a project/thread working directory in
their system terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an aggregate runningTerminalSessionsAtom (and useRunningTerminalSessions
hook) that scans hasRunningSubprocess metadata across every environment, so a
backgrounded process (e.g. a dev server on :3000) is visible regardless of
which thread is selected. Render a "Running terminals" section in the sidebar
listing each running session with its child-command label, and make the
per-thread terminal indicator clickable; both navigate to the owning thread
and open its terminal drawer on the running session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `t3 open <path>` (and `t3 open .`) subcommand that opens a directory in
the app, equivalent to pasting a path into the in-app Open dialog. When a live
server is detected it adds/reuses a project for the path and surfaces the app
by opening its origin; otherwise it starts the server rooted at the directory
via runServerCommand with forceAutoBootstrapProjectFromCwd so the project
auto-bootstraps.
Extract the shared live-server detection/session/dispatch helpers out of
cli/project.ts into cli/liveServer.ts (per AGENTS.md no-duplicate-logic) and
have both project.ts and open.ts consume them with no behavior change. Add a
unit test for the open project reuse/create happy-path and document the command
in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Ecko95
Ecko95force-pushed the feat/gits-terminal branch from ac5d405 to b82c26eCompareJune 7, 2026 11:03
@Ecko95
Ecko95 merged commit e15ee44 into gitsJun 7, 2026
@Ecko95
Ecko95 deleted the feat/gits-terminal branch June 7, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Ecko95