@agent-native/core 0.91.1 → 0.91.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blueprints/action/crud.md +1 -1
- package/blueprints/channel/discord.md +1 -1
- package/blueprints/provider/stripe.md +1 -1
- package/blueprints/sandbox/docker.md +1 -1
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +14 -0
- package/corpus/core/blueprints/action/crud.md +1 -1
- package/corpus/core/blueprints/channel/discord.md +1 -1
- package/corpus/core/blueprints/provider/stripe.md +1 -1
- package/corpus/core/blueprints/sandbox/docker.md +1 -1
- package/corpus/core/package.json +6 -5
- package/corpus/core/src/agent/run-manager.ts +23 -2
- package/corpus/core/src/agent/run-store.ts +2 -2
- package/corpus/core/src/cli/add.ts +1 -1
- package/corpus/core/src/cli/create.ts +8 -3
- package/corpus/core/src/cli/index.ts +5 -4
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +7 -0
- package/corpus/core/src/client/session-replay.ts +97 -3
- package/corpus/core/src/jobs/scheduler.ts +30 -1
- package/corpus/core/src/localization/default-messages.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/corpus/core/src/templates/default/package.json +2 -2
- package/corpus/core/src/templates/headless/package.json +3 -3
- package/corpus/core/src/templates/workspace-core/package.json +6 -6
- package/corpus/core/src/templates/workspace-root/package.json +2 -2
- package/corpus/core/src/triggers/dispatcher.ts +30 -2
- package/corpus/core/src/vite/client.ts +96 -1
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +21 -2
- package/corpus/templates/analytics/app/global.css +26 -10
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/analytics/app/i18n-data.ts +25 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +548 -237
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +285 -294
- package/corpus/templates/analytics/changelog/2026-07-08-console-details-expand-inline-under-each-row-and-the-event-t.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-keeps-a-usable-stage-when-dev-tools-is-open-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-resumes-after-scrubbing-and-expands-console-r.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replays-wait-for-full-load-keep-a-normal-viewport-an.md +6 -0
- package/corpus/templates/analytics/package.json +2 -2
- package/corpus/templates/assets/package.json +2 -2
- package/corpus/templates/brain/package.json +2 -2
- package/corpus/templates/calendar/AGENTS.md +10 -0
- package/corpus/templates/calendar/actions/create-event.ts +5 -1
- package/corpus/templates/calendar/actions/event-action-helpers.ts +41 -0
- package/corpus/templates/calendar/actions/get-attendee-timezones.ts +28 -0
- package/corpus/templates/calendar/actions/set-attendee-timezone.ts +68 -0
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +150 -11
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +36 -1
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +32 -0
- package/corpus/templates/calendar/app/hooks/use-attendee-timezones.ts +24 -0
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/lib/attendee-local-time.ts +122 -0
- package/corpus/templates/calendar/changelog/2026-07-08-event-details-now-support-extension-widgets-and-you-can-see-.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-08-when-you-invite-guests-to-a-new-event-you-now-appear-in.md +6 -0
- package/corpus/templates/calendar/package.json +2 -2
- package/corpus/templates/calendar/server/handlers/events.ts +5 -1
- package/corpus/templates/calendar/shared/api.ts +6 -0
- package/corpus/templates/chat/package.json +2 -2
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +6 -2
- package/corpus/templates/clips/actions/create-meeting.ts +8 -3
- package/corpus/templates/clips/actions/list-meetings.ts +31 -3
- package/corpus/templates/clips/changelog/2026-07-08-after-finishing-a-desktop-recording-reopening-clips-restor.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-clips-now-pops-up-to-take-notes-when-you-join-an-adhoc-zoom-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-desktop-clip-recordings-are-louder-after-capture-mic-only.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-reminders-now-appear-1-minute-before-start-stay-unti.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-the-desktop-meetings-panel-has-room-for-its-drop-shadow-and-.md +6 -0
- package/corpus/templates/clips/chrome-extension/package.json +2 -2
- package/corpus/templates/clips/desktop/package.json +2 -2
- package/corpus/templates/clips/desktop/src/app.tsx +91 -34
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -5
- package/corpus/templates/clips/desktop/src/lib/meeting-notification-timing.ts +83 -0
- package/corpus/templates/clips/desktop/src/lib/native-recording-warm.ts +21 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +98 -20
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +174 -50
- package/corpus/templates/clips/desktop/src/styles.css +128 -53
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +364 -0
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +5 -0
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +91 -11
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +69 -19
- package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +36 -1
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -10
- package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +1 -24
- package/corpus/templates/clips/desktop/src-tauri/src/util.rs +36 -1
- package/corpus/templates/clips/package.json +2 -2
- package/corpus/templates/content/actions/_content-database-personal-view.ts +80 -0
- package/corpus/templates/content/actions/get-content-database-personal-view.ts +27 -0
- package/corpus/templates/content/actions/update-content-database-personal-view.ts +31 -0
- package/corpus/templates/content/actions/update-content-database-view.ts +3 -0
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +2584 -546
- package/corpus/templates/content/app/components/editor/database/filter-sort.ts +220 -18
- package/corpus/templates/content/app/hooks/use-content-database.ts +32 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +16 -0
- package/corpus/templates/content/app/i18n-data.ts +154 -0
- package/corpus/templates/content/changelog/2026-07-08-database-filters-now-support-notion-style-reset-save-for-eve.md +6 -0
- package/corpus/templates/content/changelog/2026-07-08-date-filters-can-now-target-a-between-range.md +6 -0
- package/corpus/templates/content/package.json +2 -2
- package/corpus/templates/content/parity/matrix.md +1 -1
- package/corpus/templates/content/parity/matrix.ts +2 -0
- package/corpus/templates/content/shared/api.ts +24 -0
- package/corpus/templates/design/package.json +2 -2
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +34 -1
- package/corpus/templates/dispatch/app/i18n-data.ts +387 -10
- package/corpus/templates/dispatch/app/routes/automations.tsx +1 -0
- package/corpus/templates/dispatch/changelog/2026-07-08-added-an-automations-page-to-review-pause-and-create.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-08-destinations-now-shows-outbound-delivery-queue-health.md +6 -0
- package/corpus/templates/dispatch/package.json +2 -2
- package/corpus/templates/forms/package.json +2 -2
- package/corpus/templates/macros/package.json +2 -2
- package/corpus/templates/mail/app/hooks/use-emails.ts +56 -44
- package/corpus/templates/mail/app/lib/gmail-mutation-queue.ts +325 -0
- package/corpus/templates/mail/changelog/2026-07-08-rapid-archive-and-mark-read-now-batch-gmail-updates-so-the-i.md +6 -0
- package/corpus/templates/mail/package.json +2 -2
- package/corpus/templates/plan/package.json +2 -2
- package/corpus/templates/slides/app/components/editor/ImageDropPromptPopover.tsx +46 -29
- package/corpus/templates/slides/app/context/DeckContext.tsx +45 -18
- package/corpus/templates/slides/app/i18n/ar-SA.ts +4 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +4 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +4 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +4 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +4 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +4 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +4 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +4 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +4 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +4 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/slides/app/lib/image-drop-to-agent.ts +115 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +22 -13
- package/corpus/templates/slides/changelog/2026-07-08-dropping-an-image-onto-a-slide-and-sending-it-to-the-agent-w.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-08-undo-works-after-the-agent-edits-a-slide-so-you-can-reverse.md +6 -0
- package/corpus/templates/slides/package.json +2 -2
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +23 -2
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.js +2 -2
- package/dist/agent/run-store.js.map +1 -1
- package/dist/catalog.json +2 -2
- package/dist/cli/add.js +1 -1
- package/dist/cli/add.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +8 -3
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +5 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +6 -0
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/session-replay.d.ts +8 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +80 -3
- package/dist/client/session-replay.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/jobs/scheduler.js +26 -1
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +19 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +19 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/templates/default/app/i18n/ar-SA.ts +21 -0
- package/dist/templates/default/app/i18n/de-DE.ts +21 -0
- package/dist/templates/default/app/i18n/en-US.ts +21 -0
- package/dist/templates/default/app/i18n/es-ES.ts +21 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +20 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +21 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +20 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +21 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +20 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
- package/dist/templates/default/package.json +2 -2
- package/dist/templates/headless/package.json +3 -3
- package/dist/templates/workspace-core/package.json +6 -6
- package/dist/templates/workspace-root/package.json +2 -2
- package/dist/triggers/dispatcher.js +27 -2
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +70 -1
- package/dist/vite/client.js.map +1 -1
- package/package.json +7 -6
- package/src/templates/default/app/i18n/ar-SA.ts +21 -0
- package/src/templates/default/app/i18n/de-DE.ts +21 -0
- package/src/templates/default/app/i18n/en-US.ts +21 -0
- package/src/templates/default/app/i18n/es-ES.ts +21 -0
- package/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/src/templates/default/app/i18n/hi-IN.ts +20 -0
- package/src/templates/default/app/i18n/ja-JP.ts +21 -0
- package/src/templates/default/app/i18n/ko-KR.ts +20 -0
- package/src/templates/default/app/i18n/pt-BR.ts +21 -0
- package/src/templates/default/app/i18n/zh-CN.ts +20 -0
- package/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/src/templates/default/package.json +2 -2
- package/src/templates/headless/package.json +3 -3
- package/src/templates/workspace-core/package.json +6 -6
- package/src/templates/workspace-root/package.json +2 -2
|
@@ -43,6 +43,8 @@ const messages = {
|
|
|
43
43
|
destinations: "Destinations",
|
|
44
44
|
identities: "Identities",
|
|
45
45
|
approvals: "Approbations",
|
|
46
|
+
automations: "Automatisations",
|
|
47
|
+
delivery: "Livraison",
|
|
46
48
|
audit: "Audit",
|
|
47
49
|
dreams: "Dreams",
|
|
48
50
|
threadDebug: "Débogage du fil de discussion",
|
|
@@ -161,6 +163,22 @@ const messages = {
|
|
|
161
163
|
activeUsers: "Utilisateurs actifs",
|
|
162
164
|
workspaceAppsStat: "Applications d'espace de travail",
|
|
163
165
|
chatThreads: "Fils de discussion",
|
|
166
|
+
also: "Aussi",
|
|
167
|
+
workspaceShortcutsAria: "Raccourcis de l’espace de travail",
|
|
168
|
+
deliveryQueue: "File de livraison",
|
|
169
|
+
failedLastHour: "{{count}} échecs au cours de la dernière heure",
|
|
170
|
+
processingCount: "{{count}} en cours",
|
|
171
|
+
queued: "En file",
|
|
172
|
+
active: "Actif",
|
|
173
|
+
done1h: "Terminé 1 h",
|
|
174
|
+
failed1h: "Échoué 1 h",
|
|
175
|
+
oldestQueued: "Plus ancien en file : {{age}}",
|
|
176
|
+
queueAgeNone: "aucun",
|
|
177
|
+
queueFailureHint:
|
|
178
|
+
"Vérifiez les identifiants, les destinations et les erreurs récentes de la file.",
|
|
179
|
+
unknownPlatform: "inconnu",
|
|
180
|
+
attemptsCount: "{{count}} tentatives",
|
|
181
|
+
noErrorMessage: "(aucun message d’erreur)",
|
|
164
182
|
},
|
|
165
183
|
},
|
|
166
184
|
agentPanel: {
|
|
@@ -342,6 +360,9 @@ const messages = {
|
|
|
342
360
|
contactSidebarWidget: "Widget de la barre latérale des contacts",
|
|
343
361
|
contactSidebarDescription:
|
|
344
362
|
"Apparaît à côté de la conversation en cours avec le contexte du contact et du fil de discussion.",
|
|
363
|
+
eventDetailWidget: "Widget de détail d'événement",
|
|
364
|
+
eventDetailDescription:
|
|
365
|
+
"Apparaît sous l'événement de calendrier ouvert avec le contexte de l'événement et des participants.",
|
|
345
366
|
addWidgetHere: "Ajouter un widget ici",
|
|
346
367
|
back: "Retour",
|
|
347
368
|
editExtension: "Modifier l'extension",
|
|
@@ -41,6 +41,8 @@ const messages = {
|
|
|
41
41
|
destinations: "Destinations",
|
|
42
42
|
identities: "Identities",
|
|
43
43
|
approvals: "स्वीकृतियाँ",
|
|
44
|
+
automations: "ऑटोमेशन",
|
|
45
|
+
delivery: "डिलीवरी",
|
|
44
46
|
audit: "Audit",
|
|
45
47
|
dreams: "Dreams",
|
|
46
48
|
threadDebug: "थ्रेड डिबग",
|
|
@@ -152,6 +154,21 @@ const messages = {
|
|
|
152
154
|
activeUsers: "सक्रिय उपयोगकर्ता",
|
|
153
155
|
workspaceAppsStat: "कार्यक्षेत्र ऐप्स",
|
|
154
156
|
chatThreads: "चैट सूत्र",
|
|
157
|
+
also: "और भी",
|
|
158
|
+
workspaceShortcutsAria: "कार्यस्थान शॉर्टकट",
|
|
159
|
+
deliveryQueue: "डिलीवरी कतार",
|
|
160
|
+
failedLastHour: "पिछले घंटे में {{count}} विफल",
|
|
161
|
+
processingCount: "{{count}} प्रोसेस हो रहे हैं",
|
|
162
|
+
queued: "कतार में",
|
|
163
|
+
active: "सक्रिय",
|
|
164
|
+
done1h: "पूर्ण 1घं",
|
|
165
|
+
failed1h: "विफल 1घं",
|
|
166
|
+
oldestQueued: "सबसे पुराना कतार में: {{age}}",
|
|
167
|
+
queueAgeNone: "कोई नहीं",
|
|
168
|
+
queueFailureHint: "क्रेडेंशियल, गंतव्य और हाल की कतार त्रुटियाँ जाँचें।",
|
|
169
|
+
unknownPlatform: "अज्ञात",
|
|
170
|
+
attemptsCount: "{{count}} प्रयास",
|
|
171
|
+
noErrorMessage: "(कोई त्रुटि संदेश नहीं)",
|
|
155
172
|
},
|
|
156
173
|
},
|
|
157
174
|
agentPanel: {
|
|
@@ -327,6 +344,9 @@ const messages = {
|
|
|
327
344
|
contactSidebarWidget: "साइडबार विजेट से संपर्क करें",
|
|
328
345
|
contactSidebarDescription:
|
|
329
346
|
"संपर्क और थ्रेड संदर्भ के साथ वर्तमान वार्तालाप के बगल में दिखाई देता है।",
|
|
347
|
+
eventDetailWidget: "इवेंट विवरण विजेट",
|
|
348
|
+
eventDetailDescription:
|
|
349
|
+
"खुले कैलेंडर इवेंट के नीचे इवेंट और उपस्थित लोगों के संदर्भ के साथ दिखाई देता है।",
|
|
330
350
|
addWidgetHere: "यहां विजेट जोड़ें",
|
|
331
351
|
back: "वापस",
|
|
332
352
|
editExtension: "एक्सटेंशन संपादित करें",
|
|
@@ -43,6 +43,8 @@ const messages = {
|
|
|
43
43
|
destinations: "Destinations",
|
|
44
44
|
identities: "Identities",
|
|
45
45
|
approvals: "承認",
|
|
46
|
+
automations: "自動化",
|
|
47
|
+
delivery: "配信",
|
|
46
48
|
audit: "Audit",
|
|
47
49
|
dreams: "Dreams",
|
|
48
50
|
threadDebug: "スレッドのデバッグ",
|
|
@@ -157,6 +159,22 @@ const messages = {
|
|
|
157
159
|
activeUsers: "アクティブユーザー",
|
|
158
160
|
workspaceAppsStat: "ワークスペースアプリ",
|
|
159
161
|
chatThreads: "チャットスレッド",
|
|
162
|
+
also: "その他",
|
|
163
|
+
workspaceShortcutsAria: "ワークスペースのショートカット",
|
|
164
|
+
deliveryQueue: "配信キュー",
|
|
165
|
+
failedLastHour: "過去 1 時間で {{count}} 件失敗",
|
|
166
|
+
processingCount: "{{count}} 件処理中",
|
|
167
|
+
queued: "待機中",
|
|
168
|
+
active: "実行中",
|
|
169
|
+
done1h: "完了 1h",
|
|
170
|
+
failed1h: "失敗 1h",
|
|
171
|
+
oldestQueued: "最古の待機: {{age}}",
|
|
172
|
+
queueAgeNone: "なし",
|
|
173
|
+
queueFailureHint:
|
|
174
|
+
"認証情報、送信先、最近のキューエラーを確認してください。",
|
|
175
|
+
unknownPlatform: "不明",
|
|
176
|
+
attemptsCount: "{{count}} 回試行",
|
|
177
|
+
noErrorMessage: "(エラーメッセージなし)",
|
|
160
178
|
},
|
|
161
179
|
},
|
|
162
180
|
agentPanel: {
|
|
@@ -332,6 +350,9 @@ const messages = {
|
|
|
332
350
|
contactSidebarWidget: "連絡先サイドバー ウィジェット",
|
|
333
351
|
contactSidebarDescription:
|
|
334
352
|
"現在の会話の横に連絡先とスレッドのコンテキストが表示されます。",
|
|
353
|
+
eventDetailWidget: "予定詳細ウィジェット",
|
|
354
|
+
eventDetailDescription:
|
|
355
|
+
"開いているカレンダー予定の下に、予定と出席者のコンテキストとともに表示されます。",
|
|
335
356
|
addWidgetHere: "ここにウィジェットを追加",
|
|
336
357
|
back: "戻る",
|
|
337
358
|
editExtension: "拡張子の編集",
|
|
@@ -42,6 +42,8 @@ const messages = {
|
|
|
42
42
|
destinations: "Destinations",
|
|
43
43
|
identities: "Identities",
|
|
44
44
|
approvals: "승인",
|
|
45
|
+
automations: "자동화",
|
|
46
|
+
delivery: "전달",
|
|
45
47
|
audit: "Audit",
|
|
46
48
|
dreams: "Dreams",
|
|
47
49
|
threadDebug: "스레드 디버그",
|
|
@@ -154,6 +156,21 @@ const messages = {
|
|
|
154
156
|
activeUsers: "활성 사용자",
|
|
155
157
|
workspaceAppsStat: "작업 공간 앱",
|
|
156
158
|
chatThreads: "채팅 스레드",
|
|
159
|
+
also: "또한",
|
|
160
|
+
workspaceShortcutsAria: "워크스페이스 바로가기",
|
|
161
|
+
deliveryQueue: "전달 대기열",
|
|
162
|
+
failedLastHour: "지난 1시간 동안 {{count}}건 실패",
|
|
163
|
+
processingCount: "{{count}}건 처리 중",
|
|
164
|
+
queued: "대기 중",
|
|
165
|
+
active: "진행 중",
|
|
166
|
+
done1h: "완료 1시간",
|
|
167
|
+
failed1h: "실패 1시간",
|
|
168
|
+
oldestQueued: "가장 오래된 대기: {{age}}",
|
|
169
|
+
queueAgeNone: "없음",
|
|
170
|
+
queueFailureHint: "자격 증명, 대상, 최근 대기열 오류를 확인하세요.",
|
|
171
|
+
unknownPlatform: "알 수 없음",
|
|
172
|
+
attemptsCount: "{{count}}회 시도",
|
|
173
|
+
noErrorMessage: "(오류 메시지 없음)",
|
|
157
174
|
},
|
|
158
175
|
},
|
|
159
176
|
agentPanel: {
|
|
@@ -326,6 +343,9 @@ const messages = {
|
|
|
326
343
|
contactSidebarWidget: "연락처 사이드바 위젯",
|
|
327
344
|
contactSidebarDescription:
|
|
328
345
|
"연락처 및 스레드 컨텍스트가 포함된 현재 대화 옆에 표시됩니다.",
|
|
346
|
+
eventDetailWidget: "일정 상세 위젯",
|
|
347
|
+
eventDetailDescription:
|
|
348
|
+
"열린 캘린더 일정 아래에 일정 및 참석자 컨텍스트와 함께 표시됩니다.",
|
|
329
349
|
addWidgetHere: "여기에 위젯 추가",
|
|
330
350
|
back: "뒤로",
|
|
331
351
|
editExtension: "확장 편집",
|
|
@@ -43,6 +43,8 @@ const messages = {
|
|
|
43
43
|
destinations: "Destinations",
|
|
44
44
|
identities: "Identities",
|
|
45
45
|
approvals: "Aprovações",
|
|
46
|
+
automations: "Automações",
|
|
47
|
+
delivery: "Entrega",
|
|
46
48
|
audit: "Audit",
|
|
47
49
|
dreams: "Dreams",
|
|
48
50
|
threadDebug: "Depuração de thread",
|
|
@@ -161,6 +163,22 @@ const messages = {
|
|
|
161
163
|
activeUsers: "Usuários ativos",
|
|
162
164
|
workspaceAppsStat: "Aplicativos de espaço de trabalho",
|
|
163
165
|
chatThreads: "Tópicos de bate-papo",
|
|
166
|
+
also: "Também",
|
|
167
|
+
workspaceShortcutsAria: "Atalhos do espaço de trabalho",
|
|
168
|
+
deliveryQueue: "Fila de entrega",
|
|
169
|
+
failedLastHour: "{{count}} falhas na última hora",
|
|
170
|
+
processingCount: "{{count}} em processamento",
|
|
171
|
+
queued: "Na fila",
|
|
172
|
+
active: "Ativo",
|
|
173
|
+
done1h: "Concluído 1 h",
|
|
174
|
+
failed1h: "Falhou 1 h",
|
|
175
|
+
oldestQueued: "Mais antigo na fila: {{age}}",
|
|
176
|
+
queueAgeNone: "nenhum",
|
|
177
|
+
queueFailureHint:
|
|
178
|
+
"Verifique credenciais, destinos e erros recentes da fila.",
|
|
179
|
+
unknownPlatform: "desconhecido",
|
|
180
|
+
attemptsCount: "{{count}} tentativas",
|
|
181
|
+
noErrorMessage: "(sem mensagem de erro)",
|
|
164
182
|
},
|
|
165
183
|
},
|
|
166
184
|
agentPanel: {
|
|
@@ -341,6 +359,9 @@ const messages = {
|
|
|
341
359
|
contactSidebarWidget: "Widget da barra lateral de contato",
|
|
342
360
|
contactSidebarDescription:
|
|
343
361
|
"Aparece ao lado da conversa atual com o contexto do contato e do tópico.",
|
|
362
|
+
eventDetailWidget: "Widget de detalhes do evento",
|
|
363
|
+
eventDetailDescription:
|
|
364
|
+
"Aparece abaixo do evento aberto do calendário com o contexto do evento e dos participantes.",
|
|
344
365
|
addWidgetHere: "Adicione widget aqui",
|
|
345
366
|
back: "Voltar",
|
|
346
367
|
editExtension: "Editar extensão",
|
|
@@ -41,6 +41,8 @@ const messages = {
|
|
|
41
41
|
destinations: "Destinations",
|
|
42
42
|
identities: "Identities",
|
|
43
43
|
approvals: "批准",
|
|
44
|
+
automations: "自动化",
|
|
45
|
+
delivery: "投递",
|
|
44
46
|
audit: "Audit",
|
|
45
47
|
dreams: "Dreams",
|
|
46
48
|
threadDebug: "线程调试",
|
|
@@ -150,6 +152,21 @@ const messages = {
|
|
|
150
152
|
activeUsers: "活跃用户",
|
|
151
153
|
workspaceAppsStat: "工作区应用程序",
|
|
152
154
|
chatThreads: "聊天话题",
|
|
155
|
+
also: "还有",
|
|
156
|
+
workspaceShortcutsAria: "工作区快捷入口",
|
|
157
|
+
deliveryQueue: "投递队列",
|
|
158
|
+
failedLastHour: "过去一小时失败 {{count}} 次",
|
|
159
|
+
processingCount: "{{count}} 个处理中",
|
|
160
|
+
queued: "排队中",
|
|
161
|
+
active: "进行中",
|
|
162
|
+
done1h: "完成 1 小时",
|
|
163
|
+
failed1h: "失败 1 小时",
|
|
164
|
+
oldestQueued: "最早排队:{{age}}",
|
|
165
|
+
queueAgeNone: "无",
|
|
166
|
+
queueFailureHint: "请检查凭据、目的地和最近的队列错误。",
|
|
167
|
+
unknownPlatform: "未知",
|
|
168
|
+
attemptsCount: "{{count}} 次尝试",
|
|
169
|
+
noErrorMessage: "(无错误消息)",
|
|
153
170
|
},
|
|
154
171
|
},
|
|
155
172
|
agentPanel: {
|
|
@@ -316,6 +333,9 @@ const messages = {
|
|
|
316
333
|
buildNewWidget: "构建一个新的小部件",
|
|
317
334
|
contactSidebarWidget: "联系侧边栏小部件",
|
|
318
335
|
contactSidebarDescription: "显示在当前对话旁边,包含联系人和线程上下文。",
|
|
336
|
+
eventDetailWidget: "活动详情小部件",
|
|
337
|
+
eventDetailDescription:
|
|
338
|
+
"显示在打开的日历活动下方,包含活动和与会者上下文。",
|
|
319
339
|
addWidgetHere: "在这里添加小部件",
|
|
320
340
|
back: "返回",
|
|
321
341
|
editExtension: "编辑扩展名",
|
|
@@ -41,6 +41,8 @@ const messages = {
|
|
|
41
41
|
destinations: "Destinations",
|
|
42
42
|
identities: "Identities",
|
|
43
43
|
approvals: "核准",
|
|
44
|
+
automations: "自動化",
|
|
45
|
+
delivery: "投遞",
|
|
44
46
|
audit: "Audit",
|
|
45
47
|
dreams: "Dreams",
|
|
46
48
|
threadDebug: "對話串偵錯",
|
|
@@ -148,6 +150,21 @@ const messages = {
|
|
|
148
150
|
activeUsers: "活躍使用者",
|
|
149
151
|
workspaceAppsStat: "工作區應用程式",
|
|
150
152
|
chatThreads: "聊天話題",
|
|
153
|
+
also: "還有",
|
|
154
|
+
workspaceShortcutsAria: "工作區快捷入口",
|
|
155
|
+
deliveryQueue: "投遞佇列",
|
|
156
|
+
failedLastHour: "過去一小時失敗 {{count}} 次",
|
|
157
|
+
processingCount: "{{count}} 個處理中",
|
|
158
|
+
queued: "排隊中",
|
|
159
|
+
active: "進行中",
|
|
160
|
+
done1h: "完成 1 小時",
|
|
161
|
+
failed1h: "失敗 1 小時",
|
|
162
|
+
oldestQueued: "最早排隊:{{age}}",
|
|
163
|
+
queueAgeNone: "無",
|
|
164
|
+
queueFailureHint: "請檢查憑證、目的地和最近的佇列錯誤。",
|
|
165
|
+
unknownPlatform: "未知",
|
|
166
|
+
attemptsCount: "{{count}} 次嘗試",
|
|
167
|
+
noErrorMessage: "(無錯誤訊息)",
|
|
151
168
|
},
|
|
152
169
|
},
|
|
153
170
|
agentPanel: {
|
|
@@ -316,6 +333,8 @@ const messages = {
|
|
|
316
333
|
buildNewWidget: "建置一個新的小工具",
|
|
317
334
|
contactSidebarWidget: "聯絡側邊欄小工具",
|
|
318
335
|
contactSidebarDescription: "顯示在目前對話旁邊,包含聯絡人和對話串脈絡。",
|
|
336
|
+
eventDetailWidget: "活動詳情小工具",
|
|
337
|
+
eventDetailDescription: "顯示在開啟的日曆活動下方,包含活動與出席者脈絡。",
|
|
319
338
|
addWidgetHere: "在這裡新增小工具",
|
|
320
339
|
back: "返回",
|
|
321
340
|
editExtension: "編輯擴充功能名",
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
"@types/node": "^24.2.1",
|
|
32
32
|
"@types/react": "catalog:",
|
|
33
33
|
"@types/react-dom": "catalog:",
|
|
34
|
-
"@typescript/native-preview": "catalog:",
|
|
35
34
|
"class-variance-authority": "^0.7.1",
|
|
36
35
|
"clsx": "^2.1.1",
|
|
37
36
|
"next-themes": "^0.4.6",
|
|
@@ -43,7 +42,8 @@
|
|
|
43
42
|
"tailwind-merge": "^3.5.0",
|
|
44
43
|
"tailwindcss": "^4.1.18",
|
|
45
44
|
"tsx": "^4.20.3",
|
|
46
|
-
"typescript": "
|
|
45
|
+
"typescript": "catalog:",
|
|
46
|
+
"typescript-7": "catalog:",
|
|
47
47
|
"vite": "^8.0.0"
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"agent": "agent-native agent",
|
|
8
8
|
"script": "agent-native script",
|
|
9
9
|
"skills:update": "agent-native skills update scaffold --project",
|
|
10
|
-
"typecheck": "
|
|
10
|
+
"typecheck": "tsc --noEmit"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@agent-native/core": "latest",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@types/node": "^24.2.1",
|
|
19
|
-
"@typescript/native-preview": "catalog:",
|
|
20
19
|
"oxfmt": "catalog:",
|
|
21
20
|
"tsx": "^4.20.3",
|
|
22
|
-
"typescript": "
|
|
21
|
+
"typescript": "catalog:",
|
|
22
|
+
"typescript-7": "catalog:"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
|
-
"build": "
|
|
30
|
-
"dev": "
|
|
31
|
-
"typecheck": "
|
|
32
|
-
"prepare": "
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"dev": "tsc --watch --preserveWatchOutput",
|
|
31
|
+
"typecheck": "tsc --noEmit",
|
|
32
|
+
"prepare": "tsc"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"
|
|
36
|
-
"typescript": "
|
|
35
|
+
"typescript": "catalog:",
|
|
36
|
+
"typescript-7": "catalog:"
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@types/node": "^24.2.1",
|
|
20
|
-
"@typescript/native-preview": "catalog:",
|
|
21
20
|
"oxfmt": "catalog:",
|
|
22
21
|
"tsx": "catalog:",
|
|
23
|
-
"typescript": "
|
|
22
|
+
"typescript": "catalog:",
|
|
23
|
+
"typescript-7": "catalog:"
|
|
24
24
|
},
|
|
25
25
|
"packageManager": "pnpm@10.14.0",
|
|
26
26
|
"agent-native": {
|
|
@@ -414,7 +414,7 @@ async function dispatchAgentic(
|
|
|
414
414
|
(await getStoredModelForEngine(engine, { appId: _deps!.appId })) ??
|
|
415
415
|
engine.defaultModel;
|
|
416
416
|
const model = normalizeModelForEngine(engine, modelCandidate);
|
|
417
|
-
await createThread(jobUserEmail, {
|
|
417
|
+
const thread = await createThread(jobUserEmail, {
|
|
418
418
|
title: `Trigger: ${triggerName} — ${now.toLocaleDateString()}`,
|
|
419
419
|
});
|
|
420
420
|
|
|
@@ -448,9 +448,11 @@ ${body}`;
|
|
|
448
448
|
const timeout = setTimeout(() => controller.abort(), 5 * 60 * 1000);
|
|
449
449
|
|
|
450
450
|
const events: AgentChatEvent[] = [];
|
|
451
|
+
let triggerUsage: Awaited<ReturnType<typeof runAgentLoop>> | null =
|
|
452
|
+
null;
|
|
451
453
|
|
|
452
454
|
try {
|
|
453
|
-
await runAgentLoop({
|
|
455
|
+
triggerUsage = await runAgentLoop({
|
|
454
456
|
engine,
|
|
455
457
|
model,
|
|
456
458
|
systemPrompt,
|
|
@@ -459,11 +461,37 @@ ${body}`;
|
|
|
459
461
|
actions,
|
|
460
462
|
send: (event) => events.push(event),
|
|
461
463
|
signal: controller.signal,
|
|
464
|
+
threadId: thread.id,
|
|
462
465
|
});
|
|
463
466
|
} finally {
|
|
464
467
|
clearTimeout(timeout);
|
|
465
468
|
}
|
|
466
469
|
|
|
470
|
+
if (
|
|
471
|
+
triggerUsage &&
|
|
472
|
+
(triggerUsage.inputTokens > 0 ||
|
|
473
|
+
triggerUsage.outputTokens > 0 ||
|
|
474
|
+
triggerUsage.cacheReadTokens > 0 ||
|
|
475
|
+
triggerUsage.cacheWriteTokens > 0)
|
|
476
|
+
) {
|
|
477
|
+
try {
|
|
478
|
+
const { recordUsage } = await import("../usage/store.js");
|
|
479
|
+
await recordUsage({
|
|
480
|
+
ownerEmail: jobUserEmail,
|
|
481
|
+
inputTokens: triggerUsage.inputTokens,
|
|
482
|
+
outputTokens: triggerUsage.outputTokens,
|
|
483
|
+
cacheReadTokens: triggerUsage.cacheReadTokens,
|
|
484
|
+
cacheWriteTokens: triggerUsage.cacheWriteTokens,
|
|
485
|
+
model: triggerUsage.model,
|
|
486
|
+
label: `automation:${triggerName}`,
|
|
487
|
+
app: _deps!.appId,
|
|
488
|
+
refId: eventMeta.eventId,
|
|
489
|
+
});
|
|
490
|
+
} catch {
|
|
491
|
+
// Usage attribution must not break automation dispatch.
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
467
495
|
meta.lastStatus = "success";
|
|
468
496
|
await resourcePut(
|
|
469
497
|
resource.owner,
|
|
@@ -306,7 +306,7 @@ function findWorkspaceCoreSync(
|
|
|
306
306
|
|
|
307
307
|
function findLocalWorkspacePackageDeps(
|
|
308
308
|
startDir: string,
|
|
309
|
-
|
|
309
|
+
workspaceRoot: string | null,
|
|
310
310
|
): Array<{ packageName: string; packageDir: string }> {
|
|
311
311
|
const pkgPath = path.join(startDir, "package.json");
|
|
312
312
|
if (!fs.existsSync(pkgPath)) return [];
|
|
@@ -329,6 +329,12 @@ function findLocalWorkspacePackageDeps(
|
|
|
329
329
|
let packageJsonPath: string | null = null;
|
|
330
330
|
if (range.startsWith("file:")) {
|
|
331
331
|
packageJsonPath = findFilePackageJsonPath(pkgPath, range);
|
|
332
|
+
} else if (range.startsWith("workspace:")) {
|
|
333
|
+
packageJsonPath = findWorkspacePackageJsonPath(
|
|
334
|
+
pkgPath,
|
|
335
|
+
packageName,
|
|
336
|
+
workspaceRoot,
|
|
337
|
+
);
|
|
332
338
|
} else {
|
|
333
339
|
continue;
|
|
334
340
|
}
|
|
@@ -350,6 +356,93 @@ function findLocalWorkspacePackageDeps(
|
|
|
350
356
|
}
|
|
351
357
|
}
|
|
352
358
|
|
|
359
|
+
function packagePathSegments(packageName: string): string[] {
|
|
360
|
+
return packageName.split("/");
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
function findWorkspacePackageJsonPath(
|
|
364
|
+
pkgPath: string,
|
|
365
|
+
packageName: string,
|
|
366
|
+
workspaceRoot: string | null,
|
|
367
|
+
): string | null {
|
|
368
|
+
const packageSegments = packagePathSegments(packageName);
|
|
369
|
+
const candidates = [
|
|
370
|
+
path.join(path.dirname(pkgPath), "node_modules", ...packageSegments),
|
|
371
|
+
...(workspaceRoot
|
|
372
|
+
? [path.join(workspaceRoot, "node_modules", ...packageSegments)]
|
|
373
|
+
: []),
|
|
374
|
+
];
|
|
375
|
+
|
|
376
|
+
for (const candidate of candidates) {
|
|
377
|
+
const packageJsonPath = path.join(candidate, "package.json");
|
|
378
|
+
if (!fs.existsSync(packageJsonPath)) continue;
|
|
379
|
+
const realPath = fs.realpathSync(packageJsonPath);
|
|
380
|
+
if (
|
|
381
|
+
workspaceRoot &&
|
|
382
|
+
!realPath.startsWith(`${fs.realpathSync(workspaceRoot)}${path.sep}`)
|
|
383
|
+
) {
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
return realPath;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (workspaceRoot) {
|
|
390
|
+
return findWorkspacePackageJsonByName(workspaceRoot, packageName);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
function findWorkspacePackageJsonByName(
|
|
397
|
+
workspaceRoot: string,
|
|
398
|
+
packageName: string,
|
|
399
|
+
): string | null {
|
|
400
|
+
const searchRoots = ["packages", "templates"].map((name) =>
|
|
401
|
+
path.join(workspaceRoot, name),
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
for (const searchRoot of searchRoots) {
|
|
405
|
+
const packageJsonPath = findPackageJsonInTree(searchRoot, packageName, 2);
|
|
406
|
+
if (packageJsonPath) return packageJsonPath;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
function findPackageJsonInTree(
|
|
413
|
+
root: string,
|
|
414
|
+
packageName: string,
|
|
415
|
+
maxDepth: number,
|
|
416
|
+
): string | null {
|
|
417
|
+
if (!fs.existsSync(root)) return null;
|
|
418
|
+
|
|
419
|
+
const packageJsonPath = path.join(root, "package.json");
|
|
420
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
421
|
+
try {
|
|
422
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
423
|
+
if (pkg?.name === packageName) return fs.realpathSync(packageJsonPath);
|
|
424
|
+
} catch {
|
|
425
|
+
// Ignore malformed workspace package metadata.
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
if (maxDepth <= 0) return null;
|
|
430
|
+
|
|
431
|
+
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
|
|
432
|
+
if (!entry.isDirectory()) continue;
|
|
433
|
+
if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
|
|
434
|
+
|
|
435
|
+
const found = findPackageJsonInTree(
|
|
436
|
+
path.join(root, entry.name),
|
|
437
|
+
packageName,
|
|
438
|
+
maxDepth - 1,
|
|
439
|
+
);
|
|
440
|
+
if (found) return found;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
|
|
353
446
|
function findFilePackageJsonPath(
|
|
354
447
|
pkgPath: string,
|
|
355
448
|
range: string,
|
|
@@ -2157,8 +2250,10 @@ function localWorkspacePackageAliases(
|
|
|
2157
2250
|
packages: Array<{ packageName: string; packageDir: string }>,
|
|
2158
2251
|
): any[] {
|
|
2159
2252
|
const aliases: any[] = [];
|
|
2253
|
+
const sourceAliasExcludes = new Set(["@agent-native/pinpoint"]);
|
|
2160
2254
|
|
|
2161
2255
|
for (const { packageName, packageDir } of packages) {
|
|
2256
|
+
if (sourceAliasExcludes.has(packageName)) continue;
|
|
2162
2257
|
const pkgPath = path.join(packageDir, "package.json");
|
|
2163
2258
|
if (!fs.existsSync(pkgPath)) continue;
|
|
2164
2259
|
|
|
@@ -89,8 +89,27 @@ agent answers about browser recordings in the Analytics template.
|
|
|
89
89
|
- The `/sessions/:recordingId` replay player has a Dev Tools toggle that opens
|
|
90
90
|
a panel with Console and Network tabs: filter chips, search, an error-count
|
|
91
91
|
badge, and playback-time highlighting.
|
|
92
|
-
- Rows
|
|
93
|
-
|
|
92
|
+
- Rows expand inline under the selected line (Chrome-style). Expanding a row
|
|
93
|
+
does not seek; use Jump to to move the playhead. Extend this panel instead of
|
|
94
|
+
adding a separate debugging surface.
|
|
95
|
+
|
|
96
|
+
## Playback Viewer
|
|
97
|
+
|
|
98
|
+
- Wait for all replay chunks (`isComplete`) before constructing the rrweb
|
|
99
|
+
`Replayer`. Progressive chunk publishes should only update the loading bar;
|
|
100
|
+
rebuilding the player mid-load desyncs the scrubber and playhead.
|
|
101
|
+
- Prefer the latest sane Meta / ViewportResize frame for stage dimensions.
|
|
102
|
+
Out-of-range aspect ratios are clamped (preserve height, shrink width) before
|
|
103
|
+
handing events to rrweb so the stage does not collapse into an ultra-wide
|
|
104
|
+
ribbon and the recorded DOM stays roughly aligned. Capture also clamps the
|
|
105
|
+
same frames in `@agent-native/core` so new recordings never store absurd
|
|
106
|
+
Meta widths.
|
|
107
|
+
- The event timeline soft-highlights the active marker, auto-scrolls it into
|
|
108
|
+
view (pausing briefly after manual scroll), and supports search. It appears
|
|
109
|
+
beside the player from ~880px content width upward.
|
|
110
|
+
- Dev Tools height is capped so the replay stage never collapses into a ribbon
|
|
111
|
+
on short viewports; the scrubber playhead stays visually distinct from red
|
|
112
|
+
error marker dots.
|
|
94
113
|
|
|
95
114
|
## Debugging A User-Reported Bug
|
|
96
115
|
|
|
@@ -337,23 +337,33 @@
|
|
|
337
337
|
opacity: 0.55;
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
+
/* Keep the playhead visually distinct from red console-error marker dots on
|
|
341
|
+
the scrubber track — those markers used to look like a second thumb. */
|
|
340
342
|
.an-replay-scrub::-webkit-slider-thumb {
|
|
341
|
-
width: 0.
|
|
342
|
-
height: 0.
|
|
343
|
+
width: 0.875rem;
|
|
344
|
+
height: 0.875rem;
|
|
343
345
|
appearance: none;
|
|
344
346
|
border: 2px solid hsl(var(--background));
|
|
345
347
|
border-radius: 9999px;
|
|
346
|
-
background: hsl(
|
|
347
|
-
box-shadow:
|
|
348
|
+
background: hsl(217 91% 60%);
|
|
349
|
+
box-shadow:
|
|
350
|
+
0 0 0 1px hsl(217 91% 60% / 0.55),
|
|
351
|
+
0 1px 2px hsl(0 0% 0% / 0.35);
|
|
352
|
+
position: relative;
|
|
353
|
+
z-index: 40;
|
|
348
354
|
}
|
|
349
355
|
|
|
350
356
|
.an-replay-scrub::-moz-range-thumb {
|
|
351
|
-
width: 0.
|
|
352
|
-
height: 0.
|
|
357
|
+
width: 0.875rem;
|
|
358
|
+
height: 0.875rem;
|
|
353
359
|
border: 2px solid hsl(var(--background));
|
|
354
360
|
border-radius: 9999px;
|
|
355
|
-
background: hsl(
|
|
356
|
-
box-shadow:
|
|
361
|
+
background: hsl(217 91% 60%);
|
|
362
|
+
box-shadow:
|
|
363
|
+
0 0 0 1px hsl(217 91% 60% / 0.55),
|
|
364
|
+
0 1px 2px hsl(0 0% 0% / 0.35);
|
|
365
|
+
position: relative;
|
|
366
|
+
z-index: 40;
|
|
357
367
|
}
|
|
358
368
|
|
|
359
369
|
.dark
|
|
@@ -570,9 +580,9 @@
|
|
|
570
580
|
}
|
|
571
581
|
}
|
|
572
582
|
|
|
573
|
-
@container analytics-session-detail (min-width:
|
|
583
|
+
@container analytics-session-detail (min-width: 880px) {
|
|
574
584
|
.analytics-session-detail-workbench {
|
|
575
|
-
grid-template-columns: minmax(0, 1fr)
|
|
585
|
+
grid-template-columns: minmax(0, 1fr) minmax(260px, 300px);
|
|
576
586
|
}
|
|
577
587
|
|
|
578
588
|
.analytics-session-detail-timeline {
|
|
@@ -580,6 +590,12 @@
|
|
|
580
590
|
}
|
|
581
591
|
}
|
|
582
592
|
|
|
593
|
+
@container analytics-session-detail (min-width: 1200px) {
|
|
594
|
+
.analytics-session-detail-workbench {
|
|
595
|
+
grid-template-columns: minmax(0, 1fr) 330px;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
583
599
|
/* The dashboard grid responds to the available content width — which shrinks
|
|
584
600
|
when the agent sidebar is open — not the viewport. Rows are rendered
|
|
585
601
|
explicitly so deleting a card only expands the remaining cards in that row. */
|
|
@@ -964,6 +964,8 @@ const messages = {
|
|
|
964
964
|
timeline: "事件時間線",
|
|
965
965
|
replayTimeline: "回放時間線",
|
|
966
966
|
timelineDescription: "顯示 {{count}} / {{total}} 個有用事件。",
|
|
967
|
+
timelineSearch: "搜尋事件...",
|
|
968
|
+
timelineNoMatches: "沒有符合目前搜尋的時間線事件。",
|
|
967
969
|
noTimelineEvents: "未找到時間線標記",
|
|
968
970
|
sequence: "Sequence",
|
|
969
971
|
size: "Size",
|