* feat: add apply-to-local button in Agent Manager
* fix: address PR review - path traversal guard, safer regex, stdin null check
- Reject selectedFiles with absolute paths or .. components
- Narrow conflict regex to known git error patterns (avoids Windows colon misparse)
- Fail early if child.stdin is null instead of silently dropping patch data
* fix: address PR review round 2
- Add ApplyDialog.tsx to CSS consistency test TSX_FILES
- Clear applyTarget when worktree is deleted (avoids stale dialog)
- Add integration tests for checkApplyPatch and applyPatch
* fix: add missing vscode.Uri mock in KiloProvider session refresh test
The mock was missing the Uri namespace, causing TypeError on CI where
Bun resolves the type annotation at runtime. Locally it worked because
the constructor param was cast via 'as never'.
* fix: harden KiloProvider test mock with full Uri class and Disposable
The previous fix only added static methods to Uri. CI Bun resolves
vscode.Uri as a runtime class reference in the constructor parameter
type position. Provide a proper MockUri class, Disposable, and
EventEmitter stubs so the mock satisfies all runtime lookups.
Screenshot baselines are captured on Linux CI. Font rendering and
anti-aliasing differ on macOS, producing false-positive diffs. Skip
the entire suite on darwin with a warning message and avoid the
unnecessary Storybook fetch.
Per review feedback:
- Run runtime checks from packages/kilo-ui/ (the actual import path kilo-vscode
uses) instead of packages/ui/
- Add source-level check for onOpenFile prop and OpenFileFn type in DataProvider
(TypeScript types erased at runtime, so source analysis needed)
- Add source-level check for ToolInfo type icon/title fields
- Document why getToolInfo() can't be invoked (needs SolidJS context)
- ToolProps is a TS interface caught by typecheck, not runtime-testable
Instead of reading source files and matching regexes, actually import the
upstream modules and verify exports at runtime. Uses Bun.spawnSync to run
from packages/ui/ where the SolidJS JSX context is available.
- ToolRegistry.render(name) returns a function for each depended-on tool
- getToolInfo is an exported function
- DataProvider and useData are exported functions
This is more robust than regex matching and catches real breakage.
- Add package.json to Storybook cache key (dep version changes invalidate cache)
- Add res.ok check before parsing Storybook index JSON
- Remove duplicate maxDiffPixelRatio (already in playwright.config.ts)
- Use parseInt for PLAYWRIGHT_WORKERS to handle non-numeric values
The workflow now:
1. Runs --update-snapshots to write new/changed baselines
2. Commits any changes back to the branch
3. Fails the job if baselines changed, so the PR author is notified
This avoids silently accepting visual changes — the author must pull
and review the updated baselines.
- Add @playwright/test, playwright.config.ts (Chromium, 1280x720)
- Test file auto-discovers all stories from Storybook's index.json
- Screenshots cropped to #storybook-root, grouped per component
- CI workflow on Blacksmith with Storybook/Playwright/Bun caching
- Paths filter: only runs when kilo-ui or its deps change
- Auto-commits missing baselines back to the branch via CI
- Skips head-only (Font, Favicon) and non-deterministic (Typewriter) stories
- Documented in CONTRIBUTING.md
packages/app is not actively maintained so its E2E tests on Windows
and Linux are no longer useful. Disable the e2e job with `if: false`
and remove it from the required gate job's dependencies.
* fix(docs): self-host favicon assets and fix broken head declarations
- Remove duplicate ICO favicon (shortcut icon + icon), keep single icon declaration
- Add self-hosted favicon assets in public/favicon/ (copied from packages/ui v3 assets)
- Fix SVG favicon path (was 404 at /favicon.svg)
- Fix apple-touch-icon path (was 404 at /apple-touch-icon.png)
- Add 96x96 desktop PNG favicon
- Add apple-mobile-web-app-title meta tag
- Add site.webmanifest with correct Kilo Code branding
- All declared paths now resolve to actual files under /docs/ basePath
* fix(docs): use correct favicon assets from kilo.ai landing site
Replace incorrect favicon files (sourced from packages/ui) with the exact
assets used on kilo.ai (from kilocode-landing repo):
- Replace all icon PNGs with correct landing site versions
- Rename web-app-manifest-*.png to android-chrome-*.png to match landing site
- Remove favicon-96x96.png (not used on landing site)
- Update favicon.ico and favicon.svg with correct landing site versions
- Update site.webmanifest to reference android-chrome-* files without maskable purpose
- Add shortcut icon declaration to match landing site head config
* Update packages/kilo-docs/public/favicon/favicon.svg
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
---------
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Brendan O'Leary <github@olearycrew.com>
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
- tool-info-contract: match icon/title within the ToolInfo type definition
specifically, not any occurrence in the file
- data-provider-contract: match openFile: props.onOpenFile pattern instead
of bare substring match
Verifies that the DataProvider in packages/ui/src/context/data.tsx still
accepts the onOpenFile prop and exports OpenFileFn. These are kilocode
additions that the extension webview depends on.
Ref: testing-gaps-and-visual-testing-plan.md §1.4
Verifies that the ToolInfo type and getToolInfo() function exported from
message-part.tsx still have the icon and title fields that
VscodeSessionTurn depends on.
Ref: testing-gaps-and-visual-testing-plan.md §1.3
Verifies that tool names kilo-vscode depends on (bash, task, read, write,
glob, edit, todowrite) are still registered in the upstream ToolRegistry
in packages/ui/src/components/message-part.tsx.
Ref: testing-gaps-and-visual-testing-plan.md §1.2
These packages feed directly into the extension webview. An upstream opencode
merge that only touches packages/ui or packages/kilo-ui would previously skip
the kilo-vscode unit tests entirely, allowing contract regressions to merge
undetected.
The unit tests (bun test tests/unit/) are pure — no CLI binary needed — so
adding these paths has no performance cost.