Skip to content

feat: add reversible session archiving and list actions - #309

Merged
pedronauck merged 13 commits into
mainfrom
session-archive
Aug 5, 2026
Merged

pedronauck merged 13 commits into
mainfrom
session-archive

Conversation

@pedronauck

@pedronauck pedronauck commented Aug 5, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Let people archive stopped sessions from either session list without deleting their history.
  • Add a three-dot row menu with state-aware Stop, Archive, Unarchive, and Delete actions, plus a collapsed Archived section.
  • Expose the same reversible archive behavior through Web, CLI, HTTP, UDS, native tools, and extension SDKs.

Changes

  • Persistence and lifecycle: add nullable, workspace-scoped archived_at metadata with append-only migration 00053; archive is idempotent, stopped-only, and separate from runtime state.
  • Catalog contract: add archive=exclude|only|include with default exclude, exact filtered totals, cursor fingerprints, and archived-row exclusion from normal metrics.
  • Runtime guards: keep archived sessions readable while rejecting prompt, attach, and resume until they are restored; hard delete remains unchanged.
  • Structured surfaces: add HTTP/UDS archive routes, compozy session archive|unarchive, list flags, native tools, extension Host API methods, and typed Go/TypeScript SDK helpers.
  • Web: add reusable row actions and delete confirmation to the agent session table and global catalog, separate normal/archived groups, and offer Unarchive from archived detail views.
  • Reliability: make bridge providers wait for HTTP route readiness, fixing a startup race found by the full gate under load.
  • Documentation: update generated references, session lifecycle/CLI/extension docs, operational recovery guidance, official Compozy skill references, QA seeds, and the control-surface parity article.

Release Notes

🎉 Features

  • Add reversible session archiving, state-aware list actions, and separate Archived groups across Web and structured control surfaces.

🧪 Testing

  • Add regression coverage and isolated QA for persistence, workspace isolation, list filters, runtime guards, SDK parity, and responsive session lists.

Migration

  • Appends SQLite migration 00053_schema.sql; existing migrations are unchanged.
  • No config keys or lifecycle-state aliases were added.
  • Existing sessions remain unarchived because archived_at is nullable.

QA

Final Status: PASS — all seven affected scenarios are terminal and the strict evidence audit has zero blockers and zero warnings.

Coverage: Three personas walked the catalog, structured-parity, and direct-open journeys across Web, CLI, HTTP, UDS, native tools, a live extension Host API client, daemon restart, and cross-workspace rejection.

Issues: 2 (Blocks-Completion: 0, Data-Loss: 0, Trust-Damage: 0, Friction: 2, Cosmetic: 0), both fixed and verified:

Visual evidence: Four deterministic Storybook captures were inspected at desktop and narrow widths for both list surfaces; no clipping, blocked controls, or unresolved structural mismatch remained. Run-scratch PNGs stay in the isolated QA lab and are indexed by the report.

Blocked / needs human: None.

Full report: 2026-08-04-session-archive.md

Compozy Impact Audit

  • Native tools: adds compozy__session_archive and compozy__session_unarchive, descriptors, schemas, toolset bindings, availability metadata, registry fixtures, and archived list filtering.
  • Extensibility and hooks: adds archive/unarchive to the extension Host API and public Go/TypeScript facades under session.write; no lifecycle hook, sidecar, registry type, or config.toml key changes.
  • Workspace data isolation: archived_at is session data owned inside one workspace. Store, manager, HTTP/UDS, CLI, native-tool, Host API, Web query/cache, and catalog-stream paths preserve workspace_id; cross-workspace reads and writes return not found.
  • Official Compozy skill: updates runtime operations, native tools, and extension authoring references for archive/unarchive and list filters.

Test plan

  • make gate-full — full make verify passed for fingerprint 19bb305b9414a085cfbf5bceaddd997943bc374e (.cache/gate/logs/full-1785904840.log).
  • Strict QA evidence audit — PASS, 0 blockers, 0 warnings.
  • Isolated real-user QA — seven affected scenarios passed; two discovered regressions were fixed and re-walked.
  • Visual verification — both list surfaces inspected at 1440×900 and 320×800.
  • QA teardown — daemon, extension, Vite, Storybook, and browser stopped; teardown.json records clean: true.

Summary by CodeRabbit

  • New Features
    • Added session archiving and unarchiving across the API, CLI, SDKs, native tools, and web app.
    • Archived sessions display archive status and timestamps, with archive filtering available in session lists.
    • Added archive, unarchive, stop, and delete actions with confirmation and progress states.
    • Archived sessions are excluded from active, resumable, and attachable session views by default.
  • Bug Fixes
    • Improved provider startup reliability by waiting for routes to become ready before serving requests.

@vercel

vercel Bot commented Aug 5, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
compozy-site Ready Ready Preview Aug 5, 2026 4:21pm

Request Review

@greptile-apps

greptile-apps Bot commented Aug 5, 2026 •

Copy link
Copy Markdown

Too many files changed for review (208 files, 100 file limit).

Bypass the limit by tagging @greptile-apps to review.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This change adds session archive and unarchive support across storage, APIs, clients, tools, SDKs, and web interfaces. It also adds route-readiness gating for provider HTTP servers.

Changes

Session archival

Layer / File(s) Summary
Archive storage and catalog filtering
internal/session/..., internal/store/...
Sessions now store ArchivedAt. Archive filters support exclude, only, and include. Archived sessions cannot resume or attach.
API, daemon, and CLI operations
internal/api/..., internal/daemon/..., internal/cli/...
HTTP, UDS, daemon, and CLI commands support archiving and unarchiving sessions.
Host API, SDK, and native tools
internal/extension/..., internal/tools/..., sdk/go/..., sdk/typescript/...
Host API contracts, permissions, SDK methods, and native tools expose archive operations and archive metadata.
Web data and lifecycle actions
web/src/systems/session/..., web/src/hooks/routes/...
Web adapters and hooks call archive endpoints, track pending actions, invalidate queries, and report errors.
Web session views
web/src/systems/agent/..., web/src/systems/os/...
Agent and workspace views show archived sessions, archive status, pagination, lifecycle menus, unarchive actions, and delete dialogs.

Provider route readiness

Layer / File(s) Summary
Readiness-gated provider HTTP servers
internal/bridgesdk/provider_http.go, extensions/bridges/*
Provider HTTP requests wait for RoutesReady. Canceled requests receive HTTP 503. Provider lifecycles now pass the readiness channel.
Readiness validation
internal/bridgesdk/provider_http_test.go
Tests cover ready startup configuration and rejection of missing route readiness.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant API
  participant SessionManager
  participant SessionStore
  Client->>API: POST archive or unarchive session
  API->>SessionManager: Archive or Unarchive(workspaceID, sessionID)
  SessionManager->>SessionStore: Read or update ArchivedAt
  SessionStore-->>SessionManager: Updated session metadata
  SessionManager-->>API: SessionInfo
  API-->>Client: SessionPayload with archived_at
Loading
sequenceDiagram
  participant Provider
  participant ProviderHTTPServer
  participant Lifecycle
  Provider->>ProviderHTTPServer: Start configured routes
  ProviderHTTPServer->>Lifecycle: Wait for RoutesReady
  Lifecycle-->>ProviderHTTPServer: RoutesReady closes
  ProviderHTTPServer-->>Provider: Serve provider request
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.26% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: reversible session archiving and related list actions.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch session-archive

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 5, 2026 •

Copy link
Copy Markdown
Contributor

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit 1651c1c.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🧹 Nitpick comments (3)
web/src/systems/agent/components/agent-sessions-list.tsx (1)

222-226: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use Eyebrow for the archive label.

Line 224 renders "ARCHIVED" directly in Pill. Wrap the label with Eyebrow, or apply the eyebrow utility class.

As per coding guidelines, “Every uppercase label must use Eyebrow from @compozy/ui or the eyebrow utility class.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/src/systems/agent/components/agent-sessions-list.tsx` around lines 222 -
226, Update the archived-session label in the session list rendering to use the
`Eyebrow` component from `@compozy/ui` or the `eyebrow` utility class around
“ARCHIVED,” while preserving the existing `Pill` styling and archive condition.

Source: Coding guidelines

internal/api/core/handlers_test.go (1)

385-426: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add t.Parallel to this subtest.

Call t.Parallel() as the first statement in this subtest. The test fixture is local to TestBaseHandlersSessionEndpoints, and the project test convention requires parallel tests by default.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/api/core/handlers_test.go` around lines 385 - 426, Add t.Parallel()
as the first statement inside the “Should archive and restore stopped sessions”
subtest, before any requests or fixture usage, while preserving the existing
archive and unarchive assertions.

Sources: Coding guidelines, Path instructions

internal/tools/builtin/builtin_test.go (1)

358-358: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Assert the archive schema instead of raw JSON text.

The strings.Contains check does not prove that archive is a string enum with exclude, only, and include. Decode the input schema and assert the property type and exact enum values.

As per path instructions, tests must verify behavior outcomes with meaningful assertions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/tools/builtin/builtin_test.go` at line 358, Replace the raw JSON
strings.Contains check in the sessionList schema assertions with decoded-schema
assertions: verify the archive property is a string and its enum exactly
contains exclude, only, and include. Keep the test focused on the observable
InputSchema behavior and use meaningful assertions for both type and allowed
values.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/api/core/session_workspace_internal_test.go`:
- Around line 233-241: Wrap the archive error mapping loop in
statusForSessionError tests with a named subtest using t.Run("Should map archive
errors to conflict", ...), keeping the existing assertions and error cases
unchanged.

In `@internal/bridgesdk/provider_http_test.go`:
- Around line 114-119: Update the NewProviderHTTPServer test case for missing
routes readiness to assert the specific error “bridgesdk: provider http routes
readiness is required” (or verify the corresponding sentinel with errors.Is)
instead of only checking that an error was returned; preserve the existing
failure message for a nil error.

In `@internal/bridgesdk/provider_http.go`:
- Around line 95-103: Update ProviderHTTPServer.serveWhenRoutesReady to also
select on a server-owned shutdown signal, and close or cancel that signal from
ProviderHTTPServer.Shutdown. When shutdown occurs before RoutesReady, return the
existing service-unavailable response promptly; preserve the current route-ready
and request-context behavior, and add coverage with RoutesReady left open.

In `@internal/cli/client_test.go`:
- Around line 2016-2025: The added archive lifecycle and archive query tests are
not organized as required named subtests. Update the relevant test functions
around the archive response cases and the additional locations to use t.Run with
“Should...” names, keeping lifecycle assertions together in one subtest and
query serialization assertions in a separate subtest.

In `@internal/cli/session_test.go`:
- Around line 778-820: Wrap each affected test case in a named t.Run subtest
using a “Should …” name, retaining t.Parallel() inside each independent subtest:
internal/cli/session_test.go lines 778-820 for archive/unarchive behavior, lines
822-836 for conflicting archive-filter validation, lines 752-761 for the
server-owned page-filter case, and internal/store/globaldb/global_db_test.go
line 2871 for the schema-column case. No direct changes are required outside
these test cases.

In `@internal/daemon/daemon_test.go`:
- Around line 1352-1364: Update the “Should reject session archive operations
when source does not support them” test around archiveManager.Archive to also
invoke Unarchive, and assert both operations return the specific
unsupported-operation error using the project’s required error assertion style,
such as ErrorContains or ErrorAs, rather than only checking that an error is
non-nil.

In `@internal/extension/host_api_test.go`:
- Around line 528-595: Wrap the archive round-trip body in
internal/extension/host_api_test.go:528-595 with t.Run("Should archive and
unarchive a stopped session", ...). In
internal/daemon/native_tools_test.go:5978-6000, split the archive test cases
into separate named subtests t.Run("Should archive a session", ...) and
t.Run("Should unarchive a session", ...), preserving each case’s existing
assertions and behavior.

In `@internal/session/manager_resume.go`:
- Around line 27-33: Unify Archive and Resume behind one atomic transition guard
so archive cannot proceed after Resume enters beginSessionResume. Update
Archive’s StateStopped validation and Resume’s
requireSessionUnarchived/resumeLifecycle.runs flow to use the same
synchronization boundary, preserving valid state checks. Add a concurrent
archive/resume test covering this race.

In `@internal/store/globaldb/global_db_session_archive.go`:
- Around line 52-63: Make archive and restore updates idempotent: in the session
archive update query in internal/store/globaldb/global_db_session_archive.go
around lines 52-63, require archived_at IS NULL when archiving and archived_at
IS NOT NULL when restoring, preserving the existing re-read path when no row
changes; in internal/session/manager_transition_test.go around lines 533-539,
return current when archived already matches current.ArchivedAt before assigning
a new timestamp.

In `@internal/tools/builtin/builtin_test.go`:
- Around line 169-174: Replace the loop in the archive schema test with separate
t.Run("Should...") subtests for ToolIDSessionArchive and ToolIDSessionUnarchive.
Call t.Parallel() within each subtest, then invoke
assertSessionTargetMutationSchema with the corresponding descriptor so failures
identify the affected tool.

In `@internal/tools/builtin/sessions_archive.go`:
- Line 36: Update sessionArchiveDescriptor() and sessionUnarchiveDescriptor() to
assign a SessionStatus-compatible output schema instead of
sessionCreateOutputSchema. Ensure the schema exposes archived_at and the other
fields expected by the SDK SessionStatus contract while preserving the existing
archive and unarchive behavior.

In `@web/src/systems/session/components/session-delete-dialog.tsx`:
- Around line 33-34: Update the Dialog onOpenChange handling in the delete
dialog component to ignore close requests while isDeleting is true, including
Escape and outside-pointer events, while preserving normal onOpenChange behavior
when deletion is not pending.

In `@web/src/systems/session/hooks/use-session-actions.ts`:
- Around line 97-121: Update the mutationFn implementations in useArchiveSession
and useUnarchiveSession to accept the mutation context’s default AbortSignal and
pass it to archiveSession and unarchiveSession, preserving workspace resolution
and session IDs. Ensure the API calls receive that signal so cancellation
propagates through the mutation lifecycle; update onSettled only if required by
the resulting abort handling.

---

Nitpick comments:
In `@internal/api/core/handlers_test.go`:
- Around line 385-426: Add t.Parallel() as the first statement inside the
“Should archive and restore stopped sessions” subtest, before any requests or
fixture usage, while preserving the existing archive and unarchive assertions.

In `@internal/tools/builtin/builtin_test.go`:
- Line 358: Replace the raw JSON strings.Contains check in the sessionList
schema assertions with decoded-schema assertions: verify the archive property is
a string and its enum exactly contains exclude, only, and include. Keep the test
focused on the observable InputSchema behavior and use meaningful assertions for
both type and allowed values.

In `@web/src/systems/agent/components/agent-sessions-list.tsx`:
- Around line 222-226: Update the archived-session label in the session list
rendering to use the `Eyebrow` component from `@compozy/ui` or the `eyebrow`
utility class around “ARCHIVED,” while preserving the existing `Pill` styling
and archive condition.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 235a3f02-46cf-4b23-b0d0-ed730191e9d3

📥 Commits

Reviewing files that changed from the base of the PR and between 7e630c6 and 37791de.

⛔ Files ignored due to path filters (42)
  • docs/articles/2026-05/03-one-daemon-four-surfaces.mdx is excluded by !**/*.mdx
  • docs/qa/_seeds/feature-stories/01_analysis_runtime-sessions.md is excluded by !**/*.md
  • docs/qa/_seeds/final-qa/_children/03-acp-sessions.md is excluded by !**/*.md
  • docs/qa/_seeds/final-qa/_children/11-api-cli-parity.md is excluded by !**/*.md
  • docs/qa/_seeds/final-qa/_children/13-docs-site.md is excluded by !**/*.md
  • docs/qa/_seeds/qa-e2e-playbook.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260805-archived-detail-unarchive-missing.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260805-session-archive-sdk-missing.md is excluded by !**/*.md
  • docs/qa/charters/CH-archive-session-catalog.md is excluded by !**/*.md
  • docs/qa/charters/CH-archive-session-structured-parity.md is excluded by !**/*.md
  • docs/qa/charters/CH-session-row-open-canary.md is excluded by !**/*.md
  • docs/qa/journeys/J-archive-session-without-deleting.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-04-session-archive.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-sessions-catalog-modal.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-011.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-012.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-014.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-082.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-archive-catalog.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-list-row-actions.md is excluded by !**/*.md
  • internal/codegen/hostapi/catalog.json is excluded by !**/*.json
  • internal/store/globaldb/schema/migrations/atlas.sum is excluded by !**/*.sum, !**/*.sum
  • internal/tools/builtin/testdata/native-tool-catalog.json is excluded by !**/*.json
  • openapi/compozy.json is excluded by !**/*.json
  • packages/site/content/docs/cli/session/archive.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/list.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/session/unarchive.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/extensions/permissions.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/operations/database.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/operations/troubleshooting.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/sessions/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/sessions/lifecycle.mdx is excluded by !**/*.mdx
  • sdk/typescript/src/generated/contracts.ts is excluded by !**/generated/**, !**/generated/**
  • skills/compozy/references/extension-authoring.md is excluded by !**/*.md
  • skills/compozy/references/native-tools.md is excluded by !**/*.md
  • skills/compozy/references/runtime-operations.md is excluded by !**/*.md
  • web/src/generated/compozy-openapi.d.ts is excluded by !**/generated/**, !**/generated/**, !**/*.d.ts
  • web/src/systems/agent/components/stories/agent-sessions-list.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/os/components/stories/attention-surfaces.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/os/components/stories/os-menubar.stories.tsx is excluded by !**/*.stories.tsx
📒 Files selected for processing (143)
  • extensions/bridges/discord/discord_runtime.go
  • extensions/bridges/gchat/gchat_runtime.go
  • extensions/bridges/github/provider.go
  • extensions/bridges/linear/provider.go
  • extensions/bridges/slack/provider.go
  • extensions/bridges/teams/teams_runtime.go
  • extensions/bridges/telegram/telegram_runtime.go
  • extensions/bridges/whatsapp/provider.go
  • internal/api/contract/session_runtime_payloads.go
  • internal/api/core/conversions.go
  • internal/api/core/handlers_test.go
  • internal/api/core/interfaces.go
  • internal/api/core/session_archive.go
  • internal/api/core/session_catalog.go
  • internal/api/core/session_manager_stub_test.go
  • internal/api/core/session_workspace.go
  • internal/api/core/session_workspace_internal_test.go
  • internal/api/core/test_helpers_test.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/session_routes.go
  • internal/api/spec/registry_session_archive.go
  • internal/api/spec/registry_session_attach.go
  • internal/api/spec/registry_sessions.go
  • internal/api/spec/session_catalog.go
  • internal/api/testutil/session_stub.go
  • internal/api/testutil/session_stub_archive.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/session_routes.go
  • internal/bridgesdk/provider_http.go
  • internal/bridgesdk/provider_http_test.go
  • internal/cli/client_session_api.go
  • internal/cli/client_sessions.go
  • internal/cli/client_test.go
  • internal/cli/helpers_test.go
  • internal/cli/session_archive.go
  • internal/cli/session_catalog_client.go
  • internal/cli/session_command.go
  • internal/cli/session_list.go
  • internal/cli/session_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/host_api_session_adapter.go
  • internal/daemon/native_session_archive.go
  • internal/daemon/native_session_list.go
  • internal/daemon/native_tool_binding_groups.go
  • internal/daemon/native_tools_test.go
  • internal/extension/contract/host_api.go
  • internal/extension/contract/host_api_method_aliases_gen.go
  • internal/extension/contract/host_api_method_registry_core_gen.go
  • internal/extension/contract/host_api_results.go
  • internal/extension/contract/permissions.go
  • internal/extension/host_api.go
  • internal/extension/host_api_memory_document.go
  • internal/extension/host_api_methods.go
  • internal/extension/host_api_session_archive_filter.go
  • internal/extension/host_api_sessions.go
  • internal/extension/host_api_test.go
  • internal/extension/host_api_workspace_binding.go
  • internal/extensionprotocol/host_api_methods_gen.go
  • internal/extensionprotocol/host_api_test.go
  • internal/mcp/serve_projection_decisions.go
  • internal/session/agent_metrics.go
  • internal/session/archive.go
  • internal/session/catalog_page.go
  • internal/session/manager_resume.go
  • internal/session/manager_transition.go
  • internal/session/manager_transition_test.go
  • internal/session/query.go
  • internal/session/query_test.go
  • internal/session/session.go
  • internal/session/session_info.go
  • internal/store/globaldb/global_db_session.go
  • internal/store/globaldb/global_db_session_agent_metrics.go
  • internal/store/globaldb/global_db_session_archive.go
  • internal/store/globaldb/global_db_session_index_test.go
  • internal/store/globaldb/global_db_session_page.go
  • internal/store/globaldb/global_db_session_scan.go
  • internal/store/globaldb/global_db_session_test.go
  • internal/store/globaldb/global_db_test.go
  • internal/store/globaldb/queries/session_core.sql
  • internal/store/globaldb/schema/definitions/20_sessions.sql
  • internal/store/globaldb/schema/migrations/00053_schema.sql
  • internal/store/globaldb/sqlcgen/models.go
  • internal/store/globaldb/sqlcgen/session_core.sql.go
  • internal/store/session_catalog.go
  • internal/store/session_catalog_page.go
  • internal/store/types_session.go
  • internal/toolmeta/native_entries.go
  • internal/toolmeta/registry_test.go
  • internal/tools/builtin/builtin_test.go
  • internal/tools/builtin/sessions.go
  • internal/tools/builtin/sessions_archive.go
  • internal/tools/builtin/toolsets.go
  • internal/tools/builtin_ids.go
  • sdk/go/contracts/host_contracts_gen.go
  • sdk/go/contracts/host_methods_gen.go
  • sdk/go/contracts/types_020_gen.go
  • sdk/go/host_api.go
  • sdk/go/runtime_contract_test.go
  • sdk/typescript/src/__tests__/host-api.test.ts
  • sdk/typescript/src/host-api.ts
  • web/src/hooks/routes/__tests__/use-session-page-controls.test.tsx
  • web/src/hooks/routes/use-session-page-controls.ts
  • web/src/routes/_app/__tests__/-agent-session-deeplink.router.integration.test.tsx
  • web/src/systems/agent/components/__tests__/agent-sessions-list.test.tsx
  • web/src/systems/agent/components/agent-sessions-list.tsx
  • web/src/systems/agent/components/agent-sessions-tab.tsx
  • web/src/systems/agent/hooks/__tests__/use-agent-sessions.test.tsx
  • web/src/systems/agent/hooks/use-agent-sessions.ts
  • web/src/systems/agent/lib/__tests__/fleet-signals.test.ts
  • web/src/systems/agent/routes/agent-detail-story-fixtures.ts
  • web/src/systems/network/mocks/fixtures.ts
  • web/src/systems/os/apps/agents/__tests__/use-agent-detail.test.tsx
  • web/src/systems/os/apps/agents/agent-detail-location.tsx
  • web/src/systems/os/apps/agents/use-agent-detail.ts
  • web/src/systems/os/apps/session/session-window-content.tsx
  • web/src/systems/os/apps/session/session-window-dialogs.tsx
  • web/src/systems/os/apps/session/use-session-window-controller.tsx
  • web/src/systems/os/components/__tests__/os-window-deck.test.tsx
  • web/src/systems/os/components/__tests__/sessions-modal.test.tsx
  • web/src/systems/os/components/desktop-shell.tsx
  • web/src/systems/os/components/sessions-modal.tsx
  • web/src/systems/os/hooks/__tests__/use-os-attention.test.tsx
  • web/src/systems/os/hooks/use-os-attention.ts
  • web/src/systems/os/lib/__tests__/attention-model.test.ts
  • web/src/systems/session/adapters/__tests__/session-api.test.ts
  • web/src/systems/session/adapters/session-api.ts
  • web/src/systems/session/adapters/session-archive-api.ts
  • web/src/systems/session/components/session-delete-dialog.tsx
  • web/src/systems/session/components/session-row-actions.tsx
  • web/src/systems/session/components/session-status-line.tsx
  • web/src/systems/session/hooks/__tests__/use-session-actions.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-create-dialog.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-topbar-slot.test.tsx
  • web/src/systems/session/hooks/__tests__/use-sessions.test.tsx
  • web/src/systems/session/hooks/use-session-actions.ts
  • web/src/systems/session/hooks/use-session-lifecycle-actions.ts
  • web/src/systems/session/hooks/use-session-topbar-slot.tsx
  • web/src/systems/session/index.ts
  • web/src/systems/session/lib/session-list-query.ts
  • web/src/systems/session/lib/session-running.ts
  • web/src/systems/session/mocks/fixtures.ts
  • web/src/systems/session/mocks/handlers.ts
  • web/src/systems/workspace/mocks/fixtures.ts

Comment thread internal/api/core/session_workspace_internal_test.go Outdated
Comment thread internal/bridgesdk/provider_http_test.go
Comment thread internal/bridgesdk/provider_http.go Outdated
Comment thread internal/cli/client_test.go
Comment thread internal/cli/session_test.go
Comment thread internal/store/globaldb/global_db_session_archive.go
Comment thread internal/tools/builtin/builtin_test.go Outdated
Comment thread internal/tools/builtin/sessions_archive.go Outdated
Comment thread web/src/systems/session/components/session-delete-dialog.tsx Outdated
Comment thread web/src/systems/session/hooks/use-session-actions.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/bridgesdk/provider_http_test.go`:
- Around line 144-146: Add an exact response-body assertion alongside the status
check in the affected HTTP test, verifying the shutdown path returns "provider
routes are not ready\n" and failing when it differs; keep the existing
StatusServiceUnavailable assertion unchanged.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7fcd8c3c-e467-4d03-8c31-7baa5b3b459b

📥 Commits

Reviewing files that changed from the base of the PR and between 37791de and 04eedb3.

⛔ Files ignored due to path filters (5)
  • docs/qa/bugs/BUG-20260805-session-delete-dialog-disappears.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-05-session-archive-coderabbit.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-sessions-catalog-modal.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-list-row-actions.md is excluded by !**/*.md
  • internal/tools/builtin/testdata/native-tool-catalog.json is excluded by !**/*.json
📒 Files selected for processing (23)
  • internal/api/core/session_workspace_internal_test.go
  • internal/bridgesdk/provider_http.go
  • internal/bridgesdk/provider_http_test.go
  • internal/cli/client_test.go
  • internal/cli/session_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/native_tools_test.go
  • internal/extension/host_api_test.go
  • internal/session/archive.go
  • internal/session/manager_resume.go
  • internal/session/manager_transition_test.go
  • internal/store/globaldb/global_db_session_archive.go
  • internal/store/globaldb/global_db_test.go
  • internal/tools/builtin/builtin_test.go
  • internal/tools/builtin/sessions_archive.go
  • web/src/systems/os/components/__tests__/sessions-modal.test.tsx
  • web/src/systems/os/components/desktop-shell.tsx
  • web/src/systems/os/components/sessions-modal.tsx
  • web/src/systems/session/components/__tests__/session-delete-dialog.test.tsx
  • web/src/systems/session/components/session-delete-dialog.tsx
  • web/src/systems/session/hooks/__tests__/use-session-actions.test.tsx
  • web/src/systems/session/hooks/use-session-actions.ts
  • web/src/systems/session/hooks/use-session-lifecycle-actions.ts
🚧 Files skipped from review as they are similar to previous changes (13)
  • internal/api/core/session_workspace_internal_test.go
  • internal/extension/host_api_test.go
  • web/src/systems/session/components/session-delete-dialog.tsx
  • internal/session/manager_resume.go
  • internal/cli/session_test.go
  • internal/tools/builtin/builtin_test.go
  • web/src/systems/os/components/desktop-shell.tsx
  • internal/daemon/native_tools_test.go
  • internal/cli/client_test.go
  • internal/daemon/daemon_test.go
  • web/src/systems/session/hooks/use-session-lifecycle-actions.ts
  • web/src/systems/os/components/sessions-modal.tsx
  • internal/session/archive.go

Comment thread internal/bridgesdk/provider_http_test.go
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 5, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 5, 2026

This branch was successfully deployed

1 active deployment
Preview — 1651c1c1 Deployed Aug 5, 2026 by vercel[bot]
Sign up for free to 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