Skip to content

Commit c200b90

Browse files
Merge branch 'main' into catrielmuller/814-qdrant-port
2 parents aff718e + 6f1a940 commit c200b90

38 files changed

+303
-109
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# kilo-code
22

3+
## [v4.45.0]
4+
5+
- [#867](https://github.com/Kilo-Org/kilocode/pull/867) [`717823f`](https://github.com/Kilo-Org/kilocode/commit/717823f40419bda32813b3e1f9f357fdabfa89df) Thanks [@Juice10](https://github.com/Juice10)! - Add copy prompt button to task actions. Based on [@vultrnerd's feedback](https://github.com/Kilo-Org/kilocode/discussions/850).
6+
7+
### Patch Changes
8+
9+
- [#890](https://github.com/Kilo-Org/kilocode/pull/890) [`1a35cfe`](https://github.com/Kilo-Org/kilocode/commit/1a35cfe2c0dbfee68c09c7abeb42199e8713095f) Thanks [@hassoncs](https://github.com/hassoncs)! - Only show the colorful gutter bars when hovering over the Task Timeline
10+
11+
## [v4.44.1]
12+
13+
### Patch Changes
14+
15+
- [#887](https://github.com/Kilo-Org/kilocode/pull/887) [`df10163`](https://github.com/Kilo-Org/kilocode/commit/df101636d0f9851b2f3ee4820c84cb09b3c41f33) Thanks [@kevinvandijk](https://github.com/kevinvandijk)! - Update text on welcome screen
16+
17+
- [#886](https://github.com/Kilo-Org/kilocode/pull/886) [`084cee7`](https://github.com/Kilo-Org/kilocode/commit/084cee76dc59a2f83ddf36dfdf71666f89a2898a) Thanks [@chrarnoldus](https://github.com/chrarnoldus)! - Fixed crashes with the error message "Bad substitution" and "Cannot read properties of undefined (reading 'includes')"
18+
319
## [v4.44.0]
420

521
- [#881](https://github.com/Kilo-Org/kilocode/pull/881) [`30836f4`](https://github.com/Kilo-Org/kilocode/commit/30836f4d11a02769787af91c552789c14118ebdf) Thanks [@kevinvandijk](https://github.com/kevinvandijk)! - Add support for Gemini CLI provider (thanks Roo & Cline!)

pnpm-lock.yaml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
# Replace "Roo Code" with "Kilo Code" in all translation files
4+
# This includes both i18n locale files and package.nls files
5+
6+
# Fix i18n locale JSON files
7+
find src/i18n/locales -name "*.json" -type f -exec sed -i '' -E 's/(^|[^a-zA-Z])Roo Code([^a-zA-Z]|$)/\1Kilo Code\2/g' {} \;
8+
9+
# Fix package.nls JSON files
10+
find . -name "package.nls*.json" -type f -exec sed -i '' -E 's/(^|[^a-zA-Z])Roo Code([^a-zA-Z]|$)/\1Kilo Code\2/g' {} \;

src/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"displayName": "%extension.displayName%",
44
"description": "%extension.description%",
55
"publisher": "kilocode",
6-
"version": "4.44.0",
6+
"version": "4.45.0",
77
"icon": "assets/icons/logo-outline-black.png",
88
"galleryBanner": {
99
"color": "#FFFFFF",

webview-ui/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"@roo-code/types": "workspace:^",
3333
"@tailwindcss/vite": "^4.0.0",
3434
"@tanstack/react-query": "^5.68.0",
35+
"@types/seedrandom": "^3.0.8",
3536
"@vscode/codicons": "^0.0.36",
3637
"@vscode/webview-ui-toolkit": "^1.4.0",
3738
"axios": "^1.7.4",
@@ -66,6 +67,7 @@
6667
"remark-gfm": "^4.0.1",
6768
"remark-math": "^6.0.0",
6869
"remove-markdown": "^0.6.0",
70+
"seedrandom": "^3.0.5",
6971
"shell-quote": "^1.8.2",
7072
"shiki": "^3.2.1",
7173
"source-map": "^0.7.4",
@@ -103,9 +105,9 @@
103105
"jest": "^29.7.0",
104106
"jest-environment-jsdom": "^29.7.0",
105107
"jest-simple-dot-reporter": "^1.0.5",
108+
"jsdom": "^26.0.0",
106109
"storybook": "^8.4.7",
107110
"ts-jest": "^29.2.5",
108-
"jsdom": "^26.0.0",
109111
"typescript": "5.8.3",
110112
"vite": "6.3.5",
111113
"vitest": "^3.2.3"

webview-ui/src/components/chat/ChatView.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,15 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
896896
const isAllowedCommand = useCallback(
897897
(message: ClineMessage | undefined): boolean => {
898898
if (message?.type !== "ask") return false
899-
return validateCommand(message.text || "", allowedCommands || [])
899+
// kilocode_change start wrap in try/catch
900+
try {
901+
return validateCommand(message.text || "", allowedCommands || [])
902+
} catch (e) {
903+
// shell-quote sometimes throws a "Bad substitution" error
904+
console.error("Cannot validate command, auto-approve denied.", e)
905+
return false
906+
}
907+
// kilocode_change end
900908
},
901909
[allowedCommands],
902910
)

webview-ui/src/components/chat/TaskActions.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useTranslation } from "react-i18next"
55
import type { HistoryItem } from "@roo-code/types"
66

77
import { vscode } from "@/utils/vscode"
8+
import { useCopyToClipboard } from "@/utils/clipboard" // kilocode_change - Added copy utility for task prompt
89
import { useExtensionState } from "@/context/ExtensionStateContext"
910
import {
1011
Button,
@@ -30,6 +31,7 @@ export const TaskActions = ({ item, buttonsDisabled }: TaskActionsProps) => {
3031
const [shareDropdownOpen, setShareDropdownOpen] = useState(false)
3132
const { t } = useTranslation()
3233
const { sharingEnabled } = useExtensionState()
34+
const { copyWithFeedback, showCopyFeedback } = useCopyToClipboard() // kilocode_change - Added copy utility for task prompt
3335

3436
const handleShare = (visibility: "organization" | "public") => {
3537
vscode.postMessage({
@@ -93,6 +95,16 @@ export const TaskActions = ({ item, buttonsDisabled }: TaskActionsProps) => {
9395
disabled={buttonsDisabled}
9496
onClick={() => vscode.postMessage({ type: "exportCurrentTask" })}
9597
/>
98+
{/* kilocode_change start - Added copy button for task prompt */}
99+
{item?.task && (
100+
<IconButton
101+
iconClass={showCopyFeedback ? "codicon-check" : "codicon-copy"}
102+
title={t("history:copyPrompt")}
103+
disabled={buttonsDisabled || !item}
104+
onClick={(e) => copyWithFeedback(item.task, e)}
105+
/>
106+
)}
107+
{/* kilocode_change end */}
96108
{!!item?.size && item.size > 0 && (
97109
<>
98110
<div className="flex items-center">

webview-ui/src/components/chat/TaskTimeline.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { consolidateMessagesForTimeline } from "../../utils/timeline/consolidate
77
import { calculateTaskTimelineSizes } from "../../utils/timeline/calculateTaskTimelineSizes"
88
import { getTaskTimelineMessageColor } from "../../utils/messageColors"
99
import { TooltipProvider } from "../ui/tooltip"
10+
import { useExtensionState } from "../../context/ExtensionStateContext"
1011

1112
// We hide the scrollbars for the TaskTimeline by wrapping it in a container with
1213
// overflow hidden. This hides the scrollbars for the actual Virtuoso element
@@ -20,9 +21,18 @@ interface TaskTimelineProps {
2021
}
2122

2223
export const TaskTimeline = memo<TaskTimelineProps>(({ groupedMessages, onMessageClick, isTaskActive = false }) => {
24+
const { setHoveringTaskTimeline } = useExtensionState()
2325
const virtuosoRef = useRef<VirtuosoHandle>(null)
2426
const previousGroupedLengthRef = useRef(groupedMessages.length)
2527

28+
const handleMouseEnter = useCallback(() => {
29+
setHoveringTaskTimeline(true)
30+
}, [setHoveringTaskTimeline])
31+
32+
const handleMouseLeave = useCallback(() => {
33+
setHoveringTaskTimeline(false)
34+
}, [setHoveringTaskTimeline])
35+
2636
const timelineMessagesData = useMemo(() => {
2737
const { processedMessages, messageToOriginalIndex } = consolidateMessagesForTimeline(groupedMessages)
2838
const messageSizeData = calculateTaskTimelineSizes(processedMessages)
@@ -72,7 +82,11 @@ export const TaskTimeline = memo<TaskTimelineProps>(({ groupedMessages, onMessag
7282

7383
return (
7484
<TooltipProvider>
75-
<div className="w-full px-2 overflow-hidden" style={{ height: `${TASK_TIMELINE_MAX_HEIGHT_PX}px` }}>
85+
<div
86+
className="w-full px-2 overflow-hidden"
87+
style={{ height: `${TASK_TIMELINE_MAX_HEIGHT_PX}px` }}
88+
onMouseEnter={handleMouseEnter}
89+
onMouseLeave={handleMouseLeave}>
7690
<Virtuoso
7791
ref={virtuosoRef}
7892
data={timelineMessagesData}

webview-ui/src/components/kilocode/Welcome/WelcomeView.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ const WelcomeView = () => {
3636
<Tab>
3737
<TabContent className="flex flex-col gap-5">
3838
<h2 className="m-0 p-0">{t("kilocode:welcome.greeting")}</h2>
39-
<div>{t("kilocode:welcome.introText")}</div>
39+
<div>{t("kilocode:welcome.introText1")}</div>
40+
<div>{t("kilocode:welcome.introText2")}</div>
41+
<div>{t("kilocode:welcome.introText3")}</div>
4042
{manualConfig ? (
4143
<>
4244
<ApiOptions
@@ -72,6 +74,15 @@ const WelcomeView = () => {
7274
<ButtonSecondary onClick={() => setManualConfig(true)}>
7375
{t("kilocode:welcome.manualModeButton")}
7476
</ButtonSecondary>
77+
<div className="text-center text-vscode-descriptionForeground">
78+
{t("kilocode:welcome.alreadySignedUp")}{" "}
79+
<a
80+
href={getKiloCodeBackendAuthUrl(uriScheme, uiKind)}
81+
className="underline"
82+
style={{ color: "inherit" }}>
83+
{t("kilocode:welcome.loginText")}
84+
</a>
85+
</div>
7586
</div>
7687
</div>
7788
)}
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1+
import { useExtensionState } from "@/context/ExtensionStateContext"
12
import { cn } from "@/lib/utils"
23
import { getTaskTimelineMessageColor } from "@/utils/messageColors"
34
import type { ClineMessage } from "@roo-code/types"
45

56
export function KiloChatRowGutterBar({ message }: { message: ClineMessage }) {
7+
const { hoveringTaskTimeline } = useExtensionState()
8+
69
return (
7-
<div className={cn("absolute left-0 top-0 bottom-0 w-0.5 opacity-70", getTaskTimelineMessageColor(message))} />
10+
<div
11+
className={cn(
12+
"absolute w-[4px] left-[4px] top-0 bottom-0 opacity-0 transition-opacity",
13+
getTaskTimelineMessageColor(message),
14+
hoveringTaskTimeline && "opacity-70",
15+
)}
16+
/>
817
)
918
}

0 commit comments

Comments
 (0)