mirror of
https://github.com/All-Hands-AI/OpenHands.git
synced 2026-01-09 14:57:59 -05:00
[Fix]: Don't allow endpoint to modify conversation trigger (#8396)
This commit is contained in:
@@ -43,7 +43,6 @@ describe("HomeHeader", () => {
|
||||
await userEvent.click(launchButton);
|
||||
|
||||
expect(createConversationSpy).toHaveBeenCalledExactlyOnceWith(
|
||||
"gui",
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
|
||||
@@ -173,7 +173,6 @@ describe("RepoConnector", () => {
|
||||
await userEvent.click(launchButton);
|
||||
|
||||
expect(createConversationSpy).toHaveBeenCalledExactlyOnceWith(
|
||||
"gui",
|
||||
"rbren/polaris",
|
||||
"github",
|
||||
undefined,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -200,7 +200,6 @@ export function RepositorySelectionForm({
|
||||
onClick={() =>
|
||||
createConversation({
|
||||
selectedRepository,
|
||||
conversation_trigger: "gui",
|
||||
selected_branch: selectedBranch?.name,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -8,6 +8,7 @@ class ConversationTrigger(Enum):
|
||||
GUI = 'gui'
|
||||
SUGGESTED_TASK = 'suggested_task'
|
||||
REMOTE_API_KEY = 'openhands_api'
|
||||
SLACK = 'slack'
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user