Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ jobs:
if ($LASTEXITCODE) { exit $LASTEXITCODE }
node scripts/test-session-pruning-native.mjs $cli
if ($LASTEXITCODE) { exit $LASTEXITCODE }
node scripts/test-session-archive-native.mjs $cli
if ($LASTEXITCODE) { exit $LASTEXITCODE }
if ('${{ matrix.runtime }}' -eq 'latest') {
node scripts/test-session-pruning-native.mjs $cli --part-rows
if ($LASTEXITCODE) { exit $LASTEXITCODE }
Expand Down Expand Up @@ -593,6 +595,7 @@ jobs:
packages/ui/src/stores/permission-lifecycle.test.ts
packages/ui/src/stores/shell-store-reactivity.test.ts
packages/ui/src/stores/session-actions.test.ts
packages/ui/src/stores/session-archive.test.ts
packages/ui/src/stores/session-model-reconciliation.test.ts
packages/ui/src/stores/session-pruning-events.test.ts
packages/ui/src/stores/session-pruning-projection.test.ts
Expand Down
6 changes: 4 additions & 2 deletions dev-docs/OPENCODE_COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,10 @@ reasoning identity and `stores/session-actions.ts` refuses pruning
`Session.Message.Compaction.Completed` with `metadata` but no `recent`
(`compatibility/negotiate.ts`). `planner.ts` hashes the
`SessionLegacy` projection and writes surviving stored parts back unchanged
(`pruning.test.ts`). CodeNomad never archives (`session.archived`/`unarchived`
only invalidate); the UI compaction part keeps `native` (`normalizers.ts`). The
(`pruning.test.ts`). Session archive/restore uses native `session.update` with
`archived: true|false`, authoritative `time.archived` and `session.archived`/`unarchived`
events; `scripts/test-session-archive-native.mjs` covers filtered cursor pages,
idempotence and transcript/child preservation. The UI compaction part keeps `native` (`normalizers.ts`). The
packed pruning plugin declares every bare import, including `@opencode/schema`
(`package.test.ts`).

Expand Down
1 change: 1 addition & 0 deletions dev-docs/UI_SHELL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Panel toggles, floating drawers, project/right-panel tabs, the session sidebar a
- Conversation header actions (inline and in their overflow menu) offer the web preview on every platform, with Full screen added on mobile. Remote Control clients hide the preview entry while their host keeps web previews off: `/api/meta` then reports `previewsUnavailable` (`previewsUnavailable()` in `lib/server-meta.ts`). Validate with `tests/browser/header-windows.test.ts`.
- Session hierarchy geometry lives in `styles/components/session-tree.css`; connector axes follow the parent expander at every depth, including selection mode, RTL and touch layouts.
- Session search/filter mode uses flat per-session results with an optional subsession switch; filters, sorting, worktree badges and selection use each result's own identity. Normal browsing retains the session hierarchy.
- Session archive actions use native `session.update({ archived })`, serialized with other session actions, followed by an authoritative inventory refresh and flag verification. Native events project `time.archived`; stale metadata reads retain newer event authority. Normal browsing and list-cycling hide idle archived branches, keeping selected conversations and running/pending-request paths reachable. Children retain their own flags and remain independently discoverable in flat search/filter mode. The archive selector is local to that search surface (Unarchived / Archived / All), with the native flag badge and Restore action; never persist a separate archive state or treat archive as interruption/deletion. Validate `session-archive.test.ts`, `session-tree.test.ts`, browser `session-archives.test.ts` and `scripts/test-session-archive-native.mjs`.
- Project and right-panel tabs share `components/tab-scroll.tsx` and `styles/components/tab-scroll.css`. Keep their native scrollbar above upright content without mirrored transforms, negative border overlaps or permanent compositing hints. Validate shared scrollbar styling and adjoining edges at fractional zoom in the browser and isolated Electron renderer fixtures (`tests/browser/tab-chrome.test.ts`).
- The Status tab starts with the shown session's goal line (`components/session/session-goal-line.tsx`, `styles/panels/status-goal.css`) only while that session has a `/goal`: one row above the sections with the status badge (`.session-goal-badge` in `styles/components/badges.css`), the objective truncated with its full text and the reason in its tooltip (the reason is also the row's accessible description), the rounds, one Pause/Resume button that keeps focus as the status flips, and Clear. While a command runs its actions are `aria-disabled` and ignore activation, never `disabled`, so the focused button keeps keyboard focus. Never add it to `CORE_STATUS_SECTION_ITEMS` or the right-panel customization, and never show a hint, empty state or gap without a goal. Contract, commands and freshness: [OPENCODE_COMPATIBILITY.md](OPENCODE_COMPATIBILITY.md) (Session goal). Validate with `tests/browser/session-goal.test.ts`.
- Built-in right-panel tabs are constructed directly in `right-panel/core-runtime.tsx` (never add a first-party plugin loader for them); external sandboxed panels keep their independent consent/loading path.
Expand Down
6 changes: 6 additions & 0 deletions docs/help/de/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ Normales Durchsuchen ist hierarchisch; Such-/Filterergebnisse sind flache Eintr

Zurück/Vorwärts ist ein Besuchsverlauf pro Projekt-Tab und Fenster, nicht die Reihenfolge der Liste. Er bleibt im Arbeitsspeicher, überspringt nicht verfügbare/gelöschte Unterhaltungen und wird nach einem Neustart nicht wiederhergestellt. Die Auswahl einer neuen Unterhaltung nach dem Zurückgehen ersetzt den Vorwärtspfad. **Vorherige Sitzung** / **Nächste Sitzung** in der Palette durchlaufen stattdessen die sichtbare Liste.

## Archivieren und wiederherstellen {#archive}

Wählen Sie **Sitzung archivieren** in den Zeilenaktionen, um den Verlauf zu behalten und den inaktiven Zweig aus der normalen Ansicht auszublenden. Die ausgewählte Unterhaltung sowie laufende Arbeit und offene Fragen bleiben erreichbar. Archivieren beendet keine Arbeit, löscht keine Nachrichten und ändert nicht die eigenen Archivkennzeichen der Untersitzungen.

Öffnen Sie die Sitzungssuche und wählen Sie **Archivierte Sitzungen** oder **Alle Sitzungen**. Die Zeilen zeigen **Archiviert** und bieten **Sitzung wiederherstellen**. Aktivieren Sie Untersitzungen, um Kinder auch unter archivierten Eltern unabhängig zu finden. **Nicht archivierte Sitzungen** filtert nach dem eigenen Kennzeichen jeder Unterhaltung. Stellen Sie einen archivierten Vorfahren wieder her, um seinen inaktiven Zweig wieder normal anzuzeigen. Aktualisieren Sie bei unbestätigter Aktion die Liste vor einem erneuten Versuch.

## Agent, Modell und Denkaufwand wählen {#agent-model-thinking}

1. Verwenden Sie vor dem Senden die Agenten- und Modellauswahl in der Fußzeile des Eingabefelds.
Expand Down
6 changes: 6 additions & 0 deletions docs/help/en/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ Normal browsing is hierarchical; search/filter results are flat entries with eac

Back/Forward is a per-project-tab, per-window visit history, not list order. It is kept in memory, skips unavailable/deleted conversations and is not restored after restart. Selecting a new conversation after going back replaces the forward path. The palette's **Previous Session** / **Next Session** instead cycle the visible list.

## Archive and restore {#archive}

Choose **Archive session** in a session row's actions to keep its history while removing its idle branch from normal browsing. The selected conversation and conversations with running work or pending questions remain reachable. Archiving does not stop work, delete messages or change subsessions' own archive flags.

Open **Search sessions…** and choose **Archived sessions** or **All sessions** to find archived conversations. Rows show **Archived** and offer **Restore session**. Enable **Subsessions** to find children independently, including children beneath an archived parent. **Unarchived sessions** filters by each conversation's own flag. Restore an archived ancestor to bring its idle branch back into normal browsing. If an action is not confirmed, refresh the session list before trying again.

## Choose Agent, Model and Thinking {#agent-model-thinking}

1. Use the composer footer's agent and model selectors before sending.
Expand Down
6 changes: 6 additions & 0 deletions docs/help/es/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ La exploración normal es jerárquica; los resultados de búsqueda/filtro son en

Atrás/Adelante es un historial de visitas por pestaña de proyecto y ventana, no el orden de la lista. Se conserva en memoria, omite conversaciones no disponibles/eliminadas y no se restaura tras reiniciar. Seleccionar una conversación nueva después de retroceder reemplaza la ruta hacia delante. En cambio, **Sesión anterior** / **Siguiente sesión** en la paleta recorren cíclicamente la lista visible.

## Archivar y restaurar {#archive}

Elige **Archivar sesión** en las acciones de una fila para conservar su historial y ocultar su rama inactiva de la navegación normal. La conversación seleccionada y las que tienen trabajo en curso o preguntas pendientes siguen accesibles. Archivar no detiene el trabajo, no elimina mensajes ni cambia el estado de archivo propio de las subsesiones.

Abre la búsqueda de sesiones y elige **Sesiones archivadas** o **Todas las sesiones**. Las filas muestran **Archivada** y ofrecen **Restaurar sesión**. Activa las subsesiones para encontrar hijos de forma independiente, incluso bajo un padre archivado. **Sesiones sin archivar** filtra por el estado propio de cada conversación. Restaura un antecesor archivado para volver a mostrar su rama inactiva en la navegación normal. Si una acción no se confirma, actualiza la lista antes de reintentar.

## Elegir Agente, Modelo y Razonamiento {#agent-model-thinking}

1. Usa los selectores de agente y modelo del pie del editor de mensajes antes de enviar.
Expand Down
6 changes: 6 additions & 0 deletions docs/help/fr/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ La navigation normale est hiérarchique ; les résultats de recherche/filtre son

Retour/Avancer est un historique de visites par onglet de projet et par fenêtre, pas l’ordre de la liste. Il reste en mémoire, ignore les conversations indisponibles/supprimées et n’est pas restauré après redémarrage. Sélectionner une nouvelle conversation après un retour remplace le parcours suivant. **Session précédente** / **Session suivante** dans la palette parcourent plutôt la liste visible.

## Archiver et restaurer {#archive}

Choisissez **Archiver la session** dans les actions d’une ligne pour conserver son historique tout en retirant sa branche inactive de la navigation normale. La conversation sélectionnée et les conversations en cours de travail ou attendant une réponse restent accessibles. L’archivage n’arrête pas le travail, ne supprime aucun message et ne change pas l’état d’archivage propre aux sous-sessions.

Ouvrez la recherche de sessions et choisissez **Sessions archivées** ou **Toutes les sessions**. Les lignes portent la mention **Archivée** et proposent **Restaurer la session**. Activez le filtre des sous-sessions pour trouver les enfants indépendamment, y compris sous un parent archivé. **Sessions non archivées** filtre selon l’état propre à chaque conversation. Restaurez un ancêtre archivé pour retrouver sa branche inactive dans la navigation normale. Si une action n’est pas confirmée, actualisez la liste avant de réessayer.

## Choisir Agent, Modèle et Réflexion {#agent-model-thinking}

1. Utilisez les sélecteurs d’agent et de modèle du pied de la zone de saisie avant l’envoi.
Expand Down
6 changes: 6 additions & 0 deletions docs/help/he/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ CodeNomad מציג סשנים מקוריים של OpenCode כשיחות, עם ה

אחורה/קדימה הם היסטוריית ביקורים לכל לשונית פרויקט ולכל חלון, לא סדר הרשימה. היא נשמרת בזיכרון, מדלגת על שיחות לא זמינות/שנמחקו ואינה משוחזרת לאחר הפעלה מחדש. בחירת שיחה חדשה לאחר חזרה אחורה מחליפה את המסלול קדימה. **סשן קודם** / **סשן הבא** בלוח הפקודות עוברים במקום זאת במחזור ברשימה הגלויה.

## ארכיון ושחזור {#archive}

בחרו **העברה לארכיון** בפעולות השורה כדי לשמור את ההיסטוריה ולהסתיר את הענף הלא פעיל מהתצוגה הרגילה. השיחה הנבחרת ושיחות עם עבודה פעילה או שאלות ממתינות נשארות נגישות. הארכיון אינו מפסיק עבודה, מוחק הודעות או משנה את מצב הארכיון העצמי של שיחות המשנה.

פתחו את חיפוש השיחות ובחרו **שיחות בארכיון** או **כל השיחות**. השורות מציגות **בארכיון** ומציעות **שחזור שיחה**. הפעילו שיחות משנה כדי למצוא ילדים בנפרד, גם תחת הורה בארכיון. **שיחות שלא בארכיון** מסנן לפי המצב העצמי של כל שיחה. שחזרו הורה שבארכיון כדי להחזיר את הענף הלא פעיל לתצוגה הרגילה. אם פעולה לא אושרה, רעננו את הרשימה לפני ניסיון נוסף.

## בחירת סוכן, מודל וחשיבה {#agent-model-thinking}

1. השתמשו בבוררי הסוכן והמודל בשורה התחתונה של שדה הקלט לפני שליחה.
Expand Down
6 changes: 6 additions & 0 deletions docs/help/ja/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ CodeNomad は、OpenCode ネイティブのセッションを会話として表

戻る/進むは、一覧の順序ではなく、プロジェクトタブごと、ウィンドウごとの閲覧履歴です。メモリ内に保持され、利用不可/削除済みの会話はスキップし、再起動後は復元されません。戻った後に新しい会話を選ぶと、進む先の経路が置き換わります。一方、パレットの **前のセッション**/**次のセッション** は、表示中の一覧を巡回します。

## アーカイブと復元 {#archive}

行の操作で **セッションをアーカイブ** を選ぶと、履歴を保持して通常の一覧から非アクティブな枝を隠します。選択中の会話、実行中の作業、回答待ちの質問がある会話には引き続きアクセスできます。アーカイブは作業を停止せず、メッセージを削除せず、子セッション自身のアーカイブ状態も変更しません。

セッション検索を開き、**アーカイブ済みのセッション** または **すべてのセッション** を選びます。行には **アーカイブ済み** と表示され、**セッションを復元** を選べます。子セッションの表示を有効にすると、アーカイブされた親の下でも個別に検索できます。**未アーカイブのセッション** は各会話自身の状態で絞り込みます。非アクティブな枝を通常の一覧に戻すには、アーカイブされた祖先を復元してください。操作を確認できない場合は、再試行する前に一覧を更新してください。

## エージェント、モデル、思考を選ぶ {#agent-model-thinking}

1. 送信前に、入力欄フッターのエージェントとモデルのセレクターを使用します。
Expand Down
6 changes: 6 additions & 0 deletions docs/help/ne/conversations.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ CodeNomad ले नेटिभ OpenCode सत्रलाई कुराक

Back/Forward प्रति-परियोजना-ट्याब, प्रति-विन्डो भ्रमण इतिहास हो, सूची क्रम होइन। यो memory मा रहन्छ, अनुपलब्ध/मेटिएका कुराकानी छोड्छ र पुनःसुरुवातपछि फर्किँदैन। पछाडि गएपछि नयाँ कुराकानी चयन गर्दा अगाडिको मार्ग बदलिन्छ। प्यालेटका **अघिल्लो सत्र** / **अर्को सत्र** ले भने देखिएको सूची घुमाउँछन्।

## अभिलेख र पुनर्स्थापना {#archive}

इतिहास राख्दै निष्क्रिय शाखालाई सामान्य सूचीबाट लुकाउन पङ्क्तिको कार्यमा **सत्र अभिलेखमा राख्नुहोस्** रोज्नुहोस्। चयन गरिएको संवाद, चलिरहेको काम र उत्तर पर्खिरहेका प्रश्न भएका संवाद पहुँचयोग्य रहन्छन्। अभिलेखमा राख्दा काम रोकिन्न, सन्देश मेटिँदैन र उपसत्रको आफ्नै अभिलेख स्थिति बदलिँदैन।

सत्र खोज खोलेर **अभिलेखमा राखिएका सत्रहरू** वा **सबै सत्रहरू** रोज्नुहोस्। पङ्क्तिमा **अभिलेखमा** देखिन्छ र **सत्र पुनर्स्थापना गर्नुहोस्** उपलब्ध हुन्छ। अभिलेखमा रहेको मूल सत्रका उपसत्रसमेत अलग खोज्न उपसत्र विकल्प खोल्नुहोस्। **अभिलेखमा नराखिएका सत्रहरू** ले हरेक संवादको आफ्नै स्थिति प्रयोग गर्छ। निष्क्रिय शाखालाई सामान्य सूचीमा फर्काउन अभिलेखमा रहेको पूर्वज सत्र पुनर्स्थापना गर्नुहोस्। कार्य पुष्टि नभए फेरि प्रयास गर्नुअघि सूची ताजा गर्नुहोस्।

## Agent, Model र Thinking रोज्नुहोस् {#agent-model-thinking}

1. पठाउनुअघि कम्पोजर footer का agent र model selector प्रयोग गर्नुहोस्।
Expand Down
Loading
Loading