- Add import for AppMarkdownStreaming component
- Replace Paragraph element with AppMarkdownStreaming in AssumptionSummary component
- Use isStreamFinished=true and text-text-secondary className
- Fixes BUS-1522: post_processing_message isn't using the markdown component
Co-Authored-By: blake@buster.so <cblakerouse@gmail.com>
- Add curly braces around default case content to satisfy noSwitchDeclarations rule
- Prevents variable declarations from being accessible to other switch cases
- Apply Biome formatting fixes for import statement and spacing
Co-Authored-By: nate@buster.so <nate@buster.so>
- Import database queries from main @buster/database package
- Use getUserOrganizationId() instead of user.organizationId
- Add proper error handling for users without organizations
- Follow existing patterns from other API handlers
Co-Authored-By: nate@buster.so <nate@buster.so>
- Added support for Google Vertex AI model version 2.2.27 in pnpm-lock.yaml and package.json.
- Introduced new model wrappers for Sonnet4 and Haiku35 with fallback logic.
- Updated various agents to utilize the new Sonnet4 model instead of the previous anthropicCachedModel.
- Enhanced error handling and retry logic in the fallback model implementation.
- Increased processing row limit in Snowflake query to 5000 for better performance.
- Added tests for new AI fallback models and their streaming capabilities.
- Add server-shared types for GetTitleRequest and GetTitleResponse with Zod validation
- Create database query functions for each asset type (chat, metric, collection, dashboard)
- Implement GET endpoint with zValidator middleware and exhaustive switch statement
- Add proper permission checks (publiclyAccessible OR organizationId match)
- Export new functions from database query index files
- Add title route to v2 API index
- Follow existing Hono API patterns with standardErrorHandler
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add authentication state detection using useSupabaseContext
- Detect embed page context using window.location.pathname
- Show 'Login' button with redirect parameter for unauthenticated users or embed pages
- Keep 'Go home' button for authenticated users without asset access
- Include current URL as redirect parameter in login link
Co-Authored-By: nate@buster.so <nate@buster.so>
- Update login page to be server component that extracts searchParams
- Pass redirectTo as prop to LoginForm instead of using useSearchParams
- Add helper function to reduce code duplication in middleware
- Add URL validation in layout component as suggested in PR comments
- Follow Next.js App Router best practices for server/client components
Co-Authored-By: nate@buster.so <nate@buster.so>
- 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>