@agent-native/core 0.90.9 → 0.90.10

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 (98) hide show
  1. package/README.md +7 -28
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +10 -0
  4. package/corpus/core/docs/content/agent-native-toolkit.mdx +1 -1
  5. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +1 -1
  6. package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +3 -3
  7. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +1 -1
  8. package/corpus/core/docs/content/locales/de-DE/tracking.mdx +3 -3
  9. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +1 -1
  10. package/corpus/core/docs/content/locales/es-ES/tracking.mdx +3 -3
  11. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +1 -1
  12. package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +3 -3
  13. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +1 -1
  14. package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +3 -3
  15. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +1 -1
  16. package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +3 -3
  17. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +1 -1
  18. package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +3 -3
  19. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +1 -1
  20. package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +3 -3
  21. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +1 -1
  22. package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +3 -3
  23. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +1 -1
  24. package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +3 -3
  25. package/corpus/core/docs/content/tracking.mdx +3 -3
  26. package/corpus/core/package.json +1 -1
  27. package/corpus/core/src/agent/production-agent.ts +15 -4
  28. package/corpus/core/src/client/analytics.ts +17 -3
  29. package/corpus/core/src/client/blocks/library/wireframe-kit.tsx +3 -1
  30. package/corpus/core/src/client/blocks/library/wireframe.tsx +6 -1
  31. package/corpus/core/src/file-upload/builder.ts +10 -23
  32. package/corpus/core/src/file-upload/types.ts +3 -3
  33. package/corpus/core/src/styles/blocks.css +7 -0
  34. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +9 -4
  35. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +21 -7
  36. package/corpus/templates/analytics/app/entry.client.tsx +6 -1
  37. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +1 -1
  38. package/corpus/templates/analytics/changelog/2026-07-07-analytics-now-recovers-from-stale-route-chunks-after-deploys.md +6 -0
  39. package/corpus/templates/analytics/changelog/2026-07-07-metric-dashboard-cards-now-show-warehouse-backed-numeric-val.md +6 -0
  40. package/corpus/templates/clips/actions/create-recording.ts +1 -1
  41. package/corpus/templates/clips/actions/finalize-recording.ts +2 -2
  42. package/corpus/templates/clips/actions/import-loom-recording.ts +1 -1
  43. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -1
  44. package/corpus/templates/clips/changelog/2026-07-07-clip-video-uploads-now-compress-in-the-background-while-keeping.md +6 -0
  45. package/corpus/templates/clips/changelog/2026-07-07-desktop-settings-and-fn-dictation-are-more-reliable.md +6 -0
  46. package/corpus/templates/clips/changelog/2026-07-07-desktop-settings-now-includes-a-manual-update-check-with-res.md +6 -0
  47. package/corpus/templates/clips/desktop/src/app.tsx +95 -8
  48. package/corpus/templates/clips/desktop/src/lib/updater.ts +60 -43
  49. package/corpus/templates/clips/desktop/src/styles.css +5 -0
  50. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +93 -23
  51. package/corpus/templates/dispatch/changelog/2026-07-07-overview-is-now-just-ask-dispatch-and-a-list-of-apps.md +6 -0
  52. package/dist/agent/production-agent.d.ts.map +1 -1
  53. package/dist/agent/production-agent.js +16 -3
  54. package/dist/agent/production-agent.js.map +1 -1
  55. package/dist/client/analytics.d.ts.map +1 -1
  56. package/dist/client/analytics.js +14 -3
  57. package/dist/client/analytics.js.map +1 -1
  58. package/dist/client/blocks/library/wireframe-kit.d.ts +1 -0
  59. package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
  60. package/dist/client/blocks/library/wireframe-kit.js +2 -1
  61. package/dist/client/blocks/library/wireframe-kit.js.map +1 -1
  62. package/dist/client/blocks/library/wireframe.d.ts.map +1 -1
  63. package/dist/client/blocks/library/wireframe.js +6 -1
  64. package/dist/client/blocks/library/wireframe.js.map +1 -1
  65. package/dist/collab/routes.d.ts +1 -1
  66. package/dist/file-upload/builder.d.ts.map +1 -1
  67. package/dist/file-upload/builder.js +9 -19
  68. package/dist/file-upload/builder.js.map +1 -1
  69. package/dist/file-upload/types.d.ts +3 -3
  70. package/dist/file-upload/types.d.ts.map +1 -1
  71. package/dist/file-upload/types.js.map +1 -1
  72. package/dist/observability/routes.d.ts +5 -5
  73. package/dist/progress/routes.d.ts +1 -1
  74. package/dist/secrets/routes.d.ts +3 -3
  75. package/dist/styles/blocks.css +7 -0
  76. package/docs/content/agent-native-toolkit.mdx +1 -1
  77. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +1 -1
  78. package/docs/content/locales/ar-SA/tracking.mdx +3 -3
  79. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +1 -1
  80. package/docs/content/locales/de-DE/tracking.mdx +3 -3
  81. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +1 -1
  82. package/docs/content/locales/es-ES/tracking.mdx +3 -3
  83. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +1 -1
  84. package/docs/content/locales/fr-FR/tracking.mdx +3 -3
  85. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +1 -1
  86. package/docs/content/locales/hi-IN/tracking.mdx +3 -3
  87. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +1 -1
  88. package/docs/content/locales/ja-JP/tracking.mdx +3 -3
  89. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +1 -1
  90. package/docs/content/locales/ko-KR/tracking.mdx +3 -3
  91. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +1 -1
  92. package/docs/content/locales/pt-BR/tracking.mdx +3 -3
  93. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +1 -1
  94. package/docs/content/locales/zh-CN/tracking.mdx +3 -3
  95. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +1 -1
  96. package/docs/content/locales/zh-TW/tracking.mdx +3 -3
  97. package/docs/content/tracking.mdx +3 -3
  98. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-07
4
+ ---
5
+
6
+ Desktop settings stay out of the server URL field on open, and Fn dictation recovers when macOS disables its Input Monitoring tap.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-07
4
+ ---
5
+
6
+ Desktop settings now include a manual update check with restart status.
@@ -81,7 +81,14 @@ import {
81
81
  saveBool,
82
82
  saveString,
83
83
  } from "./lib/storage";
84
- import { installAndRestart, isUpdatePendingRestart } from "./lib/updater";
84
+ import {
85
+ canCheckForUpdates,
86
+ installAndRestart,
87
+ isUpdatePendingRestart,
88
+ retryUpdateCheck,
89
+ useUpdateStatus,
90
+ type UpdateStatus,
91
+ } from "./lib/updater";
85
92
  import { normalizeServerUrl } from "./lib/url";
86
93
  import {
87
94
  installDesktopVoiceDictation,
@@ -3521,6 +3528,25 @@ function formatStorageBytes(bytes: number): string {
3521
3528
  return `${Math.max(1, Math.round(mb))} MB`;
3522
3529
  }
3523
3530
 
3531
+ function desktopUpdateStatusText(status: UpdateStatus): string {
3532
+ switch (status.state) {
3533
+ case "idle":
3534
+ return "Clips checks automatically after launch and every 4 hours.";
3535
+ case "checking":
3536
+ return "Checking for updates...";
3537
+ case "not-available":
3538
+ return "Clips is up to date.";
3539
+ case "available":
3540
+ return `Update ${status.version} found. Downloading now...`;
3541
+ case "downloading":
3542
+ return `Downloading update ${status.version}... ${status.percent}%`;
3543
+ case "downloaded":
3544
+ return `Update ${status.version} is ready. Restart to install it.`;
3545
+ case "error":
3546
+ return `Update check failed: ${status.message}`;
3547
+ }
3548
+ }
3549
+
3524
3550
  function Setup({
3525
3551
  initial,
3526
3552
  serverUrl,
@@ -3568,8 +3594,8 @@ function Setup({
3568
3594
  }) {
3569
3595
  const [url, setUrl] = useState(initial ?? DEFAULT_URL);
3570
3596
  const [readinessOpen, setReadinessOpen] = useState(false);
3571
- const inputRef = useRef<HTMLInputElement | null>(null);
3572
3597
  const featureConfig = useFeatureConfig();
3598
+ const updateStatus = useUpdateStatus();
3573
3599
  const voiceEnabled = featureConfig?.voiceEnabled !== false;
3574
3600
  const meetingsEnabled = featureConfig?.meetingsEnabled !== false;
3575
3601
  const launchAtLoginEnabled = featureConfig?.launchAtLoginEnabled !== false;
@@ -3868,10 +3894,6 @@ function Setup({
3868
3894
  );
3869
3895
  }
3870
3896
 
3871
- useEffect(() => {
3872
- inputRef.current?.focus();
3873
- }, []);
3874
-
3875
3897
  useEffect(() => {
3876
3898
  let cancelled = false;
3877
3899
  const refresh = () => {
@@ -4134,6 +4156,32 @@ function Setup({
4134
4156
  if (providerStatus[byokProvider]) return null;
4135
4157
  return `${keyForByokProvider(byokProvider)} is not set — cleanup will fail until configured.`;
4136
4158
  })();
4159
+ const updateChecksSupported = canCheckForUpdates();
4160
+ const updateBusy =
4161
+ updateStatus.state === "checking" ||
4162
+ updateStatus.state === "available" ||
4163
+ updateStatus.state === "downloading";
4164
+ const updateReady = updateStatus.state === "downloaded";
4165
+ const updateStatusClass =
4166
+ updateStatus.state === "error"
4167
+ ? "setup-warning"
4168
+ : updateStatus.state === "downloaded" ||
4169
+ updateStatus.state === "not-available"
4170
+ ? "setup-success"
4171
+ : "setup-hint";
4172
+ const updateCheckLabel = !updateChecksSupported
4173
+ ? "Release builds only"
4174
+ : updateStatus.state === "checking"
4175
+ ? "Checking..."
4176
+ : updateStatus.state === "downloading"
4177
+ ? `Downloading ${updateStatus.percent}%`
4178
+ : "Check now";
4179
+
4180
+ function checkForDesktopUpdate() {
4181
+ retryUpdateCheck().catch((err) => {
4182
+ console.error("[clips-updater] manual check failed:", err);
4183
+ });
4184
+ }
4137
4185
 
4138
4186
  return (
4139
4187
  <form className="setup" onSubmit={handleSubmit}>
@@ -4161,13 +4209,12 @@ function Setup({
4161
4209
  />
4162
4210
  <input
4163
4211
  id="clips-url"
4164
- ref={inputRef}
4165
4212
  type="url"
4166
4213
  value={url}
4167
4214
  onChange={(e) => setUrl(e.target.value)}
4168
4215
  placeholder="http://localhost:8080"
4169
4216
  />
4170
- <button className="primary" type="submit">
4217
+ <button className="secondary setup-connect-button" type="submit">
4171
4218
  Connect
4172
4219
  </button>
4173
4220
  </div>
@@ -4214,6 +4261,46 @@ function Setup({
4214
4261
  </div>
4215
4262
  </div>
4216
4263
 
4264
+ <div className="setup-section">
4265
+ <SettingLabel
4266
+ label="Desktop updates"
4267
+ hint="Check the signed Clips desktop release channel and download any available update."
4268
+ />
4269
+ <div className="setup-button-row">
4270
+ <button
4271
+ type="button"
4272
+ className="secondary"
4273
+ onClick={checkForDesktopUpdate}
4274
+ disabled={!updateChecksSupported || updateBusy || updateReady}
4275
+ >
4276
+ <IconRefresh
4277
+ size={15}
4278
+ stroke={1.9}
4279
+ className={updateBusy ? "update-spinner" : undefined}
4280
+ />
4281
+ {updateCheckLabel}
4282
+ </button>
4283
+ {updateReady ? (
4284
+ <button
4285
+ type="button"
4286
+ className="secondary"
4287
+ onClick={() => {
4288
+ installAndRestart().catch((err) => {
4289
+ console.error("[clips-updater] relaunch failed:", err);
4290
+ });
4291
+ }}
4292
+ >
4293
+ Restart to install
4294
+ </button>
4295
+ ) : null}
4296
+ </div>
4297
+ <p className={updateStatusClass}>
4298
+ {updateChecksSupported
4299
+ ? desktopUpdateStatusText(updateStatus)
4300
+ : "Update checks are available in signed release builds."}
4301
+ </p>
4302
+ </div>
4303
+
4217
4304
  <div className="setup-section-heading">Permissions</div>
4218
4305
 
4219
4306
  <div className="setup-section">
@@ -26,6 +26,13 @@ let cachedStatus: UpdateStatus = { state: "idle" };
26
26
  let pendingUpdate: Update | null = null;
27
27
  const listeners = new Set<StatusListener>();
28
28
  let started = false;
29
+ let checkInFlight: Promise<void> | null = null;
30
+
31
+ function canRunUpdateChecks() {
32
+ // Dev and local release builds are for testing the current checkout. Do not
33
+ // replace them with the published auto-update channel.
34
+ return !import.meta.env.DEV && !__CLIPS_DESKTOP_LOCAL_BUILD__;
35
+ }
29
36
 
30
37
  function setStatus(next: UpdateStatus) {
31
38
  cachedStatus = next;
@@ -33,55 +40,60 @@ function setStatus(next: UpdateStatus) {
33
40
  }
34
41
 
35
42
  async function runCheck() {
36
- try {
37
- setStatus({ state: "checking" });
38
- const update = await check();
39
- if (!update) {
40
- setStatus({ state: "not-available" });
41
- return;
42
- }
43
- pendingUpdate = update;
44
- const version = update.version;
45
- const notes = update.body ?? undefined;
46
- setStatus({ state: "available", version, notes });
47
-
48
- // Download ONLY — do not install here. On macOS `install` swaps the .app
49
- // bundle on disk while this process keeps running, which invalidates the
50
- // running process's Screen Recording (TCC) grant and breaks capture until
51
- // relaunch. We defer the swap to `installAndRestart()` so a downloaded-but-
52
- // not-yet-installed update leaves the running app fully functional; the
53
- // user records normally until they choose to restart.
54
- let total = 0;
55
- let downloaded = 0;
56
- await update.download((event) => {
57
- if (event.event === "Started") {
58
- total = event.data.contentLength ?? 0;
59
- downloaded = 0;
60
- setStatus({ state: "downloading", version, notes, percent: 0 });
61
- } else if (event.event === "Progress") {
62
- downloaded += event.data.chunkLength;
63
- const percent =
64
- total > 0 ? Math.min(100, Math.round((downloaded / total) * 100)) : 0;
65
- setStatus({ state: "downloading", version, notes, percent });
66
- } else if (event.event === "Finished") {
67
- setStatus({ state: "downloaded", version, notes });
43
+ if (checkInFlight) return checkInFlight;
44
+
45
+ checkInFlight = (async () => {
46
+ try {
47
+ setStatus({ state: "checking" });
48
+ const update = await check();
49
+ if (!update) {
50
+ setStatus({ state: "not-available" });
51
+ return;
68
52
  }
69
- });
70
- } catch (err) {
71
- const message = err instanceof Error ? err.message : String(err);
72
- setStatus({ state: "error", message });
73
- }
53
+ pendingUpdate = update;
54
+ const version = update.version;
55
+ const notes = update.body ?? undefined;
56
+ setStatus({ state: "available", version, notes });
57
+
58
+ // Download ONLY — do not install here. On macOS `install` swaps the .app
59
+ // bundle on disk while this process keeps running, which invalidates the
60
+ // running process's Screen Recording (TCC) grant and breaks capture until
61
+ // relaunch. We defer the swap to `installAndRestart()` so a downloaded-but-
62
+ // not-yet-installed update leaves the running app fully functional; the
63
+ // user records normally until they choose to restart.
64
+ let total = 0;
65
+ let downloaded = 0;
66
+ await update.download((event) => {
67
+ if (event.event === "Started") {
68
+ total = event.data.contentLength ?? 0;
69
+ downloaded = 0;
70
+ setStatus({ state: "downloading", version, notes, percent: 0 });
71
+ } else if (event.event === "Progress") {
72
+ downloaded += event.data.chunkLength;
73
+ const percent =
74
+ total > 0
75
+ ? Math.min(100, Math.round((downloaded / total) * 100))
76
+ : 0;
77
+ setStatus({ state: "downloading", version, notes, percent });
78
+ } else if (event.event === "Finished") {
79
+ setStatus({ state: "downloaded", version, notes });
80
+ }
81
+ });
82
+ } catch (err) {
83
+ const message = err instanceof Error ? err.message : String(err);
84
+ setStatus({ state: "error", message });
85
+ } finally {
86
+ checkInFlight = null;
87
+ }
88
+ })();
89
+
90
+ return checkInFlight;
74
91
  }
75
92
 
76
93
  function startUpdateLoop() {
77
94
  if (started) return;
78
95
  started = true;
79
- // Skip update checks in dev — there's no release endpoint to check.
80
- if (import.meta.env.DEV) return;
81
- // Local release builds are for testing the current checkout. Do not replace
82
- // them with the published auto-update channel just because package.json has
83
- // a lower development version.
84
- if (__CLIPS_DESKTOP_LOCAL_BUILD__) return;
96
+ if (!canRunUpdateChecks()) return;
85
97
  // Check 3s after launch (let the popover finish first paint), then every
86
98
  // 4 hours. Matches the cadence used by the Electron app.
87
99
  setTimeout(runCheck, 3000);
@@ -125,11 +137,16 @@ export function isUpdatePendingRestart(): boolean {
125
137
  return cachedStatus.state === "downloaded";
126
138
  }
127
139
 
140
+ export function canCheckForUpdates(): boolean {
141
+ return canRunUpdateChecks();
142
+ }
143
+
128
144
  /**
129
145
  * Manual retry entry point. Used by the UpdateBanner's error state to let
130
146
  * users re-attempt after a signature-verification / download / network
131
147
  * failure. Runs a full check + download pass, same as the periodic loop.
132
148
  */
133
149
  export function retryUpdateCheck(): Promise<void> {
150
+ if (!canRunUpdateChecks()) return Promise.resolve();
134
151
  return runCheck();
135
152
  }
@@ -835,6 +835,11 @@ body[data-clips-route="recording-pill"] #root {
835
835
  cursor: not-allowed;
836
836
  }
837
837
 
838
+ .setup-connect-button {
839
+ height: 38px;
840
+ margin-top: 2px;
841
+ }
842
+
838
843
  .primary.start {
839
844
  margin-top: 2px;
840
845
  }
@@ -624,6 +624,32 @@ fn ensure_fn_event_tap(app: tauri::AppHandle) {
624
624
  install_fn_event_tap(app);
625
625
  }
626
626
 
627
+ #[cfg(target_os = "macos")]
628
+ fn fn_event_tap_is_enabled(tap: &core_graphics::event::CGEventTap<'static>) -> bool {
629
+ use core_foundation::base::TCFType;
630
+
631
+ extern "C" {
632
+ fn CGEventTapIsEnabled(tap: core_foundation::mach_port::CFMachPortRef) -> bool;
633
+ }
634
+
635
+ unsafe { CGEventTapIsEnabled(tap.mach_port().as_concrete_TypeRef()) }
636
+ }
637
+
638
+ #[cfg(target_os = "macos")]
639
+ fn schedule_fn_event_tap_restart(app: tauri::AppHandle, reason: &'static str, delay: Duration) {
640
+ eprintln!("[clips-tray][fn-tap] restarting Fn event tap: {reason}");
641
+ FN_TAP_INSTALL_STARTED.store(false, Ordering::SeqCst);
642
+ if !FN_TAP_ENABLED.load(Ordering::SeqCst) {
643
+ return;
644
+ }
645
+ thread::spawn(move || {
646
+ thread::sleep(delay);
647
+ if FN_TAP_ENABLED.load(Ordering::SeqCst) {
648
+ ensure_fn_event_tap(app);
649
+ }
650
+ });
651
+ }
652
+
627
653
  #[cfg(target_os = "macos")]
628
654
  fn install_fn_event_tap(app: tauri::AppHandle) {
629
655
  use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
@@ -631,7 +657,9 @@ fn install_fn_event_tap(app: tauri::AppHandle) {
631
657
  use std::thread;
632
658
  use std::time::Duration;
633
659
 
634
- use core_foundation::runloop::{kCFRunLoopCommonModes, CFRunLoop};
660
+ use core_foundation::runloop::{
661
+ kCFRunLoopCommonModes, kCFRunLoopDefaultMode, CFRunLoop, CFRunLoopRunResult,
662
+ };
635
663
  use core_graphics::event::{
636
664
  CGEventFlags, CGEventTap, CGEventTapLocation, CGEventTapOptions, CGEventTapPlacement,
637
665
  CGEventType, CallbackResult,
@@ -836,7 +864,6 @@ fn install_fn_event_tap(app: tauri::AppHandle) {
836
864
  t
837
865
  }
838
866
  Err(()) => {
839
- FN_TAP_INSTALL_STARTED.store(false, Ordering::SeqCst);
840
867
  eprintln!(
841
868
  "[clips-tray][fn-tap] CGEventTapCreate returned NULL. Most likely cause: \
842
869
  Input Monitoring is not granted to Clips. Open System Settings → \
@@ -844,6 +871,11 @@ fn install_fn_event_tap(app: tauri::AppHandle) {
844
871
  terminal running `tauri dev`). Note: Accessibility is a separate \
845
872
  permission and is not sufficient for ListenOnly taps."
846
873
  );
874
+ schedule_fn_event_tap_restart(
875
+ app,
876
+ "CGEventTapCreate returned NULL",
877
+ Duration::from_secs(5),
878
+ );
847
879
  return;
848
880
  }
849
881
  };
@@ -853,8 +885,12 @@ fn install_fn_event_tap(app: tauri::AppHandle) {
853
885
  s
854
886
  }
855
887
  Err(()) => {
856
- FN_TAP_INSTALL_STARTED.store(false, Ordering::SeqCst);
857
888
  eprintln!("[clips-tray][fn-tap] CFMachPortCreateRunLoopSource failed");
889
+ schedule_fn_event_tap_restart(
890
+ app,
891
+ "CFMachPortCreateRunLoopSource failed",
892
+ Duration::from_secs(2),
893
+ );
858
894
  return;
859
895
  }
860
896
  };
@@ -865,29 +901,63 @@ fn install_fn_event_tap(app: tauri::AppHandle) {
865
901
  "[clips-tray][fn-tap] tap enabled; entering runloop — press Fn now to test"
866
902
  );
867
903
 
868
- // Run the runloop in repeated short bursts so we can re-enable
869
- // the tap if the OS disables it. We use run_current (blocks
870
- // until something stops the loop) and re-enter on exit. The
871
- // disable callbacks above call CFRunLoop::stop, which makes
872
- // run_current return; we then call tap.enable() and re-enter.
873
- // This is the handy-keys / linespeed pattern.
904
+ // Run the runloop in short slices instead of `run_current()`.
905
+ // macOS can leave a tap created but disabled/inert after TCC or
906
+ // user-input churn; periodic health checks let us re-enable or
907
+ // rebuild it even when no further callback arrives.
908
+ let mut consecutive_reenable_failures = 0_u8;
874
909
  loop {
875
- if needs_reenable.swap(false, Ordering::SeqCst) {
876
- dlog!("[clips-tray] re-enabling Fn event tap");
910
+ if !FN_TAP_ENABLED.load(Ordering::SeqCst) {
911
+ FN_TAP_INSTALL_STARTED.store(false, Ordering::SeqCst);
912
+ return;
913
+ }
914
+
915
+ let reenable_reason = if needs_reenable.swap(false, Ordering::SeqCst) {
916
+ Some("disabled callback")
917
+ } else if !fn_event_tap_is_enabled(&tap) {
918
+ Some("health check")
919
+ } else {
920
+ None
921
+ };
922
+
923
+ if let Some(reason) = reenable_reason {
924
+ eprintln!("[clips-tray][fn-tap] re-enabling Fn event tap ({reason})");
877
925
  tap.enable();
926
+ thread::sleep(Duration::from_millis(20));
927
+ if fn_event_tap_is_enabled(&tap) {
928
+ consecutive_reenable_failures = 0;
929
+ } else {
930
+ consecutive_reenable_failures =
931
+ consecutive_reenable_failures.saturating_add(1);
932
+ if consecutive_reenable_failures >= 2 {
933
+ schedule_fn_event_tap_restart(
934
+ app.clone(),
935
+ "tapEnable did not stick",
936
+ Duration::from_millis(750),
937
+ );
938
+ return;
939
+ }
940
+ }
878
941
  }
879
- CFRunLoop::run_current();
880
- // run_current returned — either we asked it to (a disable
881
- // event flagged needs_reenable above), or something else
882
- // removed our source. In the latter case avoid a tight
883
- // spin, then re-call enable() defensively (it's idempotent
884
- // — calling on an already-enabled tap is a no-op).
885
- if !needs_reenable.load(Ordering::SeqCst) {
886
- thread::sleep(Duration::from_millis(50));
887
- dlog!(
888
- "[clips-tray] Fn runloop exited unexpectedly — re-enabling tap"
889
- );
890
- needs_reenable.store(true, Ordering::SeqCst);
942
+
943
+ match unsafe {
944
+ CFRunLoop::run_in_mode(
945
+ kCFRunLoopDefaultMode,
946
+ Duration::from_millis(500),
947
+ true,
948
+ )
949
+ } {
950
+ CFRunLoopRunResult::Finished => {
951
+ schedule_fn_event_tap_restart(
952
+ app.clone(),
953
+ "runloop finished",
954
+ Duration::from_millis(750),
955
+ );
956
+ return;
957
+ }
958
+ CFRunLoopRunResult::Stopped
959
+ | CFRunLoopRunResult::TimedOut
960
+ | CFRunLoopRunResult::HandledSource => {}
891
961
  }
892
962
  }
893
963
  })
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-07
4
+ ---
5
+
6
+ Overview is now just Ask Dispatch and a list of apps you can open.
@@ -1 +1 @@
1
- {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
@@ -568,6 +568,7 @@ const TOOL_INPUT_ACTIVITY_INTERVAL_MS = 1500;
568
568
  const ACTION_PREPARATION_NO_PROGRESS_TIMEOUT_MS = 90_000;
569
569
  const ACTION_PREPARATION_ZERO_BYTE_RESTART_LIMIT = 2;
570
570
  const MODEL_STREAM_NO_PROGRESS_TIMEOUT_MS = 90_000;
571
+ const EMPTY_FINAL_RESPONSE_RETRY_LIMIT = 1;
571
572
  const MAIN_CHAT_INTERNAL_CONTINUATION_LIMIT = 6;
572
573
  const RUN_BUDGET_EXHAUSTED_ERROR_CODE = "run_budget_exhausted";
573
574
  const RUN_BUDGET_EXHAUSTED_MESSAGE = "I ran out of time before finishing this step. " +
@@ -1895,6 +1896,7 @@ export async function runAgentLoop(opts) {
1895
1896
  }
1896
1897
  }
1897
1898
  let finalGuardRetries = 0;
1899
+ let emptyFinalResponseRetries = 0;
1898
1900
  let iterations = 0;
1899
1901
  // Set when an in-loop processor aborts via `abort()` / throws a `TripWire`.
1900
1902
  // The loop emits the `tripwire` event, surfaces the reason as a final
@@ -2440,15 +2442,25 @@ export async function runAgentLoop(opts) {
2440
2442
  // text — typically when reasoning consumes the entire output-token
2441
2443
  // budget. Without a final text part the SSE stream still ends with a
2442
2444
  // clean `done`, which renders as a totally empty assistant bubble.
2443
- // Surface a plain-language error so the user knows what happened.
2444
- if (!guardEmittedFallback &&
2445
+ // Retry once so a transient reasoning-budget miss can still finish; if
2446
+ // the retry also has no visible content, surface a plain-language error.
2447
+ const hasEmptyFinalResponse = !guardEmittedFallback &&
2445
2448
  collectTextParts(assistantContentForHistory).trim().length === 0 &&
2446
- streamedAssistantText.trim().length === 0) {
2449
+ streamedAssistantText.trim().length === 0;
2450
+ if (hasEmptyFinalResponse) {
2451
+ if (emptyFinalResponseRetries < EMPTY_FINAL_RESPONSE_RETRY_LIMIT) {
2452
+ emptyFinalResponseRetries += 1;
2453
+ appendAgentLoopContinuation(messages, "max_tokens");
2454
+ continue;
2455
+ }
2447
2456
  send({
2448
2457
  type: "text",
2449
2458
  text: "The model returned an empty response. This usually means reasoning used the full output-token budget. Try again, or pick a different model from the model menu.",
2450
2459
  });
2451
2460
  }
2461
+ else {
2462
+ emptyFinalResponseRetries = 0;
2463
+ }
2452
2464
  break;
2453
2465
  }
2454
2466
  // Reached only when the model made tool calls (toolCallParts.length > 0),
@@ -2457,6 +2469,7 @@ export async function runAgentLoop(opts) {
2457
2469
  // finalGuardRetries stays at 1 from a prior cycle and the guard is
2458
2470
  // permanently disabled for the rest of a long multi-step run.
2459
2471
  finalGuardRetries = 0;
2472
+ emptyFinalResponseRetries = 0;
2460
2473
  flushUnstreamedAssistantText();
2461
2474
  let requestedActionStop = null;
2462
2475
  // Human-in-the-loop approvals granted by the user for this turn (opt-in;