Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
03d6ec9
add trail view workflows
khaliqgant Apr 7, 2026
f017d3b
review tweaks
khaliqgant Apr 7, 2026
d17014a
chore: add Package.swift — SPM config for TrailViewer macOS app
khaliqgant Apr 7, 2026
f509a15
feat: add TrailViewerApp.swift — @main entry with WindowGroup
khaliqgant Apr 7, 2026
4e22178
feat: add AppConfiguration — server URLs and default paths
khaliqgant Apr 7, 2026
6a44d26
chore: scaffold Trail Viewer macOS app
khaliqgant Apr 7, 2026
d8ea108
feat: add Animations.swift — shared animation constants and shimmer e…
khaliqgant Apr 7, 2026
b71828c
feat: add LayoutConstants.swift — sidebar, panel, and content dimensions
khaliqgant Apr 7, 2026
4bde78f
feat: add Theme.swift — full color palette, spacing, and radii tokens
khaliqgant Apr 7, 2026
f208595
feat: add Typography.swift — serif headings and body font ViewModifiers
khaliqgant Apr 7, 2026
a83f209
feat: add design tokens — colors, typography, animations
khaliqgant Apr 7, 2026
3b18442
feat: add SectionElements.swift — SectionHeader, RuleLine, OrnamentDi…
khaliqgant Apr 7, 2026
bd4f614
feat: add Badges.swift — StatusBadge, TagPill, SignificanceDot, Agent…
khaliqgant Apr 7, 2026
a5a4282
feat: add SkeletonView.swift — skeleton loading placeholders with shi…
khaliqgant Apr 7, 2026
ceb2220
feat: add BookCard.swift — paper-like card with selection and hover s…
khaliqgant Apr 7, 2026
03dfcfa
feat: add EmptyState.swift — centered empty state component
khaliqgant Apr 7, 2026
82c9524
feat: add ToastView.swift — toast notifications with auto-dismiss
khaliqgant Apr 7, 2026
7bfc7dd
feat: add design components — cards, badges, skeleton, toast
khaliqgant Apr 7, 2026
eb40400
feat: add SettingsModels.swift — CLI info, availability, and app pref…
khaliqgant Apr 7, 2026
f9f1235
feat: add ChatModels.swift — chat message, persona, and session types
khaliqgant Apr 7, 2026
8cc25b4
feat: add APIModels.swift — API response wrappers, error types, stats
khaliqgant Apr 7, 2026
7d1ec96
feat: add TrajectoryModels.swift — Codable models for trajectories, c…
khaliqgant Apr 7, 2026
802a8e2
feat: add Codable data models
khaliqgant Apr 7, 2026
af60a68
feat: add CLIDetector.swift — PATH scanning and version detection for…
khaliqgant Apr 7, 2026
e2136fe
feat: add RelayConnection.swift — WebSocket client with auto-reconnect
khaliqgant Apr 7, 2026
77f5a50
feat: add LocalServerManager.swift — spawn and manage TypeScript serv…
khaliqgant Apr 7, 2026
0b8671d
feat: add APIClient.swift — async HTTP client for all REST endpoints
khaliqgant Apr 7, 2026
4d96681
feat: add API client, relay, CLI detector, server manager
khaliqgant Apr 7, 2026
f2aabbb
feat: add TrajectoryStore.swift — @Observable store with filtering an…
khaliqgant Apr 7, 2026
9443457
feat: add AppStateStore.swift — window state, recent paths, UI prefer…
khaliqgant Apr 7, 2026
b42afb5
feat: add CLISettingsStore.swift — CLI preferences with UserDefaults …
khaliqgant Apr 7, 2026
9bb5c0a
feat: add ChatStore.swift — @Observable store for chat sessions and m…
khaliqgant Apr 7, 2026
4062770
feat: add observable stores
khaliqgant Apr 7, 2026
5e7f1e2
feat: add TrajectoryListView — main sidebar with header, filter, and …
khaliqgant Apr 7, 2026
0b522a0
feat: add FilterBar — search field and status filter pills
khaliqgant Apr 7, 2026
3767037
feat: add SidebarHeader — serif title, rule line, and stats summary
khaliqgant Apr 7, 2026
19e23cf
feat: add TrajectoryRow — rich sidebar row with status, tags, and rel…
khaliqgant Apr 7, 2026
9b6aa02
feat: add SidebarSkeleton — shimmer loading placeholder for sidebar
khaliqgant Apr 7, 2026
b2e0922
feat: add trajectory list sidebar
khaliqgant Apr 7, 2026
35e5815
feat: add TimelineRail — vertical timeline with dots and connecting l…
khaliqgant Apr 7, 2026
087fb94
feat: add ChapterNavigation — horizontal chapter pill navigation
khaliqgant Apr 7, 2026
b3aa84f
feat: add DetailSkeleton — shimmer loading placeholder for detail view
khaliqgant Apr 7, 2026
d3a218a
feat: add TrajectoryHeaderView — detail header with title, metadata, …
khaliqgant Apr 7, 2026
841b738
feat: add detail header, chapter nav, timeline rail
khaliqgant Apr 7, 2026
095f05c
feat: add all 8 event type views (fan-out pattern)
khaliqgant Apr 7, 2026
e25e011
feat: add all 8 event type views (fan-out pattern)
khaliqgant Apr 7, 2026
0ad4f6e
feat: add ConfidenceMeter — reusable gradient confidence bar component
khaliqgant Apr 7, 2026
0398831
feat: add DecisionCard — striking decision display with confidence an…
khaliqgant Apr 7, 2026
0b5a1aa
feat: add RetrospectiveView — epilogue with challenges, learnings, an…
khaliqgant Apr 7, 2026
2922a72
feat: add decision card, retrospective view, confidence meter
khaliqgant Apr 7, 2026
bc1ae68
feat: add ChapterView — collapsible chapter with timeline and event t…
khaliqgant Apr 7, 2026
1b5a9af
feat: add FileChangesView — collapsible file paths and commit list
khaliqgant Apr 7, 2026
38477cd
feat: add TrajectoryDetailView — main detail container with all sections
khaliqgant Apr 7, 2026
586ce07
feat: add chapter view and detail container
khaliqgant Apr 7, 2026
27af8b2
feat: add all 6 chat components (fan-out)
khaliqgant Apr 7, 2026
458ae4c
feat: add all 6 chat components (fan-out pattern)
khaliqgant Apr 7, 2026
8bc7948
feat: add PersonaSelector — horizontal persona picker with Ask All bu…
khaliqgant Apr 7, 2026
80bde6d
feat: add ChatEmptyStates — three empty state views for chat panel
khaliqgant Apr 7, 2026
292a0eb
feat: add ChatPanelView — full chat panel with messages, personas, an…
khaliqgant Apr 7, 2026
388f2bc
feat: add persona selector, empty states, chat panel
khaliqgant Apr 7, 2026
ece2785
feat: add WelcomeView — first-launch screen with book icon and open r…
khaliqgant Apr 7, 2026
683b22b
feat: add PathSettingsView — trajectory path picker with recent paths…
khaliqgant Apr 7, 2026
2bbba2e
feat: add SettingsView — settings sheet with AI Assistant, Path, and …
khaliqgant Apr 7, 2026
ea5397b
feat: add CommandPalette — Cmd+K overlay with grouped search results …
khaliqgant Apr 7, 2026
dfc828c
feat: add CLISettingsView — AI assistant CLI picker with detection st…
khaliqgant Apr 7, 2026
ffb5c63
feat: add command palette, welcome, settings views
khaliqgant Apr 7, 2026
08fbfba
feat: wire all views — hub-spoke integration with lead review
khaliqgant Apr 7, 2026
45808ef
feat: wire all views — hub-spoke integration with lead review
khaliqgant Apr 7, 2026
92d5bda
feat: add SearchHighlight — ViewModifier and HighlightedText for yell…
khaliqgant Apr 7, 2026
b353e58
feat: add ExportSheet — export trajectory as Markdown, JSON, or Timel…
khaliqgant Apr 7, 2026
81fdac6
feat: add FileDetailModal — fullscreen file viewer with list pane and…
khaliqgant Apr 7, 2026
321dfa8
feat: add export sheet, file detail modal, search highlighting
khaliqgant Apr 7, 2026
a902ce8
chore: add server scaffold — package.json and tsconfig.json
khaliqgant Apr 7, 2026
2f00471
feat: add health endpoint handler with env config for trail-viewer-se…
khaliqgant Apr 7, 2026
8de11be
feat: add Hono server entry — CORS, health, placeholder routes
khaliqgant Apr 7, 2026
7ec9dc9
chore: scaffold TypeScript server
khaliqgant Apr 7, 2026
1aad0c6
feat: add export routes — markdown, timeline, and JSON trajectory exp…
khaliqgant Apr 7, 2026
0e5e0fe
feat: add trajectory formatter — rich markdown and brief formats for …
khaliqgant Apr 7, 2026
10c0304
feat: add trajectory API routes — list, get, stats endpoints
khaliqgant Apr 7, 2026
041dda5
feat: add TrajectoryService — server-side read-only trajectory data a…
khaliqgant Apr 7, 2026
afaaa70
feat: add trajectory service, formatter, REST routes
khaliqgant Apr 7, 2026
68b988d
feat: add CLI resolver — spawn config resolution for multiple CLI tools
khaliqgant Apr 7, 2026
d7902a3
final verification
khaliqgant Apr 7, 2026
145c686
remove build files and qa fixes
khaliqgant Apr 7, 2026
77877ce
feat: app bundle launch, AgentRelaySDK chat, remove 50 limit, CLI com…
khaliqgant Apr 8, 2026
60b6beb
fix: chat feature end-to-end — server routes, Swift models, relay SDK…
khaliqgant Apr 8, 2026
fd84920
fix: rewrite RelayConnection to plain WebSocket for local server chat
khaliqgant Apr 8, 2026
214489d
fix: port chat from MSD — broker-managed fanout, BrokerRelayConnectio…
khaliqgant Apr 8, 2026
b5c4bcc
trail viewer tightening
khaliqgant Apr 12, 2026
dc0a945
Merge branch 'main' into trail-viewer
khaliqgant Apr 13, 2026
aaafd0e
lock update
khaliqgant Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .agent-relay/step-outputs/0888537217494b414d742f92/commit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[trail-viewer ceb2220] feat: add BookCard.swift — paper-like card with selection and hover states
1 file changed, 59 insertions(+)
create mode 100644 trail-viewer/Sources/Design/BookCard.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Created [trail-viewer/Sources/Design/BookCard.swift](/Users/khaliqgant/Projects/AgentWorkforce/trajectories/trail-viewer/Sources/Design/BookCard.swift) with the specified SwiftUI `BookCard` implementation.

Summary: 1 file created, no other files changed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"cli": "codex",
"sessionId": "019d68cd-9810-7250-9ca2-4e1dc7d9748b",
"model": null,
"provider": "openai",
"durationMs": 25000,
"cost": null,
"tokens": {
"input": 27504,
"output": 0,
"cacheRead": 0
},
"turns": 0,
"toolCalls": [],
"errors": [],
"finalStatus": "unknown",
"summary": null,
"raw": {
"matchedVia": "threads",
"thread": {
"id": "019d68cd-9810-7250-9ca2-4e1dc7d9748b",
"rollout_path": "/Users/khaliqgant/.codex/sessions/2026/04/07/rollout-2026-04-07T18-36-37-019d68cd-9810-7250-9ca2-4e1dc7d9748b.jsonl",
"created_at": 1775579797,
"updated_at": 1775579822,
"source": "exec",
"model_provider": "openai",
"cwd": "/Users/khaliqgant/Projects/AgentWorkforce/trajectories",
"title": "You are a non-interactive worker agent. Produce clean, structured output to stdout.\nDo NOT use mcp__relaycast__agent_add, add_agent, or any MCP tool to spawn sub-agents.\nDo NOT use mcp__relaycast__message_dm_send or any Relaycast messaging tools — you have no relay connection.\n\nCreate trail-viewer/Sources/Design/EmptyState.swift from this spec:\n\n# EmptyState.swift — Full File Contents\n\nWrite to: `trail-viewer/Sources/Components/EmptyState.swift`\n\n```swift\nimport SwiftUI\n\nstruct EmptyState: View {\n let icon: String\n let title: String\n let subtitle: String\n\n var body: some View {\n VStack(spacing: Theme.spacingLG) {\n Image(systemName: icon)\n .font(.system(size: 48))\n .foregroundColor(Theme.blue.opacity(0.4))\n\n Text(title)\n .sectionTitle()\n\n Text(subtitle)\n .bodyStyle()\n .multilineTextAlignment(.center)\n .frame(maxWidth: 320)\n }\n .frame(maxWidth: .infinity, maxHeight: .infinity)\n .padding(Theme.spacingXL)\n }\n}\n\n#Preview(\"No Trajectories\") {\n EmptyState(\n icon: \"doc.text.magnifyingglass\",\n title: \"No Trajectories\",\n subtitle: \"Open a trajectory file or folder to begin exploring agent steps and tool calls.\"\n )\n}\n\n#Preview(\"No Results\") {\n EmptyState(\n icon: \"magnifyingglass\",\n title: \"No Results\",\n subtitle: \"Try adjusting your search or filters to find what you're looking for.\"\n )\n}\n```\n\n## Design Notes\n\n- **Icon**: SF Symbol rendered at 48pt, using `Theme.blue` at 0.4 opacity for a soft, muted appearance\n- **Title**: Uses `.sectionTitle()` modifier (18pt semibold serif, `Theme.textPrimary`)\n- **Subtitle**: Uses `.bodyStyle()` modifier (13.5pt, `Theme.textSecondary`), center-aligned, capped at 320pt width for comfortable reading\n- **Layout**: VStack with `Theme.spacingLG` (24pt) between elements, fills all available space, padded with `Theme.spacingXL` (36pt)\n- **\"Beautiful Notebook\" feel**: Warm palette from Theme, serif typography, generous whitespace, understated icon opacity\n\n\nExtract the EmptyState.swift code and write it to trail-viewer/Sources/Design/EmptyState.swift.\nCreate the trail-viewer/Sources/Design directory if it does not exist.\nIMPORTANT: Write the file to disk. Do NOT output to stdout. Only create this one file.\n\n---\nIMPORTANT: You are running as a non-interactive subprocess. Do NOT call mcp__relaycast__agent_add, add_agent, or any MCP tool to spawn or manage other agents.\n\nCRITICAL REQUIREMENT — YOU MUST FOLLOW THIS EXACTLY:\nYou are running in non-interactive mode. There is NO opportunity for follow-up, clarification, or additional input. Your stdout output is your ONLY deliverable.\n\nYou MUST:\n1. Complete the ENTIRE task in a single pass — no partial work, no \"I'll continue later\"\n2. Print your COMPLETE deliverable to stdout — this is the ONLY output that will be captured\n3. Be thorough and self-contained — another agent will consume your output with zero context about your process\n4. End with a clear summary of what was accomplished and any artifacts produced\n\nDO NOT:\n- Ask questions or request clarification (there is no one to answer)\n- Output partial results expecting a follow-up (there will be none)\n- Skip steps or leave work incomplete\n- Output only status messages without the actual deliverable content",
"sandbox_policy": "{\"type\":\"danger-full-access\"}",
"approval_mode": "never",
"tokens_used": 27504,
"has_user_event": 0,
"archived": 0,
"archived_at": null,
"git_sha": "3b18442c112161774853d7f7a778e67f44aa2307",
"git_branch": "trail-viewer",
"git_origin_url": "git@github.com:AgentWorkforce/trajectories.git",
"cli_version": "0.117.0",
"first_user_message": "You are a non-interactive worker agent. Produce clean, structured output to stdout.\nDo NOT use mcp__relaycast__agent_add, add_agent, or any MCP tool to spawn sub-agents.\nDo NOT use mcp__relaycast__message_dm_send or any Relaycast messaging tools — you have no relay connection.\n\nCreate trail-viewer/Sources/Design/EmptyState.swift from this spec:\n\n# EmptyState.swift — Full File Contents\n\nWrite to: `trail-viewer/Sources/Components/EmptyState.swift`\n\n```swift\nimport SwiftUI\n\nstruct EmptyState: View {\n let icon: String\n let title: String\n let subtitle: String\n\n var body: some View {\n VStack(spacing: Theme.spacingLG) {\n Image(systemName: icon)\n .font(.system(size: 48))\n .foregroundColor(Theme.blue.opacity(0.4))\n\n Text(title)\n .sectionTitle()\n\n Text(subtitle)\n .bodyStyle()\n .multilineTextAlignment(.center)\n .frame(maxWidth: 320)\n }\n .frame(maxWidth: .infinity, maxHeight: .infinity)\n .padding(Theme.spacingXL)\n }\n}\n\n#Preview(\"No Trajectories\") {\n EmptyState(\n icon: \"doc.text.magnifyingglass\",\n title: \"No Trajectories\",\n subtitle: \"Open a trajectory file or folder to begin exploring agent steps and tool calls.\"\n )\n}\n\n#Preview(\"No Results\") {\n EmptyState(\n icon: \"magnifyingglass\",\n title: \"No Results\",\n subtitle: \"Try adjusting your search or filters to find what you're looking for.\"\n )\n}\n```\n\n## Design Notes\n\n- **Icon**: SF Symbol rendered at 48pt, using `Theme.blue` at 0.4 opacity for a soft, muted appearance\n- **Title**: Uses `.sectionTitle()` modifier (18pt semibold serif, `Theme.textPrimary`)\n- **Subtitle**: Uses `.bodyStyle()` modifier (13.5pt, `Theme.textSecondary`), center-aligned, capped at 320pt width for comfortable reading\n- **Layout**: VStack with `Theme.spacingLG` (24pt) between elements, fills all available space, padded with `Theme.spacingXL` (36pt)\n- **\"Beautiful Notebook\" feel**: Warm palette from Theme, serif typography, generous whitespace, understated icon opacity\n\n\nExtract the EmptyState.swift code and write it to trail-viewer/Sources/Design/EmptyState.swift.\nCreate the trail-viewer/Sources/Design directory if it does not exist.\nIMPORTANT: Write the file to disk. Do NOT output to stdout. Only create this one file.\n\n---\nIMPORTANT: You are running as a non-interactive subprocess. Do NOT call mcp__relaycast__agent_add, add_agent, or any MCP tool to spawn or manage other agents.\n\nCRITICAL REQUIREMENT — YOU MUST FOLLOW THIS EXACTLY:\nYou are running in non-interactive mode. There is NO opportunity for follow-up, clarification, or additional input. Your stdout output is your ONLY deliverable.\n\nYou MUST:\n1. Complete the ENTIRE task in a single pass — no partial work, no \"I'll continue later\"\n2. Print your COMPLETE deliverable to stdout — this is the ONLY output that will be captured\n3. Be thorough and self-contained — another agent will consume your output with zero context about your process\n4. End with a clear summary of what was accomplished and any artifacts produced\n\nDO NOT:\n- Ask questions or request clarification (there is no one to answer)\n- Output partial results expecting a follow-up (there will be none)\n- Skip steps or leave work incomplete\n- Output only status messages without the actual deliverable content",
"agent_nickname": null,
"agent_role": null,
"memory_mode": "enabled",
"model": "gpt-5.4",
"reasoning_effort": "high",
"agent_path": null
}
}
}
Loading
Loading