Commit Graph

362 Commits

Author SHA1 Message Date
Mohamed Boudra
899dafff35 Fix codex mcp default model 2025-12-24 18:58:49 +07:00
Mohamed Boudra
75c2a96068 Fix Codex MCP permission elicitation parity 2025-12-24 18:53:59 +07:00
Mohamed Boudra
5b971dba69 Fix permission gating fallback for Codex MCP 2025-12-24 18:49:29 +07:00
Mohamed Boudra
bcd117270e Handle Codex MCP model rejection fallback 2025-12-24 18:40:44 +07:00
Mohamed Boudra
16ccce4291 test: cover permission interrupt + read-only gating 2025-12-24 18:31:05 +07:00
Mohamed Boudra
f65a134ac0 test: add codex-mcp thread/item coverage 2025-12-24 18:25:12 +07:00
Mohamed Boudra
19aaee9c26 Add Codex MCP agent provider 2025-12-24 18:13:14 +07:00
Mohamed Boudra
d04fbb981c Add Codex MCP E2E test coverage 2025-12-24 17:57:49 +07:00
Mohamed Boudra
851c687b4f Add MCP persistence resume e2e test 2025-12-24 17:31:47 +07:00
Mohamed Boudra
4d75bd45e8 Add MCP event mapping parity e2e tests 2025-12-24 17:28:11 +07:00
Mohamed Boudra
797425c4e2 Merge origin/main 2025-12-24 17:21:26 +07:00
Mohamed Boudra
f5961fa044 refactor(server): extract test daemon setup into shared utility and switch mcp e2e test to codex provider 2025-12-24 17:18:31 +07:00
Mohamed Boudra
9318048f51 ensure mcp waits surface permissions 2025-12-24 09:05:24 +00:00
Mohamed Boudra
a24f578916 make mcp e2e test claude permissions 2025-12-24 08:55:16 +00:00
Mohamed Boudra
e37d50e938 make mcp agent e2e test provider-aware 2025-12-24 08:45:02 +00:00
Mohamed Boudra
e1f79c1d6f add mcp agent e2e smoke test 2025-12-24 08:38:25 +00:00
Mohamed Boudra
d787c5f1bc refactor daemon bootstrap and add smoke test 2025-12-24 08:25:17 +00:00
Mohamed Boudra
37da13a38b Fix markdown list text wrapping on Android
- Add custom list rendering rules in message.tsx for proper flex layout
- Remove flexWrap from list content styles (causes Android clipping)
- Use flex: 1 and flexShrink: 1 for natural text wrapping
- Add minWidth: 0 to content containers for proper shrinking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 04:41:37 +00:00
Mohamed Boudra
09f130408b Fix agent menu spacing 2025-12-23 23:24:13 +07:00
Mohamed Boudra
8a06b378d8 Add running dot to sub-agent list 2025-12-23 23:19:26 +07:00
Mohamed Boudra
eb48ae0f6b Make Running and Finished status mutually exclusive
Running takes priority over Finished indicator.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 23:14:54 +07:00
Mohamed Boudra
0526124fbd Fix type errors in server code
- Filter undefined values from env record for Codex SDK
- Add string type check for ParsedQs array element

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 23:11:48 +07:00
Mohamed Boudra
993eed0628 Allow agent creation outside git repos 2025-12-23 23:11:48 +07:00
Mohamed Boudra
38c1f52035 Use agent directories for working dir suggestions 2025-12-23 23:11:48 +07:00
Mohamed Boudra
c4b9a68c6b Replace needs attention with finished status 2025-12-23 23:11:48 +07:00
Mohamed Boudra
f2e6a55fec Sort and scroll sub-agent list 2025-12-23 23:11:48 +07:00
Mohamed Boudra
4a4a2507dd fix(app): prevent markdown list content overflow with proper flex shrinking 2025-12-23 16:09:16 +00:00
Mohamed Boudra
6a9b57ae0c Simplify agent list UI and add bearer token auth for Codex MCP
- Replace SectionList with FlatList in agent list, sorting attention items to top
- Persist server selection preference in create agent modal
- Add bearer token authentication support for agent-control MCP endpoint
- Pass bearer token through Codex wrapper script for MCP auth

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 22:11:51 +07:00
Mohamed Boudra
bf0ec80fb5 Move agent-control MCP config into AgentManager 2025-12-23 15:45:48 +07:00
Mohamed Boudra
dc90f57567 Inject agent-control MCP URL for codex session configs 2025-12-23 15:19:49 +07:00
Mohamed Boudra
077ecae607 Wire agent-control MCP URL into codex agents 2025-12-23 15:08:34 +07:00
Mohamed Boudra
e2ba6c8634 Add developer_instructions to Codex wrapper 2025-12-23 15:02:40 +07:00
Mohamed Boudra
4699297e4e Inject agent-control MCP via codex wrapper 2025-12-23 14:42:26 +07:00
Mohamed Boudra
957decc1f7 Trim dictation toasts to failures 2025-12-23 14:02:55 +07:00
Mohamed Boudra
702159fb75 Route agent MCP parent via query param 2025-12-23 13:49:18 +07:00
Mohamed Boudra
38a4c70aec Improve markdown styling and enable text selection on mobile
- Fix agent chat bottom scroll padding by adding overflow hidden to inputAreaContainer
- Create shared markdown-styles.ts with comprehensive styling for tables, headings, code blocks, blockquotes, and horizontal rules
- Enable text selection in AssistantMessage and AgentThoughtMessage by overriding markdown render rules with selectable={true}
- Path chips remain non-selectable to preserve onPress navigation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 12:32:52 +07:00
Mohamed Boudra
825154f35a Tweak bottom sheet sheet styling 2025-12-22 04:21:58 +00:00
Mohamed Boudra
070314fa5f Fix bottom sheet dark theme background 2025-12-22 04:05:19 +00:00
Mohamed Boudra
56a287a85d fix: tool call bottom sheet text visibility
Replace react-native-gesture-handler ScrollView with React Native's
built-in ScrollView to fix text rendering issues inside @gorhom/bottom-sheet.
The gesture handler's ScrollView was causing text to render nearly invisible.

Also add explicit background colors to scroll containers for consistent
appearance.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 03:37:17 +00:00
Mohamed Boudra
7d233777db fix: back button returns to parent agent instead of homepage
When viewing a child agent (an agent with parentAgentId set), the back
button now navigates to the parent agent screen instead of always going
to the homepage. Added handleBack callback in AgentScreenContent that
checks for parentAgentId and routes accordingly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 01:10:22 +00:00
Mohamed Boudra
253af9988c fix: wrap orchestrator messages view with ToolCallSheetProvider
The ToolCall component requires the ToolCallSheetProvider context to
function properly. The orchestrator messages view was rendering ToolCall
components without this provider, which would cause a crash when tapping
tool call badges.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:36:11 +00:00
Mohamed Boudra
a8053bc0b5 feat: integrate ToolCallSheetProvider in AgentStreamView
Wrapped AgentStreamView content with ToolCallSheetProvider to enable
tool call details to open in a bottom sheet on tap instead of expanding
inline. This improves mobile UX for viewing tool call information.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:24:07 +00:00
Mohamed Boudra
09b7360a7e feat: update ToolCall to open bottom sheet on tap
- Import useToolCallSheet hook from new tool-call-sheet component
- Replace inline expansion with openToolCall() to show details in bottom sheet
- Remove ~300 lines of unused code (toolCallStylesheet, formatFullValue,
  buildLineDiffFromStrings, isStructuredToolResult, and inline rendering)
- Clean up unused imports (ScrollView, DiffViewer, DiffLine)
- Badge display unchanged - still shows icon, label, loading/error state

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:22:29 +00:00
Mohamed Boudra
676125a732 feat: add ToolCallSheet component with bottom sheet and context
Create a new component for displaying tool call details in a bottom sheet
on mobile devices. Includes:
- ToolCallSheetProvider and useToolCallSheet hook for state management
- BottomSheetModal with snap points at 50% and 90%
- Header with tool icon, name, and status badge
- Content sections for args, commands, file diffs, file reads, and errors
- Reuses rendering logic from existing ToolCall component

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:18:10 +00:00
Mohamed Boudra
c7294753ec fix: resolve childAgents selector infinite loop in AgentScreenContent
The useShallow wrapper was not preventing infinite loops because the
selector created new object references on every store update. Fixed by:
1. Selecting the agents Map directly (stable reference)
2. Deriving childAgents array in useMemo with proper dependencies

The Map only changes when agents are added/removed, preventing
unnecessary re-renders that were causing the infinite loop.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:05:46 +00:00
Mohamed Boudra
2e8444eaac fix: add parentAgentId to stored agent record schema
- Added `parentAgentId` field to `STORED_AGENT_SCHEMA` in agent-registry.ts
- Updated `toStoredAgentRecord()` in agent-projections.ts to include parentAgentId
- This ensures parentAgentId is persisted to agents.json for parent/child hierarchy

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:47:31 +00:00
Mohamed Boudra
b2850aea23 feat: auto-inject parentAgentId in MCP create_agent tool
When an agent calls the MCP create_agent tool to spawn a child agent,
the parent-child relationship is now automatically established:

- Added setManagedAgentId() to AgentSession interface (optional method)
- ClaudeAgentSession stores its managed agent ID and includes it as
  X-Caller-Agent-Id header when connecting to the agent-control MCP
- AgentManager.registerSession() calls setManagedAgentId() after
  registration so the session knows its ID before first prompt
- MCP server extracts X-Caller-Agent-Id header from init request and
  stores it as callerAgentId
- create_agent handler auto-injects callerAgentId as parentAgentId
  if not explicitly provided

This enables parent agents to spawn child agents that are correctly
associated, so they appear in the parent's Sub-Agents menu instead
of on the homepage.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:36:58 +00:00
Mohamed Boudra
99338d3b34 fix: use useShallow for childAgents selector to prevent infinite loop
The childAgents selector in the agent screen was creating a new array
on every render, causing an infinite loop when combined with zustand's
store subscription. Added useShallow wrapper to perform shallow
comparison and prevent unnecessary re-renders.

Also updated plan.md with test results:
- PARTIAL PASS: Fixed infinite loop, agent screen loads correctly
- Sub-Agents menu section displays properly
- Parent/child MCP creation works but parentAgentId not auto-injected
- Added fix task for auto-injecting parentAgentId in MCP server

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:30:34 +00:00
Mohamed Boudra
cdc17006da feat: add sub-agents section to agent info menu
Added a "Sub-Agents" section to the agent info menu dropdown that:
- Queries session store for agents where parentAgentId matches current agent
- Displays child agents as clickable menu items with chevron icons
- Shows "No sub-agents" when the agent has no children
- Navigates to child agent screen when tapped

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:25:02 +00:00
Mohamed Boudra
11afd22858 feat: filter homepage to show only root agents
Skip agents with parentAgentId when building the aggregated agents list
for the homepage. This ensures only top-level (root) agents are displayed,
while child agents are only accessible through their parent agent's menu.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:22:42 +00:00