Skip to content

feat(app): show goals on tasks and unify bottom nav#4475

Merged
kodjima33 merged 2 commits intomainfrom
fix/ios-task-swipe-indent-gesture
Jan 31, 2026
Merged

feat(app): show goals on tasks and unify bottom nav#4475
kodjima33 merged 2 commits intomainfrom
fix/ios-task-swipe-indent-gesture

Conversation

@kodjima33
Copy link
Copy Markdown
Collaborator

@kodjima33 kodjima33 commented Jan 30, 2026

Summary

  • show goals row on tasks page (including empty state) and allow task→goal linking with local cache fallback
  • add shared BottomNavBar widget and reuse it on home + chat
  • tighten chat input spacing and hide center mic button on chat nav

Test plan

  • ./test.sh (app)
  • Manual: verify chat input spacing and bottom nav appearance

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a swipe-right-to-indent feature for top-level tasks on mobile. The implementation correctly uses a Dismissible widget with a confirmDismiss callback to handle the new gesture without dismissing the item. My review found one area for improvement: there is a redundant conditional check in the onDismissed callback. Since onDismissed is only triggered for directions where confirmDismiss returns true, the check is unnecessary and can be removed to make the code cleaner and more robust.

Comment on lines +706 to +708
if (direction == DismissDirection.endToStart) {
_deleteTask(item);
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The if (direction == DismissDirection.endToStart) check is redundant. The onDismissed callback is only triggered when confirmDismiss returns true. In your implementation, this only happens for the endToStart direction because confirmDismiss returns false for startToEnd. Therefore, onDismissed will not be called for the startToEnd direction. You can safely remove the conditional check to make the code cleaner and more robust against future changes to confirmDismiss.

          _deleteTask(item);

@kodjima33 kodjima33 changed the title fix(app): enable swipe-right indent on mobile feat(app): show goals on tasks and unify bottom nav Jan 31, 2026
@kodjima33 kodjima33 merged commit 4ceb844 into main Jan 31, 2026
1 check passed
@kodjima33 kodjima33 deleted the fix/ios-task-swipe-indent-gesture branch January 31, 2026 02:54
kodjima33 added a commit that referenced this pull request Feb 21, 2026
## Summary
- Add 2-hour TTL caching for chat tools manifest fetching to reduce
external API calls
- Add `POST /v1/apps/{app_id}/refresh-manifest` endpoint for manual
cache bypass
- Add refresh button in the manage app screen (only visible for apps
with manifest URL)

Replaces #4476 (rebased and conflict-resolved against current main; the
UI changes from that PR were already merged via #4475).

## Changes

### Backend
- `backend/utils/apps.py`: Added `force_refresh` param and Redis caching
with 2h TTL to `fetch_app_chat_tools_from_manifest()`
- `backend/routers/apps.py`: New `refresh-manifest` endpoint with
ownership validation, manifest fetching, and cache invalidation

### Flutter
- `app/lib/backend/http/api/apps.dart`: Added
`refreshAppManifestServer()` API call
- `app/lib/pages/apps/providers/add_app_provider.dart`: Added
`refreshManifest()` method with loading state
- `app/lib/pages/apps/update_app.dart`: Added refresh icon button in
AppBar (conditional on external integration + manifest URL)

## Test plan
- [ ] Verify manifest caching works (second fetch should hit cache)
- [ ] Verify force refresh bypasses cache
- [ ] Verify refresh button appears only for apps with external
integration + manifest URL
- [ ] Verify loading indicator shows during refresh
- [ ] Verify success/error feedback

🤖 Generated with [Claude Code](https://claude.com/claude-code)
ellaaicare pushed a commit to ellaaicare/omi that referenced this pull request Apr 12, 2026
## Summary
- Add 2-hour TTL caching for chat tools manifest fetching to reduce
external API calls
- Add `POST /v1/apps/{app_id}/refresh-manifest` endpoint for manual
cache bypass
- Add refresh button in the manage app screen (only visible for apps
with manifest URL)

Replaces BasedHardware#4476 (rebased and conflict-resolved against current main; the
UI changes from that PR were already merged via BasedHardware#4475).

## Changes

### Backend
- `backend/utils/apps.py`: Added `force_refresh` param and Redis caching
with 2h TTL to `fetch_app_chat_tools_from_manifest()`
- `backend/routers/apps.py`: New `refresh-manifest` endpoint with
ownership validation, manifest fetching, and cache invalidation

### Flutter
- `app/lib/backend/http/api/apps.dart`: Added
`refreshAppManifestServer()` API call
- `app/lib/pages/apps/providers/add_app_provider.dart`: Added
`refreshManifest()` method with loading state
- `app/lib/pages/apps/update_app.dart`: Added refresh icon button in
AppBar (conditional on external integration + manifest URL)

## Test plan
- [ ] Verify manifest caching works (second fetch should hit cache)
- [ ] Verify force refresh bypasses cache
- [ ] Verify refresh button appears only for apps with external
integration + manifest URL
- [ ] Verify loading indicator shows during refresh
- [ ] Verify success/error feedback

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Glucksberg pushed a commit to Glucksberg/omi-local that referenced this pull request Apr 28, 2026
* fix(app): add swipe-right indent for tasks

* feat(app): unify task goals and chat nav
Glucksberg pushed a commit to Glucksberg/omi-local that referenced this pull request Apr 28, 2026
## Summary
- Add 2-hour TTL caching for chat tools manifest fetching to reduce
external API calls
- Add `POST /v1/apps/{app_id}/refresh-manifest` endpoint for manual
cache bypass
- Add refresh button in the manage app screen (only visible for apps
with manifest URL)

Replaces BasedHardware#4476 (rebased and conflict-resolved against current main; the
UI changes from that PR were already merged via BasedHardware#4475).

## Changes

### Backend
- `backend/utils/apps.py`: Added `force_refresh` param and Redis caching
with 2h TTL to `fetch_app_chat_tools_from_manifest()`
- `backend/routers/apps.py`: New `refresh-manifest` endpoint with
ownership validation, manifest fetching, and cache invalidation

### Flutter
- `app/lib/backend/http/api/apps.dart`: Added
`refreshAppManifestServer()` API call
- `app/lib/pages/apps/providers/add_app_provider.dart`: Added
`refreshManifest()` method with loading state
- `app/lib/pages/apps/update_app.dart`: Added refresh icon button in
AppBar (conditional on external integration + manifest URL)

## Test plan
- [ ] Verify manifest caching works (second fetch should hit cache)
- [ ] Verify force refresh bypasses cache
- [ ] Verify refresh button appears only for apps with external
integration + manifest URL
- [ ] Verify loading indicator shows during refresh
- [ ] Verify success/error feedback

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant