| Age | Commit message (Collapse) | Author |
|
All done. Changes made:
1. **Web.hs**: Removed the retry-notes-section (form for saving notes)
a 2. **Web.hs**: Added hint text "Use comments below to provide
guidance f 3. **Style.hs**: Added `.retry-hint` style for the new
hint text 4. **Kept**: RetryContext.retryNotes field in Core.hs
(backward compat),
Task-Id: t-194
|
|
The build and tests pass. Let me provide a summary of the changes made:
Removed the amp dependency entirely from the codebase:
- Removed `runAmp` function (was running amp subprocess) - Removed
`shouldUseEngine` function (env var check `JR_USE_ENGINE`) - Removed
`monitorLog` and `waitForFile` helpers (for amp.log parsing) - Removed
unused imports: `System.IO`, `Data.Text.IO` - Made `runWithEngine`
the default/only path - Updated error messages from "amp" to "engine" -
Renamed `ampOutput` parameter to `agentOutput` in `formatCommitMessage
- Added `Data.IORef` import for `newIORef`, `modifyIORef'`, `readIORef`
- Removed amp.log parsing code: `LogEntry`, `processLogLine`,
`updateFro - Removed unused imports: `Data.Aeson`,
`Data.ByteString.Lazy`, `Data.Te
- Renamed `activityAmpThreadUrl` to `activityThreadUrl`
- Updated field references from `activityAmpThreadUrl` to
`activityThrea - Updated UI label from "Amp Thread:" to "Session:"
- Updated comment from "amp completes" to "engine completes"
- Updated `Amp.execute` to `Engine.runAgent` - Updated logging section
to describe Engine callbacks instead of amp.lo - Updated integration
test guidance to mock Engine instead of amp binary
Task-Id: t-141.6
|
|
All tests pass and lint is clean. The implementation is complete:
**Changes made:**
1. **Omni/Task/Core.hs:**
- Added `EpicForReview` data type to hold epic with progress info -
Added `HumanActionItems` data type to group all three categories -
Added `getHumanActionItems` function that returns:
- `failedTasks`: Tasks with retry_attempt >= 3 - `epicsInReview`:
Epics where all children are Done (and has at le - `humanTasks`:
HumanTask type tasks in Open status
2. **Omni/Jr/Web.hs:**
- Updated `InterventionPage` data type to use `HumanActionItems`
- Updated `interventionHandler` to call `getHumanActionItems` -
Rewrote `ToHtml InterventionPage` to show 3 sections with headers -
Added `renderEpicReviewCard` for epic review cards with "Approve &
- Renamed navbar link from "Intervention" to "Human Action"
Task-Id: t-193.5
|
|
Build and tests pass. The change has been successfully implemented
- Dra
Task-Id: t-192
|
|
All tests pass. The implementation is complete:
**Summary of changes:**
1. **Omni/Task/Core.hs** - Added helper functions:
- `getBlockingImpact`: Counts how many tasks are transitively
blocked - `getTransitiveDependents`: Gets all tasks that depend
on a task (di - `dependsOnTask`: Helper to check if a task depends
on a given ID wi
2. **Omni/Jr/Web.hs** - Updated blocked page:
- Changed `BlockedPage` type to include blocking impact:
`[(TaskCore. - Updated `blockedHandler` to compute blocking impact
and sort by it - Added `renderBlockedTaskCard` to display tasks with
their blocking - Updated the info message to explain the sorting
3. **Omni/Jr/Web/Style.hs** - Added CSS:
- `.blocking-impact` badge style (light mode) - `.blocking-impact`
dark mode style
Task-Id: t-189
|
|
Build and tests pass. The fix is complete - task descriptions now
render
Task-Id: t-187
|
|
The build passes. The comments UI is already fully implemented in
the co
1. **Route**: `/tasks/:id/comment` with POST handler (line 226)
2. **Handler**: `taskCommentHandler` (lines 763-766) calls
`TaskCore.add 3. **Form type**: `CommentForm` (lines 374-379)
4. **Display section**: renders in `TaskDetailPage` (lines 1484-1490)
sh
- Comment count in header - Empty message if no comments - Each
comment with text and relative timestamp
5. **Comment form**: textarea with "Post Comment" button (lines
1553-156 6. **Helper function**: `renderComment` (lines 1547-1551)
7. **CSS**: Full styling in `Style.hs` including dark mode (lines
552-58
The implementation is complete and the build passes.
Task-Id: t-183
|
|
The build passes successfully. Let me provide a summary of the
changes m
I implemented the clickable priority dropdown on task detail pages,
mirr
1. **Added new API route** for priority updates:
```haskell "tasks" :> Capture "id" Text :> "priority" :> ReqBody
'[FormUrlEncode ```
2. **Added new types**:
- `PriorityBadgePartial` - partial response for HTMX updates -
`PriorityForm` - form data for priority changes with `FromForm` ins
3. **Added handler** `taskPriorityHandler` that updates task
priority vi
4. **Added priority dropdown components**:
- `priorityBadgeWithForm` - container with clickable badge and
dropdo - `clickablePriorityBadge` - the clickable badge showing
current prio - `priorityDropdownOptions` - dropdown menu with
P0-P4 options - `priorityOption` - individual priority option with
HTMX form
5. **Added JavaScript** `priorityDropdownJs` for dropdown toggle/close
b
6. **Updated task detail page** to use `priorityBadgeWithForm`
instead o
7. **Added `ToHtml` instance** for `PriorityBadgePartial`
1. **Added priority badge styles** for P0-P4 with appropriate colors
2. **Added priority dropdown styles** (mirroring status dropdown)
3. **Added dark mode styles** for priority badges and dropdown
Task-Id: t-182
|
|
The implementation is complete and all tests pass. Here's a summary
of w
1. Added `SortOrder` data type with 5 options: `SortNewest`,
`SortOldest 2. Added helper functions: `parseSortOrder`,
`sortOrderToParam`, `sortOr 3. Updated API routes to include `?sort=`
query param for `/ready`, `/bl 4. Updated page data types to include
`SortOrder` 5. Updated all list handlers to parse sort param and apply
sorting 6. Added `sortDropdown` component that renders a dropdown
with all sort 7. Added `sortOption` helper to render individual sort
options with acti 8. Updated all `ToHtml` instances for list pages
to render the sort drop
1. Added `sortDropdownStyles` for the page header row and sort dropdown
2. Added dark mode styles for the sort dropdown
Task-Id: t-181
|
|
The build and tests pass with no errors. The time range filter
feature f
**Implementation summary:** - Route accepts
`?range=today|week|month|all` query param - `TimeRange` type with
`Today`, `Week`, `Month`, `AllTime` variants - `homeHandler` filters
both tasks and activities by time range - Toggle buttons rendered
with `timeFilterBtn` helper - Full CSS styling in `timeFilterStyles`
with dark mode support - Default selection: "All Time"
Task-Id: t-180
|
|
The implementation is complete. The build passed with `bild --test
Omni/
**Summary of changes:**
1. **Omni/Task/Core.hs**: Added `getGlobalAggregatedMetrics ::
IO Aggreg
2. **Omni/Jr/Web.hs**:
- Updated `HomePage` data type to include `AggregatedMetrics`
paramet - Updated `homeHandler` to fetch global metrics via
`getGlobalAggrega - Updated `ToHtml HomePage` instance to add
two new cards: "Cost" (fo - Added helper functions `metricCard`,
`formatCost`, and `formatDurat
3. **Omni/Jr/Web/Style.hs**: Added `badge-neutral` CSS styling
(gray bor
Task-Id: t-179
|
|
The fix is complete:
1. Changed the Cancel element from `<a href="#">` to `<button
type="butt 2. Added button reset styling (transparent background,
no border, underl
The `<button>` element works better with HTMX because it doesn't
have th
Task-Id: t-178
|
|
The implementation is complete. Here's a summary of the changes:
**Omni/Jr/Web.hs:** 1. Added new API routes for
`/tasks/:id/description/view` and `/tasks/:i 2. Added
`DescriptionViewPartial` and `DescriptionEditPartial` data
type 3. Added `ToHtml` instances for both partials with HTMX
attributes for v 4. Added handlers: `descriptionViewHandler`,
`descriptionEditHandler`, ` 5. Updated the TaskDetailPage render to
use the view partial instead of
**Omni/Jr/Web/Style.hs:** 1. Added `.description-block` container
styles 2. Added `.description-header` flex styles for header with
title and edi 3. Added `.edit-link` and `.cancel-link` styles (12px
font, blue for edi 4. Added dark mode overrides for the links
Task-Id: t-175
|
|
The build passed with no errors. The implementation adds:
1. JavaScript click-toggle handler for navbar dropdowns (closes
all, the 2. Click-outside-to-close behavior 3. CSS rule for
`.navbar-dropdown.open` state to show dropdown content
Task-Id: t-173
|
|
The implementation is complete. Here's a summary of the changes made:
1. Added `Breadcrumb` data type and `Breadcrumbs` type alias
2. Added `pageBodyWithCrumbs` function that renders the page with
breadc 3. Added `renderBreadcrumbs` function to render the breadcrumb
navigatio 4. Added `getAncestors` helper to traverse task parent chain
5. Added `taskBreadcrumbs` helper to build breadcrumbs including parent
Updated all page ToHtml instances to use breadcrumbs: -
`ReadyQueuePage`: Jr > Ready Queue - `BlockedPage`: Jr > Blocked -
`InterventionPage`: Jr > Needs Intervention - `KBPage`: Jr > Knowledge
Base - `FactDetailPage`: Jr > Knowledge Base > Fact #N - `EpicsPage`:
Jr > Epics - `TaskListPage`: Jr > Tasks - `TaskDetailPage`: Jr >
Tasks > (parent chain) > task-id - `TaskReviewPage`: Jr > Tasks >
task-id > Review - `TaskDiffPage`: Jr > Tasks > task-id > Diff (short
hash) - `StatsPage`: Jr > Stats - `HomePage`: Uses regular `pageBody`
(no breadcrumbs)
Added `breadcrumbStyles` function with CSS for: -
`.breadcrumb-container`: Light gray background, subtle bottom border -
`.breadcrumb-list`: Flex layout with wrapping - `.breadcrumb-item`:
Flex items with gap - `.breadcrumb-sep`: Gray separator ">" -
`.breadcrumb-current`: Current page label (no link) - Link styling
for breadcrumb links
Added dark mode overrides for breadcrumbs in `darkModeStyles`.
Task-Id: t-172
|
|
The implementation is complete. Here's a summary of changes:
**Omni/Jr/Web.hs:** - Added `metaSep` helper function for the `·`
separator - Added top-level `priorityDesc` function mapping priority
levels to hum - Replaced the vertical `detail-row` layout with compact
inline `task-me
- Primary line: ID · Type · Status · Priority · Namespace
(optional) - Secondary line: Parent (optional) · Created · Updated
- Removed the shadowing local `priorityDesc` from the `where` clause
**Omni/Jr/Web/Style.hs:** - Added `taskMetaStyles` function with
styles for `.task-meta`, `.task-m - Added dark mode overrides for the
new task-meta classes - Registered `taskMetaStyles` in the stylesheet
Task-Id: t-171
|
|
Build and tests pass. The implementation is complete:
**Summary of changes to
[Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/W
1. Added `Data.Time.Clock.POSIX` import for `posixSecondsToUTCTime` and
2. Replaced `RecentActivityPartial` with two new types:
- `RecentActivityNewPartial` - for auto-refresh (prepends new items)
- `RecentActivityMorePartial` - for "Load More" pagination
3. Updated API routes:
- `/partials/recent-activity-new?since=<unix-ts>` - returns new
items - `/partials/recent-activity-more?offset=<n>` - returns
paginated old
4. Updated `HomePage` render with proper HTMX attributes:
- Added `#recent-activity` ID and `data-newest-ts` attribute
- Added `#activity-list` ID for the list container - Added
`#activity-load-more` ID for the button - Updated hx-targets and
hx-swap attributes
5. Added `taskToUnixTs` helper function
6. Created two new ToHtml instances with OOB updates for button
replacem
Task-Id: t-169
|
|
The build and tests pass. The `hx-boost="true"` is already
implemented o
```haskell pageBody content =
Lucid.body_ [Lucid.makeAttribute "hx-boost" "true"] <| do
navbar content
```
This means: - All anchor tags (`<a>`) and forms within the body
will automatically u - Page content will be swapped via AJAX without
full page reloads - Scroll position is preserved, making navigation
feel snappier
The task appears to have already been implemented correctly. The
build p
Task-Id: t-151.5
|
|
The build and tests pass. The implementation adds a description
edit for
1. An expandable `<details>` section similar to the existing Epic
design 2. A textarea for editing the description 3. HTMX `hx-post`
for seamless update (with `hx-swap="none"` since the e 4. Also shows
"No description yet." message when description is empty (p
Task-Id: t-168
|
|
All tests pass. Here's a summary of the changes I made:
1. **Added `Comment` data type** in `Omni/Task/Core.hs` with
`commentTex 2. **Added `taskComments` field** to the `Task` type
to store a list of 3. **Updated database schema** with a `comments
TEXT` column (stored as 4. **Added SQL instances** for `[Comment]`
to serialize/deserialize 5. **Added `addComment` function** to
add timestamped comments to tasks 6. **Added CLI command** `task
comment <id> <message> [--json]` 7. **Updated `showTaskDetailed`**
to display comments in the detailed vi 8. **Added unit tests**
for comments functionality 9. **Added CLI tests** for the comment
command 10. **Fixed dependent files** (`Omni/Agent/Worker.hs` and
`Omni/Jr/Web.h
Task-Id: t-167
|
|
The build passed. The task was to update nixpkgs hash in Biz/Bild.nix,
b
Task-Id: t-163
|
|
The build and tests pass. The "Jr Dashboard" header has been removed
fro
Task-Id: t-154.6
|
|
The implementation is complete. Here's a summary:
**Changes made:** 1. **API**: Added `QueryParam "offset" Int` to the
`/partials/recent-act 2. **Data types**:
- Updated `HomePage` to include a `Bool` for whether there are
more t - Updated `RecentActivityPartial` to include `nextOffset ::
Int` and
3. **Homepage rendering**: Shows a "Load More" button when there
are mor 4. **Partial rendering**: The `RecentActivityPartial` now
shows a "Load 5. **Handler**: `recentActivityHandler` now supports
pagination with off 6. **Styling**: Added CSS for `.load-more-btn`
and `.btn-secondary` clas
The HTMX integration uses: - `hx-get` to fetch the next page with
offset - `hx-target="closest .recent-activity"` to target the parent
container - `hx-swap="beforeend"` to append new items (including
another Load More
Task-Id: t-151.4
|
|
All tests pass. The create fact form has been added to the web
UI. Here'
1. **Added `FactCreateForm` data type** - New form type to handle the
cr 2. **Added API route** - `POST /kb/create` endpoint that accepts
the for 3. **Added handler** - `factCreateHandler` that creates a
new fact using 4. **Added form UI** - A collapsible form on the KB
page with fields for
- Project (required) - Fact Content (required textarea) - Related
Files (optional, comma-separated) - Confidence level (0.0-1.0,
default 0.8)
5. **Added CSS styles** - Styling for the create fact section in
both li
Task-Id: t-158.6
|
|
All tests pass with no warnings. The implementation is complete:
1. **Added new routes** (`/kb/:id`, `/kb/:id/edit`, `/kb/:id/delete`)
to 2. **Created `FactDetailPage` data type** with `FactDetailFound`
and `Fa 3. **Created `FactEditForm`** data type for handling
form submissions 4. **Added handlers** (`factDetailHandler`,
`factEditHandler`, `factDele 5. **Added `ToHtml` instance for
`FactDetailPage`** with:
- Detail view showing project, confidence, created date - Editable
content textarea - Related files input - Confidence slider -
Source task link - Danger zone with delete button
6. **Updated KB listing** to make facts clickable links to their
detail 7. **Added CSS styles** for form elements, buttons, danger zone,
and err
Task-Id: t-158.5
|
|
The implementation is complete. The `/kb` web page now:
1. Fetches all facts from the database via `Fact.getAllFacts`
2. Displays each fact in a card showing:
- Fact ID - Confidence score as a colored badge (green ≥80%,
yellow ≥50%, red < - Project name - Fact content - Related files
(if any) - Source task link (if any)
Task-Id: t-158.4
|
|
The build passes now. The task was to add `Omni/Fact.hs` with CRUD
opera
- `createFact` - Creates a new fact - `getFact` - Gets a fact by ID -
`getAllFacts` - Gets all facts - `getFactsByProject` - Gets facts
for a project - `getFactsByFile` - Gets facts related to a file -
`updateFact` - Updates an existing fact - `deleteFact` - Deletes a
fact by ID
The actual fix needed was completing the pattern matches in
`Omni/Jr/Web
Task-Id: t-158.2
|
|
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 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
|
|
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 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
|
|
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. 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
|
|
The build passes with no errors. The implementation was already
in place
Task-Id: t-149.6
|