@narumitw/pi-sync 0.57.11 → 0.57.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +27 -21
- package/dist/chunks/{agent-candidate-OCDPRI5G.ts → agent-candidate-U2NU3GUX.ts} +2 -2
- package/dist/chunks/{agent-plan-P5B5RGZ7.ts → agent-plan-3YXDIJXO.ts} +13 -10
- package/dist/chunks/agent-plan-3YXDIJXO.ts.map +7 -0
- package/dist/chunks/{agent-runner-WMSCKSCB.ts → agent-runner-FCRV2Z75.ts} +11 -10
- package/dist/chunks/agent-runner-FCRV2Z75.ts.map +7 -0
- package/dist/chunks/{agent-store-RJSMNOYP.ts → agent-store-7GINKTS7.ts} +2 -2
- package/dist/chunks/{agent-store-RJSMNOYP.ts.map → agent-store-7GINKTS7.ts.map} +2 -2
- package/dist/chunks/{agent-sync-EUK2CPSS.ts → agent-sync-P6AWQXGK.ts} +2 -2
- package/dist/chunks/{chunk-67INJPKR.ts → chunk-CQD2TJHE.ts} +4 -4
- package/dist/chunks/{chunk-67INJPKR.ts.map → chunk-CQD2TJHE.ts.map} +2 -2
- package/dist/chunks/{chunk-7OLLPPLU.ts → chunk-MMQIEDZ6.ts} +6 -6
- package/dist/chunks/{chunk-7OLLPPLU.ts.map → chunk-MMQIEDZ6.ts.map} +2 -2
- package/dist/chunks/{chunk-NLWS55B6.ts → chunk-QPC5HT3A.ts} +2 -2
- package/dist/chunks/{chunk-NLWS55B6.ts.map → chunk-QPC5HT3A.ts.map} +1 -1
- package/dist/chunks/{chunk-DRTC4PKM.ts → chunk-S5OCYVPS.ts} +2 -2
- package/dist/chunks/{chunk-DRTC4PKM.ts.map → chunk-S5OCYVPS.ts.map} +2 -2
- package/dist/chunks/{chunk-3IYAPMST.ts → chunk-U6GXGY5G.ts} +2 -2
- package/dist/chunks/{chunk-CPT2BN6N.ts → chunk-XEODG2PE.ts} +2 -2
- package/dist/chunks/{chunk-F7E3VFXU.ts → chunk-ZC3IHFNM.ts} +6 -6
- package/dist/chunks/{chunk-F7E3VFXU.ts.map → chunk-ZC3IHFNM.ts.map} +2 -2
- package/dist/chunks/{command-handler-F2E7A5T5.ts → command-handler-VKLZBRLO.ts} +9 -9
- package/dist/chunks/{command-handler-F2E7A5T5.ts.map → command-handler-VKLZBRLO.ts.map} +2 -2
- package/dist/chunks/{conflict-review-2QMO2K6Q.ts → conflict-review-GXA6Y7KY.ts} +2 -2
- package/dist/chunks/{continuous-record-AH7JGYKM.ts → continuous-record-EPHGR2DU.ts} +2 -2
- package/dist/chunks/{continuous-sync-VRMXCA5X.ts → continuous-sync-TTOSJCQU.ts} +3 -3
- package/dist/chunks/{manager-ui-LM7DSJ2Y.ts → manager-ui-INVMAFEN.ts} +146 -176
- package/dist/chunks/manager-ui-INVMAFEN.ts.map +7 -0
- package/dist/chunks/{setup-switch-PIPXYPCW.ts → setup-switch-KLGESLQX.ts} +3 -3
- package/dist/chunks/{setup-wizard-RR5U3SUB.ts → setup-wizard-ZQAK35BP.ts} +3 -3
- package/dist/chunks/{sync-operations-CV3TULLD.ts → sync-operations-TMGQHBF5.ts} +4 -4
- package/dist/chunks/{sync-operations-CV3TULLD.ts.map → sync-operations-TMGQHBF5.ts.map} +2 -2
- package/dist/index.ts +6 -6
- package/docs/agent-continuous-hardening.md +5 -5
- package/docs/agent-mode-verification.md +3 -3
- package/docs/agent-quality-verification.md +3 -3
- package/docs/continuous-sync-verification.md +2 -2
- package/docs/settings.md +9 -5
- package/docs/tui-contract.md +20 -3
- package/package.json +3 -3
- package/skills/configure-pi-sync/SKILL.md +3 -1
- package/skills/configure-pi-sync/references/configuration.md +48 -37
- package/src/commands/command-execution.ts +3 -3
- package/src/commands/command.ts +1 -1
- package/src/settings/settings-types.ts +1 -1
- package/src/sync/agent-candidate.ts +3 -3
- package/src/sync/agent-plan.ts +11 -8
- package/src/sync/agent-runner.ts +10 -9
- package/src/sync/agent-store.ts +1 -1
- package/src/sync/agent-sync.ts +2 -2
- package/src/sync/continuous-record.ts +1 -1
- package/src/sync/merged-sync.ts +4 -4
- package/src/sync/sync-mutations.ts +1 -1
- package/src/ui/agent-mode-setting.ts +6 -6
- package/src/ui/manager-state.ts +1 -1
- package/src/ui/settings-ui.ts +19 -55
- package/src/ui/setup/setup-switcher.ts +2 -2
- package/src/ui/sync-setups-ui.ts +2 -2
- package/dist/chunks/agent-plan-P5B5RGZ7.ts.map +0 -7
- package/dist/chunks/agent-runner-WMSCKSCB.ts.map +0 -7
- package/dist/chunks/manager-ui-LM7DSJ2Y.ts.map +0 -7
- /package/dist/chunks/{agent-candidate-OCDPRI5G.ts.map → agent-candidate-U2NU3GUX.ts.map} +0 -0
- /package/dist/chunks/{agent-sync-EUK2CPSS.ts.map → agent-sync-P6AWQXGK.ts.map} +0 -0
- /package/dist/chunks/{chunk-3IYAPMST.ts.map → chunk-U6GXGY5G.ts.map} +0 -0
- /package/dist/chunks/{chunk-CPT2BN6N.ts.map → chunk-XEODG2PE.ts.map} +0 -0
- /package/dist/chunks/{conflict-review-2QMO2K6Q.ts.map → conflict-review-GXA6Y7KY.ts.map} +0 -0
- /package/dist/chunks/{continuous-record-AH7JGYKM.ts.map → continuous-record-EPHGR2DU.ts.map} +0 -0
- /package/dist/chunks/{continuous-sync-VRMXCA5X.ts.map → continuous-sync-TTOSJCQU.ts.map} +0 -0
- /package/dist/chunks/{setup-switch-PIPXYPCW.ts.map → setup-switch-KLGESLQX.ts.map} +0 -0
- /package/dist/chunks/{setup-wizard-RR5U3SUB.ts.map → setup-wizard-ZQAK35BP.ts.map} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
setupSwitchActionFromLabel,
|
|
7
7
|
setupSwitchActionLabel,
|
|
8
8
|
useSyncSetup
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XEODG2PE.ts";
|
|
10
10
|
import {
|
|
11
11
|
applyS3CredentialUpdate,
|
|
12
12
|
chooseS3CredentialUpdate,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
showEditS3Target,
|
|
27
27
|
showEditWebDavStorageProfile,
|
|
28
28
|
showEditWebDavTarget
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-U6GXGY5G.ts";
|
|
30
30
|
import {
|
|
31
31
|
automaticSyncSummary
|
|
32
32
|
} from "./chunk-ECYCNZOE.ts";
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
AUTOMATIC_SYNC_DESCRIPTION,
|
|
66
66
|
STARTUP_TRANSFER_DESCRIPTION,
|
|
67
67
|
startupTransferSummary
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-QPC5HT3A.ts";
|
|
69
69
|
import {
|
|
70
70
|
captureMutationOwner
|
|
71
71
|
} from "./chunk-GNYGNHFF.ts";
|
|
@@ -409,8 +409,8 @@ async function loadSetupMenuState(selectedName, signal) {
|
|
|
409
409
|
`Sessions: ${selection.sessions ? "On \u2014 privacy-sensitive" : "Off"}`,
|
|
410
410
|
`Automatic sync: ${config.automatic ? "On" : "Off"}`,
|
|
411
411
|
`Automatic transfer at startup: ${config.automaticTransfer ? "On \u2014 may upload, replace, or delete selected files; no reload" : "Off"}`,
|
|
412
|
-
`
|
|
413
|
-
`Continuous sync: ${config.continuous ? config.agentMode ? "On (
|
|
412
|
+
`Autonomous sync: ${config.agentMode ? "On (autonomous merged sync)" : "Off"}`,
|
|
413
|
+
`Continuous sync: ${config.continuous ? config.agentMode ? "On (recurring requests and transfers)" : "Saved On; paused until Autonomous sync is enabled" : "Off"}`,
|
|
414
414
|
isCurrent ? "Edit included content and automatic sync in /sync \u2192 Settings." : "To edit included content or automatic sync, make this setup current, then open /sync \u2192 Settings."
|
|
415
415
|
];
|
|
416
416
|
} catch (error) {
|
|
@@ -559,8 +559,8 @@ async function describeManagerState(signal, attention, inspectOperation = inspec
|
|
|
559
559
|
`Included: ${selection.builtIns.length} built-in group${selection.builtIns.length === 1 ? "" : "s"} \xB7 ${selection.custom.length} extra path${selection.custom.length === 1 ? "" : "s"} \xB7 Sessions ${selection.sessions ? "on" : "off"}`,
|
|
560
560
|
`Automatic sync: ${automaticSyncSummary(config.automatic)}`,
|
|
561
561
|
`Startup transfer: ${startupTransferSummary(config)}`,
|
|
562
|
-
`
|
|
563
|
-
...config.continuous ? await (await import("./continuous-record-
|
|
562
|
+
`Autonomous sync: ${config.agentMode ? "On (autonomous merged sync)" : "Off"}`,
|
|
563
|
+
...config.continuous ? await (await import("./continuous-record-EPHGR2DU.ts")).continuousStatusLines(config) : [],
|
|
564
564
|
`Last applied: ${lastAppliedSnapshot}`,
|
|
565
565
|
...noSyncedContent ? ["", "No included content is selected. Choose included content in Settings before syncing."] : [],
|
|
566
566
|
"",
|
|
@@ -655,8 +655,8 @@ import { defineMenu as defineMenu4, runMenu as runMenu4 } from "@narumitw/pi-tui
|
|
|
655
655
|
|
|
656
656
|
// src/ui/agent-mode-setting.ts
|
|
657
657
|
import { isDeepStrictEqual } from "node:util";
|
|
658
|
-
var AGENT_MODE_DESCRIPTION = "This setup
|
|
659
|
-
var CONTINUOUS_DESCRIPTION = "This setup
|
|
658
|
+
var AGENT_MODE_DESCRIPTION = "This setup: sync eligible changes at session startup and on Sync now without transfer confirmation. Use the selected Pi model to resolve supported text and settings conflicts. Eligible conflict content may be sent to its provider and incur costs. Selected local and remote content can be replaced or deleted. Unresolved conflicts pause unless partial sync permits independent progress. Continuous sync is a separate opt-in. No automatic reload.";
|
|
659
|
+
var CONTINUOUS_DESCRIPTION = "This setup: recurring sync while Pi is open. Requires Autonomous sync. Watches selected files, checks the remote every 60\u201366 seconds, and retries temporary failures. Local changes and retries can cause extra requests between polls. May disclose conflict text and incur model/storage costs. No automatic reload.";
|
|
660
660
|
function saveContinuousMode(ctx, setupName, enabled, signal) {
|
|
661
661
|
return saveAgentMode(ctx, setupName, enabled, signal, "continuous");
|
|
662
662
|
}
|
|
@@ -667,8 +667,8 @@ async function saveAgentMode(ctx, setupName, enabled, signal, preference = "agen
|
|
|
667
667
|
const setup = settings.syncSetups[setupName];
|
|
668
668
|
if (!setup || settings.activeSyncSetup !== setupName) throw new Error("Current sync setup changed; reopen Settings.");
|
|
669
669
|
const continuous = preference === "continuous";
|
|
670
|
-
const label = continuous ? "Continuous sync" : "
|
|
671
|
-
if (enabled && continuous && !setup.sync.agentMode) throw new Error("Enable
|
|
670
|
+
const label = continuous ? "Continuous sync" : "Autonomous sync";
|
|
671
|
+
if (enabled && continuous && !setup.sync.agentMode) throw new Error("Enable Autonomous sync before Continuous sync.");
|
|
672
672
|
if (Boolean(setup.sync[preference]) === enabled) return true;
|
|
673
673
|
if (enabled) {
|
|
674
674
|
const summary = [
|
|
@@ -688,7 +688,7 @@ async function saveAgentMode(ctx, setupName, enabled, signal, preference = "agen
|
|
|
688
688
|
].join("\n\n");
|
|
689
689
|
if (!await confirmMergeReview(
|
|
690
690
|
ctx,
|
|
691
|
-
`Enable
|
|
691
|
+
`Enable ${label}?`,
|
|
692
692
|
summary,
|
|
693
693
|
signal,
|
|
694
694
|
() => !signal?.aborted,
|
|
@@ -704,7 +704,7 @@ async function saveAgentMode(ctx, setupName, enabled, signal, preference = "agen
|
|
|
704
704
|
current.storageConnections[setup.storage.connection],
|
|
705
705
|
settings.storageConnections[setup.storage.connection]
|
|
706
706
|
))
|
|
707
|
-
throw new Error("Sync setup or connection changed during
|
|
707
|
+
throw new Error("Sync setup or connection changed during Autonomous sync review; reopen Settings.");
|
|
708
708
|
return {
|
|
709
709
|
...current,
|
|
710
710
|
syncSetups: { ...current.syncSetups, [setupName]: { ...setup, sync: { ...setup.sync, [preference]: enabled } } }
|
|
@@ -1165,8 +1165,8 @@ async function showSetupSwitcher(ctx, runRoute, selectedName, signal) {
|
|
|
1165
1165
|
`Included content: ${config.include.length} paths`,
|
|
1166
1166
|
`Automatic sync: ${automaticSyncSummary(config.automatic)} \xB7 Sessions: ${config.include.includes("sessions") ? "On" : "Off"}`,
|
|
1167
1167
|
`Automatic transfer at startup: ${config.automaticTransfer ? "On \u2014 may upload, replace, or delete selected files; no reload" : "Off"}`,
|
|
1168
|
-
`
|
|
1169
|
-
`Continuous sync: ${config.continuous ? config.agentMode ? "On (
|
|
1168
|
+
`Autonomous sync: ${config.agentMode ? "On (autonomous merged sync)" : "Off"}`,
|
|
1169
|
+
`Continuous sync: ${config.continuous ? config.agentMode ? "On (recurring requests and transfers)" : "Saved On; paused until Autonomous sync is enabled" : "Off"}`,
|
|
1170
1170
|
"",
|
|
1171
1171
|
switchEffect
|
|
1172
1172
|
].join("\n"),
|
|
@@ -1356,172 +1356,142 @@ async function showSyncSettings(ctx, runRoute, signal, reviewedSetup) {
|
|
|
1356
1356
|
const initial = await loadConfig(reviewedSetup);
|
|
1357
1357
|
if (signal?.aborted) return "back";
|
|
1358
1358
|
const setupName = initial.setupName;
|
|
1359
|
-
const groups = {
|
|
1360
|
-
content: { label: "Sync content", ids: ["include", "remoteInclude", "localFields"] },
|
|
1361
|
-
behavior: {
|
|
1362
|
-
label: "Sync behavior",
|
|
1363
|
-
ids: ["automatic", "automaticTransfer", "agentMode", "continuous", "onSwitch"]
|
|
1364
|
-
},
|
|
1365
|
-
storage: { label: "Storage & setups", ids: ["storageLocation", "setups", "connections"] },
|
|
1366
|
-
advanced: { label: "Advanced", ids: ["mergeSettings", "contentPolicy", "skipSecretScan", "showStatus", "debug"] },
|
|
1367
|
-
all: { label: "All settings (search)", ids: [] }
|
|
1368
|
-
};
|
|
1369
1359
|
let saveStatus = "Simple choices save immediately. Back does not undo saved changes.";
|
|
1370
|
-
const settingsScreen = (state, group) => ({
|
|
1371
|
-
kind: "settings",
|
|
1372
|
-
title: `Pi Sync Settings \xB7 ${groups[group].label}`,
|
|
1373
|
-
lines: [
|
|
1374
|
-
`Setup: ${safeTerminalText(state.setupName)} \xB7 Connection: ${safeTerminalText(state.connectionName)}`,
|
|
1375
|
-
saveStatus
|
|
1376
|
-
],
|
|
1377
|
-
items: [
|
|
1378
|
-
{
|
|
1379
|
-
id: "include",
|
|
1380
|
-
label: "Included paths",
|
|
1381
|
-
description: "This setup: choose paths in a draft, then review and Save or Discard. No transfer is started.",
|
|
1382
|
-
currentValue: `${state.include.length} paths \xB7 Edit`,
|
|
1383
|
-
action: "include"
|
|
1384
|
-
},
|
|
1385
|
-
{
|
|
1386
|
-
id: "remoteInclude",
|
|
1387
|
-
label: "Compare included paths",
|
|
1388
|
-
description: "This setup: compare included-path policies, not file contents. Review before saving either list; no files transfer unless you explicitly Continue.",
|
|
1389
|
-
currentValue: "Review",
|
|
1390
|
-
action: "remote-include"
|
|
1391
|
-
},
|
|
1392
|
-
{
|
|
1393
|
-
id: "localFields",
|
|
1394
|
-
label: "Machine-local fields",
|
|
1395
|
-
description: "This setup: settings.json root fields excluded from future portable snapshots, not project overrides. Policy changes require reviewed directional migration; old history remains.",
|
|
1396
|
-
currentValue: `${state.localFields?.length ?? 0} fields \xB7 Edit`,
|
|
1397
|
-
action: "local-fields"
|
|
1398
|
-
},
|
|
1399
|
-
{
|
|
1400
|
-
id: "storageLocation",
|
|
1401
|
-
label: "Storage location",
|
|
1402
|
-
description: "This setup: review and save bucket, branch, or path changes. Remote history is not moved.",
|
|
1403
|
-
currentValue: state.backend.type === "s3" ? `${safeTerminalText(state.backend.destination.bucket)} \xB7 ${safeTerminalText(state.backend.destination.prefix)}` : state.backend.type === "git" ? `${safeTerminalText(state.backend.destination.branch)} \xB7 ${safeTerminalText(state.backend.destination.directory)}` : safeTerminalText(state.backend.destination.path),
|
|
1404
|
-
action: "storage-location"
|
|
1405
|
-
},
|
|
1406
|
-
{
|
|
1407
|
-
id: "setups",
|
|
1408
|
-
label: "Manage sync setups",
|
|
1409
|
-
description: "This device: add, switch, edit, or remove sync setups. Each edit identifies its owner before saving.",
|
|
1410
|
-
currentValue: "Open",
|
|
1411
|
-
action: "setups"
|
|
1412
|
-
},
|
|
1413
|
-
{
|
|
1414
|
-
id: "connections",
|
|
1415
|
-
label: "Manage storage connections",
|
|
1416
|
-
description: "Shared connections on this device: review affected setups before saving server or credential changes.",
|
|
1417
|
-
currentValue: "Open",
|
|
1418
|
-
action: "connections"
|
|
1419
|
-
},
|
|
1420
|
-
{
|
|
1421
|
-
id: "automatic",
|
|
1422
|
-
label: "Automatic sync",
|
|
1423
|
-
description: AUTOMATIC_SYNC_DESCRIPTION,
|
|
1424
|
-
currentValue: state.automatic ? "On" : "Off",
|
|
1425
|
-
values: ["On", "Off"],
|
|
1426
|
-
action: "automatic"
|
|
1427
|
-
},
|
|
1428
|
-
{
|
|
1429
|
-
id: "automaticTransfer",
|
|
1430
|
-
label: "Startup transfer",
|
|
1431
|
-
description: `${STARTUP_TRANSFER_DESCRIPTION} Saved preference and requirements: ${startupTransferSummary(state)}.`,
|
|
1432
|
-
currentValue: state.automaticTransfer ? "On" : "Off",
|
|
1433
|
-
values: ["On", "Off"],
|
|
1434
|
-
action: "automatic-transfer"
|
|
1435
|
-
},
|
|
1436
|
-
{
|
|
1437
|
-
id: "agentMode",
|
|
1438
|
-
label: "Agent mode (experimental)",
|
|
1439
|
-
description: AGENT_MODE_DESCRIPTION,
|
|
1440
|
-
currentValue: state.agentMode ? "On" : "Off",
|
|
1441
|
-
values: ["On", "Off"],
|
|
1442
|
-
action: "agent-mode"
|
|
1443
|
-
},
|
|
1444
|
-
{
|
|
1445
|
-
id: "continuous",
|
|
1446
|
-
label: "Continuous sync (experimental)",
|
|
1447
|
-
description: `${CONTINUOUS_DESCRIPTION}${state.continuous && !state.agentMode ? " Saved On, but paused until Agent mode is enabled." : ""}`,
|
|
1448
|
-
currentValue: state.continuous ? "On" : "Off",
|
|
1449
|
-
values: ["On", "Off"],
|
|
1450
|
-
action: "continuous"
|
|
1451
|
-
},
|
|
1452
|
-
{
|
|
1453
|
-
id: "onSwitch",
|
|
1454
|
-
label: "On setup switch",
|
|
1455
|
-
description: "All setups on this device: ask before a pull review, open it automatically, or switch without pulling. Applies to subsequent switches.",
|
|
1456
|
-
currentValue: setupSwitchActionLabel(state.onSwitch),
|
|
1457
|
-
values: SETUP_SWITCH_ACTION_OPTIONS.map(({ label }) => label),
|
|
1458
|
-
action: "on-switch"
|
|
1459
|
-
},
|
|
1460
|
-
{
|
|
1461
|
-
id: "mergeSettings",
|
|
1462
|
-
label: "Merge settings fields",
|
|
1463
|
-
description: "This setup, experimental opt-in: merge independent global settings.json root fields with a verified private ancestor. Arrays and nested objects remain atomic. Applies to subsequent sync; no reload.",
|
|
1464
|
-
currentValue: state.mergeSettings ? "On" : "Off",
|
|
1465
|
-
values: ["On", "Off"],
|
|
1466
|
-
action: "merge-settings"
|
|
1467
|
-
},
|
|
1468
|
-
{
|
|
1469
|
-
id: "contentPolicy",
|
|
1470
|
-
label: "Content merge / partial progress",
|
|
1471
|
-
description: "This setup, experimental opt-in: review the version-5 upgrade before saving. Merge bounded text and prefix-only sessions; partial progress keeps withheld versions and baselines. Applies to subsequent sync; disabling does not clear recovery evidence.",
|
|
1472
|
-
currentValue: state.mergeContent ? state.partialSync ? "Merge + partial" : "Merge only" : state.partialSync ? "Partial only" : "Off",
|
|
1473
|
-
values: ["Off", "Merge only", "Merge + partial", "Partial only"],
|
|
1474
|
-
action: "content-policy"
|
|
1475
|
-
},
|
|
1476
|
-
{
|
|
1477
|
-
id: "skipSecretScan",
|
|
1478
|
-
label: "Skip secret scan",
|
|
1479
|
-
description: "All setups on this device: skip possible-secret checks on subsequent pushes, including automatic pushes. Other safety checks remain. Diagnostics still scans.",
|
|
1480
|
-
currentValue: state.skipSecretScan ? "On" : "Off",
|
|
1481
|
-
values: ["On", "Off"],
|
|
1482
|
-
action: "skip-secret-scan"
|
|
1483
|
-
},
|
|
1484
|
-
{
|
|
1485
|
-
id: "showStatus",
|
|
1486
|
-
label: "Show sync status",
|
|
1487
|
-
description: "All setups on this device: saved and applied immediately to Pi status. Review widgets and notifications remain available.",
|
|
1488
|
-
currentValue: state.showStatus ? "On" : "Off",
|
|
1489
|
-
values: ["On", "Off"],
|
|
1490
|
-
action: "show-status"
|
|
1491
|
-
},
|
|
1492
|
-
{
|
|
1493
|
-
id: "debug",
|
|
1494
|
-
label: "Debug startup timings",
|
|
1495
|
-
description: "All setups on this device: show startup durations in the TUI transcript or RPC notifications, including initial Continuous sync. Applies next session start; no credentials or file contents.",
|
|
1496
|
-
currentValue: state.debug ? "On" : "Off",
|
|
1497
|
-
values: ["On", "Off"],
|
|
1498
|
-
action: "debug"
|
|
1499
|
-
}
|
|
1500
|
-
].filter((item) => group === "all" || groups[group].ids.includes(item.id))
|
|
1501
|
-
});
|
|
1502
1360
|
const menu = defineMenu4({
|
|
1503
|
-
start: "
|
|
1361
|
+
start: "settings",
|
|
1504
1362
|
screens: {
|
|
1505
|
-
|
|
1506
|
-
kind: "
|
|
1363
|
+
settings: ({ state }) => ({
|
|
1364
|
+
kind: "settings",
|
|
1507
1365
|
title: "Pi Sync Settings",
|
|
1508
1366
|
lines: [
|
|
1509
1367
|
`Setup: ${safeTerminalText(state.setupName)} \xB7 Connection: ${safeTerminalText(state.connectionName)}`,
|
|
1510
|
-
"Choose a task, or search all settings. Scope is shown in each setting's description.",
|
|
1511
1368
|
saveStatus
|
|
1512
1369
|
],
|
|
1513
|
-
items:
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1370
|
+
items: [
|
|
1371
|
+
{
|
|
1372
|
+
id: "include",
|
|
1373
|
+
label: "Included paths",
|
|
1374
|
+
description: "This setup: choose paths in a draft, then review and Save or Discard. No transfer is started.",
|
|
1375
|
+
currentValue: `${state.include.length} paths \xB7 Edit`,
|
|
1376
|
+
action: "include"
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
id: "remoteInclude",
|
|
1380
|
+
label: "Compare included paths",
|
|
1381
|
+
description: "This setup: compare included-path policies, not file contents. Review before saving either list; no files transfer unless you explicitly Continue.",
|
|
1382
|
+
currentValue: "Review",
|
|
1383
|
+
action: "remote-include"
|
|
1384
|
+
},
|
|
1385
|
+
{
|
|
1386
|
+
id: "localFields",
|
|
1387
|
+
label: "Machine-local fields",
|
|
1388
|
+
description: "This setup: settings.json root fields excluded from future portable snapshots, not project overrides. Policy changes require reviewed directional migration; old history remains.",
|
|
1389
|
+
currentValue: `${state.localFields?.length ?? 0} fields \xB7 Edit`,
|
|
1390
|
+
action: "local-fields"
|
|
1391
|
+
},
|
|
1392
|
+
{
|
|
1393
|
+
id: "storageLocation",
|
|
1394
|
+
label: "Storage location",
|
|
1395
|
+
description: "This setup: review and save bucket, branch, or path changes. Remote history is not moved.",
|
|
1396
|
+
currentValue: state.backend.type === "s3" ? `${safeTerminalText(state.backend.destination.bucket)} \xB7 ${safeTerminalText(state.backend.destination.prefix)}` : state.backend.type === "git" ? `${safeTerminalText(state.backend.destination.branch)} \xB7 ${safeTerminalText(state.backend.destination.directory)}` : safeTerminalText(state.backend.destination.path),
|
|
1397
|
+
action: "storage-location"
|
|
1398
|
+
},
|
|
1399
|
+
{
|
|
1400
|
+
id: "setups",
|
|
1401
|
+
label: "Manage sync setups",
|
|
1402
|
+
description: "This device: add, switch, edit, or remove sync setups. Each edit identifies its owner before saving.",
|
|
1403
|
+
currentValue: "Open",
|
|
1404
|
+
action: "setups"
|
|
1405
|
+
},
|
|
1406
|
+
{
|
|
1407
|
+
id: "connections",
|
|
1408
|
+
label: "Manage storage connections",
|
|
1409
|
+
description: "Shared connections on this device: review affected setups before saving server or credential changes.",
|
|
1410
|
+
currentValue: "Open",
|
|
1411
|
+
action: "connections"
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
id: "automatic",
|
|
1415
|
+
label: "Automatic sync",
|
|
1416
|
+
description: AUTOMATIC_SYNC_DESCRIPTION,
|
|
1417
|
+
currentValue: state.automatic ? "On" : "Off",
|
|
1418
|
+
values: ["On", "Off"],
|
|
1419
|
+
action: "automatic"
|
|
1420
|
+
},
|
|
1421
|
+
{
|
|
1422
|
+
id: "automaticTransfer",
|
|
1423
|
+
label: "Startup transfer",
|
|
1424
|
+
description: `${STARTUP_TRANSFER_DESCRIPTION} Saved preference and requirements: ${startupTransferSummary(state)}.`,
|
|
1425
|
+
currentValue: state.automaticTransfer ? "On" : "Off",
|
|
1426
|
+
values: ["On", "Off"],
|
|
1427
|
+
action: "automatic-transfer"
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
id: "agentMode",
|
|
1431
|
+
label: "Autonomous sync",
|
|
1432
|
+
description: AGENT_MODE_DESCRIPTION,
|
|
1433
|
+
currentValue: state.agentMode ? "On" : "Off",
|
|
1434
|
+
values: ["On", "Off"],
|
|
1435
|
+
action: "agent-mode"
|
|
1436
|
+
},
|
|
1437
|
+
{
|
|
1438
|
+
id: "continuous",
|
|
1439
|
+
label: "Continuous sync",
|
|
1440
|
+
description: `${CONTINUOUS_DESCRIPTION}${state.continuous && !state.agentMode ? " Saved On, but paused until Autonomous sync is enabled." : ""}`,
|
|
1441
|
+
currentValue: state.continuous ? "On" : "Off",
|
|
1442
|
+
values: ["On", "Off"],
|
|
1443
|
+
action: "continuous"
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
id: "onSwitch",
|
|
1447
|
+
label: "On setup switch",
|
|
1448
|
+
description: "All setups on this device: ask before a pull review, open it automatically, or switch without pulling. Applies to subsequent switches.",
|
|
1449
|
+
currentValue: setupSwitchActionLabel(state.onSwitch),
|
|
1450
|
+
values: SETUP_SWITCH_ACTION_OPTIONS.map(({ label }) => label),
|
|
1451
|
+
action: "on-switch"
|
|
1452
|
+
},
|
|
1453
|
+
{
|
|
1454
|
+
id: "mergeSettings",
|
|
1455
|
+
label: "Merge settings fields",
|
|
1456
|
+
description: "This setup, opt-in: merge independent global settings.json root fields with a verified private ancestor. Arrays and nested objects remain atomic. Applies to subsequent sync; no reload.",
|
|
1457
|
+
currentValue: state.mergeSettings ? "On" : "Off",
|
|
1458
|
+
values: ["On", "Off"],
|
|
1459
|
+
action: "merge-settings"
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
id: "contentPolicy",
|
|
1463
|
+
label: "Content merge / partial progress",
|
|
1464
|
+
description: "This setup, opt-in: review the version-5 upgrade before saving. Merge bounded text and prefix-only sessions; partial progress keeps withheld versions and baselines. Applies to subsequent sync; disabling does not clear recovery evidence.",
|
|
1465
|
+
currentValue: state.mergeContent ? state.partialSync ? "Merge + partial" : "Merge only" : state.partialSync ? "Partial only" : "Off",
|
|
1466
|
+
values: ["Off", "Merge only", "Merge + partial", "Partial only"],
|
|
1467
|
+
action: "content-policy"
|
|
1468
|
+
},
|
|
1469
|
+
{
|
|
1470
|
+
id: "skipSecretScan",
|
|
1471
|
+
label: "Skip secret scan",
|
|
1472
|
+
description: "All setups on this device: skip possible-secret checks on subsequent pushes, including automatic pushes. Other safety checks remain. Diagnostics still scans.",
|
|
1473
|
+
currentValue: state.skipSecretScan ? "On" : "Off",
|
|
1474
|
+
values: ["On", "Off"],
|
|
1475
|
+
action: "skip-secret-scan"
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
id: "showStatus",
|
|
1479
|
+
label: "Show sync status",
|
|
1480
|
+
description: "All setups on this device: saved and applied immediately to Pi status. Review widgets and notifications remain available.",
|
|
1481
|
+
currentValue: state.showStatus ? "On" : "Off",
|
|
1482
|
+
values: ["On", "Off"],
|
|
1483
|
+
action: "show-status"
|
|
1484
|
+
},
|
|
1485
|
+
{
|
|
1486
|
+
id: "debug",
|
|
1487
|
+
label: "Debug startup timings",
|
|
1488
|
+
description: "All setups on this device: show startup durations in the TUI transcript or RPC notifications, including initial Continuous sync. Applies next session start; no credentials or file contents.",
|
|
1489
|
+
currentValue: state.debug ? "On" : "Off",
|
|
1490
|
+
values: ["On", "Off"],
|
|
1491
|
+
action: "debug"
|
|
1492
|
+
}
|
|
1493
|
+
]
|
|
1494
|
+
})
|
|
1525
1495
|
},
|
|
1526
1496
|
actions: {
|
|
1527
1497
|
"storage-location": async ({ signal: actionSignal }) => {
|
|
@@ -1548,7 +1518,7 @@ async function showSyncSettings(ctx, runRoute, signal, reviewedSetup) {
|
|
|
1548
1518
|
const mergeContent = value === "Merge only" || value === "Merge + partial";
|
|
1549
1519
|
const partialSync = value === "Partial only" || value === "Merge + partial";
|
|
1550
1520
|
if (!await ctx.ui.confirm(
|
|
1551
|
-
"Save
|
|
1521
|
+
"Save content policy?",
|
|
1552
1522
|
"This explicitly upgrades settings to version 5; partial snapshots use version 3 and older clients must refuse them. Text/session merge is conservative. Partial sync preserves withheld versions and old baselines. Disabling does not clear unresolved groups or recovery evidence. Review a directional migration first if portable policy changes.",
|
|
1553
1523
|
{ signal: mutationSignal }
|
|
1554
1524
|
))
|
|
@@ -1676,7 +1646,7 @@ async function showSyncSettings(ctx, runRoute, signal, reviewedSetup) {
|
|
|
1676
1646
|
try {
|
|
1677
1647
|
validate();
|
|
1678
1648
|
ctx.ui.notify(
|
|
1679
|
-
"
|
|
1649
|
+
"Autonomous sync saved. Applies to subsequent sync and the next session start; no transfer started.",
|
|
1680
1650
|
"info"
|
|
1681
1651
|
);
|
|
1682
1652
|
} catch {
|
|
@@ -2188,4 +2158,4 @@ function syncMainMenuItem(label) {
|
|
|
2188
2158
|
export {
|
|
2189
2159
|
showSyncManager
|
|
2190
2160
|
};
|
|
2191
|
-
//# sourceMappingURL=manager-ui-
|
|
2161
|
+
//# sourceMappingURL=manager-ui-INVMAFEN.ts.map
|