@agent-native/core 0.114.5 → 0.114.7

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.
Files changed (210) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +14 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/cli/mcp-config-writers.ts +6 -4
  5. package/corpus/core/src/cli/mcp.ts +124 -0
  6. package/corpus/core/src/cli/skills-content/help.ts +4 -3
  7. package/corpus/core/src/cli/skills-content/index.ts +1 -0
  8. package/corpus/core/src/cli/skills-content/rewind-skill.ts +52 -0
  9. package/corpus/core/src/cli/skills.ts +115 -13
  10. package/corpus/core/src/client/resources/ResourceTree.tsx +11 -5
  11. package/corpus/core/src/client/resources/ResourcesPanel.tsx +141 -18
  12. package/corpus/core/src/mcp/screen-memory-stdio.ts +1360 -104
  13. package/corpus/core/src/mcp-client/index.ts +9 -0
  14. package/corpus/core/src/mcp-client/screen-memory-local.ts +847 -13
  15. package/corpus/templates/clips/actions/apply-rewind-extension.ts +195 -0
  16. package/corpus/templates/clips/actions/delete-agent-recording-if-unpromoted.ts +64 -0
  17. package/corpus/templates/clips/actions/get-rewind-extension-request.ts +22 -0
  18. package/corpus/templates/clips/actions/get-screen-memory-status.ts +18 -2
  19. package/corpus/templates/clips/actions/list-rewind-extension-requests.ts +52 -0
  20. package/corpus/templates/clips/actions/make-recording-private-for-rewind.ts +55 -0
  21. package/corpus/templates/clips/actions/query-screen-memory-context.ts +4 -4
  22. package/corpus/templates/clips/actions/request-rewind-extension.ts +81 -0
  23. package/corpus/templates/clips/actions/update-rewind-extension-request.ts +47 -0
  24. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +25 -0
  25. package/corpus/templates/clips/app/components/editor/editor-toolbar.tsx +36 -0
  26. package/corpus/templates/clips/app/components/editor/rewind-extension-dialog.tsx +338 -0
  27. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +1 -16
  28. package/corpus/templates/clips/app/components/editor/timeline.tsx +26 -0
  29. package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +1 -2
  30. package/corpus/templates/clips/app/i18n/en-US.ts +18 -0
  31. package/corpus/templates/clips/app/lib/ffmpeg-export.ts +19 -12
  32. package/corpus/templates/clips/app/lib/rewind-visibility.ts +31 -0
  33. package/corpus/templates/clips/app/lib/timestamp-mapping.ts +7 -0
  34. package/corpus/templates/clips/app/lib/upload-file-client.ts +17 -0
  35. package/corpus/templates/clips/changelog/2026-07-14-rewind-keeps-recent-screen-context-local-and-turns-it-into-clips.md +6 -0
  36. package/corpus/templates/clips/changelog/2026-07-17-active-clips-keep-rewind-stable-and-settings-clear.md +12 -0
  37. package/corpus/templates/clips/changelog/2026-07-17-clicking-the-clips-icon-during-a-recording-now-opens-the-app.md +6 -0
  38. package/corpus/templates/clips/changelog/2026-07-17-default-mic-now-uses-the-mac-default-and-transcription-shares-one-capture.md +6 -0
  39. package/corpus/templates/clips/changelog/2026-07-17-full-screen-clips-finalize-even-when-screencapturekit-stop-hangs.md +6 -0
  40. package/corpus/templates/clips/changelog/2026-07-17-normal-full-screen-clips-no-longer-stop-immediately-after-th.md +6 -0
  41. package/corpus/templates/clips/changelog/2026-07-17-rewind-can-hand-one-bounded-private-clip-to-your-agent.md +12 -0
  42. package/corpus/templates/clips/changelog/2026-07-17-rewind-home-can-copy-a-local-agent-prompt.md +6 -0
  43. package/corpus/templates/clips/changelog/2026-07-17-rewind-now-has-a-calm-home-status-focused-first-run-consent-.md +6 -0
  44. package/corpus/templates/clips/changelog/2026-07-17-rewind-settings-are-smaller-clearer-and-agent-first.md +6 -0
  45. package/corpus/templates/clips/changelog/2026-07-17-the-full-clips-interface-stays-available-while-recording.md +6 -0
  46. package/corpus/templates/clips/changelog/2026-07-18-rewind-organizes-recent-work-into-local-searchable-chapters.md +8 -0
  47. package/corpus/templates/clips/changelog/2026-07-18-searchable-rewind-chapters.md +6 -0
  48. package/corpus/templates/clips/changelog/2026-07-19-rewind-backed-recordings-now-start-immediately-after-the-cou.md +6 -0
  49. package/corpus/templates/clips/changelog/2026-07-20-opening-zoom-meeting-launches-native-app.md +6 -0
  50. package/corpus/templates/clips/changelog/2026-07-20-rewind-can-set-up-your-local-agent-once-so-future-requests-w.md +6 -0
  51. package/corpus/templates/clips/desktop/package.json +1 -0
  52. package/corpus/templates/clips/desktop/scripts/sign-macos-local.ts +12 -1
  53. package/corpus/templates/clips/desktop/src/app.tsx +2478 -223
  54. package/corpus/templates/clips/desktop/src/components/ReadinessPanel.tsx +21 -1
  55. package/corpus/templates/clips/desktop/src/components/Switch.tsx +3 -0
  56. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +156 -24
  57. package/corpus/templates/clips/desktop/src/lib/native-recording-warm.ts +6 -7
  58. package/corpus/templates/clips/desktop/src/lib/open-meeting-join-url.ts +22 -0
  59. package/corpus/templates/clips/desktop/src/lib/recorder.ts +1763 -1160
  60. package/corpus/templates/clips/desktop/src/lib/rewind-agent-prompt.ts +9 -0
  61. package/corpus/templates/clips/desktop/src/lib/rewind-recording-start.ts +20 -0
  62. package/corpus/templates/clips/desktop/src/main.tsx +3 -0
  63. package/corpus/templates/clips/desktop/src/overlays/countdown.tsx +14 -14
  64. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +2 -3
  65. package/corpus/templates/clips/desktop/src/overlays/onboarding.tsx +4 -4
  66. package/corpus/templates/clips/desktop/src/overlays/preparing.tsx +13 -0
  67. package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +27 -2
  68. package/corpus/templates/clips/desktop/src/shared/config.ts +16 -0
  69. package/corpus/templates/clips/desktop/src/styles.css +956 -134
  70. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +5 -0
  71. package/corpus/templates/clips/desktop/src-tauri/build.rs +69 -1
  72. package/corpus/templates/clips/desktop/src-tauri/src/accessibility.rs +386 -12
  73. package/corpus/templates/clips/desktop/src-tauri/src/capture_audio_bus.rs +382 -0
  74. package/corpus/templates/clips/desktop/src-tauri/src/capture_graph.rs +777 -0
  75. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +249 -22
  76. package/corpus/templates/clips/desktop/src-tauri/src/config.rs +148 -1
  77. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +58 -4
  78. package/corpus/templates/clips/desktop/src-tauri/src/logfile.rs +13 -1
  79. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +1505 -51
  80. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +124 -0
  81. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1006 -95
  82. package/corpus/templates/clips/desktop/src-tauri/src/rewind_capture_suspension.rs +165 -0
  83. package/corpus/templates/clips/desktop/src-tauri/src/rewind_chapters.rs +2434 -0
  84. package/corpus/templates/clips/desktop/src-tauri/src/rewind_clip.rs +1650 -0
  85. package/corpus/templates/clips/desktop/src-tauri/src/rewind_egress.rs +643 -0
  86. package/corpus/templates/clips/desktop/src-tauri/src/rewind_local_ask.rs +803 -0
  87. package/corpus/templates/clips/desktop/src-tauri/src/rewind_meeting_history.rs +595 -0
  88. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +2900 -91
  89. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory_ocr.rs +360 -0
  90. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory_transcript.rs +408 -0
  91. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +114 -33
  92. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +2 -2
  93. package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +13 -3
  94. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +4 -1
  95. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +7 -13
  96. package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +198 -11
  97. package/corpus/templates/clips/desktop/src-tauri/tauri.alpha.conf.json +17 -0
  98. package/corpus/templates/clips/shared/meeting-join-url.ts +0 -5
  99. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +9 -1
  100. package/corpus/templates/content/AGENTS.md +4 -1
  101. package/corpus/templates/content/actions/_content-spaces.ts +6 -1
  102. package/corpus/templates/content/actions/_database-row-batch.ts +15 -2
  103. package/corpus/templates/content/actions/_database-utils.ts +83 -15
  104. package/corpus/templates/content/actions/add-database-item.ts +3 -0
  105. package/corpus/templates/content/actions/connect-local-folder-source.ts +2 -1
  106. package/corpus/templates/content/actions/delete-content-database.ts +12 -9
  107. package/corpus/templates/content/actions/delete-database-items.ts +3 -2
  108. package/corpus/templates/content/actions/delete-document.ts +233 -6
  109. package/corpus/templates/content/actions/duplicate-database-item.ts +1 -0
  110. package/corpus/templates/content/actions/get-document.ts +4 -1
  111. package/corpus/templates/content/actions/list-content-databases.ts +1 -0
  112. package/corpus/templates/content/actions/list-documents.ts +1 -0
  113. package/corpus/templates/content/actions/list-trashed-content-databases.ts +8 -2
  114. package/corpus/templates/content/actions/list-trashed-documents.ts +50 -0
  115. package/corpus/templates/content/actions/permanently-delete-document.ts +28 -0
  116. package/corpus/templates/content/actions/pull-document.ts +15 -2
  117. package/corpus/templates/content/actions/restore-content-database.ts +48 -11
  118. package/corpus/templates/content/actions/restore-document.ts +28 -0
  119. package/corpus/templates/content/actions/search-documents.ts +2 -1
  120. package/corpus/templates/content/actions/view-screen.ts +2 -1
  121. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +149 -55
  122. package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +7 -2
  123. package/corpus/templates/content/app/components/editor/database/ListView.tsx +7 -2
  124. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +3 -0
  125. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +26 -5
  126. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +243 -163
  127. package/corpus/templates/content/app/components/sidebar/WorkspaceSourceMenu.tsx +154 -0
  128. package/corpus/templates/content/app/components/sidebar/select-content-space.ts +11 -0
  129. package/corpus/templates/content/app/hooks/use-content-database.ts +6 -0
  130. package/corpus/templates/content/app/hooks/use-documents.ts +57 -0
  131. package/corpus/templates/content/app/i18n-data.ts +83 -2
  132. package/corpus/templates/content/app/routes/_app.local-files.tsx +8 -1
  133. package/corpus/templates/content/changelog/2026-07-19-pages-now-move-to-a-reversible-trash-and-the-organization-pi.md +6 -0
  134. package/corpus/templates/content/changelog/2026-07-20-trash-actions-now-preserve-independent-archived-pages-enforc.md +6 -0
  135. package/corpus/templates/content/changelog/2026-07-20-workspace-toggles-now-stay-independently-open-or-closed-and-.md +6 -0
  136. package/corpus/templates/content/changelog/2026-07-20-workspaces-can-be-added-from-a-blank-workspace-or-a-connecte.md +6 -0
  137. package/corpus/templates/content/parity/matrix.md +1 -1
  138. package/corpus/templates/content/parity/matrix.ts +3 -0
  139. package/corpus/templates/content/server/db/schema.ts +2 -0
  140. package/corpus/templates/content/server/lib/public-documents.ts +8 -2
  141. package/corpus/templates/content/server/plugins/db.ts +52 -0
  142. package/corpus/templates/content/server/routes/api/document-agent-context.json.get.ts +2 -2
  143. package/corpus/templates/content/shared/api.ts +10 -0
  144. package/corpus/toolkit/CHANGELOG.md +6 -0
  145. package/corpus/toolkit/package.json +1 -1
  146. package/corpus/toolkit/src/ui/progress.tsx +3 -2
  147. package/dist/cli/mcp-config-writers.d.ts +2 -2
  148. package/dist/cli/mcp-config-writers.d.ts.map +1 -1
  149. package/dist/cli/mcp-config-writers.js +6 -6
  150. package/dist/cli/mcp-config-writers.js.map +1 -1
  151. package/dist/cli/mcp.d.ts +14 -0
  152. package/dist/cli/mcp.d.ts.map +1 -1
  153. package/dist/cli/mcp.js +79 -0
  154. package/dist/cli/mcp.js.map +1 -1
  155. package/dist/cli/skills-content/help.d.ts +1 -1
  156. package/dist/cli/skills-content/help.d.ts.map +1 -1
  157. package/dist/cli/skills-content/help.js +4 -3
  158. package/dist/cli/skills-content/help.js.map +1 -1
  159. package/dist/cli/skills-content/index.d.ts +1 -0
  160. package/dist/cli/skills-content/index.d.ts.map +1 -1
  161. package/dist/cli/skills-content/index.js +1 -0
  162. package/dist/cli/skills-content/index.js.map +1 -1
  163. package/dist/cli/skills-content/rewind-skill.d.ts +2 -0
  164. package/dist/cli/skills-content/rewind-skill.d.ts.map +1 -0
  165. package/dist/cli/skills-content/rewind-skill.js +53 -0
  166. package/dist/cli/skills-content/rewind-skill.js.map +1 -0
  167. package/dist/cli/skills.d.ts +6 -0
  168. package/dist/cli/skills.d.ts.map +1 -1
  169. package/dist/cli/skills.js +90 -14
  170. package/dist/cli/skills.js.map +1 -1
  171. package/dist/client/resources/ResourceTree.d.ts +3 -1
  172. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  173. package/dist/client/resources/ResourceTree.js +4 -4
  174. package/dist/client/resources/ResourceTree.js.map +1 -1
  175. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  176. package/dist/client/resources/ResourcesPanel.js +55 -6
  177. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  178. package/dist/collab/routes.d.ts +1 -1
  179. package/dist/collab/struct-routes.d.ts +1 -1
  180. package/dist/mcp/screen-memory-stdio.d.ts +365 -0
  181. package/dist/mcp/screen-memory-stdio.d.ts.map +1 -1
  182. package/dist/mcp/screen-memory-stdio.js +1014 -91
  183. package/dist/mcp/screen-memory-stdio.js.map +1 -1
  184. package/dist/mcp-client/index.d.ts +1 -1
  185. package/dist/mcp-client/index.d.ts.map +1 -1
  186. package/dist/mcp-client/index.js +1 -1
  187. package/dist/mcp-client/index.js.map +1 -1
  188. package/dist/mcp-client/screen-memory-local.d.ts +90 -0
  189. package/dist/mcp-client/screen-memory-local.d.ts.map +1 -1
  190. package/dist/mcp-client/screen-memory-local.js +590 -12
  191. package/dist/mcp-client/screen-memory-local.js.map +1 -1
  192. package/dist/notifications/routes.d.ts +2 -2
  193. package/dist/observability/routes.d.ts +5 -5
  194. package/dist/progress/routes.d.ts +1 -1
  195. package/dist/provider-api/actions/provider-api.d.ts +4 -4
  196. package/dist/resources/handlers.d.ts +1 -1
  197. package/dist/secrets/routes.d.ts +9 -9
  198. package/dist/server/transcribe-voice.d.ts +1 -1
  199. package/package.json +2 -2
  200. package/src/cli/mcp-config-writers.ts +6 -4
  201. package/src/cli/mcp.ts +124 -0
  202. package/src/cli/skills-content/help.ts +4 -3
  203. package/src/cli/skills-content/index.ts +1 -0
  204. package/src/cli/skills-content/rewind-skill.ts +52 -0
  205. package/src/cli/skills.ts +115 -13
  206. package/src/client/resources/ResourceTree.tsx +11 -5
  207. package/src/client/resources/ResourcesPanel.tsx +141 -18
  208. package/src/mcp/screen-memory-stdio.ts +1360 -104
  209. package/src/mcp-client/index.ts +9 -0
  210. package/src/mcp-client/screen-memory-local.ts +847 -13
@@ -6,6 +6,8 @@
6
6
 
7
7
  mod accessibility;
8
8
  mod adhoc_meetings_watcher;
9
+ mod capture_audio_bus;
10
+ mod capture_graph;
9
11
  mod clips;
10
12
  mod config;
11
13
  mod debug;
@@ -18,7 +20,15 @@ mod notifications;
18
20
  mod permission_status;
19
21
  mod recording_indicator;
20
22
  mod remote_flags;
23
+ mod rewind_capture_suspension;
24
+ mod rewind_chapters;
25
+ mod rewind_clip;
26
+ mod rewind_egress;
27
+ mod rewind_local_ask;
28
+ mod rewind_meeting_history;
21
29
  mod screen_memory;
30
+ mod screen_memory_ocr;
31
+ mod screen_memory_transcript;
22
32
  mod sentry_report;
23
33
  mod shortcuts;
24
34
  mod silence_detector;
@@ -39,7 +49,7 @@ use state::{
39
49
  };
40
50
  use util::{
41
51
  configure_overlay_behavior, is_recording_active, present_interactive_window,
42
- set_capture_included,
52
+ set_capture_excluded,
43
53
  };
44
54
 
45
55
  // Embedded fallback icon — a tiny 16x16 solid purple PNG so the binary always
@@ -50,7 +60,7 @@ pub(crate) const TRAY_PNG: &[u8] = include_bytes!("../icons/tray.png");
50
60
 
51
61
  fn present_popover(app: &tauri::AppHandle) {
52
62
  if let Some(window) = app.get_webview_window("popover") {
53
- set_capture_included(&window);
63
+ set_capture_excluded(&window);
54
64
  configure_overlay_behavior(&window);
55
65
  position_popover(app, &window);
56
66
  present_interactive_window(&window);
@@ -71,6 +81,9 @@ pub fn run() {
71
81
  .invoke_handler(tauri::generate_handler![
72
82
  // clips commands
73
83
  clips::show_countdown,
84
+ clips::finish_countdown_shortcuts,
85
+ clips::show_preparing,
86
+ clips::hide_preparing,
74
87
  clips::show_finalizing,
75
88
  clips::hide_finalizing,
76
89
  clips::show_toolbar,
@@ -88,6 +101,8 @@ pub fn run() {
88
101
  clips::show_popover,
89
102
  clips::park_popover_offscreen,
90
103
  clips::open_macos_privacy_settings,
104
+ clips::choose_rewind_excluded_apps,
105
+ clips::resolve_rewind_excluded_apps,
91
106
  clips::open_local_recording_folder,
92
107
  clips::request_macos_screen_recording_access,
93
108
  clips::resize_popover,
@@ -142,6 +157,7 @@ pub fn run() {
142
157
  native_screen::native_fullscreen_pending_uploads,
143
158
  native_screen::native_fullscreen_recording_retry_upload,
144
159
  native_screen::native_fullscreen_recording_mark_upload_error,
160
+ native_screen::native_fullscreen_recording_clear_upload,
145
161
  native_screen::native_fullscreen_recording_dismiss_upload,
146
162
  native_screen::native_fullscreen_open_drafts_folder,
147
163
  // local-only always-on screen memory compatibility helpers
@@ -149,6 +165,36 @@ pub fn run() {
149
165
  screen_memory::screen_memory_delete_all,
150
166
  screen_memory::screen_memory_export_recent,
151
167
  screen_memory::screen_memory_open_folder,
168
+ screen_memory::screen_memory_install_agent_connection,
169
+ screen_memory::screen_memory_next_agent_handoff,
170
+ screen_memory::screen_memory_update_agent_handoff,
171
+ screen_memory::screen_memory_due_agent_handoffs,
172
+ screen_memory::screen_memory_mark_agent_handoff_deleted,
173
+ screen_memory::screen_memory_cancel_agent_handoff_cleanup,
174
+ // local-only Rewind evidence policy gate and egress audit trail
175
+ rewind_egress::rewind_prepare_evidence_egress,
176
+ rewind_egress::rewind_complete_evidence_egress,
177
+ rewind_egress::rewind_fail_evidence_egress,
178
+ rewind_egress::rewind_list_evidence_egress,
179
+ rewind_local_ask::rewind_local_ask,
180
+ rewind_local_ask::rewind_replay_moment,
181
+ rewind_meeting_history::rewind_meeting_history_status,
182
+ rewind_meeting_history::rewind_meeting_history_prepare,
183
+ rewind_meeting_history::rewind_meeting_history_collect,
184
+ rewind_meeting_history::rewind_meeting_history_cancel,
185
+ rewind_clip::rewind_clip_status,
186
+ rewind_clip::rewind_clip_prepare,
187
+ rewind_clip::rewind_clip_start,
188
+ rewind_clip::rewind_clip_extend,
189
+ rewind_clip::rewind_clip_pause,
190
+ rewind_clip::rewind_clip_resume,
191
+ rewind_clip::rewind_clip_stop_and_upload,
192
+ rewind_clip::rewind_clip_stop_and_save,
193
+ rewind_clip::rewind_clip_cancel,
194
+ rewind_clip::rewind_agent_handoff_upload,
195
+ rewind_clip::rewind_agent_handoff_preview,
196
+ rewind_capture_suspension::rewind_capture_suspension_acquire,
197
+ rewind_capture_suspension::rewind_capture_suspension_release,
152
198
  // recording indicator pill
153
199
  recording_indicator::recording_pill_show,
154
200
  recording_indicator::recording_pill_expand,
@@ -221,6 +267,10 @@ pub fn run() {
221
267
  .manage(LastTranscript::default())
222
268
  .manage(native_screen::NativeFullscreenRecordingState::default())
223
269
  .manage(screen_memory::ScreenMemoryState::default())
270
+ .manage(capture_graph::CaptureGraphState::default())
271
+ .manage(rewind_clip::RewindClipState::default())
272
+ .manage(rewind_meeting_history::RewindMeetingHistoryState::default())
273
+ .manage(rewind_capture_suspension::RewindCaptureSuspensionState::default())
224
274
  .manage(meetings_watcher::MeetingsWatcherState::default())
225
275
  .manage(adhoc_meetings_watcher::AdhocMeetingsWatcherState::default())
226
276
  .manage(notifications::MeetingNotificationState::default())
@@ -292,8 +342,8 @@ pub fn run() {
292
342
  // toggle is off).
293
343
  clips::reconcile_region_guides(app.handle());
294
344
  shortcuts::register_shortcuts(app)?;
345
+ shortcuts::install_countdown_local_key_monitor(app);
295
346
  shortcuts::install_popover_dismiss_handler(app);
296
- shortcuts::install_countdown_shortcut_handler(app);
297
347
 
298
348
  // Spawn the upcoming-meetings poller. Idempotent — gated by a
299
349
  // OnceLock inside `spawn_watcher`. The frontend wires the
@@ -417,7 +467,11 @@ pub fn run() {
417
467
  // Reopen is macOS-only — gated behind cfg so Windows compiles.
418
468
  #[cfg(target_os = "macos")]
419
469
  if let tauri::RunEvent::Reopen { .. } = _event {
420
- toggle_popover(_app_handle);
470
+ if is_recording_active(_app_handle) {
471
+ clips::force_show_popover(_app_handle);
472
+ } else {
473
+ toggle_popover(_app_handle);
474
+ }
421
475
  }
422
476
  // `app.exit()` (tray Quit, Cmd+Q, OS shutdown) delivers
423
477
  // `ExitRequested` first, then `Exit` unless prevented. A live
@@ -114,7 +114,19 @@ fn rotate_if_needed(path: &Path) {
114
114
 
115
115
  fn append_line(path: &Path, line: &str) {
116
116
  if let Ok(mut file) = OpenOptions::new().create(true).append(true).open(path) {
117
- let _ = writeln!(file, "{} {line}", timestamp());
117
+ // One append syscall keeps direct diagnostics from interleaving with
118
+ // the webview/stdout log pump at the character level.
119
+ let record = format!("{} {line}\n", timestamp());
120
+ let _ = file.write_all(record.as_bytes());
121
+ }
122
+ }
123
+
124
+ /// Write one native diagnostic directly to the persistent log. Unlike
125
+ /// `eprintln!`, this also works in debug-signed Alpha builds where stdout and
126
+ /// stderr intentionally remain attached to the launching terminal.
127
+ pub(crate) fn diagnostic(line: &str) {
128
+ if let Some(path) = log_path() {
129
+ append_line(&path, line);
118
130
  }
119
131
  }
120
132