openmates 0.27.0-alpha.12 → 0.27.0-alpha.14

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.
@@ -14453,6 +14453,7 @@ var OpenMatesClient = class _OpenMatesClient {
14453
14453
  let activeFocusId = null;
14454
14454
  let encryptedChatKey = null;
14455
14455
  let chatSlugLookupKey = null;
14456
+ let focusPhaseState = {};
14456
14457
  let baselineMessagesV = 0;
14457
14458
  let notificationTitle = null;
14458
14459
  let terminalExpectedMessagesV = 1;
@@ -14489,6 +14490,12 @@ var OpenMatesClient = class _OpenMatesClient {
14489
14490
  } catch {
14490
14491
  }
14491
14492
  }
14493
+ const encryptedPhaseState = chat.details.encrypted_focus_phase_state;
14494
+ if (typeof encryptedPhaseState === "string" && encryptedPhaseState) {
14495
+ const phaseText = await decryptWithAesGcmCombined(encryptedPhaseState, chatKeyBytes);
14496
+ if (!phaseText) throw new Error("Could not decrypt focus phase progress. Sync before sending again.");
14497
+ focusPhaseState = JSON.parse(phaseText);
14498
+ }
14492
14499
  const encryptedFocusId = chat.details.encrypted_active_focus_id;
14493
14500
  if (typeof encryptedFocusId === "string" && encryptedFocusId) {
14494
14501
  activeFocusId = await decryptWithAesGcmCombined(encryptedFocusId, chatKeyBytes);
@@ -14508,6 +14515,7 @@ var OpenMatesClient = class _OpenMatesClient {
14508
14515
  ws.onMessageType("focus_mode_activated", (event) => {
14509
14516
  if (event.chat_id !== chatId || !event.focus_id || !chatKeyBytes || params.incognito) return;
14510
14517
  const focusId = event.focus_id;
14518
+ if (!focusId.startsWith("project-")) delete focusPhaseState[focusId];
14511
14519
  const key = chatKeyBytes;
14512
14520
  focusPersistence = focusPersistence.then(async () => {
14513
14521
  const encryptedFocusId = await encryptWithAesGcmCombined(focusId, key);
@@ -14519,6 +14527,51 @@ var OpenMatesClient = class _OpenMatesClient {
14519
14527
  focusPersistenceError = error;
14520
14528
  });
14521
14529
  });
14530
+ ws.onMessageType("focus_phases_updated", (event) => {
14531
+ if (event.chat_id !== chatId || !event.states || !chatKeyBytes || params.incognito) return;
14532
+ const key = chatKeyBytes;
14533
+ const states = event.states;
14534
+ focusPersistence = focusPersistence.then(async () => {
14535
+ for (const [focusId, phase] of Object.entries(states)) {
14536
+ if (phase.schema_version !== 1 || phase.chat_id !== chatId || phase.focus_id !== focusId || !Number.isSafeInteger(phase.version) || phase.version < 0 || !Array.isArray(phase.transitions) || phase.transitions.length > 32) {
14537
+ throw new Error("Invalid focus phase state received");
14538
+ }
14539
+ if (focusPhaseState[focusId]?.run_id === phase.run_id && focusPhaseState[focusId].version > phase.version) states[focusId] = focusPhaseState[focusId];
14540
+ }
14541
+ focusPhaseState = states;
14542
+ const encryptedState = await encryptWithAesGcmCombined(JSON.stringify(states), key);
14543
+ const persisted = ws.waitForMessage(
14544
+ "encrypted_metadata_stored",
14545
+ (payload) => payload.chat_id === chatId,
14546
+ 2e4
14547
+ );
14548
+ await ws.sendAsync("encrypted_chat_metadata", {
14549
+ chat_id: chatId,
14550
+ ...teamId ? { team_id: teamId } : {},
14551
+ encrypted_focus_phase_state: encryptedState
14552
+ });
14553
+ await persisted;
14554
+ const eventIds = /* @__PURE__ */ new Set();
14555
+ for (const phase of Object.values(states)) for (const transition of phase.transitions) {
14556
+ if (transition.chat_id !== chatId || transition.focus_id !== phase.focus_id || !transition.event_id || eventIds.has(transition.event_id)) continue;
14557
+ eventIds.add(transition.event_id);
14558
+ const content = JSON.stringify(transition);
14559
+ await ws.sendAsync("chat_system_message_added", {
14560
+ chat_id: chatId,
14561
+ message: {
14562
+ message_id: transition.event_id,
14563
+ role: "system",
14564
+ status: "synced",
14565
+ encrypted_content: await encryptWithAesGcmCombined(content, key),
14566
+ created_at: transition.created_at
14567
+ }
14568
+ });
14569
+ }
14570
+ clearSyncCache(teamId);
14571
+ }).catch((error) => {
14572
+ focusPersistenceError = error;
14573
+ });
14574
+ });
14522
14575
  const clientCapabilities = taskUpdateJobsEnabled ? ["task_update_jobs"] : [];
14523
14576
  if (!params.incognito && chatKeyBytes) {
14524
14577
  registerCliProjectFileExecutor({
@@ -14541,6 +14594,7 @@ var OpenMatesClient = class _OpenMatesClient {
14541
14594
  client_capabilities: clientCapabilities,
14542
14595
  // Only decrypted current metadata restores focus; history is never authority.
14543
14596
  active_focus_id: activeFocusId,
14597
+ focus_phase_state: focusPhaseState,
14544
14598
  is_incognito: Boolean(params.incognito),
14545
14599
  message: {
14546
14600
  message_id: messageId,
@@ -15139,16 +15193,53 @@ var OpenMatesClient = class _OpenMatesClient {
15139
15193
  throw new Error("Saved chat completion did not include recoverable terminal identity.");
15140
15194
  }
15141
15195
  const recoveryJobId = resp.recoveryJobId;
15142
- const claimPromise = ws.waitForMessage(
15143
- "recovery_job_claimed",
15144
- (payload) => payload.job_id === recoveryJobId,
15145
- 2e4
15146
- );
15147
- await ws.sendAsync("recovery_job_claim", {
15148
- protocol_version: 1,
15149
- job_id: recoveryJobId
15150
- });
15151
- const claim = (await claimPromise).payload;
15196
+ let claimRetryDeadline = null;
15197
+ let claim;
15198
+ let claimRetryDelayMs = 500;
15199
+ while (true) {
15200
+ const requestId = randomUUID10();
15201
+ let matchingLeaseConflict = false;
15202
+ const stopWatchingErrors = ws.onMessageType("error", (payload) => {
15203
+ if (payload?.code === "lease_conflict" && payload.job_id === recoveryJobId && payload.request_id === requestId) {
15204
+ matchingLeaseConflict = true;
15205
+ }
15206
+ });
15207
+ const claimPromise = ws.waitForMessage(
15208
+ "recovery_job_claimed",
15209
+ (payload) => {
15210
+ const received = payload;
15211
+ return received.job_id === recoveryJobId && (received.request_id === void 0 || received.request_id === requestId);
15212
+ },
15213
+ claimRetryDeadline === null ? 2e4 : Math.min(2e4, Math.max(1, claimRetryDeadline - Date.now()))
15214
+ );
15215
+ try {
15216
+ try {
15217
+ await ws.sendAsync("recovery_job_claim", {
15218
+ protocol_version: 1,
15219
+ job_id: recoveryJobId,
15220
+ request_id: requestId
15221
+ });
15222
+ } catch (error) {
15223
+ void claimPromise.catch(() => {
15224
+ });
15225
+ throw error;
15226
+ }
15227
+ claim = (await claimPromise).payload;
15228
+ break;
15229
+ } catch (error) {
15230
+ if (!(error instanceof WebSocketProtocolError) || error.code !== "lease_conflict" || !matchingLeaseConflict) throw error;
15231
+ claimRetryDeadline ??= Date.now() + Math.min(
15232
+ 1e4,
15233
+ Math.max(0, params.responseTimeoutMs ?? 9e4)
15234
+ );
15235
+ const remainingMs = claimRetryDeadline - Date.now();
15236
+ if (remainingMs <= claimRetryDelayMs) throw error;
15237
+ await new Promise((resolve17) => setTimeout(resolve17, claimRetryDelayMs));
15238
+ claimRetryDelayMs = Math.min(claimRetryDelayMs * 2, 2e3);
15239
+ } finally {
15240
+ stopWatchingErrors();
15241
+ }
15242
+ }
15152
15243
  const leaseToken = typeof claim.lease_token === "string" ? claim.lease_token : null;
15153
15244
  const leaseGeneration = typeof claim.lease_generation === "number" && Number.isSafeInteger(claim.lease_generation) ? claim.lease_generation : null;
15154
15245
  const assistantId = typeof claim.assistant_message_id === "string" ? claim.assistant_message_id : null;
@@ -15170,6 +15261,8 @@ var OpenMatesClient = class _OpenMatesClient {
15170
15261
  clearSyncCache(teamId);
15171
15262
  await persistCompressionCheckpoints(resp.compressionCheckpoints);
15172
15263
  await persistTaskEventSystemMessages(taskEvents);
15264
+ await focusPersistence;
15265
+ if (focusPersistenceError) throw focusPersistenceError;
15173
15266
  const mateName2 = category ? MATE_NAMES[category] ?? null : null;
15174
15267
  return {
15175
15268
  status: "completed",
@@ -60029,6 +60122,77 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
60029
60122
  }
60030
60123
  }
60031
60124
  },
60125
+ apple: {
60126
+ tasks_widget: {
60127
+ title: {
60128
+ text: "Tasks"
60129
+ },
60130
+ description: {
60131
+ text: "Your tasks by status, with quick links to open and create tasks."
60132
+ },
60133
+ status_parameter: {
60134
+ text: "Status"
60135
+ },
60136
+ all: {
60137
+ text: "All"
60138
+ },
60139
+ empty: {
60140
+ text: "No tasks in this status"
60141
+ },
60142
+ open_app: {
60143
+ text: "Open OpenMates to load your tasks"
60144
+ },
60145
+ new_task: {
60146
+ text: "New task"
60147
+ }
60148
+ },
60149
+ workflows_widget: {
60150
+ title: {
60151
+ text: "Workflows"
60152
+ },
60153
+ description: {
60154
+ text: "Choose a scheduled workflow to run manually."
60155
+ },
60156
+ workflow_parameter: {
60157
+ text: "Workflow"
60158
+ },
60159
+ choose: {
60160
+ text: "Choose a workflow in widget settings."
60161
+ },
60162
+ open_app: {
60163
+ text: "Open OpenMates"
60164
+ },
60165
+ run: {
60166
+ text: "Run workflow"
60167
+ }
60168
+ },
60169
+ active_chats_widget: {
60170
+ description: {
60171
+ text: "Currently running chats, with quick links to each chat."
60172
+ },
60173
+ total_one: {
60174
+ text: "1 chat processing"
60175
+ },
60176
+ total: {
60177
+ text: "{count} chats processing"
60178
+ },
60179
+ chat: {
60180
+ text: "Chat {number}"
60181
+ },
60182
+ empty: {
60183
+ text: "No chats are currently running"
60184
+ },
60185
+ open_app: {
60186
+ text: "Open OpenMates to load active chats"
60187
+ },
60188
+ view_all: {
60189
+ text: "View all active chats"
60190
+ },
60191
+ stale: {
60192
+ text: "Waiting for app update"
60193
+ }
60194
+ }
60195
+ },
60032
60196
  apps: {
60033
60197
  file: {
60034
60198
  text: "File",
@@ -60480,15 +60644,6 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
60480
60644
  manual_intro: {
60481
60645
  text: "Use this skill directly by entering your request below."
60482
60646
  },
60483
- requirements: {
60484
- text: "Requirements"
60485
- },
60486
- optional: {
60487
- text: "(optional)"
60488
- },
60489
- requirements_placeholder: {
60490
- text: "Describe what the results should match."
60491
- },
60492
60647
  via: {
60493
60648
  text: "via"
60494
60649
  },
@@ -60581,6 +60736,15 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
60581
60736
  },
60582
60737
  validation_pattern: {
60583
60738
  text: "enter the expected format"
60739
+ },
60740
+ requirements: {
60741
+ text: "Requirements"
60742
+ },
60743
+ optional: {
60744
+ text: "(optional)"
60745
+ },
60746
+ requirements_placeholder: {
60747
+ text: "Describe what the results should match."
60584
60748
  }
60585
60749
  }
60586
60750
  },
@@ -60690,6 +60854,15 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
60690
60854
  request_error: {
60691
60855
  text: "The request could not finish. You can try again."
60692
60856
  },
60857
+ viewer_read_only: {
60858
+ text: "Your team role allows viewing results. Ask a team member to run this skill."
60859
+ },
60860
+ not_found: {
60861
+ text: "This app or skill is unavailable."
60862
+ },
60863
+ result_unavailable: {
60864
+ text: "This result could not be opened."
60865
+ },
60693
60866
  saving: {
60694
60867
  text: "Saving results\u2026"
60695
60868
  },
@@ -60705,14 +60878,29 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
60705
60878
  saving_results: {
60706
60879
  text: "Results awaiting save"
60707
60880
  },
60708
- viewer_read_only: {
60709
- text: "Your team role allows viewing results. Ask a team member to run this skill."
60881
+ inspiration_search_phrase: {
60882
+ text: "Find information directly with an app skill, and keep the results for later."
60710
60883
  },
60711
- not_found: {
60712
- text: "This app or skill is unavailable."
60884
+ inspiration_search_title: {
60885
+ text: "Use a Skill Directly"
60713
60886
  },
60714
- result_unavailable: {
60715
- text: "This result could not be opened."
60887
+ inspiration_search_feature_title: {
60888
+ text: "Search the web"
60889
+ },
60890
+ inspiration_search_feature_description: {
60891
+ text: "Search without starting a chat."
60892
+ },
60893
+ inspiration_weather_phrase: {
60894
+ text: "Check the forecast before making plans. Your saved results stay together in Apps."
60895
+ },
60896
+ inspiration_weather_title: {
60897
+ text: "Plan Around the Weather"
60898
+ },
60899
+ inspiration_weather_feature_title: {
60900
+ text: "Weather forecast"
60901
+ },
60902
+ inspiration_weather_feature_description: {
60903
+ text: "Choose a location and dates."
60716
60904
  }
60717
60905
  },
60718
60906
  audio: {
@@ -61581,6 +61769,20 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
61581
61769
  }
61582
61770
  }
61583
61771
  },
61772
+ send_storage_errors: {
61773
+ missing_attachment_content: {
61774
+ text: "An attachment is not ready to save. Please prepare it again."
61775
+ },
61776
+ stale_attachment_reference: {
61777
+ text: "An attachment belongs to a previous account or workspace. Please select it again."
61778
+ },
61779
+ changed_attachment_reference: {
61780
+ text: "The attachment was edited. Please prepare it again before sending."
61781
+ },
61782
+ retry_context_changed: {
61783
+ text: "This saved send no longer matches the current chat or attachments. Reload the chat before retrying."
61784
+ }
61785
+ },
61584
61786
  suggestions: {
61585
61787
  explore_next: {
61586
61788
  text: "What do you want to explore next?"
@@ -62484,6 +62686,12 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
62484
62686
  report_description: {
62485
62687
  text: "A chat processing error happened. I consent to include the current chat context for debugging this incident."
62486
62688
  }
62689
+ },
62690
+ watch_older_messages: {
62691
+ text: "Older messages"
62692
+ },
62693
+ watch_newer_messages: {
62694
+ text: "Newer messages"
62487
62695
  }
62488
62696
  },
62489
62697
  common: {
@@ -65870,6 +66078,27 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
65870
66078
  hours_minutes: {
65871
66079
  text: "{hours} h {minutes} min"
65872
66080
  }
66081
+ },
66082
+ watch_preview_unavailable: {
66083
+ text: "Preview not available"
66084
+ },
66085
+ watch_sheet_cells: {
66086
+ text: "{count} cells"
66087
+ },
66088
+ add_memory: {
66089
+ text: "Add memory"
66090
+ },
66091
+ forget_memory: {
66092
+ text: "Forget"
66093
+ },
66094
+ event: {
66095
+ text: "Event"
66096
+ },
66097
+ online_event: {
66098
+ text: "Online event"
66099
+ },
66100
+ travel_connection: {
66101
+ text: "Travel connection"
65873
66102
  }
65874
66103
  },
65875
66104
  enter_message: {
@@ -68976,6 +69205,23 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
68976
69205
  }
68977
69206
  }
68978
69207
  },
69208
+ focus_phases: {
69209
+ phases: {
69210
+ text: "Phases"
69211
+ },
69212
+ requirements: {
69213
+ text: "Requirements"
69214
+ },
69215
+ confirmation: {
69216
+ text: "Your confirmation is required"
69217
+ },
69218
+ switched: {
69219
+ text: "Focus phase:"
69220
+ },
69221
+ returned: {
69222
+ text: "Returned to focus phase:"
69223
+ }
69224
+ },
68979
69225
  footer: {
68980
69226
  language_selector: {
68981
69227
  label: {
@@ -71594,6 +71840,50 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
71594
71840
  }
71595
71841
  }
71596
71842
  },
71843
+ live_activities: {
71844
+ downloads_title: {
71845
+ text: "Model downloads"
71846
+ },
71847
+ upcoming_title: {
71848
+ text: "Upcoming saved item"
71849
+ },
71850
+ upcoming_detail: {
71851
+ text: "Open OpenMates to view the details."
71852
+ },
71853
+ upcoming_previous: {
71854
+ text: "Previous item"
71855
+ },
71856
+ upcoming_next: {
71857
+ text: "Next item"
71858
+ },
71859
+ upcoming_position: {
71860
+ text: "{number} of {count}"
71861
+ },
71862
+ upcoming_total: {
71863
+ text: "{count} upcoming"
71864
+ },
71865
+ upcoming_view_all: {
71866
+ text: "View all"
71867
+ },
71868
+ download_complete: {
71869
+ text: "{model} is ready for offline tests."
71870
+ },
71871
+ transfer: {
71872
+ text: "Downloading"
71873
+ },
71874
+ verifying: {
71875
+ text: "Verifying"
71876
+ },
71877
+ waiting: {
71878
+ text: "Waiting for connection"
71879
+ },
71880
+ retrying: {
71881
+ text: "Retrying download"
71882
+ },
71883
+ multiple_downloads: {
71884
+ text: "{count} model downloads"
71885
+ }
71886
+ },
71597
71887
  login: {
71598
71888
  recovery_optional_authenticator: {
71599
71889
  text: "Set up an authenticator (optional)"
@@ -72660,6 +72950,9 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
72660
72950
  workspace_voice_unavailable: {
72661
72951
  text: "Voice input for projects is coming soon."
72662
72952
  },
72953
+ workspace_readme_create_coming_soon: {
72954
+ text: "Creating READMEs directly in OpenMates is coming soon."
72955
+ },
72663
72956
  workspace_inspiration_brief: {
72664
72957
  text: "Start every project with a short brief: goal, audience, deadline, and the first concrete next step."
72665
72958
  },
@@ -75712,7 +76005,7 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
75712
76005
  text: "Local models lab"
75713
76006
  },
75714
76007
  description: {
75715
- text: "Optional on-device experiments. Download models once, then test without a network connection. No credits are charged."
76008
+ text: "Optional on-device experiments. Use installed system voices or download models once, then test without a network connection. No credits are charged."
75716
76009
  },
75717
76010
  toggle: {
75718
76011
  text: "Use local models in this lab"
@@ -75750,21 +76043,12 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
75750
76043
  audio_ready: {
75751
76044
  text: "Audio ready: {seconds} seconds"
75752
76045
  },
75753
- speech_input: {
75754
- text: "English text to speak"
75755
- },
75756
76046
  privacy_input: {
75757
76047
  text: "Text to inspect for personal data"
75758
76048
  },
75759
76049
  input_placeholder: {
75760
76050
  text: "Enter disposable test text"
75761
76051
  },
75762
- play: {
75763
- text: "Play generated speech"
75764
- },
75765
- stop_playback: {
75766
- text: "Stop playback"
75767
- },
75768
76052
  running: {
75769
76053
  text: "Running locally\u2026"
75770
76054
  },
@@ -75816,9 +76100,6 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
75816
76100
  whisper: {
75817
76101
  text: "WhisperKit large-v3 turbo \xB7 speech to text"
75818
76102
  },
75819
- kokoro: {
75820
- text: "Kokoro \xB7 English text to speech"
75821
- },
75822
76103
  privacy_filter: {
75823
76104
  text: "OpenAI Privacy Filter \xB7 personal data"
75824
76105
  },
@@ -75831,29 +76112,89 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
75831
76112
  revision: {
75832
76113
  text: "Revision"
75833
76114
  },
75834
- waveform: {
75835
- text: "Generated audio waveform"
75836
- },
75837
76115
  cancelled: {
75838
76116
  text: "Download cancelled"
75839
76117
  },
75840
76118
  not_enough_space: {
75841
76119
  text: "Not enough free storage for this model"
75842
76120
  },
75843
- kokoro_os_error: {
75844
- text: "Kokoro is currently unavailable on iOS and macOS 27 or later because its upstream runtime can crash. Try another model or an earlier supported OS."
75845
- },
75846
76121
  peak_memory: {
75847
- text: "App peak resident memory"
75848
- },
75849
- verifying: {
75850
- text: "Verifying installed files locally\u2026"
75851
- },
75852
- kokoro_input_limits: {
75853
- text: "Use short, simple English text. Spell out decimals, currency amounts and times in words. Unsupported formats and foreign characters are rejected. This lab does not include the full upstream text normalization pipeline."
76122
+ text: "Sampled app peak memory during test"
75854
76123
  },
75855
76124
  architecture_unavailable: {
75856
76125
  text: "These local models require an iPhone, iPad or Apple silicon Mac. Intel Macs and Apple Watch are unsupported; downloads and tests are disabled."
76126
+ },
76127
+ phase_submission: {
76128
+ text: "Preparing local test\u2026"
76129
+ },
76130
+ phase_tokenizer: {
76131
+ text: "Preparing tokenizer\u2026"
76132
+ },
76133
+ phase_model_loading: {
76134
+ text: "Loading model\u2026"
76135
+ },
76136
+ phase_transcription: {
76137
+ text: "Transcribing audio\u2026"
76138
+ },
76139
+ phase_cleanup: {
76140
+ text: "Unloading resources\u2026"
76141
+ },
76142
+ phase_completion: {
76143
+ text: "Local test completed"
76144
+ },
76145
+ phase_warning: {
76146
+ text: "This stage is taking longer than expected. You can cancel; native cleanup may take time."
76147
+ },
76148
+ phase_duration: {
76149
+ text: "{phase}: {seconds} s"
76150
+ },
76151
+ verifying_progress: {
76152
+ text: "Verifying downloaded files {percent}%"
76153
+ },
76154
+ baseline_memory: {
76155
+ text: "Memory before test"
76156
+ },
76157
+ end_memory: {
76158
+ text: "Memory after unloading"
76159
+ },
76160
+ phase_inference: {
76161
+ text: "Detecting personal data\u2026"
76162
+ },
76163
+ waiting_for_connection: {
76164
+ text: "Waiting for connection \xB7 {percent}% downloaded. You can cancel."
76165
+ },
76166
+ retrying_download: {
76167
+ text: "Retrying interrupted download \xB7 {percent}% downloaded"
76168
+ },
76169
+ pocket_tts: {
76170
+ text: "Pocket TTS \xB7 English"
76171
+ },
76172
+ pocket_description: {
76173
+ text: "Developer test: English speech with the Alba voice, entirely on this device after download. Chat speech stays unchanged. Multilingual models are not supported by this runtime."
76174
+ },
76175
+ pocket_voice: {
76176
+ text: "Voice"
76177
+ },
76178
+ pocket_attribution: {
76179
+ text: "Alba MacKenna voice attribution and license"
76180
+ },
76181
+ pocket_input: {
76182
+ text: "Text to speak"
76183
+ },
76184
+ pocket_input_limit: {
76185
+ text: "Up to 600 UTF-8 bytes and 4 short sentences. Each sentence is limited to 160 bytes and 64 model tokens. Longer input is rejected."
76186
+ },
76187
+ pocket_synthesis: {
76188
+ text: "Generating speech on this device\u2026"
76189
+ },
76190
+ pocket_cancelling: {
76191
+ text: "Cancelling after the current sentence finishes and the model unloads\u2026"
76192
+ },
76193
+ pocket_play: {
76194
+ text: "Play generated audio"
76195
+ },
76196
+ pocket_stop: {
76197
+ text: "Stop audio"
75857
76198
  }
75858
76199
  },
75859
76200
  open_settings_menu: {
@@ -76866,6 +77207,18 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
76866
77207
  },
76867
77208
  composer_suggestion_description: {
76868
77209
  text: "Download the optional on-device model to catch more personal details before sending. Your text stays local."
77210
+ },
77211
+ regex_fallback: {
77212
+ text: "Basic pattern detection and your custom entries stay active while the optional model is unavailable or loading. Your master switch, category choices, and exclusions still apply."
77213
+ },
77214
+ diagnostic_title: {
77215
+ text: "Test enhanced detection locally"
77216
+ },
77217
+ diagnostic_description: {
77218
+ text: "Test the installed privacy model on this device. Test text stays local and is cleared when you leave. This test does not change your anonymization settings."
77219
+ },
77220
+ verifying: {
77221
+ text: "Checking personal data on this device\u2026"
76869
77222
  }
76870
77223
  },
76871
77224
  connected_accounts: {
@@ -79574,6 +79927,32 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
79574
79927
  storage_delete_error: {
79575
79928
  text: "Failed to delete files. Please try again."
79576
79929
  }
79930
+ },
79931
+ watch_whisper: {
79932
+ title: {
79933
+ text: "Watch tiny Whisper lab"
79934
+ },
79935
+ experiment: {
79936
+ text: "Foreground experiment. Physical Watch speed, memory, accuracy and battery use are unverified. Chat settings stay unchanged."
79937
+ },
79938
+ enable: {
79939
+ text: "Enable this experiment"
79940
+ },
79941
+ disable: {
79942
+ text: "Disable this experiment"
79943
+ },
79944
+ record_limit: {
79945
+ text: "Record up to 30 seconds. Keep this page open while testing."
79946
+ },
79947
+ metrics: {
79948
+ text: "Load {load}s \xB7 Transcribe {transcribe}s \xB7 Unload {unload}s"
79949
+ },
79950
+ memory: {
79951
+ text: "Resident memory: start {start}, sampled peak {peak}, end {end}"
79952
+ },
79953
+ fixture: {
79954
+ text: "Disposable audio fixture"
79955
+ }
79577
79956
  }
79578
79957
  },
79579
79958
  signup: {
@@ -80411,104 +80790,16 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
80411
80790
  }
80412
80791
  },
80413
80792
  tasks: {
80414
- blocked_heading: {
80415
- text: "Blocked reason"
80416
- },
80417
- blocked_reason: {
80418
- needs_user_input: {
80419
- text: "More information is needed from you before this Task can continue."
80420
- },
80421
- waiting_for_approval: {
80422
- text: "This Task is waiting for approval."
80423
- },
80424
- missing_credentials: {
80425
- text: "Credentials are required before this Task can continue."
80426
- },
80427
- ambiguous_requirement: {
80428
- text: "A requirement needs clarification before this Task can continue."
80429
- },
80430
- external_dependency: {
80431
- text: "This Task is waiting for an external dependency."
80432
- },
80433
- environment_unavailable: {
80434
- text: "The required environment is currently unavailable."
80435
- },
80436
- verification_failed: {
80437
- text: "Verification failed and must be resolved before this Task can continue."
80438
- },
80439
- other: {
80440
- text: "This Task needs attention before it can continue."
80441
- }
80442
- },
80443
- activity: {
80444
- title: {
80445
- text: "Activity"
80446
- },
80447
- placeholder: {
80448
- text: "Add a comment..."
80449
- },
80450
- send: {
80451
- text: "Send"
80452
- },
80453
- sending: {
80454
- text: "Sending..."
80455
- },
80456
- attach: {
80457
- text: "Attach files"
80458
- },
80459
- voice: {
80460
- text: "Record voice"
80461
- },
80462
- loading: {
80463
- text: "Loading Activity..."
80464
- },
80465
- empty: {
80466
- text: "No Activity yet."
80467
- },
80468
- user: {
80469
- text: "User"
80470
- },
80471
- via_cli: {
80472
- text: "via OpenMates CLI"
80473
- },
80474
- via_sdk: {
80475
- text: "via OpenMates SDK"
80476
- },
80477
- tombstone: {
80478
- text: "Comment by {author} deleted by {deleter}"
80479
- },
80480
- delete: {
80481
- text: "Delete comment"
80482
- },
80483
- delete_confirm: {
80484
- text: "Delete this comment?"
80485
- },
80486
- uploading: {
80487
- text: "Uploading attachment..."
80488
- },
80489
- transcribing: {
80490
- text: "Transcribing recording..."
80491
- },
80492
- processing_error: {
80493
- text: "Attachment processing failed. Remove or retry it before sending."
80494
- },
80495
- load_error: {
80496
- text: "Activity could not be loaded."
80497
- },
80498
- create_error: {
80499
- text: "The comment could not be sent."
80793
+ workspace: {
80794
+ drag: {
80795
+ text: "Drag task to another status"
80500
80796
  },
80501
- attachment_error: {
80502
- text: "The attachment could not be processed."
80797
+ move_failed: {
80798
+ text: "The task could not be moved. Try again."
80503
80799
  },
80504
- delete_error: {
80505
- text: "The comment could not be deleted."
80800
+ drop_to_mark: {
80801
+ text: "Drop to mark {status}"
80506
80802
  },
80507
- key_error: {
80508
- text: "One or more Activity attachments could not be decrypted."
80509
- }
80510
- },
80511
- workspace: {
80512
80803
  greeting: {
80513
80804
  text: "Hey there!"
80514
80805
  },
@@ -80724,6 +81015,15 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
80724
81015
  }
80725
81016
  },
80726
81017
  detail: {
81018
+ edit_failed: {
81019
+ text: "Could not save the task. Your changes are still here."
81020
+ },
81021
+ edit_conflict: {
81022
+ text: "This task changed elsewhere. Reload it before saving your changes."
81023
+ },
81024
+ priority: {
81025
+ text: "Priority"
81026
+ },
80727
81027
  priority_none: {
80728
81028
  text: "No priority"
80729
81029
  },
@@ -80758,6 +81058,103 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
80758
81058
  text: "{created} by {creator}"
80759
81059
  }
80760
81060
  },
81061
+ blocked_heading: {
81062
+ text: "Blocked reason"
81063
+ },
81064
+ blocked_reason: {
81065
+ needs_user_input: {
81066
+ text: "More information is needed from you before this Task can continue."
81067
+ },
81068
+ waiting_for_approval: {
81069
+ text: "This Task is waiting for approval."
81070
+ },
81071
+ missing_credentials: {
81072
+ text: "Credentials are required before this Task can continue."
81073
+ },
81074
+ ambiguous_requirement: {
81075
+ text: "A requirement needs clarification before this Task can continue."
81076
+ },
81077
+ external_dependency: {
81078
+ text: "This Task is waiting for an external dependency."
81079
+ },
81080
+ environment_unavailable: {
81081
+ text: "The required environment is currently unavailable."
81082
+ },
81083
+ verification_failed: {
81084
+ text: "Verification failed and must be resolved before this Task can continue."
81085
+ },
81086
+ other: {
81087
+ text: "This Task needs attention before it can continue."
81088
+ }
81089
+ },
81090
+ activity: {
81091
+ title: {
81092
+ text: "Activity"
81093
+ },
81094
+ placeholder: {
81095
+ text: "Add a comment..."
81096
+ },
81097
+ send: {
81098
+ text: "Send"
81099
+ },
81100
+ sending: {
81101
+ text: "Sending..."
81102
+ },
81103
+ attach: {
81104
+ text: "Attach files"
81105
+ },
81106
+ voice: {
81107
+ text: "Record voice"
81108
+ },
81109
+ loading: {
81110
+ text: "Loading Activity..."
81111
+ },
81112
+ empty: {
81113
+ text: "No Activity yet."
81114
+ },
81115
+ user: {
81116
+ text: "User"
81117
+ },
81118
+ via_cli: {
81119
+ text: "via OpenMates CLI"
81120
+ },
81121
+ via_sdk: {
81122
+ text: "via OpenMates SDK"
81123
+ },
81124
+ tombstone: {
81125
+ text: "Comment by {author} deleted by {deleter}"
81126
+ },
81127
+ delete: {
81128
+ text: "Delete comment"
81129
+ },
81130
+ delete_confirm: {
81131
+ text: "Delete this comment?"
81132
+ },
81133
+ uploading: {
81134
+ text: "Uploading attachment..."
81135
+ },
81136
+ transcribing: {
81137
+ text: "Transcribing recording..."
81138
+ },
81139
+ processing_error: {
81140
+ text: "Attachment processing failed. Remove or retry it before sending."
81141
+ },
81142
+ load_error: {
81143
+ text: "Activity could not be loaded."
81144
+ },
81145
+ create_error: {
81146
+ text: "The comment could not be sent."
81147
+ },
81148
+ attachment_error: {
81149
+ text: "The attachment could not be processed."
81150
+ },
81151
+ delete_error: {
81152
+ text: "The comment could not be deleted."
81153
+ },
81154
+ key_error: {
81155
+ text: "One or more Activity attachments could not be decrypted."
81156
+ }
81157
+ },
80761
81158
  plan: {
80762
81159
  open_assumptions: {
80763
81160
  text: "open assumptions"
@@ -80828,6 +81225,12 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
80828
81225
  },
80829
81226
  manual: {
80830
81227
  text: "Manual"
81228
+ },
81229
+ my_workflows: {
81230
+ text: "My workflows"
81231
+ },
81232
+ templates: {
81233
+ text: "Templates"
80831
81234
  }
80832
81235
  },
80833
81236
  home: {
@@ -80841,7 +81244,10 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
80841
81244
  text: "What do you want to automate next?"
80842
81245
  },
80843
81246
  show_all: {
80844
- text: "Show all"
81247
+ text: "Show my workflows"
81248
+ },
81249
+ show_templates: {
81250
+ text: "Show templates"
80845
81251
  },
80846
81252
  back_to_recent: {
80847
81253
  text: "Back to recent"
package/dist/cli.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  serializeToYaml,
20
20
  shouldRequireTrustedAccountGuard,
21
21
  waitForWorkflowRun
22
- } from "./chunk-Y5OTP67B.js";
22
+ } from "./chunk-FY22JBQL.js";
23
23
  import "./chunk-FRNW5Q2V.js";
24
24
  import "./chunk-IWKP55ZB.js";
25
25
  import "./chunk-BBKJZ23O.js";
package/dist/index.js CHANGED
@@ -43,7 +43,7 @@ import {
43
43
  selectAssistantMessagesForSpeech,
44
44
  serializeToYaml,
45
45
  summarizeAssistantSpeech
46
- } from "./chunk-Y5OTP67B.js";
46
+ } from "./chunk-FY22JBQL.js";
47
47
  import "./chunk-FRNW5Q2V.js";
48
48
  import "./chunk-IWKP55ZB.js";
49
49
  import "./chunk-BBKJZ23O.js";
@@ -17,47 +17,47 @@
17
17
  {
18
18
  "name": "libggml-base.so",
19
19
  "bytes": 1110088,
20
- "sha256": "7221794368ec6289a2c98c3b7678c2db3c34dfcd58b06f1ec98da397d1b0b7ff"
20
+ "sha256": "b53c75b504353e3321fbcd821a1203d1e3f124f2df3592b7aa3311f86df3bf2a"
21
21
  },
22
22
  {
23
23
  "name": "libggml-base.so.0",
24
24
  "bytes": 1110088,
25
- "sha256": "7221794368ec6289a2c98c3b7678c2db3c34dfcd58b06f1ec98da397d1b0b7ff"
25
+ "sha256": "b53c75b504353e3321fbcd821a1203d1e3f124f2df3592b7aa3311f86df3bf2a"
26
26
  },
27
27
  {
28
28
  "name": "libggml-base.so.0.15.1",
29
29
  "bytes": 1110088,
30
- "sha256": "7221794368ec6289a2c98c3b7678c2db3c34dfcd58b06f1ec98da397d1b0b7ff"
30
+ "sha256": "b53c75b504353e3321fbcd821a1203d1e3f124f2df3592b7aa3311f86df3bf2a"
31
31
  },
32
32
  {
33
33
  "name": "libggml-cpu.so",
34
34
  "bytes": 869800,
35
- "sha256": "f81c4c66ed1ba92ac76821551895f22fa8c629569d83fb4fd6f7c2d939376e02"
35
+ "sha256": "c6e61101de0b53aa045d86b1da96b2ca09f1562372201c86197a340c100809d8"
36
36
  },
37
37
  {
38
38
  "name": "libggml-cpu.so.0",
39
39
  "bytes": 869800,
40
- "sha256": "f81c4c66ed1ba92ac76821551895f22fa8c629569d83fb4fd6f7c2d939376e02"
40
+ "sha256": "c6e61101de0b53aa045d86b1da96b2ca09f1562372201c86197a340c100809d8"
41
41
  },
42
42
  {
43
43
  "name": "libggml-cpu.so.0.15.1",
44
44
  "bytes": 869800,
45
- "sha256": "f81c4c66ed1ba92ac76821551895f22fa8c629569d83fb4fd6f7c2d939376e02"
45
+ "sha256": "c6e61101de0b53aa045d86b1da96b2ca09f1562372201c86197a340c100809d8"
46
46
  },
47
47
  {
48
48
  "name": "libggml.so",
49
49
  "bytes": 1899104,
50
- "sha256": "71a88bd5214f9787468e512144c93d41e86926d3d23af0e3ff68e9671ec7f1f7"
50
+ "sha256": "dc1d76a6a6444a7e9c45dfe93069e74b2b62b1cb14c555c3dd62d3bbd645f301"
51
51
  },
52
52
  {
53
53
  "name": "libggml.so.0",
54
54
  "bytes": 1899104,
55
- "sha256": "71a88bd5214f9787468e512144c93d41e86926d3d23af0e3ff68e9671ec7f1f7"
55
+ "sha256": "dc1d76a6a6444a7e9c45dfe93069e74b2b62b1cb14c555c3dd62d3bbd645f301"
56
56
  },
57
57
  {
58
58
  "name": "libggml.so.0.15.1",
59
59
  "bytes": 1899104,
60
- "sha256": "71a88bd5214f9787468e512144c93d41e86926d3d23af0e3ff68e9671ec7f1f7"
60
+ "sha256": "dc1d76a6a6444a7e9c45dfe93069e74b2b62b1cb14c555c3dd62d3bbd645f301"
61
61
  },
62
62
  {
63
63
  "name": "openmates-pii-worker",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.27.0-alpha.12",
3
+ "version": "0.27.0-alpha.14",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",