Add benchmark results for fast3 and fast4, implement KeepAliveLspBridge, and add tests for staged strategies

- Added new benchmark result files: compare_2026-02-09_score_fast3.json and compare_2026-02-09_score_fast4.json.
- Implemented KeepAliveLspBridge to maintain a persistent LSP connection across multiple queries, improving performance.
- Created unit tests for staged clustering strategies in test_staged_stage3_fast_strategies.py, ensuring correct behavior of score and dir_rr strategies.
This commit is contained in:
catlog22
2026-02-09 20:45:29 +08:00
parent c62d26183b
commit 4344e79e68
64 changed files with 6154 additions and 123 deletions

View File

@@ -15,6 +15,7 @@ import {
import { IssueHubHeader } from '@/components/issue/hub/IssueHubHeader';
import { IssueHubTabs, type IssueTab } from '@/components/issue/hub/IssueHubTabs';
import { IssuesPanel } from '@/components/issue/hub/IssuesPanel';
import { IssueBoardPanel } from '@/components/issue/hub/IssueBoardPanel';
import { QueuePanel } from '@/components/issue/hub/QueuePanel';
import { DiscoveryPanel } from '@/components/issue/hub/DiscoveryPanel';
import { Button } from '@/components/ui/Button';
@@ -161,6 +162,7 @@ export function IssueHubPage() {
const renderActionButtons = () => {
switch (currentTab) {
case 'issues':
case 'board':
return (
<>
<Button variant="outline" onClick={handleIssuesRefresh} disabled={isFetchingIssues}>
@@ -212,6 +214,7 @@ export function IssueHubPage() {
<IssueHubTabs currentTab={currentTab} onTabChange={setCurrentTab} />
{currentTab === 'issues' && <IssuesPanel onCreateIssue={() => setIsNewIssueOpen(true)} />}
{currentTab === 'board' && <IssueBoardPanel />}
{currentTab === 'queue' && <QueuePanel />}
{currentTab === 'discovery' && <DiscoveryPanel />}

View File

@@ -1122,6 +1122,84 @@ function PromptTemplateProperties({ data, onChange }: PromptTemplatePropertiesPr
onChange={(artifacts) => onChange({ artifacts })}
/>
</div>
{/* CLI Session Routing (tmux-like) */}
{!isSlashCommandMode && (
<>
<div>
<label className="block text-sm font-medium text-foreground mb-1">
{formatMessage({ id: 'orchestrator.propertyPanel.delivery' })}
</label>
<select
value={(data.delivery as string) || 'newExecution'}
onChange={(e) => {
const next = e.target.value as 'newExecution' | 'sendToSession';
const updates: Partial<PromptTemplateNodeData> = { delivery: next };
if (next !== 'sendToSession') {
updates.targetSessionKey = undefined;
updates.resumeKey = undefined;
updates.resumeStrategy = undefined;
}
onChange(updates);
}}
className="w-full h-10 px-3 rounded-md border border-border bg-background text-foreground text-sm"
>
<option value="newExecution">
{formatMessage({ id: 'orchestrator.propertyPanel.options.deliveryNewExecution' })}
</option>
<option value="sendToSession">
{formatMessage({ id: 'orchestrator.propertyPanel.options.deliverySendToSession' })}
</option>
</select>
</div>
{((data.delivery as string) || 'newExecution') === 'sendToSession' && (
<>
<div>
<label className="block text-sm font-medium text-foreground mb-1">
{formatMessage({ id: 'orchestrator.propertyPanel.targetSessionKey' })}
</label>
<Input
value={(data.targetSessionKey as string) || ''}
onChange={(e) => onChange({ targetSessionKey: e.target.value || undefined })}
placeholder={formatMessage({ id: 'orchestrator.propertyPanel.targetSessionKeyPlaceholder' })}
className="font-mono text-sm"
/>
</div>
<div>
<label className="block text-sm font-medium text-foreground mb-1">
{formatMessage({ id: 'orchestrator.propertyPanel.resumeKey' })}
</label>
<Input
value={(data.resumeKey as string) || ''}
onChange={(e) => onChange({ resumeKey: e.target.value || undefined })}
placeholder={formatMessage({ id: 'orchestrator.propertyPanel.resumeKeyPlaceholder' })}
className="font-mono text-sm"
/>
</div>
<div>
<label className="block text-sm font-medium text-foreground mb-1">
{formatMessage({ id: 'orchestrator.propertyPanel.resumeStrategy' })}
</label>
<select
value={(data.resumeStrategy as string) || 'nativeResume'}
onChange={(e) => onChange({ resumeStrategy: e.target.value as any })}
className="w-full h-10 px-3 rounded-md border border-border bg-background text-foreground text-sm"
>
<option value="nativeResume">
{formatMessage({ id: 'orchestrator.propertyPanel.options.resumeStrategyNative' })}
</option>
<option value="promptConcat">
{formatMessage({ id: 'orchestrator.propertyPanel.options.resumeStrategyPromptConcat' })}
</option>
</select>
</div>
</>
)}
</>
)}
</CollapsibleSection>
</div>
);