mrplex 0.0.2 → 0.1.0
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/README.md +98 -183
- package/dist/cli/main.js +45 -7
- package/dist/cli/main.js.map +1 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/shell/guard.d.ts +2 -1
- package/dist/shell/guard.js +11 -4
- package/dist/shell/guard.js.map +1 -1
- package/dist/shell/policy.d.ts +25 -3
- package/dist/shell/policy.js +57 -2
- package/dist/shell/policy.js.map +1 -1
- package/dist/sync/converge.d.ts +27 -0
- package/dist/sync/converge.js +46 -0
- package/dist/sync/converge.js.map +1 -0
- package/dist/sync/daemon.d.ts +4 -0
- package/dist/sync/daemon.js +60 -7
- package/dist/sync/daemon.js.map +1 -1
- package/dist/sync/feed.d.ts +16 -0
- package/dist/sync/feed.js +81 -56
- package/dist/sync/feed.js.map +1 -1
- package/dist/sync/fs-store.js +10 -0
- package/dist/sync/fs-store.js.map +1 -1
- package/dist/sync/hot-path.d.ts +83 -0
- package/dist/sync/hot-path.js +232 -0
- package/dist/sync/hot-path.js.map +1 -0
- package/dist/sync/push.js +7 -31
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/reconcile.d.ts +7 -1
- package/dist/sync/reconcile.js +59 -55
- package/dist/sync/reconcile.js.map +1 -1
- package/package.json +1 -1
package/dist/sync/reconcile.js
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
* `FileStore` seam (real fs in `fs-store.ts`, in-memory in tests), so the whole
|
|
13
13
|
* §4.9 table is testable against a local kernel without touching disk.
|
|
14
14
|
*/
|
|
15
|
-
import { withVersionSuffix } from "../kernel/deletion.js";
|
|
16
15
|
import { KernelError } from "../kernel/errors.js";
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
16
|
+
import { materializeAt, parkIgnoredSibling, putAndAck, stripToUserContent, } from "./converge.js";
|
|
17
|
+
import { decideInbound, effectInbound } from "./hot-path.js";
|
|
18
|
+
import { isDirty, isIgnored, readFileIntrinsics, renderMaterialized, } from "./intrinsics.js";
|
|
19
19
|
/**
|
|
20
20
|
* Run the full §4.9 reconciliation once. Returns the safe head R (the cursor to
|
|
21
21
|
* persist) and the list of actions taken (or planned, under dryRun).
|
|
@@ -108,11 +108,12 @@ async function resolveLocalPath(client, store, opts, dryRun, ctx) {
|
|
|
108
108
|
return { path, verdict: "adopt", detail: "content matches remote; provenance repaired" };
|
|
109
109
|
}
|
|
110
110
|
if (!intr.version) {
|
|
111
|
-
// No embedded version and bytes differ
|
|
112
|
-
//
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
// No embedded version and bytes differ → rebase onto remote, else park
|
|
112
|
+
// (better-sync WS2; formerly unconditional §4.9 row 6 park).
|
|
113
|
+
if (dryRun) {
|
|
114
|
+
return { path, verdict: "rebase", detail: "occupied path, no local provenance" };
|
|
115
|
+
}
|
|
116
|
+
return convergeOccupied(client, store, opts.repo, path);
|
|
116
117
|
}
|
|
117
118
|
if (intr.version === remote.version_id) {
|
|
118
119
|
// Embedded version is the remote current.
|
|
@@ -130,10 +131,11 @@ async function resolveLocalPath(client, store, opts, dryRun, ctx) {
|
|
|
130
131
|
await materializeVersion(client, store, opts.repo, path, remote.version_id);
|
|
131
132
|
return { path, verdict: "materialize", detail: "fast-forward to remote current" };
|
|
132
133
|
}
|
|
133
|
-
// Local edited AND remote advanced →
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
// Local edited AND remote advanced → rebase, else park (better-sync WS2).
|
|
135
|
+
if (dryRun) {
|
|
136
|
+
return { path, verdict: "rebase", detail: "local edit vs advanced remote" };
|
|
137
|
+
}
|
|
138
|
+
return convergeOccupied(client, store, opts.repo, path);
|
|
137
139
|
}
|
|
138
140
|
// No remote doc at this path.
|
|
139
141
|
const embeddedVersion = intr.version;
|
|
@@ -160,7 +162,7 @@ async function resolveLocalPath(client, store, opts, dryRun, ctx) {
|
|
|
160
162
|
if (!intr.version) {
|
|
161
163
|
// No provenance, path absent remotely → a genuine local creation (row 7).
|
|
162
164
|
if (!dryRun)
|
|
163
|
-
await pushCreate(client, store, opts.repo, path);
|
|
165
|
+
return await pushCreate(client, store, opts.repo, path);
|
|
164
166
|
return { path, verdict: "push", detail: "local creation" };
|
|
165
167
|
}
|
|
166
168
|
// Embedded version exists but the document is no longer live at this path and
|
|
@@ -171,8 +173,9 @@ async function resolveLocalPath(client, store, opts, dryRun, ctx) {
|
|
|
171
173
|
await store.remove(path);
|
|
172
174
|
return { path, verdict: "delete-local", detail: "remote-deleted, local clean" };
|
|
173
175
|
}
|
|
174
|
-
if (!dryRun)
|
|
175
|
-
await pushCreate(client, store, opts.repo, path);
|
|
176
|
+
if (!dryRun) {
|
|
177
|
+
return await pushCreate(client, store, opts.repo, path, "resurrect", "remote-deleted, local dirty");
|
|
178
|
+
}
|
|
176
179
|
return { path, verdict: "resurrect", detail: "remote-deleted, local dirty" };
|
|
177
180
|
}
|
|
178
181
|
// --- effecting helpers -------------------------------------------------------
|
|
@@ -180,73 +183,74 @@ async function readUserContent(store, path) {
|
|
|
180
183
|
const text = (await store.read(path)) ?? "";
|
|
181
184
|
return stripToUserContent(text);
|
|
182
185
|
}
|
|
183
|
-
/** Split a file into stored-shape fields, dropping all `$*` intrinsic lines. */
|
|
184
|
-
function stripToUserContent(text) {
|
|
185
|
-
const lf = text.replace(/\r\n/g, "\n");
|
|
186
|
-
// Reuse the same split/strip path the hash uses so bytes are canonical.
|
|
187
|
-
const { frontmatter_raw, body } = split(lf);
|
|
188
|
-
return { frontmatter_raw: extractSystemProperties(frontmatter_raw).raw, body };
|
|
189
|
-
}
|
|
190
186
|
async function materializeVersion(client, store, repo, path, versionId) {
|
|
191
187
|
const v = await client.docs.get_version(repo, versionId);
|
|
192
|
-
await store
|
|
188
|
+
await materializeAt(store, path, v);
|
|
193
189
|
}
|
|
194
190
|
/** Repair a clean local file's embedded provenance to the given version. */
|
|
195
191
|
async function materializeInPlace(client, store, repo, path, versionId) {
|
|
196
|
-
// The content already equals the version; re-render from the authoritative
|
|
197
|
-
// remote version so intrinsics are exact. Keep mtime so a metadata-only
|
|
198
|
-
// stamp cannot win an Obsidian/iCloud race against unsynced typing.
|
|
199
192
|
const v = await client.docs.get_version(repo, versionId);
|
|
200
|
-
await store
|
|
193
|
+
await materializeAt(store, path, v, { preserveMtime: true });
|
|
201
194
|
}
|
|
202
195
|
async function pushEdit(client, store, repo, path, prevVersionId) {
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
await store.write(path, renderMaterialized(v), { preserveMtime: true });
|
|
196
|
+
const user = await readUserContent(store, path);
|
|
197
|
+
await putAndAck(client, store, repo, path, prevVersionId, user);
|
|
206
198
|
}
|
|
207
199
|
async function pushMove(client, store, repo, path, prevVersionId) {
|
|
208
|
-
const
|
|
200
|
+
const user = await readUserContent(store, path);
|
|
209
201
|
// A put whose path differs from prev's path is a move preserving identity.
|
|
210
|
-
|
|
211
|
-
await store.write(path, renderMaterialized(v), { preserveMtime: true });
|
|
202
|
+
await putAndAck(client, store, repo, path, prevVersionId, user);
|
|
212
203
|
}
|
|
213
|
-
async function pushCreate(client, store, repo, path) {
|
|
214
|
-
const
|
|
204
|
+
async function pushCreate(client, store, repo, path, successVerdict = "push", successDetail = "local creation") {
|
|
205
|
+
const user = await readUserContent(store, path);
|
|
215
206
|
try {
|
|
216
|
-
const v = await client.docs.create(repo, path,
|
|
207
|
+
const v = await client.docs.create(repo, path, user);
|
|
217
208
|
await store.write(path, renderMaterialized(v), { preserveMtime: true });
|
|
209
|
+
return { path, verdict: successVerdict, detail: successDetail };
|
|
218
210
|
}
|
|
219
211
|
catch (err) {
|
|
220
212
|
if (err instanceof KernelError && err.code === "create_conflict") {
|
|
221
|
-
// A doc appeared at this path since the index scan;
|
|
222
|
-
|
|
223
|
-
const current = err.data.current_version_id;
|
|
224
|
-
if (current)
|
|
225
|
-
await parkConflict(client, store, repo, path, current);
|
|
226
|
-
return;
|
|
213
|
+
// A doc appeared at this path since the index scan; rebase or park.
|
|
214
|
+
return await convergeOccupied(client, store, repo, path);
|
|
227
215
|
}
|
|
228
216
|
throw err;
|
|
229
217
|
}
|
|
230
218
|
}
|
|
231
219
|
/**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
* `$sync: ignore`. Collision-safe (version ids are unique), so replay never
|
|
235
|
-
* sprays duplicates.
|
|
220
|
+
* Rebase local bytes onto the live remote current at `path`, else park a
|
|
221
|
+
* sibling (better-sync WS2). Used for §4.9 rows 5–6 and create races.
|
|
236
222
|
*/
|
|
237
|
-
async function
|
|
238
|
-
const
|
|
239
|
-
const
|
|
240
|
-
|
|
223
|
+
async function convergeOccupied(client, store, repo, path) {
|
|
224
|
+
const text = (await store.read(path)) ?? "";
|
|
225
|
+
const remote = await client.docs.get(repo, path);
|
|
226
|
+
const decision = decideInbound({
|
|
227
|
+
localText: text,
|
|
228
|
+
remote,
|
|
229
|
+
hot: false,
|
|
230
|
+
canDefer: false,
|
|
231
|
+
});
|
|
232
|
+
const result = await effectInbound(client, store, repo, path, decision);
|
|
233
|
+
if (result === "noop" || decision.action === "noop") {
|
|
234
|
+
if (isIgnored(readFileIntrinsics(text))) {
|
|
235
|
+
return { path, verdict: "ignored" };
|
|
236
|
+
}
|
|
237
|
+
return { path, verdict: "clean", detail: "already converged" };
|
|
238
|
+
}
|
|
239
|
+
if (result === "parked") {
|
|
240
|
+
return { path, verdict: "conflict", detail: "rebase failed; parked remote sibling" };
|
|
241
|
+
}
|
|
242
|
+
if (decision.action === "rebase" || result === "applied") {
|
|
243
|
+
return { path, verdict: "rebase", detail: "local bytes put onto remote current" };
|
|
244
|
+
}
|
|
245
|
+
if (decision.action === "adopt") {
|
|
246
|
+
return { path, verdict: "adopt", detail: "content matches remote; provenance repaired" };
|
|
247
|
+
}
|
|
248
|
+
return { path, verdict: "conflict", detail: "could not converge occupied path" };
|
|
241
249
|
}
|
|
242
250
|
/** Conflict park keyed off the doc's *current* remote version (move race). */
|
|
243
251
|
async function parkConflictForCurrent(client, store, repo, path, embeddedVersionId) {
|
|
244
|
-
// Resolve the document's current version from the embedded (now-superseded)
|
|
245
|
-
// one, then park it. get_version gives us the doc; docs.get by its path finds
|
|
246
|
-
// the live current.
|
|
247
252
|
const superseded = await client.docs.get_version(repo, embeddedVersionId);
|
|
248
253
|
const current = await client.docs.get(repo, superseded.path);
|
|
249
|
-
|
|
250
|
-
await store.write(siblingPath, renderIgnoredSibling(current));
|
|
254
|
+
await parkIgnoredSibling(store, path, current);
|
|
251
255
|
}
|
|
252
256
|
//# sourceMappingURL=reconcile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/sync/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/sync/reconcile.ts"],"names":[],"mappings":"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"}
|