emdash-emit 0.1.11 → 0.1.13
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 +71 -0
- package/README.md +6 -0
- package/dist/cli/commands/conflicts.d.ts.map +1 -1
- package/dist/cli/commands/conflicts.js +50 -4
- package/dist/cli/commands/conflicts.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +2 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +14 -5
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +36 -2
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +25 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +12 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/client/api.d.ts +6 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +36 -0
- package/dist/client/api.js.map +1 -1
- package/dist/db/cache.d.ts +15 -0
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +157 -43
- package/dist/db/cache.js.map +1 -1
- package/dist/mcp/heartbeat.d.ts +35 -0
- package/dist/mcp/heartbeat.d.ts.map +1 -0
- package/dist/mcp/heartbeat.js +135 -0
- package/dist/mcp/heartbeat.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +7 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sync-conflicts.d.ts.map +1 -1
- package/dist/mcp/tools/sync-conflicts.js +28 -5
- package/dist/mcp/tools/sync-conflicts.js.map +1 -1
- package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
- package/dist/mcp/tools/sync-doctor.js +5 -0
- package/dist/mcp/tools/sync-doctor.js.map +1 -1
- package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
- package/dist/mcp/tools/sync-pull.js +8 -0
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +48 -5
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +7 -1
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/sync/conflicts.d.ts +25 -1
- package/dist/sync/conflicts.d.ts.map +1 -1
- package/dist/sync/conflicts.js +121 -4
- package/dist/sync/conflicts.js.map +1 -1
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +66 -3
- package/dist/sync/delete.js.map +1 -1
- package/dist/sync/doctor.d.ts +10 -0
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +153 -11
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/merge.d.ts +48 -8
- package/dist/sync/merge.d.ts.map +1 -1
- package/dist/sync/merge.js +89 -24
- package/dist/sync/merge.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +6 -1
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +19 -2
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/pull.d.ts +14 -1
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +71 -23
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts +8 -0
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +262 -31
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +11 -0
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +13 -1
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/taxonomies.d.ts +7 -0
- package/dist/sync/taxonomies.d.ts.map +1 -1
- package/dist/sync/taxonomies.js +28 -1
- package/dist/sync/taxonomies.js.map +1 -1
- package/dist/sync/terms.d.ts +5 -0
- package/dist/sync/terms.d.ts.map +1 -1
- package/dist/sync/terms.js +20 -3
- package/dist/sync/terms.js.map +1 -1
- package/package.json +1 -1
package/dist/sync/merge.js
CHANGED
|
@@ -27,12 +27,34 @@ function normalizeTermList(val) {
|
|
|
27
27
|
return [...new Set(val.map((v) => String(v)))].sort();
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
30
|
+
* 3-way merge for taxonomies frontmatter record (category, tag, etc.).
|
|
31
|
+
*
|
|
32
|
+
* Implements strict set-algebraic 3-way merge:
|
|
33
|
+
* localRemoved := base \ local
|
|
34
|
+
* localAdded := local \ base
|
|
35
|
+
* remoteRemoved := base \ remote
|
|
36
|
+
* remoteAdded := remote \ base
|
|
37
|
+
* localChanged := (local ≠ base)
|
|
38
|
+
* remoteChanged := (remote ≠ base)
|
|
39
|
+
*
|
|
40
|
+
* Evaluation order (strict):
|
|
41
|
+
* 1. localChanged = false -> Keep remote (local did not touch this taxonomy)
|
|
42
|
+
* 2. remoteChanged = false -> Push local (clean single-side edit)
|
|
43
|
+
* 3. Both changed:
|
|
44
|
+
* union := (base \ (localRemoved ∪ remoteRemoved)) ∪ localAdded ∪ remoteAdded
|
|
45
|
+
* 3a. union = local -> Push local (remote changes are subsumed)
|
|
46
|
+
* 3b. local = ∅ & remote ≠ ∅ -> Destructive wipe guard
|
|
47
|
+
* 3c. union ≠ local -> Automatically push union with explicit merge log.
|
|
48
|
+
* Conflicts only if:
|
|
49
|
+
* (i) Server rejects union (400/422)
|
|
50
|
+
* (ii) Remote performed rename/replacement (remoteRemoved ≠ ∅ ∧ remoteAdded ≠ ∅) AND strictRenameConflict=true
|
|
51
|
+
* (iii) Base snapshot is null (cannot compute 3-way)
|
|
32
52
|
*/
|
|
33
|
-
export function mergeTaxonomies(local, base, remote) {
|
|
53
|
+
export function mergeTaxonomies(local, base, remote, options) {
|
|
34
54
|
const merged = {};
|
|
35
55
|
const conflicts = [];
|
|
56
|
+
const autoMergedTaxonomies = [];
|
|
57
|
+
const wipeWarnings = [];
|
|
36
58
|
const names = new Set([
|
|
37
59
|
...Object.keys(local || {}),
|
|
38
60
|
...Object.keys(base || {}),
|
|
@@ -50,7 +72,7 @@ export function mergeTaxonomies(local, base, remote) {
|
|
|
50
72
|
}
|
|
51
73
|
continue;
|
|
52
74
|
}
|
|
53
|
-
// Case 2: Only local defined this taxonomy
|
|
75
|
+
// Case 2: Only local defined this taxonomy (remote omitted or deleted)
|
|
54
76
|
if (lDefined && !rDefined) {
|
|
55
77
|
if (!bDefined) {
|
|
56
78
|
merged[name] = local[name];
|
|
@@ -71,7 +93,6 @@ export function mergeTaxonomies(local, base, remote) {
|
|
|
71
93
|
}
|
|
72
94
|
// Case 3: Only remote defined this taxonomy (local omitted the field)
|
|
73
95
|
if (!lDefined && rDefined) {
|
|
74
|
-
// Local didn't specify this taxonomy: accept remote state
|
|
75
96
|
merged[name] = remote[name];
|
|
76
97
|
continue;
|
|
77
98
|
}
|
|
@@ -84,6 +105,7 @@ export function mergeTaxonomies(local, base, remote) {
|
|
|
84
105
|
merged[name] = lRaw;
|
|
85
106
|
continue;
|
|
86
107
|
}
|
|
108
|
+
// (iii) Base is null / missing: cannot compute 3-way -> conservative conflict
|
|
87
109
|
if (!bDefined) {
|
|
88
110
|
conflicts.push(name);
|
|
89
111
|
merged[name] = lRaw;
|
|
@@ -97,26 +119,57 @@ export function mergeTaxonomies(local, base, remote) {
|
|
|
97
119
|
const localRemoved = b.filter((x) => !localSet.has(x));
|
|
98
120
|
const remoteAdded = r.filter((x) => !baseSet.has(x));
|
|
99
121
|
const remoteRemoved = b.filter((x) => !remoteSet.has(x));
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
122
|
+
const localChanged = localAdded.length > 0 || localRemoved.length > 0;
|
|
123
|
+
const remoteChanged = remoteAdded.length > 0 || remoteRemoved.length > 0;
|
|
124
|
+
// 1. localChanged = false -> Keep remote (local untouched)
|
|
125
|
+
if (!localChanged) {
|
|
126
|
+
merged[name] = rRaw;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// 2. remoteChanged = false -> Push local (clean single-side edit)
|
|
130
|
+
if (!remoteChanged) {
|
|
131
|
+
merged[name] = lRaw;
|
|
132
|
+
continue;
|
|
108
133
|
}
|
|
109
|
-
//
|
|
110
|
-
//
|
|
134
|
+
// 3. Both sides changed:
|
|
135
|
+
// union := (base \ (localRemoved ∪ remoteRemoved)) ∪ localAdded ∪ remoteAdded
|
|
111
136
|
const allRemovals = new Set([...localRemoved, ...remoteRemoved]);
|
|
112
|
-
const
|
|
137
|
+
const union = [
|
|
113
138
|
...b.filter((x) => !allRemovals.has(x)),
|
|
114
139
|
...localAdded,
|
|
115
|
-
...remoteAdded.filter((x) => !
|
|
140
|
+
...remoteAdded.filter((x) => !localAdded.includes(x)),
|
|
116
141
|
];
|
|
117
|
-
|
|
142
|
+
// 3a. union = local -> clean (remote changes are subsumed)
|
|
143
|
+
const unionSet = new Set(union);
|
|
144
|
+
const isUnionEqualLocal = unionSet.size === localSet.size && [...unionSet].every((x) => localSet.has(x));
|
|
145
|
+
if (isUnionEqualLocal) {
|
|
146
|
+
merged[name] = lRaw;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// 3b. Destructive wipe guard: local = ∅ and remote ≠ ∅
|
|
150
|
+
if (l.length === 0 && r.length > 0) {
|
|
151
|
+
wipeWarnings.push({
|
|
152
|
+
name,
|
|
153
|
+
remoteTerms: r,
|
|
154
|
+
remoteAdded,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
// 3c. union ≠ local: check for remote replacement under strictRenameConflict
|
|
158
|
+
const isRemoteReplacement = remoteRemoved.length > 0 && remoteAdded.length > 0;
|
|
159
|
+
if (isRemoteReplacement && options?.strictRenameConflict) {
|
|
160
|
+
conflicts.push(name);
|
|
161
|
+
merged[name] = lRaw;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// Default: auto-merge union and record change log
|
|
165
|
+
merged[name] = union;
|
|
166
|
+
autoMergedTaxonomies.push({
|
|
167
|
+
name,
|
|
168
|
+
remoteAdded,
|
|
169
|
+
remoteRemoved,
|
|
170
|
+
});
|
|
118
171
|
}
|
|
119
|
-
return { merged, conflicts };
|
|
172
|
+
return { merged, conflicts, autoMergedTaxonomies, wipeWarnings };
|
|
120
173
|
}
|
|
121
174
|
/**
|
|
122
175
|
* Merges frontmatter fields key by key.
|
|
@@ -125,9 +178,11 @@ export function mergeTaxonomies(local, base, remote) {
|
|
|
125
178
|
* and a warning is logged. Taxonomies are the exception: they are merged per taxonomy name with set
|
|
126
179
|
* semantics and true conflicts are reported via `taxonomyConflicts` instead of being overwritten.
|
|
127
180
|
*/
|
|
128
|
-
export function mergeFrontmatter(local, base, remote) {
|
|
181
|
+
export function mergeFrontmatter(local, base, remote, options) {
|
|
129
182
|
const warnings = [];
|
|
130
183
|
let taxonomyConflicts = [];
|
|
184
|
+
let autoMergedTaxonomies;
|
|
185
|
+
let wipeWarnings;
|
|
131
186
|
const merged = { ...remote };
|
|
132
187
|
// Helper to check equality
|
|
133
188
|
const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
@@ -144,9 +199,11 @@ export function mergeFrontmatter(local, base, remote) {
|
|
|
144
199
|
];
|
|
145
200
|
for (const key of keys) {
|
|
146
201
|
if (key === 'taxonomies') {
|
|
147
|
-
const tax = mergeTaxonomies(local.taxonomies, base ? base.taxonomies : null, remote.taxonomies);
|
|
202
|
+
const tax = mergeTaxonomies(local.taxonomies, base ? base.taxonomies : null, remote.taxonomies, options);
|
|
148
203
|
merged.taxonomies = tax.merged;
|
|
149
204
|
taxonomyConflicts = tax.conflicts;
|
|
205
|
+
autoMergedTaxonomies = tax.autoMergedTaxonomies;
|
|
206
|
+
wipeWarnings = tax.wipeWarnings;
|
|
150
207
|
continue;
|
|
151
208
|
}
|
|
152
209
|
const localVal = local[key];
|
|
@@ -181,7 +238,13 @@ export function mergeFrontmatter(local, base, remote) {
|
|
|
181
238
|
// Preserve mandatory immutable fields
|
|
182
239
|
merged.id = remote.id || local.id;
|
|
183
240
|
merged.collection = remote.collection || local.collection;
|
|
184
|
-
return {
|
|
241
|
+
return {
|
|
242
|
+
merged,
|
|
243
|
+
warnings,
|
|
244
|
+
taxonomyConflicts,
|
|
245
|
+
autoMergedTaxonomies,
|
|
246
|
+
wipeWarnings,
|
|
247
|
+
};
|
|
185
248
|
}
|
|
186
249
|
/**
|
|
187
250
|
* Merges markdown body line by line using diff3.
|
|
@@ -205,8 +268,8 @@ export function mergeBody(localBody, baseBody, remoteBody) {
|
|
|
205
268
|
/**
|
|
206
269
|
* Executes a Hybrid 3-Way Merge separating frontmatter structured merge and markdown text merge.
|
|
207
270
|
*/
|
|
208
|
-
export function hybrid3WayMerge(local, base, remote) {
|
|
209
|
-
const { merged: frontmatter, warnings, taxonomyConflicts, } = mergeFrontmatter(local.frontmatter, base ? base.frontmatter : null, remote.frontmatter);
|
|
271
|
+
export function hybrid3WayMerge(local, base, remote, options) {
|
|
272
|
+
const { merged: frontmatter, warnings, taxonomyConflicts, autoMergedTaxonomies, wipeWarnings, } = mergeFrontmatter(local.frontmatter, base ? base.frontmatter : null, remote.frontmatter, options);
|
|
210
273
|
const baseBody = base ? base.body : '';
|
|
211
274
|
const { mergedBody: body, hasConflict } = mergeBody(local.body, baseBody, remote.body);
|
|
212
275
|
return {
|
|
@@ -215,6 +278,8 @@ export function hybrid3WayMerge(local, base, remote) {
|
|
|
215
278
|
body,
|
|
216
279
|
warnings,
|
|
217
280
|
taxonomyConflicts,
|
|
281
|
+
autoMergedTaxonomies,
|
|
282
|
+
wipeWarnings,
|
|
218
283
|
};
|
|
219
284
|
}
|
|
220
285
|
//# sourceMappingURL=merge.js.map
|
package/dist/sync/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,10 +51,15 @@ export interface PushAllResult {
|
|
|
51
51
|
skipped: number;
|
|
52
52
|
invalid: number;
|
|
53
53
|
results: PushResult[];
|
|
54
|
+
skippedItems?: Array<{
|
|
55
|
+
slug: string;
|
|
56
|
+
filePath: string;
|
|
57
|
+
reason: 'conflict_pending' | 'delete_pending' | 'taxonomy_apply_pending';
|
|
58
|
+
}>;
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
56
61
|
* Orchestrates pushing all modified/untracked files in the workspace.
|
|
57
|
-
* Excludes synced and invalid (YAML parse error) files
|
|
62
|
+
* Excludes synced, conflict_pending, delete_pending, taxonomy_apply_pending, and invalid (YAML parse error) files.
|
|
58
63
|
* Reusable across CLI and MCP servers.
|
|
59
64
|
*/
|
|
60
65
|
export declare function pushAll(options: PushAllOptions): Promise<PushAllResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/sync/orchestrator.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAK3E,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAKjF;CACF;AAED,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;CACvF;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA8LnF;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/sync/orchestrator.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAK3E,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAKjF;CACF;AAED,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;CACvF;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA8LnF;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,wBAAwB,CAAC;KAC1E,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoD7E"}
|
|
@@ -217,12 +217,28 @@ export async function pullBatch(options) {
|
|
|
217
217
|
}
|
|
218
218
|
/**
|
|
219
219
|
* Orchestrates pushing all modified/untracked files in the workspace.
|
|
220
|
-
* Excludes synced and invalid (YAML parse error) files
|
|
220
|
+
* Excludes synced, conflict_pending, delete_pending, taxonomy_apply_pending, and invalid (YAML parse error) files.
|
|
221
221
|
* Reusable across CLI and MCP servers.
|
|
222
222
|
*/
|
|
223
223
|
export async function pushAll(options) {
|
|
224
224
|
const status = getWorkspaceStatus(options.workspaceRoot, options.cache, options.collection);
|
|
225
|
-
const
|
|
225
|
+
const eligibleItems = status.items.filter((i) => i.syncStatus === 'modified' || i.syncStatus === 'untracked');
|
|
226
|
+
const skippedItems = [];
|
|
227
|
+
const toPush = eligibleItems.filter((i) => {
|
|
228
|
+
if (i.deletePending) {
|
|
229
|
+
skippedItems.push({ slug: i.slug, filePath: i.filePath, reason: 'delete_pending' });
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
if (i.conflictPending) {
|
|
233
|
+
skippedItems.push({ slug: i.slug, filePath: i.filePath, reason: 'conflict_pending' });
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
if (i.taxonomyApplyPending) {
|
|
237
|
+
skippedItems.push({ slug: i.slug, filePath: i.filePath, reason: 'taxonomy_apply_pending' });
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
return true;
|
|
241
|
+
});
|
|
226
242
|
const results = [];
|
|
227
243
|
let pushed = 0;
|
|
228
244
|
for (const item of toPush) {
|
|
@@ -244,6 +260,7 @@ export async function pushAll(options) {
|
|
|
244
260
|
skipped: status.items.length - toPush.length,
|
|
245
261
|
invalid: status.summary.invalid,
|
|
246
262
|
results,
|
|
263
|
+
...(skippedItems.length > 0 ? { skippedItems } : {}),
|
|
247
264
|
};
|
|
248
265
|
}
|
|
249
266
|
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/sync/orchestrator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/sync/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/pull.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface PullResult {
|
|
|
20
20
|
updated: boolean;
|
|
21
21
|
skipped?: boolean;
|
|
22
22
|
deleted?: boolean;
|
|
23
|
+
orphan?: boolean;
|
|
23
24
|
title?: string;
|
|
24
25
|
/** True when the local file has unpushed edits and Emit kept them instead of applying remote changes. */
|
|
25
26
|
localEditsPreserved?: boolean;
|
|
@@ -94,7 +95,19 @@ export declare function findLocalFilesByUlid(workspaceRoot: string, collection:
|
|
|
94
95
|
* silently discarded during a pull.
|
|
95
96
|
* Returns the relative path of the preserved copy, or null when preservation failed.
|
|
96
97
|
*/
|
|
97
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Resolves canonical relative path for an article symmetrically between
|
|
100
|
+
* batch fast-path and full pull (EMIT-005 / R7).
|
|
101
|
+
*/
|
|
102
|
+
export declare function resolveCanonicalArticlePath(collection: string, status: string, id: string, title: string, dates: {
|
|
103
|
+
publishedAt?: string | null;
|
|
104
|
+
createdAt?: string | null;
|
|
105
|
+
updatedAt?: string | null;
|
|
106
|
+
}, existingPrefix?: string | null): string;
|
|
107
|
+
export declare function quarantineLocalCopy(workspaceRoot: string, collection: string, sourceRelPath: string, content: string, options?: {
|
|
108
|
+
isForce?: boolean;
|
|
109
|
+
existingCopyHash?: string | null;
|
|
110
|
+
}): string | null;
|
|
98
111
|
/**
|
|
99
112
|
* Discovers the server's maximum allowed limit for content list queries from /_emdash/api/openapi.json.
|
|
100
113
|
* Defaults to 100 if openapi.json cannot be fetched or parsed.
|
package/dist/sync/pull.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/sync/pull.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/sync/pull.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/pull.js
CHANGED
|
@@ -25,13 +25,13 @@ import crypto from 'node:crypto';
|
|
|
25
25
|
import { apiResponseToLocal } from '../client/mapper.js';
|
|
26
26
|
import { ApiError } from '../client/error.js';
|
|
27
27
|
import { createAuthedFetch } from '../client/http.js';
|
|
28
|
-
import { unwrapEnvelope, extractRev } from '../client/api.js';
|
|
28
|
+
import { unwrapEnvelope, extractRev, normalizeRev } from '../client/api.js';
|
|
29
29
|
import { computeArticleRelativePath, extractDatePrefixFromPath, parseMarkdown, serializeMarkdown, lenientRepairMarkdownFrontmatter, } from '../utils/frontmatter.js';
|
|
30
30
|
import { extractUlidFromFilename } from '../utils/naming.js';
|
|
31
31
|
import { loadLocalTaxonomyCandidates } from './taxonomies.js';
|
|
32
32
|
import { syncRemoteBylines } from './bylines.js';
|
|
33
33
|
import { updateConfigSyncedVersion } from '../utils/config.js';
|
|
34
|
-
import { fetchAssignedTerms as fetchAssignedTermsShared } from './terms.js';
|
|
34
|
+
import { fetchAssignedTerms as fetchAssignedTermsShared, computeTaxonomyHash } from './terms.js';
|
|
35
35
|
/** Subdirectory (under a collection) reserved for preserved divergent local copies. */
|
|
36
36
|
export const CONFLICTS_SUBDIR = 'conflicts';
|
|
37
37
|
/**
|
|
@@ -104,15 +104,36 @@ export function findLocalFilesByUlid(workspaceRoot, collection, id) {
|
|
|
104
104
|
* silently discarded during a pull.
|
|
105
105
|
* Returns the relative path of the preserved copy, or null when preservation failed.
|
|
106
106
|
*/
|
|
107
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Resolves canonical relative path for an article symmetrically between
|
|
109
|
+
* batch fast-path and full pull (EMIT-005 / R7).
|
|
110
|
+
*/
|
|
111
|
+
export function resolveCanonicalArticlePath(collection, status, id, title, dates, existingPrefix) {
|
|
112
|
+
const dateInput = dates.publishedAt || existingPrefix || dates.createdAt || dates.updatedAt || null;
|
|
113
|
+
return computeArticleRelativePath(collection, status, id, title, dateInput);
|
|
114
|
+
}
|
|
115
|
+
export function quarantineLocalCopy(workspaceRoot, collection, sourceRelPath, content, options) {
|
|
108
116
|
const conflictsDir = path.join(workspaceRoot, collection, CONFLICTS_SUBDIR);
|
|
109
117
|
const baseName = path.basename(sourceRelPath).replace(/\.md$/i, '');
|
|
110
|
-
|
|
118
|
+
const suffixExt = options?.isForce ? '.local-dropped.md' : '.conflict.md';
|
|
119
|
+
let quarantineRel = path.join(collection, CONFLICTS_SUBDIR, `${baseName}${suffixExt}`);
|
|
120
|
+
const quarantineFull = path.join(workspaceRoot, quarantineRel);
|
|
111
121
|
try {
|
|
112
122
|
fs.mkdirSync(conflictsDir, { recursive: true });
|
|
123
|
+
// Deduplication check: if canonical conflict file exists and is unedited, overwrite without incrementing
|
|
124
|
+
if (!options?.isForce && fs.existsSync(quarantineFull)) {
|
|
125
|
+
const existingDiskHash = calculateHash(fs.readFileSync(quarantineFull, 'utf8'));
|
|
126
|
+
if ((options?.existingCopyHash && existingDiskHash === options.existingCopyHash) ||
|
|
127
|
+
existingDiskHash === calculateHash(content)) {
|
|
128
|
+
fs.writeFileSync(quarantineFull, content, 'utf8');
|
|
129
|
+
return quarantineRel;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
113
132
|
let suffix = 2;
|
|
114
133
|
while (fs.existsSync(path.join(workspaceRoot, quarantineRel))) {
|
|
115
|
-
quarantineRel = path.join(collection, CONFLICTS_SUBDIR,
|
|
134
|
+
quarantineRel = path.join(collection, CONFLICTS_SUBDIR, options?.isForce
|
|
135
|
+
? `${baseName}.local-dropped-${suffix}.md`
|
|
136
|
+
: `${baseName}.conflict-${suffix}.md`);
|
|
116
137
|
suffix += 1;
|
|
117
138
|
if (suffix > 100)
|
|
118
139
|
return null;
|
|
@@ -129,7 +150,7 @@ export function quarantineLocalCopy(workspaceRoot, collection, sourceRelPath, co
|
|
|
129
150
|
* preserves every copy whose content does not match the last synced baseline hash or the
|
|
130
151
|
* content Emit is about to write.
|
|
131
152
|
*/
|
|
132
|
-
function quarantineDivergentLocalCopies(options, collection, localRelPaths, baselineHash, canonicalContent) {
|
|
153
|
+
function quarantineDivergentLocalCopies(options, collection, localRelPaths, baselineHash, canonicalContent, existingCopyHash) {
|
|
133
154
|
const quarantined = [];
|
|
134
155
|
for (const localRel of localRelPaths) {
|
|
135
156
|
const localFull = path.resolve(options.workspaceRoot, localRel);
|
|
@@ -148,7 +169,10 @@ function quarantineDivergentLocalCopies(options, collection, localRelPaths, base
|
|
|
148
169
|
// Identical to the last synced state: carries no information worth preserving.
|
|
149
170
|
if (baselineHash && calculateHash(localContent) === baselineHash)
|
|
150
171
|
continue;
|
|
151
|
-
const quarantineRel = quarantineLocalCopy(options.workspaceRoot, collection, localRel, localContent
|
|
172
|
+
const quarantineRel = quarantineLocalCopy(options.workspaceRoot, collection, localRel, localContent, {
|
|
173
|
+
isForce: Boolean(options.force),
|
|
174
|
+
existingCopyHash,
|
|
175
|
+
});
|
|
152
176
|
if (quarantineRel) {
|
|
153
177
|
quarantined.push({
|
|
154
178
|
sourceFilePath: localRel,
|
|
@@ -343,8 +367,12 @@ export async function pullArticle(collection, id, options) {
|
|
|
343
367
|
if (options.force)
|
|
344
368
|
return null;
|
|
345
369
|
const existingSync = options.cache.getSyncState(id);
|
|
346
|
-
const
|
|
347
|
-
|
|
370
|
+
const rawObj = (item.rawItem || item);
|
|
371
|
+
const rawRevCandidate = String(item._rev || item.rev || item.version || rawObj._rev || '');
|
|
372
|
+
const remoteRev = extractRev(rawObj, rawRevCandidate);
|
|
373
|
+
if (!existingSync ||
|
|
374
|
+
!remoteRev ||
|
|
375
|
+
normalizeRev(existingSync.remoteRev) !== normalizeRev(remoteRev)) {
|
|
348
376
|
return null;
|
|
349
377
|
}
|
|
350
378
|
const fullExistingPath = path.join(options.workspaceRoot, existingSync.localFilePath);
|
|
@@ -356,10 +384,14 @@ export async function pullArticle(collection, id, options) {
|
|
|
356
384
|
const currentDiskHash = calculateHash(currentDiskContent);
|
|
357
385
|
// Check if file path matches current naming standard
|
|
358
386
|
const existingPrefix = extractDatePrefixFromPath(existingSync.localFilePath);
|
|
359
|
-
const rawData = (
|
|
360
|
-
const rawTitle = String(rawData.title || item.title || item.slug || '');
|
|
361
|
-
const
|
|
362
|
-
const expectedRelPath =
|
|
387
|
+
const rawData = (rawObj.data || rawObj.item || {}) || {};
|
|
388
|
+
const rawTitle = String(rawData.title || rawObj.title || item.title || rawObj.slug || item.slug || '');
|
|
389
|
+
const targetStatus = String(rawObj.status || item.status || 'draft');
|
|
390
|
+
const expectedRelPath = resolveCanonicalArticlePath(collection, targetStatus, id, rawTitle, {
|
|
391
|
+
publishedAt: rawObj.publishedAt || item.publishedAt || null,
|
|
392
|
+
createdAt: rawObj.createdAt || item.createdAt || null,
|
|
393
|
+
updatedAt: rawObj.updatedAt || item.updatedAt || null,
|
|
394
|
+
}, existingPrefix);
|
|
363
395
|
// If path matches and contents are unchanged, safely skip (only if local frontmatter is valid YAML)
|
|
364
396
|
if (existingSync.localFilePath === expectedRelPath) {
|
|
365
397
|
if (currentDiskHash === existingSync.localHash) {
|
|
@@ -399,7 +431,7 @@ export async function pullArticle(collection, id, options) {
|
|
|
399
431
|
...options,
|
|
400
432
|
bylineIdToSlug: resolvedBylineMap,
|
|
401
433
|
};
|
|
402
|
-
const remoteLocal = apiResponseToLocal(
|
|
434
|
+
const remoteLocal = apiResponseToLocal(rawObj, effectiveOptions);
|
|
403
435
|
const [categoriesTerms, tagsTerms] = await Promise.all([
|
|
404
436
|
fetchAssignedTerms('category'),
|
|
405
437
|
fetchAssignedTerms('tag'),
|
|
@@ -436,6 +468,8 @@ export async function pullArticle(collection, id, options) {
|
|
|
436
468
|
status: parsedRepaired.frontmatter.status,
|
|
437
469
|
slug: parsedRepaired.frontmatter.slug,
|
|
438
470
|
lastSyncedAt: Math.floor(Date.now() / 1000),
|
|
471
|
+
remoteTaxonomyHash: computeTaxonomyHash(remoteLocal.frontmatter.taxonomies?.categories, remoteLocal.frontmatter.taxonomies?.tags),
|
|
472
|
+
taxonomyApplyPending: 0,
|
|
439
473
|
});
|
|
440
474
|
return {
|
|
441
475
|
id,
|
|
@@ -473,8 +507,8 @@ export async function pullArticle(collection, id, options) {
|
|
|
473
507
|
},
|
|
474
508
|
});
|
|
475
509
|
if (!res.ok) {
|
|
476
|
-
if (res.status === 404) {
|
|
477
|
-
// Remote article was deleted (404)
|
|
510
|
+
if (res.status === 404 || res.status === 410) {
|
|
511
|
+
// Remote article was deleted (404/410)
|
|
478
512
|
const existingSync = options.cache.getSyncState(id);
|
|
479
513
|
if (existingSync) {
|
|
480
514
|
const fullPath = path.join(options.workspaceRoot, existingSync.localFilePath);
|
|
@@ -499,6 +533,18 @@ export async function pullArticle(collection, id, options) {
|
|
|
499
533
|
deleted: true,
|
|
500
534
|
};
|
|
501
535
|
}
|
|
536
|
+
else {
|
|
537
|
+
// Local file has unpushed edits: preserve as orphan!
|
|
538
|
+
return {
|
|
539
|
+
id,
|
|
540
|
+
slug: existingSync.slug,
|
|
541
|
+
status: existingSync.status,
|
|
542
|
+
filePath: existingSync.localFilePath,
|
|
543
|
+
updated: false,
|
|
544
|
+
orphan: true,
|
|
545
|
+
localEditsPreserved: true,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
502
548
|
}
|
|
503
549
|
}
|
|
504
550
|
}
|
|
@@ -550,12 +596,11 @@ export async function pullArticle(collection, id, options) {
|
|
|
550
596
|
: preferredDiskMatch
|
|
551
597
|
? extractDatePrefixFromPath(preferredDiskMatch)
|
|
552
598
|
: null;
|
|
553
|
-
const
|
|
554
|
-
|
|
555
|
-
rawItem.createdAt ||
|
|
556
|
-
rawItem.updatedAt ||
|
|
557
|
-
|
|
558
|
-
const relPath = computeArticleRelativePath(frontmatter.collection, frontmatter.status, frontmatter.id, frontmatter.title || frontmatter.slug, dateInput);
|
|
599
|
+
const relPath = resolveCanonicalArticlePath(frontmatter.collection, frontmatter.status, frontmatter.id, frontmatter.title || frontmatter.slug, {
|
|
600
|
+
publishedAt: frontmatter.publishedAt || rawItem.publishedAt || null,
|
|
601
|
+
createdAt: rawItem.createdAt || null,
|
|
602
|
+
updatedAt: rawItem.updatedAt || null,
|
|
603
|
+
}, existingPrefix);
|
|
559
604
|
const fullFilePath = path.join(options.workspaceRoot, relPath);
|
|
560
605
|
// Path tracking: Remove any previous file(s) for this ULID at a different path
|
|
561
606
|
// BEFORE writing fullFilePath so case-insensitive filesystems (e.g. macOS APFS)
|
|
@@ -567,7 +612,7 @@ export async function pullArticle(collection, id, options) {
|
|
|
567
612
|
const canonicalResolved = path.resolve(fullFilePath);
|
|
568
613
|
// Data safety: preserve every local copy whose content diverges from the last synced
|
|
569
614
|
// baseline (or has no cache baseline at all) before it is overwritten or unlinked.
|
|
570
|
-
const quarantined = quarantineDivergentLocalCopies(options, frontmatter.collection, staleRelPaths, existingSync?.localHash, markdownContent);
|
|
615
|
+
const quarantined = quarantineDivergentLocalCopies(options, frontmatter.collection, staleRelPaths, existingSync?.localHash, markdownContent, existingSync?.conflictCopyHash);
|
|
571
616
|
for (const staleRel of staleRelPaths) {
|
|
572
617
|
const staleFull = path.resolve(options.workspaceRoot, staleRel);
|
|
573
618
|
if (staleFull !== canonicalResolved && fs.existsSync(staleFull)) {
|
|
@@ -600,6 +645,9 @@ export async function pullArticle(collection, id, options) {
|
|
|
600
645
|
status: frontmatter.status,
|
|
601
646
|
slug: frontmatter.slug,
|
|
602
647
|
lastSyncedAt: Math.floor(Date.now() / 1000),
|
|
648
|
+
remoteTaxonomyHash: computeTaxonomyHash(frontmatter.taxonomies?.categories, frontmatter.taxonomies?.tags),
|
|
649
|
+
taxonomyApplyPending: 0,
|
|
650
|
+
...(options.force ? { conflictPending: 0, conflictCopyHash: null } : {}),
|
|
603
651
|
});
|
|
604
652
|
// Update entries cache
|
|
605
653
|
options.cache.saveEntry({
|