@narumitw/pi-sync 0.57.10 → 0.57.12

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 (173) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +32 -22
  3. package/dist/chunks/{agent-candidate-EYB35AGL.ts → agent-candidate-U2NU3GUX.ts} +11 -11
  4. package/dist/chunks/{agent-plan-KO43GTOR.ts → agent-plan-3YXDIJXO.ts} +25 -22
  5. package/dist/chunks/agent-plan-3YXDIJXO.ts.map +7 -0
  6. package/dist/chunks/{agent-refusal-retry-C2HQROTP.ts → agent-refusal-retry-476YGNU5.ts} +10 -10
  7. package/dist/chunks/{agent-runner-WMSCKSCB.ts → agent-runner-FCRV2Z75.ts} +11 -10
  8. package/dist/chunks/agent-runner-FCRV2Z75.ts.map +7 -0
  9. package/dist/chunks/{agent-store-UT52DS7B.ts → agent-store-7GINKTS7.ts} +8 -8
  10. package/dist/chunks/{agent-store-UT52DS7B.ts.map → agent-store-7GINKTS7.ts.map} +2 -2
  11. package/dist/chunks/{agent-sync-VM3TXWA3.ts → agent-sync-P6AWQXGK.ts} +6 -6
  12. package/dist/chunks/{chunk-JXWTEJS5.ts → chunk-45COPAK7.ts} +10 -3
  13. package/dist/chunks/chunk-45COPAK7.ts.map +7 -0
  14. package/dist/chunks/{chunk-DOJRPBQU.ts → chunk-5TSCBBPP.ts} +4 -4
  15. package/dist/chunks/{chunk-CDQGSZL3.ts → chunk-6LD5KX55.ts} +6 -6
  16. package/dist/chunks/{chunk-MDUORMCK.ts → chunk-6O3EDBRL.ts} +2 -2
  17. package/dist/chunks/{chunk-AAPAHANE.ts → chunk-7A35ZAVO.ts} +320 -219
  18. package/dist/chunks/chunk-7A35ZAVO.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-IMMMZUFC.ts → chunk-CQD2TJHE.ts} +7 -7
  25. package/dist/chunks/{chunk-IMMMZUFC.ts.map → chunk-CQD2TJHE.ts.map} +2 -2
  26. package/dist/chunks/{chunk-73MDIVYJ.ts → chunk-DN4IA7MR.ts} +6 -6
  27. package/dist/chunks/{chunk-PHANBTVM.ts → chunk-ESKOPQVB.ts} +4 -4
  28. package/dist/chunks/{chunk-YZ5BQNRZ.ts → chunk-FHE2DCA2.ts} +2 -2
  29. package/dist/chunks/{chunk-YZ5BQNRZ.ts.map → chunk-FHE2DCA2.ts.map} +2 -2
  30. package/dist/chunks/{chunk-MRIPZGPR.ts → chunk-FLHCOJCD.ts} +3 -3
  31. package/dist/chunks/{chunk-5WJQ6XOW.ts → chunk-GNYGNHFF.ts} +2 -2
  32. package/dist/chunks/{chunk-DFJGTVPX.ts → chunk-KYTT7KV4.ts} +2 -2
  33. package/dist/chunks/{chunk-UGSSZWQ6.ts → chunk-MKSMJPVA.ts} +2 -2
  34. package/dist/chunks/{chunk-2VSN3MFX.ts → chunk-MMQIEDZ6.ts} +33 -27
  35. package/dist/chunks/chunk-MMQIEDZ6.ts.map +7 -0
  36. package/dist/chunks/{chunk-RAMHGOX2.ts → chunk-OJARL2TG.ts} +4 -4
  37. package/dist/chunks/{chunk-BJXSCGQK.ts → chunk-OKPPZA4D.ts} +148 -89
  38. package/dist/chunks/chunk-OKPPZA4D.ts.map +7 -0
  39. package/dist/chunks/{chunk-RX3WGWVL.ts → chunk-OVBAW7KV.ts} +177 -130
  40. package/dist/chunks/chunk-OVBAW7KV.ts.map +7 -0
  41. package/dist/chunks/{chunk-U77DWNRH.ts → chunk-Q23JJW7E.ts} +3 -3
  42. package/dist/chunks/{chunk-NLWS55B6.ts → chunk-QPC5HT3A.ts} +2 -2
  43. package/dist/chunks/{chunk-NLWS55B6.ts.map → chunk-QPC5HT3A.ts.map} +1 -1
  44. package/dist/chunks/{chunk-4RLATUP4.ts → chunk-S5OCYVPS.ts} +7 -7
  45. package/dist/chunks/{chunk-4RLATUP4.ts.map → chunk-S5OCYVPS.ts.map} +2 -2
  46. package/dist/chunks/{chunk-QWV3XKNJ.ts → chunk-TIMWN2RH.ts} +5 -5
  47. package/dist/chunks/{chunk-Z5O2TLNF.ts → chunk-TZC7GDJE.ts} +7 -7
  48. package/dist/chunks/{chunk-UCD7TQDT.ts → chunk-U6GXGY5G.ts} +5 -5
  49. package/dist/chunks/{chunk-PWA3YN5Z.ts → chunk-XEODG2PE.ts} +3 -3
  50. package/dist/chunks/{chunk-TO2GMX3K.ts → chunk-XJHQPB3E.ts} +2 -2
  51. package/dist/chunks/{chunk-JY2RVOUL.ts → chunk-Y4UVXOLQ.ts} +5 -5
  52. package/dist/chunks/{chunk-ODF2M4RF.ts → chunk-ZC3IHFNM.ts} +8 -8
  53. package/dist/chunks/{chunk-ODF2M4RF.ts.map → chunk-ZC3IHFNM.ts.map} +2 -2
  54. package/dist/chunks/{chunk-M5IV3KL2.ts → chunk-ZDDBZH72.ts} +3 -3
  55. package/dist/chunks/{command-handler-FO6F2APH.ts → command-handler-VKLZBRLO.ts} +26 -21
  56. package/dist/chunks/command-handler-VKLZBRLO.ts.map +7 -0
  57. package/dist/chunks/{config-B37W7FXW.ts → config-HYG7G5EM.ts} +6 -4
  58. package/dist/chunks/{conflict-artifacts-6XGSSU5S.ts → conflict-artifacts-J6WSDCWP.ts} +12 -12
  59. package/dist/chunks/{conflict-review-BQSHSJB3.ts → conflict-review-GXA6Y7KY.ts} +23 -23
  60. package/dist/chunks/{continuous-record-4DQ2EAZS.ts → continuous-record-EPHGR2DU.ts} +6 -6
  61. package/dist/chunks/{continuous-sync-ZT3UEQLK.ts → continuous-sync-TTOSJCQU.ts} +18 -18
  62. package/dist/chunks/{file-selection-FBLKM25V.ts → file-selection-IELTXSGZ.ts} +6 -7
  63. package/dist/chunks/{file-selection-FBLKM25V.ts.map → file-selection-IELTXSGZ.ts.map} +1 -1
  64. package/dist/chunks/{git-backend-7PCWECRN.ts → git-backend-KHD36W27.ts} +6 -7
  65. package/dist/chunks/{git-backend-7PCWECRN.ts.map → git-backend-KHD36W27.ts.map} +1 -1
  66. package/dist/chunks/{local-fields-B6JWLPAE.ts → local-fields-JEKAPZKD.ts} +6 -7
  67. package/dist/chunks/manager-result-dispatcher-6W52NM7F.ts +32 -0
  68. package/dist/chunks/{manager-ui-DGRTG76I.ts → manager-ui-INVMAFEN.ts} +245 -224
  69. package/dist/chunks/manager-ui-INVMAFEN.ts.map +7 -0
  70. package/dist/chunks/{merge-baseline-store-HL3VLMAM.ts → merge-baseline-store-65GKUMXI.ts} +6 -6
  71. package/dist/chunks/{remote-selection-ui-OHMIQ32X.ts → remote-selection-ui-TD4C4W3J.ts} +16 -12
  72. package/dist/chunks/{s3-backend-CJXBEWWU.ts → s3-backend-L24UZ6IK.ts} +12 -10
  73. package/dist/chunks/s3-backend-L24UZ6IK.ts.map +7 -0
  74. package/dist/chunks/{setup-switch-66GWMBNH.ts → setup-switch-KLGESLQX.ts} +6 -6
  75. package/dist/chunks/{setup-wizard-OHZXJVQZ.ts → setup-wizard-ZQAK35BP.ts} +7 -7
  76. package/dist/chunks/{snapshot-VRHNAUUH.ts → snapshot-RGNDYT6A.ts} +5 -6
  77. package/dist/chunks/{snapshot-transaction-EUGA4VX6.ts → snapshot-transaction-26BQO36S.ts} +8 -8
  78. package/dist/chunks/{sync-inspection-4WFQEJOE.ts → sync-inspection-MOMLGUTD.ts} +11 -11
  79. package/dist/chunks/{sync-operations-X4AOXMBT.ts → sync-operations-TMGQHBF5.ts} +26 -26
  80. package/dist/chunks/{sync-operations-X4AOXMBT.ts.map → sync-operations-TMGQHBF5.ts.map} +2 -2
  81. package/dist/chunks/{sync-state-SWLSMK4G.ts → sync-state-7L4NT7W2.ts} +7 -8
  82. package/dist/chunks/{webdav-backend-2Q5ZEBST.ts → webdav-backend-3ZCACILP.ts} +7 -8
  83. package/dist/chunks/{webdav-backend-2Q5ZEBST.ts.map → webdav-backend-3ZCACILP.ts.map} +1 -1
  84. package/dist/index.ts +20 -20
  85. package/docs/agent-continuous-hardening.md +5 -5
  86. package/docs/agent-mode-verification.md +3 -3
  87. package/docs/agent-quality-verification.md +3 -3
  88. package/docs/continuous-sync-verification.md +2 -2
  89. package/docs/settings.md +9 -5
  90. package/docs/tui-contract.md +20 -3
  91. package/package.json +3 -3
  92. package/skills/configure-pi-sync/SKILL.md +3 -1
  93. package/skills/configure-pi-sync/references/configuration.md +56 -38
  94. package/src/backends/s3/s3-client.ts +8 -1
  95. package/src/commands/command-execution.ts +11 -6
  96. package/src/commands/command.ts +1 -1
  97. package/src/paths.ts +6 -1
  98. package/src/settings/config-file.ts +205 -118
  99. package/src/settings/config.ts +1 -1
  100. package/src/settings/settings-management.ts +15 -1
  101. package/src/settings/settings-store.ts +0 -14
  102. package/src/settings/settings-types.ts +1 -1
  103. package/src/snapshot/session-paths.ts +15 -2
  104. package/src/snapshot/snapshot-mutation-queues.ts +142 -0
  105. package/src/snapshot/snapshot-transaction.ts +122 -125
  106. package/src/sync/agent-candidate.ts +3 -3
  107. package/src/sync/agent-plan.ts +11 -8
  108. package/src/sync/agent-runner.ts +10 -9
  109. package/src/sync/agent-store.ts +1 -1
  110. package/src/sync/agent-sync.ts +2 -2
  111. package/src/sync/continuous-record.ts +1 -1
  112. package/src/sync/merge-apply.ts +6 -0
  113. package/src/sync/merged-sync.ts +4 -4
  114. package/src/sync/sync-mutations.ts +1 -1
  115. package/src/ui/agent-mode-setting.ts +6 -6
  116. package/src/ui/cancellable-operation.ts +36 -13
  117. package/src/ui/manager-state.ts +4 -2
  118. package/src/ui/manager-ui.ts +76 -24
  119. package/src/ui/remote-selection-ui.ts +131 -82
  120. package/src/ui/settings-ui.ts +21 -56
  121. package/src/ui/setup/setup-switcher.ts +2 -2
  122. package/src/ui/sync-setups-ui.ts +2 -2
  123. package/dist/chunks/agent-plan-KO43GTOR.ts.map +0 -7
  124. package/dist/chunks/agent-runner-WMSCKSCB.ts.map +0 -7
  125. package/dist/chunks/chunk-2VSN3MFX.ts.map +0 -7
  126. package/dist/chunks/chunk-AAPAHANE.ts.map +0 -7
  127. package/dist/chunks/chunk-BJXSCGQK.ts.map +0 -7
  128. package/dist/chunks/chunk-DO55XUNU.ts.map +0 -7
  129. package/dist/chunks/chunk-JXWTEJS5.ts.map +0 -7
  130. package/dist/chunks/chunk-RX3WGWVL.ts.map +0 -7
  131. package/dist/chunks/command-handler-FO6F2APH.ts.map +0 -7
  132. package/dist/chunks/manager-result-dispatcher-NODX3KKH.ts +0 -28
  133. package/dist/chunks/manager-ui-DGRTG76I.ts.map +0 -7
  134. package/dist/chunks/s3-backend-CJXBEWWU.ts.map +0 -7
  135. /package/dist/chunks/{agent-candidate-EYB35AGL.ts.map → agent-candidate-U2NU3GUX.ts.map} +0 -0
  136. /package/dist/chunks/{agent-refusal-retry-C2HQROTP.ts.map → agent-refusal-retry-476YGNU5.ts.map} +0 -0
  137. /package/dist/chunks/{agent-sync-VM3TXWA3.ts.map → agent-sync-P6AWQXGK.ts.map} +0 -0
  138. /package/dist/chunks/{chunk-DOJRPBQU.ts.map → chunk-5TSCBBPP.ts.map} +0 -0
  139. /package/dist/chunks/{chunk-CDQGSZL3.ts.map → chunk-6LD5KX55.ts.map} +0 -0
  140. /package/dist/chunks/{chunk-MDUORMCK.ts.map → chunk-6O3EDBRL.ts.map} +0 -0
  141. /package/dist/chunks/{chunk-STVQQ5KG.ts.map → chunk-7ZIYU5QS.ts.map} +0 -0
  142. /package/dist/chunks/{chunk-AO6EDUA6.ts.map → chunk-AKMV47YC.ts.map} +0 -0
  143. /package/dist/chunks/{chunk-66GAUVDL.ts.map → chunk-BEST45H2.ts.map} +0 -0
  144. /package/dist/chunks/{chunk-73MDIVYJ.ts.map → chunk-DN4IA7MR.ts.map} +0 -0
  145. /package/dist/chunks/{chunk-PHANBTVM.ts.map → chunk-ESKOPQVB.ts.map} +0 -0
  146. /package/dist/chunks/{chunk-MRIPZGPR.ts.map → chunk-FLHCOJCD.ts.map} +0 -0
  147. /package/dist/chunks/{chunk-5WJQ6XOW.ts.map → chunk-GNYGNHFF.ts.map} +0 -0
  148. /package/dist/chunks/{chunk-DFJGTVPX.ts.map → chunk-KYTT7KV4.ts.map} +0 -0
  149. /package/dist/chunks/{chunk-UGSSZWQ6.ts.map → chunk-MKSMJPVA.ts.map} +0 -0
  150. /package/dist/chunks/{chunk-RAMHGOX2.ts.map → chunk-OJARL2TG.ts.map} +0 -0
  151. /package/dist/chunks/{chunk-U77DWNRH.ts.map → chunk-Q23JJW7E.ts.map} +0 -0
  152. /package/dist/chunks/{chunk-QWV3XKNJ.ts.map → chunk-TIMWN2RH.ts.map} +0 -0
  153. /package/dist/chunks/{chunk-Z5O2TLNF.ts.map → chunk-TZC7GDJE.ts.map} +0 -0
  154. /package/dist/chunks/{chunk-UCD7TQDT.ts.map → chunk-U6GXGY5G.ts.map} +0 -0
  155. /package/dist/chunks/{chunk-PWA3YN5Z.ts.map → chunk-XEODG2PE.ts.map} +0 -0
  156. /package/dist/chunks/{chunk-TO2GMX3K.ts.map → chunk-XJHQPB3E.ts.map} +0 -0
  157. /package/dist/chunks/{chunk-JY2RVOUL.ts.map → chunk-Y4UVXOLQ.ts.map} +0 -0
  158. /package/dist/chunks/{chunk-M5IV3KL2.ts.map → chunk-ZDDBZH72.ts.map} +0 -0
  159. /package/dist/chunks/{config-B37W7FXW.ts.map → config-HYG7G5EM.ts.map} +0 -0
  160. /package/dist/chunks/{conflict-artifacts-6XGSSU5S.ts.map → conflict-artifacts-J6WSDCWP.ts.map} +0 -0
  161. /package/dist/chunks/{conflict-review-BQSHSJB3.ts.map → conflict-review-GXA6Y7KY.ts.map} +0 -0
  162. /package/dist/chunks/{continuous-record-4DQ2EAZS.ts.map → continuous-record-EPHGR2DU.ts.map} +0 -0
  163. /package/dist/chunks/{continuous-sync-ZT3UEQLK.ts.map → continuous-sync-TTOSJCQU.ts.map} +0 -0
  164. /package/dist/chunks/{local-fields-B6JWLPAE.ts.map → local-fields-JEKAPZKD.ts.map} +0 -0
  165. /package/dist/chunks/{manager-result-dispatcher-NODX3KKH.ts.map → manager-result-dispatcher-6W52NM7F.ts.map} +0 -0
  166. /package/dist/chunks/{merge-baseline-store-HL3VLMAM.ts.map → merge-baseline-store-65GKUMXI.ts.map} +0 -0
  167. /package/dist/chunks/{remote-selection-ui-OHMIQ32X.ts.map → remote-selection-ui-TD4C4W3J.ts.map} +0 -0
  168. /package/dist/chunks/{setup-switch-66GWMBNH.ts.map → setup-switch-KLGESLQX.ts.map} +0 -0
  169. /package/dist/chunks/{setup-wizard-OHZXJVQZ.ts.map → setup-wizard-ZQAK35BP.ts.map} +0 -0
  170. /package/dist/chunks/{snapshot-VRHNAUUH.ts.map → snapshot-RGNDYT6A.ts.map} +0 -0
  171. /package/dist/chunks/{snapshot-transaction-EUGA4VX6.ts.map → snapshot-transaction-26BQO36S.ts.map} +0 -0
  172. /package/dist/chunks/{sync-inspection-4WFQEJOE.ts.map → sync-inspection-MOMLGUTD.ts.map} +0 -0
  173. /package/dist/chunks/{sync-state-SWLSMK4G.ts.map → sync-state-7L4NT7W2.ts.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/sync/agent-sync.ts"],
4
- "sourcesContent": ["import type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { CommandOptions } from \"../commands/command-types.js\";\nimport { withLock } from \"../state/lock.js\";\nimport { setSyncStatus } from \"../ui/sync-status.js\";\nimport { AGENT_MAX_ATTEMPTS } from \"./agent-policy.js\";\nimport { type AgentAcceptance, AgentResolutionRequired } from \"./agent-request.js\";\nimport { ContinuousError } from \"./continuous-errors.js\";\n\n/** All callers retain their existing state-directory access guard. Off stays lazy. */\nexport async function withAgentSyncLock<T>(\n ctx: ExtensionContext,\n options: CommandOptions,\n run: (options: CommandOptions) => Promise<T>,\n): Promise<T | \"cancelled\"> {\n let request: AgentResolutionRequired;\n const background = options.background;\n const retry = Boolean(options.agentRetryRefusal);\n if (retry && (options.auto || background || !ctx.hasUI || (ctx.mode !== \"tui\" && ctx.mode !== \"rpc\")))\n throw new Error(\"A refused-model retry requires a foreground TUI or RPC manager review.\");\n try {\n return await withLock(\"sync\", () => run(options));\n } catch (error) {\n if (!(error instanceof AgentResolutionRequired)) throw error;\n request = error;\n }\n const { withAgentClaim, readAgentCandidate, saveAgentCandidate, replaceRefusedAgentCandidate } = await import(\n \"./agent-store.js\"\n );\n const { parseAgentCandidate } = await import(\"./agent-candidate.js\");\n const { runAgentResolver } = await import(\"./agent-runner.js\");\n return withAgentClaim(async (assertOwner) => {\n const clearStatus = () => setSyncStatus(ctx, undefined);\n const onAbort = () => {\n try {\n clearStatus();\n } catch {\n /* UI can already be disposed. */\n }\n };\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n options.signal?.throwIfAborted();\n for (let attempt = 0; attempt < AGENT_MAX_ATTEMPTS; attempt++) {\n let expectedRefusal: ReturnType<typeof parseAgentCandidate> | undefined;\n const validate = (signal = options.signal) =>\n withLock(\"agent-validate\", async () => {\n signal?.throwIfAborted();\n await assertOwner();\n signal?.throwIfAborted();\n if (\n expectedRefusal &&\n JSON.stringify(await readAgentCandidate(request.key)) !== JSON.stringify(expectedRefusal)\n )\n throw new Error(\"Cached refusal changed during review; reopen the manager.\");\n signal?.throwIfAborted();\n await request.validate(signal);\n signal?.throwIfAborted();\n });\n await validate();\n setSyncStatus(ctx, \"sync resolving\");\n const cached = await withLock(\"agent-cache-read\", async () => {\n await assertOwner();\n options.signal?.throwIfAborted();\n return readAgentCandidate(request.key);\n });\n options.signal?.throwIfAborted();\n if (retry) {\n if (cached === undefined)\n throw new Error(\"No eligible cached refusal for the current evidence. Use Sync now first.\");\n expectedRefusal = parseAgentCandidate(JSON.stringify(cached), request.evidence);\n if (!expectedRefusal.results.some((row) => \"refuse\" in row))\n throw new Error(\"The current cached result is not a refusal. Use Sync now.\");\n const { confirmAgentRefusalRetry } = await import(\"./agent-refusal-retry.js\");\n options.signal?.throwIfAborted();\n if (!(await confirmAgentRefusalRetry(ctx, options.setup, request.evidence, validate, options.signal)))\n return \"cancelled\" as const;\n }\n const raw =\n cached === undefined || retry\n ? await runAgentResolver(\n ctx,\n request.evidence,\n validate,\n options.signal,\n background ? (signal) => background.reserve(request.key, signal) : undefined,\n )\n : JSON.stringify(cached);\n let candidate: ReturnType<typeof parseAgentCandidate>;\n try {\n candidate = parseAgentCandidate(raw, request.evidence);\n } catch {\n throw new ContinuousError(\"model\", \"Agent mode paused: invalid resolver output; evidence retained.\");\n }\n if (retry && candidate.results.some((row) => \"refuse\" in row))\n throw new ContinuousError(\"model\", \"The model refused again. The previous refusal was retained.\");\n await validate();\n const previous = expectedRefusal;\n if (!previous)\n await withLock(\"agent-cache-save\", async () => {\n await assertOwner();\n options.signal?.throwIfAborted();\n await saveAgentCandidate(request.key, candidate);\n });\n let retryCacheCommitted = false;\n const acceptance: AgentAcceptance = {\n key: request.key,\n candidate,\n ...(previous\n ? {\n commitCandidate: async () => {\n if (retryCacheCommitted) return;\n await replaceRefusedAgentCandidate(request.key, previous, candidate, async () => {\n options.signal?.throwIfAborted();\n await assertOwner();\n await request.validate(options.signal);\n options.signal?.throwIfAborted();\n });\n retryCacheCommitted = true;\n },\n }\n : {}),\n };\n try {\n return await withLock(\"sync\", async () => {\n await assertOwner();\n options.signal?.throwIfAborted();\n return run({ ...options, agentAcceptance: acceptance });\n });\n } catch (error) {\n if (!(error instanceof AgentResolutionRequired)) throw error;\n if (retry) throw new ContinuousError(\"stale\", \"Reviewed refusal evidence changed; reopen the manager.\");\n request = error;\n }\n }\n throw new ContinuousError(\"stale\", \"Agent mode paused: content changed repeatedly; retry later.\");\n } finally {\n options.signal?.removeEventListener(\"abort\", onAbort);\n if (!options.signal?.aborted) clearStatus();\n }\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { CommandOptions } from \"../commands/command-types.js\";\nimport { withLock } from \"../state/lock.js\";\nimport { setSyncStatus } from \"../ui/sync-status.js\";\nimport { AGENT_MAX_ATTEMPTS } from \"./agent-policy.js\";\nimport { type AgentAcceptance, AgentResolutionRequired } from \"./agent-request.js\";\nimport { ContinuousError } from \"./continuous-errors.js\";\n\n/** All callers retain their existing state-directory access guard. Off stays lazy. */\nexport async function withAgentSyncLock<T>(\n ctx: ExtensionContext,\n options: CommandOptions,\n run: (options: CommandOptions) => Promise<T>,\n): Promise<T | \"cancelled\"> {\n let request: AgentResolutionRequired;\n const background = options.background;\n const retry = Boolean(options.agentRetryRefusal);\n if (retry && (options.auto || background || !ctx.hasUI || (ctx.mode !== \"tui\" && ctx.mode !== \"rpc\")))\n throw new Error(\"A refused-model retry requires a foreground TUI or RPC manager review.\");\n try {\n return await withLock(\"sync\", () => run(options));\n } catch (error) {\n if (!(error instanceof AgentResolutionRequired)) throw error;\n request = error;\n }\n const { withAgentClaim, readAgentCandidate, saveAgentCandidate, replaceRefusedAgentCandidate } = await import(\n \"./agent-store.js\"\n );\n const { parseAgentCandidate } = await import(\"./agent-candidate.js\");\n const { runAgentResolver } = await import(\"./agent-runner.js\");\n return withAgentClaim(async (assertOwner) => {\n const clearStatus = () => setSyncStatus(ctx, undefined);\n const onAbort = () => {\n try {\n clearStatus();\n } catch {\n /* UI can already be disposed. */\n }\n };\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n options.signal?.throwIfAborted();\n for (let attempt = 0; attempt < AGENT_MAX_ATTEMPTS; attempt++) {\n let expectedRefusal: ReturnType<typeof parseAgentCandidate> | undefined;\n const validate = (signal = options.signal) =>\n withLock(\"agent-validate\", async () => {\n signal?.throwIfAborted();\n await assertOwner();\n signal?.throwIfAborted();\n if (\n expectedRefusal &&\n JSON.stringify(await readAgentCandidate(request.key)) !== JSON.stringify(expectedRefusal)\n )\n throw new Error(\"Cached refusal changed during review; reopen the manager.\");\n signal?.throwIfAborted();\n await request.validate(signal);\n signal?.throwIfAborted();\n });\n await validate();\n setSyncStatus(ctx, \"sync resolving\");\n const cached = await withLock(\"agent-cache-read\", async () => {\n await assertOwner();\n options.signal?.throwIfAborted();\n return readAgentCandidate(request.key);\n });\n options.signal?.throwIfAborted();\n if (retry) {\n if (cached === undefined)\n throw new Error(\"No eligible cached refusal for the current evidence. Use Sync now first.\");\n expectedRefusal = parseAgentCandidate(JSON.stringify(cached), request.evidence);\n if (!expectedRefusal.results.some((row) => \"refuse\" in row))\n throw new Error(\"The current cached result is not a refusal. Use Sync now.\");\n const { confirmAgentRefusalRetry } = await import(\"./agent-refusal-retry.js\");\n options.signal?.throwIfAborted();\n if (!(await confirmAgentRefusalRetry(ctx, options.setup, request.evidence, validate, options.signal)))\n return \"cancelled\" as const;\n }\n const raw =\n cached === undefined || retry\n ? await runAgentResolver(\n ctx,\n request.evidence,\n validate,\n options.signal,\n background ? (signal) => background.reserve(request.key, signal) : undefined,\n )\n : JSON.stringify(cached);\n let candidate: ReturnType<typeof parseAgentCandidate>;\n try {\n candidate = parseAgentCandidate(raw, request.evidence);\n } catch {\n throw new ContinuousError(\"model\", \"Autonomous sync paused: invalid resolver output; evidence retained.\");\n }\n if (retry && candidate.results.some((row) => \"refuse\" in row))\n throw new ContinuousError(\"model\", \"The model refused again. The previous refusal was retained.\");\n await validate();\n const previous = expectedRefusal;\n if (!previous)\n await withLock(\"agent-cache-save\", async () => {\n await assertOwner();\n options.signal?.throwIfAborted();\n await saveAgentCandidate(request.key, candidate);\n });\n let retryCacheCommitted = false;\n const acceptance: AgentAcceptance = {\n key: request.key,\n candidate,\n ...(previous\n ? {\n commitCandidate: async () => {\n if (retryCacheCommitted) return;\n await replaceRefusedAgentCandidate(request.key, previous, candidate, async () => {\n options.signal?.throwIfAborted();\n await assertOwner();\n await request.validate(options.signal);\n options.signal?.throwIfAborted();\n });\n retryCacheCommitted = true;\n },\n }\n : {}),\n };\n try {\n return await withLock(\"sync\", async () => {\n await assertOwner();\n options.signal?.throwIfAborted();\n return run({ ...options, agentAcceptance: acceptance });\n });\n } catch (error) {\n if (!(error instanceof AgentResolutionRequired)) throw error;\n if (retry) throw new ContinuousError(\"stale\", \"Reviewed refusal evidence changed; reopen the manager.\");\n request = error;\n }\n }\n throw new ContinuousError(\"stale\", \"Autonomous sync paused: content changed repeatedly; retry later.\");\n } finally {\n options.signal?.removeEventListener(\"abort\", onAbort);\n if (!options.signal?.aborted) clearStatus();\n }\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  runCancellableOperation,
5
5
  showRemoteSelectionReview
6
- } from "./chunk-BJXSCGQK.ts";
6
+ } from "./chunk-OKPPZA4D.ts";
7
7
  import {
8
8
  safeTerminalText
9
9
  } from "./chunk-AMJRUXFT.ts";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  loadConfig,
15
15
  syncConfigReviewIdentity
16
- } from "./chunk-RX3WGWVL.ts";
16
+ } from "./chunk-OVBAW7KV.ts";
17
17
 
18
18
  // src/ui/sync-resolution-ui.ts
19
19
  import { defineMenu, runMenu } from "@narumitw/pi-tui-kit";
@@ -206,4 +206,4 @@ async function dispatchManagerResult(ctx, initialResult, origin, runRoute, signa
206
206
  export {
207
207
  dispatchManagerResult
208
208
  };
209
- //# sourceMappingURL=chunk-M5IV3KL2.ts.map
209
+ //# sourceMappingURL=chunk-ZDDBZH72.ts.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-ECYCNZOE.ts";
6
6
  import {
7
7
  withAgentSyncLock
8
- } from "./chunk-ODF2M4RF.ts";
8
+ } from "./chunk-ZC3IHFNM.ts";
9
9
  import "./chunk-3ST7RSYN.ts";
10
10
  import {
11
11
  syncErrorGuidance
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  observationMatchesConfig,
15
15
  syncAttentionMatchesConfig
16
- } from "./chunk-U77DWNRH.ts";
16
+ } from "./chunk-Q23JJW7E.ts";
17
17
  import {
18
18
  parseOptions,
19
19
  resolveSyncCommand,
@@ -21,7 +21,7 @@ import {
21
21
  startupTransferSummary,
22
22
  usage,
23
23
  validateCommandOptions
24
- } from "./chunk-NLWS55B6.ts";
24
+ } from "./chunk-QPC5HT3A.ts";
25
25
  import {
26
26
  safeTerminalText
27
27
  } from "./chunk-AMJRUXFT.ts";
@@ -42,12 +42,12 @@ import {
42
42
  readLocalConfigObject,
43
43
  sessionTokenWarnings,
44
44
  syncSessionsWarnings
45
- } from "./chunk-RX3WGWVL.ts";
45
+ } from "./chunk-OVBAW7KV.ts";
46
46
  import "./chunk-X7R6DCVF.ts";
47
47
  import {
48
48
  unlock,
49
49
  withLock
50
- } from "./chunk-MDUORMCK.ts";
50
+ } from "./chunk-6O3EDBRL.ts";
51
51
  import {
52
52
  combineSignals,
53
53
  throwIfAborted
@@ -55,7 +55,8 @@ import {
55
55
  import {
56
56
  readStateForConfig,
57
57
  syncStateFingerprint
58
- } from "./chunk-73MDIVYJ.ts";
58
+ } from "./chunk-DN4IA7MR.ts";
59
+ import "./chunk-AR2DGDUI.ts";
59
60
  import {
60
61
  migrateLegacyStateDirectory,
61
62
  stateDirectoryMigrationNotice
@@ -65,9 +66,8 @@ import "./chunk-T2SJD3N7.ts";
65
66
  import {
66
67
  RemoteSelectionMismatchError,
67
68
  formatRemoteSelectionMismatch
68
- } from "./chunk-DFJGTVPX.ts";
69
- import "./chunk-AR2DGDUI.ts";
70
- import "./chunk-YZ5BQNRZ.ts";
69
+ } from "./chunk-KYTT7KV4.ts";
70
+ import "./chunk-FHE2DCA2.ts";
71
71
  import "./chunk-DT7M4VQS.ts";
72
72
  import "./chunk-YDVQYUHE.ts";
73
73
  import "./chunk-PRUEIIK7.ts";
@@ -176,7 +176,7 @@ async function executeCommand(rawArgs, ctx, signal, loaders, onCommit, setup, on
176
176
  await showConfig(ctx, options);
177
177
  return { kind: "completed" };
178
178
  case "files": {
179
- const { showFileSelection } = await import("./file-selection-FBLKM25V.ts");
179
+ const { showFileSelection } = await import("./file-selection-IELTXSGZ.ts");
180
180
  throwIfAborted(options.signal);
181
181
  await showFileSelection(ctx, options.setup, options.signal);
182
182
  return { kind: "completed" };
@@ -194,7 +194,7 @@ async function executeCommand(rawArgs, ctx, signal, loaders, onCommit, setup, on
194
194
  return { kind: "completed" };
195
195
  }
196
196
  case "conflicts": {
197
- const { showConflicts } = await import("./conflict-review-BQSHSJB3.ts");
197
+ const { showConflicts } = await import("./conflict-review-GXA6Y7KY.ts");
198
198
  throwIfAborted(options.signal);
199
199
  await withLock("sync", () => showConflicts(ctx, options));
200
200
  return { kind: "completed" };
@@ -286,17 +286,22 @@ async function migrateStateDirectory(ctx, options) {
286
286
  }
287
287
  async function initConfig(ctx, signal) {
288
288
  const configPath = localConfigPath();
289
- if (await readLocalConfigObject()) {
290
- ctx.ui.notify(`Config already exists: ${await activeLocalConfigPath()}`, "info");
289
+ const existing = await readLocalConfigObject();
290
+ throwIfAborted(signal);
291
+ if (existing) {
292
+ const activePath = await activeLocalConfigPath();
293
+ throwIfAborted(signal);
294
+ ctx.ui.notify(`Config already exists: ${activePath}`, "info");
291
295
  return;
292
296
  }
293
297
  if (ctx.mode === "tui") {
294
- const { showSetupWizard } = await import("./setup-wizard-OHZXJVQZ.ts");
298
+ const { showSetupWizard } = await import("./setup-wizard-ZQAK35BP.ts");
295
299
  throwIfAborted(signal);
296
300
  await showSetupWizard(ctx, signal);
297
301
  return;
298
302
  }
299
- await createLocalConfigDocument(localConfigTemplate());
303
+ await createLocalConfigDocument(localConfigTemplate(), signal);
304
+ throwIfAborted(signal);
300
305
  ctx.ui.notify(`Created ${configPath}. Add a storage connection and sync setup before syncing.`, "info");
301
306
  }
302
307
  async function showConfig(ctx, options) {
@@ -314,11 +319,11 @@ async function showConfig(ctx, options) {
314
319
  ...storageLines,
315
320
  `storage path: ${config.storagePath}`,
316
321
  `automatic sync: ${automaticSyncSummary(config.automatic)}`,
317
- `settings field merge: ${config.mergeSettings ? "On (experimental)" : "Off"}`,
322
+ `settings field merge: ${config.mergeSettings ? "On" : "Off"}`,
318
323
  `machine-local settings.json fields: ${(config.localFields ?? []).map(safeTerminalText).join(", ") || "none"}`,
319
324
  `startup transfer: ${startupTransferSummary(config)}`,
320
- `agent mode: ${config.agentMode ? "On (experimental)" : "Off"}`,
321
- `continuous sync: ${config.continuous ? config.agentMode ? "On (experimental)" : "paused; Agent mode is Off" : "Off"}`,
325
+ `autonomous sync: ${config.agentMode ? "On" : "Off"}`,
326
+ `continuous sync: ${config.continuous ? config.agentMode ? "On" : "paused; Autonomous sync is Off" : "Off"}`,
322
327
  `included content: ${config.include.join(", ") || "none"}`,
323
328
  `sessions: ${config.include.includes("sessions") ? "included" : "not included"}`,
324
329
  `settings file: ${localConfigPath()}`,
@@ -409,7 +414,7 @@ async function handleCommand(rawArgs, ctx, sessionSignal, loaders, attention, on
409
414
  };
410
415
  if (!rawArgs.trim()) {
411
416
  try {
412
- const { showSyncManager } = await import("./manager-ui-DGRTG76I.ts");
417
+ const { showSyncManager } = await import("./manager-ui-INVMAFEN.ts");
413
418
  if (sessionSignal.aborted) return;
414
419
  await showSyncManager(ctx, run, sessionSignal, {
415
420
  getAttention: () => attention.current(),
@@ -509,7 +514,7 @@ function directSelectionOrigin(rawArgs) {
509
514
  async function resolveSelectionAttention(ctx, attention, signal, loaders, options = {}) {
510
515
  const current = attention.current();
511
516
  if (!current || signal.aborted) return;
512
- const { dispatchManagerResult } = await import("./manager-result-dispatcher-NODX3KKH.ts");
517
+ const { dispatchManagerResult } = await import("./manager-result-dispatcher-6W52NM7F.ts");
513
518
  if (signal.aborted || attention.current() !== current) return;
514
519
  await dispatchManagerResult(
515
520
  ctx,
@@ -540,4 +545,4 @@ export {
540
545
  handleCommand,
541
546
  resolveSelectionAttention
542
547
  };
543
- //# sourceMappingURL=command-handler-FO6F2APH.ts.map
548
+ //# sourceMappingURL=command-handler-VKLZBRLO.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/operation-dialogs.ts", "../../src/commands/command-execution.ts", "../../src/commands/command-handler.ts"],
4
+ "sourcesContent": ["import type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\n\n/** Track History's Pi-owned selector/confirmation lifetime without inspecting renderer internals. */\nexport function trackOperationDialogs<Context extends ExtensionContext>(\n ctx: Context,\n onDialog?: (active: boolean) => void,\n): Context {\n if (!onDialog) return ctx;\n const runDialog = async <Value>(task: () => Promise<Value>): Promise<Value> => {\n onDialog(true);\n try {\n return await task();\n } finally {\n onDialog(false);\n }\n };\n const ui: ExtensionContext[\"ui\"] = {\n ...ctx.ui,\n select: (...args) => runDialog(() => ctx.ui.select(...args)),\n confirm: (...args) => runDialog(() => ctx.ui.confirm(...args)),\n };\n // Forward live context properties: copying the context would hide session\n // replacement from mutation-owner revalidation after a dialog settles.\n return new Proxy(ctx, {\n get(target, key, receiver) {\n return key === \"ui\" ? ui : Reflect.get(target, key, receiver);\n },\n });\n}\n", "import type { ExtensionCommandContext, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { loadConfig, sessionTokenWarnings, syncSessionsWarnings } from \"../settings/config.js\";\nimport { activeLocalConfigPath, createLocalConfigDocument, localConfigPath } from \"../settings/config-file.js\";\nimport { localConfigTemplate, readLocalConfigObject } from \"../settings/settings-store.js\";\nimport type { AnySyncConfig } from \"../settings/settings-types.js\";\nimport { unlock, withLock } from \"../state/lock.js\";\nimport { migrateLegacyStateDirectory, stateDirectoryMigrationNotice } from \"../state/state-directory.js\";\nimport { withAgentSyncLock } from \"../sync/agent-sync.js\";\nimport { throwIfAborted } from \"../sync/signals.js\";\nimport { syncErrorGuidance } from \"../sync/sync-error-guidance.js\";\nimport { isSyncDecisionRequiredError, SetupPullRequiresUiError } from \"../sync/sync-errors.js\";\nimport type { SyncLoaders } from \"../sync/sync-loaders.js\";\nimport { RemoteSelectionMismatchError } from \"../sync/sync-policy.js\";\nimport { automaticSyncSummary } from \"../ui/automatic-sync-summary.js\";\nimport type { RunRouteResult } from \"../ui/cancellable-operation.js\";\nimport { trackOperationDialogs } from \"../ui/operation-dialogs.js\";\nimport { startupTransferSummary } from \"../ui/sync-behavior.js\";\nimport { setSyncStatus } from \"../ui/sync-status.js\";\nimport { safeTerminalText } from \"../ui/terminal-text.js\";\nimport { parseOptions, resolveSyncCommand, splitArgs, usage, validateCommandOptions } from \"./command.js\";\nimport type { CommandOptions } from \"./command-types.js\";\n\nexport async function executeRecoveryCommand(\n rawArgs: string,\n ctx: ExtensionContext,\n signal: AbortSignal | undefined,\n loaders: SyncLoaders,\n onCommit?: () => void,\n setup?: string,\n): Promise<RunRouteResult> {\n try {\n const [subcommand, ...rest] = splitArgs(rawArgs);\n if (subcommand !== \"sync\" && subcommand !== \"pull\" && subcommand !== \"push\") {\n throw new Error(`Unsupported sync recovery route: ${subcommand ?? \"missing\"}`);\n }\n const options = parseOptions(rest);\n if (setup !== undefined) options.setup = setup;\n if (signal) options.signal = signal;\n if (onCommit) options.onCommit = onCommit;\n options.reload = false;\n options.auto = false;\n validateCommandOptions(subcommand, options);\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n if (subcommand === \"push\") {\n const outcome = await withLock(\"push\", () => operations.push(ctx, options));\n return { kind: \"completed\", ...(outcome ? { outcome } : {}) };\n }\n if (subcommand === \"pull\") {\n const outcome = await withLock(\"pull\", () => operations.pull(ctx, options));\n return { kind: \"completed\", ...(outcome ? { outcome } : {}) };\n }\n await withAgentSyncLock(ctx, options, (current) => operations.syncBoth(ctx, current));\n return { kind: \"completed\" };\n } catch (error) {\n if (signal?.aborted) return { kind: \"failed\" };\n setSyncStatus(ctx, undefined);\n if (error instanceof RemoteSelectionMismatchError) {\n return { kind: \"remote-selection-required\", decision: error.decision };\n }\n if (isSyncDecisionRequiredError(error)) {\n return { kind: \"decision-required\", decision: error.decision };\n }\n ctx.ui.notify(syncErrorGuidance(error), \"error\");\n return { kind: \"failed\" };\n }\n}\n\nexport async function executeCommand(\n rawArgs: string,\n ctx: ExtensionCommandContext,\n signal: AbortSignal | undefined,\n loaders: SyncLoaders,\n onCommit?: () => void,\n setup?: string,\n onDialog?: (active: boolean) => void,\n retryRefusal = false,\n): Promise<RunRouteResult> {\n ctx = trackOperationDialogs(ctx, onDialog);\n try {\n const command = await resolveSyncCommand(rawArgs, ctx);\n if (signal?.aborted || !command) return { kind: \"completed\" };\n const { subcommand, rest } = command;\n const options = parseOptions(rest);\n if (setup !== undefined) options.setup = setup;\n if (signal) options.signal = signal;\n if (onCommit) options.onCommit = onCommit;\n validateCommandOptions(subcommand, options);\n if (retryRefusal) {\n if (subcommand !== \"sync\") throw new Error(\"A refused-model retry is available only for merged sync.\");\n options.agentRetryRefusal = true;\n }\n\n switch (subcommand) {\n case \"help\":\n ctx.ui.notify(usage(), \"info\");\n return { kind: \"completed\" };\n case \"use\": {\n const { useSyncSetup } = await loaders.setupSwitch();\n throwIfAborted(options.signal);\n await useSyncSetup(\n ctx,\n options.args[0] ?? \"\",\n async (selectedSetup) => {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n return withLock(\"pull\", () => operations.pull(ctx, { ...options, setup: selectedSetup }));\n },\n undefined,\n options.signal,\n );\n return { kind: \"completed\" };\n }\n case \"init\":\n await initConfig(ctx, signal);\n return { kind: \"completed\" };\n case \"config\":\n await showConfig(ctx, options);\n return { kind: \"completed\" };\n case \"files\": {\n const { showFileSelection } = await import(\"../ui/file-selection.js\");\n throwIfAborted(options.signal);\n await showFileSelection(ctx, options.setup, options.signal);\n return { kind: \"completed\" };\n }\n case \"status\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n await operations.status(ctx, options);\n return { kind: \"completed\" };\n }\n case \"diff\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n await operations.diff(ctx, options);\n return { kind: \"completed\" };\n }\n case \"conflicts\": {\n const { showConflicts } = await import(\"../sync/conflict-review.js\");\n throwIfAborted(options.signal);\n await withLock(\"sync\", () => showConflicts(ctx, options));\n return { kind: \"completed\" };\n }\n case \"doctor\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n await operations.doctor(ctx, options);\n return { kind: \"completed\" };\n }\n case \"push\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n const outcome = await withLock(\"push\", () => operations.push(ctx, options));\n return { kind: \"completed\", ...(outcome ? { outcome } : {}) };\n }\n case \"pull\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n const outcome = await withLock(\"pull\", () => operations.pull(ctx, options));\n return { kind: \"completed\", ...(outcome ? { outcome } : {}) };\n }\n case \"sync\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n const outcome = await withAgentSyncLock(ctx, options, (current) => operations.syncBoth(ctx, current));\n return { kind: \"completed\", ...(retryRefusal && outcome ? { outcome } : {}) };\n }\n case \"history\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n await operations.history(ctx, options);\n return { kind: \"completed\" };\n }\n case \"rollback\": {\n const operations = await loaders.operations();\n throwIfAborted(options.signal);\n await withLock(\"rollback\", () => operations.rollback(ctx, options));\n return { kind: \"completed\" };\n }\n case \"migrate-state\":\n await migrateStateDirectory(ctx, options);\n return { kind: \"completed\" };\n case \"unlock\":\n await unlock(ctx, options);\n return { kind: \"completed\" };\n default:\n ctx.ui.notify(`Unknown /sync command: ${subcommand}\\n\\n${usage()}`, \"warning\");\n return { kind: \"failed\" };\n }\n } catch (error) {\n if (signal?.aborted) return { kind: \"failed\" };\n setSyncStatus(ctx, undefined);\n if (error instanceof SetupPullRequiresUiError) throw error;\n if (error instanceof RemoteSelectionMismatchError) {\n return { kind: \"remote-selection-required\", decision: error.decision };\n }\n if (isSyncDecisionRequiredError(error)) {\n return { kind: \"decision-required\", decision: error.decision };\n }\n ctx.ui.notify(syncErrorGuidance(error), \"error\");\n return { kind: \"failed\" };\n }\n}\n\nasync function migrateStateDirectory(ctx: ExtensionCommandContext, options: CommandOptions) {\n const notice = stateDirectoryMigrationNotice();\n if (!notice) {\n ctx.ui.notify(\"pi-sync already uses the canonical pi-sync/ state directory.\", \"info\");\n return;\n }\n if (\n !options.yes &&\n !(await ctx.ui.confirm(\n \"Migrate pi-sync state directory\",\n \"Confirm that every other Pi process is closed. pi-sync will atomically rename .pisync/ to pi-sync/ without merging or deleting either root.\",\n { signal: options.signal },\n ))\n ) {\n ctx.ui.notify(\"pi-sync state migration cancelled.\", \"info\");\n return;\n }\n throwIfAborted(options.signal);\n const result = await migrateLegacyStateDirectory();\n throwIfAborted(options.signal);\n if (result.status === \"ready\") {\n ctx.ui.notify(\"pi-sync already uses the canonical pi-sync/ state directory.\", \"info\");\n return;\n }\n ctx.ui.notify(result.message, result.status === \"migrated\" ? \"info\" : \"warning\");\n}\n\nasync function initConfig(ctx: ExtensionCommandContext, signal?: AbortSignal) {\n const configPath = localConfigPath();\n const existing = await readLocalConfigObject();\n throwIfAborted(signal);\n if (existing) {\n const activePath = await activeLocalConfigPath();\n throwIfAborted(signal);\n ctx.ui.notify(`Config already exists: ${activePath}`, \"info\");\n return;\n }\n\n if (ctx.mode === \"tui\") {\n const { showSetupWizard } = await import(\"../ui/setup/setup-wizard.js\");\n throwIfAborted(signal);\n await showSetupWizard(ctx, signal);\n return;\n }\n await createLocalConfigDocument(localConfigTemplate(), signal);\n throwIfAborted(signal);\n ctx.ui.notify(`Created ${configPath}. Add a storage connection and sync setup before syncing.`, \"info\");\n}\n\nasync function showConfig(ctx: ExtensionCommandContext, options: CommandOptions) {\n const config = await loadConfig(options.setup);\n const warnings = [\n ...(config.backend.type === \"s3\" ? sessionTokenWarnings(config.backend.profile) : []),\n ...syncSessionsWarnings(config),\n ];\n const storageLines = configStorageLines(config);\n ctx.ui.notify(\n [\n \"pi-sync config:\",\n `sync setup: ${config.setupName}`,\n `storage connection: ${config.connectionName}`,\n ...storageLines,\n `storage path: ${config.storagePath}`,\n `automatic sync: ${automaticSyncSummary(config.automatic)}`,\n `settings field merge: ${config.mergeSettings ? \"On\" : \"Off\"}`,\n `machine-local settings.json fields: ${(config.localFields ?? []).map(safeTerminalText).join(\", \") || \"none\"}`,\n `startup transfer: ${startupTransferSummary(config)}`,\n `autonomous sync: ${config.agentMode ? \"On\" : \"Off\"}`,\n `continuous sync: ${config.continuous ? (config.agentMode ? \"On\" : \"paused; Autonomous sync is Off\") : \"Off\"}`,\n `included content: ${config.include.join(\", \") || \"none\"}`,\n `sessions: ${config.include.includes(\"sessions\") ? \"included\" : \"not included\"}`,\n `settings file: ${localConfigPath()}`,\n ...warnings,\n ].join(\"\\n\"),\n warnings.length > 0 ? \"warning\" : \"info\",\n );\n}\n\nfunction configStorageLines(config: AnySyncConfig) {\n switch (config.backend.type) {\n case \"git\":\n return [\n \"kind: git\",\n `remote: ${displayGitRemote(config.backend.profile.remote)}`,\n \"authentication: existing Git/SSH credentials (not stored)\",\n `branch: ${config.backend.destination.branch}`,\n ];\n case \"webdav\":\n return [\n \"kind: webdav\",\n `url: ${displayWebDavUrl(config.backend.profile.url, config.backend.profile.username)}`,\n \"username: configured (value hidden)\",\n \"password: configured\",\n ];\n case \"s3\":\n return [\n \"kind: s3\",\n `endpoint: ${config.backend.profile.endpoint}`,\n `bucket: ${config.backend.destination.bucket}`,\n `region: ${config.backend.profile.region}`,\n \"access key id: configured\",\n \"secret access key: configured\",\n `session token: ${config.backend.profile.sessionToken ? \"configured\" : \"not configured\"}`,\n ];\n }\n}\n\nfunction displayGitRemote(value: string | undefined) {\n if (!value) return \"missing\";\n try {\n const url = new URL(value);\n url.username = \"\";\n url.password = \"\";\n url.search = \"\";\n url.hash = \"\";\n return url.toString();\n } catch {\n return value.replace(/^(?:[^@\\s]+@)?(?<host>[^:]+):.+$/u, \"$<host>:\u2026\");\n }\n}\n\nfunction displayWebDavUrl(value: string | undefined, username: string | undefined) {\n if (!value) return \"missing\";\n try {\n const url = new URL(value);\n url.username = \"\";\n url.password = \"\";\n url.search = \"\";\n url.hash = \"\";\n return username ? `${url.origin}/\u2026` : `${url.origin}${url.pathname}`;\n } catch {\n return \"invalid (value hidden)\";\n }\n}\n", "import type { ExtensionCommandContext, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { loadConfig } from \"../settings/config.js\";\nimport { readStateForConfig, syncStateFingerprint } from \"../state/sync-state-store.js\";\nimport { combineSignals } from \"../sync/signals.js\";\nimport { errorMessage } from \"../sync/sync-errors.js\";\nimport type { SyncLoaders } from \"../sync/sync-loaders.js\";\nimport { formatRemoteSelectionMismatch } from \"../sync/sync-policy.js\";\nimport type { RunRouteResult } from \"../ui/cancellable-operation.js\";\nimport {\n observationMatchesConfig,\n type SyncAttentionController,\n type SyncAttentionOrigin,\n syncAttentionMatchesConfig,\n} from \"../ui/sync-attention.js\";\nimport { setSyncStatus } from \"../ui/sync-status.js\";\nimport { parseOptions, splitArgs, validateCommandOptions } from \"./command.js\";\nimport { executeCommand, executeRecoveryCommand } from \"./command-execution.js\";\n\nexport async function handleCommand(\n rawArgs: string,\n ctx: ExtensionCommandContext,\n sessionSignal: AbortSignal,\n loaders: SyncLoaders,\n attention: SyncAttentionController,\n onExplicitSync?: (setup?: string) => void,\n) {\n await reconcileObservation(attention, sessionSignal);\n if (sessionSignal.aborted) return;\n const run = (\n route: string,\n signal?: AbortSignal,\n onCommit?: () => void,\n target?: string,\n onDialog?: (active: boolean) => void,\n retryRefusal = false,\n ) => {\n const [command, ...args] = splitArgs(route);\n if (command === \"sync\" && !retryRefusal) {\n try {\n const options = parseOptions(args);\n validateCommandOptions(\"sync\", options);\n onExplicitSync?.(target ?? options.setup);\n } catch {\n /* Invalid routes do not request an automatic retry. */\n }\n }\n return executeCommand(\n route,\n ctx,\n combineSignals(sessionSignal, signal),\n loaders,\n observationCommitCallback(attention, sessionSignal, onCommit),\n target,\n onDialog,\n retryRefusal,\n );\n };\n if (!rawArgs.trim()) {\n try {\n const { showSyncManager } = await import(\"../ui/manager-ui.js\");\n if (sessionSignal.aborted) return;\n await showSyncManager(ctx, run, sessionSignal, {\n getAttention: () => attention.current(),\n getObservation: () => attention.observation(),\n onObservationInvalidated: () => attention.clearObservation(),\n onSelectionResolved: (expected) => {\n if (attention.current() === expected) attention.clear(ctx);\n },\n });\n } catch (error) {\n if (sessionSignal.aborted) return;\n setSyncStatus(ctx, undefined);\n ctx.ui.notify(errorMessage(error), \"error\");\n }\n await reconcileObservation(attention, sessionSignal);\n if (!sessionSignal.aborted) await attention.publish(ctx, sessionSignal);\n return;\n }\n const result = await run(rawArgs);\n if (result.kind === \"decision-required\") {\n ctx.ui.notify(result.decision.directMessage, \"error\");\n } else if (result.kind === \"remote-selection-required\") {\n const origin = directSelectionOrigin(rawArgs);\n if (origin) attention.set(result.decision, origin);\n const deterministic = splitArgs(rawArgs).some((arg) => arg === \"--yes\" || arg === \"-y\");\n if (origin && ctx.mode === \"tui\" && !deterministic) {\n await resolveSelectionAttention(ctx, attention, sessionSignal, loaders);\n } else {\n ctx.ui.notify(\n formatRemoteSelectionMismatch(\n result.decision.setupName,\n result.decision.localInclude,\n result.decision.remoteInclude,\n ),\n \"error\",\n );\n }\n }\n await clearAttentionAfterCompletedOperation(rawArgs, result, ctx, attention, sessionSignal);\n await reconcileSelectionAttention(ctx, attention, sessionSignal);\n await reconcileObservation(attention, sessionSignal);\n if (!sessionSignal.aborted) await attention.publish(ctx, sessionSignal);\n}\n\nfunction observationCommitCallback(\n attention: SyncAttentionController,\n sessionSignal: AbortSignal,\n onCommit?: () => void,\n) {\n const observed = attention.observation();\n return () => {\n // Opening or cancelling a review changes nothing. A commit may change data\n // even if later publication/baseline cleanup fails; never restore old hints.\n if (!sessionSignal.aborted && attention.observation() === observed) attention.clearObservation();\n onCommit?.();\n };\n}\n\nasync function reconcileObservation(attention: SyncAttentionController, signal: AbortSignal) {\n const observed = attention.observation();\n if (!observed || signal.aborted) return;\n try {\n const config = await loadConfig();\n if (signal.aborted || attention.observation() !== observed) return;\n if (!observationMatchesConfig(observed, config)) {\n attention.clearObservation();\n return;\n }\n const state = await readStateForConfig(config);\n if (signal.aborted || attention.observation() !== observed) return;\n if (syncStateFingerprint(state) !== observed.inspection.stateIdentity) attention.clearObservation();\n } catch {\n if (!signal.aborted && attention.observation() === observed) attention.clearObservation();\n }\n}\n\nasync function clearAttentionAfterCompletedOperation(\n rawArgs: string,\n result: RunRouteResult,\n ctx: ExtensionContext,\n attention: SyncAttentionController,\n signal: AbortSignal,\n) {\n if (result.kind !== \"completed\" || result.outcome === \"cancelled\" || signal.aborted) return;\n const [command, ...rest] = splitArgs(rawArgs);\n if (command !== \"sync\" && command !== \"pull\" && command !== \"push\") return;\n const current = attention.current();\n if (!current) return;\n try {\n const options = parseOptions(rest);\n const setupName = options.setup ?? (await loadConfig()).setupName;\n if (signal.aborted || attention.current() !== current) return;\n if (current.decision.setupName === setupName) attention.clear(ctx);\n } catch {\n // Attention reconciliation below owns malformed or concurrently changed settings.\n }\n}\n\nasync function reconcileSelectionAttention(\n ctx: ExtensionContext,\n attention: SyncAttentionController,\n signal: AbortSignal,\n) {\n const current = attention.current();\n if (!current || signal.aborted) return;\n try {\n const config = await loadConfig(current.decision.setupName);\n if (signal.aborted || attention.current() !== current) return;\n if (!syncAttentionMatchesConfig(current, config)) attention.clear(ctx);\n } catch {\n if (!signal.aborted && attention.current() === current) attention.clear(ctx);\n }\n}\n\nfunction directSelectionOrigin(rawArgs: string): SyncAttentionOrigin | undefined {\n const command = splitArgs(rawArgs)[0];\n return command === \"sync\" || command === \"pull\" || command === \"push\" ? command : undefined;\n}\n\nexport async function resolveSelectionAttention(\n ctx: ExtensionContext,\n attention: SyncAttentionController,\n signal: AbortSignal,\n loaders: SyncLoaders,\n options: {\n cancelLabel?: string;\n withStateAccess?: <T>(task: () => Promise<T>) => Promise<T>;\n } = {},\n) {\n const current = attention.current();\n if (!current || signal.aborted) return;\n const { dispatchManagerResult } = await import(\"../ui/manager-result-dispatcher.js\");\n if (signal.aborted || attention.current() !== current) return;\n await dispatchManagerResult(\n ctx,\n { kind: \"remote-selection-required\", decision: current.decision },\n current.origin,\n (route, actionSignal, onCommit, target) => {\n const execute = () =>\n executeRecoveryCommand(\n route,\n ctx,\n combineSignals(signal, actionSignal),\n loaders,\n observationCommitCallback(attention, signal, onCommit),\n target,\n );\n return options.withStateAccess ? options.withStateAccess(execute) : execute();\n },\n signal,\n {\n cancelLabel: options.cancelLabel,\n withStateAccess: options.withStateAccess,\n onSelectionResolved: () => {\n if (attention.current() === current) attention.clear(ctx);\n },\n },\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,6 +1,7 @@
1
1
  // @generated by scripts/build-runtime.mjs; do not edit.
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
+ configFromSettings,
4
5
  isEnabled,
5
6
  isExplicitlyEnabled,
6
7
  loadConfig,
@@ -13,13 +14,14 @@ import {
13
14
  syncSessionsWarnings,
14
15
  syncSetupReviewIdentity,
15
16
  syncSetupStorageReview
16
- } from "./chunk-RX3WGWVL.ts";
17
+ } from "./chunk-OVBAW7KV.ts";
17
18
  import "./chunk-X7R6DCVF.ts";
18
19
  import "./chunk-2JZFHNLM.ts";
19
20
  import "./chunk-T2SJD3N7.ts";
20
- import "./chunk-DFJGTVPX.ts";
21
- import "./chunk-YZ5BQNRZ.ts";
21
+ import "./chunk-KYTT7KV4.ts";
22
+ import "./chunk-FHE2DCA2.ts";
22
23
  export {
24
+ configFromSettings,
23
25
  isEnabled,
24
26
  isExplicitlyEnabled,
25
27
  loadConfig,
@@ -33,4 +35,4 @@ export {
33
35
  syncSetupReviewIdentity,
34
36
  syncSetupStorageReview
35
37
  };
36
- //# sourceMappingURL=config-B37W7FXW.ts.map
38
+ //# sourceMappingURL=config-HYG7G5EM.ts.map
@@ -6,22 +6,22 @@ import {
6
6
  conflictGroups,
7
7
  readConflictArtifact,
8
8
  saveConflictArtifact
9
- } from "./chunk-DOJRPBQU.ts";
10
- import "./chunk-66GAUVDL.ts";
11
- import "./chunk-JY2RVOUL.ts";
12
- import "./chunk-UGSSZWQ6.ts";
9
+ } from "./chunk-5TSCBBPP.ts";
10
+ import "./chunk-BEST45H2.ts";
11
+ import "./chunk-Y4UVXOLQ.ts";
12
+ import "./chunk-MKSMJPVA.ts";
13
13
  import "./chunk-X7R6DCVF.ts";
14
14
  import "./chunk-ZW5ZLGBI.ts";
15
- import "./chunk-TO2GMX3K.ts";
16
- import "./chunk-73MDIVYJ.ts";
15
+ import "./chunk-XJHQPB3E.ts";
16
+ import "./chunk-DN4IA7MR.ts";
17
+ import "./chunk-AR2DGDUI.ts";
17
18
  import "./chunk-SWRVXVFD.ts";
18
19
  import "./chunk-2JZFHNLM.ts";
19
20
  import "./chunk-T2SJD3N7.ts";
20
- import "./chunk-PHANBTVM.ts";
21
- import "./chunk-DFJGTVPX.ts";
22
- import "./chunk-DO55XUNU.ts";
23
- import "./chunk-AR2DGDUI.ts";
24
- import "./chunk-YZ5BQNRZ.ts";
21
+ import "./chunk-ESKOPQVB.ts";
22
+ import "./chunk-KYTT7KV4.ts";
23
+ import "./chunk-CBLTWXAU.ts";
24
+ import "./chunk-FHE2DCA2.ts";
25
25
  export {
26
26
  conflictArtifactFingerprint,
27
27
  conflictDirectory,
@@ -29,4 +29,4 @@ export {
29
29
  readConflictArtifact,
30
30
  saveConflictArtifact
31
31
  };
32
- //# sourceMappingURL=conflict-artifacts-6XGSSU5S.ts.map
32
+ //# sourceMappingURL=conflict-artifacts-J6WSDCWP.ts.map
@@ -2,27 +2,27 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  mergeSync
5
- } from "./chunk-2VSN3MFX.ts";
5
+ } from "./chunk-MMQIEDZ6.ts";
6
6
  import {
7
7
  conflictArtifactFingerprint,
8
8
  readConflictArtifact
9
- } from "./chunk-DOJRPBQU.ts";
10
- import "./chunk-66GAUVDL.ts";
11
- import "./chunk-JY2RVOUL.ts";
12
- import "./chunk-QWV3XKNJ.ts";
9
+ } from "./chunk-5TSCBBPP.ts";
10
+ import "./chunk-BEST45H2.ts";
11
+ import "./chunk-Y4UVXOLQ.ts";
12
+ import "./chunk-TIMWN2RH.ts";
13
13
  import {
14
14
  createSyncBackend
15
- } from "./chunk-RAMHGOX2.ts";
15
+ } from "./chunk-OJARL2TG.ts";
16
16
  import {
17
17
  confirmMergeReview
18
18
  } from "./chunk-KHBPED6W.ts";
19
- import "./chunk-Z5O2TLNF.ts";
20
- import "./chunk-MRIPZGPR.ts";
21
- import "./chunk-UGSSZWQ6.ts";
19
+ import "./chunk-TZC7GDJE.ts";
20
+ import "./chunk-FLHCOJCD.ts";
21
+ import "./chunk-MKSMJPVA.ts";
22
22
  import "./chunk-M6VQJIOU.ts";
23
23
  import {
24
24
  captureMutationOwner
25
- } from "./chunk-5WJQ6XOW.ts";
25
+ } from "./chunk-GNYGNHFF.ts";
26
26
  import {
27
27
  safeTerminalText
28
28
  } from "./chunk-AMJRUXFT.ts";
@@ -30,28 +30,28 @@ import "./chunk-7D5SF7P3.ts";
30
30
  import {
31
31
  loadConfig,
32
32
  syncCheckConfigFingerprint
33
- } from "./chunk-RX3WGWVL.ts";
33
+ } from "./chunk-OVBAW7KV.ts";
34
34
  import "./chunk-X7R6DCVF.ts";
35
- import "./chunk-AAPAHANE.ts";
35
+ import "./chunk-7A35ZAVO.ts";
36
36
  import "./chunk-5SFMBY5P.ts";
37
- import "./chunk-MDUORMCK.ts";
37
+ import "./chunk-6O3EDBRL.ts";
38
38
  import "./chunk-PWMWOJP4.ts";
39
- import "./chunk-AO6EDUA6.ts";
40
- import "./chunk-CDQGSZL3.ts";
39
+ import "./chunk-AKMV47YC.ts";
40
+ import "./chunk-6LD5KX55.ts";
41
41
  import "./chunk-ZW5ZLGBI.ts";
42
- import "./chunk-TO2GMX3K.ts";
42
+ import "./chunk-XJHQPB3E.ts";
43
43
  import {
44
44
  readStateForConfig,
45
45
  syncStateFingerprint
46
- } from "./chunk-73MDIVYJ.ts";
46
+ } from "./chunk-DN4IA7MR.ts";
47
+ import "./chunk-AR2DGDUI.ts";
47
48
  import "./chunk-SWRVXVFD.ts";
48
49
  import "./chunk-2JZFHNLM.ts";
49
50
  import "./chunk-T2SJD3N7.ts";
50
- import "./chunk-PHANBTVM.ts";
51
- import "./chunk-DFJGTVPX.ts";
52
- import "./chunk-DO55XUNU.ts";
53
- import "./chunk-AR2DGDUI.ts";
54
- import "./chunk-YZ5BQNRZ.ts";
51
+ import "./chunk-ESKOPQVB.ts";
52
+ import "./chunk-KYTT7KV4.ts";
53
+ import "./chunk-CBLTWXAU.ts";
54
+ import "./chunk-FHE2DCA2.ts";
55
55
  import "./chunk-DT7M4VQS.ts";
56
56
  import "./chunk-YDVQYUHE.ts";
57
57
  import "./chunk-PRUEIIK7.ts";
@@ -186,4 +186,4 @@ async function showConflicts(ctx, options, factory = createSyncBackend) {
186
186
  export {
187
187
  showConflicts
188
188
  };
189
- //# sourceMappingURL=conflict-review-BQSHSJB3.ts.map
189
+ //# sourceMappingURL=conflict-review-GXA6Y7KY.ts.map
@@ -8,15 +8,15 @@ import {
8
8
  reserveContinuousRequest,
9
9
  updateContinuousRecord,
10
10
  validateContinuousRecord
11
- } from "./chunk-4RLATUP4.ts";
12
- import "./chunk-MDUORMCK.ts";
11
+ } from "./chunk-S5OCYVPS.ts";
12
+ import "./chunk-6O3EDBRL.ts";
13
13
  import "./chunk-PWMWOJP4.ts";
14
- import "./chunk-73MDIVYJ.ts";
14
+ import "./chunk-DN4IA7MR.ts";
15
+ import "./chunk-AR2DGDUI.ts";
15
16
  import "./chunk-SWRVXVFD.ts";
16
17
  import "./chunk-2JZFHNLM.ts";
17
18
  import "./chunk-T2SJD3N7.ts";
18
- import "./chunk-AR2DGDUI.ts";
19
- import "./chunk-YZ5BQNRZ.ts";
19
+ import "./chunk-FHE2DCA2.ts";
20
20
  import "./chunk-DT7M4VQS.ts";
21
21
  import "./chunk-YDVQYUHE.ts";
22
22
  export {
@@ -28,4 +28,4 @@ export {
28
28
  updateContinuousRecord,
29
29
  validateContinuousRecord
30
30
  };
31
- //# sourceMappingURL=continuous-record-4DQ2EAZS.ts.map
31
+ //# sourceMappingURL=continuous-record-EPHGR2DU.ts.map
@@ -2,10 +2,10 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  readMergeJournal
5
- } from "./chunk-66GAUVDL.ts";
5
+ } from "./chunk-BEST45H2.ts";
6
6
  import {
7
7
  fileHashMap
8
- } from "./chunk-JY2RVOUL.ts";
8
+ } from "./chunk-Y4UVXOLQ.ts";
9
9
  import {
10
10
  acquireContinuousLease,
11
11
  continuousBinding,
@@ -14,51 +14,51 @@ import {
14
14
  readContinuousRecord,
15
15
  reserveContinuousRequest,
16
16
  updateContinuousRecord
17
- } from "./chunk-4RLATUP4.ts";
18
- import "./chunk-Z5O2TLNF.ts";
17
+ } from "./chunk-S5OCYVPS.ts";
18
+ import "./chunk-TZC7GDJE.ts";
19
19
  import {
20
20
  withAgentSyncLock
21
- } from "./chunk-ODF2M4RF.ts";
21
+ } from "./chunk-ZC3IHFNM.ts";
22
22
  import "./chunk-3ST7RSYN.ts";
23
- import "./chunk-MRIPZGPR.ts";
24
- import "./chunk-UGSSZWQ6.ts";
23
+ import "./chunk-FLHCOJCD.ts";
24
+ import "./chunk-MKSMJPVA.ts";
25
25
  import {
26
26
  createStartupTimings
27
27
  } from "./chunk-M6VQJIOU.ts";
28
28
  import {
29
29
  captureMutationOwner
30
- } from "./chunk-5WJQ6XOW.ts";
30
+ } from "./chunk-GNYGNHFF.ts";
31
31
  import {
32
32
  setSyncStatus
33
33
  } from "./chunk-K3RIEL6J.ts";
34
34
  import {
35
35
  loadConfigForCheck,
36
36
  syncCheckConfigFingerprint
37
- } from "./chunk-RX3WGWVL.ts";
37
+ } from "./chunk-OVBAW7KV.ts";
38
38
  import "./chunk-X7R6DCVF.ts";
39
39
  import {
40
40
  withLock
41
- } from "./chunk-MDUORMCK.ts";
41
+ } from "./chunk-6O3EDBRL.ts";
42
42
  import "./chunk-PWMWOJP4.ts";
43
43
  import "./chunk-ZW5ZLGBI.ts";
44
- import "./chunk-TO2GMX3K.ts";
44
+ import "./chunk-XJHQPB3E.ts";
45
45
  import {
46
46
  readStateForConfig
47
- } from "./chunk-73MDIVYJ.ts";
47
+ } from "./chunk-DN4IA7MR.ts";
48
+ import "./chunk-AR2DGDUI.ts";
48
49
  import {
49
50
  withStateDirectoryAccess
50
51
  } from "./chunk-SWRVXVFD.ts";
51
52
  import "./chunk-2JZFHNLM.ts";
52
53
  import "./chunk-T2SJD3N7.ts";
53
- import "./chunk-PHANBTVM.ts";
54
- import "./chunk-DFJGTVPX.ts";
54
+ import "./chunk-ESKOPQVB.ts";
55
+ import "./chunk-KYTT7KV4.ts";
55
56
  import {
56
57
  snapshotOptionsForContext
57
- } from "./chunk-DO55XUNU.ts";
58
- import "./chunk-AR2DGDUI.ts";
58
+ } from "./chunk-CBLTWXAU.ts";
59
59
  import {
60
60
  isDeniedPath
61
- } from "./chunk-YZ5BQNRZ.ts";
61
+ } from "./chunk-FHE2DCA2.ts";
62
62
  import {
63
63
  ContinuousError,
64
64
  continuousFailure
@@ -574,4 +574,4 @@ export {
574
574
  continuousEnabled,
575
575
  createContinuousSync
576
576
  };
577
- //# sourceMappingURL=continuous-sync-ZT3UEQLK.ts.map
577
+ //# sourceMappingURL=continuous-sync-TTOSJCQU.ts.map
@@ -2,11 +2,11 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  updateSyncSetup
5
- } from "./chunk-JXWTEJS5.ts";
5
+ } from "./chunk-45COPAK7.ts";
6
6
  import {
7
7
  loadConfig,
8
8
  localConfigPath
9
- } from "./chunk-RX3WGWVL.ts";
9
+ } from "./chunk-OVBAW7KV.ts";
10
10
  import "./chunk-X7R6DCVF.ts";
11
11
  import "./chunk-2JZFHNLM.ts";
12
12
  import "./chunk-T2SJD3N7.ts";
@@ -15,12 +15,11 @@ import {
15
15
  isSafeCustomIncludePath,
16
16
  normalizeSyncInclude,
17
17
  syncIncludeSelection
18
- } from "./chunk-DFJGTVPX.ts";
18
+ } from "./chunk-KYTT7KV4.ts";
19
19
  import {
20
20
  agentDir
21
- } from "./chunk-DO55XUNU.ts";
22
- import "./chunk-AR2DGDUI.ts";
23
- import "./chunk-YZ5BQNRZ.ts";
21
+ } from "./chunk-CBLTWXAU.ts";
22
+ import "./chunk-FHE2DCA2.ts";
24
23
 
25
24
  // src/ui/file-selection.ts
26
25
  import fs from "node:fs/promises";
@@ -281,4 +280,4 @@ function safeTerminalText(value) {
281
280
  export {
282
281
  showFileSelection
283
282
  };
284
- //# sourceMappingURL=file-selection-FBLKM25V.ts.map
283
+ //# sourceMappingURL=file-selection-IELTXSGZ.ts.map