openmates 0.18.0-alpha.26 → 0.18.0-alpha.28

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.
@@ -784,6 +784,100 @@ function hashItemKey(appId, itemKey) {
784
784
  return createHash("sha256").update(raw).digest("hex").slice(0, 32);
785
785
  }
786
786
 
787
+ // ../ui/src/utils/appMemoryRequests.ts
788
+ var REQUEST_TYPE = "app_settings_memories_request";
789
+ var COUNT_SEMANTICS_VERSION = 1;
790
+ function buildMemoryRequestMessage(params) {
791
+ if (!params.requestId || !params.userMessageId) {
792
+ throw new Error("Memory requests require stable request and user-message identities");
793
+ }
794
+ const keys = Array.from(new Set(params.requestedKeys)).sort();
795
+ const categories = [];
796
+ for (const key of keys) {
797
+ const separator2 = key.indexOf("-");
798
+ if (separator2 <= 0 || separator2 === key.length - 1) {
799
+ throw new Error(`Invalid memory category key: ${key}`);
800
+ }
801
+ const count = params.entryCounts?.get(key);
802
+ categories.push({
803
+ appId: key.slice(0, separator2),
804
+ itemType: key.slice(separator2 + 1),
805
+ entryCount: Number.isSafeInteger(count) && count >= 0 ? count : null
806
+ });
807
+ }
808
+ const content = {
809
+ type: REQUEST_TYPE,
810
+ user_message_id: params.userMessageId,
811
+ request_id: params.requestId,
812
+ requested_keys: keys,
813
+ categories,
814
+ count_semantics_version: COUNT_SEMANTICS_VERSION
815
+ };
816
+ return {
817
+ message_id: params.requestId,
818
+ role: "system",
819
+ content: JSON.stringify(content),
820
+ created_at: params.createdAt,
821
+ user_message_id: params.userMessageId
822
+ };
823
+ }
824
+ function parseMemoryRequest(content, clientMessageId) {
825
+ if (typeof content !== "string") return null;
826
+ let value;
827
+ try {
828
+ value = JSON.parse(content);
829
+ } catch {
830
+ return null;
831
+ }
832
+ if (!value || value.type !== REQUEST_TYPE || typeof value.request_id !== "string" || typeof value.user_message_id !== "string" || !Array.isArray(value.requested_keys) || !Array.isArray(value.categories) || value.categories.some((category) => !category || typeof category.appId !== "string" || typeof category.itemType !== "string") || value.requested_keys.some((key) => typeof key !== "string")) return null;
833
+ const legacyCli = value.count_semantics_version === void 0 && clientMessageId === value.request_id;
834
+ return {
835
+ ...value,
836
+ categories: value.categories.map((category) => ({
837
+ ...category,
838
+ // Old CLI writers used zero for every category, including unavailable counts.
839
+ entryCount: legacyCli || !Number.isSafeInteger(category.entryCount) || category.entryCount < 0 ? null : category.entryCount
840
+ }))
841
+ };
842
+ }
843
+ function mergeMemoryRequests(first, second) {
844
+ if (first.request_id !== second.request_id || first.user_message_id !== second.user_message_id) {
845
+ throw new Error("Cannot merge distinct memory consent requests");
846
+ }
847
+ const categories = /* @__PURE__ */ new Map();
848
+ for (const category of [...first.categories, ...second.categories]) {
849
+ const key = `${category.appId}-${category.itemType}`;
850
+ const previous = categories.get(key);
851
+ if (!previous || category.entryCount !== null && (previous.entryCount === null || category.entryCount > previous.entryCount)) {
852
+ categories.set(key, category);
853
+ }
854
+ }
855
+ return {
856
+ ...first,
857
+ count_semantics_version: COUNT_SEMANTICS_VERSION,
858
+ requested_keys: Array.from(/* @__PURE__ */ new Set([...first.requested_keys, ...second.requested_keys])).sort(),
859
+ categories: Array.from(categories.entries()).sort(([a], [b]) => a.localeCompare(b)).map(([, category]) => category)
860
+ };
861
+ }
862
+ function coalesceMemoryRequestMessages(messages) {
863
+ const result = [];
864
+ const requests = /* @__PURE__ */ new Map();
865
+ for (const message of messages) {
866
+ const request = message.role === "system" ? parseMemoryRequest(message.content, message.clientMessageId) : null;
867
+ if (!request) {
868
+ result.push(message);
869
+ continue;
870
+ }
871
+ const key = JSON.stringify([request.user_message_id, request.request_id]);
872
+ const previous = requests.get(key);
873
+ const merged = previous ? mergeMemoryRequests(previous.content, request) : request;
874
+ const index = previous?.index ?? result.length;
875
+ result[index] = { ...result[index] ?? message, content: JSON.stringify(merged) };
876
+ requests.set(key, { index, content: merged });
877
+ }
878
+ return result;
879
+ }
880
+
787
881
  // src/accountImport.ts
788
882
  import { createDecipheriv, createHash as createHash2, scryptSync } from "crypto";
789
883
  import JSZip from "jszip";
@@ -7033,41 +7127,7 @@ function normalizeStringArray(value) {
7033
7127
  if (!Array.isArray(value)) return [];
7034
7128
  return Array.from(new Set(value.map((item) => String(item).trim()).filter(Boolean)));
7035
7129
  }
7036
- function categoryFromMemoryKey(key) {
7037
- const separator2 = key.indexOf("-");
7038
- if (separator2 <= 0 || separator2 === key.length - 1) return null;
7039
- return {
7040
- appId: key.slice(0, separator2),
7041
- itemType: key.slice(separator2 + 1)
7042
- };
7043
- }
7044
- function buildAppSettingsMemoryRequestSystemMessage(params) {
7045
- const seen = /* @__PURE__ */ new Set();
7046
- const categories = [];
7047
- for (const key of params.requestedKeys) {
7048
- if (seen.has(key)) continue;
7049
- seen.add(key);
7050
- const parsed = categoryFromMemoryKey(key);
7051
- if (!parsed) continue;
7052
- categories.push({
7053
- ...parsed,
7054
- entryCount: 0
7055
- });
7056
- }
7057
- return {
7058
- message_id: params.requestId,
7059
- role: "system",
7060
- content: JSON.stringify({
7061
- type: "app_settings_memories_request",
7062
- user_message_id: params.userMessageId,
7063
- request_id: params.requestId,
7064
- requested_keys: params.requestedKeys,
7065
- categories
7066
- }),
7067
- created_at: params.createdAt,
7068
- user_message_id: params.userMessageId
7069
- };
7070
- }
7130
+ var buildAppSettingsMemoryRequestSystemMessage = buildMemoryRequestMessage;
7071
7131
  function buildAppSettingsMemoryResponseSystemMessage(params) {
7072
7132
  return {
7073
7133
  message_id: params.messageId,
@@ -9777,7 +9837,7 @@ var OpenMatesClient = class _OpenMatesClient {
9777
9837
  });
9778
9838
  }
9779
9839
  messages.sort((a, b) => a.createdAt - b.createdAt);
9780
- return messages;
9840
+ return coalesceMemoryRequestMessages(messages);
9781
9841
  }
9782
9842
  async resolveCachedChatForQuery(query, cache, wrappingKey, teamId) {
9783
9843
  const normalized = query.trim().toLowerCase();
@@ -10483,10 +10543,12 @@ var OpenMatesClient = class _OpenMatesClient {
10483
10543
  }
10484
10544
  const shouldWaitForAi = shouldWaitForTeamAi(finalMessage, teamId);
10485
10545
  let availableMemories = [];
10546
+ let memoryCountsLoaded = false;
10486
10547
  let memoryMetadataKeys = [];
10487
10548
  if (!params.incognito) {
10488
10549
  try {
10489
10550
  availableMemories = await this.listMemories({ teamId });
10551
+ memoryCountsLoaded = true;
10490
10552
  memoryMetadataKeys = [
10491
10553
  ...new Set(
10492
10554
  availableMemories.filter((memory) => memory.app_id && memory.item_type).map((memory) => `${memory.app_id}-${memory.item_type}`)
@@ -10947,6 +11009,7 @@ var OpenMatesClient = class _OpenMatesClient {
10947
11009
  userMessageId: messageId,
10948
11010
  requestId,
10949
11011
  requestedKeys: event.requestedKeys,
11012
+ entryCounts: memoryCountsLoaded ? new Map(event.requestedKeys.map((key) => [key, availableMemories.filter((memory) => `${memory.app_id}-${memory.item_type}` === key).length])) : void 0,
10950
11013
  createdAt: Math.floor(Date.now() / 1e3)
10951
11014
  }));
10952
11015
  };
package/dist/cli.js CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  resolveProjectContext,
13
13
  serializeToYaml,
14
14
  shouldRequireTrustedAccountGuard
15
- } from "./chunk-NB43XDHG.js";
15
+ } from "./chunk-4RPAJ4KP.js";
16
16
  import "./chunk-IWKP55ZB.js";
17
17
  import "./chunk-BBKJZ23O.js";
18
18
  export {
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ import {
42
42
  selectAssistantMessagesForSpeech,
43
43
  serializeToYaml,
44
44
  summarizeAssistantSpeech
45
- } from "./chunk-NB43XDHG.js";
45
+ } from "./chunk-4RPAJ4KP.js";
46
46
  import "./chunk-IWKP55ZB.js";
47
47
  import "./chunk-BBKJZ23O.js";
48
48
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.18.0-alpha.26",
3
+ "version": "0.18.0-alpha.28",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",