Skip to content

Commit ca08384

Browse files
committed
fix: TUI tar single-file upload, [d] keybind labels, benchmark metadata nav
1 parent 9ff1d63 commit ca08384

3 files changed

Lines changed: 73 additions & 63 deletions

File tree

src/components/DevboxCreatePage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3127,7 +3127,7 @@ export const DevboxCreatePage = ({
31273127
paddingX={1}
31283128
>
31293129
<Text color={colors.textDim} dimColor>
3130-
{`${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] ${selectedGatewayIndex === 0 ? "Attach" : selectedGatewayIndex === maxGatewayIndex ? "Done" : "Select"} • [d] Remove • [esc] Back`}
3130+
{`${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] ${selectedGatewayIndex === 0 ? "Attach" : selectedGatewayIndex === maxGatewayIndex ? "Done" : "Select"} • [d] Delete • [esc] Back`}
31313131
</Text>
31323132
</Box>
31333133
</>
@@ -3408,7 +3408,7 @@ export const DevboxCreatePage = ({
34083408
paddingX={1}
34093409
>
34103410
<Text color={colors.textDim} dimColor>
3411-
{`${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] ${selectedMcpIndex === 0 ? "Attach" : selectedMcpIndex === maxMcpIndex ? "Done" : "Select"} • [d] Remove • [esc] Back`}
3411+
{`${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] ${selectedMcpIndex === 0 ? "Attach" : selectedMcpIndex === maxMcpIndex ? "Done" : "Select"} • [d] Delete • [esc] Back`}
34123412
</Text>
34133413
</Box>
34143414
</>
@@ -3564,7 +3564,7 @@ export const DevboxCreatePage = ({
35643564
<Text color={colors.textDim} dimColor>
35653565
{editingAgentMountPath
35663566
? "Type to edit path • [Enter/esc] Done"
3567-
: `${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] Select • [e] Edit path • [d] Remove • [esc] Back`}
3567+
: `${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] Select • [e] Edit path • [d] Delete • [esc] Back`}
35683568
</Text>
35693569
</Box>
35703570
</Box>
@@ -3693,7 +3693,7 @@ export const DevboxCreatePage = ({
36933693
<Text color={colors.textDim} dimColor>
36943694
{editingObjectMountPath
36953695
? "Type to edit path • [Enter/esc] Done"
3696-
: `${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] Select • [e] Edit path • [d] Remove • [esc] Back`}
3696+
: `${figures.arrowUp}${figures.arrowDown} Navigate • [Enter] Select • [e] Edit path • [d] Delete • [esc] Back`}
36973697
</Text>
36983698
</Box>
36993699
</Box>

src/components/ObjectCreatePage.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,10 @@ export const ObjectCreatePage = ({
394394

395395
let buffer: Buffer;
396396

397-
if (paths.length > 1 || isTar) {
397+
const singleIsDir =
398+
paths.length === 1 && (await lstat(resolvedPaths[0])).isDirectory();
399+
400+
if (paths.length > 1 || (isTar && singleIsDir)) {
398401
const isGzip = formData.content_type === "tgz";
399402
buffer = await createTarBuffer(resolvedPaths, isGzip);
400403
} else {

src/screens/BenchmarkJobCreateScreen.tsx

Lines changed: 65 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -911,68 +911,75 @@ export function BenchmarkJobCreateScreen({
911911
}, [formData, isFormValid, cloneAgentConfigs, cloneOrchestratorConfig]);
912912

913913
// Handle input
914-
useInput((input, key) => {
915-
if (screenState !== "form") return;
914+
useInput(
915+
(input, key) => {
916+
if (screenState !== "form") return;
916917

917-
// Handle source type toggle with left/right arrows
918-
if (currentField === "source_type" && (key.leftArrow || key.rightArrow)) {
919-
setFormData((prev) => ({
920-
...prev,
921-
sourceType: prev.sourceType === "benchmark" ? "scenarios" : "benchmark",
922-
// Clear the other source when switching
923-
benchmarkId: prev.sourceType === "scenarios" ? "" : prev.benchmarkId,
924-
benchmarkName:
925-
prev.sourceType === "scenarios" ? "" : prev.benchmarkName,
926-
scenarioIds: prev.sourceType === "benchmark" ? [] : prev.scenarioIds,
927-
scenarioNames:
928-
prev.sourceType === "benchmark" ? [] : prev.scenarioNames,
929-
}));
930-
return;
931-
}
918+
// Handle source type toggle with left/right arrows
919+
if (currentField === "source_type" && (key.leftArrow || key.rightArrow)) {
920+
setFormData((prev) => ({
921+
...prev,
922+
sourceType:
923+
prev.sourceType === "benchmark" ? "scenarios" : "benchmark",
924+
// Clear the other source when switching
925+
benchmarkId: prev.sourceType === "scenarios" ? "" : prev.benchmarkId,
926+
benchmarkName:
927+
prev.sourceType === "scenarios" ? "" : prev.benchmarkName,
928+
scenarioIds: prev.sourceType === "benchmark" ? [] : prev.scenarioIds,
929+
scenarioNames:
930+
prev.sourceType === "benchmark" ? [] : prev.scenarioNames,
931+
}));
932+
return;
933+
}
932934

933-
// Navigate between fields
934-
if (key.upArrow && currentFieldIndex > 0) {
935-
setCurrentField(fieldKeys[currentFieldIndex - 1]);
936-
} else if (key.downArrow && currentFieldIndex < fieldKeys.length - 1) {
937-
setCurrentField(fieldKeys[currentFieldIndex + 1]);
938-
} else if (key.escape) {
939-
goBack();
940-
} else if (key.return) {
941-
if (currentFieldDef?.type === "picker" && currentField === "benchmark") {
942-
setScreenState("picking_benchmark");
943-
} else if (
944-
currentFieldDef?.type === "picker" &&
945-
currentField === "scenarios"
946-
) {
947-
setScreenState("picking_scenarios");
948-
} else if (
949-
currentFieldDef?.type === "picker" &&
950-
currentField === "agents"
951-
) {
952-
setScreenState("picking_agents");
953-
} else if (
954-
currentFieldDef?.type === "picker" &&
955-
currentField === "secrets"
956-
) {
957-
setScreenState("secrets_config");
958-
setSecretsConfigSelectedIndex(0);
959-
} else if (
960-
currentFieldDef?.type === "metadata" &&
961-
currentField === "metadata"
962-
) {
963-
setInMetadataSection(true);
964-
setSelectedMetadataIndex(0);
965-
} else if (
966-
currentFieldDef?.type === "action" &&
967-
currentField === "create"
968-
) {
969-
handleCreate();
970-
} else if (currentFieldIndex < fieldKeys.length - 1) {
971-
// Move to next field on Enter for text inputs
935+
// Navigate between fields
936+
if (key.upArrow && currentFieldIndex > 0) {
937+
setCurrentField(fieldKeys[currentFieldIndex - 1]);
938+
} else if (key.downArrow && currentFieldIndex < fieldKeys.length - 1) {
972939
setCurrentField(fieldKeys[currentFieldIndex + 1]);
940+
} else if (key.escape) {
941+
goBack();
942+
} else if (key.return) {
943+
if (
944+
currentFieldDef?.type === "picker" &&
945+
currentField === "benchmark"
946+
) {
947+
setScreenState("picking_benchmark");
948+
} else if (
949+
currentFieldDef?.type === "picker" &&
950+
currentField === "scenarios"
951+
) {
952+
setScreenState("picking_scenarios");
953+
} else if (
954+
currentFieldDef?.type === "picker" &&
955+
currentField === "agents"
956+
) {
957+
setScreenState("picking_agents");
958+
} else if (
959+
currentFieldDef?.type === "picker" &&
960+
currentField === "secrets"
961+
) {
962+
setScreenState("secrets_config");
963+
setSecretsConfigSelectedIndex(0);
964+
} else if (
965+
currentFieldDef?.type === "metadata" &&
966+
currentField === "metadata"
967+
) {
968+
setInMetadataSection(true);
969+
setSelectedMetadataIndex(0);
970+
} else if (
971+
currentFieldDef?.type === "action" &&
972+
currentField === "create"
973+
) {
974+
handleCreate();
975+
} else if (currentFieldIndex < fieldKeys.length - 1) {
976+
// Move to next field on Enter for text inputs
977+
setCurrentField(fieldKeys[currentFieldIndex + 1]);
978+
}
973979
}
974-
}
975-
});
980+
},
981+
{ isActive: !inMetadataSection },
982+
);
976983

977984
useInput(
978985
(input, key) => {

0 commit comments

Comments
 (0)