- Backend: Add itertools imports and case-insensitive email sorting to collections, dashboards, and metrics handlers
- Frontend: Add email sorting to React Query mutation onMutate callbacks for share/unshare operations
- Ensures consistent alphabetical ordering by email across API responses and UI state
- Addresses BUS-1477 requirements for predictable individual_permissions ordering
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add .order_by(users::email) to individual_permissions_query in dashboard handler
- Add .order_by(users::email) to individual_permissions_query in metrics handler
- Add .order_by(users::email) to individual_permissions_query in collections handler
- Ensures consistent alphabetical ordering by email across all endpoints
Fixes BUS-1477
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add Rust implementation in idle.rs by copying from done.rs
- Add TypeScript implementation in idle-tool.ts by copying from done-tool.ts
- Update all agent modes (review, analysis, follow_up_initialization, planning) to include idle tool
- Update analyst-agent.ts to include idleTool
- Add idle tool to terminating_tools lists
- Export idle module and tool from respective index files
Addresses BUS-1468: idle tool indicates agent finished current work but available for future tasks
Co-Authored-By: Dallin Bentley <dallinbentley98@gmail.com>
Reverted explicit icon exports back to export * pattern to ensure
all icon imports continue working while maintaining bundle optimization
benefits from other changes.
Co-Authored-By: nate@buster.so <nate@buster.so>
- Updated `createChatHandler` to include a `concurrencyKey` when triggering the `analyst-agent-task`, ensuring tasks are processed sequentially per chat.
- Adjusted related test cases to verify the inclusion of the `concurrencyKey`.
- Integrated the `concurrencyKey` in the `slackAgentTask` to manage task queuing and notify users when tasks are queued.
- Introduced a new function `checkForDuplicateMessages` in the database queries to verify if a message already exists in the same chat.
- Integrated the duplicate check in the `slackAgentTask` to prevent processing of duplicate messages, enhancing task efficiency and logging warnings for duplicates detected.
- Update Rust handlers to use user_email instead of 'Unknown' fallback
- Add user_email field to MessageWithUser and ChatWithUser structs
- Update database queries to select user email field
- Update TypeScript chat-helpers to use email fallback
- Maintain final fallback to 'Unknown'/'Unknown User' if email is null
Fixes BUS-1457
Co-Authored-By: Dallin Bentley <dallinbentley98@gmail.com>
- Replace AppMarkdown with AppMarkdownStreaming in ChatResponseMessage_Text and ReasoningMessage_Text
- Map props correctly: markdown → content, showLoader → isStreamFinished
- Add wrapper divs to handle className prop
- Adjust spring physics in ReasoningMessageSelector to prevent height overshoot:
- Reduce stiffness from 400→300 and increase damping from 32→40 for animate
- Reduce stiffness from 450→350 and increase damping from 35→45 for exit
- Improves streaming text animation smoothness and prevents height expansion beyond content
Co-Authored-By: nate@buster.so <nate@buster.so>
- Update middleware to capture original URL and add as 'next' query param
- Modify layout redirect to include redirect parameter
- Update LoginForm to extract and pass redirect to all auth methods
- Add redirect parameter support to all sign-in functions
- Implement URL validation with fallback to home page
- Update OAuth callback to handle redirects consistently
- Support all authentication methods: email/password, Google, GitHub, Azure
Co-Authored-By: nate@buster.so <nate@buster.so>
- Create new hook to detect message insertions from external sources like Slack
- Configure useShapeStream with 'insert' operations only
- Update chat message_ids array when new messages are detected
- Integrate hook into useChatStreaming alongside existing tracking hooks
- Handle message ordering and deduplication with uniq
- Fix TypeScript errors by ensuring id property is included in onUpdateChat calls
Co-Authored-By: nate@buster.so <nate@buster.so>
- Move useThemeOperations hook from colors feature to new src/context-hooks folder
- Add README.md explaining context-hooks folder purpose for API/context related hooks
- Remove isAdmin context check from ThemeList component, now only uses hideThreeDotMenu prop
- Update all import statements to reference new hook location
- Maintain theme categorization logic in ColorsApp.tsx for proper three-dot menu hiding
Co-Authored-By: nate@buster.so <nate@buster.so>
Updated test expectations in apps/server/src/api/v2/slack/handler.test.ts
to expect absolute URLs with http://localhost:3000 prefix instead of
relative URLs, matching the actual behavior when BUSTER_URL is set.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix Slack OAuth service test to use correct scopes for validation
- Update handler tests to use proper field names (authUrl vs auth_url)
- Fix workspace settings test to use correct organization role
- Update chat handler test with missing import and role fix
- Fix retry helpers test to use valid WorkflowContext currentStep values
All unit tests now pass successfully.
Co-Authored-By: Dallin Bentley <dallinbentley98@gmail.com>
- Move currency endpoint from /api/v2/currency to /api/v2/dictionaries/currency
- Follow existing dictionaries pattern with separate config.ts and index.ts
- Update web API calls to use new endpoint location
- Remove old currency route registration and files
- Preserve all existing functionality and types
The new endpoint is accessible at /api/v2/dictionaries/currency and maintains
the same response format and authentication requirements.
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add proper type annotations for theme parameters in useThemeOperations and ColorsApp
- Make onSelectTheme async for consistency
- Remove unused imports (useGetUser, useUpdateOrganization)
- Add userConfig to useMemo dependency array
Co-Authored-By: nate@buster.so <nate@buster.so>
- Move hook from generic src/hooks to src/components/features/colors for better organization
- Update import paths in ColorsApp and DefaultThemeSelector
- Remove export from generic hooks index file
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add hideThreeDotMenu optional boolean prop to IColorTheme interface
- Update ThemeList component to check admin status and hideThreeDotMenu prop before showing three dot menu
- Set hideThreeDotMenu: false for userConfig organization themes and true for dictionary themes in ColorsApp
- Create reusable useThemeOperations hook for theme operations (onCreateCustomTheme, onDeleteCustomTheme, onModifyCustomTheme, onSelectTheme)
- Update DefaultThemeSelector to use the new hook
- Wrap EditCustomThemeMenu with AddThemeProviderWrapper in ColorsApp
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add missing 'channels:join' and 'channels:manage' to required OAuth scopes
- Update scope validation to handle comma-separated scope format
- Include defaultChannel in 're_install_required' status response
- Ensures complete integration data is returned in all status cases
Fixes scope validation for existing integrations and missing default channel data in API responses.
Co-Authored-By: Dallin Bentley <dallinbentley98@gmail.com>
- Introduced `count_workspace_members` utility function to retrieve the number of active users in a workspace.
- Updated chat, collection, dashboard, and metric handlers to include `workspace_member_count` in their responses.
- Modified relevant types to accommodate the new `workspace_member_count` field.
- Adjusted frontend components to display the number of workspace members in the ShareMenu and related UI elements.
These changes improve the visibility of workspace member information and enhance the overall user experience.
- Adjusted the ShareMenu component styles for improved layout consistency.
- Added `workspace_sharing` property with a default value of 'none' in metric-related mocks and tests.
- Updated the mock dashboard to include the new `workspace_sharing` field.
These changes improve the UI and ensure that the workspace sharing feature is properly represented in the mock data.