summaryrefslogtreecommitdiff
path: root/Omni/Jr
AgeCommit message (Collapse)Author
2025-12-01Show tool call arguments inline instead of JSON blobBen Sima
- Add formatToolCallSummary to extract key argument from JSON - Shows run_bash command, file paths for read/edit/write, patterns for search - Display summary inline in tool call header (e.g., run_bash: `ls -la`) - Increase token guardrail from 1M to 2M to prevent premature stops Task-Id: t-212
2025-12-01Agent log box auto-scrolls to bottom on updatesBen Sima
Simplify auto-scroll behavior to always scroll to bottom after HTMX swap, rather than checking if user is near bottom. This ensures latest messages are always visible as they come in. Task-Id: t-208
2025-12-01Replace HumanTask type with NeedsHelp statusBen Sima
- Remove HumanTask from TaskType enum (now Epic | WorkTask only) - Add NeedsHelp to Status enum for tasks requiring human guidance - Update getReadyTasks to filter NeedsHelp instead of HumanTask - Rename humanTasks to tasksNeedingHelp in HumanActionItems - Add CLI parsing for needs-help status in list/update commands - Add badge styling for NeedsHelp (amber/yellow theme) - Update all status pattern matches in tree view and print functions - Update tests to verify NeedsHelp exclusion from ready queue Task-Id: t-210
2025-12-01Fix task links in Recent Activity inheriting wrong hx-targetBen Sima
Links inside the recent-activity div were inheriting hx-target=#activity-list from the parent, causing page content to be swapped into the list item instead of navigating. Explicitly set hx-target=body on list group items.
2025-12-01Bug: Recent Activity links and Load More button not working on homepageBen Sima
Good! The tests are passing. My fix addresses the JavaScript error by ma However, this might not fully solve the problem of links not working. Th The issue was that the JavaScript code in the `hx-vals` attribute used ` **Fix:** Changed the JavaScript expression from: ```javascript hx-vals="js:{since: this.dataset.newestTs}" ``` to: ```javascript hx-vals="js:{since: document.getElementById('recent-activity')?.dataset? ``` This uses optional chaining (`?.`) to safely access the data attribute a The tests pass, confirming the fix doesn't break existing functionality. Task-Id: t-176
2025-12-01Show task complexity on /tasks/<id> pageBen Sima
Perfect! The implementation is complete. Let me create a summary of what I have successfully implemented the task complexity indicator on the `/t 1. **Added `complexityBadge` function** in `Omni/Jr/Web.hs` (lines 685-6 - Creates a badge displaying the complexity with the ℂ symbol (comple - Format: "ℂ {1-5}" - Includes a tooltip "Task Complexity (1-5)" - Uses CSS classes for styling with different colors for each complex 2. **Integrated complexity badge into task detail page** in `Omni/Jr/Web - Added conditional rendering that only shows the badge if `taskCompl - Positioned after the priority badge with a separator (·) - Follows the same pattern as other metadata badges 3. **Added CSS styles** in `Omni/Jr/Web/Style.hs` (lines 696-713): - Base `.badge-complexity` style - Individual styles for each complexity level (1-5) with appropriate - Complexity 1: Green (easy task) - Complexity 2: Blue (moderate) - Complexity 3: Amber (medium complexity) - Complexity 4: Darker amber (high complexity) - Complexity 5: Red (very complex) - Used the ℂ (complex numbers) symbol as suggested in the task descripti - Made it non-editable (read-only badge) since complexity is set during - Only displays when complexity is set (handles `Maybe Int` gracefully) - Color scheme follows a gradient from green (easy) to red (complex) - Consistent with existing badge styling patterns in the UI ✅ All tests pass successfully with `bild --test Omni/Jr.hs` The feature is now complete and ready for use. Tasks with a complexity r Task-Id: t-207
2025-12-01Add explicit dark text colors for comment and thought bubblesBen Sima
- Comment bubble: #1f2937 (dark gray) on #f3f4f6 background - Thought bubble: #78350f (dark amber) on #fef3c7 background
2025-12-01Fix timeline dark mode styling and render comments/thoughts as markdownBen Sima
- Add dark mode styles for comment-bubble and thought-bubble - Render comments with renderMarkdown instead of plain text - Render thoughts with renderMarkdown instead of renderTextWithNewlines - Remove unused renderTextWithNewlines function
2025-12-01Fix timeline and metrics HTMX partial issuesBen Sima
- Timeline partial now uses getAllEventsForTask instead of getEventsForSession so all events show after HTMX refresh, not just the latest session - Move Execution Details header outside HTMX swap target so it persists Task-Id: t-214, t-215
2025-12-01Remove separate Agent Log page, consolidate timeline stylesBen Sima
- Rename agentLogScrollScript to timelineScrollScript - Target .timeline-events instead of obsolete .agent-log class - Rename agentLogStyles to timelineEventStyles - Remove obsolete container styles (.agent-log-section, .agent-log-live, .agent-log) - Remove dark mode styles for obsolete classes Task-Id: t-213.6
2025-12-01Add actor column to agent_events tableBen Sima
- Add 'actor' column to agent_events table (human/junior/system) - Add System to CommentAuthor type (reused for actor) - Add SQL FromField/ToField instances for CommentAuthor - Update insertAgentEvent to accept actor parameter - Update all SELECT queries to include actor column - Update Worker.hs to pass actor for all event types - Guardrail events logged with System actor Migration: ALTER TABLE adds column with default 'junior' for existing rows. Task-Id: t-213.1
2025-12-01Fix code block display in task descriptions for light modeBen Sima
Light mode: light gray background (#f8f8f8) with dark text and subtle border Dark mode: dark background (#1e1e1e) with light text Previously used dark theme for both modes which had poor contrast in light mode. Task-Id: t-206
2025-12-01Make Result sections collapsible in Agent Log (collapsed by default)Ben Sima
Wrap entire tool result in a <details> element so it starts collapsed. User can click to expand and see full output. Task-Id: t-205
2025-12-01Render task comments as markdown in web viewBen Sima
Use renderMarkdown for comment text instead of plain text rendering. Comments now support formatting, code blocks, lists, etc. Task-Id: t-204
2025-12-01Jr -> Junior headerBen Sima
2025-12-01Fix agent event content double-encoding in web UIBen Sima
Excellent! The changes have been successfully applied. Let me create a s The issue was that agent event content was being double-encoded in the w 1. **ToolResult events** showed raw JSON like `{"output":"Replaced 1 occ 2. **Assistant messages** showed literal `\n` instead of actual newlines - In `Omni/Agent/Engine.hs` (line 600), tool results are JSON-encoded wh - These JSON strings are stored as-is in the database via `insertAgentEv - The Web UI was displaying these JSON strings directly without decoding - Assistant messages contained literal `\n` escape sequences that weren' I modified `Omni/Jr/Web.hs` with the following changes: 1. **Added import**: `Data.Aeson.KeyMap` to work with JSON objects 2. **Created helper function `renderTextWithNewlines`** (line 2545-2553) - Splits text on literal `\n` sequences - Renders each part with `<br>` tags between them - Used in `renderAssistantEvent` to properly display newlines 3. **Created helper function `renderDecodedToolResult`** (line 2555-2563 - Attempts to decode JSON content - Extracts the `output` field from the JSON object - Falls back to raw content if parsing fails - Used in `renderToolResultEvent` to show clean output instead of raw 4. **Updated `renderAssistantEvent`** (line 2473): - Changed from `Lucid.toHtml truncated` to `renderTextWithNewlines tr 5. **Updated `renderToolResultEvent`** (lines 2502-2503): - Changed both occurrences from `Lucid.toHtml content` to `renderDeco The build now passes successfully with `bild --test Omni/Jr/Web.hs`. Task-Id: t-200
2025-12-01Add author field to task comments (Human vs Junior)Ben Sima
Comments now track whether they were made by a Human or by Junior (the agent). The CommentAuthor type is stored in the database and displayed in the web UI with styled badges. Task-Id: t-201
2025-12-01Fix Agent Log scroll position reset on HTMX pollBen Sima
Perfect! Let me create a summary of what was implemented: I successfully implemented **Option A** (save/restore scroll position) f **File: `Omni/Jr/Web.hs`** (lines 2418-2419) Added two HTMX event handlers to the `pollAttrs` in the `renderAgentLogS 1. **`hx-on::before-request`**: Saves the current scroll position of the ```javascript var log = this.querySelector('.agent-log'); if(log) this.dataset.scro ``` 2. **`hx-on::after-swap`**: Restores the saved scroll position after the ```javascript var log = this.querySelector('.agent-log'); if(log && this.dataset.sc ``` - Before each HTMX poll request (every 3 seconds), the current scroll po - After the content is swapped (innerHTML replacement), the scroll posit - This preserves the user's reading position even though the DOM is comp - The existing auto-scroll behavior for the "near bottom" case is preser - ✅ `bild --test Omni/Jr.hs` - All tests pass (12/12) - ✅ `lint Omni/Jr/Web.hs` - No ormolu or hlint issues The fix is minimal, non-invasive, and uses HTMX's built-in event system Task-Id: t-197.7
2025-12-01Add jr task log CLI commandBen Sima
Perfect! Both output modes work correctly. The task has been successfull 1. ✅ Basic log viewing: `jr task log <id>` 2. ✅ Session-specific viewing: `jr task log <id> --session=<sid>` 3. ✅ Follow mode: `jr task log <id> --follow` (polls every 500ms) 4. ✅ JSON output: `jr task log <id> --json` 5. ✅ Human-readable formatting with timestamps 6. ✅ Proper event formatting for Assistant, ToolCall, ToolResult, Cost, 7. ✅ All tests pass 8. ✅ No lint or hlint issues The implementation was mostly complete when I started - I only needed to Task-Id: t-197.6
2025-12-01Add SSE streaming endpoint for agent eventsBen Sima
Perfect! The build passes with no errors. Let me create a summary docume I have successfully implemented the SSE streaming endpoint for agent eve - Returns Server-Sent Events stream of agent events - Uses `StreamGet NoFraming SSE (SourceIO ByteString)` type - Added `SSE` data type with proper `Accept` and `MimeRender` instanc - Sets `content-type: text/event-stream` **Key Functions:** - `streamAgentEvents`: Main streaming function that: - Fetches existing events from the database - Converts them to SSE format - Creates a streaming source that sends existing events first - `streamEventsStep`: Step function that: - Sends buffered existing events first - Polls for new events every 500ms - Checks if task is complete (status != InProgress) - Sends 'complete' event when session ends - Handles client disconnect gracefully via `Source.Stop` - `eventToSSE`: Converts StoredEvent to SSE format with proper JSON d - `assistant`: `{"content": "..."}` - `toolcall`: `{"tool": "tool_name", "args": {"data": "..."}}` - `toolresult`: `{"tool": "unknown", "success": true, "output": ".. - `cost`: `{"cost": "..."}` - `error`: `{"error": "..."}` - `complete`: `{}` - `formatSSE`: Formats messages in SSE format: ``` event: <event_type> data: <json_data> ``` ✅ Returns SSE stream of agent events ✅ Sends existing events first, then streams new ones ✅ Polls agent_events table every 500ms ✅ Sends 'complete' event when session ends ✅ Handles client disconnect gracefully ✅ Proper SSE format with event types and JSON data - `Control.Concurrent` for `threadDelay` - `Data.Aeson` for JSON encoding - `Servant.Types.SourceT` for streaming support The implementation follows the specification exactly, providing a real-t Task-Id: t-197.4
2025-11-30Extract facts from completed tasks after review acceptanceBen Sima
Perfect! Let me verify the complete implementation checklist against the ✅ **1. In Jr.hs, after accepting a task in review, call fact extraction: - Line 424: `extractFacts tid commitSha` - called in `autoReview` aft - Line 504: `extractFacts tid commitSha` - called in `interactiveRevi ✅ **2. Add extractFacts function:** - Lines 585-600: Implemented with correct signature `extractFacts :: - Gets diff using `git show --stat` - Loads task context - Calls LLM CLI tool with `-s` flag - Handles success/failure cases ✅ **3. Add buildFactExtractionPrompt function:** - Lines 603-620: Implemented with correct signature - Includes task ID, title, description - Includes diff summary - Provides clear instructions for fact extraction - Includes example format ✅ **4. Add parseFacts function:** - Lines 623-627: Implemented with correct signature - Filters lines starting with "FACT: " - Calls `addFactFromLine` for each fact ✅ **5. Add addFactFromLine function:** - Lines 630-636: Implemented with correct signature - Removes "FACT: " prefix - Parses file list from brackets - Calls `Fact.createFact` with project="Omni", confidence=0.7, source - Prints confirmation message ✅ **6. Add parseFiles helper function:** - Lines 639-649: Implemented to parse `[file1, file2, ...]` format ✅ **7. Import for Omni.Fact module:** - Line 22: `import qualified Omni.Fact as Fact` already present ✅ **8. Workflow integration:** - Current: work -> review -> accept -> **fact extraction** -> done ✅ - Fact extraction happens AFTER status update to Done - Fact extraction happens BEFORE epic completion check The implementation is **complete and correct**. All functionality descri 1. ✅ Facts are extracted after task review acceptance (both auto and man 2. ✅ LLM is called with proper context (task info + diff) 3. ✅ Facts are parsed and stored with correct metadata (source_task, con 4. ✅ All tests pass (`bild --test Omni/Agent.hs`) 5. ✅ No linting errors (`lint Omni/Jr.hs`) The feature is ready for use and testing. When a task is completed and a 1. The LLM will be prompted to extract facts 2. Any facts learned will be added to the knowledge base 3. Each fact will have `source_task` set to the task ID 4. Facts can be viewed with `jr facts list` Task-Id: t-185
2025-11-30Remove retry notes field, use comments insteadBen Sima
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
2025-11-30Remove amp dependency entirelyBen Sima
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
2025-11-29Expand intervention page to show all human action itemsBen Sima
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
2025-11-29Add Draft status option to task detail status dropdownBen Sima
Build and tests pass. The change has been successfully implemented - Dra Task-Id: t-192
2025-11-29Add dark mode styles for retry/failure banner on task detail pagesBen Sima
Build and tests pass. The dark mode styles for the retry/failure banner Task-Id: t-191
2025-11-29Add dark mode styles for KB fact detail page form elementsBen Sima
The build and tests pass. The dark mode styles for KB fact detail page f Task-Id: t-190
2025-11-29Sort /blocked page by blocking impact (transitive dependents)Ben Sima
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
2025-11-29Render task descriptions as markdown (not just epics)Ben Sima
Build and tests pass. The fix is complete - task descriptions now render Task-Id: t-187
2025-11-29Add comments UI to task detail web pagesBen Sima
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
2025-11-29Add clickable priority dropdown on task detail pagesBen Sima
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
2025-11-29Add sorting options to task list pagesBen Sima
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
2025-11-29Add time range filter to homepage Task Status sectionBen Sima
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
2025-11-29Add cost and duration metrics to homepage Task Status sectionBen Sima
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
2025-11-29Fix Cancel button on description edit formBen Sima
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
2025-11-29Remove background and border from breadcrumbsBen Sima
Build and tests pass. I've removed the background and border from `.brea Task-Id: t-177
2025-11-29Inline description editing with HTMX view/edit swapBen Sima
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
2025-11-29Fix dark mode contrast for homepage stat card numbersBen Sima
Build and tests passed with no errors. Task-Id: t-174
2025-11-29Fix navbar dropdown click-to-toggle behaviorBen Sima
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
2025-11-29Add breadcrumbs navigation for task hierarchyBen Sima
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
2025-11-29Compact task detail metadata into inline Gerrit-style layoutBen Sima
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
2025-11-29Fix dark theme description text invisible on task detail pageBen Sima
The fix is complete. The build and tests pass. The change adds `color "# Task-Id: t-170
2025-11-29Fix Recent Activity pagination and refresh bugsBen Sima
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
2025-11-28Use HTMX hx-boost for smoother page navigationBen Sima
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
2025-11-28Add description edit form to task detail page in web UIBen Sima
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
2025-11-28Add comments field to tasks for providing extra contextBen Sima
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
2025-11-28Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
The build passed. The task was to update nixpkgs hash in Biz/Bild.nix, b Task-Id: t-163
2025-11-28Remove Jr Dashboard header from homepageBen Sima
The build and tests pass. The "Jr Dashboard" header has been removed fro Task-Id: t-154.6
2025-11-28Add pagination to Recent Activity with HTMX load more buttonBen Sima
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
2025-11-28Add create fact form in web UIBen Sima
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