Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/weak-swans-study.md

This file was deleted.

24 changes: 5 additions & 19 deletions src/core/Cline.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3243,9 +3243,6 @@ export class Cline {
customInstructions: globalCustomInstructions,
preferredLanguage,
} = (await this.providerRef.deref()?.getState()) ?? {}

const powerSteering = Experiments.isEnabled(experiments ?? {}, EXPERIMENT_IDS.POWER_STEERING)

const currentMode = mode ?? defaultModeSlug
const modeDetails = await getFullModeDetails(currentMode, customModes, customModePrompts, {
cwd,
Expand All @@ -3255,8 +3252,11 @@ export class Cline {
details += `\n\n# Current Mode\n`
details += `<slug>${currentMode}</slug>\n`
details += `<name>${modeDetails.name}</name>\n`
if (powerSteering) {
if (Experiments.isEnabled(experiments ?? {}, EXPERIMENT_IDS.POWER_STEERING)) {
details += `<role>${modeDetails.roleDefinition}</role>\n`
if (modeDetails.customInstructions) {
details += `<custom_instructions>${modeDetails.customInstructions}</custom_instructions>\n`
}
}

// Add warning if not in code mode
Expand All @@ -3268,21 +3268,7 @@ export class Cline {
) {
const currentModeName = getModeBySlug(currentMode, customModes)?.name ?? currentMode
const defaultModeName = getModeBySlug(defaultModeSlug, customModes)?.name ?? defaultModeSlug
details += `\n\nNOTE: You are currently in '${currentModeName}' mode which only allows read-only operations. To write files or execute commands, the user will need to switch to '${defaultModeName}' mode or another mode with these capabilities. Note that only the user can switch modes.`
}

if (powerSteering) {
if (modeDetails.customInstructions) {
details += `\n\n# Custom Instructions\n`
details += `<custom_instructions>${modeDetails.customInstructions}</custom_instructions>\n`
}

const taskMessage = this.clineMessages[0]?.text ?? ""

if (taskMessage) {
details += `\n\n# Current Task\n\n`
details += `<task>${taskMessage}</task>\n`
}
details += `\n\nNOTE: You are currently in '${currentModeName}' mode which only allows read-only operations. To write files or execute commands, the user will need to switch to '${defaultModeName}' mode. Note that only the user can switch modes.`
}

if (includeFileDetails) {
Expand Down
84 changes: 0 additions & 84 deletions src/core/__tests__/Cline.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -466,90 +466,6 @@ describe("Cline", () => {
expect(details).toMatch(/1\/1\/2024.*5:00:00 AM.*\(America\/Los_Angeles, UTC-7:00\)/) // Full time string format
})

it("should maintain correct section order with context size before file listing", async () => {
const cline = new Cline(mockProvider, mockApiConfig, undefined, false, false, undefined, "test task")

const details = await cline["getEnvironmentDetails"](true)

const contextSizeIndex = details.indexOf("# Current Context Size")
const fileListingIndex = details.indexOf("# Current Working Directory")

expect(contextSizeIndex).toBeGreaterThan(-1)
expect(fileListingIndex).toBeGreaterThan(-1)
expect(contextSizeIndex).toBeLessThan(fileListingIndex)
})

it("should include power steering content when experiment is enabled", async () => {
// Mock provider state
mockProvider.getState = jest.fn().mockResolvedValue({
customInstructions: "test instructions",
mode: "code",
customModes: [],
customModePrompts: {},
preferredLanguage: "en",
})

const cline = new Cline(
mockProvider,
mockApiConfig,
"test instructions",
false,
false,
undefined,
"test task",
)

// Mock experiments module
const { experiments, EXPERIMENT_IDS } = require("../../shared/experiments")
jest.spyOn(experiments, "isEnabled").mockImplementation((config, id) => {
return id === EXPERIMENT_IDS.POWER_STEERING ? true : false
})

const details = await cline["getEnvironmentDetails"](false)

// Verify sections are present
expect(details).toContain("# Custom Instructions")
expect(details).toContain("# Current Task")

// Verify task content
expect(details).toContain("<task>test task</task>")
})

it("should exclude power steering content when experiment is disabled", async () => {
// Mock provider state
mockProvider.getState = jest.fn().mockResolvedValue({
customInstructions: "test instructions",
mode: "code",
customModes: [],
customModePrompts: {},
preferredLanguage: "en",
})

const cline = new Cline(
mockProvider,
mockApiConfig,
"test instructions",
false,
false,
undefined,
"test task",
)

// Mock experiments module
const { experiments, EXPERIMENT_IDS } = require("../../shared/experiments")
jest.spyOn(experiments, "isEnabled").mockImplementation((config, id) => {
return id === EXPERIMENT_IDS.POWER_STEERING ? false : true
})

const details = await cline["getEnvironmentDetails"](false)

// Verify sections are not present
expect(details).not.toContain("# Custom Instructions")
expect(details).not.toContain("<custom_instructions>")
expect(details).not.toContain("# Current Task")
expect(details).not.toContain("<task>")
})

describe("API conversation handling", () => {
it("should clean conversation history before sending to API", async () => {
const cline = new Cline(mockProvider, mockApiConfig, undefined, false, false, undefined, "test task")
Expand Down
2 changes: 1 addition & 1 deletion src/shared/__tests__/experiments.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe("experiments", () => {
expect(experimentConfigsMap.POWER_STEERING).toMatchObject({
name: 'Use experimental "power steering" mode',
description:
"When enabled, Roo will remind the model about the details of the original task and its current mode definition more frequently. This will lead to stronger adherence to its instructions, but will use more tokens per message.",
"When enabled, Roo will remind the model about the details of its current mode definition more frequently. This will lead to stronger adherence to role definitions and custom instructions, but will use more tokens per message.",
enabled: false,
})
})
Expand Down
2 changes: 1 addition & 1 deletion src/shared/experiments.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export const experimentConfigsMap: Record<ExperimentKey, ExperimentConfig> = {
POWER_STEERING: {
name: 'Use experimental "power steering" mode',
description:
"When enabled, Roo will remind the model about the details of the original task and its current mode definition more frequently. This will lead to stronger adherence to its instructions, but will use more tokens per message.",
"When enabled, Roo will remind the model about the details of its current mode definition more frequently. This will lead to stronger adherence to role definitions and custom instructions, but will use more tokens per message.",
enabled: false,
},
}
Expand Down
Loading