@narumitw/pi-sync 0.57.9 → 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.
- package/CHANGELOG.md +14 -0
- package/README.md +7 -1
- package/dist/chunks/{agent-candidate-GNEYR225.ts → agent-candidate-OCDPRI5G.ts} +12 -9
- package/dist/chunks/{agent-plan-3L7CRFDM.ts → agent-plan-P5B5RGZ7.ts} +22 -18
- package/dist/chunks/{agent-plan-3L7CRFDM.ts.map → agent-plan-P5B5RGZ7.ts.map} +1 -1
- package/dist/chunks/{agent-refusal-retry-RPTMUQXK.ts → agent-refusal-retry-476YGNU5.ts} +11 -8
- package/dist/chunks/{agent-refusal-retry-RPTMUQXK.ts.map → agent-refusal-retry-476YGNU5.ts.map} +1 -1
- package/dist/chunks/{agent-store-55CZOCPX.ts → agent-store-RJSMNOYP.ts} +12 -11
- package/dist/chunks/{agent-store-55CZOCPX.ts.map → agent-store-RJSMNOYP.ts.map} +1 -1
- package/dist/chunks/agent-sync-EUK2CPSS.ts +22 -0
- package/dist/chunks/{chunk-U3XRI2HF.ts → chunk-3IYAPMST.ts} +11 -11
- package/dist/chunks/{chunk-B4QZBDBT.ts → chunk-45COPAK7.ts} +10 -3
- package/dist/chunks/chunk-45COPAK7.ts.map +7 -0
- package/dist/chunks/chunk-5SFMBY5P.ts +26 -0
- package/dist/chunks/chunk-5SFMBY5P.ts.map +7 -0
- package/dist/chunks/{chunk-ED3TYIVW.ts → chunk-5TSCBBPP.ts} +5 -5
- package/dist/chunks/{chunk-5QAE3G3K.ts → chunk-67INJPKR.ts} +6 -6
- package/dist/chunks/{chunk-IWZH5KYS.ts → chunk-6LD5KX55.ts} +10 -10
- package/dist/chunks/{chunk-AAEEHR7H.ts → chunk-6O3EDBRL.ts} +2 -2
- package/dist/chunks/{chunk-CRKTAPSL.ts → chunk-7A35ZAVO.ts} +333 -237
- package/dist/chunks/chunk-7A35ZAVO.ts.map +7 -0
- package/dist/chunks/{chunk-6FVVRTL5.ts → chunk-7OLLPPLU.ts} +77 -63
- package/dist/chunks/chunk-7OLLPPLU.ts.map +7 -0
- package/dist/chunks/{chunk-PQW6GS4J.ts → chunk-7ZIYU5QS.ts} +12 -10
- package/dist/chunks/{chunk-PQW6GS4J.ts.map → chunk-7ZIYU5QS.ts.map} +1 -1
- package/dist/chunks/{chunk-S7QS4AWK.ts → chunk-AKMV47YC.ts} +5 -5
- package/dist/chunks/chunk-AR2DGDUI.ts +55 -0
- package/dist/chunks/chunk-AR2DGDUI.ts.map +7 -0
- package/dist/chunks/{chunk-GNH73BJ5.ts → chunk-BEST45H2.ts} +7 -7
- package/dist/chunks/chunk-CBLTWXAU.ts +114 -0
- package/dist/chunks/chunk-CBLTWXAU.ts.map +7 -0
- package/dist/chunks/{chunk-GP5DU62N.ts → chunk-CPT2BN6N.ts} +2 -2
- package/dist/chunks/{chunk-UPNVIUBN.ts → chunk-DN4IA7MR.ts} +6 -6
- package/dist/chunks/{chunk-PG7NMFP2.ts → chunk-DRTC4PKM.ts} +8 -8
- package/dist/chunks/chunk-ESKOPQVB.ts +348 -0
- package/dist/chunks/chunk-ESKOPQVB.ts.map +7 -0
- package/dist/chunks/{chunk-MKKF4IMY.ts → chunk-F7E3VFXU.ts} +5 -5
- package/dist/chunks/{chunk-HUZ5CR4W.ts → chunk-FHE2DCA2.ts} +3 -52
- package/dist/chunks/chunk-FHE2DCA2.ts.map +7 -0
- package/dist/chunks/{chunk-UBV24CG4.ts → chunk-FLHCOJCD.ts} +3 -3
- package/dist/chunks/chunk-GNYGNHFF.ts +27 -0
- package/dist/chunks/chunk-GNYGNHFF.ts.map +7 -0
- package/dist/chunks/chunk-KYTT7KV4.ts +319 -0
- package/dist/chunks/chunk-KYTT7KV4.ts.map +7 -0
- package/dist/chunks/{chunk-A6HU4ERM.ts → chunk-MKSMJPVA.ts} +6 -23
- package/dist/chunks/chunk-MKSMJPVA.ts.map +7 -0
- package/dist/chunks/{chunk-ORGBI36T.ts → chunk-OJARL2TG.ts} +4 -4
- package/dist/chunks/{chunk-JCH3VXIO.ts → chunk-OKPPZA4D.ts} +150 -91
- package/dist/chunks/chunk-OKPPZA4D.ts.map +7 -0
- package/dist/chunks/{chunk-QO333NM4.ts → chunk-OVBAW7KV.ts} +180 -133
- package/dist/chunks/chunk-OVBAW7KV.ts.map +7 -0
- package/dist/chunks/{chunk-GSNPASKB.ts → chunk-Q23JJW7E.ts} +6 -6
- package/dist/chunks/{chunk-YK52VDXG.ts → chunk-TIMWN2RH.ts} +10 -8
- package/dist/chunks/{chunk-YK52VDXG.ts.map → chunk-TIMWN2RH.ts.map} +1 -1
- package/dist/chunks/{chunk-UOHR7LRO.ts → chunk-TZC7GDJE.ts} +10 -22
- package/dist/chunks/chunk-TZC7GDJE.ts.map +7 -0
- package/dist/chunks/chunk-X7R6DCVF.ts +28 -0
- package/dist/chunks/chunk-X7R6DCVF.ts.map +7 -0
- package/dist/chunks/{chunk-76NB4R7U.ts → chunk-XJHQPB3E.ts} +2 -2
- package/dist/chunks/{chunk-BDB4IDM3.ts → chunk-Y4UVXOLQ.ts} +8 -6
- package/dist/chunks/{chunk-BDB4IDM3.ts.map → chunk-Y4UVXOLQ.ts.map} +1 -1
- package/dist/chunks/{chunk-P7DD5PWZ.ts → chunk-ZDDBZH72.ts} +3 -3
- package/dist/chunks/command-handler-F2E7A5T5.ts +548 -0
- package/dist/chunks/command-handler-F2E7A5T5.ts.map +7 -0
- package/dist/chunks/{config-KGIYTTXQ.ts → config-HYG7G5EM.ts} +7 -6
- package/dist/chunks/{conflict-artifacts-FXFIIBCB.ts → conflict-artifacts-J6WSDCWP.ts} +13 -9
- package/dist/chunks/{conflict-review-3X37QEIT.ts → conflict-review-2QMO2K6Q.ts} +31 -25
- package/dist/chunks/{conflict-review-3X37QEIT.ts.map → conflict-review-2QMO2K6Q.ts.map} +1 -1
- package/dist/chunks/{continuous-record-SQJ47CXN.ts → continuous-record-AH7JGYKM.ts} +8 -7
- package/dist/chunks/{continuous-sync-Q6QUD6TY.ts → continuous-sync-VRMXCA5X.ts} +33 -28
- package/dist/chunks/{continuous-sync-Q6QUD6TY.ts.map → continuous-sync-VRMXCA5X.ts.map} +1 -1
- package/dist/chunks/{file-selection-3JJYOVNR.ts → file-selection-IELTXSGZ.ts} +11 -10
- package/dist/chunks/{file-selection-3JJYOVNR.ts.map → file-selection-IELTXSGZ.ts.map} +1 -1
- package/dist/chunks/{git-backend-NYKSG5X6.ts → git-backend-KHD36W27.ts} +15 -12
- package/dist/chunks/{git-backend-NYKSG5X6.ts.map → git-backend-KHD36W27.ts.map} +1 -1
- package/dist/chunks/{local-fields-6DGYOOIK.ts → local-fields-JEKAPZKD.ts} +9 -5
- package/dist/chunks/manager-result-dispatcher-6W52NM7F.ts +32 -0
- package/dist/chunks/{manager-ui-ZH6DEC2G.ts → manager-ui-LM7DSJ2Y.ts} +124 -67
- package/dist/chunks/manager-ui-LM7DSJ2Y.ts.map +7 -0
- package/dist/chunks/{merge-baseline-store-RFCAH7KL.ts → merge-baseline-store-65GKUMXI.ts} +6 -5
- package/dist/chunks/remote-selection-ui-TD4C4W3J.ts +31 -0
- package/dist/chunks/{s3-backend-F7PR5FB3.ts → s3-backend-L24UZ6IK.ts} +24 -18
- package/dist/chunks/s3-backend-L24UZ6IK.ts.map +7 -0
- package/dist/chunks/{setup-switch-E7PHKI6J.ts → setup-switch-PIPXYPCW.ts} +6 -7
- package/dist/chunks/{setup-wizard-OVHZYXNW.ts → setup-wizard-RR5U3SUB.ts} +8 -9
- package/dist/chunks/{setup-wizard-OVHZYXNW.ts.map → setup-wizard-RR5U3SUB.ts.map} +1 -1
- package/dist/chunks/{snapshot-THS5EY2L.ts → snapshot-RGNDYT6A.ts} +10 -6
- package/dist/chunks/snapshot-transaction-26BQO36S.ts +24 -0
- package/dist/chunks/sync-inspection-MOMLGUTD.ts +25 -0
- package/dist/chunks/sync-inspection-MOMLGUTD.ts.map +7 -0
- package/dist/chunks/{sync-operations-Y72GNIQ2.ts → sync-operations-CV3TULLD.ts} +66 -57
- package/dist/chunks/{sync-operations-Y72GNIQ2.ts.map → sync-operations-CV3TULLD.ts.map} +1 -1
- package/dist/chunks/{sync-state-CFL4RRRB.ts → sync-state-7L4NT7W2.ts} +8 -5
- package/dist/chunks/sync-state-7L4NT7W2.ts.map +7 -0
- package/dist/chunks/{webdav-backend-TGFUH3SF.ts → webdav-backend-3ZCACILP.ts} +15 -12
- package/dist/chunks/{webdav-backend-TGFUH3SF.ts.map → webdav-backend-3ZCACILP.ts.map} +1 -1
- package/dist/index.ts +54 -537
- package/dist/index.ts.map +3 -3
- package/package.json +2 -2
- package/skills/configure-pi-sync/references/configuration.md +8 -1
- package/src/backends/s3/s3-client.ts +8 -1
- package/src/commands/command-execution.ts +8 -3
- package/src/paths.ts +6 -1
- package/src/settings/config-file.ts +205 -118
- package/src/settings/config.ts +2 -2
- package/src/settings/settings-management.ts +15 -1
- package/src/settings/settings-store.ts +0 -14
- package/src/settings/settings-validation.ts +1 -1
- package/src/snapshot/session-paths.ts +15 -2
- package/src/snapshot/snapshot-mutation-queues.ts +142 -0
- package/src/snapshot/snapshot-transaction-directory.ts +16 -0
- package/src/snapshot/snapshot-transaction.ts +123 -137
- package/src/sync/automatic-sync.ts +12 -6
- package/src/sync/local-field-policy.ts +29 -0
- package/src/sync/local-fields.ts +3 -29
- package/src/sync/merge-apply.ts +6 -0
- package/src/sync/mutation-owner.ts +22 -0
- package/src/sync/startup-check.ts +3 -2
- package/src/sync/sync-loaders.ts +4 -0
- package/src/sync/sync-local.ts +2 -19
- package/src/sync-extension.ts +7 -2
- package/src/ui/cancellable-operation.ts +36 -13
- package/src/ui/manager-state.ts +3 -1
- package/src/ui/manager-ui.ts +76 -24
- package/src/ui/remote-selection-ui.ts +131 -82
- package/src/ui/settings-ui.ts +2 -1
- package/dist/chunks/chunk-6FVVRTL5.ts.map +0 -7
- package/dist/chunks/chunk-A6HU4ERM.ts.map +0 -7
- package/dist/chunks/chunk-B4QZBDBT.ts.map +0 -7
- package/dist/chunks/chunk-CRKTAPSL.ts.map +0 -7
- package/dist/chunks/chunk-HUZ5CR4W.ts.map +0 -7
- package/dist/chunks/chunk-JCH3VXIO.ts.map +0 -7
- package/dist/chunks/chunk-QO333NM4.ts.map +0 -7
- package/dist/chunks/chunk-QOFMXPM5.ts +0 -735
- package/dist/chunks/chunk-QOFMXPM5.ts.map +0 -7
- package/dist/chunks/chunk-UOHR7LRO.ts.map +0 -7
- package/dist/chunks/manager-result-dispatcher-HOCM2GDA.ts +0 -24
- package/dist/chunks/manager-ui-ZH6DEC2G.ts.map +0 -7
- package/dist/chunks/remote-selection-ui-YFPGYGNE.ts +0 -23
- package/dist/chunks/s3-backend-F7PR5FB3.ts.map +0 -7
- package/dist/chunks/sync-inspection-J25EEKZK.ts +0 -21
- /package/dist/chunks/{agent-candidate-GNEYR225.ts.map → agent-candidate-OCDPRI5G.ts.map} +0 -0
- /package/dist/chunks/{config-KGIYTTXQ.ts.map → agent-sync-EUK2CPSS.ts.map} +0 -0
- /package/dist/chunks/{chunk-U3XRI2HF.ts.map → chunk-3IYAPMST.ts.map} +0 -0
- /package/dist/chunks/{chunk-ED3TYIVW.ts.map → chunk-5TSCBBPP.ts.map} +0 -0
- /package/dist/chunks/{chunk-5QAE3G3K.ts.map → chunk-67INJPKR.ts.map} +0 -0
- /package/dist/chunks/{chunk-IWZH5KYS.ts.map → chunk-6LD5KX55.ts.map} +0 -0
- /package/dist/chunks/{chunk-AAEEHR7H.ts.map → chunk-6O3EDBRL.ts.map} +0 -0
- /package/dist/chunks/{chunk-S7QS4AWK.ts.map → chunk-AKMV47YC.ts.map} +0 -0
- /package/dist/chunks/{chunk-GNH73BJ5.ts.map → chunk-BEST45H2.ts.map} +0 -0
- /package/dist/chunks/{chunk-GP5DU62N.ts.map → chunk-CPT2BN6N.ts.map} +0 -0
- /package/dist/chunks/{chunk-UPNVIUBN.ts.map → chunk-DN4IA7MR.ts.map} +0 -0
- /package/dist/chunks/{chunk-PG7NMFP2.ts.map → chunk-DRTC4PKM.ts.map} +0 -0
- /package/dist/chunks/{chunk-MKKF4IMY.ts.map → chunk-F7E3VFXU.ts.map} +0 -0
- /package/dist/chunks/{chunk-UBV24CG4.ts.map → chunk-FLHCOJCD.ts.map} +0 -0
- /package/dist/chunks/{chunk-ORGBI36T.ts.map → chunk-OJARL2TG.ts.map} +0 -0
- /package/dist/chunks/{chunk-GSNPASKB.ts.map → chunk-Q23JJW7E.ts.map} +0 -0
- /package/dist/chunks/{chunk-76NB4R7U.ts.map → chunk-XJHQPB3E.ts.map} +0 -0
- /package/dist/chunks/{chunk-P7DD5PWZ.ts.map → chunk-ZDDBZH72.ts.map} +0 -0
- /package/dist/chunks/{conflict-artifacts-FXFIIBCB.ts.map → config-HYG7G5EM.ts.map} +0 -0
- /package/dist/chunks/{continuous-record-SQJ47CXN.ts.map → conflict-artifacts-J6WSDCWP.ts.map} +0 -0
- /package/dist/chunks/{local-fields-6DGYOOIK.ts.map → continuous-record-AH7JGYKM.ts.map} +0 -0
- /package/dist/chunks/{manager-result-dispatcher-HOCM2GDA.ts.map → local-fields-JEKAPZKD.ts.map} +0 -0
- /package/dist/chunks/{merge-baseline-store-RFCAH7KL.ts.map → manager-result-dispatcher-6W52NM7F.ts.map} +0 -0
- /package/dist/chunks/{remote-selection-ui-YFPGYGNE.ts.map → merge-baseline-store-65GKUMXI.ts.map} +0 -0
- /package/dist/chunks/{setup-switch-E7PHKI6J.ts.map → remote-selection-ui-TD4C4W3J.ts.map} +0 -0
- /package/dist/chunks/{snapshot-THS5EY2L.ts.map → setup-switch-PIPXYPCW.ts.map} +0 -0
- /package/dist/chunks/{sync-inspection-J25EEKZK.ts.map → snapshot-RGNDYT6A.ts.map} +0 -0
- /package/dist/chunks/{sync-state-CFL4RRRB.ts.map → snapshot-transaction-26BQO36S.ts.map} +0 -0
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
automaticSyncSummary
|
|
5
|
+
} from "./chunk-ECYCNZOE.ts";
|
|
6
|
+
import {
|
|
7
|
+
withAgentSyncLock
|
|
8
|
+
} from "./chunk-F7E3VFXU.ts";
|
|
9
|
+
import "./chunk-3ST7RSYN.ts";
|
|
10
|
+
import {
|
|
11
|
+
syncErrorGuidance
|
|
12
|
+
} from "./chunk-G4RUXRWZ.ts";
|
|
13
|
+
import {
|
|
14
|
+
observationMatchesConfig,
|
|
15
|
+
syncAttentionMatchesConfig
|
|
16
|
+
} from "./chunk-Q23JJW7E.ts";
|
|
17
|
+
import {
|
|
18
|
+
parseOptions,
|
|
19
|
+
resolveSyncCommand,
|
|
20
|
+
splitArgs,
|
|
21
|
+
startupTransferSummary,
|
|
22
|
+
usage,
|
|
23
|
+
validateCommandOptions
|
|
24
|
+
} from "./chunk-NLWS55B6.ts";
|
|
25
|
+
import {
|
|
26
|
+
safeTerminalText
|
|
27
|
+
} from "./chunk-AMJRUXFT.ts";
|
|
28
|
+
import {
|
|
29
|
+
setSyncStatus
|
|
30
|
+
} from "./chunk-K3RIEL6J.ts";
|
|
31
|
+
import {
|
|
32
|
+
SetupPullRequiresUiError,
|
|
33
|
+
errorMessage,
|
|
34
|
+
isSyncDecisionRequiredError
|
|
35
|
+
} from "./chunk-7D5SF7P3.ts";
|
|
36
|
+
import {
|
|
37
|
+
activeLocalConfigPath,
|
|
38
|
+
createLocalConfigDocument,
|
|
39
|
+
loadConfig,
|
|
40
|
+
localConfigPath,
|
|
41
|
+
localConfigTemplate,
|
|
42
|
+
readLocalConfigObject,
|
|
43
|
+
sessionTokenWarnings,
|
|
44
|
+
syncSessionsWarnings
|
|
45
|
+
} from "./chunk-OVBAW7KV.ts";
|
|
46
|
+
import "./chunk-X7R6DCVF.ts";
|
|
47
|
+
import {
|
|
48
|
+
unlock,
|
|
49
|
+
withLock
|
|
50
|
+
} from "./chunk-6O3EDBRL.ts";
|
|
51
|
+
import {
|
|
52
|
+
combineSignals,
|
|
53
|
+
throwIfAborted
|
|
54
|
+
} from "./chunk-PWMWOJP4.ts";
|
|
55
|
+
import {
|
|
56
|
+
readStateForConfig,
|
|
57
|
+
syncStateFingerprint
|
|
58
|
+
} from "./chunk-DN4IA7MR.ts";
|
|
59
|
+
import "./chunk-AR2DGDUI.ts";
|
|
60
|
+
import {
|
|
61
|
+
migrateLegacyStateDirectory,
|
|
62
|
+
stateDirectoryMigrationNotice
|
|
63
|
+
} from "./chunk-SWRVXVFD.ts";
|
|
64
|
+
import "./chunk-2JZFHNLM.ts";
|
|
65
|
+
import "./chunk-T2SJD3N7.ts";
|
|
66
|
+
import {
|
|
67
|
+
RemoteSelectionMismatchError,
|
|
68
|
+
formatRemoteSelectionMismatch
|
|
69
|
+
} from "./chunk-KYTT7KV4.ts";
|
|
70
|
+
import "./chunk-FHE2DCA2.ts";
|
|
71
|
+
import "./chunk-DT7M4VQS.ts";
|
|
72
|
+
import "./chunk-YDVQYUHE.ts";
|
|
73
|
+
import "./chunk-PRUEIIK7.ts";
|
|
74
|
+
|
|
75
|
+
// src/ui/operation-dialogs.ts
|
|
76
|
+
function trackOperationDialogs(ctx, onDialog) {
|
|
77
|
+
if (!onDialog) return ctx;
|
|
78
|
+
const runDialog = async (task) => {
|
|
79
|
+
onDialog(true);
|
|
80
|
+
try {
|
|
81
|
+
return await task();
|
|
82
|
+
} finally {
|
|
83
|
+
onDialog(false);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const ui = {
|
|
87
|
+
...ctx.ui,
|
|
88
|
+
select: (...args) => runDialog(() => ctx.ui.select(...args)),
|
|
89
|
+
confirm: (...args) => runDialog(() => ctx.ui.confirm(...args))
|
|
90
|
+
};
|
|
91
|
+
return new Proxy(ctx, {
|
|
92
|
+
get(target, key, receiver) {
|
|
93
|
+
return key === "ui" ? ui : Reflect.get(target, key, receiver);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// src/commands/command-execution.ts
|
|
99
|
+
async function executeRecoveryCommand(rawArgs, ctx, signal, loaders, onCommit, setup) {
|
|
100
|
+
try {
|
|
101
|
+
const [subcommand, ...rest] = splitArgs(rawArgs);
|
|
102
|
+
if (subcommand !== "sync" && subcommand !== "pull" && subcommand !== "push") {
|
|
103
|
+
throw new Error(`Unsupported sync recovery route: ${subcommand ?? "missing"}`);
|
|
104
|
+
}
|
|
105
|
+
const options = parseOptions(rest);
|
|
106
|
+
if (setup !== void 0) options.setup = setup;
|
|
107
|
+
if (signal) options.signal = signal;
|
|
108
|
+
if (onCommit) options.onCommit = onCommit;
|
|
109
|
+
options.reload = false;
|
|
110
|
+
options.auto = false;
|
|
111
|
+
validateCommandOptions(subcommand, options);
|
|
112
|
+
const operations = await loaders.operations();
|
|
113
|
+
throwIfAborted(options.signal);
|
|
114
|
+
if (subcommand === "push") {
|
|
115
|
+
const outcome = await withLock("push", () => operations.push(ctx, options));
|
|
116
|
+
return { kind: "completed", ...outcome ? { outcome } : {} };
|
|
117
|
+
}
|
|
118
|
+
if (subcommand === "pull") {
|
|
119
|
+
const outcome = await withLock("pull", () => operations.pull(ctx, options));
|
|
120
|
+
return { kind: "completed", ...outcome ? { outcome } : {} };
|
|
121
|
+
}
|
|
122
|
+
await withAgentSyncLock(ctx, options, (current) => operations.syncBoth(ctx, current));
|
|
123
|
+
return { kind: "completed" };
|
|
124
|
+
} catch (error) {
|
|
125
|
+
if (signal?.aborted) return { kind: "failed" };
|
|
126
|
+
setSyncStatus(ctx, void 0);
|
|
127
|
+
if (error instanceof RemoteSelectionMismatchError) {
|
|
128
|
+
return { kind: "remote-selection-required", decision: error.decision };
|
|
129
|
+
}
|
|
130
|
+
if (isSyncDecisionRequiredError(error)) {
|
|
131
|
+
return { kind: "decision-required", decision: error.decision };
|
|
132
|
+
}
|
|
133
|
+
ctx.ui.notify(syncErrorGuidance(error), "error");
|
|
134
|
+
return { kind: "failed" };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function executeCommand(rawArgs, ctx, signal, loaders, onCommit, setup, onDialog, retryRefusal = false) {
|
|
138
|
+
ctx = trackOperationDialogs(ctx, onDialog);
|
|
139
|
+
try {
|
|
140
|
+
const command = await resolveSyncCommand(rawArgs, ctx);
|
|
141
|
+
if (signal?.aborted || !command) return { kind: "completed" };
|
|
142
|
+
const { subcommand, rest } = command;
|
|
143
|
+
const options = parseOptions(rest);
|
|
144
|
+
if (setup !== void 0) options.setup = setup;
|
|
145
|
+
if (signal) options.signal = signal;
|
|
146
|
+
if (onCommit) options.onCommit = onCommit;
|
|
147
|
+
validateCommandOptions(subcommand, options);
|
|
148
|
+
if (retryRefusal) {
|
|
149
|
+
if (subcommand !== "sync") throw new Error("A refused-model retry is available only for merged sync.");
|
|
150
|
+
options.agentRetryRefusal = true;
|
|
151
|
+
}
|
|
152
|
+
switch (subcommand) {
|
|
153
|
+
case "help":
|
|
154
|
+
ctx.ui.notify(usage(), "info");
|
|
155
|
+
return { kind: "completed" };
|
|
156
|
+
case "use": {
|
|
157
|
+
const { useSyncSetup } = await loaders.setupSwitch();
|
|
158
|
+
throwIfAborted(options.signal);
|
|
159
|
+
await useSyncSetup(
|
|
160
|
+
ctx,
|
|
161
|
+
options.args[0] ?? "",
|
|
162
|
+
async (selectedSetup) => {
|
|
163
|
+
const operations = await loaders.operations();
|
|
164
|
+
throwIfAborted(options.signal);
|
|
165
|
+
return withLock("pull", () => operations.pull(ctx, { ...options, setup: selectedSetup }));
|
|
166
|
+
},
|
|
167
|
+
void 0,
|
|
168
|
+
options.signal
|
|
169
|
+
);
|
|
170
|
+
return { kind: "completed" };
|
|
171
|
+
}
|
|
172
|
+
case "init":
|
|
173
|
+
await initConfig(ctx, signal);
|
|
174
|
+
return { kind: "completed" };
|
|
175
|
+
case "config":
|
|
176
|
+
await showConfig(ctx, options);
|
|
177
|
+
return { kind: "completed" };
|
|
178
|
+
case "files": {
|
|
179
|
+
const { showFileSelection } = await import("./file-selection-IELTXSGZ.ts");
|
|
180
|
+
throwIfAborted(options.signal);
|
|
181
|
+
await showFileSelection(ctx, options.setup, options.signal);
|
|
182
|
+
return { kind: "completed" };
|
|
183
|
+
}
|
|
184
|
+
case "status": {
|
|
185
|
+
const operations = await loaders.operations();
|
|
186
|
+
throwIfAborted(options.signal);
|
|
187
|
+
await operations.status(ctx, options);
|
|
188
|
+
return { kind: "completed" };
|
|
189
|
+
}
|
|
190
|
+
case "diff": {
|
|
191
|
+
const operations = await loaders.operations();
|
|
192
|
+
throwIfAborted(options.signal);
|
|
193
|
+
await operations.diff(ctx, options);
|
|
194
|
+
return { kind: "completed" };
|
|
195
|
+
}
|
|
196
|
+
case "conflicts": {
|
|
197
|
+
const { showConflicts } = await import("./conflict-review-2QMO2K6Q.ts");
|
|
198
|
+
throwIfAborted(options.signal);
|
|
199
|
+
await withLock("sync", () => showConflicts(ctx, options));
|
|
200
|
+
return { kind: "completed" };
|
|
201
|
+
}
|
|
202
|
+
case "doctor": {
|
|
203
|
+
const operations = await loaders.operations();
|
|
204
|
+
throwIfAborted(options.signal);
|
|
205
|
+
await operations.doctor(ctx, options);
|
|
206
|
+
return { kind: "completed" };
|
|
207
|
+
}
|
|
208
|
+
case "push": {
|
|
209
|
+
const operations = await loaders.operations();
|
|
210
|
+
throwIfAborted(options.signal);
|
|
211
|
+
const outcome = await withLock("push", () => operations.push(ctx, options));
|
|
212
|
+
return { kind: "completed", ...outcome ? { outcome } : {} };
|
|
213
|
+
}
|
|
214
|
+
case "pull": {
|
|
215
|
+
const operations = await loaders.operations();
|
|
216
|
+
throwIfAborted(options.signal);
|
|
217
|
+
const outcome = await withLock("pull", () => operations.pull(ctx, options));
|
|
218
|
+
return { kind: "completed", ...outcome ? { outcome } : {} };
|
|
219
|
+
}
|
|
220
|
+
case "sync": {
|
|
221
|
+
const operations = await loaders.operations();
|
|
222
|
+
throwIfAborted(options.signal);
|
|
223
|
+
const outcome = await withAgentSyncLock(ctx, options, (current) => operations.syncBoth(ctx, current));
|
|
224
|
+
return { kind: "completed", ...retryRefusal && outcome ? { outcome } : {} };
|
|
225
|
+
}
|
|
226
|
+
case "history": {
|
|
227
|
+
const operations = await loaders.operations();
|
|
228
|
+
throwIfAborted(options.signal);
|
|
229
|
+
await operations.history(ctx, options);
|
|
230
|
+
return { kind: "completed" };
|
|
231
|
+
}
|
|
232
|
+
case "rollback": {
|
|
233
|
+
const operations = await loaders.operations();
|
|
234
|
+
throwIfAborted(options.signal);
|
|
235
|
+
await withLock("rollback", () => operations.rollback(ctx, options));
|
|
236
|
+
return { kind: "completed" };
|
|
237
|
+
}
|
|
238
|
+
case "migrate-state":
|
|
239
|
+
await migrateStateDirectory(ctx, options);
|
|
240
|
+
return { kind: "completed" };
|
|
241
|
+
case "unlock":
|
|
242
|
+
await unlock(ctx, options);
|
|
243
|
+
return { kind: "completed" };
|
|
244
|
+
default:
|
|
245
|
+
ctx.ui.notify(`Unknown /sync command: ${subcommand}
|
|
246
|
+
|
|
247
|
+
${usage()}`, "warning");
|
|
248
|
+
return { kind: "failed" };
|
|
249
|
+
}
|
|
250
|
+
} catch (error) {
|
|
251
|
+
if (signal?.aborted) return { kind: "failed" };
|
|
252
|
+
setSyncStatus(ctx, void 0);
|
|
253
|
+
if (error instanceof SetupPullRequiresUiError) throw error;
|
|
254
|
+
if (error instanceof RemoteSelectionMismatchError) {
|
|
255
|
+
return { kind: "remote-selection-required", decision: error.decision };
|
|
256
|
+
}
|
|
257
|
+
if (isSyncDecisionRequiredError(error)) {
|
|
258
|
+
return { kind: "decision-required", decision: error.decision };
|
|
259
|
+
}
|
|
260
|
+
ctx.ui.notify(syncErrorGuidance(error), "error");
|
|
261
|
+
return { kind: "failed" };
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async function migrateStateDirectory(ctx, options) {
|
|
265
|
+
const notice = stateDirectoryMigrationNotice();
|
|
266
|
+
if (!notice) {
|
|
267
|
+
ctx.ui.notify("pi-sync already uses the canonical pi-sync/ state directory.", "info");
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (!options.yes && !await ctx.ui.confirm(
|
|
271
|
+
"Migrate pi-sync state directory",
|
|
272
|
+
"Confirm that every other Pi process is closed. pi-sync will atomically rename .pisync/ to pi-sync/ without merging or deleting either root.",
|
|
273
|
+
{ signal: options.signal }
|
|
274
|
+
)) {
|
|
275
|
+
ctx.ui.notify("pi-sync state migration cancelled.", "info");
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
throwIfAborted(options.signal);
|
|
279
|
+
const result = await migrateLegacyStateDirectory();
|
|
280
|
+
throwIfAborted(options.signal);
|
|
281
|
+
if (result.status === "ready") {
|
|
282
|
+
ctx.ui.notify("pi-sync already uses the canonical pi-sync/ state directory.", "info");
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
ctx.ui.notify(result.message, result.status === "migrated" ? "info" : "warning");
|
|
286
|
+
}
|
|
287
|
+
async function initConfig(ctx, signal) {
|
|
288
|
+
const configPath = localConfigPath();
|
|
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");
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (ctx.mode === "tui") {
|
|
298
|
+
const { showSetupWizard } = await import("./setup-wizard-RR5U3SUB.ts");
|
|
299
|
+
throwIfAborted(signal);
|
|
300
|
+
await showSetupWizard(ctx, signal);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
await createLocalConfigDocument(localConfigTemplate(), signal);
|
|
304
|
+
throwIfAborted(signal);
|
|
305
|
+
ctx.ui.notify(`Created ${configPath}. Add a storage connection and sync setup before syncing.`, "info");
|
|
306
|
+
}
|
|
307
|
+
async function showConfig(ctx, options) {
|
|
308
|
+
const config = await loadConfig(options.setup);
|
|
309
|
+
const warnings = [
|
|
310
|
+
...config.backend.type === "s3" ? sessionTokenWarnings(config.backend.profile) : [],
|
|
311
|
+
...syncSessionsWarnings(config)
|
|
312
|
+
];
|
|
313
|
+
const storageLines = configStorageLines(config);
|
|
314
|
+
ctx.ui.notify(
|
|
315
|
+
[
|
|
316
|
+
"pi-sync config:",
|
|
317
|
+
`sync setup: ${config.setupName}`,
|
|
318
|
+
`storage connection: ${config.connectionName}`,
|
|
319
|
+
...storageLines,
|
|
320
|
+
`storage path: ${config.storagePath}`,
|
|
321
|
+
`automatic sync: ${automaticSyncSummary(config.automatic)}`,
|
|
322
|
+
`settings field merge: ${config.mergeSettings ? "On (experimental)" : "Off"}`,
|
|
323
|
+
`machine-local settings.json fields: ${(config.localFields ?? []).map(safeTerminalText).join(", ") || "none"}`,
|
|
324
|
+
`startup transfer: ${startupTransferSummary(config)}`,
|
|
325
|
+
`agent mode: ${config.agentMode ? "On (experimental)" : "Off"}`,
|
|
326
|
+
`continuous sync: ${config.continuous ? config.agentMode ? "On (experimental)" : "paused; Agent mode is Off" : "Off"}`,
|
|
327
|
+
`included content: ${config.include.join(", ") || "none"}`,
|
|
328
|
+
`sessions: ${config.include.includes("sessions") ? "included" : "not included"}`,
|
|
329
|
+
`settings file: ${localConfigPath()}`,
|
|
330
|
+
...warnings
|
|
331
|
+
].join("\n"),
|
|
332
|
+
warnings.length > 0 ? "warning" : "info"
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
function configStorageLines(config) {
|
|
336
|
+
switch (config.backend.type) {
|
|
337
|
+
case "git":
|
|
338
|
+
return [
|
|
339
|
+
"kind: git",
|
|
340
|
+
`remote: ${displayGitRemote(config.backend.profile.remote)}`,
|
|
341
|
+
"authentication: existing Git/SSH credentials (not stored)",
|
|
342
|
+
`branch: ${config.backend.destination.branch}`
|
|
343
|
+
];
|
|
344
|
+
case "webdav":
|
|
345
|
+
return [
|
|
346
|
+
"kind: webdav",
|
|
347
|
+
`url: ${displayWebDavUrl(config.backend.profile.url, config.backend.profile.username)}`,
|
|
348
|
+
"username: configured (value hidden)",
|
|
349
|
+
"password: configured"
|
|
350
|
+
];
|
|
351
|
+
case "s3":
|
|
352
|
+
return [
|
|
353
|
+
"kind: s3",
|
|
354
|
+
`endpoint: ${config.backend.profile.endpoint}`,
|
|
355
|
+
`bucket: ${config.backend.destination.bucket}`,
|
|
356
|
+
`region: ${config.backend.profile.region}`,
|
|
357
|
+
"access key id: configured",
|
|
358
|
+
"secret access key: configured",
|
|
359
|
+
`session token: ${config.backend.profile.sessionToken ? "configured" : "not configured"}`
|
|
360
|
+
];
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function displayGitRemote(value) {
|
|
364
|
+
if (!value) return "missing";
|
|
365
|
+
try {
|
|
366
|
+
const url = new URL(value);
|
|
367
|
+
url.username = "";
|
|
368
|
+
url.password = "";
|
|
369
|
+
url.search = "";
|
|
370
|
+
url.hash = "";
|
|
371
|
+
return url.toString();
|
|
372
|
+
} catch {
|
|
373
|
+
return value.replace(/^(?:[^@\s]+@)?(?<host>[^:]+):.+$/u, "$<host>:\u2026");
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
function displayWebDavUrl(value, username) {
|
|
377
|
+
if (!value) return "missing";
|
|
378
|
+
try {
|
|
379
|
+
const url = new URL(value);
|
|
380
|
+
url.username = "";
|
|
381
|
+
url.password = "";
|
|
382
|
+
url.search = "";
|
|
383
|
+
url.hash = "";
|
|
384
|
+
return username ? `${url.origin}/\u2026` : `${url.origin}${url.pathname}`;
|
|
385
|
+
} catch {
|
|
386
|
+
return "invalid (value hidden)";
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// src/commands/command-handler.ts
|
|
391
|
+
async function handleCommand(rawArgs, ctx, sessionSignal, loaders, attention, onExplicitSync) {
|
|
392
|
+
await reconcileObservation(attention, sessionSignal);
|
|
393
|
+
if (sessionSignal.aborted) return;
|
|
394
|
+
const run = (route, signal, onCommit, target, onDialog, retryRefusal = false) => {
|
|
395
|
+
const [command, ...args] = splitArgs(route);
|
|
396
|
+
if (command === "sync" && !retryRefusal) {
|
|
397
|
+
try {
|
|
398
|
+
const options = parseOptions(args);
|
|
399
|
+
validateCommandOptions("sync", options);
|
|
400
|
+
onExplicitSync?.(target ?? options.setup);
|
|
401
|
+
} catch {
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return executeCommand(
|
|
405
|
+
route,
|
|
406
|
+
ctx,
|
|
407
|
+
combineSignals(sessionSignal, signal),
|
|
408
|
+
loaders,
|
|
409
|
+
observationCommitCallback(attention, sessionSignal, onCommit),
|
|
410
|
+
target,
|
|
411
|
+
onDialog,
|
|
412
|
+
retryRefusal
|
|
413
|
+
);
|
|
414
|
+
};
|
|
415
|
+
if (!rawArgs.trim()) {
|
|
416
|
+
try {
|
|
417
|
+
const { showSyncManager } = await import("./manager-ui-LM7DSJ2Y.ts");
|
|
418
|
+
if (sessionSignal.aborted) return;
|
|
419
|
+
await showSyncManager(ctx, run, sessionSignal, {
|
|
420
|
+
getAttention: () => attention.current(),
|
|
421
|
+
getObservation: () => attention.observation(),
|
|
422
|
+
onObservationInvalidated: () => attention.clearObservation(),
|
|
423
|
+
onSelectionResolved: (expected) => {
|
|
424
|
+
if (attention.current() === expected) attention.clear(ctx);
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
} catch (error) {
|
|
428
|
+
if (sessionSignal.aborted) return;
|
|
429
|
+
setSyncStatus(ctx, void 0);
|
|
430
|
+
ctx.ui.notify(errorMessage(error), "error");
|
|
431
|
+
}
|
|
432
|
+
await reconcileObservation(attention, sessionSignal);
|
|
433
|
+
if (!sessionSignal.aborted) await attention.publish(ctx, sessionSignal);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
const result = await run(rawArgs);
|
|
437
|
+
if (result.kind === "decision-required") {
|
|
438
|
+
ctx.ui.notify(result.decision.directMessage, "error");
|
|
439
|
+
} else if (result.kind === "remote-selection-required") {
|
|
440
|
+
const origin = directSelectionOrigin(rawArgs);
|
|
441
|
+
if (origin) attention.set(result.decision, origin);
|
|
442
|
+
const deterministic = splitArgs(rawArgs).some((arg) => arg === "--yes" || arg === "-y");
|
|
443
|
+
if (origin && ctx.mode === "tui" && !deterministic) {
|
|
444
|
+
await resolveSelectionAttention(ctx, attention, sessionSignal, loaders);
|
|
445
|
+
} else {
|
|
446
|
+
ctx.ui.notify(
|
|
447
|
+
formatRemoteSelectionMismatch(
|
|
448
|
+
result.decision.setupName,
|
|
449
|
+
result.decision.localInclude,
|
|
450
|
+
result.decision.remoteInclude
|
|
451
|
+
),
|
|
452
|
+
"error"
|
|
453
|
+
);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
await clearAttentionAfterCompletedOperation(rawArgs, result, ctx, attention, sessionSignal);
|
|
457
|
+
await reconcileSelectionAttention(ctx, attention, sessionSignal);
|
|
458
|
+
await reconcileObservation(attention, sessionSignal);
|
|
459
|
+
if (!sessionSignal.aborted) await attention.publish(ctx, sessionSignal);
|
|
460
|
+
}
|
|
461
|
+
function observationCommitCallback(attention, sessionSignal, onCommit) {
|
|
462
|
+
const observed = attention.observation();
|
|
463
|
+
return () => {
|
|
464
|
+
if (!sessionSignal.aborted && attention.observation() === observed) attention.clearObservation();
|
|
465
|
+
onCommit?.();
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
async function reconcileObservation(attention, signal) {
|
|
469
|
+
const observed = attention.observation();
|
|
470
|
+
if (!observed || signal.aborted) return;
|
|
471
|
+
try {
|
|
472
|
+
const config = await loadConfig();
|
|
473
|
+
if (signal.aborted || attention.observation() !== observed) return;
|
|
474
|
+
if (!observationMatchesConfig(observed, config)) {
|
|
475
|
+
attention.clearObservation();
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
const state = await readStateForConfig(config);
|
|
479
|
+
if (signal.aborted || attention.observation() !== observed) return;
|
|
480
|
+
if (syncStateFingerprint(state) !== observed.inspection.stateIdentity) attention.clearObservation();
|
|
481
|
+
} catch {
|
|
482
|
+
if (!signal.aborted && attention.observation() === observed) attention.clearObservation();
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
async function clearAttentionAfterCompletedOperation(rawArgs, result, ctx, attention, signal) {
|
|
486
|
+
if (result.kind !== "completed" || result.outcome === "cancelled" || signal.aborted) return;
|
|
487
|
+
const [command, ...rest] = splitArgs(rawArgs);
|
|
488
|
+
if (command !== "sync" && command !== "pull" && command !== "push") return;
|
|
489
|
+
const current = attention.current();
|
|
490
|
+
if (!current) return;
|
|
491
|
+
try {
|
|
492
|
+
const options = parseOptions(rest);
|
|
493
|
+
const setupName = options.setup ?? (await loadConfig()).setupName;
|
|
494
|
+
if (signal.aborted || attention.current() !== current) return;
|
|
495
|
+
if (current.decision.setupName === setupName) attention.clear(ctx);
|
|
496
|
+
} catch {
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
async function reconcileSelectionAttention(ctx, attention, signal) {
|
|
500
|
+
const current = attention.current();
|
|
501
|
+
if (!current || signal.aborted) return;
|
|
502
|
+
try {
|
|
503
|
+
const config = await loadConfig(current.decision.setupName);
|
|
504
|
+
if (signal.aborted || attention.current() !== current) return;
|
|
505
|
+
if (!syncAttentionMatchesConfig(current, config)) attention.clear(ctx);
|
|
506
|
+
} catch {
|
|
507
|
+
if (!signal.aborted && attention.current() === current) attention.clear(ctx);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
function directSelectionOrigin(rawArgs) {
|
|
511
|
+
const command = splitArgs(rawArgs)[0];
|
|
512
|
+
return command === "sync" || command === "pull" || command === "push" ? command : void 0;
|
|
513
|
+
}
|
|
514
|
+
async function resolveSelectionAttention(ctx, attention, signal, loaders, options = {}) {
|
|
515
|
+
const current = attention.current();
|
|
516
|
+
if (!current || signal.aborted) return;
|
|
517
|
+
const { dispatchManagerResult } = await import("./manager-result-dispatcher-6W52NM7F.ts");
|
|
518
|
+
if (signal.aborted || attention.current() !== current) return;
|
|
519
|
+
await dispatchManagerResult(
|
|
520
|
+
ctx,
|
|
521
|
+
{ kind: "remote-selection-required", decision: current.decision },
|
|
522
|
+
current.origin,
|
|
523
|
+
(route, actionSignal, onCommit, target) => {
|
|
524
|
+
const execute = () => executeRecoveryCommand(
|
|
525
|
+
route,
|
|
526
|
+
ctx,
|
|
527
|
+
combineSignals(signal, actionSignal),
|
|
528
|
+
loaders,
|
|
529
|
+
observationCommitCallback(attention, signal, onCommit),
|
|
530
|
+
target
|
|
531
|
+
);
|
|
532
|
+
return options.withStateAccess ? options.withStateAccess(execute) : execute();
|
|
533
|
+
},
|
|
534
|
+
signal,
|
|
535
|
+
{
|
|
536
|
+
cancelLabel: options.cancelLabel,
|
|
537
|
+
withStateAccess: options.withStateAccess,
|
|
538
|
+
onSelectionResolved: () => {
|
|
539
|
+
if (attention.current() === current) attention.clear(ctx);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
export {
|
|
545
|
+
handleCommand,
|
|
546
|
+
resolveSelectionAttention
|
|
547
|
+
};
|
|
548
|
+
//# sourceMappingURL=command-handler-F2E7A5T5.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 (experimental)\" : \"Off\"}`,\n `machine-local settings.json fields: ${(config.localFields ?? []).map(safeTerminalText).join(\", \") || \"none\"}`,\n `startup transfer: ${startupTransferSummary(config)}`,\n `agent mode: ${config.agentMode ? \"On (experimental)\" : \"Off\"}`,\n `continuous sync: ${config.continuous ? (config.agentMode ? \"On (experimental)\" : \"paused; Agent mode 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,14 +14,14 @@ import {
|
|
|
13
14
|
syncSessionsWarnings,
|
|
14
15
|
syncSetupReviewIdentity,
|
|
15
16
|
syncSetupStorageReview
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-QOFMXPM5.ts";
|
|
19
|
-
import "./chunk-ZW5ZLGBI.ts";
|
|
17
|
+
} from "./chunk-OVBAW7KV.ts";
|
|
18
|
+
import "./chunk-X7R6DCVF.ts";
|
|
20
19
|
import "./chunk-2JZFHNLM.ts";
|
|
21
20
|
import "./chunk-T2SJD3N7.ts";
|
|
22
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-KYTT7KV4.ts";
|
|
22
|
+
import "./chunk-FHE2DCA2.ts";
|
|
23
23
|
export {
|
|
24
|
+
configFromSettings,
|
|
24
25
|
isEnabled,
|
|
25
26
|
isExplicitlyEnabled,
|
|
26
27
|
loadConfig,
|
|
@@ -34,4 +35,4 @@ export {
|
|
|
34
35
|
syncSetupReviewIdentity,
|
|
35
36
|
syncSetupStorageReview
|
|
36
37
|
};
|
|
37
|
-
//# sourceMappingURL=config-
|
|
38
|
+
//# sourceMappingURL=config-HYG7G5EM.ts.map
|