clawdex-mobile 1.2.0 → 1.3.1

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/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Clawdex Mobile
2
2
 
3
- <p align="center">
4
- <img src="apps/mobile/assets/brand/app-icon.png" alt="Clawdex app icon" width="112" />
5
- </p>
3
+ ![Clawdex app icon](https://raw.githubusercontent.com/Mohit-Patil/clawdex-mobile/main/apps/mobile/assets/brand/app-icon.png)
6
4
 
7
5
  Control Clawdex from your phone using an Expo React Native app (`apps/mobile`) and a Rust bridge (`services/rust-bridge`) running on your host machine.
8
6
 
@@ -131,7 +131,6 @@ const RUN_WATCHDOG_MS = 60_000;
131
131
  const LIKELY_RUNNING_RECENT_UPDATE_MS = 30_000;
132
132
  const ACTIVE_CHAT_SYNC_INTERVAL_MS = 2_000;
133
133
  const IDLE_CHAT_SYNC_INTERVAL_MS = 2_500;
134
- const THREAD_RESUME_RETRY_MS = 1_500;
135
134
  const CHAT_MODEL_PREFERENCES_FILE = 'chat-model-preferences.json';
136
135
  const CHAT_MODEL_PREFERENCES_VERSION = 1;
137
136
  const INLINE_OPTION_LINE_PATTERN =
@@ -451,7 +450,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
451
450
  const externalStatusFullSyncNextAllowedAtRef = useRef(0);
452
451
  const threadRuntimeSnapshotsRef = useRef<Record<string, ThreadRuntimeSnapshot>>({});
453
452
  const threadReasoningBuffersRef = useRef<Record<string, string>>({});
454
- const threadResumeLastAttemptAtRef = useRef<Record<string, number>>({});
455
453
  const chatModelPreferencesRef = useRef<Record<string, ChatModelPreference>>({});
456
454
  const [chatModelPreferencesLoaded, setChatModelPreferencesLoaded] = useState(false);
457
455
  const preferredStartCwd = normalizeWorkspacePath(defaultStartCwd);
@@ -612,29 +610,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
612
610
  externalStatusFullSyncQueuedThreadRef.current = null;
613
611
  }, []);
614
612
 
615
- const ensureThreadResumeSubscription = useCallback(
616
- (threadId: string, options?: { force?: boolean }) => {
617
- const normalizedThreadId = threadId.trim();
618
- if (!normalizedThreadId) {
619
- return;
620
- }
621
-
622
- const now = Date.now();
623
- const lastAttemptAt = threadResumeLastAttemptAtRef.current[normalizedThreadId] ?? 0;
624
- if (!options?.force && now - lastAttemptAt < THREAD_RESUME_RETRY_MS) {
625
- return;
626
- }
627
-
628
- threadResumeLastAttemptAtRef.current[normalizedThreadId] = now;
629
- api
630
- .resumeThread(normalizedThreadId, {
631
- approvalPolicy: activeApprovalPolicy,
632
- })
633
- .catch(() => {});
634
- },
635
- [activeApprovalPolicy, api]
636
- );
637
-
638
613
  const drainExternalStatusFullSyncQueue = useCallback(() => {
639
614
  if (externalStatusFullSyncInFlightRef.current) {
640
615
  return;
@@ -4084,10 +4059,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
4084
4059
  const threadId =
4085
4060
  readString(params?.threadId) ?? readString(params?.thread_id);
4086
4061
  if (threadId && threadId === currentId) {
4087
- // External clients (CLI/TUI) may start turns without pushing full live
4088
- // notifications through this app-server process. Force a lightweight
4089
- // resume attempt to attach to fresh stream state early.
4090
- ensureThreadResumeSubscription(threadId, { force: true });
4091
4062
  api
4092
4063
  .getChatSummary(threadId)
4093
4064
  .then((summary) => {
@@ -4107,7 +4078,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
4107
4078
  });
4108
4079
 
4109
4080
  if (isChatSummaryLikelyRunning(summary)) {
4110
- ensureThreadResumeSubscription(threadId);
4111
4081
  bumpRunWatchdog();
4112
4082
  setActivity((prev) =>
4113
4083
  prev.tone === 'running'
@@ -4176,7 +4146,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
4176
4146
  clearRunWatchdog,
4177
4147
  refreshPendingApprovalsForThread,
4178
4148
  scheduleExternalStatusFullSync,
4179
- ensureThreadResumeSubscription,
4180
4149
  registerTurnStarted,
4181
4150
  pushActiveCommand,
4182
4151
  upsertThreadRuntimeSnapshot,
@@ -4214,12 +4183,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
4214
4183
  const shouldRunFromWatchdog = runWatchdogUntilRef.current > Date.now();
4215
4184
  const shouldShowRunning = shouldRunFromChat || shouldRunFromWatchdog;
4216
4185
 
4217
- // Keep a light resume heartbeat even while idle so externally-started
4218
- // turns are discovered quickly and can stream status/tool updates.
4219
- ensureThreadResumeSubscription(selectedChatId, {
4220
- force: shouldRunFromChat,
4221
- });
4222
-
4223
4186
  if (shouldShowRunning && !hasPendingApproval && !hasPendingUserInput) {
4224
4187
  setActivity((prev) => {
4225
4188
  // Only guard against watchdog-only bumps overriding a fresh
@@ -4304,7 +4267,6 @@ export const MainScreen = forwardRef<MainScreenHandle, MainScreenProps>(
4304
4267
  pendingUserInputRequest?.id,
4305
4268
  bumpRunWatchdog,
4306
4269
  clearRunWatchdog,
4307
- ensureThreadResumeSubscription,
4308
4270
  ]);
4309
4271
 
4310
4272
  const handleResolveApproval = useCallback(
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "clawdex-mobile",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
+ "homepage": "https://github.com/Mohit-Patil/clawdex-mobile#readme",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/Mohit-Patil/clawdex-mobile.git"
8
+ },
4
9
  "publishConfig": {
5
10
  "access": "public"
6
11
  },