@remnic/core 9.17.0 → 9.17.1

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 (45) hide show
  1. package/dist/access-admin-ops-surface.js +2 -2
  2. package/dist/access-boundary.js +2 -2
  3. package/dist/access-cli.js +8 -8
  4. package/dist/access-http.js +6 -6
  5. package/dist/access-identity-continuity-surface.js +2 -2
  6. package/dist/access-lcm-surface.js +2 -2
  7. package/dist/access-mcp.js +5 -5
  8. package/dist/access-namespace-preflight.js +2 -2
  9. package/dist/access-observe-write-surface.js +2 -2
  10. package/dist/access-operations-batch.js +3 -3
  11. package/dist/access-operations.d.ts +3 -3
  12. package/dist/access-operations.js +4 -4
  13. package/dist/access-recall-concurrency.js +2 -2
  14. package/dist/access-recall-response.js +2 -2
  15. package/dist/access-recall-surface.js +2 -2
  16. package/dist/access-schema.d.ts +76 -76
  17. package/dist/access-service.js +2 -2
  18. package/dist/{chunk-UH7VNQ7O.js → chunk-52EFQMQC.js} +2 -2
  19. package/dist/{chunk-GEDBTSYU.js → chunk-7O2C2OOF.js} +4 -4
  20. package/dist/{chunk-OXT5TQDS.js → chunk-B6P3QDBF.js} +2 -2
  21. package/dist/{chunk-TUNI4GB3.js → chunk-BGBPDAIN.js} +2 -2
  22. package/dist/{chunk-TXXP7WAM.js → chunk-KQED7RCV.js} +4 -4
  23. package/dist/{chunk-M6TZQDTX.js → chunk-VZC7ORJE.js} +2 -2
  24. package/dist/{chunk-ANGUOE2N.js → chunk-WIUYMCPL.js} +2 -2
  25. package/dist/{chunk-DETNBTZS.js → chunk-XSBUROEB.js} +20 -4
  26. package/dist/chunk-XSBUROEB.js.map +1 -0
  27. package/dist/cli.js +7 -7
  28. package/dist/index.d.ts +404 -404
  29. package/dist/index.js +8 -8
  30. package/dist/offline-sync-impression-drain.js +1 -1
  31. package/dist/orchestrator.js +8 -8
  32. package/dist/schemas.d.ts +76 -76
  33. package/dist/shared-context/manager.d.ts +8 -8
  34. package/dist/transfer/types.d.ts +66 -66
  35. package/package.json +2 -2
  36. package/src/offline-sync-impression-drain.test.ts +54 -0
  37. package/src/offline-sync-impression-drain.ts +35 -3
  38. package/dist/chunk-DETNBTZS.js.map +0 -1
  39. /package/dist/{chunk-UH7VNQ7O.js.map → chunk-52EFQMQC.js.map} +0 -0
  40. /package/dist/{chunk-GEDBTSYU.js.map → chunk-7O2C2OOF.js.map} +0 -0
  41. /package/dist/{chunk-OXT5TQDS.js.map → chunk-B6P3QDBF.js.map} +0 -0
  42. /package/dist/{chunk-TUNI4GB3.js.map → chunk-BGBPDAIN.js.map} +0 -0
  43. /package/dist/{chunk-TXXP7WAM.js.map → chunk-KQED7RCV.js.map} +0 -0
  44. /package/dist/{chunk-M6TZQDTX.js.map → chunk-VZC7ORJE.js.map} +0 -0
  45. /package/dist/{chunk-ANGUOE2N.js.map → chunk-WIUYMCPL.js.map} +0 -0
@@ -210,7 +210,7 @@ import {
210
210
  } from "./chunk-BCNVNUQG.js";
211
211
  import {
212
212
  EngramAccessHttpServer
213
- } from "./chunk-GEDBTSYU.js";
213
+ } from "./chunk-7O2C2OOF.js";
214
214
  import {
215
215
  WearablesInputError
216
216
  } from "./chunk-V7IZKJI3.js";
@@ -223,13 +223,13 @@ import {
223
223
  createProductionChatLlmAdapter,
224
224
  loadChatSession,
225
225
  sessionBelongsToPrincipal
226
- } from "./chunk-OXT5TQDS.js";
226
+ } from "./chunk-B6P3QDBF.js";
227
227
  import {
228
228
  getAbstractionNodeStoreStatus
229
229
  } from "./chunk-OADWQ5CR.js";
230
230
  import {
231
231
  EngramAccessService
232
- } from "./chunk-ANGUOE2N.js";
232
+ } from "./chunk-WIUYMCPL.js";
233
233
  import {
234
234
  WorkStorage
235
235
  } from "./chunk-GDB4J2H3.js";
@@ -7650,4 +7650,4 @@ export {
7650
7650
  listMemoryMarkdownFilePaths,
7651
7651
  registerCli
7652
7652
  };
7653
- //# sourceMappingURL=chunk-TXXP7WAM.js.map
7653
+ //# sourceMappingURL=chunk-KQED7RCV.js.map
@@ -7,7 +7,7 @@ import {
7
7
  DELTA_SUBCOMMANDS,
8
8
  defineOperation,
9
9
  isCodegraphToolName
10
- } from "./chunk-ANGUOE2N.js";
10
+ } from "./chunk-WIUYMCPL.js";
11
11
  import {
12
12
  serializeMutations,
13
13
  withHeldFileLock
@@ -1805,4 +1805,4 @@ export {
1805
1805
  codegraphIngestTracesOperation,
1806
1806
  REGISTERED_OPERATIONS
1807
1807
  };
1808
- //# sourceMappingURL=chunk-M6TZQDTX.js.map
1808
+ //# sourceMappingURL=chunk-VZC7ORJE.js.map
@@ -58,7 +58,7 @@ import {
58
58
  } from "./chunk-6HMYUWXR.js";
59
59
  import {
60
60
  offlineSyncStorageForSnapshot
61
- } from "./chunk-DETNBTZS.js";
61
+ } from "./chunk-XSBUROEB.js";
62
62
  import {
63
63
  combineNamespaces,
64
64
  defaultGitInvoker,
@@ -12385,4 +12385,4 @@ export {
12385
12385
  EngramAccessService,
12386
12386
  AccessAdminOpsSurface
12387
12387
  };
12388
- //# sourceMappingURL=chunk-ANGUOE2N.js.map
12388
+ //# sourceMappingURL=chunk-WIUYMCPL.js.map
@@ -8,6 +8,9 @@ import {
8
8
  drainPendingLifecycleForSyncOrThrow,
9
9
  drainPendingLifecycleLedgerForSync
10
10
  } from "./chunk-XKGPIWGI.js";
11
+ import {
12
+ namespaceIdentityFromToken
13
+ } from "./chunk-EGGE52UU.js";
11
14
  import {
12
15
  assertPathInsideRoot,
13
16
  pathIsInside
@@ -15,6 +18,9 @@ import {
15
18
  import {
16
19
  displayErrorDetail
17
20
  } from "./chunk-RL6NEVXT.js";
21
+ import {
22
+ isSafeRouteNamespace
23
+ } from "./chunk-U3PN77QT.js";
18
24
  import {
19
25
  isErrnoCode
20
26
  } from "./chunk-5UZXUTVO.js";
@@ -54,7 +60,13 @@ async function getOfflineSyncStorage(orchestrator, namespace) {
54
60
  if (path.resolve(storage.dir) === memoryRoot && orchestrator.listOfflineSyncNamespaces) {
55
61
  const drained = /* @__PURE__ */ new Set([memoryRoot]);
56
62
  for (const ns of await orchestrator.listOfflineSyncNamespaces()) {
57
- const nsStorage = await orchestrator.getStorage(ns);
63
+ let nsStorage;
64
+ try {
65
+ nsStorage = await orchestrator.getStorage(ns);
66
+ } catch (err) {
67
+ log.debug(`offline-sync root drain: skipping namespace ${ns} (non-fatal): ${err}`);
68
+ continue;
69
+ }
58
70
  const nsDir = path.resolve(nsStorage.dir);
59
71
  if (drained.has(nsDir)) continue;
60
72
  drained.add(nsDir);
@@ -68,8 +80,12 @@ async function listOfflineSyncNamespaces(host) {
68
80
  try {
69
81
  for (const ledgerPath of await offlineSyncLifecycleLedgerPaths(host.config.memoryDir)) {
70
82
  const namespaceDir = path.dirname(path.dirname(ledgerPath));
71
- if (path.basename(path.dirname(namespaceDir)) === "namespaces") {
72
- names.add(path.basename(namespaceDir));
83
+ if (path.basename(path.dirname(namespaceDir)) !== "namespaces") continue;
84
+ const dirName = path.basename(namespaceDir);
85
+ const decoded = namespaceIdentityFromToken(dirName);
86
+ const name = decoded === null ? dirName : decoded.length > 0 ? decoded : host.config.defaultNamespace;
87
+ if (isSafeRouteNamespace(name)) {
88
+ names.add(name);
73
89
  }
74
90
  }
75
91
  } catch {
@@ -165,4 +181,4 @@ export {
165
181
  offlineSyncStorageForSnapshot,
166
182
  drainPendingLifecycleForOfflineSync
167
183
  };
168
- //# sourceMappingURL=chunk-DETNBTZS.js.map
184
+ //# sourceMappingURL=chunk-XSBUROEB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/offline-sync-impression-drain.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { lstat, realpath } from \"node:fs/promises\";\nimport {\n drainPendingLifecycleForSyncOrThrow,\n drainPendingLifecycleLedgerForSync,\n type LifecyclePendingIo,\n} from \"./storage/memory-lifecycle-ledger-access.js\";\nimport { writeFileAtomically } from \"./maintenance/atomic-file.js\";\nimport { log } from \"./logger.js\";\nimport { isErrnoCode } from \"./utils/errno.js\";\nimport { assertPathInsideRoot, pathIsInside } from \"./utils/path-containment.js\";\nimport { displayErrorDetail } from \"./runtime/better-sqlite.js\";\nimport { getConfiguredNamespaces } from \"./scopes/scope-plan.js\";\nimport { isSafeRouteNamespace } from \"./routing/engine.js\";\nimport { namespaceIdentityFromToken } from \"./namespaces/identity.js\";\nimport type { PluginConfig } from \"./types.js\";\n\ntype PendingImpressionDrain = () => Promise<{ pendingDeferred: boolean }>;\n\ntype PendingLifecycleDrain = {\n drainPendingMemoryLifecycleEventsForSync(): Promise<{ folded: boolean; pendingDeferred: boolean }>;\n};\n\ntype LifecycleDrainAtPath = (\n ledgerPath: string,\n) => Promise<{ folded: boolean; pendingDeferred: boolean }>;\n\ntype PendingImpressionHost = {\n drainPendingRecallImpressions(): Promise<{ pendingDeferred: boolean }>;\n};\n/**\n * Fold pending recall-impression spills before building an offline-sync snapshot.\n * A deferred or failed drain must abort the snapshot rather than silently omit\n * durable rows from the sync payload.\n */\nexport async function drainPendingImpressionsForOfflineSync(\n host: PendingImpressionDrain,\n): Promise<void> {\n const maxAttempts = 3;\n let lastError: unknown;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const result = await host();\n if (!result.pendingDeferred) return;\n lastError = undefined;\n } catch (error) {\n lastError = error;\n }\n }\n const detail = lastError\n ? `: ${displayErrorDetail(lastError) || \"unknown error\"}`\n : \" (rotation lock held by a peer)\";\n throw new Error(\n `offline-sync impression drain could not fold pending recall impressions after ${maxAttempts} attempts${detail}; aborting snapshot so the pending rows are not silently excluded (#2033)`,\n );\n}\n\n\nexport async function getOfflineSyncStorage<T extends PendingLifecycleDrain & { dir: string }>(\n orchestrator: PendingImpressionHost & {\n config: { memoryDir: string };\n getStorage(namespace: string): Promise<T>;\n listOfflineSyncNamespaces?(): Promise<string[]>;\n },\n namespace: string,\n): Promise<T> {\n const storage = await orchestrator.getStorage(namespace);\n const memoryRoot = path.resolve(orchestrator.config.memoryDir);\n // Recall impressions are global: the orchestrator's single LastRecallStore\n // roots at config.memoryDir, so the active recall_impressions.jsonl lives at\n // <memoryDir>/state/. Fold the global pending queue ONLY when THIS snapshot's\n // root actually contains that active file - a root snapshot. A namespace\n // snapshot (storage.dir under namespaces/<token>/) cannot carry it, so\n // draining there would empty the durable pending queue into a file this\n // snapshot omits and strand the row until a root sync; leave it pending for\n // the root sync instead (#2033).\n const impressionsFile = path.join(memoryRoot, \"state\", \"recall_impressions.jsonl\");\n if (pathIsInside(path.resolve(storage.dir), impressionsFile)) {\n await drainPendingImpressionsForOfflineSync(() => orchestrator.drainPendingRecallImpressions());\n }\n await drainPendingLifecycleForSyncOrThrow(() => storage.drainPendingMemoryLifecycleEventsForSync());\n // Root snapshot: buildOfflineSyncSnapshot walks `namespaces/<ns>/state/` for\n // every namespace under the memory root and INCLUDES each namespace's active\n // lifecycle ledger, but the per-namespace pending spill dirs are offline-sync\n // EXCLUDED. Draining only the root ledger above would let a root snapshot omit\n // append-only rows still sitting in a namespace's spill queue, so fold every\n // namespace ledger too - each through its OWN namespace storage so secure-store\n // AAD stays namespace-scoped (#2033, matching the CLI all-ledger drain). A\n // namespace snapshot folds only its own ledger, already done above.\n if (path.resolve(storage.dir) === memoryRoot && orchestrator.listOfflineSyncNamespaces) {\n const drained = new Set<string>([memoryRoot]);\n for (const ns of await orchestrator.listOfflineSyncNamespaces()) {\n // A single unresolvable namespace (e.g. a legacy canonical token dir whose\n // name exceeds the route-namespace length cap) must not abort the whole root\n // snapshot — degrade to draining the rest. listOfflineSyncNamespaces already\n // normalizes token dirs, so this is defense-in-depth.\n let nsStorage: T;\n try {\n nsStorage = await orchestrator.getStorage(ns);\n } catch (err) {\n log.debug(`offline-sync root drain: skipping namespace ${ns} (non-fatal): ${err}`);\n continue;\n }\n const nsDir = path.resolve(nsStorage.dir);\n if (drained.has(nsDir)) continue;\n drained.add(nsDir);\n await drainPendingLifecycleForSyncOrThrow(() => nsStorage.drainPendingMemoryLifecycleEventsForSync());\n }\n }\n return storage;\n}\n\ntype OfflineSyncNamespaceHost = {\n config: PluginConfig;\n namespaceCatalog: { listNamespaces(): Promise<Array<{ namespace: string }>> };\n};\n\n/**\n * Every namespace whose lifecycle ledger a ROOT offline snapshot enumerates.\n * Configured namespaces plus catalog-discovered ones; the catalog is queried\n * best-effort so a catalog read failure still drains the configured set (#2033).\n */\nexport async function listOfflineSyncNamespaces(host: OfflineSyncNamespaceHost): Promise<string[]> {\n const names = new Set<string>(getConfiguredNamespaces(host.config));\n try {\n for (const ledgerPath of await offlineSyncLifecycleLedgerPaths(host.config.memoryDir)) {\n const namespaceDir = path.dirname(path.dirname(ledgerPath));\n if (path.basename(path.dirname(namespaceDir)) !== \"namespaces\") continue;\n // A namespace is stored under its canonical token dir `ns-<hex>`. Decode the\n // token back to the namespace NAME so the drain fanout resolves the SAME\n // storage the token dir belongs to (the catalog rebuild scanner decodes the\n // same way, catalog.ts finishRebuild). A raw dir already named as a plain\n // namespace is used verbatim. Skip any name the router would reject — e.g. a\n // canonical token dir whose decoded-or-raw name exceeds isSafeRouteNamespace's\n // 64-char cap — because getStorage() would throw `unsafe namespace` and 500\n // the whole root snapshot-stream (the offline-sync regression this fixes).\n const dirName = path.basename(namespaceDir);\n // namespaceIdentityFromToken returns \"\" for the ns-default token (the\n // default-namespace identity) — map that to the configured default\n // namespace instead of skipping the directory as an unsafe empty name.\n const decoded = namespaceIdentityFromToken(dirName);\n const name =\n decoded === null\n ? dirName\n : decoded.length > 0\n ? decoded\n : host.config.defaultNamespace;\n if (isSafeRouteNamespace(name)) {\n names.add(name);\n }\n }\n } catch {\n // best-effort: a filesystem scan failure must not block configured/catalog namespaces\n }\n try {\n for (const record of await host.namespaceCatalog.listNamespaces()) {\n names.add(record.namespace);\n }\n } catch {\n // best-effort: fall back to the configured and filesystem namespace sets\n }\n return [...names];\n}\n\n/**\n * Resolve the offline-sync storage for a snapshot, folding pending spills first.\n * For a root snapshot this also folds every namespace lifecycle ledger the\n * snapshot will enumerate, so append-only rows in a namespace spill queue are\n * never omitted (#2033).\n */\nexport function offlineSyncStorageForSnapshot<T extends PendingLifecycleDrain & { dir: string }>(\n host: PendingImpressionHost &\n OfflineSyncNamespaceHost & {\n getStorage(namespace: string): Promise<T>;\n },\n namespace: string,\n): Promise<T> {\n return getOfflineSyncStorage(\n {\n config: { memoryDir: host.config.memoryDir },\n drainPendingRecallImpressions: () => host.drainPendingRecallImpressions(),\n getStorage: (ns: string) => host.getStorage(ns),\n listOfflineSyncNamespaces: () => listOfflineSyncNamespaces(host),\n },\n namespace,\n );\n}\n\nconst LIFECYCLE_LEDGER_FILE = \"memory-lifecycle-ledger.jsonl\";\n\n/**\n * Plaintext filesystem IO for a standalone (CLI) offline-sync lifecycle drain.\n * A standalone offline cache is plaintext - exactly like its LastRecallStore\n * impression drain - so spills read/append as UTF-8. `writeSecure` keeps the\n * atomic temp+rename the pending contract requires (#2033); a pure drain never\n * spills a new event, but the interface demands an atomic writer.\n */\nfunction plaintextLifecyclePendingIo(): LifecyclePendingIo {\n return {\n writeSecure: async (filePath, payload) => {\n await writeFileAtomically(filePath, payload);\n },\n readSecure: (filePath) => fs.promises.readFile(filePath, \"utf8\"),\n };\n}\n\n/**\n * Lifecycle ledger paths under a standalone memory dir: the root `state/` ledger\n * plus every per-namespace `namespaces/<ns>/state/` ledger (#2033). Offline sync\n * pushes the whole memory dir, so every namespace's ledger can carry pending\n * spills that must be folded first.\n */\nasync function offlineSyncLifecycleLedgerPaths(memoryDir: string): Promise<string[]> {\n const paths = [path.join(memoryDir, \"state\", LIFECYCLE_LEDGER_FILE)];\n const namespacesBase = path.join(memoryDir, \"namespaces\");\n // Symlink/traversal containment (#2033): a symlinked <memoryDir>/namespaces\n // (or a symlinked child) must not redirect the pre-sync drain - and the\n // ledger appends/mkdirs it drives - outside memoryDir. Resolve the memory\n // root and the scan base through realpath, reject a symlinked/escaping/\n // non-directory base, and skip any symlinked/escaping child, mirroring the\n // lifecycle-compaction scanner (orchestration/maintenance.ts) and the\n // memory-store walkers (utils/path-containment). A rejected base is\n // non-fatal: drain the root ledger only, never through the poisoned link.\n let memoryDirReal: string;\n try {\n memoryDirReal = await realpath(memoryDir);\n const baseStat = await lstat(namespacesBase);\n if (baseStat.isSymbolicLink() || !baseStat.isDirectory()) {\n throw new Error(\"namespaces base is a symlink or not a directory\");\n }\n assertPathInsideRoot(memoryDirReal, await realpath(namespacesBase), namespacesBase);\n } catch (err) {\n if (!isErrnoCode(err, \"ENOENT\")) {\n log.debug(`offline-sync lifecycle drain: namespaces base rejected (non-fatal): ${err}`);\n }\n return paths;\n }\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(namespacesBase, { withFileTypes: true });\n } catch (err) {\n if (!isErrnoCode(err, \"ENOENT\")) {\n log.debug(`offline-sync lifecycle drain: namespaces dir scan failed (non-fatal): ${err}`);\n }\n return paths;\n }\n for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {\n if (!entry.isDirectory() || entry.isSymbolicLink()) continue;\n const childPath = path.join(namespacesBase, entry.name);\n try {\n assertPathInsideRoot(memoryDirReal, await realpath(childPath), childPath);\n } catch (err) {\n log.debug(`offline-sync lifecycle drain: skipping out-of-root namespace dir ${childPath}: ${err}`);\n continue;\n }\n paths.push(path.join(childPath, \"state\", LIFECYCLE_LEDGER_FILE));\n }\n return paths;\n}\n\n/**\n * Fold pending memory-lifecycle spills into each active ledger under `memoryDir`\n * before a standalone (CLI) offline-sync snapshot (#2033). Mirrors the\n * access-service snapshot entrypoints, which drain lifecycle pending first: the\n * default sync exclude globs keep `memory-lifecycle-ledger.jsonl.pending.d` out\n * of the push, so an append-only row (promotion/import/explicit capture) that\n * spilled while the ledger lock was held would be silently dropped if the local\n * node were discarded before maintenance folds it. A deferred drain (lock held\n * by a peer) or a repeatedly failing fold ABORTS via\n * {@link drainPendingLifecycleForSyncOrThrow} rather than building/pushing a\n * snapshot that omits durable rows. Fast no-op per ledger with no pending dir.\n */\nexport async function drainPendingLifecycleForOfflineSync(\n memoryDir: string,\n drainAtPath: LifecycleDrainAtPath = (ledgerPath) => {\n const io = plaintextLifecyclePendingIo();\n const stateDir = path.dirname(ledgerPath);\n return drainPendingLifecycleLedgerForSync(\n ledgerPath,\n io,\n (payload) => fs.promises.appendFile(ledgerPath, payload),\n async () => {\n await fs.promises.mkdir(stateDir, { recursive: true });\n },\n );\n },\n): Promise<void> {\n for (const ledgerPath of await offlineSyncLifecycleLedgerPaths(memoryDir)) {\n await drainPendingLifecycleForSyncOrThrow(() => drainAtPath(ledgerPath));\n }\n}\n"],"mappings":"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","names":[]}
package/dist/cli.js CHANGED
@@ -90,7 +90,7 @@ import {
90
90
  runWorkProductStatusCliCommand,
91
91
  runWorkProjectCliCommand,
92
92
  runWorkTaskCliCommand
93
- } from "./chunk-TXXP7WAM.js";
93
+ } from "./chunk-KQED7RCV.js";
94
94
  import "./chunk-MMACM5G2.js";
95
95
  import "./chunk-54BGIBCR.js";
96
96
  import "./chunk-H4CKS5B2.js";
@@ -171,7 +171,7 @@ import "./chunk-K6MV3TRQ.js";
171
171
  import "./chunk-PIG4WJFQ.js";
172
172
  import "./chunk-KFZY2OFH.js";
173
173
  import "./chunk-LBJBNWS2.js";
174
- import "./chunk-GEDBTSYU.js";
174
+ import "./chunk-7O2C2OOF.js";
175
175
  import "./chunk-V7IZKJI3.js";
176
176
  import "./chunk-MKQBXQKU.js";
177
177
  import "./chunk-SEDEKFYQ.js";
@@ -181,11 +181,11 @@ import "./chunk-RSUYKGGZ.js";
181
181
  import "./chunk-42NQ7AVG.js";
182
182
  import "./chunk-TMSXWOBZ.js";
183
183
  import "./chunk-7RXCMVFQ.js";
184
- import "./chunk-OXT5TQDS.js";
184
+ import "./chunk-B6P3QDBF.js";
185
185
  import "./chunk-IC2TCZJ2.js";
186
186
  import "./chunk-D24OXEPB.js";
187
- import "./chunk-M6TZQDTX.js";
188
- import "./chunk-TUNI4GB3.js";
187
+ import "./chunk-VZC7ORJE.js";
188
+ import "./chunk-BGBPDAIN.js";
189
189
  import "./chunk-HNZKVLAN.js";
190
190
  import "./chunk-EQWEIIKQ.js";
191
191
  import "./chunk-6WAFYNVT.js";
@@ -196,7 +196,7 @@ import "./chunk-T4WDJPEZ.js";
196
196
  import "./chunk-HBYQAOED.js";
197
197
  import "./chunk-5RUE3GHQ.js";
198
198
  import "./chunk-OADWQ5CR.js";
199
- import "./chunk-ANGUOE2N.js";
199
+ import "./chunk-WIUYMCPL.js";
200
200
  import "./chunk-GDASG7NC.js";
201
201
  import "./chunk-GDB4J2H3.js";
202
202
  import "./chunk-7CPOZH6Y.js";
@@ -233,7 +233,7 @@ import "./chunk-64UDOIMI.js";
233
233
  import "./chunk-ICP53SKG.js";
234
234
  import "./chunk-AQEJKOKI.js";
235
235
  import "./chunk-6HMYUWXR.js";
236
- import "./chunk-DETNBTZS.js";
236
+ import "./chunk-XSBUROEB.js";
237
237
  import "./chunk-R6YJI3HE.js";
238
238
  import "./chunk-7VZWZVYG.js";
239
239
  import "./chunk-EIR5VLIH.js";