Conversation
- Add isRobotNameTaken() helper with case-insensitive, trimmed comparison
using lower(trim(recording_meta->>'name')) in Sequelize queries
- Add 409 uniqueness checks in POST /recordings/scrape, /llm, /crawl,
/search, PUT /recordings/:id (edit), and POST /recordings/:id/duplicate
- Trim all robot names before uniqueness check and before saving
- Add DB migration: unique index robot_user_name_unique on
("userId", lower(trim(recording_meta->>'name')))
- Generator.ts: trim fileName, case-insensitive conflict check before
creating new robot, emit fileSaved { actionType: 'nameExists' } on conflict
- Frontend API: re-throw server error messages for all create/update/
duplicate functions so callers surface the conflict message
- RobotCreate: check for duplicate name before optimistic update + navigation
for LLM robot flow; try-catch for scrape/crawl/search flows
- RobotEditPage: use error.message in catch to surface conflict
- RobotDuplicatePage: add Robot Name field (pre-filled, auto-updates with URL)
- SaveRecording: replace confirm-to-overwrite with hard block using
case-insensitive trimmed check; handle nameExists socket action
- Add name_exists and robot_duplication name translations for all 6 locales
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Reject whitespace-only names in all create endpoints (scrape, crawl, search, llm) using explicit string trim + fallback instead of ||.trim() - Validate name type and emptiness in PUT endpoint with 400 responses - Catch SequelizeUniqueConstraintError in all create/update/Generator paths and return 409/emit nameExists to close TOCTOU race window - Add blank-name guard in Generator.saveNewWorkflow before DB write - Propagate isDuplicate flag from updateRecording for i18n-aware error display in RobotEditPage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move LLM duplicate-name check before the expensive LLM call to avoid burning API time/cost on a name that will be rejected anyway - Hoist trimmedName declaration in PUT endpoint to eliminate the redundant second name.trim() call outside the validation block - Guard recording_meta.name type in Generator pre-check so legacy rows with missing/non-string names don't throw; normalize both sides to match the DB index semantics (lower + trim) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Added RECORDING_TIMEOUT_MS and recordingTimeouts Map to track sessions
- Timer starts after browser is added to pool; emits recording-timeout
socket event then destroys the remote browser after 1s delay (gives
frontend time to handle the event before socket teardown)
- clearRecordingTimeout() exported and called in destroyRemoteBrowser
and the /stop/:browserId route to cancel timer on normal save/discard
- RecordingPage listens for recording-timeout: broadcasts via
BroadcastChannel then calls window.close(); falls back to
navigate('/robots') if close is blocked by the browser
- PageWrapper (always mounted in original tab) listens on
BroadcastChannel, navigates back to the page the recording was
started from (stored in sessionStorage), and shows warning notification
- RobotCreate stores current pathname in sessionStorage before opening
the recording tab so PageWrapper can navigate back on timeout
- Added timeout_discarded translation key to all 6 locale files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Clear browserId, recordingId, recordingUrl, recordingName, retrainRobotId, currentWorkflowActionsState and isDOMMode before broadcasting the timeout event and closing the tab, so stale state cannot bleed into the next session if window.close() is blocked by the browser. Resolves coderabbit review comment on RecordingPage state cleanup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: add langgraph svg
feat: add status check route sdk for Maxun CLI
fix(recorder): auto-discard recording session after 10-minute timeout
fix: enforce unique robot names across all creation flows and edit
feat: add sdk robot duplication
fix: error handling apikey check
fix: sdk doc link path
fix: duplicate field naming for captured data
chore: pre-release v0.0.36
fix: success status being displayed
feat: add cli to main menu
feat: add run status for cli and mcp
fix: copy clipboard hosted context
feat: use dialog instead of custom generic modal
fix: add missing i18n translation keys across all locales
feat: add claude code integration
fix: misc ui fixes
chore: pre-release v0.0.37
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. 🗂️ Base branches to auto review (1)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.