[Fix]: Don't allow endpoint to modify conversation trigger (#8396)

This commit is contained in:
Rohit Malhotra
2025-05-13 11:57:32 -04:00
committed by GitHub
parent 880ec57c78
commit 81c754ec65
12 changed files with 5 additions and 23 deletions

View File

@@ -43,7 +43,6 @@ describe("HomeHeader", () => {
await userEvent.click(launchButton);
expect(createConversationSpy).toHaveBeenCalledExactlyOnceWith(
"gui",
undefined,
undefined,
undefined,

View File

@@ -173,7 +173,6 @@ describe("RepoConnector", () => {
await userEvent.click(launchButton);
expect(createConversationSpy).toHaveBeenCalledExactlyOnceWith(
"gui",
"rbren/polaris",
"github",
undefined,

View File

@@ -85,7 +85,6 @@ describe("TaskCard", () => {
await userEvent.click(launchButton);
expect(createConversationSpy).toHaveBeenCalledWith(
"suggested_task",
MOCK_RESPOSITORIES[0].full_name,
MOCK_RESPOSITORIES[0].git_provider,
undefined,

View File

@@ -10,7 +10,6 @@ import {
GetTrajectoryResponse,
GitChangeDiff,
GitChange,
ConversationTrigger,
} from "./open-hands.types";
import { openHands } from "./open-hands-axios";
import { ApiSettings, PostApiSettings, Provider } from "#/types/settings";
@@ -144,7 +143,6 @@ class OpenHands {
}
static async createConversation(
conversation_trigger: ConversationTrigger = "gui",
selectedRepository?: string,
git_provider?: Provider,
initialUserMsg?: string,
@@ -154,7 +152,6 @@ class OpenHands {
selected_branch?: string,
): Promise<Conversation> {
const body = {
conversation_trigger,
repository: selectedRepository,
git_provider,
selected_branch,

View File

@@ -28,7 +28,7 @@ export function HomeHeader() {
testId="header-launch-button"
variant="primary"
type="button"
onClick={() => createConversation({ conversation_trigger: "gui" })}
onClick={() => createConversation({})}
isDisabled={isCreatingConversation}
>
{!isCreatingConversation && "Launch from Scratch"}

View File

@@ -200,7 +200,6 @@ export function RepositorySelectionForm({
onClick={() =>
createConversation({
selectedRepository,
conversation_trigger: "gui",
selected_branch: selectedBranch?.name,
})
}

View File

@@ -40,7 +40,6 @@ export function TaskCard({ task }: TaskCardProps) {
const repo = getRepo(task.repo, task.git_provider);
return createConversation({
conversation_trigger: "suggested_task",
selectedRepository: repo,
suggested_task: task,
});

View File

@@ -52,7 +52,7 @@ export function TaskForm({ ref }: TaskFormProps) {
const formData = new FormData(event.currentTarget);
const q = formData.get("q")?.toString();
createConversation({ q, conversation_trigger: "gui" });
createConversation({ q });
};
return (

View File

@@ -6,7 +6,6 @@ import OpenHands from "#/api/open-hands";
import { setInitialPrompt } from "#/state/initial-query-slice";
import { RootState } from "#/store";
import { GitRepository } from "#/types/git";
import { ConversationTrigger } from "#/api/open-hands.types";
import { SuggestedTask } from "#/components/features/home/tasks/task.types";
export const useCreateConversation = () => {
@@ -21,7 +20,6 @@ export const useCreateConversation = () => {
return useMutation({
mutationKey: ["create-conversation"],
mutationFn: async (variables: {
conversation_trigger: ConversationTrigger;
q?: string;
selectedRepository?: GitRepository | null;
selected_branch?: string;
@@ -30,7 +28,6 @@ export const useCreateConversation = () => {
if (variables.q) dispatch(setInitialPrompt(variables.q));
return OpenHands.createConversation(
variables.conversation_trigger,
variables.selectedRepository
? variables.selectedRepository.full_name
: undefined,

View File

@@ -50,7 +50,6 @@ app = APIRouter(prefix='/api')
class InitSessionRequest(BaseModel):
conversation_trigger: ConversationTrigger = ConversationTrigger.GUI
repository: str | None = None
git_provider: ProviderType | None = None
selected_branch: str | None = None
@@ -181,9 +180,10 @@ async def new_conversation(
image_urls = data.image_urls or []
replay_json = data.replay_json
suggested_task = data.suggested_task
conversation_trigger = data.conversation_trigger
git_provider = data.git_provider
conversation_trigger = ConversationTrigger.GUI
if suggested_task:
initial_user_msg = suggested_task.get_prompt_for_task()
conversation_trigger = ConversationTrigger.SUGGESTED_TASK

View File

@@ -8,6 +8,7 @@ class ConversationTrigger(Enum):
GUI = 'gui'
SUGGESTED_TASK = 'suggested_task'
REMOTE_API_KEY = 'openhands_api'
SLACK = 'slack'
@dataclass

View File

@@ -240,7 +240,6 @@ async def test_new_conversation_success(provider_handler_mock):
mock_create_conversation.return_value = 'test_conversation_id'
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.GUI,
repository='test/repo',
selected_branch='main',
initial_user_msg='Hello, agent!',
@@ -297,7 +296,6 @@ async def test_new_conversation_with_suggested_task(provider_handler_mock):
)
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.SUGGESTED_TASK,
repository='test/repo',
selected_branch='main',
suggested_task=test_task,
@@ -347,7 +345,6 @@ async def test_new_conversation_missing_settings(provider_handler_mock):
)
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.GUI,
repository='test/repo',
selected_branch='main',
initial_user_msg='Hello, agent!',
@@ -377,7 +374,6 @@ async def test_new_conversation_invalid_api_key(provider_handler_mock):
)
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.GUI,
repository='test/repo',
selected_branch='main',
initial_user_msg='Hello, agent!',
@@ -469,7 +465,6 @@ async def test_new_conversation_with_bearer_auth(provider_handler_mock):
# Create the request object
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.GUI, # This should be overridden
repository='test/repo',
selected_branch='main',
initial_user_msg='Hello, agent!',
@@ -503,7 +498,6 @@ async def test_new_conversation_with_null_repository():
# Create the request object with null repository
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.GUI,
repository=None, # Explicitly set to None
selected_branch=None,
initial_user_msg='Hello, agent!',
@@ -541,7 +535,6 @@ async def test_new_conversation_with_provider_authentication_error(
# Create the request object
test_request = InitSessionRequest(
conversation_trigger=ConversationTrigger.GUI,
repository='test/repo',
selected_branch='main',
initial_user_msg='Hello, agent!',
@@ -571,7 +564,6 @@ async def test_new_conversation_with_provider_authentication_error(
@pytest.mark.asyncio
async def test_new_conversation_with_unsupported_params(test_client):
test_request_data = {
'conversation_trigger': 'GUI', # This is a valid parameter
'repository': 'test/repo', # This is valid
'selected_branch': 'main', # This is valid
'initial_user_msg': 'Hello, agent!', # Valid parameter