@narumitw/pi-sync 0.50.0 → 0.50.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +5 -4
  2. package/dist/chunks/attention-widget-Z7G3SYYJ.ts +9 -0
  3. package/dist/chunks/attention-widget-Z7G3SYYJ.ts.map +7 -0
  4. package/dist/chunks/{chunk-YKJHPTGO.ts → chunk-4CHTZMEO.ts} +2 -2
  5. package/dist/chunks/{chunk-6UHKGALE.ts → chunk-5B3FXBLE.ts} +51 -17
  6. package/dist/chunks/chunk-5B3FXBLE.ts.map +7 -0
  7. package/dist/chunks/{chunk-JSYMGJQQ.ts → chunk-CCSN3F47.ts} +4 -4
  8. package/dist/chunks/{chunk-GWMHAQG4.ts → chunk-ETTRJDNP.ts} +2 -2
  9. package/dist/chunks/{chunk-X5OM6GXT.ts → chunk-G4RNQQZS.ts} +2 -2
  10. package/dist/chunks/{chunk-AXXS2BPA.ts → chunk-IJ6FJFA5.ts} +2 -2
  11. package/dist/chunks/{chunk-OUHGBFYF.ts → chunk-KW7YQEZN.ts} +4 -4
  12. package/dist/chunks/{chunk-XBX4HBLG.ts → chunk-SZWBGPID.ts} +5 -5
  13. package/dist/chunks/{chunk-L7TBO32M.ts → chunk-T2B5IU74.ts} +3 -3
  14. package/dist/chunks/{git-backend-OQW46G2X.ts → git-backend-GMVS4PD4.ts} +8 -8
  15. package/dist/chunks/{manager-result-dispatcher-U23ODD32.ts → manager-result-dispatcher-FKIBM3GO.ts} +4 -4
  16. package/dist/chunks/{manager-ui-ABATHC36.ts → manager-ui-5KLKVMRC.ts} +18 -18
  17. package/dist/chunks/{remote-selection-ui-ZE3TY67S.ts → remote-selection-ui-D7RBRJNL.ts} +3 -3
  18. package/dist/chunks/{s3-backend-3P33LQHU.ts → s3-backend-66O4FGBH.ts} +6 -6
  19. package/dist/chunks/{setup-wizard-VB3VDOV5.ts → setup-wizard-IUB6ESEU.ts} +3 -3
  20. package/dist/chunks/{sync-inspection-FEP4L5TR.ts → sync-inspection-CST2KL65.ts} +5 -5
  21. package/dist/chunks/{sync-operations-ONJ27QRL.ts → sync-operations-LBX3GKCM.ts} +23 -23
  22. package/dist/index.ts +20 -20
  23. package/dist/index.ts.map +2 -2
  24. package/package.json +1 -1
  25. package/src/commands/command-handler.ts +2 -2
  26. package/src/sync/startup-check.ts +1 -1
  27. package/src/ui/attention-widget.ts +1 -0
  28. package/src/ui/sync-attention.ts +65 -23
  29. package/dist/chunks/chunk-6UHKGALE.ts.map +0 -7
  30. /package/dist/chunks/{chunk-YKJHPTGO.ts.map → chunk-4CHTZMEO.ts.map} +0 -0
  31. /package/dist/chunks/{chunk-JSYMGJQQ.ts.map → chunk-CCSN3F47.ts.map} +0 -0
  32. /package/dist/chunks/{chunk-GWMHAQG4.ts.map → chunk-ETTRJDNP.ts.map} +0 -0
  33. /package/dist/chunks/{chunk-X5OM6GXT.ts.map → chunk-G4RNQQZS.ts.map} +0 -0
  34. /package/dist/chunks/{chunk-AXXS2BPA.ts.map → chunk-IJ6FJFA5.ts.map} +0 -0
  35. /package/dist/chunks/{chunk-OUHGBFYF.ts.map → chunk-KW7YQEZN.ts.map} +0 -0
  36. /package/dist/chunks/{chunk-XBX4HBLG.ts.map → chunk-SZWBGPID.ts.map} +0 -0
  37. /package/dist/chunks/{chunk-L7TBO32M.ts.map → chunk-T2B5IU74.ts.map} +0 -0
  38. /package/dist/chunks/{git-backend-OQW46G2X.ts.map → git-backend-GMVS4PD4.ts.map} +0 -0
  39. /package/dist/chunks/{manager-result-dispatcher-U23ODD32.ts.map → manager-result-dispatcher-FKIBM3GO.ts.map} +0 -0
  40. /package/dist/chunks/{manager-ui-ABATHC36.ts.map → manager-ui-5KLKVMRC.ts.map} +0 -0
  41. /package/dist/chunks/{remote-selection-ui-ZE3TY67S.ts.map → remote-selection-ui-D7RBRJNL.ts.map} +0 -0
  42. /package/dist/chunks/{s3-backend-3P33LQHU.ts.map → s3-backend-66O4FGBH.ts.map} +0 -0
  43. /package/dist/chunks/{setup-wizard-VB3VDOV5.ts.map → setup-wizard-IUB6ESEU.ts.map} +0 -0
  44. /package/dist/chunks/{sync-inspection-FEP4L5TR.ts.map → sync-inspection-CST2KL65.ts.map} +0 -0
  45. /package/dist/chunks/{sync-operations-ONJ27QRL.ts.map → sync-operations-LBX3GKCM.ts.map} +0 -0
package/README.md CHANGED
@@ -131,14 +131,15 @@ Then choose one reviewed direction:
131
131
  Cancelling a preparation or confirmation returns to conflict resolution with no side effects.
132
132
  Back returns to the sync manager, and Ctrl+C closes the complete flow.
133
133
 
134
- Startup checks never open a dialog. Detected changes leave a compact hint above the editor; open `/sync` when ready. An included-content mismatch puts **Review synced content (recommended)** in the manager, where a fresh review verifies the remote snapshot before offering changes.
134
+ Startup checks never open a dialog. With a sync baseline and no content-list mismatch, ordinary one-sided changes appear only as **local changes pending** or **remote changes pending** in status. A persistent widget above the editor is reserved for both sides changing, first sync with an existing remote snapshot, a differing content list (including order-only differences), or a missing remote snapshot despite an existing baseline. Both sides changing is a reason to review, not a confirmed file conflict.
135
+ No selected content and first sync with an empty remote stay quiet outside `/sync`, which provides setup or initialization guidance. Legacy remote metadata without an authoritative content list does not independently trigger a widget; the baseline and change conditions still apply. An included-content mismatch puts **Review synced content (recommended)** in the manager, where a fresh review verifies the remote snapshot before offering changes.
135
136
  Check results are advisory observations against the last sync baseline, not proof of a file conflict or current equality. Opening the manager uses local information and shows when the check completed; it does not contact remote storage. Transfer actions recheck current content.
136
- Attention stays in memory and is invalidated by relevant settings/state changes or a foreground transfer's commit boundary, and cleared on session replacement or shutdown. Cancelling a review or a failure before commit preserves a still-valid hint.
137
+ The widget has no expiry timer. Attention stays in memory and is invalidated by relevant settings/state changes or a foreground transfer's commit boundary, and cleared on session replacement or shutdown. A newer observation replaces the presentation, clearing the widget when only status or no reminder is needed. Cancelling a review or a failure before commit preserves a still-valid observation and its appropriate presentation.
137
138
 
138
139
  Interactive TUI `/sync sync`, `/sync pull`, and `/sync push` routes without `--yes` open the same review flow when they detect the mismatch.
139
140
  Explicit `--yes` routes remain non-interactive and report exact remote-only, device-only, or order-only guidance while leaving visible attention for later review.
140
141
  Shutdown automatic sync never opens a dialog because Pi is exiting.
141
- RPC startup check results use nonblocking notifications; included-content review remains read-only.
142
+ RPC startup checks use status for one-sided changes and nonblocking warning notifications for review conditions; included-content review remains read-only.
142
143
  Print and JSON modes do not support `/sync` because UI output is not observable there.
143
144
 
144
145
  ## ⚙️ Settings
@@ -149,7 +150,7 @@ Missing settings stay unconfigured without creating files or locks.
149
150
 
150
151
  ### Background startup checks
151
152
 
152
- With **Automatic sync** enabled, session startup schedules a background check instead of waiting for a transfer. Pi remains usable while Git, WebDAV, R2, or S3 checks local hashes and remote metadata. Unchanged results are quiet; changes or failures provide `/sync` guidance without opening a dialog. Use **Sync now** to start a reviewed transfer, or `/sync status` to retry a check. Foreground `/sync` cancels and drains the background check before starting.
153
+ With **Automatic sync** enabled, session startup schedules a background check instead of waiting for a transfer. Pi remains usable while Git, WebDAV, R2, or S3 checks local hashes and remote metadata. Results follow the [status and review classifications](#resolve-conflicts-in-the-manager); check failures provide `/sync` guidance without opening a dialog. Use **Sync now** to start a reviewed transfer, or `/sync status` to retry a check. Foreground `/sync` cancels and drains the background check before starting.
153
154
 
154
155
  Checks run once per session start, including `/reload`, new, resumed, and forked sessions, in TUI and RPC only. Print/JSON skip startup checks. There is no polling or automatic check retry loop. The overall deadline is 30 seconds, followed by underlying cleanup where needed; Git process termination and temporary-ref cleanup can take additional time. Git checks can still fetch objects and update the extension's private bare cache, but never push, apply managed files, update the sync baseline, or reload Pi.
155
156
 
@@ -0,0 +1,9 @@
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
+
4
+ // src/ui/attention-widget.ts
5
+ import { EditorStatusWidget } from "@narumitw/pi-tui-kit";
6
+ export {
7
+ EditorStatusWidget
8
+ };
9
+ //# sourceMappingURL=attention-widget-Z7G3SYYJ.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/attention-widget.ts"],
4
+ "sourcesContent": ["export { EditorStatusWidget } from \"@narumitw/pi-tui-kit\";\n"],
5
+ "mappings": ";;;;AAAA,SAAS,0BAA0B;",
6
+ "names": []
7
+ }
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-HUDQATCL.ts";
6
6
  import {
7
7
  createSyncBackend
8
- } from "./chunk-L7TBO32M.ts";
8
+ } from "./chunk-T2B5IU74.ts";
9
9
  import {
10
10
  safeTerminalText
11
11
  } from "./chunk-LTBWGSBV.ts";
@@ -620,4 +620,4 @@ export {
620
620
  runCancellableOperation,
621
621
  showRemoteSelectionReview
622
622
  };
623
- //# sourceMappingURL=chunk-YKJHPTGO.ts.map
623
+ //# sourceMappingURL=chunk-4CHTZMEO.ts.map
@@ -22,22 +22,26 @@ function syncAttentionMatchesConfig(attention, config) {
22
22
  function createSyncAttentionController() {
23
23
  let state;
24
24
  let observation;
25
+ let generation = 0;
25
26
  return {
26
27
  observe(value) {
28
+ generation++;
27
29
  observation = value;
28
30
  },
29
31
  observation() {
30
32
  return observation;
31
33
  },
32
34
  clearObservation() {
35
+ generation++;
33
36
  observation = void 0;
34
37
  },
35
38
  notifyObservation(ctx) {
36
- if (observation && observationNeedsAttention(observation)) {
39
+ if (ctx.hasUI && observation && observationNeedsAttention(observation)) {
37
40
  ctx.ui.notify(observationLines(observation).join("\n"), "warning");
38
41
  }
39
42
  },
40
43
  set(decision, origin) {
44
+ generation++;
41
45
  state = { decision, origin, offered: false };
42
46
  },
43
47
  current() {
@@ -49,35 +53,56 @@ function createSyncAttentionController() {
49
53
  return true;
50
54
  },
51
55
  clear(ctx) {
56
+ generation++;
52
57
  state = void 0;
53
58
  clearAttentionPresentation(ctx);
54
59
  },
55
60
  reset(ctx) {
61
+ generation++;
56
62
  state = void 0;
57
63
  observation = void 0;
58
64
  clearAttentionPresentation(ctx);
59
65
  },
60
- publish(ctx) {
61
- if (!state && (!observation || !observationNeedsAttention(observation))) {
66
+ async publish(ctx, signal) {
67
+ const currentGeneration = ++generation;
68
+ if (signal?.aborted || !ctx.hasUI) return;
69
+ const classification = observation ? classifyObservation(observation) : "none";
70
+ if (!state && (classification === "none" || classification === "guidance")) {
62
71
  clearAttentionPresentation(ctx);
63
72
  return;
64
73
  }
74
+ if (!state && classification === "status") {
75
+ ctx.ui.setWidget(WIDGET_KEY, void 0);
76
+ ctx.ui.setStatus(
77
+ STATUS_KEY,
78
+ observation?.inspection.remoteChanged ? "remote changes pending" : "local changes pending"
79
+ );
80
+ return;
81
+ }
65
82
  const presentation = state ? attentionPresentation(state.decision) : {
66
83
  status: "changes to review",
67
84
  lines: observationLines(observation)
68
85
  };
86
+ if (ctx.mode !== "tui") {
87
+ ctx.ui.setWidget(WIDGET_KEY, void 0);
88
+ ctx.ui.setStatus(STATUS_KEY, presentation.status);
89
+ return;
90
+ }
91
+ const { EditorStatusWidget } = await import("./attention-widget-Z7G3SYYJ.ts").catch((error) => {
92
+ if (generation === currentGeneration && !signal?.aborted) clearAttentionPresentation(ctx);
93
+ throw error;
94
+ });
95
+ if (generation !== currentGeneration || signal?.aborted) return;
69
96
  ctx.ui.setStatus(STATUS_KEY, presentation.status);
70
- if (ctx.mode !== "tui") return;
71
- ctx.ui.setWidget(WIDGET_KEY, (_tui, theme) => ({
72
- render(width) {
73
- const safeWidth = Math.max(1, width);
74
- return presentation.lines.map(
75
- (line, index) => truncateToWidth(theme.fg(index === 0 ? "warning" : "muted", line), safeWidth, "\u2026")
76
- );
77
- },
78
- invalidate() {
79
- }
80
- }));
97
+ ctx.ui.setWidget(
98
+ WIDGET_KEY,
99
+ (_tui, theme) => new EditorStatusWidget({
100
+ theme,
101
+ renderBody: (width) => presentation.lines.map(
102
+ (line, index) => width === 0 ? "" : truncateToWidth(theme.fg(index === 0 ? "warning" : "muted", line), width, "\u2026")
103
+ )
104
+ })
105
+ );
81
106
  }
82
107
  };
83
108
  }
@@ -109,9 +134,17 @@ function observationSummary(observation) {
109
134
  return "Legacy remote has no authoritative content list";
110
135
  return "No changes detected since last sync";
111
136
  }
112
- function observationNeedsAttention(observation) {
137
+ function classifyObservation(observation) {
113
138
  const result = observation.inspection;
114
- return result.emptyInclude || result.firstSync || !result.head || result.localChanged || result.remoteChanged || result.selectionState?.kind !== "same";
139
+ if (result.emptyInclude) return "guidance";
140
+ if (result.selectionState?.kind === "different") return "review";
141
+ if (result.firstSync) return result.head ? "review" : "guidance";
142
+ if (!result.head || result.localChanged && result.remoteChanged) return "review";
143
+ if (result.localChanged || result.remoteChanged) return "status";
144
+ return "none";
145
+ }
146
+ function observationNeedsAttention(observation) {
147
+ return classifyObservation(observation) === "review";
115
148
  }
116
149
  function observationLines(observation) {
117
150
  return [
@@ -121,6 +154,7 @@ function observationLines(observation) {
121
154
  ];
122
155
  }
123
156
  function clearAttentionPresentation(ctx) {
157
+ if (!ctx.hasUI) return;
124
158
  ctx.ui.setStatus(STATUS_KEY, void 0);
125
159
  ctx.ui.setWidget(WIDGET_KEY, void 0);
126
160
  }
@@ -131,4 +165,4 @@ export {
131
165
  observationMatchesConfig,
132
166
  observationSummary
133
167
  };
134
- //# sourceMappingURL=chunk-6UHKGALE.ts.map
168
+ //# sourceMappingURL=chunk-5B3FXBLE.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/sync-attention.ts"],
4
+ "sourcesContent": ["import type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { truncateToWidth } from \"@earendil-works/pi-tui\";\nimport { syncCheckConfigFingerprint, syncConfigReviewFingerprint } from \"../settings/config.js\";\nimport type { AnySyncConfig } from \"../settings/settings-types.js\";\nimport type { StartupObservation } from \"../sync/sync-inspection.js\";\nimport {\n\tcompareSyncInclude,\n\ttype RemoteSelectionDecision,\n\tsameSyncInclude,\n} from \"../sync/sync-policy.js\";\nimport { safeTerminalText } from \"./terminal-text.js\";\n\nconst STATUS_KEY = \"sync\";\nconst WIDGET_KEY = \"sync:attention\";\n\nexport type SyncAttentionOrigin = \"sync\" | \"pull\" | \"push\";\n\nexport interface SyncAttentionState {\n\tdecision: RemoteSelectionDecision;\n\torigin: SyncAttentionOrigin;\n\toffered: boolean;\n}\n\nexport function syncAttentionMatchesConfig(attention: SyncAttentionState, config: AnySyncConfig) {\n\treturn (\n\t\tattention.decision.setupName === config.setupName &&\n\t\tattention.decision.configIdentity === syncConfigReviewFingerprint(config) &&\n\t\tsameSyncInclude(attention.decision.localInclude, config.include)\n\t);\n}\n\nexport interface SyncAttentionController {\n\tobserve(observation: StartupObservation): void;\n\tobservation(): StartupObservation | undefined;\n\tclearObservation(): void;\n\tnotifyObservation(ctx: ExtensionContext): void;\n\tset(decision: RemoteSelectionDecision, origin: SyncAttentionOrigin): void;\n\tcurrent(): SyncAttentionState | undefined;\n\tmarkOffered(): boolean;\n\tclear(ctx: ExtensionContext): void;\n\treset(ctx: ExtensionContext): void;\n\tpublish(ctx: ExtensionContext, signal?: AbortSignal): Promise<void>;\n}\n\nexport function createSyncAttentionController(): SyncAttentionController {\n\tlet state: SyncAttentionState | undefined;\n\tlet observation: StartupObservation | undefined;\n\tlet generation = 0;\n\n\treturn {\n\t\tobserve(value) {\n\t\t\tgeneration++;\n\t\t\tobservation = value;\n\t\t},\n\t\tobservation() {\n\t\t\treturn observation;\n\t\t},\n\t\tclearObservation() {\n\t\t\tgeneration++;\n\t\t\tobservation = undefined;\n\t\t},\n\t\tnotifyObservation(ctx) {\n\t\t\tif (ctx.hasUI && observation && observationNeedsAttention(observation)) {\n\t\t\t\tctx.ui.notify(observationLines(observation).join(\"\\n\"), \"warning\");\n\t\t\t}\n\t\t},\n\t\tset(decision, origin) {\n\t\t\tgeneration++;\n\t\t\tstate = { decision, origin, offered: false };\n\t\t},\n\t\tcurrent() {\n\t\t\treturn state;\n\t\t},\n\t\tmarkOffered() {\n\t\t\tif (!state || state.offered) return false;\n\t\t\tstate = { ...state, offered: true };\n\t\t\treturn true;\n\t\t},\n\t\tclear(ctx) {\n\t\t\tgeneration++;\n\t\t\tstate = undefined;\n\t\t\tclearAttentionPresentation(ctx);\n\t\t},\n\t\treset(ctx) {\n\t\t\tgeneration++;\n\t\t\tstate = undefined;\n\t\t\tobservation = undefined;\n\t\t\tclearAttentionPresentation(ctx);\n\t\t},\n\t\tasync publish(ctx, signal) {\n\t\t\tconst currentGeneration = ++generation;\n\t\t\tif (signal?.aborted || !ctx.hasUI) return;\n\t\t\tconst classification = observation ? classifyObservation(observation) : \"none\";\n\t\t\tif (!state && (classification === \"none\" || classification === \"guidance\")) {\n\t\t\t\tclearAttentionPresentation(ctx);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!state && classification === \"status\") {\n\t\t\t\tctx.ui.setWidget(WIDGET_KEY, undefined);\n\t\t\t\tctx.ui.setStatus(\n\t\t\t\t\tSTATUS_KEY,\n\t\t\t\t\tobservation?.inspection.remoteChanged\n\t\t\t\t\t\t? \"remote changes pending\"\n\t\t\t\t\t\t: \"local changes pending\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst presentation = state\n\t\t\t\t? attentionPresentation(state.decision)\n\t\t\t\t: {\n\t\t\t\t\t\tstatus: \"changes to review\",\n\t\t\t\t\t\tlines: observationLines(observation as StartupObservation),\n\t\t\t\t\t};\n\t\t\tif (ctx.mode !== \"tui\") {\n\t\t\t\tctx.ui.setWidget(WIDGET_KEY, undefined);\n\t\t\t\tctx.ui.setStatus(STATUS_KEY, presentation.status);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep Kit outside the eager startup graph; module loading owns no cancellable resources.\n\t\t\tconst { EditorStatusWidget } = await import(\"./attention-widget.js\").catch((error) => {\n\t\t\t\tif (generation === currentGeneration && !signal?.aborted) clearAttentionPresentation(ctx);\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t\tif (generation !== currentGeneration || signal?.aborted) return;\n\t\t\tctx.ui.setStatus(STATUS_KEY, presentation.status);\n\t\t\tctx.ui.setWidget(\n\t\t\t\tWIDGET_KEY,\n\t\t\t\t(_tui, theme) =>\n\t\t\t\t\tnew EditorStatusWidget({\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\trenderBody: (width) =>\n\t\t\t\t\t\t\tpresentation.lines.map((line, index) =>\n\t\t\t\t\t\t\t\twidth === 0\n\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t: truncateToWidth(theme.fg(index === 0 ? \"warning\" : \"muted\", line), width, \"\u2026\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t};\n}\n\nfunction attentionPresentation(decision: RemoteSelectionDecision) {\n\tconst setupName = safeTerminalText(decision.setupName);\n\tconst comparison = compareSyncInclude(decision.localInclude, decision.remoteInclude);\n\tconst difference =\n\t\tcomparison.remoteOnly.length === 0 && comparison.localOnly.length === 0\n\t\t\t? \"Only list order differs\"\n\t\t\t: `Remote ${comparison.remoteOnly.length} \u00B7 Device ${comparison.localOnly.length}`;\n\treturn {\n\t\tstatus: \"review needed\",\n\t\tlines: [`Pi Sync needs review \u00B7 ${setupName}`, difference, \"No changes \u00B7 Run /sync to review\"],\n\t};\n}\n\nexport function observationMatchesConfig(observation: StartupObservation, config: AnySyncConfig) {\n\treturn observation.configIdentity === syncCheckConfigFingerprint(config);\n}\n\nexport function observationSummary(observation: StartupObservation) {\n\tconst result = observation.inspection;\n\tif (result.emptyInclude) return \"No included content selected\";\n\tif (result.selectionState?.kind === \"different\")\n\t\treturn \"Synced-content list differs; review needed\";\n\tif (result.firstSync)\n\t\treturn result.head\n\t\t\t? \"No sync baseline; review remote and local content\"\n\t\t\t: \"Remote empty; no sync baseline\";\n\tif (!result.head) return \"Remote snapshot missing; review needed\";\n\tif (result.localChanged && result.remoteChanged)\n\t\treturn \"Local and remote changed since last sync; review needed\";\n\tif (result.remoteChanged) return \"Remote changed since last sync\";\n\tif (result.localChanged) return \"Local content changed since last sync\";\n\tif (result.selectionState?.kind === \"legacy\")\n\t\treturn \"Legacy remote has no authoritative content list\";\n\treturn \"No changes detected since last sync\";\n}\n\nexport type ObservationClassification = \"none\" | \"guidance\" | \"status\" | \"review\";\n\n/** Presentation only: never discard an observation or authorize a transfer here. */\nexport function classifyObservation(observation: StartupObservation): ObservationClassification {\n\tconst result = observation.inspection;\n\t// Sync now exits before reading remote content when nothing is selected.\n\tif (result.emptyInclude) return \"guidance\";\n\t// Ordering is part of the existing transfer policy, not merely display order.\n\tif (result.selectionState?.kind === \"different\") return \"review\";\n\tif (result.firstSync) return result.head ? \"review\" : \"guidance\";\n\tif (!result.head || (result.localChanged && result.remoteChanged)) return \"review\";\n\tif (result.localChanged || result.remoteChanged) return \"status\";\n\t// Legacy metadata alone requires no scope confirmation in transfer operations.\n\treturn \"none\";\n}\n\nexport function observationNeedsAttention(observation: StartupObservation) {\n\treturn classifyObservation(observation) === \"review\";\n}\n\nfunction observationLines(observation: StartupObservation) {\n\treturn [\n\t\t`Pi Sync check \u00B7 ${safeTerminalText(observation.setupName)}`,\n\t\tobservationSummary(observation),\n\t\t\"No startup transfer \u00B7 Run /sync to review\",\n\t];\n}\n\nfunction clearAttentionPresentation(ctx: ExtensionContext) {\n\tif (!ctx.hasUI) return;\n\tctx.ui.setStatus(STATUS_KEY, undefined);\n\tctx.ui.setWidget(WIDGET_KEY, undefined);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,11 +1,11 @@
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
- import {
4
- stateDir
5
- } from "./chunk-ZI5MXMEX.ts";
6
3
  import {
7
4
  backendIdentityCoordinates
8
5
  } from "./chunk-6LP3MCR2.ts";
6
+ import {
7
+ stateDir
8
+ } from "./chunk-ZI5MXMEX.ts";
9
9
  import {
10
10
  readJsonIfExists,
11
11
  writeJson
@@ -48,4 +48,4 @@ export {
48
48
  lockPath,
49
49
  ensureStateDir
50
50
  };
51
- //# sourceMappingURL=chunk-JSYMGJQQ.ts.map
51
+ //# sourceMappingURL=chunk-CCSN3F47.ts.map
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  ensureStateDir,
5
5
  lockPath
6
- } from "./chunk-JSYMGJQQ.ts";
6
+ } from "./chunk-CCSN3F47.ts";
7
7
  import {
8
8
  LOCKFILE_FS_ADAPTER,
9
9
  LOCK_GUARD_STALE_MS,
@@ -256,4 +256,4 @@ export {
256
256
  isStaleLock,
257
257
  unlock
258
258
  };
259
- //# sourceMappingURL=chunk-GWMHAQG4.ts.map
259
+ //# sourceMappingURL=chunk-ETTRJDNP.ts.map
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  runCancellableOperation,
5
5
  showRemoteSelectionReview
6
- } from "./chunk-YKJHPTGO.ts";
6
+ } from "./chunk-4CHTZMEO.ts";
7
7
  import {
8
8
  safeTerminalText
9
9
  } from "./chunk-LTBWGSBV.ts";
@@ -212,4 +212,4 @@ async function dispatchManagerResult(ctx, initialResult, origin, runRoute, signa
212
212
  export {
213
213
  dispatchManagerResult
214
214
  };
215
- //# sourceMappingURL=chunk-X5OM6GXT.ts.map
215
+ //# sourceMappingURL=chunk-G4RNQQZS.ts.map
@@ -2,7 +2,7 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  withLock
5
- } from "./chunk-GWMHAQG4.ts";
5
+ } from "./chunk-ETTRJDNP.ts";
6
6
  import {
7
7
  stateDir
8
8
  } from "./chunk-ZI5MXMEX.ts";
@@ -200,4 +200,4 @@ export {
200
200
  recoverSnapshotTransactionsOnStartup,
201
201
  recoverPendingSnapshotTransactions
202
202
  };
203
- //# sourceMappingURL=chunk-AXXS2BPA.ts.map
203
+ //# sourceMappingURL=chunk-IJ6FJFA5.ts.map
@@ -6,9 +6,6 @@ import {
6
6
  import {
7
7
  setSyncSetupCompletions
8
8
  } from "./chunk-CHH26D4F.ts";
9
- import {
10
- syncErrorGuidance
11
- } from "./chunk-CPEHGXJV.ts";
12
9
  import {
13
10
  safeTerminalText
14
11
  } from "./chunk-LTBWGSBV.ts";
@@ -40,6 +37,9 @@ import {
40
37
  normalizeGitDirectory,
41
38
  normalizeGitRemote
42
39
  } from "./chunk-TEN2ZBJV.ts";
40
+ import {
41
+ syncErrorGuidance
42
+ } from "./chunk-CPEHGXJV.ts";
43
43
  import {
44
44
  errorMessage
45
45
  } from "./chunk-2B2ELUF5.ts";
@@ -1252,4 +1252,4 @@ export {
1252
1252
  showAddWebDavStorageProfile,
1253
1253
  showEditWebDavStorageProfile
1254
1254
  };
1255
- //# sourceMappingURL=chunk-OUHGBFYF.ts.map
1255
+ //# sourceMappingURL=chunk-KW7YQEZN.ts.map
@@ -1,5 +1,8 @@
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
+ import {
4
+ createSyncBackend
5
+ } from "./chunk-T2B5IU74.ts";
3
6
  import {
4
7
  hasLocalChanges,
5
8
  remoteChangedSinceState
@@ -10,10 +13,7 @@ import {
10
13
  import {
11
14
  readStateForConfig,
12
15
  syncStateFingerprint
13
- } from "./chunk-JSYMGJQQ.ts";
14
- import {
15
- createSyncBackend
16
- } from "./chunk-L7TBO32M.ts";
16
+ } from "./chunk-CCSN3F47.ts";
17
17
  import {
18
18
  createSnapshot
19
19
  } from "./chunk-OEX4ABY6.ts";
@@ -54,4 +54,4 @@ async function inspectSync(config, options, signal, factory = createSyncBackend)
54
54
  export {
55
55
  inspectSync
56
56
  };
57
- //# sourceMappingURL=chunk-XBX4HBLG.ts.map
57
+ //# sourceMappingURL=chunk-SZWBGPID.ts.map
@@ -5,7 +5,7 @@
5
5
  var createSyncBackend = async (config) => {
6
6
  switch (config.backend.type) {
7
7
  case "s3": {
8
- const { S3SyncBackend } = await import("./s3-backend-3P33LQHU.ts");
8
+ const { S3SyncBackend } = await import("./s3-backend-66O4FGBH.ts");
9
9
  return new S3SyncBackend(config.backend);
10
10
  }
11
11
  case "webdav": {
@@ -13,7 +13,7 @@ var createSyncBackend = async (config) => {
13
13
  return new WebDavSyncBackend(config.backend);
14
14
  }
15
15
  case "git": {
16
- const { GitSyncBackend } = await import("./git-backend-OQW46G2X.ts");
16
+ const { GitSyncBackend } = await import("./git-backend-GMVS4PD4.ts");
17
17
  return new GitSyncBackend(config.backend);
18
18
  }
19
19
  }
@@ -22,4 +22,4 @@ var createSyncBackend = async (config) => {
22
22
  export {
23
23
  createSyncBackend
24
24
  };
25
- //# sourceMappingURL=chunk-L7TBO32M.ts.map
25
+ //# sourceMappingURL=chunk-T2B5IU74.ts.map
@@ -3,13 +3,6 @@
3
3
  import {
4
4
  stateDir
5
5
  } from "./chunk-ZI5MXMEX.ts";
6
- import {
7
- SyncBackendConflictError,
8
- SyncBackendPublicationOutcomeUnknownError
9
- } from "./chunk-D5X27LCA.ts";
10
- import {
11
- syncErrorGuidance
12
- } from "./chunk-CPEHGXJV.ts";
13
6
  import {
14
7
  normalizeGitBranch,
15
8
  normalizeGitDirectory,
@@ -17,6 +10,13 @@ import {
17
10
  normalizeGitRemoteIdentity,
18
11
  validateGitNamespace
19
12
  } from "./chunk-TEN2ZBJV.ts";
13
+ import {
14
+ SyncBackendConflictError,
15
+ SyncBackendPublicationOutcomeUnknownError
16
+ } from "./chunk-D5X27LCA.ts";
17
+ import {
18
+ syncErrorGuidance
19
+ } from "./chunk-CPEHGXJV.ts";
20
20
  import "./chunk-2B2ELUF5.ts";
21
21
  import {
22
22
  portableSnapshotSelection,
@@ -1126,4 +1126,4 @@ export {
1126
1126
  gitBackendIdentity,
1127
1127
  isSupportedGitVersion
1128
1128
  };
1129
- //# sourceMappingURL=git-backend-OQW46G2X.ts.map
1129
+ //# sourceMappingURL=git-backend-GMVS4PD4.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
  dispatchManagerResult
5
- } from "./chunk-X5OM6GXT.ts";
6
- import "./chunk-YKJHPTGO.ts";
5
+ } from "./chunk-G4RNQQZS.ts";
6
+ import "./chunk-4CHTZMEO.ts";
7
7
  import "./chunk-HUDQATCL.ts";
8
- import "./chunk-L7TBO32M.ts";
8
+ import "./chunk-T2B5IU74.ts";
9
9
  import "./chunk-LTBWGSBV.ts";
10
10
  import "./chunk-LCRI3ABW.ts";
11
11
  import "./chunk-C7XY5NF5.ts";
@@ -19,4 +19,4 @@ import "./chunk-JAAKLL6M.ts";
19
19
  export {
20
20
  dispatchManagerResult
21
21
  };
22
- //# sourceMappingURL=manager-result-dispatcher-U23ODD32.ts.map
22
+ //# sourceMappingURL=manager-result-dispatcher-FKIBM3GO.ts.map
@@ -2,7 +2,10 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  dispatchManagerResult
5
- } from "./chunk-X5OM6GXT.ts";
5
+ } from "./chunk-G4RNQQZS.ts";
6
+ import {
7
+ runCancellableOperation
8
+ } from "./chunk-4CHTZMEO.ts";
6
9
  import {
7
10
  SETUP_SWITCH_ACTION_OPTIONS,
8
11
  saveOnSwitch,
@@ -10,20 +13,22 @@ import {
10
13
  setupSwitchActionLabel,
11
14
  useSyncSetup
12
15
  } from "./chunk-SL64RLXR.ts";
16
+ import "./chunk-HUDQATCL.ts";
17
+ import "./chunk-T2B5IU74.ts";
13
18
  import {
14
19
  observationMatchesConfig,
15
20
  observationSummary,
16
21
  syncAttentionMatchesConfig
17
- } from "./chunk-6UHKGALE.ts";
22
+ } from "./chunk-5B3FXBLE.ts";
18
23
  import {
19
24
  inspectLock,
20
25
  isLockGuardHeld,
21
26
  isStaleLock
22
- } from "./chunk-GWMHAQG4.ts";
27
+ } from "./chunk-ETTRJDNP.ts";
23
28
  import {
24
29
  readStateForConfig,
25
30
  syncStateFingerprint
26
- } from "./chunk-JSYMGJQQ.ts";
31
+ } from "./chunk-CCSN3F47.ts";
27
32
  import {
28
33
  AUTOMATIC_SYNC_DESCRIPTION,
29
34
  applyS3CredentialUpdate,
@@ -44,20 +49,11 @@ import {
44
49
  showEditS3Target,
45
50
  showEditWebDavStorageProfile,
46
51
  showEditWebDavTarget
47
- } from "./chunk-OUHGBFYF.ts";
52
+ } from "./chunk-KW7YQEZN.ts";
48
53
  import {
49
54
  automaticSyncSummary
50
55
  } from "./chunk-Z4DQF6L3.ts";
51
56
  import "./chunk-CHH26D4F.ts";
52
- import "./chunk-ZI5MXMEX.ts";
53
- import {
54
- syncErrorGuidance
55
- } from "./chunk-CPEHGXJV.ts";
56
- import {
57
- runCancellableOperation
58
- } from "./chunk-YKJHPTGO.ts";
59
- import "./chunk-HUDQATCL.ts";
60
- import "./chunk-L7TBO32M.ts";
61
57
  import {
62
58
  safeTerminalText
63
59
  } from "./chunk-LTBWGSBV.ts";
@@ -82,7 +78,11 @@ import {
82
78
  updateLocalConfig
83
79
  } from "./chunk-C7XY5NF5.ts";
84
80
  import "./chunk-6LP3MCR2.ts";
81
+ import "./chunk-ZI5MXMEX.ts";
85
82
  import "./chunk-TEN2ZBJV.ts";
83
+ import {
84
+ syncErrorGuidance
85
+ } from "./chunk-CPEHGXJV.ts";
86
86
  import {
87
87
  errorMessage
88
88
  } from "./chunk-2B2ELUF5.ts";
@@ -164,7 +164,7 @@ function blockedSyncMenuItem(label, manager) {
164
164
  };
165
165
  }
166
166
  async function showManagerAttention(ctx, attention, runRoute, signal, onSelectionResolved) {
167
- const { showRemoteSelectionReview } = await import("./remote-selection-ui-ZE3TY67S.ts");
167
+ const { showRemoteSelectionReview } = await import("./remote-selection-ui-D7RBRJNL.ts");
168
168
  if (signal?.aborted) return "close";
169
169
  const review = await showRemoteSelectionReview(
170
170
  ctx,
@@ -767,7 +767,7 @@ async function showSyncSettings(ctx, runRoute, signal) {
767
767
  },
768
768
  "remote-include": async ({ signal: actionSignal }) => {
769
769
  const reviewSignal = signal ? AbortSignal.any([signal, actionSignal]) : actionSignal;
770
- const { showRemoteSelectionReview } = await import("./remote-selection-ui-ZE3TY67S.ts");
770
+ const { showRemoteSelectionReview } = await import("./remote-selection-ui-D7RBRJNL.ts");
771
771
  if (reviewSignal.aborted) return { kind: "rejected" };
772
772
  const review = await showRemoteSelectionReview(ctx, setupName, reviewSignal, void 0, {
773
773
  origin: "settings",
@@ -1452,7 +1452,7 @@ async function showSyncManager(ctx, runRoute, sessionSignal, options = {}) {
1452
1452
  if (!attention) {
1453
1453
  const observation = options.getObservation?.();
1454
1454
  if (!observation) return { kind: "stay" };
1455
- const { showRemoteSelectionReview } = await import("./remote-selection-ui-ZE3TY67S.ts");
1455
+ const { showRemoteSelectionReview } = await import("./remote-selection-ui-D7RBRJNL.ts");
1456
1456
  if (sessionSignal?.aborted) return { kind: "close" };
1457
1457
  const config = await loadConfig();
1458
1458
  if (sessionSignal?.aborted) return { kind: "close" };
@@ -1677,4 +1677,4 @@ function syncMainMenuItem(label) {
1677
1677
  export {
1678
1678
  showSyncManager
1679
1679
  };
1680
- //# sourceMappingURL=manager-ui-ABATHC36.ts.map
1680
+ //# sourceMappingURL=manager-ui-5KLKVMRC.ts.map
@@ -2,9 +2,9 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  showRemoteSelectionReview
5
- } from "./chunk-YKJHPTGO.ts";
5
+ } from "./chunk-4CHTZMEO.ts";
6
6
  import "./chunk-HUDQATCL.ts";
7
- import "./chunk-L7TBO32M.ts";
7
+ import "./chunk-T2B5IU74.ts";
8
8
  import "./chunk-LTBWGSBV.ts";
9
9
  import "./chunk-LCRI3ABW.ts";
10
10
  import "./chunk-C7XY5NF5.ts";
@@ -18,4 +18,4 @@ import "./chunk-JAAKLL6M.ts";
18
18
  export {
19
19
  showRemoteSelectionReview
20
20
  };
21
- //# sourceMappingURL=remote-selection-ui-ZE3TY67S.ts.map
21
+ //# sourceMappingURL=remote-selection-ui-D7RBRJNL.ts.map
@@ -1,9 +1,14 @@
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
+ import {
4
+ sessionTokenWarnings
5
+ } from "./chunk-C7XY5NF5.ts";
6
+ import "./chunk-6LP3MCR2.ts";
3
7
  import {
4
8
  decodeSnapshot,
5
9
  encodeSnapshot
6
10
  } from "./chunk-Q2TUM5X6.ts";
11
+ import "./chunk-TEN2ZBJV.ts";
7
12
  import {
8
13
  SyncBackendConflictError,
9
14
  SyncBackendPublicationOutcomeUnknownError
@@ -11,11 +16,6 @@ import {
11
16
  import {
12
17
  syncErrorGuidance
13
18
  } from "./chunk-CPEHGXJV.ts";
14
- import {
15
- sessionTokenWarnings
16
- } from "./chunk-C7XY5NF5.ts";
17
- import "./chunk-6LP3MCR2.ts";
18
- import "./chunk-TEN2ZBJV.ts";
19
19
  import "./chunk-2B2ELUF5.ts";
20
20
  import {
21
21
  encodeKey,
@@ -755,4 +755,4 @@ export {
755
755
  snapshotKey,
756
756
  storageRoot
757
757
  };
758
- //# sourceMappingURL=s3-backend-3P33LQHU.ts.map
758
+ //# sourceMappingURL=s3-backend-66O4FGBH.ts.map
@@ -5,10 +5,9 @@ import {
5
5
  showGitSetup,
6
6
  showS3Setup,
7
7
  showWebDavSetup
8
- } from "./chunk-OUHGBFYF.ts";
8
+ } from "./chunk-KW7YQEZN.ts";
9
9
  import "./chunk-Z4DQF6L3.ts";
10
10
  import "./chunk-CHH26D4F.ts";
11
- import "./chunk-CPEHGXJV.ts";
12
11
  import {
13
12
  safeTerminalText
14
13
  } from "./chunk-LTBWGSBV.ts";
@@ -19,6 +18,7 @@ import {
19
18
  } from "./chunk-C7XY5NF5.ts";
20
19
  import "./chunk-6LP3MCR2.ts";
21
20
  import "./chunk-TEN2ZBJV.ts";
21
+ import "./chunk-CPEHGXJV.ts";
22
22
  import {
23
23
  errorMessage
24
24
  } from "./chunk-2B2ELUF5.ts";
@@ -86,4 +86,4 @@ async function showSetupWizard(ctx, signal) {
86
86
  export {
87
87
  showSetupWizard
88
88
  };
89
- //# sourceMappingURL=setup-wizard-VB3VDOV5.ts.map
89
+ //# sourceMappingURL=setup-wizard-IUB6ESEU.ts.map
@@ -2,13 +2,13 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  inspectSync
5
- } from "./chunk-XBX4HBLG.ts";
5
+ } from "./chunk-SZWBGPID.ts";
6
+ import "./chunk-T2B5IU74.ts";
6
7
  import "./chunk-AUSDLD6F.ts";
7
8
  import "./chunk-NJFUIVYL.ts";
8
- import "./chunk-JSYMGJQQ.ts";
9
- import "./chunk-ZI5MXMEX.ts";
10
- import "./chunk-L7TBO32M.ts";
9
+ import "./chunk-CCSN3F47.ts";
11
10
  import "./chunk-6LP3MCR2.ts";
11
+ import "./chunk-ZI5MXMEX.ts";
12
12
  import "./chunk-TEN2ZBJV.ts";
13
13
  import "./chunk-OEX4ABY6.ts";
14
14
  import "./chunk-THMF4BVL.ts";
@@ -17,4 +17,4 @@ import "./chunk-JAAKLL6M.ts";
17
17
  export {
18
18
  inspectSync
19
19
  };
20
- //# sourceMappingURL=sync-inspection-FEP4L5TR.ts.map
20
+ //# sourceMappingURL=sync-inspection-CST2KL65.ts.map