HuyNguyen
428d95c999
Enable AI Scribe modal based on configuration and availability
2025-12-19 19:03:39 +07:00
Dat H. Pham
25ea472688
Display AI toggle in Composer
2025-12-19 19:03:39 +07:00
Dat H. Pham
3c20c005f6
Display AI Scribe togge in Preference
2025-12-19 19:03:39 +07:00
Dat H. Pham
9a46f6c663
Interactor getAIScribeConfig
2025-12-19 19:03:39 +07:00
Dat H. Pham
a915ec9881
AIConfig model
2025-12-19 19:03:39 +07:00
dab246
a686b5d334
feat(ai-scribe): Adding error handling for async operations
2025-12-19 19:03:39 +07:00
Théo Poizat
c78f6b8a76
Improve text replace in Scribe
...
- Delete selection content before inserting
- Insert correct HTML
2025-12-19 19:03:39 +07:00
Théo Poizat
1a79445711
Add a method to delete selection content
2025-12-19 19:03:39 +07:00
dab246
57bfb4f88f
feat(ai-scribe): Fix when using multiple composer, get multiple overlay icons
2025-12-19 19:03:39 +07:00
dab246
54ca4595ad
feat(ai-scribe): Fix some comments of coderabbit
2025-12-19 19:03:39 +07:00
dab246
27393d4cc8
feat(ai-scribe): Add method to collapse selection and insert/replace callback
2025-12-19 19:03:39 +07:00
Théo Poizat
8ed8100e7e
Add JS method to collapse selection in both composer
...
Collapsing a selection means removing it and keep the cursor at the
end. It will be needed by the scribe for "Insert" action where we
want to insert a text at the cursor even if the user selected text.
2025-12-19 19:03:39 +07:00
dab246
860393fc90
feat(ai-scribe): Improve data & domain layer for ai scribe
2025-12-19 19:03:39 +07:00
dab246
1a1b8f489f
feat(ai-scribe): Improve UI for AI Scribe suggestion modal
2025-12-19 19:03:39 +07:00
dab246
582b1ebe97
feat(ai-scribe): reorganize abstractions and update dialog modal UI
2025-12-19 19:03:39 +07:00
dab246
7ddccf2e1c
feat(ai-scribe): Fix cannot parsing AI capability from Session
2025-12-19 19:03:39 +07:00
Théo Poizat
755e24895d
Disable AI Scribe if on mobile
2025-12-19 19:03:39 +07:00
Théo Poizat
0075fd64b6
feat: Remove .env file for AI Scribe
...
It was used at the beginning for configuration purpose but now we
have the JMAP capability, no need anymore.
2025-12-19 19:03:39 +07:00
Théo Poizat
2c364ea08a
Use endpoint from AI capability instead of direct call to LLM
2025-12-19 19:03:39 +07:00
Théo Poizat
2325df616f
Create an isAIScribeAvailable method
...
Check JMAP capability AND if AI is enabled in env.file and use this method everywhere where we checked env.file
2025-12-19 19:03:39 +07:00
Théo Poizat
8c16bd1fad
Add AI capability
2025-12-19 19:03:39 +07:00
Théo Poizat
77a56ae9b7
Export AI Scribe code from controller to a mixin
...
Avoid adding too much code in the controller
2025-12-19 19:03:39 +07:00
Théo Poizat
4d0880b8be
fixup! Extract method to convert html content to text content
...
Move the method in utils
2025-12-19 19:03:39 +07:00
Théo Poizat
d369fcbf5f
Simplify observed values about text selection in composer
...
hasTextSelection had no interest.
The other two values have been put inside an object to observe only one object.
2025-12-19 19:03:39 +07:00
Théo Poizat
2228596c1c
Mutualize event listener in web editor widget
...
Instead of listening multiple times for message from editor JS side,
let's add only one listener and route inside the callback.
2025-12-19 19:03:39 +07:00
Théo Poizat
75f5817e1c
fixup! Implement text selection mixin in mobile and web editor
...
Add try/catch to JSON parse
2025-12-19 19:03:39 +07:00
Théo Poizat
2f3bbe3bbb
Do not display AI scribe if AI is not enabled in env.file
2025-12-19 19:03:39 +07:00
Théo Poizat
bb23792fe3
Use bindings to better separate scribe presentation and data layer
2025-12-19 19:03:39 +07:00
Théo Poizat
6dc58e2eb6
Extract method to convert html content to text content
...
Editor exposes html content (so with html tags) and we do not want to send them to AI backend
2025-12-19 19:03:39 +07:00
Théo Poizat
7d7ccaf874
Open AI Scribe from text selection
2025-12-19 19:03:39 +07:00
Théo Poizat
96c95866c6
Open AI Scribe from bottom bar button
2025-12-19 19:03:39 +07:00
Théo Poizat
dced5b5dc7
Add AI scribe widgets
...
- Button : the button with sparkle icon to display AI scribe
- Menu : the menu where you can select the action (eg: translate)
- Bar : the input where you can write a custom action
- Suggestion : the wrapper of the result of the LLM
2025-12-19 19:03:39 +07:00
Théo Poizat
23065aa76d
Forward text selection callback from editor view to editor
2025-12-19 19:03:39 +07:00
Théo Poizat
57124f70a8
Implement text selection mixin in mobile and web editor
2025-12-19 19:03:39 +07:00
Théo Poizat
c858ac40f5
Add translations for scribe module
...
Added a separated ScribeLocalizations to keep it separated from main app.
2025-12-19 19:03:39 +07:00
Théo Poizat
7e0c98b080
Add scribe module
2025-12-19 19:03:39 +07:00
Théo Poizat
26593b50ef
Move AI env var from main to scribe package
2025-12-19 19:03:39 +07:00
Théo Poizat
8b17fcdc54
fixup! Add text selection mixin
2025-12-19 19:03:39 +07:00
Théo Poizat
4013973110
Add text selection mixin
...
This mixin leverages HTML callbacks that can be set by WebView editor
to send text selection event to the composer so the composer will
receive text selection event necessary to display buttons related to
text selection.
2025-12-19 19:03:39 +07:00
Théo Poizat
29e90f256f
Add AI related env var
...
AI_ENABLED allows to test AI features only in some wanted environment.
AI_API_KEY and AI_API_URL allows to call the LLM while we wait for tmail backend endpoints.
It will be removed when tmail backend endpoints are ready.
2025-12-19 19:03:39 +07:00
dab246
06412f1493
fixup! TF-4186 Use super.props to include parent's properties in the props override.
2025-12-10 17:13:11 +07:00
dab246
f09694577e
TF-4186 Use super.props to include parent's properties in the props override.
2025-12-10 17:13:11 +07:00
dab246
c87d3229ce
TF-4186 Implement remember choose organisation server
2025-12-10 17:13:11 +07:00
dab246
0bbcfd0f75
TF-4186 Add datasource/repository for save and get company server login info
2025-12-10 17:13:11 +07:00
dab246
860154acc1
TF-4176 Change minimize behavior in mail composer
2025-12-10 09:41:11 +07:00
Dat H. Pham
5e0d2ae424
Translated using Weblate (French)
...
Currently translated at 100.0% (812 of 812 strings)
Translation: Linagora/TeamMail
Translate-URL: https://hosted.weblate.org/projects/linagora/teammail/fr/
2025-11-21 11:00:55 +07:00
Dat H. Pham
1f5bd74879
Translated using Weblate (Russian)
...
Currently translated at 100.0% (812 of 812 strings)
Translation: Linagora/TeamMail
Translate-URL: https://hosted.weblate.org/projects/linagora/teammail/ru/
2025-11-21 11:00:55 +07:00
Dat H. Pham
279532a9b6
Translated using Weblate (Vietnamese)
...
Currently translated at 100.0% (812 of 812 strings)
Translation: Linagora/TeamMail
Translate-URL: https://hosted.weblate.org/projects/linagora/teammail/vi/
2025-11-21 11:00:55 +07:00
Dat H. Pham
77f96ade53
Translated using Weblate (Vietnamese)
...
Currently translated at 100.0% (810 of 810 strings)
Translation: Linagora/TeamMail
Translate-URL: https://hosted.weblate.org/projects/linagora/teammail/vi/
2025-11-21 11:00:55 +07:00
Dat H. Pham
8d1e04a65d
Translated using Weblate (Vietnamese)
...
Currently translated at 99.8% (809 of 810 strings)
Translation: Linagora/TeamMail
Translate-URL: https://hosted.weblate.org/projects/linagora/teammail/vi/
2025-11-21 11:00:55 +07:00