The i18n localization commit introduced a bug where .map() callbacks
in the New Worktree dropdown rendered the t() translation function
instead of the keybinding token variable, showing 'undefined' for
keyboard shortcuts. Also adds a t()-shadowing lint test to prevent
regressions.
- Stop awaiting non-dependent handlers (requestProviders, requestConfig,
requestAgents, requestNotifications, loadSessions, syncSession) in the
webview message handler so loadMessages is not blocked behind 16+
sequential HTTP calls from multiple webviews
- Run initializeConnection fetches in parallel via Promise.all instead
of 4 sequential awaits
- Deduplicate child session syncs with a persistent syncedChildSessions
Set that survives clearSession, preventing repeated sync floods
- Batch all setStore calls in handleMessagesLoaded so SolidJS triggers
one reactivity pass instead of N+1 (one per message)
Add typed interface for agentManager.renameWorktree message that was
missing from the WebviewMessage union, remove duplicate requestBranches
handler (dead code), and strip redundant 'as' casts where typeof guards
already narrow the type.
When the workspace is not a git repo, pushEmptyState() fires with isGitRepo:false
but sessionsLoaded never flips to true because the Kilo server doesn't connect.
This left the loading skeletons displayed forever.
- Webview: set sessionsLoaded=true when agentManager.state arrives with isGitRepo=false
- Provider: call pushEmptyState() in requestState handler when this.state is undefined,
fixing the race where the webview mounts after the initial empty state was already sent
- Tests: static-analysis regression tests for both fixes
* feat(vscode): implement Import tab in Open Workspace dialog
Add Import tab to the Agent Manager's Open Workspace dialog with:
- PR URL import via gh CLI (same-repo + fork support)
- Searchable branch selector with worktree-aware filtering
- Extracted pure git parsing into git-import.ts with 41 unit tests
- User-friendly error toasts, dialog dismissal on success
- Worktree name input above tab switcher
* remove unused fs import
* fix: handle ENOENT in WorktreeStateManager.writeToDisk for test stability
When tests clean up temp directories while fire-and-forget save() calls
are still pending, writeToDisk now catches ENOENT and returns gracefully
instead of throwing an unhandled error.
* fix: JSX nesting in New tab — remove duplicate version bar and submit button from merge
* fix: add importing guard and orphaned state cleanup to onImportExternalWorktree
The editor context change in PR #6151 switched from Today's date (toDateString)
to Current time (toISOString), which breaks prompt caching because the system
prompt now changes every second instead of once per day.
This changes it back to date-only format while keeping all other editor context
improvements.
Reorder the sidebar navigation buttons so that cloudHistoryButtonClicked
is at group navigation@3 and historyButtonClicked is at navigation@4,
correcting the display order in the sidebar view.
Guard against two race conditions that caused visible UI flashes when
importing cloud sessions:
1. In `handleSessionCreated`, avoid wiping existing messages to `[]`
when the SSE `session.created` event races with `cloudSessionImported`.
Messages are now only initialized if none exist yet for that session ID.
2. In `handleCloudSessionImported`, stop deleting cloud parts when
cleaning up synthetic `cloud:` store entries. Carried-over messages
still reference cloud message IDs, so deleting their parts caused
every `<Message>` to render empty until `loadMessages` completed.
Stale cloud parts are harmlessly overwritten once `messagesLoaded`
arrives.
Reorder `@kilocode/*` packages alphabetically at the top of the
dependencies block and remove duplicate entries that were scattered
throughout the file. No new dependencies are added or removed.
Use a direct session URL for UUID-format IDs and fall back to the
legacy export endpoint for non-UUID session IDs (e.g. `ses_` prefixed).
This ensures compatibility with both ID formats when fetching session
data from the ingest service.
- Remove `.uuid()` constraint from route param and sessionId validators
to allow non-UUID session identifiers
- Reset current session ID to undefined when cloud session import fails
to prevent stale session state
Remove hardcoded fallback values for `slug`, `directory`, and `version`
when importing session data, allowing undefined values to propagate
naturally instead of masking missing data with defaults.
- Validate sessionId and id params as UUID to prevent SSRF (routes.ts)
- Ensure info.time exists with fallback before SessionToRow (routes.ts)
- Use ?? instead of || for slug/directory/version defaults (routes.ts)
- Strip upstream error body from client-facing /cloud-sessions response
- Add safe date fallback for null/invalid created_at/updated_at values
- Fix pagination race condition with generation counter (CloudSessionList)
- Show toast on cloud session import failure (session.tsx)
- Add try/catch + .filter(m => m.info) in handleRequestCloudSessionData
- Use kilo-ui Checkbox instead of raw <input> in CloudSessionList
- Replace `any` types in KiloRoutesDeps with structural types
- Inject Identifier dep instead of duplicating ID generation logic
- Delete unused fetchCloudSessions() in api/sessions.ts
- Add Array.isArray guard on data.messages in import endpoint
- Avoid mutating data.info in-place during cloud session import
- Translate session.cloud.import.* i18n keys across all 15 locales
- Remove obsolete checkbox CSS (now handled by kilo-ui)