@axiom-lattice/core 2.1.74 → 2.1.76

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/index.mjs CHANGED
@@ -2319,24 +2319,6 @@ var InMemoryThreadMessageQueueStore = class {
2319
2319
  }
2320
2320
  }
2321
2321
  }
2322
- async markCompleted(messageId) {
2323
- for (const messages of this.messages.values()) {
2324
- const message = messages.find((msg) => msg.id === messageId);
2325
- if (message) {
2326
- message.status = "completed";
2327
- return;
2328
- }
2329
- }
2330
- }
2331
- async clearCompletedMessages(threadId) {
2332
- const messages = this.messages.get(threadId);
2333
- if (messages) {
2334
- const filtered = messages.filter(
2335
- (msg) => msg.status !== "completed"
2336
- );
2337
- this.messages.set(threadId, filtered);
2338
- }
2339
- }
2340
2322
  async resetProcessingToPending(threadId) {
2341
2323
  const messages = this.messages.get(threadId);
2342
2324
  if (!messages) {
@@ -3225,7 +3207,6 @@ var SqlDatabaseManager = class _SqlDatabaseManager {
3225
3207
  constructor() {
3226
3208
  this.databases = /* @__PURE__ */ new Map();
3227
3209
  this.defaultDatabaseKeys = /* @__PURE__ */ new Map();
3228
- this.configStore = null;
3229
3210
  }
3230
3211
  /**
3231
3212
  * Get the singleton instance
@@ -3285,16 +3266,9 @@ var SqlDatabaseManager = class _SqlDatabaseManager {
3285
3266
  }
3286
3267
  this.defaultDatabaseKeys.set(tenantId, key);
3287
3268
  }
3288
- /**
3289
- * Set the configuration store for on-demand database loading
3290
- * @param store - The database configuration store
3291
- */
3292
- setConfigStore(store) {
3293
- this.configStore = store;
3294
- }
3295
3269
  /**
3296
3270
  * Get a database by key for a specific tenant
3297
- * If database is not registered and configStore is set, will try to load from store
3271
+ * If database is not registered, tries to load from the store lattice
3298
3272
  * @param tenantId - Tenant identifier (required)
3299
3273
  * @param key - Database key (optional, uses default if not provided)
3300
3274
  * @returns ISqlDatabase instance
@@ -3312,8 +3286,10 @@ var SqlDatabaseManager = class _SqlDatabaseManager {
3312
3286
  return database;
3313
3287
  }
3314
3288
  }
3315
- if (this.configStore) {
3316
- const configEntry = await this.configStore.getConfigByKey(tenantId, dbKey);
3289
+ try {
3290
+ const { store } = getStoreLattice("default", "database");
3291
+ const configStore = store;
3292
+ const configEntry = await configStore.getConfigByKey(tenantId, dbKey);
3317
3293
  if (configEntry) {
3318
3294
  this.registerDatabase(tenantId, dbKey, configEntry.config);
3319
3295
  if (!this.defaultDatabaseKeys.has(tenantId)) {
@@ -3327,6 +3303,7 @@ var SqlDatabaseManager = class _SqlDatabaseManager {
3327
3303
  }
3328
3304
  }
3329
3305
  }
3306
+ } catch {
3330
3307
  }
3331
3308
  if (!tenantDbs) {
3332
3309
  throw new Error(`No databases registered for tenant '${tenantId}'`);
@@ -4436,6 +4413,7 @@ var MetricsServerManager = class _MetricsServerManager {
4436
4413
  this.clients = /* @__PURE__ */ new Map();
4437
4414
  this.configs = /* @__PURE__ */ new Map();
4438
4415
  this.defaultServerKeys = /* @__PURE__ */ new Map();
4416
+ this._loadingPromise = null;
4439
4417
  }
4440
4418
  /**
4441
4419
  * Get the singleton instance
@@ -4446,6 +4424,32 @@ var MetricsServerManager = class _MetricsServerManager {
4446
4424
  }
4447
4425
  return _MetricsServerManager.instance;
4448
4426
  }
4427
+ /**
4428
+ * Ensure configurations are loaded from the store lattice.
4429
+ * Uses a promise-lock to prevent concurrent loads.
4430
+ */
4431
+ async _ensureLoaded() {
4432
+ if (this.clients.size > 0) {
4433
+ return;
4434
+ }
4435
+ if (this._loadingPromise) {
4436
+ return this._loadingPromise;
4437
+ }
4438
+ this._loadingPromise = (async () => {
4439
+ try {
4440
+ const { store } = getStoreLattice("default", "metrics");
4441
+ const configStore = store;
4442
+ const configs = await configStore.getAllConfigsWithoutTenant();
4443
+ for (const entry of configs) {
4444
+ const tenantId = entry.tenantId || "default";
4445
+ this.registerServer(tenantId, entry.key, entry.config);
4446
+ }
4447
+ } finally {
4448
+ this._loadingPromise = null;
4449
+ }
4450
+ })();
4451
+ return this._loadingPromise;
4452
+ }
4449
4453
  /**
4450
4454
  * Get or create tenant clients map
4451
4455
  */
@@ -4514,7 +4518,8 @@ var MetricsServerManager = class _MetricsServerManager {
4514
4518
  * @param tenantId - Tenant identifier
4515
4519
  * @param key - Server key (optional, uses default if not provided)
4516
4520
  */
4517
- getClient(tenantId, key) {
4521
+ async getClient(tenantId, key) {
4522
+ await this._ensureLoaded();
4518
4523
  const tenantClients = this.clients.get(tenantId);
4519
4524
  if (!tenantClients) {
4520
4525
  throw new Error(`No metrics servers registered for tenant '${tenantId}'`);
@@ -4534,7 +4539,8 @@ var MetricsServerManager = class _MetricsServerManager {
4534
4539
  * @param tenantId - Tenant identifier
4535
4540
  * @param key - Server key (optional, uses default if not provided)
4536
4541
  */
4537
- getConfig(tenantId, key) {
4542
+ async getConfig(tenantId, key) {
4543
+ await this._ensureLoaded();
4538
4544
  const tenantConfigs = this.configs.get(tenantId);
4539
4545
  if (!tenantConfigs) {
4540
4546
  throw new Error(`No metrics servers registered for tenant '${tenantId}'`);
@@ -4562,7 +4568,8 @@ var MetricsServerManager = class _MetricsServerManager {
4562
4568
  * Get all registered metrics server keys with their types for a tenant
4563
4569
  * @param tenantId - Tenant identifier
4564
4570
  */
4565
- getServerKeys(tenantId) {
4571
+ async getServerKeys(tenantId) {
4572
+ await this._ensureLoaded();
4566
4573
  const tenantConfigs = this.configs.get(tenantId);
4567
4574
  if (!tenantConfigs) {
4568
4575
  return [];
@@ -4629,20 +4636,6 @@ var MetricsServerManager = class _MetricsServerManager {
4629
4636
  this.registerServer(tenantId, entry.key, entry.config);
4630
4637
  }
4631
4638
  }
4632
- /**
4633
- * Load all metrics server configurations from a store
4634
- * across all tenants and register them with this manager
4635
- *
4636
- * @param store - The metrics server configuration store
4637
- * @deprecated Use loadConfigsFromStore with specific tenant instead
4638
- */
4639
- async loadAllConfigsFromStore(store) {
4640
- const configs = await store.getAllConfigsWithoutTenant();
4641
- for (const entry of configs) {
4642
- const tenantId = entry.tenantId || "default";
4643
- this.registerServer(tenantId, entry.key, entry.config);
4644
- }
4645
- }
4646
4639
  };
4647
4640
  var metricsServerManager = MetricsServerManager.getInstance();
4648
4641
 
@@ -4661,7 +4654,7 @@ ${serverKeys.map(
4661
4654
  async (_input, _exeConfig) => {
4662
4655
  try {
4663
4656
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
4664
- const servers = metricsServerManager.getServerKeys(tenantId);
4657
+ const servers = await metricsServerManager.getServerKeys(tenantId);
4665
4658
  if (servers.length === 0) {
4666
4659
  return "No metrics servers registered.";
4667
4660
  }
@@ -4700,7 +4693,7 @@ ${serverKeys.map(
4700
4693
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
4701
4694
  let effectiveServerKeys = serverKeys;
4702
4695
  if (connectAll) {
4703
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
4696
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
4704
4697
  }
4705
4698
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
4706
4699
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -4723,12 +4716,12 @@ To view all available data sources, please clear the current selection or reopen
4723
4716
  const allDataSources = [];
4724
4717
  for (const serverKey of filteredServerKeys) {
4725
4718
  try {
4726
- const config = metricsServerManager.getConfig(tenantId, serverKey);
4719
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
4727
4720
  if (config.type !== "semantic") {
4728
4721
  console.warn(`Server "${serverKey}" is not a semantic metrics server, skipping.`);
4729
4722
  continue;
4730
4723
  }
4731
- const client = metricsServerManager.getClient(tenantId, serverKey);
4724
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
4732
4725
  const dataSources = await client.getDataSources();
4733
4726
  const selectedIds = config.selectedDataSources || [];
4734
4727
  const filteredDataSources = selectedIds.length > 0 ? dataSources.filter((ds) => selectedIds.includes(String(ds.id))) : dataSources;
@@ -4819,7 +4812,7 @@ ${serverKeys.map(
4819
4812
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
4820
4813
  let effectiveServerKeys = serverKeys;
4821
4814
  if (connectAll) {
4822
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
4815
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
4823
4816
  }
4824
4817
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
4825
4818
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -4831,11 +4824,11 @@ ${serverKeys.map(
4831
4824
  if (!filteredServerKeys.includes(serverKey)) {
4832
4825
  return `Error: serverKey "${serverKey}" is not available for tenant "${tenantId}". Available servers: [${filteredServerKeys.join(", ")}]`;
4833
4826
  }
4834
- const config = metricsServerManager.getConfig(tenantId, serverKey);
4827
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
4835
4828
  if (config.type !== "semantic") {
4836
4829
  return `Error: Server "${serverKey}" is not a semantic metrics server. This tool only works with semantic servers.`;
4837
4830
  }
4838
- const client = metricsServerManager.getClient(tenantId, serverKey);
4831
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
4839
4832
  const targetDatasourceIds = datasourceIds && datasourceIds.length > 0 ? datasourceIds : metricsDataSource?.datasourceId ? [metricsDataSource.datasourceId] : client.getSelectedDataSources();
4840
4833
  if (targetDatasourceIds.length === 0) {
4841
4834
  return `Error: No data sources specified and no default data sources configured for server "${serverKey}".`;
@@ -4977,7 +4970,7 @@ ${serverKeys.map(
4977
4970
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
4978
4971
  let effectiveServerKeys = serverKeys;
4979
4972
  if (connectAll) {
4980
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
4973
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
4981
4974
  }
4982
4975
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
4983
4976
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -4993,11 +4986,11 @@ ${serverKeys.map(
4993
4986
  if (!metricName) {
4994
4987
  return "Error: metricName parameter is required.";
4995
4988
  }
4996
- const config = metricsServerManager.getConfig(tenantId, serverKey);
4989
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
4997
4990
  if (config.type !== "semantic") {
4998
4991
  return `Error: Server "${serverKey}" is not a semantic metrics server. This tool only works with semantic servers.`;
4999
4992
  }
5000
- const client = metricsServerManager.getClient(tenantId, serverKey);
4993
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
5001
4994
  const targetDatasourceIds = datasourceId ? [datasourceId] : client.getSelectedDataSources();
5002
4995
  if (targetDatasourceIds.length === 0) {
5003
4996
  return `Error: No datasourceId specified and no default data sources configured for server "${serverKey}".`;
@@ -5213,7 +5206,7 @@ ${serverKeys.map(
5213
5206
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
5214
5207
  let effectiveServerKeys = serverKeys;
5215
5208
  if (connectAll) {
5216
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
5209
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
5217
5210
  }
5218
5211
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
5219
5212
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -5232,11 +5225,11 @@ ${serverKeys.map(
5232
5225
  if (!metrics || metrics.length === 0) {
5233
5226
  return "Error: metrics parameter is required (at least one metric name).";
5234
5227
  }
5235
- const config = metricsServerManager.getConfig(tenantId, serverKey);
5228
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
5236
5229
  if (config.type !== "semantic") {
5237
5230
  return `Error: Server "${serverKey}" is not a semantic metrics server. This tool only works with semantic servers.`;
5238
5231
  }
5239
- const client = metricsServerManager.getClient(tenantId, serverKey);
5232
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
5240
5233
  const semanticFilters = (filters || []).map((f) => ({
5241
5234
  dimension: f.dimension,
5242
5235
  operator: f.operator,
@@ -5294,7 +5287,7 @@ ${serverKeys.map(
5294
5287
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
5295
5288
  let effectiveServerKeys = serverKeys;
5296
5289
  if (connectAll) {
5297
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
5290
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
5298
5291
  }
5299
5292
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
5300
5293
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -5306,11 +5299,11 @@ ${serverKeys.map(
5306
5299
  if (!filteredServerKeys.includes(serverKey)) {
5307
5300
  return `Error: serverKey "${serverKey}" is not available for tenant "${tenantId}". Available servers: [${filteredServerKeys.join(", ")}]`;
5308
5301
  }
5309
- const config = metricsServerManager.getConfig(tenantId, serverKey);
5302
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
5310
5303
  if (config.type !== "semantic") {
5311
5304
  return `Error: Server "${serverKey}" is not a semantic metrics server. This tool only works with semantic servers.`;
5312
5305
  }
5313
- const client = metricsServerManager.getClient(tenantId, serverKey);
5306
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
5314
5307
  const targetDatasourceIds = datasourceIds && datasourceIds.length > 0 ? datasourceIds : metricsDataSource?.datasourceId ? [metricsDataSource.datasourceId] : client.getSelectedDataSources();
5315
5308
  if (targetDatasourceIds.length === 0) {
5316
5309
  return `Error: No data sources specified and no default data sources configured for server "${serverKey}".`;
@@ -5399,7 +5392,7 @@ ${serverKeys.map(
5399
5392
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
5400
5393
  let effectiveServerKeys = serverKeys;
5401
5394
  if (connectAll) {
5402
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
5395
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
5403
5396
  }
5404
5397
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
5405
5398
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -5415,11 +5408,11 @@ ${serverKeys.map(
5415
5408
  if (!tableName) {
5416
5409
  return "Error: tableName parameter is required.";
5417
5410
  }
5418
- const config = metricsServerManager.getConfig(tenantId, serverKey);
5411
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
5419
5412
  if (config.type !== "semantic") {
5420
5413
  return `Error: Server "${serverKey}" is not a semantic metrics server. This tool only works with semantic servers.`;
5421
5414
  }
5422
- const client = metricsServerManager.getClient(tenantId, serverKey);
5415
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
5423
5416
  const targetDatasourceIds = datasourceId ? [datasourceId] : client.getSelectedDataSources();
5424
5417
  if (targetDatasourceIds.length === 0) {
5425
5418
  return `Error: No datasourceId specified and no default data sources configured for server "${serverKey}".`;
@@ -5539,7 +5532,7 @@ ${serverKeys.map(
5539
5532
  const tenantId = getTenantIdFromConfig2(_exeConfig, getTenantId2);
5540
5533
  let effectiveServerKeys = serverKeys;
5541
5534
  if (connectAll) {
5542
- effectiveServerKeys = metricsServerManager.getServerKeys(tenantId).map((s) => s.key);
5535
+ effectiveServerKeys = (await metricsServerManager.getServerKeys(tenantId)).map((s) => s.key);
5543
5536
  }
5544
5537
  const filteredServerKeys = filterServerKeysByTenant(effectiveServerKeys, tenantId);
5545
5538
  const runConfig = _exeConfig?.configurable?.runConfig || {};
@@ -5558,11 +5551,11 @@ ${serverKeys.map(
5558
5551
  if (!customSql || customSql.trim().length === 0) {
5559
5552
  return "Error: customSql parameter is required and cannot be empty.";
5560
5553
  }
5561
- const config = metricsServerManager.getConfig(tenantId, serverKey);
5554
+ const config = await metricsServerManager.getConfig(tenantId, serverKey);
5562
5555
  if (config.type !== "semantic") {
5563
5556
  return `Error: Server "${serverKey}" is not a semantic metrics server. This tool only works with semantic servers.`;
5564
5557
  }
5565
- const client = metricsServerManager.getClient(tenantId, serverKey);
5558
+ const client = await metricsServerManager.getClient(tenantId, serverKey);
5566
5559
  const result = await client.executeSqlQuery({
5567
5560
  datasourceId,
5568
5561
  customSql,
@@ -12122,7 +12115,7 @@ var Agent = class {
12122
12115
  command: p.command,
12123
12116
  custom_run_config: p.custom_run_config ?? queueMessageData.custom_run_config
12124
12117
  }, signal);
12125
- await this.queueStore?.markCompleted(p.id);
12118
+ await this.queueStore?.removeMessage(p.id);
12126
12119
  const runStatus = await this.getRunStatus();
12127
12120
  const state = await this.getCurrentState();
12128
12121
  if (runStatus === "interrupted" /* INTERRUPTED */) {
@@ -12164,7 +12157,8 @@ var Agent = class {
12164
12157
  error: error instanceof Error ? error.message : String(error),
12165
12158
  timestamp: /* @__PURE__ */ new Date()
12166
12159
  });
12167
- throw error;
12160
+ await this.queueStore?.removeMessage(p.id);
12161
+ continue;
12168
12162
  }
12169
12163
  }
12170
12164
  }
@@ -12200,7 +12194,7 @@ var Agent = class {
12200
12194
  const runStatus = await this.getRunStatus();
12201
12195
  const state = await this.getCurrentState();
12202
12196
  for (const p of remainingPendings) {
12203
- await this.queueStore?.markCompleted(p.id);
12197
+ await this.queueStore?.removeMessage(p.id);
12204
12198
  if (runStatus === "interrupted" /* INTERRUPTED */) {
12205
12199
  this.publish("message:interrupted", {
12206
12200
  type: "message:interrupted",
@@ -12242,8 +12236,8 @@ var Agent = class {
12242
12236
  error: error instanceof Error ? error.message : String(error),
12243
12237
  timestamp: /* @__PURE__ */ new Date()
12244
12238
  });
12239
+ await this.queueStore?.removeMessage(p.id);
12245
12240
  }
12246
- throw error;
12247
12241
  }
12248
12242
  } else if (this.queueMode.mode === "followup" /* FOLLOWUP */) {
12249
12243
  for (const p of remainingPendings) {
@@ -12271,7 +12265,7 @@ var Agent = class {
12271
12265
  input,
12272
12266
  custom_run_config: p.custom_run_config ?? queueMessageData.custom_run_config
12273
12267
  }, signal);
12274
- await this.queueStore?.markCompleted(p.id);
12268
+ await this.queueStore?.removeMessage(p.id);
12275
12269
  const runStatus = await this.getRunStatus();
12276
12270
  const state = await this.getCurrentState();
12277
12271
  if (runStatus === "interrupted" /* INTERRUPTED */) {
@@ -12313,7 +12307,8 @@ var Agent = class {
12313
12307
  error: error instanceof Error ? error.message : String(error),
12314
12308
  timestamp: /* @__PURE__ */ new Date()
12315
12309
  });
12316
- throw error;
12310
+ await this.queueStore?.removeMessage(p.id);
12311
+ continue;
12317
12312
  }
12318
12313
  }
12319
12314
  }
@@ -17934,6 +17929,75 @@ function mergeAgentConfig(parent, child) {
17934
17929
  return merged;
17935
17930
  }
17936
17931
 
17932
+ // src/store_lattice/configureStores.ts
17933
+ var _disposables = [];
17934
+ var _cleanupRegistered = false;
17935
+ function registerSignalCleanup() {
17936
+ if (_cleanupRegistered) return;
17937
+ _cleanupRegistered = true;
17938
+ for (const sig of ["SIGINT", "SIGTERM"]) {
17939
+ process.once(sig, async () => {
17940
+ for (const s of _disposables) {
17941
+ if (s.dispose) await s.dispose();
17942
+ }
17943
+ });
17944
+ }
17945
+ }
17946
+ async function initAndRegister(store, localDisposables) {
17947
+ const initStore = store;
17948
+ if (typeof initStore.initialize === "function" && initStore.initialize.length === 0) {
17949
+ await initStore.initialize();
17950
+ }
17951
+ const dispStore = store;
17952
+ if (typeof dispStore.dispose === "function") {
17953
+ localDisposables.push(dispStore);
17954
+ }
17955
+ }
17956
+ async function configureStores(stores, options = {}) {
17957
+ const localDisposables = [];
17958
+ const { schedule, checkpoint, ...regularStores } = stores;
17959
+ for (const [type, store] of Object.entries(regularStores)) {
17960
+ await initAndRegister(store, localDisposables);
17961
+ if (storeLatticeManager.hasLattice("default", type)) {
17962
+ storeLatticeManager.removeLattice("default", type);
17963
+ }
17964
+ storeLatticeManager.registerLattice("default", type, store);
17965
+ }
17966
+ if (schedule !== void 0) {
17967
+ await initAndRegister(schedule, localDisposables);
17968
+ const scheduleConfig = {
17969
+ name: "Default Scheduler",
17970
+ description: "Auto-configured schedule storage",
17971
+ type: "postgres",
17972
+ storage: schedule
17973
+ };
17974
+ registerScheduleLattice("default", scheduleConfig);
17975
+ }
17976
+ if (checkpoint !== void 0) {
17977
+ MemoryLatticeManager.getInstance().removeCheckpointSaver("default");
17978
+ registerCheckpointSaver("default", checkpoint);
17979
+ }
17980
+ if (options.customStores) {
17981
+ for (const [type, store] of Object.entries(options.customStores)) {
17982
+ await initAndRegister(store, localDisposables);
17983
+ const t = type;
17984
+ if (storeLatticeManager.hasLattice("default", t)) {
17985
+ storeLatticeManager.removeLattice("default", t);
17986
+ }
17987
+ storeLatticeManager.registerLattice("default", t, store);
17988
+ }
17989
+ }
17990
+ if (options.autoDisposeStores) {
17991
+ registerSignalCleanup();
17992
+ _disposables.push(...localDisposables);
17993
+ }
17994
+ return async () => {
17995
+ for (const s of localDisposables.reverse()) {
17996
+ if (s.dispose) await s.dispose();
17997
+ }
17998
+ };
17999
+ }
18000
+
17937
18001
  // src/store_lattice/SandboxSkillStore.ts
17938
18002
  function parseFrontmatter2(content) {
17939
18003
  const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/;
@@ -18222,9 +18286,7 @@ ${body}` : `${frontmatter}
18222
18286
  } catch (listError) {
18223
18287
  console.log(`[SandboxSkillStore] Skills directory not found, creating: ${skillsDir}`);
18224
18288
  try {
18225
- await sandbox.shell.execCommand({
18226
- command: `mkdir -p /root/.agents/skills`
18227
- });
18289
+ await sandbox.file.createDirectory(skillsDir);
18228
18290
  } catch (mkdirError) {
18229
18291
  console.error(`[SandboxSkillStore] Failed to create skills directory: ${mkdirError.message}`);
18230
18292
  return [];
@@ -18365,12 +18427,7 @@ ${body}` : `${frontmatter}
18365
18427
  try {
18366
18428
  const sandbox = await this.getSandbox(tenantId, context);
18367
18429
  const dirPath = this.getSkillDirectoryPath(tenantId, id);
18368
- const deleteResult = await sandbox.shell.execCommand({
18369
- command: `rm -rf ${dirPath}`
18370
- });
18371
- if (deleteResult.exit_code !== 0) {
18372
- return false;
18373
- }
18430
+ await sandbox.file.deletePath(dirPath);
18374
18431
  return true;
18375
18432
  } catch (error) {
18376
18433
  console.error(`Error deleting skill ${id}:`, error);
@@ -21183,6 +21240,20 @@ var MicrosandboxRemoteInstance = class {
21183
21240
  return Buffer.from(result.contentBase64, "base64");
21184
21241
  }
21185
21242
  return Buffer.from(result.content ?? "");
21243
+ },
21244
+ deletePath: async (path3) => {
21245
+ const resolved = normalizeExternalSandboxPath(path3);
21246
+ await this.client.execCommand({
21247
+ sandboxName: this.name,
21248
+ command: `rm -rf "${resolved}"`
21249
+ });
21250
+ },
21251
+ createDirectory: async (path3) => {
21252
+ const resolved = normalizeExternalSandboxPath(path3);
21253
+ await this.client.execCommand({
21254
+ sandboxName: this.name,
21255
+ command: `mkdir -p "${resolved}"`
21256
+ });
21186
21257
  }
21187
21258
  };
21188
21259
  this.shell = {
@@ -21634,6 +21705,24 @@ var RemoteSandboxInstance = class {
21634
21705
  }
21635
21706
  const buffer2 = await result.body.arrayBuffer();
21636
21707
  return Buffer.from(buffer2);
21708
+ },
21709
+ deletePath: async (path3) => {
21710
+ const resolved = this.resolvePath(path3);
21711
+ const result = await this.client.shell.execCommand({
21712
+ command: `rm -rf "${resolved}"`
21713
+ });
21714
+ if (!result.ok) {
21715
+ throw new Error(`deletePath failed: ${extractFetcherError(result.error)}`);
21716
+ }
21717
+ },
21718
+ createDirectory: async (path3) => {
21719
+ const resolved = this.resolvePath(path3);
21720
+ const result = await this.client.shell.execCommand({
21721
+ command: `mkdir -p "${resolved}"`
21722
+ });
21723
+ if (!result.ok) {
21724
+ throw new Error(`createDirectory failed: ${extractFetcherError(result.error)}`);
21725
+ }
21637
21726
  }
21638
21727
  };
21639
21728
  this.shell = {
@@ -21897,6 +21986,12 @@ var E2BInstance = class {
21897
21986
  downloadFile: async (params) => {
21898
21987
  const data = await this.native.files.read(params.file, { format: "bytes" });
21899
21988
  return Buffer.isBuffer(data) ? data : Buffer.from(data);
21989
+ },
21990
+ deletePath: async (path3) => {
21991
+ await this.native.commands.run(`rm -rf "${path3}"`);
21992
+ },
21993
+ createDirectory: async (path3) => {
21994
+ await this.native.commands.run(`mkdir -p "${path3}"`);
21900
21995
  }
21901
21996
  };
21902
21997
  this.shell = {
@@ -22063,6 +22158,12 @@ var DaytonaInstance = class {
22063
22158
  downloadFile: async (params) => {
22064
22159
  const buffer2 = await this.native.fs.downloadFile(toRelativePath(params.file));
22065
22160
  return Buffer.isBuffer(buffer2) ? buffer2 : Buffer.from(buffer2);
22161
+ },
22162
+ deletePath: async (path3) => {
22163
+ await this.native.process.executeCommand(`rm -rf "${toRelativePath(path3)}"`, void 0, void 0);
22164
+ },
22165
+ createDirectory: async (path3) => {
22166
+ await this.native.process.executeCommand(`mkdir -p "${toRelativePath(path3)}"`, void 0, void 0);
22066
22167
  }
22067
22168
  };
22068
22169
  this.shell = {
@@ -22504,6 +22605,7 @@ export {
22504
22605
  checkEmptyContent,
22505
22606
  clearEncryptionKeyCache,
22506
22607
  computeSandboxName,
22608
+ configureStores,
22507
22609
  createAgentTeam,
22508
22610
  createExecuteSqlQueryTool,
22509
22611
  createFileData,