Skip to content

feat: report active CLI and VS Code app and session presence#12159

Merged
eshurakov merged 5 commits into
mainfrom
lace-arthropod
Jul 14, 2026
Merged

feat: report active CLI and VS Code app and session presence#12159
eshurakov merged 5 commits into
mainfrom
lace-arthropod

Conversation

@eshurakov

Copy link
Copy Markdown
Contributor

What changed

Replaces the old focused/open session-viewed model with a viewer/attached/visible presence system:

  • Viewer identity: each TUI/VS Code client reports a stable UUID viewer id + an active flag (window focused/blurred), so the backend can distinguish "session open in a tab" from "session actually being looked at."
  • Attached vs. visible: attached = retained/background sessions (tabs kept open), visible = the single session currently displayed. Replaces the ambiguous focused/open pair that conflated retention with focus.
  • New KiloViewers service (packages/opencode/src/kilocode/presence/) backed by the extracted event-service client (kilocode/event-service/client.ts, moved out of claw/). The service layer owns viewer state and exposes update(payload) to the session.viewed handler.
  • Presence invalidation on auth change: Kilo provider auth set/remove/OAuth callback now calls invalidatePresence() to drop the old user's presence socket before instance disposal.
  • VS Code extension: KiloConnectionService tracks attached/visible via registerAttached/registerVisible/setDisplayed, flushes on reconnect and on a 60s check-in timer. Agent Manager reports the actually-displayed session id (null when a terminal/review/pending tab is shown) via a new agentManager.visibleSession webview message.
  • TUI: reports viewer id, active state (renderer focus/blur), and resends the snapshot on server.connected after a backend restart.

Why

The previous model couldn't tell the cloud "you are actively looking at session X" vs. "session X is open in a background tab" — both looked like focused. This blocked accurate presence indicators (who's viewing what, is anyone active) and made per-viewer session retention ambiguous. The viewer id + active flag also lets presence survive reconnects and distinguishes multiple clients from the same user.

Notes

  • session.viewed now returns 400 on malformed payloads (missing viewer, non-UUID id, oversized attached/visible arrays) — added validation scenarios to the httpapi exerciser.
  • Local packages/opencode/.kilo/ runtime state was deliberately excluded from the commit.
  • SDK + OpenAPI spec regenerated to match the new viewer/attached/visible payload shape.

Comment thread packages/opencode/src/kilocode/presence/service.ts Outdated
@marius-kilocode

Copy link
Copy Markdown
Collaborator

@eshurakov looks good, can you check if those are relevant?

Medium: idle presence sockets remain open indefinitely
packages/opencode/src/kilocode/presence/service.ts:114-141
When the last viewer becomes inactive, all contexts are unsubscribed but the EventServiceClient is not disconnected.
The socket continues sending pings every 15 seconds at packages/opencode/src/kilocode/event-service/client.ts:341-347 and retains its reconnect machinery.
This is a persistent socket/timer/network resource leak for backgrounded VS Code and TUI clients. Disconnect when desired.size === 0.

Medium: closed VS Code tabs leak registration map entries
packages/kilo-vscode/src/KiloProvider.ts:528-534
packages/kilo-vscode/src/KiloProvider.ts:4378-4381
packages/kilo-vscode/src/services/cli-backend/connection-service.ts:577-603
Every provider has a unique UUID. Disposal registers empty sets instead of calling unregisterAttached() and unregisterVisible().
Consequently, repeatedly opening and closing editor tabs grows both extension-lifetime maps. Every later presence flush also iterates these stale entries.
This is a real, although relatively slow, memory leak introduced by the PR.

Medium: console presence requests can run on every streaming-message refresh
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx:128-140
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx:666-688
Message events trigger snapshot refetches, and createEffect(sendSnapshot) sends unconditionally whenever the resource updates.
During streaming this can produce several /session/viewed requests per second even though attached session IDs have not changed. Deduplicating the projected presence snapshot would avoid the extra HTTP and backend reconciliation work.

@eshurakov

Copy link
Copy Markdown
Contributor Author

All three fixed in commit ba6bfb6.

1. Idle presence sockets — Added disconnect when desired.size === 0 in the existing-client path of reconcilePresence(). When all viewers go inactive, the socket is now fully disconnected instead of staying open with pings.

2. Closed tab map leak — dispose() was calling focusSession() which set empty arrays via registerVisible/registerAttached, leaving stale map entries. Replaced with direct unregisterVisible/unregisterAttached calls that delete the entries entirely.

3. Console streaming dedup — sendSnapshot now tracks a lastSentKey (URL + sorted session IDs) and skips the HTTP request when unchanged. Streaming messages that do not alter the projected session set no longer trigger redundant /session/viewed calls.

Comment thread packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx Outdated
Comment thread packages/kilo-vscode/src/services/cli-backend/connection-service.ts Outdated
Comment thread packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx Outdated
Comment thread packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx Outdated
Comment thread packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts Outdated
Comment thread packages/opencode/src/kilocode/presence/service.ts
Comment thread packages/opencode/src/kilocode/cli/cmd/tui/app.tsx
Comment thread packages/opencode/src/kilocode/cli/cmd/tui/app.tsx
Comment thread packages/sdk/js/src/v2/gen/sdk.gen.ts
Comment thread packages/sdk/openapi.json
@kilo-code-bot

kilo-code-bot Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: 14 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 14
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 680 In-flight deduplication can suppress lease renewal
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 684 Concurrent snapshots can restore stale console state
packages/kilo-vscode/src/services/cli-backend/connection-service.ts 668 Aggregated registrations can exceed the server payload limits
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 800 Setup and empty panes report the previous chat as visible
packages/opencode/src/kilocode/event-service/client.ts 201 Disposal during token lookup starts a stale ticket request
packages/opencode/src/kilocode/presence/service.ts 186 Unique viewer IDs permit unbounded aggregate memory and CPU growth
packages/opencode/src/kilocode/presence/service.ts 173 An in-flight snapshot can restore stale authentication
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 89 Concurrent snapshots can restore stale focus or session state
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 83 TUI startup reports active before focus is known
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 142 Final empty snapshot can be aborted during TUI shutdown
packages/opencode/src/server/routes/instance/httpapi/groups/session.ts 83 Public and service UUID validators disagree on accepted payloads
packages/sdk/js/src/v2/gen/sdk.gen.ts 5069 Generated method permits payloads the server always rejects
packages/sdk/openapi.json 8860 Required replacement payload breaks previously published clients
packages/sdk/openapi.json 8805 Published 400 response shape changes incompatibly

Fix these issues in Kilo Cloud

Files Reviewed (49 files)
  • .changeset/report-cli-vscode-presence.md - 0 issues
  • packages/kilo-console/src/client.test.ts - 0 issues
  • packages/kilo-console/src/client.ts - 0 issues
  • packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx - 2 issues
  • packages/kilo-console/src/routes/projects/project-console-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/KiloProvider.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/types.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/vscode-host.ts - 0 issues
  • packages/kilo-vscode/src/kilo-provider/options.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.test.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts - 1 issue
  • packages/kilo-vscode/tests/setup/vscode-mock.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-arch.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-remote-sessions.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/kilo-provider-load-messages.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/presence-registration-contract.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts - 0 issues
  • packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx - 1 issue
  • packages/kilo-vscode/webview-ui/agent-manager/remote-sessions.ts - 0 issues
  • packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts - 0 issues
  • packages/opencode/src/kilo-sessions/kilo-sessions.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-protocol.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-ws.ts - 0 issues
  • packages/opencode/src/kilocode/claw/client.ts - 0 issues
  • packages/opencode/src/kilocode/cli/cmd/tui/app.tsx - 3 issues
  • packages/opencode/src/kilocode/event-service/client.ts - 1 issue
  • packages/opencode/src/kilocode/presence/context.ts - 0 issues
  • packages/opencode/src/kilocode/presence/policy.ts - 0 issues
  • packages/opencode/src/kilocode/presence/service.ts - 2 issues
  • packages/opencode/src/kilocode/server/httpapi/server.ts - 0 issues
  • packages/opencode/src/kilocode/server/provider-auth-lifecycle.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/groups/session.ts - 1 issue
  • packages/opencode/src/server/routes/instance/httpapi/handlers/control.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/provider.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/server.ts - 0 issues
  • packages/opencode/test/kilocode/event-service/client.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/policy.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service-presence.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service.test.ts - 0 issues
  • packages/opencode/test/kilocode/server/httpapi-exercise-scenarios.ts - 0 issues
  • packages/opencode/test/kilocode/sessions/remote-protocol.test.ts - 0 issues
  • packages/opencode/test/kilocode/tui-session-presence-contract.test.ts - 0 issues
  • packages/opencode/test/server/httpapi-exercise/environment.ts - 0 issues
  • packages/sdk/js/src/v2/gen/sdk.gen.ts - 1 issue
  • packages/sdk/js/src/v2/gen/types.gen.ts - 0 issues
  • packages/sdk/openapi.json - 2 issues
Previous Review Summaries (4 snapshots, latest commit 4324f08)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 4324f08)

Status: 14 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 14
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 680 In-flight deduplication can suppress lease renewal
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 684 Concurrent snapshots can restore stale console state
packages/kilo-vscode/src/services/cli-backend/connection-service.ts 668 Aggregated registrations can exceed the server payload limits
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 800 Setup and empty panes report the previous chat as visible
packages/opencode/src/kilocode/event-service/client.ts 201 Disposal during token lookup starts a stale ticket request
packages/opencode/src/kilocode/presence/service.ts 186 Unique viewer IDs permit unbounded aggregate memory and CPU growth
packages/opencode/src/kilocode/presence/service.ts 173 An in-flight snapshot can restore stale authentication
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 89 Concurrent snapshots can restore stale focus or session state
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 83 TUI startup reports active before focus is known
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 142 Final empty snapshot can be aborted during TUI shutdown
packages/opencode/src/server/routes/instance/httpapi/groups/session.ts 83 Public and service UUID validators disagree on accepted payloads
packages/sdk/js/src/v2/gen/sdk.gen.ts 5069 Generated method permits payloads the server always rejects
packages/sdk/openapi.json 8860 Required replacement payload breaks previously published clients
packages/sdk/openapi.json 8805 Published 400 response shape changes incompatibly

Fix these issues in Kilo Cloud

Files Reviewed (49 files)
  • .changeset/report-cli-vscode-presence.md - 0 issues
  • packages/kilo-console/src/client.test.ts - 0 issues
  • packages/kilo-console/src/client.ts - 0 issues
  • packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx - 2 issues
  • packages/kilo-console/src/routes/projects/project-console-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/KiloProvider.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/types.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/vscode-host.ts - 0 issues
  • packages/kilo-vscode/src/kilo-provider/options.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.test.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts - 1 issue
  • packages/kilo-vscode/tests/setup/vscode-mock.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-arch.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-remote-sessions.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/kilo-provider-load-messages.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/presence-registration-contract.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts - 0 issues
  • packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx - 1 issue
  • packages/kilo-vscode/webview-ui/agent-manager/remote-sessions.ts - 0 issues
  • packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts - 0 issues
  • packages/opencode/src/kilo-sessions/kilo-sessions.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-protocol.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-ws.ts - 0 issues
  • packages/opencode/src/kilocode/claw/client.ts - 0 issues
  • packages/opencode/src/kilocode/cli/cmd/tui/app.tsx - 3 issues
  • packages/opencode/src/kilocode/event-service/client.ts - 1 issue
  • packages/opencode/src/kilocode/presence/context.ts - 0 issues
  • packages/opencode/src/kilocode/presence/policy.ts - 0 issues
  • packages/opencode/src/kilocode/presence/service.ts - 2 issues
  • packages/opencode/src/kilocode/server/httpapi/server.ts - 0 issues
  • packages/opencode/src/kilocode/server/provider-auth-lifecycle.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/groups/session.ts - 1 issue
  • packages/opencode/src/server/routes/instance/httpapi/handlers/control.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/provider.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/server.ts - 0 issues
  • packages/opencode/test/kilocode/event-service/client.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/policy.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service-presence.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service.test.ts - 0 issues
  • packages/opencode/test/kilocode/server/httpapi-exercise-scenarios.ts - 0 issues
  • packages/opencode/test/kilocode/sessions/remote-protocol.test.ts - 0 issues
  • packages/opencode/test/kilocode/tui-session-presence-contract.test.ts - 0 issues
  • packages/opencode/test/server/httpapi-exercise/environment.ts - 0 issues
  • packages/sdk/js/src/v2/gen/sdk.gen.ts - 1 issue
  • packages/sdk/js/src/v2/gen/types.gen.ts - 0 issues
  • packages/sdk/openapi.json - 2 issues

Previous review (commit d2f8ffa)

Status: 19 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 19
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 679 Snapshot deduplication suppresses lease check-ins and failed-request retries
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 726 Cleanup can be overwritten by an older in-flight snapshot
packages/kilo-vscode/src/services/cli-backend/connection-service.ts 668 Aggregated registrations can exceed the server payload limits
packages/kilo-vscode/src/services/cli-backend/connection-service.ts 873 Registered presence is not flushed on the initial backend connection
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 806 Cloud preview IDs invalidate the complete presence snapshot
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 802 History leaves the previously selected session reported as visible
packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts 516 Background message loads can overwrite authoritative visibility
packages/kilo-vscode/src/KiloProvider.ts 754 Hidden editor panels can be reported visible again
packages/opencode/src/kilocode/event-service/client.ts 104 A stale authentication failure can disconnect a replacement client
packages/opencode/src/kilocode/presence/service.ts 186 Unique viewer IDs permit unbounded aggregate memory and CPU growth
packages/opencode/src/kilocode/presence/service.ts 214 Layer disposal leaves global attached-session state populated
packages/opencode/src/kilocode/presence/service.ts 173 An in-flight snapshot can restore stale authentication
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 89 Concurrent snapshots can restore stale focus or session state
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 83 TUI startup reports active before focus is known
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 142 Final empty snapshot can be aborted during TUI shutdown
packages/opencode/src/server/routes/instance/httpapi/groups/session.ts 83 Public and service UUID validators disagree on accepted payloads
packages/sdk/js/src/v2/gen/sdk.gen.ts 5069 Generated method permits payloads the server always rejects
packages/sdk/openapi.json 8860 Required replacement payload breaks previously published clients
packages/sdk/openapi.json 8805 Published 400 response shape changes incompatibly

Fix these issues in Kilo Cloud

Files Reviewed (49 files)
  • .changeset/report-cli-vscode-presence.md - 0 issues
  • packages/kilo-console/src/client.test.ts - 0 issues
  • packages/kilo-console/src/client.ts - 0 issues
  • packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx - 2 issues
  • packages/kilo-console/src/routes/projects/project-console-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/KiloProvider.ts - 1 issue
  • packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts - 1 issue
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/types.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/vscode-host.ts - 0 issues
  • packages/kilo-vscode/src/kilo-provider/options.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.test.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts - 2 issues
  • packages/kilo-vscode/tests/setup/vscode-mock.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-arch.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/kilo-provider-load-messages.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/presence-registration-contract.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts - 0 issues
  • packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx - 2 issues
  • packages/kilo-vscode/webview-ui/agent-manager/remote-sessions.ts - 0 issues
  • packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts - 0 issues
  • packages/opencode/src/kilo-sessions/kilo-sessions.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-protocol.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-ws.ts - 0 issues
  • packages/opencode/src/kilocode/claw/client.ts - 0 issues
  • packages/opencode/src/kilocode/cli/cmd/tui/app.tsx - 3 issues
  • packages/opencode/src/kilocode/event-service/client.ts - 1 issue
  • packages/opencode/src/kilocode/presence/context.ts - 0 issues
  • packages/opencode/src/kilocode/presence/policy.ts - 0 issues
  • packages/opencode/src/kilocode/presence/service.ts - 3 issues
  • packages/opencode/src/kilocode/server/httpapi/server.ts - 0 issues
  • packages/opencode/src/kilocode/server/provider-auth-lifecycle.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/groups/session.ts - 1 issue
  • packages/opencode/src/server/routes/instance/httpapi/handlers/control.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/provider.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/server.ts - 0 issues
  • packages/opencode/test/kilocode/event-service/client.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/policy.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service-presence.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service.test.ts - 0 issues
  • packages/opencode/test/kilocode/server/httpapi-exercise-scenarios.ts - 0 issues
  • packages/opencode/test/kilocode/sessions/remote-protocol.test.ts - 0 issues
  • packages/opencode/test/kilocode/tui-session-presence-contract.test.ts - 0 issues
  • packages/opencode/test/server/httpapi-exercise/environment.ts - 0 issues
  • packages/sdk/js/src/v2/gen/sdk.gen.ts - 1 issue
  • packages/sdk/js/src/v2/gen/types.gen.ts - 0 issues
  • packages/sdk/openapi.json - 2 issues

Previous review (commit feb6c58)

Status: 16 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 16
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 679 Snapshot deduplication suppresses lease check-ins and failed-request retries
packages/kilo-vscode/src/services/cli-backend/connection-service.ts 873 Registered presence is not flushed on the initial backend connection
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 806 Cloud preview IDs invalidate the complete presence snapshot
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 802 History leaves the previously selected session reported as visible
packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts 516 Background message loads can overwrite authoritative visibility
packages/kilo-vscode/src/KiloProvider.ts 784 Hidden editor panels can be reported visible again
packages/opencode/src/kilocode/event-service/client.ts 104 A stale authentication failure can disconnect a replacement client
packages/opencode/src/kilocode/presence/service.ts 186 Unique viewer IDs permit unbounded aggregate memory and CPU growth
packages/opencode/src/kilocode/presence/service.ts 214 Layer disposal leaves global attached-session state populated
packages/opencode/src/kilocode/presence/service.ts 173 An in-flight snapshot can restore stale authentication
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 89 Concurrent snapshots can restore stale focus or session state
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 83 TUI startup reports active before focus is known
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 142 Final empty snapshot can be aborted during TUI shutdown
packages/sdk/js/src/v2/gen/sdk.gen.ts 4768 Generated method permits payloads the server always rejects
packages/sdk/openapi.json 8442 Required replacement payload breaks previously published clients
packages/sdk/openapi.json 8387 Published 400 response shape changes incompatibly

Fix these issues in Kilo Cloud

Files Reviewed (49 files)
  • .changeset/report-cli-vscode-presence.md - 0 issues
  • packages/kilo-console/src/client.test.ts - 0 issues
  • packages/kilo-console/src/client.ts - 0 issues
  • packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx - 1 issue
  • packages/kilo-console/src/routes/projects/project-console-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/KiloProvider.ts - 1 issue
  • packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts - 1 issue
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/types.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/vscode-host.ts - 0 issues
  • packages/kilo-vscode/src/kilo-provider/options.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.test.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts - 1 issue
  • packages/kilo-vscode/tests/setup/vscode-mock.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-arch.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/kilo-provider-load-messages.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/presence-registration-contract.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts - 0 issues
  • packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx - 2 issues
  • packages/kilo-vscode/webview-ui/agent-manager/remote-sessions.ts - 0 issues
  • packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts - 0 issues
  • packages/opencode/src/kilo-sessions/kilo-sessions.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-protocol.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-ws.ts - 0 issues
  • packages/opencode/src/kilocode/claw/client.ts - 0 issues
  • packages/opencode/src/kilocode/cli/cmd/tui/app.tsx - 3 issues
  • packages/opencode/src/kilocode/event-service/client.ts - 1 issue
  • packages/opencode/src/kilocode/presence/context.ts - 0 issues
  • packages/opencode/src/kilocode/presence/policy.ts - 0 issues
  • packages/opencode/src/kilocode/presence/service.ts - 3 issues
  • packages/opencode/src/kilocode/server/httpapi/server.ts - 0 issues
  • packages/opencode/src/kilocode/server/provider-auth-lifecycle.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/groups/session.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/control.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/provider.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/server.ts - 0 issues
  • packages/opencode/test/kilocode/event-service/client.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/policy.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service-presence.test.ts - 0 issues
  • packages/opencode/test/kilocode/presence/service.test.ts - 0 issues
  • packages/opencode/test/kilocode/server/httpapi-exercise-scenarios.ts - 0 issues
  • packages/opencode/test/kilocode/sessions/remote-protocol.test.ts - 0 issues
  • packages/opencode/test/kilocode/tui-session-presence-contract.test.ts - 0 issues
  • packages/opencode/test/server/httpapi-exercise/environment.ts - 0 issues
  • packages/sdk/js/src/v2/gen/sdk.gen.ts - 1 issue
  • packages/sdk/js/src/v2/gen/types.gen.ts - 0 issues
  • packages/sdk/openapi.json - 2 issues

Previous review (commit ba6bfb6)

Status: 12 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 12
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx 679 Snapshot deduplication suppresses lease check-ins and failed-request retries
packages/kilo-vscode/src/services/cli-backend/connection-service.ts 844 Registered presence is not flushed on the initial backend connection
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 784 Cloud preview IDs invalidate the complete presence snapshot
packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx 780 History leaves the previously selected session reported as visible
packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts 511 Background message loads can overwrite authoritative visibility
packages/opencode/src/kilocode/event-service/client.ts 104 A stale authentication failure can disconnect a replacement client
packages/opencode/src/kilocode/presence/service.ts 186 Unique viewer IDs permit unbounded aggregate memory and CPU growth
packages/opencode/src/kilocode/presence/service.ts 214 Layer disposal leaves global attached-session state populated
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 89 Concurrent snapshots can restore stale focus or session state
packages/opencode/src/kilocode/cli/cmd/tui/app.tsx 83 TUI startup reports active before focus is known
packages/sdk/js/src/v2/gen/sdk.gen.ts 4768 Generated method permits payloads the server always rejects
packages/sdk/openapi.json 8442 Required replacement payload breaks previously published clients

Fix these issues in Kilo Cloud

Files Reviewed (49 files)
  • .changeset/report-cli-vscode-presence.md - 0 issues
  • packages/kilo-console/src/client.test.ts - 0 issues
  • packages/kilo-console/src/client.ts - 0 issues
  • packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx - 1 issue
  • packages/kilo-console/src/routes/projects/project-console-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/KiloProvider.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts - 1 issue
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.test.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/am-visible-presence.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/types.ts - 0 issues
  • packages/kilo-vscode/src/agent-manager/vscode-host.ts - 0 issues
  • packages/kilo-vscode/src/kilo-provider/options.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.test.ts - 0 issues
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts - 1 issue
  • packages/kilo-vscode/tests/setup/vscode-mock.ts - 0 issues
  • packages/kilo-vscode/tests/unit/agent-manager-arch.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/kilo-provider-load-messages.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/presence-registration-contract.test.ts - 0 issues
  • packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts - 0 issues
  • packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx - 2 issues
  • packages/kilo-vscode/webview-ui/agent-manager/remote-sessions.ts - 0 issues
  • packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts - 0 issues
  • packages/opencode/src/kilo-sessions/kilo-sessions.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-protocol.ts - 0 issues
  • packages/opencode/src/kilo-sessions/remote-ws.ts - 0 issues
  • packages/opencode/src/kilocode/claw/client.ts - 0 issues
  • packages/opencode/src/kilocode/cli/cmd/tui/app.tsx - 2 issues
  • packages/opencode/src/kilocode/event-service/client.ts - 1 issue
  • packages/opencode/src/kilocode/presence/context.ts - 0 issues
  • packages/opencode/src/kilocode/presence/policy.ts - 0 issues
  • packages/opencode/src/kilocode/presence/service.ts - 2 issues
  • packages/opencode/src/kilocode/server/httpapi/server.ts - 0 issues
  • packages/opencode/src/kilocode/server/provider-auth-lifecycle.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/groups/session.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/control.ts - 0 issues
  • packages/opencode/src/server/routes/instance/httpapi/handlers/provider.ts - 0 issues
  • `packages/opencode/s

[Snapshot truncated.]

Additional previous summary content was truncated to keep this comment within platform limits.


Reviewed by gpt-5.6-sol · Input: 137.7K · Output: 7.1K · Cached: 378K

Review guidance: REVIEW.md from base branch main

Comment thread packages/kilo-vscode/src/KiloProvider.ts
Comment thread packages/opencode/src/kilocode/presence/service.ts
Comment thread packages/opencode/src/kilocode/cli/cmd/tui/app.tsx
Comment thread packages/sdk/openapi.json
Comment thread packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx Outdated
Comment thread packages/kilo-vscode/src/services/cli-backend/connection-service.ts
Replace the focused/open session model with a viewer/attached/visible
presence system. The TUI and VS Code extension now report a stable viewer
id, active flag, attached (retained) sessions, and the single visible
session, surfaced via a new KiloViewers service backed by the extracted
event-service client. Invalidates presence on Kilo provider auth changes.
Comment thread packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx Outdated
Comment thread packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx Outdated
Comment thread packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx Outdated
Comment thread packages/opencode/src/kilocode/event-service/client.ts
The Agent Manager panel uses retainContextWhenHidden, so closing it keeps
the webview alive. Its SolidJS effects kept firing openSessions/visibleSession
messages, which AgentManagerVisiblePresence.handle() forwarded directly to
registerAttached/registerVisible with no visibility gate — leaving sessions
stuck in attached and visible after the panel was closed.

flush() now gates both visible and attached on panelVisible(): hidden clears
both, visible re-registers from stored state. handle() stores into fields
then flushes instead of registering directly. clear() resets stored state.
Replace ad-hoc pendingKeys/lastSentKey dedup with a serialized sender
queue that drains snapshots in order, coalesces obsolete pending state,
and routes 60s check-in renewals and cleanup through the same path.
Extract the setup overlay into a memo and block visible-session
reporting while the overlay or an empty context pane covers chat.
Track concurrent connect ticket fetches in a Set so disconnect aborts
every one instead of only the most recent, and skip ticket minting
after disposal during token lookup.
@eshurakov
eshurakov merged commit 1083bb8 into main Jul 14, 2026
31 checks passed
@eshurakov
eshurakov deleted the lace-arthropod branch July 14, 2026 07:05
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.

2 participants