fix: Project action terminal lifecycle (#3287)

* fix(terminal): make command sessions own action lifecycle

* fix(ui): reconcile project action terminal state

* feat(ui): show running project actions in terminal tabs

* feat(ui): run project actions from linked worktrees

* fix(ui): guard project action reconciliation

* fix(ui): scope project action preview fallback

* fix(ui): default project actions to worktrees

* fix(ui): reveal project action terminals

* fix(ui): retain terminal output after snapshot replay

* fix(ui): restore running action terminals on revisit
This commit is contained in:
Matt Visnovsky
2026-09-05 12:04:36 +03:00
committed by GitHub
parent 58dfc789a2
commit 4e0eed717d
53 changed files with 5194 additions and 608 deletions
@@ -449,6 +449,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': 'Aktionsname',
'settings.projects.actions.field.command': 'Befehl',
'settings.projects.actions.field.commandPlaceholder': 'z. B. bun run lint',
'settings.projects.actions.runIn.label': 'Ausführen in',
'settings.projects.actions.runIn.info': 'Legt fest, wo diese Aktion ausgeführt wird, wenn sie aus einem verknüpften Worktree gestartet wird.',
'settings.projects.actions.runIn.project': 'Übergeordneter Checkout',
'settings.projects.actions.runIn.worktree': 'Aktueller Worktree',
'settings.projects.actions.runIn.aria': 'Arbeitsverzeichnis dieser Aktion',
'settings.projects.actions.field.autoOpenUrl': 'URL automatisch öffnen',
'settings.projects.actions.field.autoOpenUrlForAria': 'URL für {title} automatisch öffnen',
'settings.projects.actions.field.autoOpenUrlDescription': 'URL aus der Ausgabe oder benutzerdefinierte URL unten öffnen',
@@ -470,6 +470,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': 'Action name',
'settings.projects.actions.field.command': 'Command',
'settings.projects.actions.field.commandPlaceholder': 'e.g. bun run lint',
'settings.projects.actions.runIn.label': 'Run in',
'settings.projects.actions.runIn.info': 'Choose where this action runs when started from a linked worktree.',
'settings.projects.actions.runIn.project': 'Parent checkout',
'settings.projects.actions.runIn.worktree': 'Current worktree',
'settings.projects.actions.runIn.aria': 'Working directory for this action',
'settings.projects.actions.field.autoOpenUrl': 'Auto-open URL',
'settings.projects.actions.field.autoOpenUrlForAria': 'Auto-open URL for {title}',
'settings.projects.actions.field.autoOpenUrlDescription': 'Open URL from output or custom URL below',
@@ -438,6 +438,11 @@ export const settingsDict = {
"settings.projects.actions.field.actionNamePlaceholder": "Nombre de la acción",
"settings.projects.actions.field.command": "Comando",
"settings.projects.actions.field.commandPlaceholder": "p. ej. bun run lint",
"settings.projects.actions.runIn.label": "Ejecutar en",
"settings.projects.actions.runIn.info": "Elige dónde se ejecuta esta acción cuando se inicia desde un worktree vinculado.",
"settings.projects.actions.runIn.project": "Checkout principal",
"settings.projects.actions.runIn.worktree": "Worktree actual",
"settings.projects.actions.runIn.aria": "Directorio de trabajo de esta acción",
"settings.projects.actions.field.autoOpenUrl": "Abrir URL automáticamente",
"settings.projects.actions.field.autoOpenUrlForAria": "Abrir URL automáticamente para {title}",
"settings.projects.actions.field.autoOpenUrlDescription": "Abrir URL desde la salida o la URL personalizada de abajo",
@@ -361,6 +361,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': 'Nom de l\'action',
'settings.projects.actions.field.command': 'Commande',
'settings.projects.actions.field.commandPlaceholder': 'p. ex. bun install',
'settings.projects.actions.runIn.label': 'Exécuter dans',
'settings.projects.actions.runIn.info': 'Choisissez où cette action s\'exécute lorsqu\'elle est lancée depuis un worktree lié.',
'settings.projects.actions.runIn.project': 'Checkout parent',
'settings.projects.actions.runIn.worktree': 'Worktree courant',
'settings.projects.actions.runIn.aria': 'Répertoire d\'exécution de cette action',
'settings.projects.actions.field.autoOpenUrl': 'Ouverture automatique de l’URL',
'settings.projects.actions.field.autoOpenUrlForAria': 'Ouverture automatique de l’URL pour {title}',
'settings.projects.actions.field.autoOpenUrlDescription': 'Ouvrir l’URL détectée dans la sortie, ou l’URL personnalisée ci-dessous',
@@ -471,6 +471,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': 'アクション名',
'settings.projects.actions.field.command': 'コマンド',
'settings.projects.actions.field.commandPlaceholder': '例: bun run lint',
'settings.projects.actions.runIn.label': '実行場所',
'settings.projects.actions.runIn.info': 'リンクされたワークツリーから起動したときにこのアクションを実行する場所を選択します。',
'settings.projects.actions.runIn.project': '親チェックアウト',
'settings.projects.actions.runIn.worktree': '現在のワークツリー',
'settings.projects.actions.runIn.aria': 'このアクションの作業ディレクトリ',
'settings.projects.actions.field.autoOpenUrl': 'URL を自動開く',
'settings.projects.actions.field.autoOpenUrlForAria': '{title} の URL を自動開く',
'settings.projects.actions.field.autoOpenUrlDescription': '出力または以下のカスタム URL から URL を開く',
@@ -438,6 +438,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': '작업 이름',
'settings.projects.actions.field.command': '명령어',
'settings.projects.actions.field.commandPlaceholder': '예: bun run lint',
'settings.projects.actions.runIn.label': '실행 위치',
'settings.projects.actions.runIn.info': '연결된 워크트리에서 시작할 때 이 작업을 실행할 위치를 선택합니다.',
'settings.projects.actions.runIn.project': '상위 체크아웃',
'settings.projects.actions.runIn.worktree': '현재 워크트리',
'settings.projects.actions.runIn.aria': '이 작업의 작업 디렉터리',
'settings.projects.actions.field.autoOpenUrl': 'URL 자동 열기',
'settings.projects.actions.field.autoOpenUrlForAria': '{title}의 URL 자동 열기',
'settings.projects.actions.field.autoOpenUrlDescription': '명령 출력에서 감지한 URL 또는 아래의 사용자 정의 URL을 엽니다',
@@ -1368,6 +1368,11 @@ export const settingsDict = {
'settings.projects.actions.field.autoOpenUrlForAria': 'Automatycznie otwieraj URL dla {title}',
'settings.projects.actions.field.command': 'Polecenie',
'settings.projects.actions.field.commandPlaceholder': 'np. bun run lint',
'settings.projects.actions.runIn.label': 'Uruchom w',
'settings.projects.actions.runIn.info': 'Wybierz, gdzie uruchamiać tę akcję po uruchomieniu z połączonego worktree.',
'settings.projects.actions.runIn.project': 'Nadrzędny checkout',
'settings.projects.actions.runIn.worktree': 'Bieżący worktree',
'settings.projects.actions.runIn.aria': 'Katalog roboczy tej akcji',
'settings.projects.actions.field.desktopSshForward': 'Przekierowanie SSH pulpitu',
'settings.projects.actions.field.iconAria': 'Ikona {icon}',
'settings.projects.actions.field.overrideUrlPlaceholder': 'Nadpisz URL (opcjonalnie)',
@@ -438,6 +438,11 @@ export const settingsDict = {
"settings.projects.actions.field.actionNamePlaceholder": "Nome da ação",
"settings.projects.actions.field.command": "Comando",
"settings.projects.actions.field.commandPlaceholder": "ex.: bun run lint",
"settings.projects.actions.runIn.label": "Executar em",
"settings.projects.actions.runIn.info": "Escolha onde esta ação é executada quando iniciada a partir de um worktree vinculado.",
"settings.projects.actions.runIn.project": "Checkout pai",
"settings.projects.actions.runIn.worktree": "Worktree atual",
"settings.projects.actions.runIn.aria": "Diretório de trabalho desta ação",
"settings.projects.actions.field.autoOpenUrl": "Abrir URL automaticamente",
"settings.projects.actions.field.autoOpenUrlForAria": "Abrir URL automaticamente para {title}",
"settings.projects.actions.field.autoOpenUrlDescription": "Abrir URL da saída ou a URL personalizada abaixo",
@@ -466,6 +466,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': 'Eylem adı',
'settings.projects.actions.field.command': 'Komut',
'settings.projects.actions.field.commandPlaceholder': 'örn. bun run lint',
'settings.projects.actions.runIn.label': 'Çalıştırma konumu',
'settings.projects.actions.runIn.info': 'Bağlı bir worktree\'den başlatıldığında bu eylemin nerede çalışacağını seçin.',
'settings.projects.actions.runIn.project': 'Üst checkout',
'settings.projects.actions.runIn.worktree': 'Geçerli worktree',
'settings.projects.actions.runIn.aria': 'Bu eylemin çalışma dizini',
'settings.projects.actions.field.autoOpenUrl': 'URL\'yi otomatik aç',
'settings.projects.actions.field.autoOpenUrlForAria': '{title} için URL\'yi otomatik aç',
'settings.projects.actions.field.autoOpenUrlDescription': 'Çıktıdaki URL\'yi veya aşağıdaki özel URL\'yi aç',
@@ -438,6 +438,11 @@ export const settingsDict = {
"settings.projects.actions.field.actionNamePlaceholder": "Назва дії",
"settings.projects.actions.field.command": "Команда",
"settings.projects.actions.field.commandPlaceholder": "напр. bun run lint",
"settings.projects.actions.runIn.label": "Запускати в",
"settings.projects.actions.runIn.info": "Виберіть, де запускати цю дію, коли її запущено з пов'язаного worktree.",
"settings.projects.actions.runIn.project": "Батьківський checkout",
"settings.projects.actions.runIn.worktree": "Поточний worktree",
"settings.projects.actions.runIn.aria": "Робоча тека для цієї дії",
"settings.projects.actions.field.autoOpenUrl": "Автоматичне відкриття URL",
"settings.projects.actions.field.autoOpenUrlForAria": "Автоматичне відкриття URL для {title}",
"settings.projects.actions.field.autoOpenUrlDescription": "Відкрити URL із виведення або власний URL нижче",
@@ -438,6 +438,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': '操作名称',
'settings.projects.actions.field.command': '命令',
'settings.projects.actions.field.commandPlaceholder': '例如 bun run lint',
'settings.projects.actions.runIn.label': '运行位置',
'settings.projects.actions.runIn.info': '选择从关联 worktree 启动时此操作的运行位置。',
'settings.projects.actions.runIn.project': '父检出目录',
'settings.projects.actions.runIn.worktree': '当前 worktree',
'settings.projects.actions.runIn.aria': '此操作的工作目录',
'settings.projects.actions.field.autoOpenUrl': '自动打开 URL',
'settings.projects.actions.field.autoOpenUrlForAria': '为 {title} 自动打开 URL',
'settings.projects.actions.field.autoOpenUrlDescription': '从输出中打开 URL,或使用下面的自定义 URL',
@@ -435,6 +435,11 @@ export const settingsDict = {
'settings.projects.actions.field.actionNamePlaceholder': '操作名稱',
'settings.projects.actions.field.command': '命令',
'settings.projects.actions.field.commandPlaceholder': '例如 bun run lint',
'settings.projects.actions.runIn.label': '執行位置',
'settings.projects.actions.runIn.info': '選擇從關聯 worktree 啟動時此動作的執行位置。',
'settings.projects.actions.runIn.project': '父檢出目錄',
'settings.projects.actions.runIn.worktree': '目前 worktree',
'settings.projects.actions.runIn.aria': '此動作的工作目錄',
'settings.projects.actions.field.autoOpenUrl': '自動開啟 URL',
'settings.projects.actions.field.autoOpenUrlForAria': '為 {title} 自動開啟 URL',
'settings.projects.actions.field.autoOpenUrlDescription': '從輸出中開啟 URL,或使用下面的自訂 URL',