openmates 0.27.0-alpha.11 → 0.27.0-alpha.13
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/dist/{chunk-PKI7ESDV.js → chunk-4QNMHHIN.js} +99 -0
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/fixtures/privacy-runtime/linux-arm64/libggml-base.so +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml-base.so.0 +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml-base.so.0.15.1 +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml-cpu.so +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml-cpu.so.0 +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml-cpu.so.0.15.1 +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml.so +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml.so.0 +0 -0
- package/fixtures/privacy-runtime/linux-arm64/libggml.so.0.15.1 +0 -0
- package/fixtures/privacy-runtime/linux-arm64/manifest.json +9 -9
- package/package.json +1 -1
|
@@ -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,
|
|
@@ -68976,6 +69030,23 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
|
|
|
68976
69030
|
}
|
|
68977
69031
|
}
|
|
68978
69032
|
},
|
|
69033
|
+
focus_phases: {
|
|
69034
|
+
phases: {
|
|
69035
|
+
text: "Phases"
|
|
69036
|
+
},
|
|
69037
|
+
requirements: {
|
|
69038
|
+
text: "Requirements"
|
|
69039
|
+
},
|
|
69040
|
+
confirmation: {
|
|
69041
|
+
text: "Your confirmation is required"
|
|
69042
|
+
},
|
|
69043
|
+
switched: {
|
|
69044
|
+
text: "Focus phase:"
|
|
69045
|
+
},
|
|
69046
|
+
returned: {
|
|
69047
|
+
text: "Returned to focus phase:"
|
|
69048
|
+
}
|
|
69049
|
+
},
|
|
68979
69050
|
footer: {
|
|
68980
69051
|
language_selector: {
|
|
68981
69052
|
label: {
|
|
@@ -70826,6 +70897,15 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
|
|
|
70826
70897
|
},
|
|
70827
70898
|
user_data_backups: {
|
|
70828
70899
|
text: "**User data backups:** 60 days via S3 lifecycle; backups contain only ciphertext encrypted with your own key"
|
|
70900
|
+
},
|
|
70901
|
+
content_history_v1: {
|
|
70902
|
+
text: "Content: Current records are retained until you delete them or close the account, subject to backup cycles. Earlier database revision and activity records can remain after current records are deleted, as described separately below."
|
|
70903
|
+
},
|
|
70904
|
+
historical_directus_history: {
|
|
70905
|
+
text: "Historical database records: Earlier generic revision and activity rows may retain account-profile fields or encrypted chat and artifact snapshots after deletion of current records. They currently have no enforced automatic expiry. The 60-day encrypted-backup lifecycle does not apply to this history."
|
|
70906
|
+
},
|
|
70907
|
+
compliance_logs_history_v1: {
|
|
70908
|
+
text: "Compliance logs: Security and accountability logs can remain for their purposes. Historical database revision and activity records have no enforced automatic two-year expiry today. Financial compliance records retain their separate applicable tax and commercial-law periods."
|
|
70829
70909
|
}
|
|
70830
70910
|
},
|
|
70831
70911
|
legal_basis: {
|
|
@@ -71106,6 +71186,11 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
|
|
|
71106
71186
|
answer: {
|
|
71107
71187
|
text: "Audio travels over TLS through the OpenMates backend hosted by Hetzner and is sent to Mistral for transcription. Realtime audio is streamed; uploaded recordings are encrypted by our upload service before durable storage and decrypted only in server memory for transcription. The raw transcript is then sent to Google Gemini to correct obvious transcription errors and create a title. Audio and raw transcripts do not receive the placeholder substitution used for eligible typed chat messages. OpenMates stores recordings and transcripts as encrypted account content, but Mistral and Google may retain API request data under their own policies."
|
|
71108
71188
|
}
|
|
71189
|
+
},
|
|
71190
|
+
deletion_history_v1: {
|
|
71191
|
+
answer: {
|
|
71192
|
+
text: "When you delete chats or your account, OpenMates deletes the current records under that deletion\u2019s authority. Account deletion also destroys account-controlled encryption keys, making data protected solely by those keys unreadable. Earlier database revision and activity records may still contain account-profile fields or encrypted chat and artifact snapshots after current records are deleted. Those historical records are separate from short-lived encrypted backups and have no enforced automatic expiry today. Invoices, payment records, security logs and provider-held data may also remain for their applicable purposes."
|
|
71193
|
+
}
|
|
71109
71194
|
}
|
|
71110
71195
|
},
|
|
71111
71196
|
protection: {
|
|
@@ -71318,6 +71403,9 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
|
|
|
71318
71403
|
},
|
|
71319
71404
|
description: {
|
|
71320
71405
|
text: "Authentication and data-access audit logs are retained for 2 years under BSI \xA734 BDSG (German security audit obligations). These logs contain timestamp, user identifier, event type, and status \u2014 no content."
|
|
71406
|
+
},
|
|
71407
|
+
description_history_v1: {
|
|
71408
|
+
text: "Authentication and data-access audit logs can contain timestamps, user identifiers, event types and status. No enforced automatic two-year expiry for historical database revision and activity records exists today. Generic history with earlier record snapshots is described separately below; no general two-year statutory duty is claimed."
|
|
71321
71409
|
}
|
|
71322
71410
|
},
|
|
71323
71411
|
third_party_ai_logs: {
|
|
@@ -71351,6 +71439,17 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
|
|
|
71351
71439
|
description: {
|
|
71352
71440
|
text: "AI providers retain request logs under their own policies, independently of OpenMates, and we cannot delete data from their systems. Retention is provider-specific; for example, Mistral states 30 rolling days for ordinary API input and output unless zero-data retention is active, while Google's current Gemini abuse-monitoring documentation states 55 days for logged prompts, context, and outputs. Eligible typed chat uses client-side placeholder substitution, which reduces exposure but may miss data and does not cover voice audio, raw transcripts, uploaded or reference files, connected-account content, or structured skill inputs unless a feature explicitly says otherwise."
|
|
71353
71441
|
}
|
|
71442
|
+
},
|
|
71443
|
+
intro_history_v1: {
|
|
71444
|
+
text: "When you delete your account, we destroy account-controlled encryption keys and remove current account records. Earlier database revision and activity records may remain after those records are deleted. Other data retained for security, financial, provider or backup purposes is listed separately below:"
|
|
71445
|
+
},
|
|
71446
|
+
historical_directus_history: {
|
|
71447
|
+
heading: {
|
|
71448
|
+
text: "Historical database revisions and activity"
|
|
71449
|
+
},
|
|
71450
|
+
description: {
|
|
71451
|
+
text: "Historical database revision and activity records created before a chat or account is deleted can retain earlier account-profile fields or encrypted chat and artifact snapshots. Deleting the current records does not automatically purge or irreversibly neutralize those historical rows. They currently have no enforced automatic expiry and are separate from the 60-day encrypted-backup lifecycle and dedicated security or financial records."
|
|
71452
|
+
}
|
|
71354
71453
|
}
|
|
71355
71454
|
},
|
|
71356
71455
|
training_policies: {
|
package/dist/cli.js
CHANGED
package/dist/index.js
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -17,47 +17,47 @@
|
|
|
17
17
|
{
|
|
18
18
|
"name": "libggml-base.so",
|
|
19
19
|
"bytes": 1110088,
|
|
20
|
-
"sha256": "
|
|
20
|
+
"sha256": "c64d722fab0e4fead54199164443a207cd3ad3eee8b42ad2388540068c19314a"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"name": "libggml-base.so.0",
|
|
24
24
|
"bytes": 1110088,
|
|
25
|
-
"sha256": "
|
|
25
|
+
"sha256": "c64d722fab0e4fead54199164443a207cd3ad3eee8b42ad2388540068c19314a"
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"name": "libggml-base.so.0.15.1",
|
|
29
29
|
"bytes": 1110088,
|
|
30
|
-
"sha256": "
|
|
30
|
+
"sha256": "c64d722fab0e4fead54199164443a207cd3ad3eee8b42ad2388540068c19314a"
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"name": "libggml-cpu.so",
|
|
34
34
|
"bytes": 869800,
|
|
35
|
-
"sha256": "
|
|
35
|
+
"sha256": "5d92fb1742ee59a038123138fa46d0d5e6a1c3f03ddfc250dcf715332b86372f"
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
"name": "libggml-cpu.so.0",
|
|
39
39
|
"bytes": 869800,
|
|
40
|
-
"sha256": "
|
|
40
|
+
"sha256": "5d92fb1742ee59a038123138fa46d0d5e6a1c3f03ddfc250dcf715332b86372f"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"name": "libggml-cpu.so.0.15.1",
|
|
44
44
|
"bytes": 869800,
|
|
45
|
-
"sha256": "
|
|
45
|
+
"sha256": "5d92fb1742ee59a038123138fa46d0d5e6a1c3f03ddfc250dcf715332b86372f"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"name": "libggml.so",
|
|
49
49
|
"bytes": 1899104,
|
|
50
|
-
"sha256": "
|
|
50
|
+
"sha256": "ff3318374e6087592081d85ced75c8dd600eec54e9d14621e494d8f379533fb5"
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"name": "libggml.so.0",
|
|
54
54
|
"bytes": 1899104,
|
|
55
|
-
"sha256": "
|
|
55
|
+
"sha256": "ff3318374e6087592081d85ced75c8dd600eec54e9d14621e494d8f379533fb5"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"name": "libggml.so.0.15.1",
|
|
59
59
|
"bytes": 1899104,
|
|
60
|
-
"sha256": "
|
|
60
|
+
"sha256": "ff3318374e6087592081d85ced75c8dd600eec54e9d14621e494d8f379533fb5"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
"name": "openmates-pii-worker",
|