Sivin Varghese
88587b1ccb
feat: Add natural language date parser for snooze functionality ( #13587 )
...
# Pull Request Template
## Description
This PR introduces a custom, lightweight natural-language date parser
(dependency-free except for date-fns) to power snooze actions via the
command bar (e.g., “Remind me tomorrow at 6am”). It also adds support
for multi-language searches.
<details>
<summary>Supported Formats</summary>
## Snooze Date Parser — Supported Input Formats
## 1. Durations
Specify an amount of time from now.
### Basic
- `5 minutes` · `2 hours` · `3 days` · `1 week` · `6 months` · `ten
year`
- `in 2 hours` · `in 30 minutes` · `in a week` · `in a month`
- `5 minutes from now` · `a week from now` · `two weeks from now`
### Half / fractional
- `half hour` · `half day` · `half week` · `half month`
- `in half a day` · `in half an hour` · `in half a week`
- `one and a half hours` · `in one and a half hours`
- `1.5 hours` · `2.5 days`
### Compound
- `1 hour and 30 minutes` · `2 hours and 15 minutes`
- `2 days at 3pm` · `1 week at 9am`
### Shorthand (no spaces)
- `2h` · `30m` · `1h30m` · `2h15m`
- `1h30minutes` · `2hr15min` · `1hour30min`
### Informal quantities
- `couple hours` · `a couple of days` · `in a couple hours`
- `a few minutes` · `in a few hours` · `in a few days`
- `fortnight` · `in a fortnight` _(= 2 weeks)_
### Trailing "later"
- `2 days later` · `a week later` · `month later`
### Prefix words (`after` / `within`)
- `after 2 hours` · `after 3 days` · `after ten year`
- `within a week` · `within 2 hours`
### Recognised word-numbers
`a` (1) · `an` (1) · `one` – `twenty` · `thirty` · `forty` · `fifty` ·
`sixty` · `ninety` · `half` (0.5) · `couple` (2) · `few` (3)
---
## 2. Relative Days
- `today` · `tonight` · `tomorrow`
- `tomorrow morning` · `tomorrow afternoon` · `tomorrow evening` ·
`tomorrow night`
- `tomorrow at 3pm` · `tomorrow 9` · `tonight at 8` · `tonight at 10pm`
- `tomorrow same time` · `same time tomorrow`
- `day after tomorrow` · `the day after tomorrow` · `day after tomorrow
at 2pm`
- `later today` · `later this afternoon` · `later this evening`
---
## 3. Weekdays
- `monday` · `friday` · `wed` · `thu`
- `friday at 3pm` · `monday 9am` · `wednesday 14:30`
- `monday morning` · `friday afternoon` · `wednesday evening`
- `monday morning 6` · `friday evening 7`
- `this friday` · `upcoming monday` · `coming friday`
- `same time friday` · `same time wednesday`
---
## 4. "Next" Patterns
- `next hour` · `next week` · `next month` · `next year`
- `next week at 2pm` · `next month at 9am`
- `next monday` · `next friday` · `next friday at 3pm`
- `next monday morning` · `next friday evening`
- `monday of next week` · `next week monday`
- `next january` · `next december`
- `next business day` · `next working day`
---
## 5. Time of Day
- `morning` · `afternoon` · `evening` · `night` · `noon` · `midnight`
- `this morning` · `this afternoon` · `this evening`
- `early morning` · `late evening` · `late night`
- `morning at 8am` · `evening 6pm` · `afternoon 2pm`
- `eod` · `end of day` · `end of the day`
---
## 6. Standalone Time
- **12-hour:** `3pm` · `9am` · `at 3pm` · `at 9:30am`
- **24-hour:** `14:30` · `at 14:30`
---
## 7. Named Dates (Month + Day)
- `jan 15` · `january 15` · `march 20` · `dec 25`
- `jan 1st` · `march 3rd` · `april 2nd` · `december 31st`
- `15 march` · `25 dec` _(reversed order)_
- `jan 15 2025` · `dec 25 2025` · `march 20 next year`
- `jan 15 at 2pm` · `march 5 at 2pm`
- `december 2025` · `january 2024` _(month + year only)_
---
## 8. Month + Ordinal Patterns
Target a specific week or day within a month.
### Week of month
- `april first week` · `july 2nd week` · `feb 3rd week`
- `first week of april` · `2nd week of july`
### Day of month
- `april first day` · `march second day` · `march 5th day`
- `third day of march` · `5th day of jan at 2pm`
### Supported ordinals
- **Digit:** `1st` `2nd` `3rd` `4th` `5th` … (up to 31 for days, 5 for
weeks)
- **Word:** `first` `second` `third` `fourth` `fifth` `sixth` `seventh`
`eighth` `ninth` `tenth`
---
## 9. Formal / Numeric Dates
- **ISO:** `2025-01-15`
- **Slash (M/D/Y):** `01/15/2025`
- **Dash (D-M-Y):** `15-01-2025`
- **Dot (D.M.Y):** `15.01.2025`
- Any of the above **+ time:** `2025-01-15 at 3pm`
---
## 10. Special Phrases
- `this weekend` · `weekend` · `next weekend`
- `end of week` · `end of month`
- `end of next week` · `end of next month`
- `beginning of next week` · `start of next week`
- `beginning of next month`
---
## 11. Noise / Filler Stripping
The parser silently removes conversational prefixes so all of these work
exactly the same as the bare expression:
```
snooze for 2 hours → 2 hours
remind me tomorrow → tomorrow
please snooze until friday → friday
can you set a reminder for next week → next week
schedule this for jan 15 → jan 15
postpone to next monday → next monday
defer for 2 days → 2 days
delay it by 1 hour → 1 hour
```
### Recognised filler verbs / prefixes
`snooze` · `remind` · `remind me` · `set a reminder` · `add a reminder`
·
`schedule` · `postpone` · `defer` · `delay` · `push`
### Recognised prepositions (stripped)
`on` · `to` · `for` · `at` · `until` · `till` · `by` · `from` · `after`
· `within`
### Typo corrections
`tommorow` / `tommorrow` → `tomorrow` · `nxt` → `next`
---
## 12. Multi-Language Support
The parser supports localised input via translations in `snooze.json`.
### Translatable token categories
- **Units:** minute, hour, day, week, month, year _(singular + plural)_
- **Relative days:** tomorrow, day after tomorrow, next week / month,
this / next weekend
- **Time of day:** morning, afternoon, evening, night, noon, midnight
- **Word numbers:** one through ten, twelve, fifteen, twenty, thirty
- **Ordinals:** first through fifth
- **Structural words:** at, in, of, after, week, day, from now, next
year
- **Meridiem:** am, pm
### Auto-detected from locale
Weekday names and month names are resolved automatically via
`Intl.DateTimeFormat` for the user's locale — no manual translation
needed.
</details>
## Type of change
- [x] New feature (non-breaking change which adds functionality)
## How Has This Been Tested?
**Screenshots**
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/c690d328-a0df-41d2-b531-2b4e6ce6b5fd "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/fa881acc-4fed-4ba3-9166-58bd953bcb26 "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/4d9a224b-641c-409c-a7ce-3dec2b5355e2 "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/465b9835-d82c-4bc7-a2ae-94976ada2d3b "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/839fe8fc-8943-4b66-83ca-5c61c95f24d8 "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/3a9a54f2-7669-40f2-b098-a3f5c183526d "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/7791ab2b-c763-49a9-90a0-e91b0d8f0a26 "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/4689390c-0e7f-48ae-acc7-d8e28695452f "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/d0aa5217-d0e1-4f41-b663-72888d028a3a "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/4fa9ff5b-a874-43d5-812f-6abe1a95a5ac "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/2c8199a6-f872-46af-986f-bdf8597248f5 "
/>
<img width="974" height="530" alt="image"
src="https://github.com/user-attachments/assets/5bd9effc-7518-4f96-b2f2-7c547f32f500 "
/>
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules
2026-03-06 12:20:22 +04:00
Aakash Bakhle
101eca3003
feat: add captain editor events ( #13524 )
...
## Description
Adds missing analytics instrumentation for the editor AI funnel so we
can measure end-to-end usage and outcome quality.
### What was added
- Captain: Editor AI menu opened
- Captain: Generation failed
- Captain: AI-assisted message sent
### Behavior covered
- Tracks AI button click + menu open from both entry points:
- top panel sparkle button
- inline editor copilot button
- Tracks generation failures (initial + follow-up stages).
- Tracks whether accepted AI content was sent as-is or edited before
send.
### Notes
- Applies to editor Captain accept/send flow
(rewrite/summarize/reply_suggestion + follow-ups).
- Does not change Copilot sidebar flow instrumentation.
## Type of change
- [x] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality not to work as expected)
- [ ] This change requires a documentation update
## How Has This Been Tested?
### Manual verification steps
<img width="1906" height="832" alt="image"
src="https://github.com/user-attachments/assets/f0ade43b-aa8d-41be-8ca2-20a091a81f60 "
/>
<img width="828" height="280" alt="image"
src="https://github.com/user-attachments/assets/be76219e-fb61-4a6e-bff5-dc085b0a3cc9 "
/>
<img width="415" height="147" alt="image"
src="https://github.com/user-attachments/assets/36802c5c-33a7-49ed-bf7e-f0b02d86dccc "
/>
<img width="2040" height="516" alt="image"
src="https://github.com/user-attachments/assets/74b95288-bc86-4312-a282-14211ae8f25c "
/>
1. Open a conversation with Captain tasks enabled.
2. Click AI button in top panel and inline editor.
3. Confirm analytics events fire for:
- AI menu opened
4. Run an AI action and force a failure scenario (or empty response
path) and confirm generation-failed event.
5. Accept AI output, then:
- send without changes -> editedBeforeSend: false
- edit then send -> editedBeforeSend: true
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules
2026-02-17 13:26:56 +05:30
Shivam Mishra
8eb6fd1bff
feat: track copilot events ( #13342 )
2026-01-22 18:38:04 +05:30
Shivam Mishra
6a482926b4
feat: new Captain Editor ( #13235 )
...
Co-authored-by: Aakash Bakhle <48802744+aakashb95@users.noreply.github.com >
Co-authored-by: Vishnu Narayanan <iamwishnu@gmail.com >
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com >
Co-authored-by: iamsivin <iamsivin@gmail.com >
Co-authored-by: aakashb95 <aakashbakhle@gmail.com >
2026-01-21 13:39:07 +05:30
Pranav
b6a14bda48
chore: Enable YearInReview for everyone, include analytics ( #13090 )
...
Remove the query param condition and enable it for everyone.
2025-12-16 18:20:10 -08:00
Sivin Varghese
df4de508e7
feat: New Scenarios page ( #11975 )
2025-07-30 19:34:27 +05:30
Muhsin Keloth
bca8c99148
feat: Add June events for linear integration ( #11007 )
...
Fixes https://linear.app/chatwoot/issue/CW-3415/june-sdk-events
2025-03-03 13:33:11 +05:30
Shivam Mishra
451c28a7a1
feat: add prompt suggestions and June events ( #10726 )
...
This PR adds the following two features
1. Prompt suggestions to get started with Copilot Chat
2. June events for each action

---------
Co-authored-by: Pranav <pranavrajs@gmail.com >
2025-01-21 22:52:42 +05:30
Sivin Varghese
a3732c8f51
feat: Adds support for selecting emojis using the keyboard ( #10055 )
2024-09-04 11:32:54 +05:30
Vishnu Narayanan
cc47ccaa2c
feat(ee): Add SLA management UI ( #8777 )
...
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com >
Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com >
Co-authored-by: Pranav <pranav@chatwoot.com >
2024-02-20 23:03:22 -08:00
Muhsin Keloth
d3c1fce761
feat: Inbox item actions ( #8838 )
...
* feat: Inbox item actions
* feat: add inbox id in push event data
* Update InboxList.vue
* feat: complete actions
* Update InboxList.vue
* Update InboxView.vue
* chore: code cleanup
* chore: fix specs
---------
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com >
2024-02-02 11:58:47 +05:30
Nithin David Thomas
96add30331
chore: Add analytics event for insert article feature ( #8393 )
2023-11-22 08:18:58 -08:00
Sivin Varghese
2e54f4a67c
feat: Adds an event for the Google Translate usage ( #8175 )
2023-10-24 15:34:51 +05:30
Muhsin Keloth
12ae49089b
feat: Add analytics events for notification feature ( #7749 )
2023-08-17 09:18:31 -07:00
Muhsin Keloth
b89c917198
feat: Add CTAs for AI features ( #7538 )
2023-08-16 08:39:41 +05:30
Muhsin Keloth
2a73f124ca
feat: Add analytics event for command bar usage ( #7659 )
2023-08-02 13:45:26 +05:30
Muhsin Keloth
c8a40932cc
chore: Add June event for AI reply suggest dismissal ( #7601 )
2023-07-31 13:20:47 +05:30
Muhsin Keloth
91c1061214
feat: Add more AI options ( #7502 )
...
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com >
Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com >
Co-authored-by: Pranav Raj S <pranav@chatwoot.com >
2023-07-16 12:25:16 -07:00
Shivam Mishra
7c080fa9fa
feat: label suggestion UI ( #7480 )
2023-07-13 09:16:09 +05:30
Muhsin Keloth
1936369b12
feat: Add analytics event for OpenAI ( #7074 )
...
* Add analytics event for OpenAI
* Add more variations
2023-05-15 11:57:56 +05:30
Shivam Mishra
54880b2342
feat: Track conversation priority events ( #6968 )
2023-04-24 20:21:43 +05:30
Pranav Raj S
70e7530cb4
feat: Setup context menu for message ( #6750 )
2023-03-24 16:20:19 -07:00
Nithin David Thomas
88ed028a06
feat: Revamps search to use new search API's ( #6582 )
...
* feat: Revamps search to use new search API's
* Fixes search result spacing
* Fixes message result
* Fixes issue with empty search results
* Remove console errors
* Remove console errors
* Fix console errors, canned responses
* Fixes message rendering on results
* Highlights search term
* Fixes html rendering for emails
* FIxes email rendering issues
* Removes extra spaces and line breaks
---------
Co-authored-by: Pranav Raj S <pranav@chatwoot.com >
2023-03-03 20:58:21 +05:30
Muhsin Keloth
d9a1154977
feat: Support variables in canned response ( #6077 )
...
- Added the option to insert variables in canned responses.
- Populate variables on selecting a canned response.
- Show a warning if there are any undefined variables in the message before sending a message.
2023-01-24 13:06:50 +05:30
Pranav Raj S
3b1036e3d6
chore: Add an event for conversation filter ( #6306 )
2023-01-19 14:07:02 -08:00
Shivam Mishra
37b9816827
feat: more events tracking for SaaS ( #6234 )
2023-01-17 21:53:40 -08:00
Pranav Raj S
6200559123
chore: Update analytics events ( #6050 )
2022-12-08 20:53:13 -08:00