1282 Commits
Author SHA1 Message Date
kilo-maintainer[bot] 760f24608e release: v7.2.0 2026-04-07 19:11:12 +00:00
kilo-maintainer[bot] 5650850aa6 release: v7.1.23 2026-04-07 16:19:27 +00:00
kilo-maintainer[bot] fc014b1205 release: v7.1.22 2026-04-06 16:10:12 +00:00
kilo-maintainer[bot] e10324aa7f release: v7.1.21 2026-04-05 15:48:18 +00:00
Imanol Maiztegui c0a08add77 Session migration improvements (#8367)
* refactor(vscode): enrich migration session data with title, directory, and time metadata

Replace plain session ID strings with structured MigrationSessionInfo objects
throughout the legacy migration pipeline. Session detection now extracts
task title, workspace directory, and timestamp from global state, providing
richer context for the migration wizard while still passing only IDs when
executing the actual migration.

* feat(vscode): add granular session progress tracking to legacy migration pipeline

Introduce MigrationSessionProgress type and SessionProgressCallback to
emit per-session phase updates during migration. The migration handler
now forwards structured progress events—including session metadata,
index, total count, and current phase—to the webview via a new
legacyMigrationSessionProgress message type, enabling the UI to display
detailed real-time feedback for each session being migrated.

* refactor(legacy-migration): extract session progress helpers and wire per-phase reporting into migrate

Move inline progress construction out of the migration loop into
dedicated buildSessionMeta and buildSessionProgress factory functions
in a new migration-session-progress module. Update the migrate function
signature to accept optional meta and progress callback, then emit
fine-grained phase events (project, session, messages, parts, skipped,
done, error) with current/count counters so callers receive incremental
feedback as each import step completes.

* feat(vscode): display per-session migration progress in MigrationWizard

Add SessionProgressState interface and wire up handling for the
legacyMigrationSessionProgress message type so the wizard UI can
render real-time phase, index, and error details for each session
being imported during legacy migration.

* refactor(migration): extract SessionMigrationProgress into dedicated component

Move SessionProgressState interface and progress rendering logic out of
MigrationWizard into a new SessionMigrationProgress component with its
own state type, step pipeline visualization, and associated CSS styles.

- Add SessionMigrationProgress.tsx with step-dot UI for project,
  session, messages, and parts phases
- Replace inline SessionProgressState with exported
  SessionMigrationProgressState from the new module
- Add stepper styles to migration.css with active/success dot states
- Re-export SessionMigrationProgress from the migration barrel

* fix(vscode): improve session migration progress UI and timing

Add inter-session delay to prevent rapid-fire migration requests,
fix session spinner icon to remain active while sessions are still
being processed, and restructure the progress metadata layout.

- Add 300ms delay between session migrations in migration-service
- Keep sessions group spinner active until all sessions complete
- Split meta line into separate directory, title, and date elements
  with proper truncation and ellipsis handling
- Reformat date display to show time before date
- Show "Session skipped" label when phase is skipped
- Tighten spacing and padding in session progress card

* feat(migration): add post-migration summary view for session progress

Introduce a summary phase that displays aggregated migration results
after all sessions have been processed. The summary card shows counts
of imported, skipped, and errored sessions along with the last error.

- Add "summary" phase to MigrationSessionPhase union type
- Emit summary progress event with 1s delay after final session
- Create SessionMigrationCard wrapper component for shared card styling
- Create SessionMigrationSummary component with imported/skipped/errored
  breakdown
- Add session-migration-summary-state module with pure reducer logic
  for accumulating per-session outcomes
- Extract card border/background styles into reusable .migration-session-card
- Switch progress view to summary view when phase reaches "summary"

* refactor(legacy-migration): defer finalization to explicit client message

Move post-migration side effects (global dispose, status update,
broadcast, session refresh) out of handleStartLegacyMigration and
into a new handleFinalizeLegacyMigration handler. The webview now
sends a "finalizeLegacyMigration" message when the user clicks Done,
decoupling migration execution from completion bookkeeping.

- Extract finalization logic into handleFinalizeLegacyMigration
- Add FinalizeLegacyMigrationMessage type and wire into WebviewMessage union
- Register "finalizeLegacyMigration" case in KiloProvider message switch
- Trigger finalization from MigrationWizard handleDone before clearing data

* fix(migration): move error copy action into session summary and preserve raw error text

Remove the standalone error box and clipboard helper from
MigrationWizard, relocating the copy-to-clipboard functionality
directly into SessionMigrationSummary next to the LastError label.
Store the full error string as lastErrorRaw on SessionSummaryState
and display only the first line as the visible lastError.

- Add lastErrorRaw field to SessionSummaryState and short() helper
- Inline copy button and toast into SessionMigrationSummary component
- Add migration-session-summary__row layout style for label + button
- Remove redundant error-box markup and copySessionError from wizard

* refactor(legacy-migration): expand summary view with per-session detail lines and structured error formatting

Replace aggregate session counts with individual item listings
using a scrollable list for each category (imported, skipped,
errored). Extract formatting logic into a dedicated module
(session-migration-summary-format.ts) that handles date
formatting, single-line display, and full error report
generation for clipboard export.

- Add session-migration-summary-format.ts with line, short,
  errors, and copy helpers
- Render each session item via `<For>` instead of showing counts
- Introduce scrollable __list and truncated __item CSS styles
- Change copy button to aggregate all errors rather than a
  single lastErrorRaw value

* feat(migration): add full summary report export with detailed error blocks

Introduce a `report` function that compiles all migration categories
(successful, skipped, errored) into a single clipboard-exportable
document. Each error entry now includes session metadata (id,
directory, title, date) alongside the raw error message.

- Add `report()` to session-migration-summary-format.ts assembling
  a complete summary with per-category blocks
- Enrich `errors()` output with structured session metadata fields
- Relocate copy button to summary header and change label to
  "Copy Report" to reflect full-report semantics
- Remove error-section-scoped copy button in favor of top-level action

* style(migration): improve summary list visuals with bordered sections and empty state placeholders

Add color-coded borders per category (success, skipped, errored),
render "None" placeholders when lists are empty, apply subtle
background styling to list containers and items, and truncate
long directory paths to their last segment for readability.

* refactor(migration): inline error details beneath errored sessions and simplify report format

Replace the separate "Errors" section with per-session error detail
lines displayed directly under each errored entry. Introduce a
`detail` helper that extracts the first line of an error, render it
in a new `__entry`/`__detail` layout with truncation styling, and
consolidate the export report to embed short error text inline
rather than appending a standalone error block.

* style(migration): restyle summary lists as flat striped rows with dynamic section labels

Flatten list items by removing per-item backgrounds and border-radius
in favor of alternating zebra-stripe rows with subtle separators.
Extract an `errored` helper to produce a flat row/detail stream and
add a `label` function that appends counts and optional descriptions
to section headings. Adjust font sizes, padding, and gap values for
a denser, table-like appearance.

* feat(migration): add force-reimport support for session migration

Introduce a `force` flag on session selections that allows previously
migrated sessions to be re-imported by deleting the existing row and
reinserting with updated data. Change session selections from plain
string IDs to `MigrationSessionSelection` objects carrying `id` and
an optional `force` field. Update the backend import service to use
`onConflictDoUpdate` instead of `onConflictDoNothing`, ensuring
forced reimports fully overwrite stale session records.

* fix(ui): add selectable skipped-session list with force re-import action

Introduce checkbox selection UI for skipped sessions in the migration
summary, allowing users to pick individual or all skipped sessions and
trigger a force re-import. Wire selected IDs through `postMessage` to
the backend with the `force` flag enabled. Add custom checkbox marks,
a "select all" toggle, and supporting CSS for the new interactive
controls.

* feat(migration): introduce preparing phase and improve error handling in session migrate

Add a "preparing" step to the session migration pipeline so users see
feedback while the session is being parsed. Move `parseSession` inside
the try block and re-parse on failure so the payload is always available
for error reporting. Extract a shared `fail` helper to eliminate
duplicated error-handling logic. Update phase types, step definitions,
and progress UI across backend and webview to reflect the new phase.

* refactor(migration): simplify session migration phases and remove granular progress tracking

Collapse the project, session, messages, and parts phases into a single
"storing" phase and drop the current/count progress fields. The
fine-grained per-message and per-part counters added unnecessary
complexity without meaningful UX benefit. The pipeline now reports only
two steps—preparing and storing—making the progress UI cleaner and the
data contract between backend and webview smaller.

* fix(migration): skip already-imported sessions by checking existence before parsing

Add a pre-flight check that queries for an existing session using the
legacy ID before performing any parsing or storing work. When the session
already exists and the force flag is not set, the migration short-circuits
to a "skipped" result immediately. This avoids redundant parsing and
duplicate writes for sessions that were previously imported.

* feat(ui): add confirmation dialog before force re-importing skipped sessions

Introduce ForceReimportDialog component that warns users about
overwriting previously migrated sessions. The SessionMigrationSummary
now opens this dialog on force re-import instead of immediately
dispatching the migration message, preventing accidental data loss.

* fix(migration): correct preparing step state resolution in progress tracker

Add missing condition to return "active" state when the preparing step
matches the current preparing phase, fixing the step indicator not
highlighting correctly during the preparation stage.

* refactor(ui): lift force-reimport logic into MigrationWizard and add running state guard

Move dialog orchestration and migration message dispatch for force
re-imports from SessionMigrationSummary up to MigrationWizard, keeping
the summary component presentational via a new `onForce` callback prop.

Introduce a `running` signal to track active migrations and add a
RunningMigrationDialog that warns users before leaving mid-migration.
Extend the `MigrationResultItem` category union with "session" so
re-import results can be filtered correctly.

* fix(migration): deduplicate session entries across all categories on state update

Extract a `strip` helper that removes a session from imported, skipped,
and errored lists before re-inserting it into the target category. This
prevents the same session from appearing in multiple summary buckets
when its status changes (e.g. a re-imported session that was previously
skipped or errored) and removes the early-return guard that silently
dropped valid "done" updates for previously-seen entries.

* style(migration): increase font size and spacing in session summary list

Bump item font size from 12px to 13px, detail font size from 11px to
12px, and adjust line-height, padding, and max-height values across
summary items, details, and interactive rows for improved readability.

* refactor(migration): reorder skipped-session actions and align layout to end

Move "Force Re-import" button after the "Re-import all" checkbox in
the actions bar, switch container justification to flex-end, and
remove min-width constraint from the select-all label for a tighter
trailing alignment.

* fix(migration): hide skipped and errored sections when their lists are empty

Wrap the skipped-session and errored-session sections in `<Show>` guards
so they are only rendered when items exist, removing the "None" fallback
placeholder and eliminating empty sections from the summary view.

* test(migration): add skip-detection and force-reimport coverage for session import

Introduce three new test files covering the duplicate-detection and
force-reimport paths added to the migration pipeline:

- migrate.test.ts: verify sessions are skipped before parsing when they
  already exist, and that force=true bypasses the check; update call
  sites to use the new { id, force } input shape
- session-summary-state.test.ts: validate that updateSessionSummary
  correctly deduplicates entries across categories on state transitions
- session-import-service.test.ts: confirm the backend service returns
  skipped when a session exists without force, and deletes then
  recreates when force is true

* feat(i18n): internationalize migration dialog and summary strings

Replace hardcoded English text in ForceReimportDialog,
RunningMigrationDialog, SessionMigrationSummary, and MigrationWizard
with translation keys via useLanguage().t(). Add corresponding entries
across all 19 locale files covering session summary, force-reimport,
and running-migration labels.

* fix(migration): make error payload optional and remove redundant async

Make the `payload` field optional on failure results so errors thrown
before session parsing can be reported without a payload. Remove
unnecessary `async` from the `skip` helper and conditionally spread
`payload` only when present. In the outer catch block, call `fail`
without parsing the session since the parse itself may have been the
source of the error.

* refactor(migration): remove premature success toast from force reimport

The toast notification was firing immediately when the user triggered
a force reimport, before the operation actually completed. Remove it
from the click handler so feedback can be provided by the caller once
the reimport results are known.

* fix(migration): use live session list instead of stale cached reference

Replace `cachedSessions` fallback with the canonical `sessions` array
when resolving session metadata during migration. The cached reference
could hold outdated entries after a force reimport, leading to lookups
against stale data.

* refactor(migration): remove unused error-tracking fields and dead code

Drop `lastError`/`lastErrorRaw` from `SessionSummaryState`, the
`MigrationFinalization` interface, the `short()` helper, and the
`errors()`/`copy()` summary formatters. These were introduced for
inline error display but are superseded by the full `report()`
output. Update tests to reflect the simplified state shape and add
a clarifying comment to the session-import upsert logic.

* feat(i18n): add translation keys for migration progress and summary labels

Extract shared formatting helpers into `session-migration-format.ts`
and wire all hardcoded English strings in `SessionMigrationProgress`
and `SessionMigrationSummary` through the i18n layer. New keys cover
session progress steps, the migration counter header, summary section
labels, and fallback placeholders across all 20 supported locales.

* fix(migration): correct sessions group status to reflect active progress

Override the default status resolution for the "sessions" group so it
reports "migrating" while the migration is still running and individual
entries remain pending or in-progress, preventing the group from
prematurely settling to a terminal state.

* fix: formatting

* feat(migration): track error state and finalize with completed_with_errors status

Introduce `lastMigrationHadErrors` flag on MigrationContext to capture
whether any migration entry failed or the entire process threw an
exception. Use this flag during finalization to persist a distinct
"completed_with_errors" status instead of unconditionally marking the
migration as "completed", allowing downstream UI and logic to
differentiate between clean and partial migrations.
2026-04-05 17:15:11 +02:00
kilo-maintainer[bot] b91653bf97 release: v7.1.20 2026-04-02 17:33:20 +00:00
kilo-maintainer[bot] e45ddb41b4 release: v7.1.19 2026-04-02 14:00:55 +00:00
Catriel Müller 581f90f9ae Merge pull request #7800 from Kilo-Org/catrielmuller/kiloclaw-client
feat(cli): KiloClaw Chat on TUI
2026-04-02 07:39:54 -03:00
AaravandMarius 2e3b9a2432 fix: RevertBanner UI shows no changes after successful file revert (#8121)
* core: fix revert diff showing incorrect changes after file restore

When reverting a session, the diff was computed after files were already
reverted to their pre-change state, producing an empty or wrong diff.
By computing the diff before restoring files, the revert summary now
correctly reflects what was actually undone for the user.

* core: reduce revert diff size in DB to save storage

Full file contents were being stored in the session summary diffs,
causing unnecessary database bloat. The webview RevertBanner only
needs file path, line counts, and status — not the full diff content.

* chore(cli): add kilocode_change markers to revert diff changes

---------

Co-authored-by: Marius <marius@kilocode.ai>
2026-04-02 12:21:43 +02:00
kilo-maintainer[bot] 3b2db43a4b release: v7.1.18 2026-04-02 10:18:47 +00:00
Catriel Müller 32f670e1cc Merge branch 'main' into catrielmuller/kiloclaw-client 2026-04-01 16:20:14 -03:00
Catriel Müller 964cc74007 refactor: improve SDK claw types 2026-04-01 16:04:32 -03:00
kilo-maintainer[bot] 8f7a5f48b3 release: v7.1.17 2026-04-01 15:08:40 +00:00
kilo-maintainer[bot] 325a64eaca release: v7.1.16 2026-04-01 14:37:43 +00:00
kilo-maintainer[bot] a1c8e5d798 release: v7.1.15 2026-04-01 12:32:06 +00:00
kilo-maintainer[bot] c9d4d1ac87 release: v7.1.14 2026-04-01 10:39:53 +00:00
kilo-maintainer[bot] 3cc4d38f12 release: v7.1.13 2026-04-01 07:35:46 +00:00
kilo-maintainer[bot] 1e8e07f9dc release: v7.1.12 2026-03-31 22:51:56 +00:00
80f187ebba feat(kilo-vscode): migrate legacy sessions into new extension (#7924)
* feat(vscode): detect sessions in old extension

* feat(vscode): added session types

* feat(cli): add endpoints for inserting a session

* feat(vscode): use session types from sdk for parsing

* feat(kilo-vscode): parsing session project

* feat(vscode): parse legacy session details

* feat(kilo-vscode): refactoring

* feat(vscode): parse legacy session messages

* feat(vscode): parse legacy session parts

* feat(vscode): added testing files and id creation

* feat(vscode): merge tool parts on imported session

* feat(vscode): session message part refactoring

* feat(vscode): cover provider-specific reasoning parts on session migration

* feat(kilo-vscode): handle completion result parts

* feat: type hardening on session migration

* feat(kilo-vscode): create tool part correctly

* feat(kilo-vscode): adjust session part processing

* feat(vscode): persist migrated session in kilo.db

* feat(vscode): add error handling to session migration

* feat(vscode): add directory field to session migration

* feat(kilo-vscode): display completion check on session migration

* feat(vscode): prevent migrating sessions twice

* feat(cli): use correct project id when inserting migrated session

* feat(kilo-vscode): Use correct project id for session migration

* feat(kilo-vscode): load sessions on migration complete

* feat(kilo-vscode): ignore environment details user part when migrating sessions

* feat(cli): create project details following current backend logic

* feat(kilo-vscode): cleaner messages without environment_details parts

* feat(kilo-vscode): refactoring

* feat(kilo-vscode): refactoring and organization

* feat(kilo-vscode): method renaming to improve clarity

* feat(kilo-vscode): added session migration test strategy

* test(kilo-vscode): implement legacy migration unit tests for all migration modules

Replace todo stubs with full test implementations across messages,
parts, tools, reasoning, parser, migrate, project, and session test
files. Add new project.test.ts and session.test.ts covering project
construction, session metadata, and deterministic ID generation.

* style(kilo-vscode): apply prettier formatting across legacy migration source and test files

* fix(legacy-migration): filter out non-user/assistant entries before parsing messages

Exclude system and other non-conversational roles from the conversation
array prior to mapping, ensuring parentID references remain consistent
across imported messages when skipped entries exist.

* refactor(parts): skip part generation for non-conversational message roles

Entries with roles other than user or assistant should not produce
parts, keeping part output consistent with the messages that are
actually imported during legacy migration.

* fix(ids): use semantic kind strings to prevent part ID collisions for reasoning entries

Replace numeric indices with descriptive kind strings ("reasoning",
"provider-reasoning") in extra part ID generation to avoid collisions
between reasoning parts and regular content parts within the same
message.

Introduce `createExtraPartID` to distinguish reasoning-specific IDs
from standard sequential part IDs produced by `createPartID`.

* refactor(session-import): guard against empty worktree in legacy project import

Prevent silent misattribution of migrated sessions by rejecting empty
worktree paths before resolving the project directory. Without this
check, an empty string would fall back to the current process directory,
causing the imported session to be attached to the wrong project.

* perf(cli): cache MCP listTools results to avoid redundant RPCs per loop step (#7922)

MCP.tools() called client.listTools() for every connected server on
every agent loop iteration. With multiple servers this added hundreds
of milliseconds of overhead per step (measured ~300-750ms for remote
servers like Vercel).

Cache listTools results in a module-level Map and return them on
subsequent calls. The cache is invalidated on:
- ToolListChangedNotification from the MCP server
- Server add/connect/disconnect
- Instance dispose (config change, project switch, shutdown)

* fix(agent-manager): add retries to worktree cleanup for macOS .app bundles (#7921)

* chore: hide non-English localization files in GitHub PR diffs

Mark all non-English i18n locale files as linguist-generated=true so
they are collapsed by default in GitHub PR diffs, reducing noise when
reviewing changes that touch translation files.

* feat(vscode): add Browse Marketplace button to MCP settings

Add a "Browse Marketplace" button to the MCP Servers subtab in Agent
Behaviour settings, guiding users to discover and install MCPs from the
marketplace rather than only configuring them manually.

- Add button above the MCP server list that opens the Marketplace panel
- Add openMarketplacePanel webview message type and handler
- Add translations for all 18 supported languages

* fix(vscode): preserve project directory when opening marketplace from settings

Pass the current panel's project directory through to the marketplace
panel so project-scoped MCP installs work correctly in multi-root
workspaces. Without this, the marketplace panel would fall back to
null project directory since there is no active text editor when
clicking from a webview.

* feat(vscode): add Browse Marketplace button to agents and skills tabs

Add the Browse Marketplace button to the Agents and Skills subtabs in
Agent Behaviour settings, matching the existing button in the MCP
Servers subtab. This lets users discover marketplace items from any
of the three configuration tabs.

- Agents tab: added as a ghost button in the header row alongside
  Import and Create Mode buttons
- Skills tab: added as a secondary button at the top-right, matching
  the MCP tab layout
- Extracted the browse handler to the component scope for reuse

* chore: update kilo-vscode visual regression baselines

* perf(agent-manager): extend slimPart to strip heavy tool metadata for faster session switching (#7927)

Extend slim-metadata.ts to handle apply_patch, multiedit, write, and bash
tools in addition to edit. Previously only edit tool parts had their heavy
metadata stripped before IPC serialization. apply_patch parts carried full
file before/after contents per file, write parts carried the entire written
file, and bash parts carried up to 30KB of output — all serialized on every
session switch.

This reduces session-switch time by ~2x for sessions with many tool calls.

* style(legacy-migration): reformat long reasoning push call for readability

* refactor(legacy-migration): filter non-user/assistant entries before indexing

Move the role filter from inside `parseParts` to `parsePartsFromConversation`
so that message indices are derived only from the filtered list. This ensures
part message IDs stay aligned with the imported messages and skipped entries
(e.g. system role) do not cause index gaps in the generated IDs.

* fix(legacy-migration): add `_migrated_` infix to generated IDs

Prefix all migrated entity IDs (sessions, messages, parts) with a
`_migrated_` segment so they are clearly distinguishable from IDs
produced by the regular runtime. Updates tests to assert the new
prefix format.

* refactor(legacy-migration): consolidate conversation parsing into `parseSession`

Remove the intermediate `createMessages` and `createParts` async
wrappers that each independently read and parsed the conversation
file. The file is now fetched and parsed once in `parseSession`,
with the resulting conversation passed directly to
`parseMessagesFromConversation` and `parsePartsFromConversation`,
eliminating redundant I/O.

* fix(parts-builder): remove `toTextWithinMessage` and use `toText` directly

`toTextWithinMessage` was a duplicate of `toText` with identical
behavior. Replace all call sites with `toText` and delete the
redundant function.

* fix(parts-builder): skip provider-specific reasoning when explicit reasoning entry exists

Guard `isProviderSpecificReasoning` with `!isReasoning` to prevent
duplicate reasoning parts when an entry carries both a `type:
"reasoning"` field and a provider-specific reasoning field (e.g.
`reasoning_content`). The explicit reasoning entry takes precedence.

* test(legacy-migration): add coverage for edge cases in parts and tools parsing

Add unit tests for two previously uncovered scenarios:

- Task block extraction: verify only the content inside `<task>` tags
  is kept when text exists outside the legacy task wrapper
- Empty tool result: verify the tool name is used as fallback output
  when `tool_result` carries no readable text content

Also replace the dynamic `FileType.Directory` workaround with the
direct `vscode.FileType.Directory` enum reference, and harden
`parseFile` to throw on non-array JSON instead of silently returning
an empty array.

* feat(legacy-migration): remove session migration tracking from global state

Drop the `readSessionsToMigrate` filter and the post-migration
`globalState` flag that tracked which sessions had already been
migrated. Detection now returns all sessions found in global storage
without filtering by prior migration status.

* fix(session-import): skip duplicate session imports and child data

Check for an existing session row before inserting and return a
`skipped: true` flag when the session already exists. The migration
client honours this flag to bypass message and part imports, avoiding
redundant work when migration is re-run.

Replace `onConflictDoUpdate` with `onConflictDoNothing` on the session
insert path to align with the new pre-check behaviour. Propagate the
optional `skipped` field through the result types and generated SDK
types for project, session, message, and part responses.

* refactor(parts-builder): mark legacy system error text parts as ignored

Tag text parts whose content begins with `[ERROR]` with `ignored: true`
and a `legacy-system-error` metadata source. Introduces a new
`isLegacySystemErrorText` utility in `parts-util` to encapsulate the
detection logic.

* feat(parts-util): extract feedback text from tool_result content into visible parts

Parse `<feedback>` tags embedded in `tool_result` content and emit a
dedicated text part so user feedback is surfaced as a visible message
rather than buried inside tool result data.

Introduces `getFeedbackText` utility to extract and trim the inner
content of `<feedback>` blocks from arbitrary input.

* fix: formatting

---------

Co-authored-by: Marius <marius@kilocode.ai>
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Mark IJbema <mark@kilocode.ai>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-31 17:13:34 +02:00
Marius 8dfb98ea67 fix(sdk): pass duplex in fetch init to survive VS Code proxy-agent wrapper (#7942)
* fix(sdk): pass duplex in fetch init to survive VS Code proxy-agent wrapper

VS Code's vscode-proxy-agent wraps globalThis.fetch and, when proxy or
certificate support is active, calls originalFetch(request, { ...init,
dispatcher }). The previous fix set duplex on the config which propagated
to new Request() construction, but the custom fetch wrapper called
fetch(request) with no init arg. The proxy wrapper then created a new
init without duplex, causing undici to throw on Windows machines with
corporate proxy/cert settings.

Pass { duplex: 'half' } as the explicit init argument in the custom
fetch wrapper so it survives the proxy-agent spread.

Fixes #7847, #7872

* fix(sdk): include timeout in fetch init to preserve Bun timeout override

Address bot review: passing an init arg to fetch() causes Bun to clone
the Request, dropping the req.timeout = false property. Move timeout
into the init object so it survives the clone.
2026-03-31 13:58:16 +02:00
kilo-maintainer[bot] 9fd9ffd8f0 release: v7.1.11 2026-03-31 11:02:44 +00:00
kilo-maintainer[bot] 64f6ca8962 release: v7.1.10 2026-03-31 09:49:05 +00:00
Mark IJbema 9a23857265 Merge pull request #7906 from Kilo-Org/mark/fix-windows-hide-regression-7896
fix: add windowsHide:true to remaining spawn/exec calls to prevent CMD flash on Windows
2026-03-31 09:17:32 +02:00
kiloconnect[bot] 482bf89b69 fix: add windowsHide:true to remaining spawn/exec calls to prevent CMD flash on Windows
Previous fixes in #6813 and subsequent PRs added windowsHide:true to most
spawn sites, but several call sites were missed or regressed:

- SDK server.ts (v1 + v2): kilo serve and TUI spawn
- ts-check.ts: Bun.spawn for tsc invocation
- github.ts: exec for browser open
- desktop-electron cli.ts: install script spawn and version check
- desktop-electron ipc.ts: open-path execFile
- desktop-electron apps.ts: wsl/where execFileSync calls

Without windowsHide:true, each of these subprocess invocations causes a
visible cmd.exe console window to briefly flash on Windows.

Closes #7896
2026-03-30 07:03:58 +00:00
Aarav Sharma e9060468a1 core: deprecate orchestrator agent with visual badge across UI
Mark the orchestrator agent as deprecated so users see a warning badge
in the mode switcher and agent settings, signaling they should migrate
to other agent configurations for task delegation.
2026-03-29 17:24:52 -06:00
kilo-maintainer[bot] 43811bfa03 release: v7.1.9 2026-03-28 07:57:17 +00:00
Marius a9b1612533 fix(sdk): add duplex: half to fix fetch in Node.js/Electron environments (#7811)
Node.js undici requires duplex: "half" when a Request has a ReadableStream
body. The SDK creates Request objects with string bodies that get
auto-converted to ReadableStream internally, triggering this requirement
in certain Electron versions bundled with VS Code.

Fixes #7661
2026-03-27 17:13:24 +01:00
Catriel Müller 8737bdfb19 feat: KiloClaw Chat on TUI 2026-03-27 10:48:01 -03:00
kilo-maintainer[bot] 121f6e3cac release: v7.1.8 2026-03-26 20:05:26 +00:00
kilo-maintainer[bot] 5c0daa4162 release: v7.1.7 2026-03-26 18:42:18 +00:00
kilo-maintainer[bot] 9e5d96dd30 release: v7.1.6 2026-03-26 17:30:35 +00:00
kilo-maintainer[bot] 18c5fc3f22 release: v7.1.5 2026-03-26 09:56:13 +00:00
kilo-maintainer[bot] fd5fee9ec3 release: v7.1.4 2026-03-25 16:32:24 +00:00
Evgeny Shurakov 508378464a Merge pull request #7446 from Kilo-Org/eshurakov/ingest-stream
Remote - add real-time session relay and remote control over WebSocket
2026-03-25 13:43:17 +01:00
Christiaan Arnoldus c0a8fdb358 Avoid building a new SDK object 2026-03-24 17:11:36 +01:00
Catriel Müller 7441339a7f Merge pull request #7535 from Kilo-Org/catrielmuller/kilo-custom-modes-support
feat(gateway): add organization custom modes support
2026-03-24 11:07:19 -03:00
Catriel Müller a8e0da3da7 feat: Kilo gateway custom modes 2026-03-24 10:22:54 -03:00
Evgeny Shurakov 37b866f1ef feat(cli): add remote session relay over WebSocket
Introduce WebSocket-based remote session relay so external clients can
subscribe to sessions, send messages, answer questions, and respond to
permissions in real time.

- RemoteWS manages the authenticated WebSocket lifecycle with reconnect
- RemoteSender dispatches inbound commands and forwards server events
- Backfill pending questions/permissions when a client subscribes
- Add question_reject command for dismissing questions remotely
- Consolidate /remote TUI command into kilo-commands
- Add session.viewed endpoint to the generated SDK
- RemoteProtocol.Preview schema for diagnostic logging
2026-03-24 13:54:30 +01:00
kilo-maintainer[bot] b20cedb571 release: v7.1.3 2026-03-24 10:45:11 +00:00
kilo-maintainer[bot] bb20679c42 release: v7.1.2 2026-03-23 17:48:25 +00:00
kilo-maintainer[bot] 6888ff1515 release: v7.1.1 2026-03-23 16:03:34 +00:00
Marius 6d5a2259fb feat(agent-manager): add drag-and-drop reordering for sidebar worktrees (#7454)
Worktrees in the Agent Manager sidebar can now be reordered via
drag-and-drop, matching the existing tab reordering behavior. The order
is persisted to .kilo/agent-manager.json and restored on restart.

- Add worktreeOrder field to StateFile and WorktreeStateManager
- Add setWorktreeOrder message type for webview-to-extension communication
- Wrap worktree list in DragDropProvider/SortableProvider with Y-axis lock
- Show grab/grabbing cursor during drag via body class
- Clean up stale order entries on worktree removal
2026-03-23 14:59:10 +00:00
kilo-maintainer[bot] ef16ae7fb7 release: v7.1.0 2026-03-20 18:20:58 +00:00
Catriel Müller d7b9f51962 refactor: replace x-opencode-* headers with x-kilo-* across codebase and upstream scripts
Update upstream merge scripts to use a generic x-opencode- → x-kilo- regex
that catches all current and future headers automatically. Apply the same
replacement to all source files so the codebase is ready for the next
upstream merge.
2026-03-20 09:10:57 -03:00
Johnny Amancio a49820192d resolve merge conflicts 2026-03-20 12:18:26 +01:00
Johnny Amancio f3a327d265 refactor: kilo compat for v1.2.24 2026-03-20 11:56:07 +01:00
Imanol Maiztegui f336949a08 Save changes on Settings update (#7312)
* feat(vscode): track session status for busy-session warnings

* feat(vscode): warn before saving settings when sessions are running

* feat(vscode): add draft state and save/discard to config context

* feat(vscode): Save button on Settings panel

* fix(vscode): pass remove permission commands correctly to backend

* feat(vscode): handle permission removals

* fix(vscode): detect other sessions in settings panel

* feat(vscode): translations

* feat(vscode): refresh config state on auto-approve tab

* fix(vscode): formatting and unit tests

* fix: reset Config.state cache on no-dispose config write

* fix(vscode): Detect sessions opened before Settings tab is opened

* fix(vscode): Removed previous fix changes
2026-03-19 22:12:09 +01:00
kilo-maintainer[bot] 6ed7fdb40d release: v7.0.51 2026-03-19 13:20:57 +00:00
Mark IJbema b1c91bcbbc Merge pull request #6225 from Kilo-Org/mark/move-dynamic-context-to-user-message
refactor: move dynamic editor context from system prompt to user message
2026-03-19 12:04:48 +01:00
Catriel Müller 7edd3f6fc2 Merge branch 'main' into catrielmuller/kilo-opencode-v1.2.21 2026-03-18 17:10:56 -03:00