@skaile/workspaces 4.8.0 → 4.9.0

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 (154) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{asset-feeds-YDCXFTJ7.js → asset-feeds-UHUJ7ALH.js} +7 -7
  3. package/dist/{asset-feeds-YDCXFTJ7.js.map → asset-feeds-UHUJ7ALH.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +3 -3
  5. package/dist/asset-manager/index.js +6 -6
  6. package/dist/asset-manager/installer.js +4 -4
  7. package/dist/bridge/codex-app-server.js +4 -4
  8. package/dist/bridge/drivers/claude-sdk.js +5 -5
  9. package/dist/bridge/drivers/codex.js +6 -6
  10. package/dist/bridge/drivers/continue.js +6 -6
  11. package/dist/bridge/drivers/echo.js +1 -1
  12. package/dist/bridge/drivers/gemini.js +4 -4
  13. package/dist/bridge/drivers/goose.js +6 -6
  14. package/dist/bridge/drivers/omp.js +1 -1
  15. package/dist/bridge/drivers/opencode.js +6 -6
  16. package/dist/bridge/drivers/qwen.js +4 -4
  17. package/dist/bridge/index.js +6 -6
  18. package/dist/{chunk-RRX33TOZ.js → chunk-2FDOV5JG.js} +8 -8
  19. package/dist/{chunk-RRX33TOZ.js.map → chunk-2FDOV5JG.js.map} +1 -1
  20. package/dist/{chunk-VRBEMXEM.js → chunk-2LT4CWA5.js} +3 -3
  21. package/dist/{chunk-VRBEMXEM.js.map → chunk-2LT4CWA5.js.map} +1 -1
  22. package/dist/{chunk-J2NEKEZK.js → chunk-2PGVW3FL.js} +3 -3
  23. package/dist/{chunk-J2NEKEZK.js.map → chunk-2PGVW3FL.js.map} +1 -1
  24. package/dist/{chunk-Q5WGUPC5.js → chunk-5PF5OIQK.js} +3 -3
  25. package/dist/{chunk-Q5WGUPC5.js.map → chunk-5PF5OIQK.js.map} +1 -1
  26. package/dist/{chunk-BCXZ74DM.js → chunk-5WNQPXEG.js} +4 -4
  27. package/dist/{chunk-BCXZ74DM.js.map → chunk-5WNQPXEG.js.map} +1 -1
  28. package/dist/{chunk-TKHJXUG3.js → chunk-6J3L2CZ7.js} +4 -4
  29. package/dist/{chunk-TKHJXUG3.js.map → chunk-6J3L2CZ7.js.map} +1 -1
  30. package/dist/{chunk-GKX3QDPN.js → chunk-6LEVXQAS.js} +3 -3
  31. package/dist/{chunk-GKX3QDPN.js.map → chunk-6LEVXQAS.js.map} +1 -1
  32. package/dist/{chunk-FVYRWGUC.js → chunk-7644QU3C.js} +7 -7
  33. package/dist/{chunk-FVYRWGUC.js.map → chunk-7644QU3C.js.map} +1 -1
  34. package/dist/{chunk-NMSHQUBY.js → chunk-BHBXWDQU.js} +5 -5
  35. package/dist/{chunk-NMSHQUBY.js.map → chunk-BHBXWDQU.js.map} +1 -1
  36. package/dist/{chunk-GKP22MGV.js → chunk-D6FPKO62.js} +2 -2
  37. package/dist/{chunk-GKP22MGV.js.map → chunk-D6FPKO62.js.map} +1 -1
  38. package/dist/{chunk-NV6R6HJR.js → chunk-ERYOLF7V.js} +5 -5
  39. package/dist/{chunk-NV6R6HJR.js.map → chunk-ERYOLF7V.js.map} +1 -1
  40. package/dist/{chunk-DS7B54NF.js → chunk-F4PCBWPB.js} +3 -3
  41. package/dist/{chunk-DS7B54NF.js.map → chunk-F4PCBWPB.js.map} +1 -1
  42. package/dist/{chunk-IUVPPJ4T.js → chunk-FSRWPLIQ.js} +3 -3
  43. package/dist/{chunk-IUVPPJ4T.js.map → chunk-FSRWPLIQ.js.map} +1 -1
  44. package/dist/{chunk-U4LC6PLI.js → chunk-HA3XJN65.js} +3 -3
  45. package/dist/{chunk-U4LC6PLI.js.map → chunk-HA3XJN65.js.map} +1 -1
  46. package/dist/{chunk-HR2AGPLJ.js → chunk-HUF4ON2C.js} +4 -4
  47. package/dist/{chunk-HR2AGPLJ.js.map → chunk-HUF4ON2C.js.map} +1 -1
  48. package/dist/{chunk-IECSLI55.js → chunk-I7IWIVXY.js} +3 -3
  49. package/dist/{chunk-IECSLI55.js.map → chunk-I7IWIVXY.js.map} +1 -1
  50. package/dist/{chunk-UKFLK6V2.js → chunk-I7SQIWYX.js} +3 -3
  51. package/dist/{chunk-UKFLK6V2.js.map → chunk-I7SQIWYX.js.map} +1 -1
  52. package/dist/{chunk-DYT3AQBM.js → chunk-JUZJUKWM.js} +3 -3
  53. package/dist/{chunk-DYT3AQBM.js.map → chunk-JUZJUKWM.js.map} +1 -1
  54. package/dist/{chunk-DN2V47ER.js → chunk-KYE66EEM.js} +9 -9
  55. package/dist/{chunk-DN2V47ER.js.map → chunk-KYE66EEM.js.map} +1 -1
  56. package/dist/{chunk-TCANYRAF.js → chunk-LOCIJAS3.js} +78 -22
  57. package/dist/chunk-LOCIJAS3.js.map +1 -0
  58. package/dist/{chunk-HKOC273F.js → chunk-P2G6XSJ3.js} +82 -8
  59. package/dist/chunk-P2G6XSJ3.js.map +1 -0
  60. package/dist/{chunk-EYH5ADRU.js → chunk-PZ6AUBGY.js} +4 -4
  61. package/dist/{chunk-EYH5ADRU.js.map → chunk-PZ6AUBGY.js.map} +1 -1
  62. package/dist/{chunk-AZSRDONR.js → chunk-SJYOKKYO.js} +3 -3
  63. package/dist/{chunk-AZSRDONR.js.map → chunk-SJYOKKYO.js.map} +1 -1
  64. package/dist/{chunk-2BLQJDYI.js → chunk-TVXLXNQE.js} +7 -7
  65. package/dist/{chunk-2BLQJDYI.js.map → chunk-TVXLXNQE.js.map} +1 -1
  66. package/dist/{chunk-SU5LVG6T.js → chunk-UM4LDXV5.js} +3 -3
  67. package/dist/{chunk-SU5LVG6T.js.map → chunk-UM4LDXV5.js.map} +1 -1
  68. package/dist/{chunk-74QHEAUT.js → chunk-V62CAMBD.js} +6 -6
  69. package/dist/{chunk-74QHEAUT.js.map → chunk-V62CAMBD.js.map} +1 -1
  70. package/dist/{chunk-2GCUBS2W.js → chunk-WLPL7CRM.js} +2 -2
  71. package/dist/{chunk-2GCUBS2W.js.map → chunk-WLPL7CRM.js.map} +1 -1
  72. package/dist/{chunk-5GYFYGVW.js → chunk-WQ5BCHQS.js} +2 -2
  73. package/dist/{chunk-5GYFYGVW.js.map → chunk-WQ5BCHQS.js.map} +1 -1
  74. package/dist/{chunk-4P352BUX.js → chunk-ZH3YEVKN.js} +5 -5
  75. package/dist/{chunk-4P352BUX.js.map → chunk-ZH3YEVKN.js.map} +1 -1
  76. package/dist/cli/index.js +49 -49
  77. package/dist/connectors/config.js +4 -4
  78. package/dist/connectors/index.js +9 -9
  79. package/dist/core/index.js +3 -3
  80. package/dist/core/runtime-assets.js +2 -2
  81. package/dist/core/src/index.d.ts +1 -1
  82. package/dist/core/src/index.d.ts.map +1 -1
  83. package/dist/core/src/workspace-config.d.ts +47 -3
  84. package/dist/core/src/workspace-config.d.ts.map +1 -1
  85. package/dist/core/workspace-config.js +1 -1
  86. package/dist/deploy/index.js +3 -3
  87. package/dist/{ensure-sources-65WPFIET.js → ensure-sources-2LFWDM3X.js} +9 -9
  88. package/dist/{ensure-sources-65WPFIET.js.map → ensure-sources-2LFWDM3X.js.map} +1 -1
  89. package/dist/factory-assets/connectors/box.js +9 -9
  90. package/dist/factory-assets/connectors/deploy.js +9 -9
  91. package/dist/factory-assets/connectors/devserver.js +9 -9
  92. package/dist/factory-assets/connectors/flow/adapter.js +9 -9
  93. package/dist/factory-assets/connectors/flow/engine.js +4 -4
  94. package/dist/factory-assets/connectors/flow/run-flow.js +10 -10
  95. package/dist/factory-assets/connectors/flow.js +9 -9
  96. package/dist/factory-assets/connectors/git.js +9 -9
  97. package/dist/factory-assets/connectors/gmail.js +9 -9
  98. package/dist/factory-assets/connectors/googledrive.js +9 -9
  99. package/dist/factory-assets/connectors/local.js +9 -9
  100. package/dist/factory-assets/connectors/mattermost.js +9 -9
  101. package/dist/factory-assets/connectors/memory.js +9 -9
  102. package/dist/factory-assets/connectors/minio.js +9 -9
  103. package/dist/factory-assets/connectors/postgres.js +9 -9
  104. package/dist/factory-assets/connectors/s3.js +9 -9
  105. package/dist/factory-assets/connectors/sharepoint.js +9 -9
  106. package/dist/factory-assets/connectors/sqlite.js +9 -9
  107. package/dist/factory-assets/connectors/static-server.js +9 -9
  108. package/dist/factory-assets/connectors/tunnel.js +9 -9
  109. package/dist/factory-assets/connectors/webdav.js +9 -9
  110. package/dist/factory-assets/connectors/xstate-store.js +9 -9
  111. package/dist/factory-assets/connectors/xstate.js +9 -9
  112. package/dist/{flows-JRWDV3MG.js → flows-EO5CO3A3.js} +6 -6
  113. package/dist/{flows-JRWDV3MG.js.map → flows-EO5CO3A3.js.map} +1 -1
  114. package/dist/{helpers-3BHWBCBI.js → helpers-NR3YI5RG.js} +9 -9
  115. package/dist/{helpers-3BHWBCBI.js.map → helpers-NR3YI5RG.js.map} +1 -1
  116. package/dist/library/index.js +4 -4
  117. package/dist/library/install.js +3 -3
  118. package/dist/{library-publish-VKBT4JEX.js → library-publish-ZHO7XA5C.js} +13 -13
  119. package/dist/{library-publish-VKBT4JEX.js.map → library-publish-ZHO7XA5C.js.map} +1 -1
  120. package/dist/{open-library-PSLL6ULI.js → open-library-F7JM7RDR.js} +11 -11
  121. package/dist/{open-library-PSLL6ULI.js.map → open-library-F7JM7RDR.js.map} +1 -1
  122. package/dist/{paths-LH7LD4CC.js → paths-HWWTOYUY.js} +6 -6
  123. package/dist/{paths-LH7LD4CC.js.map → paths-HWWTOYUY.js.map} +1 -1
  124. package/dist/{plugin-store-A6VLQHCT.js → plugin-store-VJYXFXP5.js} +5 -5
  125. package/dist/{plugin-store-A6VLQHCT.js.map → plugin-store-VJYXFXP5.js.map} +1 -1
  126. package/dist/{project-KVTNJKED.js → project-HIOOMV4D.js} +10 -10
  127. package/dist/{project-KVTNJKED.js.map → project-HIOOMV4D.js.map} +1 -1
  128. package/dist/resolver/index.js +3 -3
  129. package/dist/runner/index.js +14 -14
  130. package/dist/runner/src/serve.d.ts.map +1 -1
  131. package/dist/runner/src/skill-staging.d.ts +17 -0
  132. package/dist/runner/src/skill-staging.d.ts.map +1 -1
  133. package/dist/sdk/asset-manager.js +6 -6
  134. package/dist/sdk/bridge.js +6 -6
  135. package/dist/sdk/core.js +3 -3
  136. package/dist/sdk/flow.js +4 -4
  137. package/dist/sdk/index.js +14 -14
  138. package/dist/sdk/resolver.js +3 -3
  139. package/dist/sdk/runner.js +14 -14
  140. package/dist/{setup-47UHZ7EG.js → setup-P4J7EN6S.js} +13 -13
  141. package/dist/{setup-47UHZ7EG.js.map → setup-P4J7EN6S.js.map} +1 -1
  142. package/dist/{skills-ZO66BL2Y.js → skills-DNCI6ITW.js} +5 -5
  143. package/dist/{skills-ZO66BL2Y.js.map → skills-DNCI6ITW.js.map} +1 -1
  144. package/dist/{source-5Q33HOPF.js → source-S4DM4ZFQ.js} +12 -12
  145. package/dist/{source-5Q33HOPF.js.map → source-S4DM4ZFQ.js.map} +1 -1
  146. package/dist/{source-manifest-publish-XHEAWRMG.js → source-manifest-publish-ABXDZTVG.js} +14 -14
  147. package/dist/{source-manifest-publish-XHEAWRMG.js.map → source-manifest-publish-ABXDZTVG.js.map} +1 -1
  148. package/dist/tui/index.js +14 -14
  149. package/dist/workspace-plugin/adapters/mcp.js +5 -5
  150. package/dist/workspace-plugin/adapters/omp.js +7 -7
  151. package/dist/workspace-plugin/index.js +1 -1
  152. package/package.json +1 -1
  153. package/dist/chunk-HKOC273F.js.map +0 -1
  154. package/dist/chunk-TCANYRAF.js.map +0 -1
@@ -2,8 +2,8 @@ import { SUPPORTED_DRIVER_TARGETS, globalBackendRoot } from './chunk-MENCWIHW.js
2
2
  import { decodeSkaileManifest, SKAILE_MANIFEST_FILENAME } from './chunk-P4VHQA4N.js';
3
3
  import { scanDirectory, parseFrontmatter, bundleDepRefs, fromMcpServerMdContent, withFsDeadline, tryWithFsDeadline, fsDeadlineMs } from './chunk-MKZOK4JU.js';
4
4
  import { isValidAssetName, slugifyAssetName, parseAssetRef, assetRefToStr } from './chunk-GEEW6SY2.js';
5
- import { existsSync, mkdirSync, renameSync, readdirSync, rmdirSync, readFileSync, writeFileSync, lstatSync, symlinkSync, rmSync } from 'fs';
6
- import { readdir, stat, cp, writeFile, rm } from 'fs/promises';
5
+ import { existsSync, mkdirSync, renameSync, readdirSync, rmdirSync, readFileSync, writeFileSync, lstatSync, symlinkSync, rmSync, constants } from 'fs';
6
+ import { readdir, stat, cp, rm, open, readFile } from 'fs/promises';
7
7
  import { homedir } from 'os';
8
8
  import { join, dirname, relative, resolve, parse as parse$1, basename, sep } from 'path';
9
9
  import { parse, stringify } from 'yaml';
@@ -1818,7 +1818,7 @@ async function stageMaterializedSkills(projectDir, skillsDir, opts) {
1818
1818
  try {
1819
1819
  await withFsDeadline(
1820
1820
  `write ${join(dest, STAGED_SKILL_MARKER)}`,
1821
- () => writeFile(join(dest, STAGED_SKILL_MARKER), "")
1821
+ () => writeStagedSkillMarker(join(dest, STAGED_SKILL_MARKER), name)
1822
1822
  );
1823
1823
  } catch (err) {
1824
1824
  console.warn(
@@ -1834,6 +1834,80 @@ async function stageMaterializedSkills(projectDir, skillsDir, opts) {
1834
1834
  return staged;
1835
1835
  }
1836
1836
  var STAGED_SKILL_MARKER = ".skaile-staged";
1837
+ var MARKER_READ_LIMIT = 512;
1838
+ var FOREIGN_MARKER_CODES = /* @__PURE__ */ new Set(["ELOOP", "ENXIO", "EAGAIN", "EISDIR", "ENOTDIR", "EACCES"]);
1839
+ async function writeStagedSkillMarker(path, name) {
1840
+ const flags = constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW;
1841
+ for (let attempt = 0; ; attempt++) {
1842
+ await rm(path, { force: true });
1843
+ try {
1844
+ const handle = await open(path, flags, 420);
1845
+ try {
1846
+ await handle.writeFile(name);
1847
+ } finally {
1848
+ await handle.close();
1849
+ }
1850
+ return;
1851
+ } catch (err) {
1852
+ if (err?.code !== "EEXIST" || attempt > 0) throw err;
1853
+ }
1854
+ }
1855
+ }
1856
+ async function stagedSkillMarkerState(dir, name) {
1857
+ const path = join(dir, STAGED_SKILL_MARKER);
1858
+ let content;
1859
+ try {
1860
+ content = await withFsDeadline(`read ${path}`, async () => {
1861
+ const handle = await open(
1862
+ path,
1863
+ constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK
1864
+ );
1865
+ try {
1866
+ const st = await handle.stat();
1867
+ if (!st.isFile() || st.size > MARKER_READ_LIMIT) return null;
1868
+ const buf = Buffer.alloc(MARKER_READ_LIMIT);
1869
+ const { bytesRead } = await handle.read(buf, 0, MARKER_READ_LIMIT, 0);
1870
+ return buf.subarray(0, bytesRead).toString("utf8");
1871
+ } finally {
1872
+ await handle.close();
1873
+ }
1874
+ });
1875
+ } catch (err) {
1876
+ const code = err?.code;
1877
+ if (code === "ENOENT") return "absent";
1878
+ if (code !== void 0 && FOREIGN_MARKER_CODES.has(code)) return "other";
1879
+ throw err;
1880
+ }
1881
+ if (content === null) return "other";
1882
+ const claimed = content.trim();
1883
+ if (claimed === "") return "legacy";
1884
+ return claimed === name ? "named" : "other";
1885
+ }
1886
+ async function isStagedSkillMarkerFor(dir, name) {
1887
+ return await stagedSkillMarkerState(dir, name) === "named";
1888
+ }
1889
+ var SKILL_ALLOWLIST_FILE = ".skaile/assets/skill-allowlist.json";
1890
+ var SKILL_ALLOWLIST_VERSION = 1;
1891
+ async function readSkillAllowList(projectDir) {
1892
+ const path = join(projectDir, SKILL_ALLOWLIST_FILE);
1893
+ const raw = await tryWithFsDeadline(
1894
+ `read ${path}`,
1895
+ () => readFile(path, "utf8"),
1896
+ null
1897
+ );
1898
+ if (raw === null) return null;
1899
+ let doc;
1900
+ try {
1901
+ doc = JSON.parse(raw);
1902
+ } catch {
1903
+ return null;
1904
+ }
1905
+ if (typeof doc !== "object" || doc === null || Array.isArray(doc)) return null;
1906
+ const { version, skills } = doc;
1907
+ if (version !== SKILL_ALLOWLIST_VERSION || !Array.isArray(skills)) return null;
1908
+ if (!skills.every((s) => typeof s === "string")) return null;
1909
+ return new Set(skills.flatMap((s) => [s, unscopedTail(s)]));
1910
+ }
1837
1911
  var SKILL_NAME_RE = /^(?:@[A-Za-z0-9._-]+\/)?[A-Za-z0-9._-]+$/;
1838
1912
  function skillDirName(name) {
1839
1913
  const tail = SKILL_NAME_RE.test(name) ? unscopedTail(name) : "";
@@ -1862,8 +1936,8 @@ async function unstageSkill(projectDir, skillsDir, name, opts) {
1862
1936
  const dir = skillDirName(name);
1863
1937
  const staged = join(projectDir, skillsDir, dir);
1864
1938
  const asset = join(projectDir, ".skaile/assets/skill", dir);
1865
- const owned = await probePath(staged) ? opts?.knownStaged === true || await probePath(join(staged, STAGED_SKILL_MARKER)) : null;
1866
- const removedAsset = await probePath(asset);
1939
+ const owned = await probePath(staged) ? opts?.knownStaged === true || ["named", "legacy"].includes(await stagedSkillMarkerState(staged, dir)) : null;
1940
+ const removedAsset = opts?.keepAsset !== true && await probePath(asset);
1867
1941
  if (removedAsset) await removeTree(asset);
1868
1942
  if (owned === false) {
1869
1943
  return { name: dir, removedStaged: false, removedAsset, reason: "not_staged" };
@@ -2019,6 +2093,6 @@ function resolveAgentDir(projectDir) {
2019
2093
  return resolve(projectDir, definition);
2020
2094
  }
2021
2095
 
2022
- export { COMPACTION_DEFAULTS, CanonicalRefConflictError, DEFAULT_RECIPE_ATTR, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, STAGED_SKILL_MARKER, __resetCacheMigrationMemo, buildProvenanceIndex, checkRepoStatus, checkoutPin, cloneRepo, coerceVersion, decodeSkaileYaml, deriveSingleMaterializedMcpDeclaration, encodeSkaileYaml, ensureRepo, findWorkspaceRoot, getGlobalCacheDir, getRepoCommit, globalCacheRoot, globalSkaileDir, isWorkspaceConfigFilename, linkRepo, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, matchPin, mergeLegacyEntriesInto, mergeLegacyEntriesKeyed, mergeSkWorkspaceConfigs, migrateLegacyDir, normalizeConfig, pullRepo, pullRepoResult, readLinks, resolveAgentDir, resolveAll, resolveAsset, resolveGlobalBackends, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, resolveSourcePublisher, saveSkWorkspaceConfig, scanRepo, sourceCacheKey, sourceShortName, stageMaterializedSkills, storeManifestSlug, unlinkRepo, unstageSkill, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, workspaceNameFromFilename, writeLinks };
2023
- //# sourceMappingURL=chunk-HKOC273F.js.map
2024
- //# sourceMappingURL=chunk-HKOC273F.js.map
2096
+ export { COMPACTION_DEFAULTS, CanonicalRefConflictError, DEFAULT_RECIPE_ATTR, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SKILL_ALLOWLIST_FILE, SKILL_ALLOWLIST_VERSION, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, STAGED_SKILL_MARKER, __resetCacheMigrationMemo, buildProvenanceIndex, checkRepoStatus, checkoutPin, cloneRepo, coerceVersion, decodeSkaileYaml, deriveSingleMaterializedMcpDeclaration, encodeSkaileYaml, ensureRepo, findWorkspaceRoot, getGlobalCacheDir, getRepoCommit, globalCacheRoot, globalSkaileDir, isStagedSkillMarkerFor, isWorkspaceConfigFilename, linkRepo, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, matchPin, mergeLegacyEntriesInto, mergeLegacyEntriesKeyed, mergeSkWorkspaceConfigs, migrateLegacyDir, normalizeConfig, pullRepo, pullRepoResult, readLinks, readSkillAllowList, resolveAgentDir, resolveAll, resolveAsset, resolveGlobalBackends, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, resolveSourcePublisher, saveSkWorkspaceConfig, scanRepo, sourceCacheKey, sourceShortName, stageMaterializedSkills, stagedSkillMarkerState, storeManifestSlug, unlinkRepo, unstageSkill, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, workspaceNameFromFilename, writeLinks };
2097
+ //# sourceMappingURL=chunk-P2G6XSJ3.js.map
2098
+ //# sourceMappingURL=chunk-P2G6XSJ3.js.map