feat: add TUI features and fix benchmark pagination total count#230
Merged
jason-rl merged 9 commits intoMay 11, 2026
Conversation
6292fc7 to
b58ce55
Compare
7 tasks
55d1ccd to
5b8111f
Compare
5b8111f to
537f1ad
Compare
38efd64 to
7c59b15
Compare
Contributor
|
Test plan is huge because you don't have tests? |
jason-rl
added a commit
that referenced
this pull request
Apr 30, 2026
Cover new CLI commands (axon events, blueprint duplicate, scenario list), new/modified services (axonService, benchmarkJobService, benchmarkService, objectService), and the allocateSectionLines pure function. Export allocateSectionLines for direct unit testing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
557c4ee to
2860697
Compare
29 tasks
dines-rl
approved these changes
May 4, 2026
…tadata, tar symlinks
- Object create form: TUI screen via `c` shortcut with tar/tgz multi-path
list manager, content type switching, and pre-signed URL fallback
- Axon events & SQL workbench: paginated event table and interactive SQL
workbench from axon detail screen
- Blueprint create --base: duplicate a blueprint by passing --base
<name-or-id> to `blueprint create`. Source parameters are inherited
(excluding dockerfile/base_blueprint_id); any other flag overrides.
--name defaults to {base}-copy. Passing --dockerfile with --base
replaces base_blueprint_id (mutually exclusive per API contract).
- Metadata key-value pairs: --metadata flag on object upload and
benchmark-job run CLI; TUI editors on object and benchmark job create
- Tar archives: replaced nanotar with tar-stream for symlink support
(type 2 entries); duplicate path rejection after resolve()
- Benchmark tab toggle changed from t to Tab with visual tab bar
- Benchmark pagination fix: total count from API, not page item count
- Detail viewport fix: off-by-one in overhead calculation
- CLI: axon events, scenario list subcommands
- Shared parseMetadata utility
- Removed blueprint duplication from TUI (kept in CLI via --base)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cover benchmarkJobService (buildCloneParams, createBenchmarkJob), axonService (smart search, events, SQL), benchmarkService (scenario runs, public benchmarks), objectService (create, complete, upload), blueprint create --base (source param inheritance, dockerfile/base mutual exclusion, overrides per flag), axon events CLI, scenario list CLI, allocateSectionLines, tar symlinks, and duplicate path rejection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2860697 to
9ff1d63
Compare
d15aa80 to
ca08384
Compare
…bles Change benchmark list 'Create Job' keybind from [c] to [s] to avoid conflicting with [c] = 'Copy ID' convention used in detail screens. The popup already used [s] for this action — now the main handler and nav tip are consistent.
d480a63 to
357b52a
Compare
The TUI screens for viewing axon events and SQL workbench are being moved to PR #233 (TUI feature parity) to better separate concerns. This PR retains the CLI `axon events` command and service layer. Also fixes the origin field displaying numeric values (e.g., 2 instead of AGENT_EVENT) by adding a mapping from SQLite enum indices to string enum names in axonService.ts. Files moved to #233: - AxonEventsScreen.tsx - AxonSqlScreen.tsx - Router/navigation integrations Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jason-rl
added a commit
that referenced
this pull request
May 6, 2026
Add Tab toggle between public and custom blueprints in TUI, matching the benchmark list screen implementation from PR #230. - Add publicOnly and includeTotalCount options to listBlueprints - Reuse listBlueprints with publicOnly flag (no code duplication) - Add showPublic state and Tab key handler - Add tab bar UI between breadcrumb and search - Update navigation tips with Tab key hint - Fix building_complete -> build_complete typos Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jason-rl
added a commit
that referenced
this pull request
May 6, 2026
Add Tab toggle between public and custom blueprints in TUI, matching the benchmark list screen implementation from PR #230. - Add publicOnly and includeTotalCount options to listBlueprints - Reuse listBlueprints with publicOnly flag (no code duplication) - Add showPublic state and Tab key handler - Add tab bar UI between breadcrumb and search - Update navigation tips with Tab key hint - Fix building_complete -> build_complete typos Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
79d6937 to
b803bf5
Compare
Add Tab toggle between public and custom blueprints in TUI, matching the benchmark list screen implementation from PR #230. - Add publicOnly and includeTotalCount options to listBlueprints - Reuse listBlueprints with publicOnly flag (no code duplication) - Add showPublic state and Tab key handler - Add tab bar UI between breadcrumb and search - Update navigation tips with Tab key hint - Fix building_complete -> build_complete typos Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
b803bf5 to
c991e1c
Compare
Also reject empty and duplicate metadata keys in parseMetadata.
b16dac5 to
a9e6a98
Compare
a9e6a98 to
fbc586a
Compare
jason-rl
added a commit
that referenced
this pull request
May 11, 2026
## Summary - Add `y` keybind to copy resource name on all detail screens (in addition to existing `c` for Copy ID) - Add `h` keybind to copy endpoint URL on MCP config detail screen (shown in footer alongside Copy ID/Name) - Enhanced clipboard feedback: shows "ID copied!", "Name copied!", "Endpoint copied!" instead of generic message - New `extraKeybinds`/`extraNavTips` props on `ResourceDetailPage` for resource-specific shortcuts - Covers all 14 detail screens via centralized change in `ResourceDetailPage` - TUI equivalent of clipboard buttons added in runloop-fe PR #1825 **Stacked on #230** ## Test plan - [ ] TUI: Any detail screen → press `y` → verify "Name copied!" feedback and correct clipboard content - [ ] TUI: Any detail screen → press `c` → verify "ID copied!" feedback (updated from generic "Copied to clipboard!") - [ ] TUI: MCP config detail → press `h` → verify "Endpoint copied!" feedback and endpoint URL in clipboard - [ ] TUI: MCP config detail → verify `h` shortcut shown in footer navigation tips - [ ] TUI: Devbox detail → verify `n` still triggers "Create Snapshot" (no conflict) - [ ] TUI: Agent detail → verify `n` still triggers "Create Devbox with Agent" (no conflict) - [ ] Type check: `npx tsc --noEmit` passes cleanly 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tode-rl
pushed a commit
that referenced
this pull request
May 12, 2026
🤖 I have created a release *beep* *boop* --- ## [1.17.0](v1.16.0...v1.17.0) (2026-05-12) ### Features * add --public flag to agent create, fix object upload --public ([#219](#219)) ([6e7a8b3](6e7a8b3)) * add clipboard keybinds to detail screens ([#231](#231)) ([83874ca](83874ca)) * add TUI features and fix benchmark pagination total count ([#230](#230)) ([7565d45](7565d45)) * agent object picker, multi-mount support, and TUI improvements ([#217](#217)) ([dbe2a5c](dbe2a5c)) * pty support ([#234](#234)) ([3cfd720](3cfd720)) * smart default download path + stdin/stdout support ([#222](#222)) ([419a961](419a961)) * support multi-path tar/tgz archive creation in obj upload ([#220](#220)) ([3528701](3528701)) ### Bug Fixes * menu header clipping and breadcrumb hyperlink ([#221](#221)) ([3ef6271](3ef6271)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
cshortcut from object list. Supports optional file path upload or displays pre-signed S3 URL with clipboard copy. For tar/tgz content types, a multi-item list manager allows adding multiple file paths; for other types, a single text input is shown. Switching content type syncs between the two inputs bidirectionally.tkey toTabkey with visual tab bar matching the agent list pattern.Tabkey and visual tab bar matching the benchmark/agent list pattern.DetailedInfoViewoverhead calculation that caused the top border to be clipped off screen when content filled the viewport exactly.blueprint create --base: Duplicate a blueprint by passing--base <id|name>toblueprint create. The source blueprint's parameters are used as defaults; any other flag overrides.--namedefaults to{base}-copywhen--baseis used.axon events: New subcommand to list events for an axon. Fixed origin field to display enum names (SYSTEM_EVENT, AGENT_EVENT, etc.) instead of numeric values.scenario list: New subcommand to list scenario runs with pagination and optional benchmark run ID filter.--metadata key=valueadded toobject uploadandbenchmark-job runCLI commands. TUI create screens for objects and benchmark jobs include a metadata key-value editor matching the devbox create pattern.createTarBuffernow rejects duplicate input paths (afterpath.resolve) instead of producing an invalid tar archive.nanotarwithtar-stream. Symlinks are now stored as proper tar symlink entries (type2) with their target inlinkname, instead of being rejected. This applies to both CLI and TUI upload flows.[d]keybind consistency: Changed all[d] Removehints in devbox create (gateway configs, MCP configs, agent mounts, object mounts) to[d] Deleteto match the rest of the codebase.isActive: !inMetadataSectionguard to the main form input handler.[c]keybind fix: Changed "Create Job" shortcut fromctosto avoid conflicting with the[c]= "Copy ID" convention used in detail screens. The popup already usedsfor this action.axon events,axon list,scenario list,scenario info,benchmark-job list,benchmark-job summary, andagent show. Text mode now uses the sharedoutput()utility's uncolored key-value format.Note: TUI axon events and SQL workbench screens have been moved to PR #233.
Test plan
Automated tests (155+ new tests)
services/benchmarkJobService.test.tsbuildCloneParams(all source/secret variants),createBenchmarkJob(validation, config mapping),listBenchmarkJobs,getBenchmarkJob,getBenchmarkRun,listBenchmarkRunScenarioRunsservices/axonService.test.tslistActiveAxons(smart search, pagination),getAxon,listAxonEvents(hasMore detection, row mapping, origin enum mapping),executeAxonSqlservices/benchmarkService.test.tslistScenarioRuns(both code paths),listPublicBenchmarks,createBenchmarkRun,listBenchmarkRuns,getBenchmarkRun,getScenarioRun,listBenchmarks,getBenchmarkservices/objectServiceApi.test.tscreateObject,completeObject,uploadToPresignedUrlservices/objectService.test.tsbuildObjectDetailFieldsedge cases (hours format, missing size, public field)commands/object/upload.test.tscommands/axon/events.test.tscommands/blueprint/create.test.tscommands/scenario/list.test.tscomponents/allocateSectionLines.test.tsManual tests
c→ verify create form renders with Name, Content Type, File Path fieldsccopies to clipboardTabkey toggles between Public/Custom with visual tab bartkey no longer togglesifor Full Details → verify top border is visible (not clipped)Tabkey toggles between Public/Custom with visual tab bar[d] Deleteconsistentlyscreates a job,cno longer triggers createrli blueprint create --base <id>→ verify creates copy with {base}-copy namerli blueprint create --base <id> --name custom→ verify custom namerli blueprint create --base <id> --resources LARGE→ verify override appliedrli blueprint create --base <id> --metadata env=prod→ verify metadata overriderli blueprint create --help→ verify --base flag listed, --name not marked requiredrli object upload <file> --metadata key=value→ verify metadata on created objectrli benchmark-job run --agent ... --benchmark ... --metadata key=value→ verify metadatarli axon events <id>→ verify JSON output by default, origin shows enum namesrli axon events <id> -o text→ verify key-value outputrli scenario list→ verify JSON output by defaultrli scenario list -o text→ verify key-value outputrli benchmark-job list→ verify JSON output by defaultrli benchmark-job summary <id>→ verify JSON output by defaultrli scenario info <id>→ verify JSON output by defaultrli agent show <id>→ verify JSON output by defaultnpx tsc --noEmitpasses cleanly🤖 Generated with Claude Code