@narumitw/pi-sync 0.57.10 → 0.57.11

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 (147) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +5 -1
  3. package/dist/chunks/{agent-candidate-EYB35AGL.ts → agent-candidate-OCDPRI5G.ts} +11 -11
  4. package/dist/chunks/{agent-plan-KO43GTOR.ts → agent-plan-P5B5RGZ7.ts} +14 -14
  5. package/dist/chunks/{agent-refusal-retry-C2HQROTP.ts → agent-refusal-retry-476YGNU5.ts} +10 -10
  6. package/dist/chunks/{agent-store-UT52DS7B.ts → agent-store-RJSMNOYP.ts} +7 -7
  7. package/dist/chunks/{agent-sync-VM3TXWA3.ts → agent-sync-EUK2CPSS.ts} +6 -6
  8. package/dist/chunks/{chunk-UCD7TQDT.ts → chunk-3IYAPMST.ts} +4 -4
  9. package/dist/chunks/{chunk-JXWTEJS5.ts → chunk-45COPAK7.ts} +10 -3
  10. package/dist/chunks/chunk-45COPAK7.ts.map +7 -0
  11. package/dist/chunks/{chunk-DOJRPBQU.ts → chunk-5TSCBBPP.ts} +4 -4
  12. package/dist/chunks/{chunk-IMMMZUFC.ts → chunk-67INJPKR.ts} +4 -4
  13. package/dist/chunks/{chunk-CDQGSZL3.ts → chunk-6LD5KX55.ts} +6 -6
  14. package/dist/chunks/{chunk-MDUORMCK.ts → chunk-6O3EDBRL.ts} +2 -2
  15. package/dist/chunks/{chunk-AAPAHANE.ts → chunk-7A35ZAVO.ts} +320 -219
  16. package/dist/chunks/chunk-7A35ZAVO.ts.map +7 -0
  17. package/dist/chunks/{chunk-2VSN3MFX.ts → chunk-7OLLPPLU.ts} +29 -23
  18. package/dist/chunks/chunk-7OLLPPLU.ts.map +7 -0
  19. package/dist/chunks/{chunk-STVQQ5KG.ts → chunk-7ZIYU5QS.ts} +6 -6
  20. package/dist/chunks/{chunk-AO6EDUA6.ts → chunk-AKMV47YC.ts} +3 -3
  21. package/dist/chunks/{chunk-66GAUVDL.ts → chunk-BEST45H2.ts} +6 -6
  22. package/dist/chunks/{chunk-DO55XUNU.ts → chunk-CBLTWXAU.ts} +15 -5
  23. package/dist/chunks/chunk-CBLTWXAU.ts.map +7 -0
  24. package/dist/chunks/{chunk-PWA3YN5Z.ts → chunk-CPT2BN6N.ts} +2 -2
  25. package/dist/chunks/{chunk-73MDIVYJ.ts → chunk-DN4IA7MR.ts} +6 -6
  26. package/dist/chunks/{chunk-4RLATUP4.ts → chunk-DRTC4PKM.ts} +6 -6
  27. package/dist/chunks/{chunk-PHANBTVM.ts → chunk-ESKOPQVB.ts} +4 -4
  28. package/dist/chunks/{chunk-ODF2M4RF.ts → chunk-F7E3VFXU.ts} +5 -5
  29. package/dist/chunks/{chunk-YZ5BQNRZ.ts → chunk-FHE2DCA2.ts} +2 -2
  30. package/dist/chunks/{chunk-YZ5BQNRZ.ts.map → chunk-FHE2DCA2.ts.map} +2 -2
  31. package/dist/chunks/{chunk-MRIPZGPR.ts → chunk-FLHCOJCD.ts} +3 -3
  32. package/dist/chunks/{chunk-5WJQ6XOW.ts → chunk-GNYGNHFF.ts} +2 -2
  33. package/dist/chunks/{chunk-DFJGTVPX.ts → chunk-KYTT7KV4.ts} +2 -2
  34. package/dist/chunks/{chunk-UGSSZWQ6.ts → chunk-MKSMJPVA.ts} +2 -2
  35. package/dist/chunks/{chunk-RAMHGOX2.ts → chunk-OJARL2TG.ts} +4 -4
  36. package/dist/chunks/{chunk-BJXSCGQK.ts → chunk-OKPPZA4D.ts} +148 -89
  37. package/dist/chunks/chunk-OKPPZA4D.ts.map +7 -0
  38. package/dist/chunks/{chunk-RX3WGWVL.ts → chunk-OVBAW7KV.ts} +177 -130
  39. package/dist/chunks/chunk-OVBAW7KV.ts.map +7 -0
  40. package/dist/chunks/{chunk-U77DWNRH.ts → chunk-Q23JJW7E.ts} +3 -3
  41. package/dist/chunks/{chunk-QWV3XKNJ.ts → chunk-TIMWN2RH.ts} +5 -5
  42. package/dist/chunks/{chunk-Z5O2TLNF.ts → chunk-TZC7GDJE.ts} +7 -7
  43. package/dist/chunks/{chunk-TO2GMX3K.ts → chunk-XJHQPB3E.ts} +2 -2
  44. package/dist/chunks/{chunk-JY2RVOUL.ts → chunk-Y4UVXOLQ.ts} +5 -5
  45. package/dist/chunks/{chunk-M5IV3KL2.ts → chunk-ZDDBZH72.ts} +3 -3
  46. package/dist/chunks/{command-handler-FO6F2APH.ts → command-handler-F2E7A5T5.ts} +22 -17
  47. package/dist/chunks/command-handler-F2E7A5T5.ts.map +7 -0
  48. package/dist/chunks/{config-B37W7FXW.ts → config-HYG7G5EM.ts} +6 -4
  49. package/dist/chunks/{conflict-artifacts-6XGSSU5S.ts → conflict-artifacts-J6WSDCWP.ts} +12 -12
  50. package/dist/chunks/{conflict-review-BQSHSJB3.ts → conflict-review-2QMO2K6Q.ts} +23 -23
  51. package/dist/chunks/{continuous-record-4DQ2EAZS.ts → continuous-record-AH7JGYKM.ts} +6 -6
  52. package/dist/chunks/{continuous-sync-ZT3UEQLK.ts → continuous-sync-VRMXCA5X.ts} +18 -18
  53. package/dist/chunks/{file-selection-FBLKM25V.ts → file-selection-IELTXSGZ.ts} +6 -7
  54. package/dist/chunks/{file-selection-FBLKM25V.ts.map → file-selection-IELTXSGZ.ts.map} +1 -1
  55. package/dist/chunks/{git-backend-7PCWECRN.ts → git-backend-KHD36W27.ts} +6 -7
  56. package/dist/chunks/{git-backend-7PCWECRN.ts.map → git-backend-KHD36W27.ts.map} +1 -1
  57. package/dist/chunks/{local-fields-B6JWLPAE.ts → local-fields-JEKAPZKD.ts} +6 -7
  58. package/dist/chunks/manager-result-dispatcher-6W52NM7F.ts +32 -0
  59. package/dist/chunks/{manager-ui-DGRTG76I.ts → manager-ui-LM7DSJ2Y.ts} +103 -52
  60. package/dist/chunks/manager-ui-LM7DSJ2Y.ts.map +7 -0
  61. package/dist/chunks/{merge-baseline-store-HL3VLMAM.ts → merge-baseline-store-65GKUMXI.ts} +6 -6
  62. package/dist/chunks/{remote-selection-ui-OHMIQ32X.ts → remote-selection-ui-TD4C4W3J.ts} +16 -12
  63. package/dist/chunks/{s3-backend-CJXBEWWU.ts → s3-backend-L24UZ6IK.ts} +12 -10
  64. package/dist/chunks/s3-backend-L24UZ6IK.ts.map +7 -0
  65. package/dist/chunks/{setup-switch-66GWMBNH.ts → setup-switch-PIPXYPCW.ts} +5 -5
  66. package/dist/chunks/{setup-wizard-OHZXJVQZ.ts → setup-wizard-RR5U3SUB.ts} +6 -6
  67. package/dist/chunks/{snapshot-VRHNAUUH.ts → snapshot-RGNDYT6A.ts} +5 -6
  68. package/dist/chunks/{snapshot-transaction-EUGA4VX6.ts → snapshot-transaction-26BQO36S.ts} +8 -8
  69. package/dist/chunks/{sync-inspection-4WFQEJOE.ts → sync-inspection-MOMLGUTD.ts} +11 -11
  70. package/dist/chunks/{sync-operations-X4AOXMBT.ts → sync-operations-CV3TULLD.ts} +25 -25
  71. package/dist/chunks/{sync-state-SWLSMK4G.ts → sync-state-7L4NT7W2.ts} +7 -8
  72. package/dist/chunks/{webdav-backend-2Q5ZEBST.ts → webdav-backend-3ZCACILP.ts} +7 -8
  73. package/dist/chunks/{webdav-backend-2Q5ZEBST.ts.map → webdav-backend-3ZCACILP.ts.map} +1 -1
  74. package/dist/index.ts +19 -19
  75. package/package.json +1 -1
  76. package/skills/configure-pi-sync/references/configuration.md +8 -1
  77. package/src/backends/s3/s3-client.ts +8 -1
  78. package/src/commands/command-execution.ts +8 -3
  79. package/src/paths.ts +6 -1
  80. package/src/settings/config-file.ts +205 -118
  81. package/src/settings/config.ts +1 -1
  82. package/src/settings/settings-management.ts +15 -1
  83. package/src/settings/settings-store.ts +0 -14
  84. package/src/snapshot/session-paths.ts +15 -2
  85. package/src/snapshot/snapshot-mutation-queues.ts +142 -0
  86. package/src/snapshot/snapshot-transaction.ts +122 -125
  87. package/src/sync/merge-apply.ts +6 -0
  88. package/src/ui/cancellable-operation.ts +36 -13
  89. package/src/ui/manager-state.ts +3 -1
  90. package/src/ui/manager-ui.ts +76 -24
  91. package/src/ui/remote-selection-ui.ts +131 -82
  92. package/src/ui/settings-ui.ts +2 -1
  93. package/dist/chunks/chunk-2VSN3MFX.ts.map +0 -7
  94. package/dist/chunks/chunk-AAPAHANE.ts.map +0 -7
  95. package/dist/chunks/chunk-BJXSCGQK.ts.map +0 -7
  96. package/dist/chunks/chunk-DO55XUNU.ts.map +0 -7
  97. package/dist/chunks/chunk-JXWTEJS5.ts.map +0 -7
  98. package/dist/chunks/chunk-RX3WGWVL.ts.map +0 -7
  99. package/dist/chunks/command-handler-FO6F2APH.ts.map +0 -7
  100. package/dist/chunks/manager-result-dispatcher-NODX3KKH.ts +0 -28
  101. package/dist/chunks/manager-ui-DGRTG76I.ts.map +0 -7
  102. package/dist/chunks/s3-backend-CJXBEWWU.ts.map +0 -7
  103. /package/dist/chunks/{agent-candidate-EYB35AGL.ts.map → agent-candidate-OCDPRI5G.ts.map} +0 -0
  104. /package/dist/chunks/{agent-plan-KO43GTOR.ts.map → agent-plan-P5B5RGZ7.ts.map} +0 -0
  105. /package/dist/chunks/{agent-refusal-retry-C2HQROTP.ts.map → agent-refusal-retry-476YGNU5.ts.map} +0 -0
  106. /package/dist/chunks/{agent-store-UT52DS7B.ts.map → agent-store-RJSMNOYP.ts.map} +0 -0
  107. /package/dist/chunks/{agent-sync-VM3TXWA3.ts.map → agent-sync-EUK2CPSS.ts.map} +0 -0
  108. /package/dist/chunks/{chunk-UCD7TQDT.ts.map → chunk-3IYAPMST.ts.map} +0 -0
  109. /package/dist/chunks/{chunk-DOJRPBQU.ts.map → chunk-5TSCBBPP.ts.map} +0 -0
  110. /package/dist/chunks/{chunk-IMMMZUFC.ts.map → chunk-67INJPKR.ts.map} +0 -0
  111. /package/dist/chunks/{chunk-CDQGSZL3.ts.map → chunk-6LD5KX55.ts.map} +0 -0
  112. /package/dist/chunks/{chunk-MDUORMCK.ts.map → chunk-6O3EDBRL.ts.map} +0 -0
  113. /package/dist/chunks/{chunk-STVQQ5KG.ts.map → chunk-7ZIYU5QS.ts.map} +0 -0
  114. /package/dist/chunks/{chunk-AO6EDUA6.ts.map → chunk-AKMV47YC.ts.map} +0 -0
  115. /package/dist/chunks/{chunk-66GAUVDL.ts.map → chunk-BEST45H2.ts.map} +0 -0
  116. /package/dist/chunks/{chunk-PWA3YN5Z.ts.map → chunk-CPT2BN6N.ts.map} +0 -0
  117. /package/dist/chunks/{chunk-73MDIVYJ.ts.map → chunk-DN4IA7MR.ts.map} +0 -0
  118. /package/dist/chunks/{chunk-4RLATUP4.ts.map → chunk-DRTC4PKM.ts.map} +0 -0
  119. /package/dist/chunks/{chunk-PHANBTVM.ts.map → chunk-ESKOPQVB.ts.map} +0 -0
  120. /package/dist/chunks/{chunk-ODF2M4RF.ts.map → chunk-F7E3VFXU.ts.map} +0 -0
  121. /package/dist/chunks/{chunk-MRIPZGPR.ts.map → chunk-FLHCOJCD.ts.map} +0 -0
  122. /package/dist/chunks/{chunk-5WJQ6XOW.ts.map → chunk-GNYGNHFF.ts.map} +0 -0
  123. /package/dist/chunks/{chunk-DFJGTVPX.ts.map → chunk-KYTT7KV4.ts.map} +0 -0
  124. /package/dist/chunks/{chunk-UGSSZWQ6.ts.map → chunk-MKSMJPVA.ts.map} +0 -0
  125. /package/dist/chunks/{chunk-RAMHGOX2.ts.map → chunk-OJARL2TG.ts.map} +0 -0
  126. /package/dist/chunks/{chunk-U77DWNRH.ts.map → chunk-Q23JJW7E.ts.map} +0 -0
  127. /package/dist/chunks/{chunk-QWV3XKNJ.ts.map → chunk-TIMWN2RH.ts.map} +0 -0
  128. /package/dist/chunks/{chunk-Z5O2TLNF.ts.map → chunk-TZC7GDJE.ts.map} +0 -0
  129. /package/dist/chunks/{chunk-TO2GMX3K.ts.map → chunk-XJHQPB3E.ts.map} +0 -0
  130. /package/dist/chunks/{chunk-JY2RVOUL.ts.map → chunk-Y4UVXOLQ.ts.map} +0 -0
  131. /package/dist/chunks/{chunk-M5IV3KL2.ts.map → chunk-ZDDBZH72.ts.map} +0 -0
  132. /package/dist/chunks/{config-B37W7FXW.ts.map → config-HYG7G5EM.ts.map} +0 -0
  133. /package/dist/chunks/{conflict-artifacts-6XGSSU5S.ts.map → conflict-artifacts-J6WSDCWP.ts.map} +0 -0
  134. /package/dist/chunks/{conflict-review-BQSHSJB3.ts.map → conflict-review-2QMO2K6Q.ts.map} +0 -0
  135. /package/dist/chunks/{continuous-record-4DQ2EAZS.ts.map → continuous-record-AH7JGYKM.ts.map} +0 -0
  136. /package/dist/chunks/{continuous-sync-ZT3UEQLK.ts.map → continuous-sync-VRMXCA5X.ts.map} +0 -0
  137. /package/dist/chunks/{local-fields-B6JWLPAE.ts.map → local-fields-JEKAPZKD.ts.map} +0 -0
  138. /package/dist/chunks/{manager-result-dispatcher-NODX3KKH.ts.map → manager-result-dispatcher-6W52NM7F.ts.map} +0 -0
  139. /package/dist/chunks/{merge-baseline-store-HL3VLMAM.ts.map → merge-baseline-store-65GKUMXI.ts.map} +0 -0
  140. /package/dist/chunks/{remote-selection-ui-OHMIQ32X.ts.map → remote-selection-ui-TD4C4W3J.ts.map} +0 -0
  141. /package/dist/chunks/{setup-switch-66GWMBNH.ts.map → setup-switch-PIPXYPCW.ts.map} +0 -0
  142. /package/dist/chunks/{setup-wizard-OHZXJVQZ.ts.map → setup-wizard-RR5U3SUB.ts.map} +0 -0
  143. /package/dist/chunks/{snapshot-VRHNAUUH.ts.map → snapshot-RGNDYT6A.ts.map} +0 -0
  144. /package/dist/chunks/{snapshot-transaction-EUGA4VX6.ts.map → snapshot-transaction-26BQO36S.ts.map} +0 -0
  145. /package/dist/chunks/{sync-inspection-4WFQEJOE.ts.map → sync-inspection-MOMLGUTD.ts.map} +0 -0
  146. /package/dist/chunks/{sync-operations-X4AOXMBT.ts.map → sync-operations-CV3TULLD.ts.map} +0 -0
  147. /package/dist/chunks/{sync-state-SWLSMK4G.ts.map → sync-state-7L4NT7W2.ts.map} +0 -0
@@ -2,10 +2,13 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  withLock
5
- } from "./chunk-MDUORMCK.ts";
5
+ } from "./chunk-6O3EDBRL.ts";
6
6
  import {
7
7
  ensureStateDir
8
- } from "./chunk-73MDIVYJ.ts";
8
+ } from "./chunk-DN4IA7MR.ts";
9
+ import {
10
+ writeJson
11
+ } from "./chunk-AR2DGDUI.ts";
9
12
  import {
10
13
  LOCKFILE_FS_ADAPTER,
11
14
  stateDir,
@@ -14,9 +17,6 @@ import {
14
17
  import {
15
18
  backendIdentityCoordinates
16
19
  } from "./chunk-2JZFHNLM.ts";
17
- import {
18
- writeJson
19
- } from "./chunk-AR2DGDUI.ts";
20
20
  import {
21
21
  ContinuousError
22
22
  } from "./chunk-DT7M4VQS.ts";
@@ -412,4 +412,4 @@ export {
412
412
  reserveContinuousRequest,
413
413
  continuousStatusLines
414
414
  };
415
- //# sourceMappingURL=chunk-4RLATUP4.ts.map
415
+ //# sourceMappingURL=chunk-DRTC4PKM.ts.map
@@ -12,18 +12,18 @@ import {
12
12
  selectionForSnapshot,
13
13
  snapshotSelectionInclude,
14
14
  syncIncludeSelection
15
- } from "./chunk-DFJGTVPX.ts";
15
+ } from "./chunk-KYTT7KV4.ts";
16
16
  import {
17
17
  agentDir,
18
18
  configuredSessionDir,
19
19
  sessionStorageRoot
20
- } from "./chunk-DO55XUNU.ts";
20
+ } from "./chunk-CBLTWXAU.ts";
21
21
  import {
22
22
  isDeniedPath,
23
23
  posixJoin,
24
24
  safeJoin,
25
25
  toPosix
26
- } from "./chunk-YZ5BQNRZ.ts";
26
+ } from "./chunk-FHE2DCA2.ts";
27
27
 
28
28
  // src/snapshot/snapshot.ts
29
29
  import { createHash, randomUUID } from "node:crypto";
@@ -345,4 +345,4 @@ export {
345
345
  mergeRemotePreservedFiles,
346
346
  mergeRemoteSessionFiles
347
347
  };
348
- //# sourceMappingURL=chunk-PHANBTVM.ts.map
348
+ //# sourceMappingURL=chunk-ESKOPQVB.ts.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-K3RIEL6J.ts";
9
9
  import {
10
10
  withLock
11
- } from "./chunk-MDUORMCK.ts";
11
+ } from "./chunk-6O3EDBRL.ts";
12
12
  import {
13
13
  ContinuousError
14
14
  } from "./chunk-DT7M4VQS.ts";
@@ -29,8 +29,8 @@ async function withAgentSyncLock(ctx, options, run) {
29
29
  if (!(error instanceof AgentResolutionRequired)) throw error;
30
30
  request = error;
31
31
  }
32
- const { withAgentClaim, readAgentCandidate, saveAgentCandidate, replaceRefusedAgentCandidate } = await import("./agent-store-UT52DS7B.ts");
33
- const { parseAgentCandidate } = await import("./agent-candidate-EYB35AGL.ts");
32
+ const { withAgentClaim, readAgentCandidate, saveAgentCandidate, replaceRefusedAgentCandidate } = await import("./agent-store-RJSMNOYP.ts");
33
+ const { parseAgentCandidate } = await import("./agent-candidate-OCDPRI5G.ts");
34
34
  const { runAgentResolver } = await import("./agent-runner-WMSCKSCB.ts");
35
35
  return withAgentClaim(async (assertOwner) => {
36
36
  const clearStatus = () => setSyncStatus(ctx, void 0);
@@ -69,7 +69,7 @@ async function withAgentSyncLock(ctx, options, run) {
69
69
  expectedRefusal = parseAgentCandidate(JSON.stringify(cached), request.evidence);
70
70
  if (!expectedRefusal.results.some((row) => "refuse" in row))
71
71
  throw new Error("The current cached result is not a refusal. Use Sync now.");
72
- const { confirmAgentRefusalRetry } = await import("./agent-refusal-retry-C2HQROTP.ts");
72
+ const { confirmAgentRefusalRetry } = await import("./agent-refusal-retry-476YGNU5.ts");
73
73
  options.signal?.throwIfAborted();
74
74
  if (!await confirmAgentRefusalRetry(ctx, options.setup, request.evidence, validate, options.signal))
75
75
  return "cancelled";
@@ -137,4 +137,4 @@ async function withAgentSyncLock(ctx, options, run) {
137
137
  export {
138
138
  withAgentSyncLock
139
139
  };
140
- //# sourceMappingURL=chunk-ODF2M4RF.ts.map
140
+ //# sourceMappingURL=chunk-F7E3VFXU.ts.map
@@ -27,7 +27,7 @@ function assertWithinRoot(root, target, label = target) {
27
27
  }
28
28
  }
29
29
  function encodeKey(key) {
30
- return key.split("/").map(encodeURIComponent).join("/");
30
+ return key.split("/").map(encodeURIComponent).join("/").replace(/[!'()*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
31
31
  }
32
32
  function posixJoin(...parts) {
33
33
  return parts.map((part) => trimSlashes(part)).filter(Boolean).join("/");
@@ -58,4 +58,4 @@ export {
58
58
  parentPaths,
59
59
  toPosix
60
60
  };
61
- //# sourceMappingURL=chunk-YZ5BQNRZ.ts.map
61
+ //# sourceMappingURL=chunk-FHE2DCA2.ts.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/paths.ts"],
4
- "sourcesContent": ["import path from \"node:path\";\n\nexport function isDeniedPath(relativePath: string) {\n const normalized = toPosix(relativePath);\n const lower = normalized.toLowerCase();\n const segments = lower.split(\"/\");\n const base = path.posix.basename(lower);\n return (\n segments.includes(\"node_modules\") ||\n segments.includes(\".git\") ||\n segments.includes(\".pisync\") ||\n segments.includes(\"pi-sync\") ||\n segments.includes(\".pi-sync-state-migration.lock\") ||\n base === \".env\" ||\n base.startsWith(\".env.\") ||\n base.endsWith(\".env\") ||\n base.includes(\"secret\") ||\n base.includes(\"token\") ||\n base === \"pi-sync.json\" ||\n base.startsWith(\"pi-sync.json.\") ||\n base.startsWith(\".pi-sync.json.\") ||\n base === \"pi-sync.local.json\" ||\n base.startsWith(\"pi-sync.local.json.\") ||\n base.startsWith(\".pi-sync.local.json.\")\n );\n}\n\nexport function isPathInside(parent: string, child: string) {\n const relative = path.relative(path.resolve(parent), path.resolve(child));\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nexport function safeJoin(root: string, relativePath: string) {\n const target = path.resolve(root, relativePath);\n assertWithinRoot(root, target, relativePath);\n return target;\n}\n\nexport function assertWithinRoot(root: string, target: string, label = target) {\n const resolvedRoot = path.resolve(root);\n const resolvedTarget = path.resolve(target);\n if (resolvedTarget !== resolvedRoot && !resolvedTarget.startsWith(`${resolvedRoot}${path.sep}`)) {\n throw new Error(`Unsafe path in snapshot: ${label}`);\n }\n}\n\nexport function encodeKey(key: string) {\n return key.split(\"/\").map(encodeURIComponent).join(\"/\");\n}\n\nexport function posixJoin(...parts: string[]) {\n return parts\n .map((part) => trimSlashes(part))\n .filter(Boolean)\n .join(\"/\");\n}\n\nexport function parentPaths(relativePath: string) {\n const results: string[] = [];\n let index = relativePath.lastIndexOf(\"/\");\n while (index > 0) {\n results.push(relativePath.slice(0, index));\n index = relativePath.lastIndexOf(\"/\", index - 1);\n }\n return results;\n}\n\nexport function toPosix(value: string) {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction trimSlashes(value: string) {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nexport function safeName(value: string) {\n return value.replace(/[^A-Za-z0-9._-]/g, \"_\");\n}\n"],
5
- "mappings": ";;;;AAAA,OAAO,UAAU;AAEV,SAAS,aAAa,cAAsB;AACjD,QAAM,aAAa,QAAQ,YAAY;AACvC,QAAM,QAAQ,WAAW,YAAY;AACrC,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAM,OAAO,KAAK,MAAM,SAAS,KAAK;AACtC,SACE,SAAS,SAAS,cAAc,KAChC,SAAS,SAAS,MAAM,KACxB,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,+BAA+B,KACjD,SAAS,UACT,KAAK,WAAW,OAAO,KACvB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,OAAO,KACrB,SAAS,kBACT,KAAK,WAAW,eAAe,KAC/B,KAAK,WAAW,gBAAgB,KAChC,SAAS,wBACT,KAAK,WAAW,qBAAqB,KACrC,KAAK,WAAW,sBAAsB;AAE1C;AAEO,SAAS,aAAa,QAAgB,OAAe;AAC1D,QAAM,WAAW,KAAK,SAAS,KAAK,QAAQ,MAAM,GAAG,KAAK,QAAQ,KAAK,CAAC;AACxE,SAAO,aAAa,MAAO,CAAC,SAAS,WAAW,IAAI,KAAK,CAAC,KAAK,WAAW,QAAQ;AACpF;AAEO,SAAS,SAAS,MAAc,cAAsB;AAC3D,QAAM,SAAS,KAAK,QAAQ,MAAM,YAAY;AAC9C,mBAAiB,MAAM,QAAQ,YAAY;AAC3C,SAAO;AACT;AAEO,SAAS,iBAAiB,MAAc,QAAgB,QAAQ,QAAQ;AAC7E,QAAM,eAAe,KAAK,QAAQ,IAAI;AACtC,QAAM,iBAAiB,KAAK,QAAQ,MAAM;AAC1C,MAAI,mBAAmB,gBAAgB,CAAC,eAAe,WAAW,GAAG,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG;AAC/F,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;AAEO,SAAS,UAAU,KAAa;AACrC,SAAO,IAAI,MAAM,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,GAAG;AACxD;AAEO,SAAS,aAAa,OAAiB;AAC5C,SAAO,MACJ,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,EAC/B,OAAO,OAAO,EACd,KAAK,GAAG;AACb;AAEO,SAAS,YAAY,cAAsB;AAChD,QAAM,UAAoB,CAAC;AAC3B,MAAI,QAAQ,aAAa,YAAY,GAAG;AACxC,SAAO,QAAQ,GAAG;AAChB,YAAQ,KAAK,aAAa,MAAM,GAAG,KAAK,CAAC;AACzC,YAAQ,aAAa,YAAY,KAAK,QAAQ,CAAC;AAAA,EACjD;AACA,SAAO;AACT;AAEO,SAAS,QAAQ,OAAe;AACrC,SAAO,MAAM,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AACvC;AAEA,SAAS,YAAY,OAAe;AAClC,SAAO,MAAM,QAAQ,cAAc,EAAE;AACvC;",
4
+ "sourcesContent": ["import path from \"node:path\";\n\nexport function isDeniedPath(relativePath: string) {\n const normalized = toPosix(relativePath);\n const lower = normalized.toLowerCase();\n const segments = lower.split(\"/\");\n const base = path.posix.basename(lower);\n return (\n segments.includes(\"node_modules\") ||\n segments.includes(\".git\") ||\n segments.includes(\".pisync\") ||\n segments.includes(\"pi-sync\") ||\n segments.includes(\".pi-sync-state-migration.lock\") ||\n base === \".env\" ||\n base.startsWith(\".env.\") ||\n base.endsWith(\".env\") ||\n base.includes(\"secret\") ||\n base.includes(\"token\") ||\n base === \"pi-sync.json\" ||\n base.startsWith(\"pi-sync.json.\") ||\n base.startsWith(\".pi-sync.json.\") ||\n base === \"pi-sync.local.json\" ||\n base.startsWith(\"pi-sync.local.json.\") ||\n base.startsWith(\".pi-sync.local.json.\")\n );\n}\n\nexport function isPathInside(parent: string, child: string) {\n const relative = path.relative(path.resolve(parent), path.resolve(child));\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nexport function safeJoin(root: string, relativePath: string) {\n const target = path.resolve(root, relativePath);\n assertWithinRoot(root, target, relativePath);\n return target;\n}\n\nexport function assertWithinRoot(root: string, target: string, label = target) {\n const resolvedRoot = path.resolve(root);\n const resolvedTarget = path.resolve(target);\n if (resolvedTarget !== resolvedRoot && !resolvedTarget.startsWith(`${resolvedRoot}${path.sep}`)) {\n throw new Error(`Unsafe path in snapshot: ${label}`);\n }\n}\n\nexport function encodeKey(key: string) {\n // SigV4 permits only RFC 3986 unreserved characters and key separators.\n return key\n .split(\"/\")\n .map(encodeURIComponent)\n .join(\"/\")\n .replace(/[!'()*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);\n}\n\nexport function posixJoin(...parts: string[]) {\n return parts\n .map((part) => trimSlashes(part))\n .filter(Boolean)\n .join(\"/\");\n}\n\nexport function parentPaths(relativePath: string) {\n const results: string[] = [];\n let index = relativePath.lastIndexOf(\"/\");\n while (index > 0) {\n results.push(relativePath.slice(0, index));\n index = relativePath.lastIndexOf(\"/\", index - 1);\n }\n return results;\n}\n\nexport function toPosix(value: string) {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction trimSlashes(value: string) {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nexport function safeName(value: string) {\n return value.replace(/[^A-Za-z0-9._-]/g, \"_\");\n}\n"],
5
+ "mappings": ";;;;AAAA,OAAO,UAAU;AAEV,SAAS,aAAa,cAAsB;AACjD,QAAM,aAAa,QAAQ,YAAY;AACvC,QAAM,QAAQ,WAAW,YAAY;AACrC,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAM,OAAO,KAAK,MAAM,SAAS,KAAK;AACtC,SACE,SAAS,SAAS,cAAc,KAChC,SAAS,SAAS,MAAM,KACxB,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,+BAA+B,KACjD,SAAS,UACT,KAAK,WAAW,OAAO,KACvB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,OAAO,KACrB,SAAS,kBACT,KAAK,WAAW,eAAe,KAC/B,KAAK,WAAW,gBAAgB,KAChC,SAAS,wBACT,KAAK,WAAW,qBAAqB,KACrC,KAAK,WAAW,sBAAsB;AAE1C;AAEO,SAAS,aAAa,QAAgB,OAAe;AAC1D,QAAM,WAAW,KAAK,SAAS,KAAK,QAAQ,MAAM,GAAG,KAAK,QAAQ,KAAK,CAAC;AACxE,SAAO,aAAa,MAAO,CAAC,SAAS,WAAW,IAAI,KAAK,CAAC,KAAK,WAAW,QAAQ;AACpF;AAEO,SAAS,SAAS,MAAc,cAAsB;AAC3D,QAAM,SAAS,KAAK,QAAQ,MAAM,YAAY;AAC9C,mBAAiB,MAAM,QAAQ,YAAY;AAC3C,SAAO;AACT;AAEO,SAAS,iBAAiB,MAAc,QAAgB,QAAQ,QAAQ;AAC7E,QAAM,eAAe,KAAK,QAAQ,IAAI;AACtC,QAAM,iBAAiB,KAAK,QAAQ,MAAM;AAC1C,MAAI,mBAAmB,gBAAgB,CAAC,eAAe,WAAW,GAAG,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG;AAC/F,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;AAEO,SAAS,UAAU,KAAa;AAErC,SAAO,IACJ,MAAM,GAAG,EACT,IAAI,kBAAkB,EACtB,KAAK,GAAG,EACR,QAAQ,aAAa,CAAC,cAAc,IAAI,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,EAAE;AACjG;AAEO,SAAS,aAAa,OAAiB;AAC5C,SAAO,MACJ,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,EAC/B,OAAO,OAAO,EACd,KAAK,GAAG;AACb;AAEO,SAAS,YAAY,cAAsB;AAChD,QAAM,UAAoB,CAAC;AAC3B,MAAI,QAAQ,aAAa,YAAY,GAAG;AACxC,SAAO,QAAQ,GAAG;AAChB,YAAQ,KAAK,aAAa,MAAM,GAAG,KAAK,CAAC;AACzC,YAAQ,aAAa,YAAY,KAAK,QAAQ,CAAC;AAAA,EACjD;AACA,SAAO;AACT;AAEO,SAAS,QAAQ,OAAe;AACrC,SAAO,MAAM,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AACvC;AAEA,SAAS,YAAY,OAAe;AAClC,SAAO,MAAM,QAAQ,cAAc,EAAE;AACvC;",
6
6
  "names": []
7
7
  }
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-PWMWOJP4.ts";
6
6
  import {
7
7
  snapshotSelectionInclude
8
- } from "./chunk-DFJGTVPX.ts";
8
+ } from "./chunk-KYTT7KV4.ts";
9
9
 
10
10
  // src/snapshot/snapshot-codec.ts
11
11
  import { Readable, Writable } from "node:stream";
@@ -42,7 +42,7 @@ async function decodeSnapshot(buffer, options = {}) {
42
42
  throw new Error("Unsupported snapshot format.");
43
43
  }
44
44
  if (parsed.version === 2 || parsed.version === 3) {
45
- const { normalizeLocalFields, validatePortableSnapshot } = await import("./local-fields-B6JWLPAE.ts");
45
+ const { normalizeLocalFields, validatePortableSnapshot } = await import("./local-fields-JEKAPZKD.ts");
46
46
  validatePortableSnapshot(parsed);
47
47
  if (parsed.localFields !== void 0) parsed.localFields = normalizeLocalFields(parsed.localFields);
48
48
  } else if (parsed.localFields !== void 0) throw new Error("Portable field policy requires snapshot version 2.");
@@ -54,4 +54,4 @@ export {
54
54
  encodeSnapshot,
55
55
  decodeSnapshot
56
56
  };
57
- //# sourceMappingURL=chunk-MRIPZGPR.ts.map
57
+ //# sourceMappingURL=chunk-FLHCOJCD.ts.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-PWMWOJP4.ts";
6
6
  import {
7
7
  agentDir
8
- } from "./chunk-DO55XUNU.ts";
8
+ } from "./chunk-CBLTWXAU.ts";
9
9
 
10
10
  // src/sync/mutation-owner.ts
11
11
  function captureMutationOwner(ctx, signal) {
@@ -24,4 +24,4 @@ function captureMutationOwner(ctx, signal) {
24
24
  export {
25
25
  captureMutationOwner
26
26
  };
27
- //# sourceMappingURL=chunk-5WJQ6XOW.ts.map
27
+ //# sourceMappingURL=chunk-GNYGNHFF.ts.map
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  isDeniedPath,
5
5
  toPosix
6
- } from "./chunk-YZ5BQNRZ.ts";
6
+ } from "./chunk-FHE2DCA2.ts";
7
7
 
8
8
  // src/sync/sync-policy.ts
9
9
  import path from "node:path";
@@ -316,4 +316,4 @@ export {
316
316
  normalizeSyncFiles,
317
317
  normalizeExtraFiles
318
318
  };
319
- //# sourceMappingURL=chunk-DFJGTVPX.ts.map
319
+ //# sourceMappingURL=chunk-KYTT7KV4.ts.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-ZW5ZLGBI.ts";
11
11
  import {
12
12
  regenerateSnapshotIdentity
13
- } from "./chunk-PHANBTVM.ts";
13
+ } from "./chunk-ESKOPQVB.ts";
14
14
 
15
15
  // src/sync/local-fields.ts
16
16
  import { createHash } from "node:crypto";
@@ -104,4 +104,4 @@ export {
104
104
  portableSnapshot,
105
105
  overlayLocalFields
106
106
  };
107
- //# sourceMappingURL=chunk-UGSSZWQ6.ts.map
107
+ //# sourceMappingURL=chunk-MKSMJPVA.ts.map
@@ -5,15 +5,15 @@
5
5
  var createSyncBackend = async (config) => {
6
6
  switch (config.backend.type) {
7
7
  case "s3": {
8
- const { S3SyncBackend } = await import("./s3-backend-CJXBEWWU.ts");
8
+ const { S3SyncBackend } = await import("./s3-backend-L24UZ6IK.ts");
9
9
  return new S3SyncBackend(config.backend);
10
10
  }
11
11
  case "webdav": {
12
- const { WebDavSyncBackend } = await import("./webdav-backend-2Q5ZEBST.ts");
12
+ const { WebDavSyncBackend } = await import("./webdav-backend-3ZCACILP.ts");
13
13
  return new WebDavSyncBackend(config.backend);
14
14
  }
15
15
  case "git": {
16
- const { GitSyncBackend } = await import("./git-backend-7PCWECRN.ts");
16
+ const { GitSyncBackend } = await import("./git-backend-KHD36W27.ts");
17
17
  return new GitSyncBackend(config.backend);
18
18
  }
19
19
  }
@@ -22,4 +22,4 @@ var createSyncBackend = async (config) => {
22
22
  export {
23
23
  createSyncBackend
24
24
  };
25
- //# sourceMappingURL=chunk-RAMHGOX2.ts.map
25
+ //# sourceMappingURL=chunk-OJARL2TG.ts.map