Add delete_meeting, delete_call, delete_note tools for Shira.
Add expand/collapse toggle button to the floating chat window.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Inset crop to avoid icon's rounded corners, pure blue background fills entire square.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Square avatar image (no circle mask) — CSS border-radius handles clipping
- Badge moved outside .sa-fab to separate wrapper, not clipped by overflow:hidden
- object-fit: cover ensures image fills entire circle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Avatar image pre-cropped as circle with transparency
- Removed overflow:hidden from FAB so badge is not clipped
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Shira executes all actions inline (create task, meeting, note) without approval buttons
- Actions work from both case and office mode (auto-resolves case from drill-down)
- Tasks/meetings can be created without a case parent
- Chat input is now multi-line textarea with auto-grow (Shift+Enter for new line)
- Markdown tables render as proper HTML tables with LRM marks for BiDi safety
- Robot icon replaced with Shira's avatar in FAB, chat header, and message bubbles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Shira speaks in feminine form (חושבת instead of חושב)
- Neutral verb forms for buttons (הוספת/חיפוש instead of הוסף/חפש)
- Updated fallback texts to reference שירה by name
- Description updated: AI Gateway integration replaces n8n
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When Shira creates a task, meeting, or other entity, the current
detail view panels now refresh automatically via model.trigger('update-all').
For tasks and meetings, also refreshes the activities/tasks side panels.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SmartRequest and SmartAction note views were missing data() method,
so {{post}} in the template resolved to empty string. Added proper
data() with escapeString formatting, consistent with SmartResponse.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
self was resolving to window.self instead of the View instance
inside the forEach callback, causing self.escapeString to fail.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace jQuery text escaping with EspoCRM's built-in View.escapeString()
to maintain consistency with the rest of the codebase.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Espo.Utils.escapeString does not exist in EspoCRM 8.x, causing
TypeError crash when clicking dashlet cards. Use jQuery .text().html()
for XSS-safe HTML escaping instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cards "תיקים פתוחים" and "דיונים השבוע" showed counts but clicking
revealed "אין פריטים להצגה" because card counts came from direct DB
queries while detail filtered from alerts with stricter criteria.
Added getOpenCaseItems() and getUpcomingHearingItems() to AlertCalculator,
included them in summary API response, and wired dashlet to use them.
Also: renamed extension to SmartAssistant, title to "שירה — עוזרת אישית".
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move JS from client/custom/src/modules/{mod}/ to client/custom/modules/{mod}/src/
Move TPL to client/custom/modules/{mod}/res/templates/
Update all define(), createView(), and metadata references from
custom:modules/{mod}/... to modules/{mod}/...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>