| Age | Commit message (Collapse) | Author |
|
The implementation is complete. Here's a summary of the keyboard
accessi
**Changes to Omni/Jr/Web.hs:** 1. Added `statusDropdownJs` - JavaScript
functions for keyboard handling
- `toggleStatusDropdown()` - Opens/closes dropdown, updates
aria-expa - `closeStatusDropdown()` - Closes dropdown, returns focus
to trigger - `handleStatusKeydown()` - Handles Enter/Space (toggle),
Escape (clo - `handleMenuItemKeydown()` - Handles ArrowUp/ArrowDown
(navigate), E - Click-outside handler to close open dropdowns
2. Updated `clickableBadge`:
- Added `tabindex="0"` for keyboard focusability - Added
`role="button"` for screen readers - Added `aria-haspopup="true"`
and `aria-expanded="false"` - Changed onclick to use
`toggleStatusDropdown()` function - Added `onkeydown` handler
3. Updated `statusDropdownOptions`:
- Added `role="menu"` and `aria-label` for accessibility
4. Updated `statusOption`:
- Added `role="none"` on form wrapper - Added `role="menuitem"`
on button - Added `tabindex="-1"` (focus managed by JS) - Added
`onkeydown` handler
**Changes to Omni/Jr/Web/Style.hs:** - Added focus styles
for `.status-dropdown-option:focus` - Added focus styles for
`.status-badge-clickable:focus`
Task-Id: t-157.3
|
|
The implementation is complete. The changes I made:
1. **Web.hs** - Replaced the `statusBadgeWithForm` function from a
`<sel
- `statusBadgeWithForm` now creates a container div with the
clickabl - `clickableBadge` renders a badge that, when clicked,
toggles the "o - `statusDropdownOptions` renders all the status
options as badge-sty - `statusOption` renders each status option
as an HTMX form that upda
2. **Style.hs** - Added CSS styles for the new dropdown component:
- `.status-badge-dropdown` - Container with relative positioning
- `.status-badge-clickable` - Clickable badge styling with
cursor poi - `.dropdown-arrow` - Arrow indicator styling -
`.status-dropdown-menu` - Hidden dropdown that appears when parent -
`.status-option-form` and `.status-dropdown-option` - Styling for
o - Dark mode support for the dropdown menu
Task-Id: t-157.2
|
|
The build and tests pass. The changes merge the status badge display
and
Task-Id: t-157.1
|
|
The changes are in place. The build passes with no errors. Summary
of ch
1. **`.actions`** - Added explicit `flexDirection row` to ensure
horizon 2. **`.review-actions`** - Added `display flex`, `flexDirection
row`, `f 3. **`.form-actions`** - Added same flex row layout for
consistency
Task-Id: t-156.6
|
|
The changes are complete. The filter buttons are now styled to
be horizo
1. Changed `.filter-group` from `flexDirection column` to
`flexDirection 2. Added `whiteSpace nowrap` to labels to prevent
wrapping 3. Updated responsive styles for mobile to maintain horizontal
layout wi
Task-Id: t-156.5
|
|
All tests pass. Summary of changes made:
1. **Removed redundant `borderBottom` from `.detail-row`** - replaced
wi 2. **Removed redundant `borderBottom` from `.stats-row`** - replaced
wit 3. **Removed redundant `borderBottom` from `.metric-row`**
- replaced wi 4. **Removed corresponding dark mode border color
overrides** for the ab
Task-Id: t-156.4
|
|
The build and tests pass. The task list/search page now uses the
`list-g
Task-Id: t-156.3
|
|
All the changes are in place: 1. Created `renderListGroupItem` function
for compact list-style task di 2. Updated the dashboard's Ready
Queue section to use `list-group` with 3. Updated the dashboard's
Recent Activity section to use `list-group` w 4. Updated the
`RecentActivityPartial` (HTMX partial) to also use the li 5. Added CSS
styles for `.list-group`, `.list-group-item`, etc. in Style 6. Added
dark mode styles for the list-group components
The build and tests pass successfully.
Task-Id: t-156.2
|
|
Both tests pass. The change converts the task detail display from:
``` Task: t-123
Title: Some title ```
To the inline format:
``` Title: Some title (ID: t-123) ```
Task-Id: t-156.1
|
|
The build and tests pass. The implementation adds status breakdown
count
1. Changed `EpicsPage` from a newtype to a data type that holds
both epi 2. Added `renderEpicCardWithStats` function that calculates
descendant c 3. Added `getDescendants` helper to find all child tasks
recursively 4. Updated `epicsHandler` to pass all tasks to the page
5. The breakdown shows badges for done, in-progress, review, and
open co
Task-Id: t-155.4
|
|
The build and test passed with no errors. The multi-color progress
bar c
**Implementation summary:** -
**[Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L234-L275)**: -
**[Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L3
The progress bar is used on the dashboard (line 324 in Web.hs)
to visual
Task-Id: t-155.3
|
|
The build passes. The `/epics` page has been successfully created
and al
Task-Id: t-155.2
|
|
The implementation is complete. Summary of changes to
[Omni/Jr.hs](file:
1. Added `checkEpicCompletion` function (lines 490-508) that:
- Checks if the completed task has a parent - Finds the parent
task and verifies it's an Epic - Checks if all children of that
epic are Done - If so, transitions the epic to Review status
2. Updated `autoReview` to call `checkEpicCompletion` after marking
a ta
3. Updated `interactiveReview` to:
- Accept the task as a parameter (line 414) - Call
`checkEpicCompletion` after marking a task Done (line 429)
4. Updated the call site at line 361 to pass the task to
`interactiveRev
Task-Id: t-155.1
|
|
The build and tests pass. The change adds proper dark mode styling
for n
Task-Id: t-154.5
|
|
The build and tests pass with no errors. The homepage action links
secti
Task-Id: t-154.4
|
|
The implementation is complete. I've implemented a hamburger
collapse me
1. **Omni/Jr/Web.hs**: Added a checkbox-based hamburger menu toggle
(CSS
- Hidden checkbox input for toggle state - Label with 3 hamburger
lines that acts as the button - The navbar links are shown/hidden
based on checkbox state
2. **Omni/Jr/Web/Style.hs**: Added responsive CSS styles:
- Hamburger menu styles (`.navbar-hamburger`, `.hamburger-line`)
- Hidden by default on desktop, displayed on mobile (< 600px) -
Full-width mobile menu with proper ordering - Dark mode support
for hamburger lines - Dropdown menus expand inline on mobile
Task-Id: t-154.3
|
|
Tasks (Ready, Blocked, Intervention, All), Plans (Epics, KB).
Task-Id: t-154.2
|
|
The changes are complete. The navbar is now refactored to always stay
as - The Jr logo/brand on the left - Navigation links on the right -
On mobile screens, instead of switching to a column layout, it now jus
Task-Id: t-154.1
|
|
|
|
Build and tests pass. The implementation is complete:
1. **Added API endpoint**: `POST /tasks/:id/reset-retries` in the
API ty 2. **Added handler**: `taskResetRetriesHandler` that clears
retry contex 3. **Added UI button**: "Reset Retries" button in the
retry context bann
Task-Id: t-153.6
|
|
All tests pass. Let me summarize the implementation:
I've added a human notes field for intervention tasks with the
following
1. **Omni/Task/Core.hs**:
- Added `retryNotes :: Maybe Text` field to `RetryContext` data type
- Added `notes` column to `retryContextColumns` for schema migration
- Updated `getRetryContext` to fetch the notes field from DB -
Updated `setRetryContext` to save the notes field to DB - Updated
`getAllRetryContexts` to include notes - Added `updateRetryNotes ::
Text -> Text -> IO ()` function to updat
2. **Omni/Jr/Web.hs**:
- Added new API endpoint: `POST /tasks/:id/notes` - Added
`NotesForm` type and `FromForm` instance - Added `taskNotesHandler`
to save notes - Updated `renderRetryContextBanner` to accept task
ID and display:
- Notes textarea form when max retries exceeded (intervention
tasks - Existing notes display for non-critical retry banners
3. **Omni/Agent/Worker.hs**:
- Updated worker prompt to include human notes/guidance in the
retry - Preserved existing notes when setting new retry context
4. **Omni/Jr.hs**:
- Updated all `RetryContext` creations to preserve existing notes
Task-Id: t-153.5
|
|
The build and tests pass. Let me verify the changes are complete
by chec
1. ✅ The Amp thread URL is already parsed from amp output and
stored in 2. ✅ The display has been updated to show a "View in Amp
↗" button inste 3. ✅ CSS styling has been added for the button
(`.amp-thread-btn`) 4. ✅ Dark mode styles added for the button 5. ✅
Both instances of the URL display (in `renderExecutionDetails` and
The implementation is complete. The changes: -
[Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L632-L637) - Cha
- [Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L969-L974)
- Sam -
[Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L531
-
[Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L916
Task-Id: t-153.4
|
|
The build and tests pass. The retry context display is already
implement
The implementation includes: - Current attempt number (e.g., "Attempt
3 of 3") at line 721 - Failure reason with `summarizeReason` at lines
696-697 - Original commit display at lines 699-703 - Conflict files
list at lines 705-710 - Warning banner when max retries exceeded at
lines 691-692 and 712-715
Task-Id: t-153.3
|
|
All the pieces are in place: 1. Route: `GET /tasks/:id/diff/:commit`
(line 65) 2. Data type: `TaskDiffPage` (line 119) 3. `ToHtml` instance
for rendering (line 759) 4. Handler: `taskDiffHandler` (line 1225)
5. Helper: `getDiffForCommit` (line 1301)
The implementation shows: - Full git diff output via `git show
<commit>` - Pre-formatted output (`<pre class="diff-block">`) - Link
back to task detail page - Proper error handling for invalid commits
Task-Id: t-153.2
|
|
All tests pass. The implementation is complete:
1. Added `GitCommit` data type with hash, short hash, summary,
author, r 2. Added `getCommitsForTask` function that queries `git
log --grep='Task 3. Updated `TaskDetailPage` to include commits
4. Updated `taskDetailHandler` to fetch commits for the task 5. Added
`renderCommit` helper to display each commit with links to `/ta
6. Added CSS styles for the commit list in both light and dark modes
Task-Id: t-153.1
|
|
All tests pass. The implementation adds:
1. **`runMigrations`** - Called at the end of `initTaskDb` to run
migrat 2. **`migrateTable`** - Compares expected columns against
existing colum 3. **`getTableColumns`** - Uses `PRAGMA table_info` to
get existing colu 4. **`addColumn`** - Runs `ALTER TABLE ADD COLUMN`
for missing columns 5. **Column definitions** - Lists of expected
columns for `task_activity
When new columns are added to the schema in the future, you just
add the
Task-Id: t-152.3
|
|
The implementation is complete. Here's what I added:
1. **`--verified` flag** to `task update <id> done --verified`
command 2. **Verification checklist warning** shown when marking a
task Done wit
- Code compiles (bild succeeds) - Tests pass (bild --test) -
Feature works in production (manual verification)
3. **Activity logging** records `{"verified":true}` in the task
activity 4. **JSON output enhancement** includes `"verified": true`
in the respon 5. **CLI tests** for the new `--verified` flag parsing
Task-Id: t-152.2
|
|
All tests pass. Let me summarize what was implemented:
- Extended `TaskActivity` type with new fields:
- `activityAmpThreadUrl` - Link to amp thread - `activityStartedAt` -
Work start timestamp - `activityCompletedAt` - Work completion
timestamp - `activityCostCents` - API cost in cents -
`activityTokensUsed` - Token usage count
- Updated `SQL.FromRow` and `SQL.ToRow` instances for the new fields -
Updated schema to include new columns in `task_activity` table - Added
`logActivityWithMetrics` function to log activities with all met -
Added `updateActivityMetrics` function to update metrics on existing
a - Added `getLatestRunningActivity` helper function
- Captures execution timing (start/end timestamps) - Retrieves amp
thread URL from `AgentLog.getStatus` - Converts credits to cents
and logs to activity record - Uses `logActivityWithMetrics` and
`updateActivityMetrics` for tracking
- Added `getStatus` function to retrieve current status (thread
URL, cre
- Added `TaskMetricsPartial` type for HTMX auto-refresh - Extended
`TaskDetailPage` to include `RetryContext` - Added Execution Details
section on task detail page showing:
- Amp Thread URL (clickable link) - Duration (formatted as "Xm Ys")
- Cost (formatted as "$X.XX") - Retry Attempt count (if applicable)
- Last Activity timestamp
- Added `/partials/task/:id/metrics` endpoint for HTMX auto-refresh
- Auto-refresh enabled while task is InProgress (every 5s) - Added
`renderExecutionDetails` helper function
- Added `executionDetailsStyles` for metric rows and execution section
- Added dark mode support for execution details section
Task-Id: t-148.4
|
|
The build passes. The HTMX interactive forms for status updates
and filt
1. **Status update dropdown on task detail** (lines 176-197):
`statusBad
2. **Filter form on /tasks** (lines 322-378): The form has
`hx-get='/par
The only fix needed was changing `data TaskListPartial` to `newtype
Task
Task-Id: t-151.2
|
|
All handlers are wired in. The implementation is complete:
1. **HTMX script tag added** to `pageHead` (CDN at unpkg.com
with integr 2. **Partial routes created** in API type:
`/partials/recent-activity` a 3. **Handlers implemented** for both
partials 4. **HTMX attributes added** to the HomePage:
- Ready Queue count: `hx-get="/partials/ready-count"`
with `hx-trigge - Recent Activity div:
`hx-get="/partials/recent-activity"` with `hx-
Task-Id: t-151.1
|
|
The implementation is complete and passing. Here's a summary of
what was
**Changes made:**
1. **Added POST endpoint** for `/tasks/:id/description` - updates
the ta
2. **Added `DescriptionForm` type** with `FromForm` instance to
parse th
3. **Added `taskDescriptionHandler`** that:
- Receives the description text from the form - Treats
empty/whitespace-only descriptions as `Nothing` - Uses
`TaskCore.editTask` to update the task description
4. **Updated epic detail page** to include:
- A collapsible "Edit Design" section using `<details>` element -
A multiline `<textarea>` pre-populated with the current description
- A "Save Design" button that submits to the new endpoint - Shows
"No design document yet." when there's no description
5. **Added CSS styles** for the new elements:
- `.edit-description` - styling for the collapsible edit section -
`.description-textarea` - monospace font textarea for markdown
edit - `.form-actions` - container for the submit button - Dark
mode support for all new elements
Task-Id: t-150.2
|
|
Successfully implemented markdown rendering for epic descriptions
in the
1.
**[Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L380-L391)**:
- "Design" header instead of "Description" - Markdown rendering via
`renderMarkdown` function - Full-width `.markdown-content` wrapper
2.
**[Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L667-L779)**:
- Headers (`#`, `##`, `###`) - Lists (`-` or `*`) - Code blocks (`
``` `) - Inline code (`` ` ``) - Bold text (`**`)
3.
**[Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L
- `.markdown-content` with good typography - Headers with
appropriate sizing/spacing - Code blocks and inline code - Lists
with proper indentation - Dark mode support
Task-Id: t-150.1
|
|
Build passes. The CSS has been updated with the denser, Gerrit-style
lay
- **Border-radius**: Reduced from 8px to 2px - **Padding**:
Reduced from 16px to 8px/10px - **Gaps**: Reduced from 8-12px to
2-6px - **Shadows**: Replaced with subtle 1px borders (`#d0d0d0`)
- **Line-height**: Tightened from 1.5em to 1.3em - **Font sizes**:
Reduced across the board (body 16→14px, headers smalle - **Button
heights**: Reduced from 44px to 32px - **List row heights**: Made
denser with smaller padding and gaps
Task-Id: t-149.7
|
|
The build passes with no errors. The implementation was already
in place
Task-Id: t-149.6
|
|
The build passes with no errors. The change adds `color "#374151"`
(dark
Task-Id: t-149.5
|
|
The build and tests pass. The task is complete:
1. Changed `renderTaskCard` to wrap the entire card in an `<a>`
element 2. Changed the inner task-id from an `<a>` to a `<span>`
since the whole 3. Added CSS styles for `.task-card-link` to ensure
proper display (bloc
Task-Id: t-149.4
|
|
The build and tests pass. The dashboard metric cards are now
clickable a
Task-Id: t-149.3
|
|
The implementation is complete:
1. **Created a shared `navbar` component** with Jr branding and
navigati 2. **Replaced all back links** (`← Back to Dashboard`,
`← Back to Tasks` 3. **Added navbar styling** in the Style.hs file,
including:
- Light mode styles - Dark mode styles - Mobile responsive styles
4. **Build passes** with `bild --test Omni/Jr.hs`
Task-Id: t-149.2
|
|
The build passes. The fix I implemented:
1. **Changed the API type** in `Omni/Jr/Web.hs` to use `QueryParam
"stat 2. **Added manual parsing** in `taskListHandler` with
`parseStatus` and 3. **Applied `emptyToNothing`** to both status and
priority params befor
This ensures that when "All" is selected (empty string), it's
treated as
I also fixed two pre-existing issues that were blocking the build:
- Type annotation for `show stage` in `Omni/Task/Core.hs` -
`AesonKey.fromText` conversion in `Omni/Agent/Worker.hs`
Task-Id: t-149.1
|
|
All builds pass. Here's a summary of the changes I made:
**Omni/Task/Core.hs:** - Added `getActivitiesForTask` function to
query task_activity table for
**Omni/Jr/Web.hs:** - Added `Data.Time` import for timestamp formatting
- Updated `TaskDetailPage` type to include `[TaskCore.TaskActivity]` -
Updated `taskDetailHandler` to fetch activities for the task - Added
activity timeline rendering in `toHtml` instance for InProgress -
Added helper functions: `renderActivity`, `stageClass`, `stageIcon`, `
**Omni/Jr/Web/Style.hs:** - Added `activityTimelineStyles`
function with vertical timeline CSS - Added stage-specific colors
(claiming=blue, running=yellow, reviewing= - Added dark mode styles
for the activity timeline
Task-Id: t-148.3
|
|
Implementation complete. The task is done:
1. **Created `logActivity` helper** in `Omni/Task/Core.hs` that writes
t 2. **Integrated into Worker.hs** at all key points:
- `Claiming` - when claiming task - `Running` - when starting amp
- `Reviewing` - when amp completes successfully - `Retrying` -
on retry (includes attempt count in metadata) - `Completed` - on
success (includes result type in metadata) - `Failed` - on failure
(includes exit code or reason in metadata)
Task-Id: t-148.2
|
|
All components are in place: - `ActivityStage` enum with stages:
Claiming, Running, Reviewing, Retryi - `TaskActivity` data type with
all required fields - JSON instances (ToJSON/FromJSON) - SQLite
instances (FromField/ToField for ActivityStage, FromRow/ToRow f -
`task_activity` table in `initTaskDb`
Build passes with no errors.
Task-Id: t-148.1
|
|
The build and tests passed with no errors. The fix is complete -
calling
Task-Id: t-147
|
|
|
|
- FromHttpApiData instances return Left for empty strings (Servant
treats as missing param for QueryParam Maybe)
- getTasksDbPath now uses ~/.local/share/jr/jr.db via XDG - Remove
standalone task binary output - Add tests for parseQueryParam on
Priority/Status
Task-Id: t-145, t-146 Amp-Thread-ID:
https://ampcode.com/threads/T-2ad5310f-b7f5-451d-ad9b-35aa17c58774
Co-authored-by: Amp <amp@ampcode.com>
|
|
Toml files were marked as buildable but analyzeOne returned Nothing,
causing them to fail instead of being skipped with [_].
|
|
detectPythonImports now returns (srcs, transitiveDeps) where
transitiveDeps contains langdeps from all transitively imported local
modules. This fixes builds where a module imports another local module
that has language-level dependencies (e.g., pytest).
|
|
The multi-line UI now handles status display, so these warn messages
are redundant and clutter the output.
|
|
Implement STM-based pipeline that allows per-target progression
through build phases (analyze → wait for deps → build) with
concurrent workers.
Key changes: - TargetState enum tracks each target through pipeline
stages - Coordinator manages state, analyze queue, build queue
coordination - pipelineAnalysisWorker/pipelineBuildWorker pull from
queues concurrently - promoteWaiters unblocks targets when their
dependencies complete
UI improvements: - Multi-line mode reserves N lines for N targets,
updates in-place - Remove narrow terminal (<80 col) restriction for
multi-line mode - Add Skipped state with yellow [_] for non-buildable
files - Remove extra blank line at start of output
State symbols: [.] Pending, [+] Analyzing, [~] Building, [✓] Success
(green), [x] Failed (red), [_] Skipped (yellow)
|
|
- Create single LineManager in move() that spans both phases -
Reserve N lines upfront for N build targets - Status progression:
[.] pending -> [+] analyzing -> [~] building -> [✓]/[x] done -
Remove duplicate LineManager creation from analyzeAll and build -
Update both SingleLine and MultiLine modes with proper symbols
This fixes the issue where only one line was reserved during analysis
and status lines were being duplicated instead of overwritten.
|