Skip to content

Commit 00739a7

Browse files
committed
Fix and improve ACP request permission.
1 parent 9bd56a3 commit 00739a7

3 files changed

Lines changed: 47 additions & 23 deletions

File tree

src/eepp/ui/uiselectbutton.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ void UISelectButton::setSelected( bool set ) {
131131
void UISelectButton::setSelectOnClick( bool set ) {
132132
if ( set ) {
133133
if ( mSelectOnClickCbId == 0 )
134-
mSelectOnClickCbId =
135-
on( Event::MouseClick, [this]( const Event* ) { toggleSelection(); } );
134+
mSelectOnClickCbId = onClick( [this]( const Event* ) { toggleSelection(); } );
136135
} else {
137136
if ( mSelectOnClickCbId != 0 )
138137
removeEventListener( mSelectOnClickCbId );

src/tools/ecode/plugins/aiassistant/acp/acpprotocol.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ json RequestPermissionResponse::toJson() const {
305305
json j = { { "outcome", outcome } };
306306
if ( optionId )
307307
j["optionId"] = *optionId;
308-
return j;
308+
return { { "outcome", j } };
309309
}
310310

311311
}} // namespace ecode::acp

src/tools/ecode/plugins/aiassistant/chatui.cpp

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,9 @@ CodeEditor.llm_chat_input {
416416
text-as-fallback: true;
417417
}
418418
.llm_chatui PushButton:hover,
419-
.llm_chatui SelectButton:hover {
419+
.llm_chatui SelectButton:hover,
420+
.llm_chatui .permission_options PushButton:focus,
421+
.llm_chatui .permission_options SelectButton:focus {
420422
border-color: var(--primary);
421423
}
422424
.llm_conversation_opt PushButton {
@@ -482,6 +484,21 @@ DropDownList.role_ui {
482484
foreground-size: 12dp 16dp;
483485
foreground-tint: var(--icon);
484486
}
487+
.tool_permission {
488+
background-color: var(--list-back);
489+
border-radius: 8dp;
490+
padding: 4dp;
491+
}
492+
.tool_permission .llm_conversation_opt {
493+
background-color: var(--back);
494+
border-radius: 4dp;
495+
}
496+
.tool_permission .permission_options {
497+
margin-top: 8dp;
498+
}
499+
.tool_permission .permission_options > PushButton {
500+
margin-right: 8dp;
501+
}
485502
]]>
486503
</style>
487504
<Splitter lw="mp" lh="mp" orientation="vertical" splitter-partition="75%" padding="4dp">
@@ -555,14 +572,13 @@ static const char* DEFAULT_CHAT_GLOBE = R"xml(
555572
)xml";
556573

557574
static const char* DEFAULT_PERMISSION_GLOBE = R"xml(
558-
<vbox class="llm_conversation tool_permission" lw="mp" lh="wc" margin-bottom="8dp">
559-
<hbox class="llm_conversation_opt" lw="mp" lh="wc" background-color="var(--primary)" padding="4dp">
560-
<TextView text="@string(tool_call_permission_request, Tool Call Permission Request)" font-style="bold" margin-left="4dp" />
561-
</hbox>
562-
563-
<vbox class="data_ui" lw="mp" lh="wc" padding="8dp" background-color="var(--tab-back)">
564-
<TextView class="permission_desc" lw="mp" lh="wc" word-wrap="true" />
565-
<hbox class="permission_options" lw="mp" lh="wc" margin-top="8dp" />
575+
<vbox class="llm_conversation tool_permission" lw="mp" lh="wc">
576+
<hbox class="llm_conversation_opt" lw="mp" lh="wc" padding="4dp">
577+
<TextView text="@string(tool_call_permission_request, Tool Call Permission Request)" font-style="bold" margin-left="4dp" />
578+
</hbox>
579+
<vbox class="data_ui" lw="mp" lh="wc" padding="8dp">
580+
<MarkdownView class="permission_desc" lw="mp" lh="wc" />
581+
<StackLayout class="permission_options" lw="mp" lh="wc" />
566582
</vbox>
567583
</vbox>
568584
)xml";
@@ -2400,27 +2416,29 @@ void LLMChatUI::addPermissionUI( const acp::RequestPermissionRequest& req,
24002416
UIWidget* chat =
24012417
mChatsList->getUISceneNode()->loadLayoutFromString( DEFAULT_PERMISSION_GLOBE, mChatsList );
24022418

2403-
UITextView* desc = chat->findByClass<UITextView>( "permission_desc" );
2419+
UIMarkdownView* desc = chat->findByClass<UIMarkdownView>( "permission_desc" );
24042420
std::string descStr =
2421+
"##### " +
24052422
i18n( "agent_wants_to_execute_tool_call", "The agent wants to execute a tool call:" ) +
2406-
"\n";
2407-
descStr += i18n( "title", "Title" ) + ": " + req.toolCall.title + "\n";
2408-
descStr += i18n( "kind", "Kind" ) + ": " + req.toolCall.kind + "\n";
2423+
"\n\n";
2424+
descStr += "**" + i18n( "title", "Title" ) + ":** " + req.toolCall.title + "\n\n";
2425+
descStr += "**" + i18n( "kind", "Kind" ) + ":** `" + req.toolCall.kind + "`\n\n";
24092426
if ( !req.toolCall.rawInput.is_null() ) {
2410-
descStr += i18n( "input", "Input" ) + ":\n" + req.toolCall.rawInput.dump( 2 ) + "\n";
2427+
descStr +=
2428+
"**" + i18n( "input", "Input" ) + ":**\n\n" + req.toolCall.rawInput.dump( 2 ) + "\n";
24112429
}
2412-
desc->setText( descStr );
2430+
desc->loadFromString( descStr );
24132431
UIWidget* optionsBox = chat->findByClass( "permission_options" );
24142432
if ( !optionsBox )
24152433
return;
24162434

24172435
bool isFirst = true;
2436+
UIPushButton* firstBut = nullptr;
2437+
UIPushButton* lastBut = nullptr;
24182438
for ( const auto& opt : req.options ) {
24192439
UIPushButton* but = UIPushButton::New();
24202440
but->setParent( optionsBox );
24212441
but->setText( opt.name );
2422-
but->setTooltipText( opt.kind );
2423-
but->setLayoutMargin( Rectf( 0, 0, 8, 0 ) );
24242442

24252443
auto cbCopy = cb;
24262444
auto optId = opt.optionId;
@@ -2431,15 +2449,22 @@ void LLMChatUI::addPermissionUI( const acp::RequestPermissionRequest& req,
24312449
res.optionId = optId;
24322450
cbCopy( res );
24332451

2434-
if ( mChatInput ) {
2452+
if ( mChatInput )
24352453
mChatInput->setFocus();
2436-
}
24372454
} );
24382455

24392456
if ( isFirst ) {
24402457
isFirst = false;
2441-
but->setFocus();
2458+
firstBut = but;
2459+
but->runOnMainThread( [but] { but->setFocus(); } );
24422460
}
2461+
2462+
lastBut = but;
2463+
}
2464+
2465+
if ( lastBut && firstBut != lastBut ) {
2466+
lastBut->on( Event::OnTabNavigate,
2467+
[firstBut]( const Event* event ) { firstBut->setFocus(); } );
24432468
}
24442469

24452470
mChatScrollView->getVerticalScrollBar()->setValue( 1.0f );

0 commit comments

Comments
 (0)