@lobehub/lobehub 2.0.0-next.320 → 2.0.0-next.322

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 (109) hide show
  1. package/.codex/skills/vercel-react-best-practices/AGENTS.md +2410 -0
  2. package/.codex/skills/vercel-react-best-practices/SKILL.md +125 -0
  3. package/.codex/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  4. package/.codex/skills/vercel-react-best-practices/rules/advanced-use-latest.md +49 -0
  5. package/.codex/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  6. package/.codex/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  7. package/.codex/skills/vercel-react-best-practices/rules/async-dependencies.md +36 -0
  8. package/.codex/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  9. package/.codex/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  10. package/.codex/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  11. package/.codex/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  12. package/.codex/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  13. package/.codex/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  14. package/.codex/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  15. package/.codex/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  16. package/.codex/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  17. package/.codex/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  18. package/.codex/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  19. package/.codex/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +57 -0
  20. package/.codex/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  21. package/.codex/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  22. package/.codex/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  23. package/.codex/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  24. package/.codex/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  25. package/.codex/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  26. package/.codex/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  27. package/.codex/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  28. package/.codex/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  29. package/.codex/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  30. package/.codex/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  31. package/.codex/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  32. package/.codex/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  33. package/.codex/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  34. package/.codex/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  35. package/.codex/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  36. package/.codex/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  37. package/.codex/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  38. package/.codex/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  39. package/.codex/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  40. package/.codex/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  41. package/.codex/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  42. package/.codex/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  43. package/.codex/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  44. package/.codex/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  45. package/.codex/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  46. package/.codex/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  47. package/.codex/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  48. package/.codex/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  49. package/.codex/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  50. package/.cursor/skills/vercel-react-best-practices/AGENTS.md +2410 -0
  51. package/.cursor/skills/vercel-react-best-practices/SKILL.md +125 -0
  52. package/.cursor/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  53. package/.cursor/skills/vercel-react-best-practices/rules/advanced-use-latest.md +49 -0
  54. package/.cursor/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  55. package/.cursor/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  56. package/.cursor/skills/vercel-react-best-practices/rules/async-dependencies.md +36 -0
  57. package/.cursor/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  58. package/.cursor/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  59. package/.cursor/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  60. package/.cursor/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  61. package/.cursor/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  62. package/.cursor/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  63. package/.cursor/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  64. package/.cursor/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  65. package/.cursor/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  66. package/.cursor/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  67. package/.cursor/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  68. package/.cursor/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +57 -0
  69. package/.cursor/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  70. package/.cursor/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  71. package/.cursor/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  72. package/.cursor/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  73. package/.cursor/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  74. package/.cursor/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  75. package/.cursor/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  76. package/.cursor/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  77. package/.cursor/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  78. package/.cursor/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  79. package/.cursor/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  80. package/.cursor/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  81. package/.cursor/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  82. package/.cursor/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  83. package/.cursor/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  84. package/.cursor/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  85. package/.cursor/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  86. package/.cursor/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  87. package/.cursor/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  88. package/.cursor/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  89. package/.cursor/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  90. package/.cursor/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  91. package/.cursor/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  92. package/.cursor/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  93. package/.cursor/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  94. package/.cursor/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  95. package/.cursor/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  96. package/.cursor/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  97. package/.cursor/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  98. package/.cursor/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  99. package/CHANGELOG.md +50 -0
  100. package/changelog/v1.json +10 -0
  101. package/package.json +1 -1
  102. package/src/app/[variants]/(main)/agent/profile/index.tsx +15 -2
  103. package/src/features/PageEditor/PageEditor.tsx +20 -8
  104. package/src/layout/GlobalProvider/FaviconProvider.tsx +45 -21
  105. package/src/server/globalConfig/parseMemoryExtractionConfig.ts +43 -4
  106. package/src/server/services/memory/userMemory/__tests__/extract.payload.test.ts +101 -0
  107. package/src/server/services/memory/userMemory/__tests__/extract.runtime.test.ts +121 -0
  108. package/src/server/services/memory/userMemory/extract.ts +164 -17
  109. package/src/utils/styles.ts +10 -0
@@ -38,6 +38,7 @@ import {
38
38
  } from '@lobechat/observability-otel/modules/memory-user-memory';
39
39
  import { attributesCommon } from '@lobechat/observability-otel/node';
40
40
  import type {
41
+ AiProviderRuntimeState,
41
42
  IdentityMemoryDetail,
42
43
  MemoryExtractionAgentCallTrace,
43
44
  MemoryExtractionTraceError,
@@ -55,6 +56,7 @@ import type { ListUsersForMemoryExtractorCursor } from '@/database/models/user';
55
56
  import { UserModel } from '@/database/models/user';
56
57
  import { UserMemoryModel } from '@/database/models/userMemory';
57
58
  import { UserMemorySourceBenchmarkLoCoMoModel } from '@/database/models/userMemory/sources/benchmarkLoCoMo';
59
+ import { AiInfraRepos } from '@/database/repositories/aiInfra';
58
60
  import { getServerDB } from '@/database/server';
59
61
  import { getServerGlobalConfig } from '@/server/globalConfig';
60
62
  import {
@@ -64,7 +66,7 @@ import {
64
66
  import { KeyVaultsGateKeeper } from '@/server/modules/KeyVaultsEncrypt';
65
67
  import { S3 } from '@/server/modules/S3';
66
68
  import type { GlobalMemoryLayer } from '@/types/serverConfig';
67
- import type { UserKeyVaults } from '@/types/user/settings';
69
+ import type { ProviderConfig } from '@/types/user/settings';
68
70
  import {
69
71
  LayersEnum,
70
72
  MemorySourceType,
@@ -212,6 +214,11 @@ export interface TopicBatchWorkflowPayload extends MemoryExtractionPayloadInput
212
214
  userId: string;
213
215
  }
214
216
 
217
+ type ProviderKeyVaultMap = Record<
218
+ string,
219
+ AiProviderRuntimeState['runtimeConfig'][string]['keyVaults'] | undefined
220
+ >;
221
+
215
222
  export const buildWorkflowPayloadInput = (
216
223
  payload: MemoryExtractionNormalizedPayload,
217
224
  ): MemoryExtractionPayloadInput => ({
@@ -232,11 +239,9 @@ export const buildWorkflowPayloadInput = (
232
239
  userIds: payload.userIds,
233
240
  });
234
241
 
235
- const normalizeProvider = (provider: string) => provider.toLowerCase() as keyof UserKeyVaults;
236
-
237
- const extractCredentialsFromVault = (provider: string, keyVaults?: UserKeyVaults) => {
238
- const vault = keyVaults?.[normalizeProvider(provider)];
242
+ const normalizeProvider = (provider: string) => provider.toLowerCase();
239
243
 
244
+ const extractCredentialsFromVault = (vault?: Record<string, unknown>) => {
240
245
  if (!vault || typeof vault !== 'object') return {};
241
246
 
242
247
  const apiKey = 'apiKey' in vault && typeof vault.apiKey === 'string' ? vault.apiKey : undefined;
@@ -275,11 +280,10 @@ const maskSecret = (value?: string) => {
275
280
  return `${value.slice(0, 6)}***${value.slice(-4)}`;
276
281
  };
277
282
 
278
- const resolveRuntimeAgentConfig = (agent: MemoryAgentConfig, keyVaults?: UserKeyVaults) => {
283
+ const resolveRuntimeAgentConfig = (agent: MemoryAgentConfig, keyVaults?: ProviderKeyVaultMap) => {
279
284
  const provider = agent.provider || 'openai';
280
285
  const { apiKey: userApiKey, baseURL: userBaseURL } = extractCredentialsFromVault(
281
- provider,
282
- keyVaults,
286
+ keyVaults?.[normalizeProvider(provider)],
283
287
  );
284
288
 
285
289
  // Only use the user baseURL if we are also using their API key; otherwise fall back entirely
@@ -309,7 +313,7 @@ const debugRuntimeInit = (
309
313
  });
310
314
  };
311
315
 
312
- const initRuntimeForAgent = async (agent: MemoryAgentConfig, keyVaults?: UserKeyVaults) => {
316
+ const initRuntimeForAgent = async (agent: MemoryAgentConfig, keyVaults?: ProviderKeyVaultMap) => {
313
317
  const resolved = resolveRuntimeAgentConfig(agent, keyVaults);
314
318
  debugRuntimeInit(agent, resolved);
315
319
 
@@ -366,6 +370,13 @@ type MemoryExtractionConfig = ReturnType<typeof parseMemoryExtractionConfig>;
366
370
  type ServerConfig = Awaited<ReturnType<typeof getServerGlobalConfig>>;
367
371
 
368
372
  export class MemoryExtractionExecutor {
373
+ private readonly aiProviderConfig: Record<string, ProviderConfig>;
374
+ private readonly embeddingPreferredModels?: string[];
375
+ private readonly embeddingPreferredProviders?: string[];
376
+ private readonly gatekeeperPreferredModels?: string[];
377
+ private readonly gatekeeperPreferredProviders?: string[];
378
+ private readonly layerPreferredModels?: string[];
379
+ private readonly layerPreferredProviders?: string[];
369
380
  private readonly privateConfig: MemoryExtractionConfig;
370
381
  private readonly modelConfig: {
371
382
  embeddingsModel: string;
@@ -380,6 +391,13 @@ export class MemoryExtractionExecutor {
380
391
 
381
392
  private constructor(serverConfig: ServerConfig, privateConfig: MemoryExtractionConfig) {
382
393
  this.privateConfig = privateConfig;
394
+ this.aiProviderConfig = (serverConfig.aiProvider || {}) as Record<string, ProviderConfig>;
395
+ this.embeddingPreferredProviders = privateConfig.embeddingPreferredProviders;
396
+ this.embeddingPreferredModels = privateConfig.embeddingPreferredModels;
397
+ this.gatekeeperPreferredProviders = privateConfig.agentGateKeeperPreferredProviders;
398
+ this.gatekeeperPreferredModels = privateConfig.agentGateKeeperPreferredModels;
399
+ this.layerPreferredProviders = privateConfig.agentLayerExtractorPreferredProviders;
400
+ this.layerPreferredModels = privateConfig.agentLayerExtractorPreferredModels;
383
401
 
384
402
  const publicMemoryConfig = serverConfig.memory?.userMemory;
385
403
 
@@ -1014,8 +1032,11 @@ export class MemoryExtractionExecutor {
1014
1032
  };
1015
1033
 
1016
1034
  const userModel = new UserModel(db, job.userId);
1017
- const userState = await userModel.getUserState(KeyVaultsGateKeeper.getUserKeyVaults);
1018
- const keyVaults = userState.settings?.keyVaults as UserKeyVaults | undefined;
1035
+ const [userState, aiProviderRuntimeState] = await Promise.all([
1036
+ userModel.getUserState(KeyVaultsGateKeeper.getUserKeyVaults),
1037
+ this.getAiProviderRuntimeState(job.userId),
1038
+ ]);
1039
+ const keyVaults = this.resolveRuntimeKeyVaults(aiProviderRuntimeState);
1019
1040
  const language = userState.settings?.general?.responseLanguage;
1020
1041
 
1021
1042
  const runtimes = await this.getRuntime(job.userId, keyVaults);
@@ -1625,7 +1646,121 @@ export class MemoryExtractionExecutor {
1625
1646
  };
1626
1647
  }
1627
1648
 
1628
- private async getRuntime(userId: string, keyVaults?: UserKeyVaults): Promise<RuntimeBundle> {
1649
+ private async getAiProviderRuntimeState(userId: string): Promise<AiProviderRuntimeState> {
1650
+ const db = await this.db;
1651
+ const aiInfraRepos = new AiInfraRepos(db, userId, this.aiProviderConfig);
1652
+
1653
+ return aiInfraRepos.getAiProviderRuntimeState(KeyVaultsGateKeeper.getUserKeyVaults);
1654
+ }
1655
+
1656
+ private resolveRuntimeKeyVaults(runtimeState: AiProviderRuntimeState): ProviderKeyVaultMap {
1657
+ const normalizedRuntimeConfig = Object.fromEntries(
1658
+ Object.entries(runtimeState.runtimeConfig || {}).map(([providerId, config]) => [
1659
+ normalizeProvider(providerId),
1660
+ config,
1661
+ ]),
1662
+ );
1663
+
1664
+ const providerModels = runtimeState.enabledAiModels.reduce<Record<string, Set<string>>>(
1665
+ (acc, model) => {
1666
+ const providerId = normalizeProvider(model.providerId);
1667
+ acc[providerId] = acc[providerId] || new Set<string>();
1668
+ acc[providerId].add(model.id);
1669
+ return acc;
1670
+ },
1671
+ {},
1672
+ );
1673
+
1674
+ const resolveProviderForModel = (
1675
+ modelId: string,
1676
+ fallbackProvider?: string,
1677
+ preferredProviders?: string[],
1678
+ preferredModels?: string[],
1679
+ label?: string,
1680
+ ) => {
1681
+ const providerOrder = Array.from(
1682
+ new Set(
1683
+ [
1684
+ ...(preferredProviders?.map(normalizeProvider) || []),
1685
+ fallbackProvider ? normalizeProvider(fallbackProvider) : undefined,
1686
+ ...Object.keys(providerModels),
1687
+ ].filter(Boolean) as string[],
1688
+ ),
1689
+ );
1690
+
1691
+ const candidateModels = preferredModels && preferredModels.length > 0 ? preferredModels : [];
1692
+
1693
+ for (const providerId of providerOrder) {
1694
+ const models = providerModels[providerId];
1695
+ if (!models) continue;
1696
+ if (models.has(modelId)) return providerId;
1697
+
1698
+ const preferredMatch = candidateModels.find((preferredModel) => models.has(preferredModel));
1699
+ if (preferredMatch) return providerId;
1700
+ }
1701
+ if (fallbackProvider) {
1702
+ console.warn(
1703
+ `[memory-extraction] no enabled provider found for ${label || 'model'} "${modelId}"`,
1704
+ `(preferred ${preferredProviders}), falling back to server-configured provider "${fallbackProvider}".`,
1705
+ );
1706
+
1707
+ return normalizeProvider(fallbackProvider);
1708
+ }
1709
+
1710
+ throw new Error(
1711
+ `Unable to resolve provider for ${label || 'model'} "${modelId}". ` +
1712
+ `Check preferred providers/models configuration.`,
1713
+ );
1714
+ };
1715
+
1716
+ const keyVaults: ProviderKeyVaultMap = {};
1717
+
1718
+ const gatekeeperProvider = resolveProviderForModel(
1719
+ this.modelConfig.gateModel,
1720
+ this.privateConfig.agentGateKeeper.provider,
1721
+ this.gatekeeperPreferredProviders,
1722
+ this.gatekeeperPreferredModels,
1723
+ 'gatekeeper',
1724
+ );
1725
+ const gatekeeperRuntime = normalizedRuntimeConfig[gatekeeperProvider];
1726
+ if (gatekeeperRuntime?.keyVaults) {
1727
+ keyVaults[gatekeeperProvider] = gatekeeperRuntime.keyVaults;
1728
+ }
1729
+
1730
+ const embeddingProvider = resolveProviderForModel(
1731
+ this.modelConfig.embeddingsModel,
1732
+ this.privateConfig.embedding.provider,
1733
+ this.embeddingPreferredProviders,
1734
+ this.embeddingPreferredModels,
1735
+ 'embedding',
1736
+ );
1737
+ const embeddingRuntime = normalizedRuntimeConfig[embeddingProvider];
1738
+ if (embeddingRuntime?.keyVaults) {
1739
+ keyVaults[embeddingProvider] = embeddingRuntime.keyVaults;
1740
+ }
1741
+
1742
+ Object.values(this.modelConfig.layerModels).forEach((model) => {
1743
+ if (!model) return;
1744
+ const providerId = resolveProviderForModel(
1745
+ model,
1746
+ this.privateConfig.agentLayerExtractor.provider,
1747
+ this.layerPreferredProviders,
1748
+ this.layerPreferredModels,
1749
+ 'layer extractor',
1750
+ );
1751
+ const runtime = normalizedRuntimeConfig[providerId];
1752
+ if (runtime?.keyVaults) {
1753
+ keyVaults[providerId] = runtime.keyVaults;
1754
+ }
1755
+ });
1756
+
1757
+ return keyVaults;
1758
+ }
1759
+
1760
+ private async getRuntime(
1761
+ userId: string,
1762
+ keyVaults?: ProviderKeyVaultMap,
1763
+ ): Promise<RuntimeBundle> {
1629
1764
  // TODO: implement a better cache eviction strategy
1630
1765
  // TODO: make cache size configurable
1631
1766
  if (this.runtimeCache.keys.length > 200) {
@@ -1673,8 +1808,11 @@ export class MemoryExtractionExecutor {
1673
1808
  try {
1674
1809
  const db = await this.db;
1675
1810
  const userModel = new UserModel(db, params.userId);
1676
- const userState = await userModel.getUserState(KeyVaultsGateKeeper.getUserKeyVaults);
1677
- const keyVaults = userState.settings?.keyVaults as UserKeyVaults | undefined;
1811
+ const [userState, aiProviderRuntimeState] = await Promise.all([
1812
+ userModel.getUserState(KeyVaultsGateKeeper.getUserKeyVaults),
1813
+ this.getAiProviderRuntimeState(params.userId),
1814
+ ]);
1815
+ const keyVaults = this.resolveRuntimeKeyVaults(aiProviderRuntimeState);
1678
1816
  const language = params.language || userState.settings?.general?.responseLanguage;
1679
1817
 
1680
1818
  const runtimes = await this.getRuntime(params.userId, keyVaults);
@@ -1849,7 +1987,10 @@ export class MemoryExtractionWorkflowService {
1849
1987
  return this.client;
1850
1988
  }
1851
1989
 
1852
- static triggerProcessUsers(payload: MemoryExtractionPayloadInput, options?: { extraHeaders?: Record<string, string> }) {
1990
+ static triggerProcessUsers(
1991
+ payload: MemoryExtractionPayloadInput,
1992
+ options?: { extraHeaders?: Record<string, string> },
1993
+ ) {
1853
1994
  if (!payload.baseUrl) {
1854
1995
  throw new Error('Missing baseUrl for workflow trigger');
1855
1996
  }
@@ -1858,7 +1999,10 @@ export class MemoryExtractionWorkflowService {
1858
1999
  return this.getClient().trigger({ body: payload, headers: options?.extraHeaders, url });
1859
2000
  }
1860
2001
 
1861
- static triggerProcessUserTopics(payload: UserTopicWorkflowPayload, options?: { extraHeaders?: Record<string, string> }) {
2002
+ static triggerProcessUserTopics(
2003
+ payload: UserTopicWorkflowPayload,
2004
+ options?: { extraHeaders?: Record<string, string> },
2005
+ ) {
1862
2006
  if (!payload.baseUrl) {
1863
2007
  throw new Error('Missing baseUrl for workflow trigger');
1864
2008
  }
@@ -1867,7 +2011,10 @@ export class MemoryExtractionWorkflowService {
1867
2011
  return this.getClient().trigger({ body: payload, headers: options?.extraHeaders, url });
1868
2012
  }
1869
2013
 
1870
- static triggerProcessTopics(payload: MemoryExtractionPayloadInput, options?: { extraHeaders?: Record<string, string> }) {
2014
+ static triggerProcessTopics(
2015
+ payload: MemoryExtractionPayloadInput,
2016
+ options?: { extraHeaders?: Record<string, string> },
2017
+ ) {
1871
2018
  if (!payload.baseUrl) {
1872
2019
  throw new Error('Missing baseUrl for workflow trigger');
1873
2020
  }
@@ -0,0 +1,10 @@
1
+ import type { CSSProperties } from 'react';
2
+
3
+ export const StyleSheet = {
4
+ compose: (...styles: Array<CSSProperties | undefined | null | false>): CSSProperties => {
5
+ return Object.assign({}, ...styles.filter(Boolean));
6
+ },
7
+ create: (styles: Record<string, CSSProperties>) => {
8
+ return styles;
9
+ },
10
+ };