emdash-emit 0.1.10 → 0.1.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 +135 -0
- package/README.md +24 -4
- package/dist/cli/commands/conflicts.d.ts.map +1 -1
- package/dist/cli/commands/conflicts.js +45 -1
- package/dist/cli/commands/conflicts.js.map +1 -1
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +5 -4
- 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 +46 -3
- 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 +18 -4
- package/dist/cli/commands/status.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 +11 -0
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +136 -7
- package/dist/db/cache.js.map +1 -1
- package/dist/mcp/heartbeat.d.ts +29 -0
- package/dist/mcp/heartbeat.d.ts.map +1 -0
- package/dist/mcp/heartbeat.js +132 -0
- package/dist/mcp/heartbeat.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +38 -5
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/sync/conflicts.d.ts +24 -0
- package/dist/sync/conflicts.d.ts.map +1 -1
- package/dist/sync/conflicts.js +111 -0
- 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 +197 -6
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/merge.d.ts +59 -3
- package/dist/sync/merge.d.ts.map +1 -1
- package/dist/sync/merge.js +177 -5
- 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 +15 -2
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/pull.d.ts +5 -1
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +174 -148
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts +6 -0
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +155 -5
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +9 -0
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +10 -1
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/terms.d.ts +32 -0
- package/dist/sync/terms.d.ts.map +1 -0
- package/dist/sync/terms.js +62 -0
- package/dist/sync/terms.js.map +1 -0
- package/package.json +2 -1
package/dist/sync/doctor.js
CHANGED
|
@@ -21,11 +21,78 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import fs from 'node:fs';
|
|
23
23
|
import path from 'node:path';
|
|
24
|
+
import yaml from 'js-yaml';
|
|
24
25
|
import { getPackageVersion } from '../utils/version.js';
|
|
25
26
|
import { parseMarkdown, lenientRepairMarkdownFrontmatter } from '../utils/frontmatter.js';
|
|
26
27
|
import { listConflicts } from './conflicts.js';
|
|
27
28
|
import { getWorkspaceStatus } from './status.js';
|
|
28
|
-
import {
|
|
29
|
+
import { calculateHash } from './pull.js';
|
|
30
|
+
import { checkMcpProcess } from '../mcp/heartbeat.js';
|
|
31
|
+
/**
|
|
32
|
+
* Scans article markdown to separate standard body image references from
|
|
33
|
+
* informational references (code blocks, inline code, HTML comments, or placeholder URLs).
|
|
34
|
+
*/
|
|
35
|
+
export function scanArticleMediaDetailed(bodyMarkdown) {
|
|
36
|
+
const normalRefs = new Set();
|
|
37
|
+
const informationalRefs = new Set();
|
|
38
|
+
const lines = bodyMarkdown.split('\n');
|
|
39
|
+
let inFence = false;
|
|
40
|
+
let fenceDelimiter = '';
|
|
41
|
+
for (const line of lines) {
|
|
42
|
+
const trimmed = line.trim();
|
|
43
|
+
// Note: Doctor treats both backticks and tildes (~~~) as fences for diagnostic
|
|
44
|
+
// reporting to avoid false warnings on code examples, whereas push guards (G5/G11)
|
|
45
|
+
// strictly exempt only backtick fences per AGENTS.md.
|
|
46
|
+
if (trimmed.startsWith('```') || trimmed.startsWith('~~~')) {
|
|
47
|
+
if (!inFence) {
|
|
48
|
+
inFence = true;
|
|
49
|
+
fenceDelimiter = trimmed.slice(0, 3);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
else if (trimmed.startsWith(fenceDelimiter)) {
|
|
53
|
+
inFence = false;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Markdown image syntax: 
|
|
58
|
+
const mdRegex = /!\[.*?\]\(([^)\s]+)(?:\s+["'].*?["'])?\)/g;
|
|
59
|
+
let match;
|
|
60
|
+
while ((match = mdRegex.exec(line)) !== null) {
|
|
61
|
+
const url = match[1].trim();
|
|
62
|
+
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
63
|
+
const isPlaceholder = url.includes('<') && url.includes('>');
|
|
64
|
+
const isInlineCode = line.includes('`' + match[0]) ||
|
|
65
|
+
(line.indexOf('`') !== -1 &&
|
|
66
|
+
line.indexOf('`') < match.index &&
|
|
67
|
+
match.index < line.lastIndexOf('`'));
|
|
68
|
+
if (inFence || isInlineCode || isPlaceholder) {
|
|
69
|
+
informationalRefs.add(url);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
normalRefs.add(url);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// HTML img tags: <img src="...">
|
|
77
|
+
const htmlRegex = /<img[^>]+src=["']([^"']+)["']/gi;
|
|
78
|
+
while ((match = htmlRegex.exec(line)) !== null) {
|
|
79
|
+
const url = match[1].trim();
|
|
80
|
+
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
81
|
+
const isPlaceholder = url.includes('<') && url.includes('>');
|
|
82
|
+
if (inFence || isPlaceholder || line.includes('<!--')) {
|
|
83
|
+
informationalRefs.add(url);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
normalRefs.add(url);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
normalRefs: Array.from(normalRefs).sort(),
|
|
93
|
+
informationalRefs: Array.from(informationalRefs).sort(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
29
96
|
/**
|
|
30
97
|
* Runs a comprehensive health diagnostic across the workspace.
|
|
31
98
|
*/
|
|
@@ -143,6 +210,46 @@ export async function runWorkspaceDoctor(options) {
|
|
|
143
210
|
message: `No unresolved conflicts or rescue backups in ${collection}/conflicts/.`,
|
|
144
211
|
});
|
|
145
212
|
}
|
|
213
|
+
// 4b. Taxonomy Conflict Pending Alignment
|
|
214
|
+
const allStates = options.cache.getAllSyncStates();
|
|
215
|
+
const pendingStates = allStates.filter((s) => s.conflictPending === 1);
|
|
216
|
+
const autoClearedSlugs = [];
|
|
217
|
+
const manualResolutionRequired = [];
|
|
218
|
+
for (const state of pendingStates) {
|
|
219
|
+
const hasConflictCopy = conflictItems.some((c) => c.id === state.id || c.slug === state.slug);
|
|
220
|
+
const fullPath = path.join(options.workspaceRoot, state.localFilePath);
|
|
221
|
+
let hasDivergence = true;
|
|
222
|
+
if (fs.existsSync(fullPath)) {
|
|
223
|
+
const diskHash = calculateHash(fs.readFileSync(fullPath, 'utf8'));
|
|
224
|
+
hasDivergence = diskHash !== state.localHash;
|
|
225
|
+
}
|
|
226
|
+
if (!hasConflictCopy && !hasDivergence) {
|
|
227
|
+
// Auto-clear: no conflict copy and no divergence
|
|
228
|
+
options.cache.setConflictPending(state.id, false);
|
|
229
|
+
autoClearedSlugs.push(state.slug);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
manualResolutionRequired.push(state.slug);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (autoClearedSlugs.length > 0) {
|
|
236
|
+
checks.push({
|
|
237
|
+
id: 'conflict_pending_autoclear',
|
|
238
|
+
name: 'Conflict Pending Auto-Clear',
|
|
239
|
+
status: 'ok',
|
|
240
|
+
message: `Automatically cleared stale conflict_pending flag for ${autoClearedSlugs.length} article(s) (no conflict copies and no divergence).`,
|
|
241
|
+
details: autoClearedSlugs,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
if (manualResolutionRequired.length > 0) {
|
|
245
|
+
checks.push({
|
|
246
|
+
id: 'conflict_pending_manual',
|
|
247
|
+
name: 'Taxonomy Conflict Pending',
|
|
248
|
+
status: 'warning',
|
|
249
|
+
message: `${manualResolutionRequired.length} article(s) have pending taxonomy conflicts with existing rescue copies or unpushed edits. Run "emit push <file> --resolve-taxonomy=union|local|remote" to resolve.`,
|
|
250
|
+
details: manualResolutionRequired,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
146
253
|
// 5. Sync Status & Pending Modifications Check
|
|
147
254
|
const wsStatus = getWorkspaceStatus(options.workspaceRoot, options.cache, collection);
|
|
148
255
|
if (wsStatus.summary.modified > 0 || wsStatus.summary.untracked > 0) {
|
|
@@ -169,7 +276,43 @@ export async function runWorkspaceDoctor(options) {
|
|
|
169
276
|
});
|
|
170
277
|
}
|
|
171
278
|
// 6. Media References Integrity Check
|
|
279
|
+
// Index all local media companion YAMLs and files to resolve both local paths and storageKey URLs (D1)
|
|
280
|
+
const mediaDir = path.join(options.workspaceRoot, 'media');
|
|
281
|
+
const knownStorageKeys = new Set();
|
|
282
|
+
const knownMediaIds = new Set();
|
|
283
|
+
const knownLocalFiles = new Set();
|
|
284
|
+
if (fs.existsSync(mediaDir)) {
|
|
285
|
+
const mediaFiles = fs.readdirSync(mediaDir);
|
|
286
|
+
for (const f of mediaFiles) {
|
|
287
|
+
knownLocalFiles.add(f);
|
|
288
|
+
knownLocalFiles.add(path.posix.join('media', f));
|
|
289
|
+
if (f.endsWith('.yaml')) {
|
|
290
|
+
try {
|
|
291
|
+
const doc = yaml.load(fs.readFileSync(path.join(mediaDir, f), 'utf8'));
|
|
292
|
+
if (doc) {
|
|
293
|
+
if (typeof doc.storageKey === 'string' && doc.storageKey) {
|
|
294
|
+
knownStorageKeys.add(doc.storageKey);
|
|
295
|
+
}
|
|
296
|
+
if (typeof doc.id === 'string' && doc.id) {
|
|
297
|
+
knownMediaIds.add(doc.id);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
// ignore corrupted individual yaml
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
const draftsDir = path.join(mediaDir, 'drafts');
|
|
307
|
+
if (fs.existsSync(draftsDir)) {
|
|
308
|
+
for (const df of fs.readdirSync(draftsDir)) {
|
|
309
|
+
knownLocalFiles.add(path.posix.join('media', 'drafts', df));
|
|
310
|
+
knownLocalFiles.add(path.posix.join('../../media', 'drafts', df));
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
172
314
|
const missingMedia = [];
|
|
315
|
+
const informationalUnresolved = [];
|
|
173
316
|
for (const status of ['draft', 'published']) {
|
|
174
317
|
const dir = path.join(options.workspaceRoot, collection, status);
|
|
175
318
|
if (!fs.existsSync(dir))
|
|
@@ -178,13 +321,29 @@ export async function runWorkspaceDoctor(options) {
|
|
|
178
321
|
for (const file of files) {
|
|
179
322
|
try {
|
|
180
323
|
const content = fs.readFileSync(path.join(dir, file), 'utf8');
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
324
|
+
const detailed = scanArticleMediaDetailed(content);
|
|
325
|
+
const checkRef = (ref) => {
|
|
326
|
+
// Check 1: EmDash public storageKey route: /_emdash/api/media/file/<storageKey>
|
|
327
|
+
const storageKeyMatch = ref.match(/(?:^|\/)media\/file\/([^?#]+)/);
|
|
328
|
+
if (storageKeyMatch) {
|
|
329
|
+
const key = storageKeyMatch[1];
|
|
330
|
+
return knownStorageKeys.has(key);
|
|
331
|
+
}
|
|
332
|
+
// Check 2: Direct relative or local filesystem path
|
|
333
|
+
const cleanRef = ref.replace(/^[./]+/, '');
|
|
334
|
+
const directFull = path.isAbsolute(ref) ? ref : path.join(options.workspaceRoot, ref);
|
|
335
|
+
return (fs.existsSync(directFull) || knownLocalFiles.has(ref) || knownLocalFiles.has(cleanRef));
|
|
336
|
+
};
|
|
337
|
+
for (const ref of detailed.normalRefs) {
|
|
338
|
+
if (!checkRef(ref)) {
|
|
185
339
|
missingMedia.push(`${ref} (referenced by ${path.join(collection, status, file)})`);
|
|
186
340
|
}
|
|
187
341
|
}
|
|
342
|
+
for (const ref of detailed.informationalRefs) {
|
|
343
|
+
if (!checkRef(ref)) {
|
|
344
|
+
informationalUnresolved.push(`${ref} (code-example/placeholder in ${path.join(collection, status, file)})`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
188
347
|
}
|
|
189
348
|
catch {
|
|
190
349
|
// Skip unreadable files
|
|
@@ -200,12 +359,44 @@ export async function runWorkspaceDoctor(options) {
|
|
|
200
359
|
details: missingMedia,
|
|
201
360
|
});
|
|
202
361
|
}
|
|
362
|
+
else if (options.strictMedia && informationalUnresolved.length > 0) {
|
|
363
|
+
checks.push({
|
|
364
|
+
id: 'media_references',
|
|
365
|
+
name: 'Media References',
|
|
366
|
+
status: 'warning',
|
|
367
|
+
message: `${informationalUnresolved.length} informational media reference(s) missing from disk (--strict-media mode).`,
|
|
368
|
+
details: informationalUnresolved,
|
|
369
|
+
});
|
|
370
|
+
}
|
|
203
371
|
else {
|
|
372
|
+
const infoNote = informationalUnresolved.length > 0
|
|
373
|
+
? ` (${informationalUnresolved.length} informational/placeholder reference(s) ignored)`
|
|
374
|
+
: '';
|
|
204
375
|
checks.push({
|
|
205
376
|
id: 'media_references',
|
|
206
377
|
name: 'Media References',
|
|
207
378
|
status: 'ok',
|
|
208
|
-
message:
|
|
379
|
+
message: `All referenced local media files exist on disk.${infoNote}`,
|
|
380
|
+
...(informationalUnresolved.length > 0 ? { details: informationalUnresolved } : {}),
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
// 7. MCP Process Check
|
|
384
|
+
const mcpCheck = checkMcpProcess();
|
|
385
|
+
if (mcpCheck.isOutdated) {
|
|
386
|
+
checks.push({
|
|
387
|
+
id: 'mcp_process',
|
|
388
|
+
name: 'MCP Server Process',
|
|
389
|
+
status: 'warning',
|
|
390
|
+
message: mcpCheck.message || 'An MCP server process is running with an outdated version.',
|
|
391
|
+
details: mcpCheck.state ? { ...mcpCheck.state } : undefined,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
else if (mcpCheck.status === 'alive') {
|
|
395
|
+
checks.push({
|
|
396
|
+
id: 'mcp_process',
|
|
397
|
+
name: 'MCP Server Process',
|
|
398
|
+
status: 'ok',
|
|
399
|
+
message: `MCP server process is running healthy (PID ${mcpCheck.state?.pid}, v${mcpCheck.state?.version}).`,
|
|
209
400
|
});
|
|
210
401
|
}
|
|
211
402
|
// Determine overall status
|
package/dist/sync/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/sync/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/sync/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/merge.d.ts
CHANGED
|
@@ -4,16 +4,72 @@ export interface MergeResult {
|
|
|
4
4
|
frontmatter: Frontmatter;
|
|
5
5
|
body: string;
|
|
6
6
|
warnings: string[];
|
|
7
|
+
/**
|
|
8
|
+
* Taxonomy names (e.g. "categories", "tags") where local and remote both changed the
|
|
9
|
+
* assignment differently. Callers must NOT silently resolve these: taxonomy assignments
|
|
10
|
+
* are user intent and dropping either side is data loss.
|
|
11
|
+
*/
|
|
12
|
+
taxonomyConflicts: string[];
|
|
13
|
+
autoMergedTaxonomies?: TaxonomyMergeItem[];
|
|
14
|
+
wipeWarnings?: TaxonomyWipeWarning[];
|
|
7
15
|
}
|
|
16
|
+
export interface TaxonomyMergeItem {
|
|
17
|
+
name: string;
|
|
18
|
+
remoteAdded: string[];
|
|
19
|
+
remoteRemoved: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface TaxonomyWipeWarning {
|
|
22
|
+
name: string;
|
|
23
|
+
remoteTerms: string[];
|
|
24
|
+
remoteAdded: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface TaxonomyMergeResult {
|
|
27
|
+
merged: Record<string, string[]>;
|
|
28
|
+
conflicts: string[];
|
|
29
|
+
autoMergedTaxonomies: TaxonomyMergeItem[];
|
|
30
|
+
wipeWarnings: TaxonomyWipeWarning[];
|
|
31
|
+
}
|
|
32
|
+
export interface TaxonomyMergeOptions {
|
|
33
|
+
strictRenameConflict?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 3-way merge for taxonomies frontmatter record (category, tag, etc.).
|
|
37
|
+
*
|
|
38
|
+
* Implements strict set-algebraic 3-way merge:
|
|
39
|
+
* localRemoved := base \ local
|
|
40
|
+
* localAdded := local \ base
|
|
41
|
+
* remoteRemoved := base \ remote
|
|
42
|
+
* remoteAdded := remote \ base
|
|
43
|
+
* localChanged := (local ≠ base)
|
|
44
|
+
* remoteChanged := (remote ≠ base)
|
|
45
|
+
*
|
|
46
|
+
* Evaluation order (strict):
|
|
47
|
+
* 1. localChanged = false -> Keep remote (local did not touch this taxonomy)
|
|
48
|
+
* 2. remoteChanged = false -> Push local (clean single-side edit)
|
|
49
|
+
* 3. Both changed:
|
|
50
|
+
* union := (base \ (localRemoved ∪ remoteRemoved)) ∪ localAdded ∪ remoteAdded
|
|
51
|
+
* 3a. union = local -> Push local (remote changes are subsumed)
|
|
52
|
+
* 3b. local = ∅ & remote ≠ ∅ -> Destructive wipe guard
|
|
53
|
+
* 3c. union ≠ local -> Automatically push union with explicit merge log.
|
|
54
|
+
* Conflicts only if:
|
|
55
|
+
* (i) Server rejects union (400/422)
|
|
56
|
+
* (ii) Remote performed rename/replacement (remoteRemoved ≠ ∅ ∧ remoteAdded ≠ ∅) AND strictRenameConflict=true
|
|
57
|
+
* (iii) Base snapshot is null (cannot compute 3-way)
|
|
58
|
+
*/
|
|
59
|
+
export declare function mergeTaxonomies(local: Record<string, string[]> | undefined, base: Record<string, string[]> | undefined | null, remote: Record<string, string[]> | undefined, options?: TaxonomyMergeOptions): TaxonomyMergeResult;
|
|
8
60
|
/**
|
|
9
61
|
* Merges frontmatter fields key by key.
|
|
10
62
|
* Never inserts conflict markers into YAML (always produces valid Frontmatter).
|
|
11
63
|
* On collision (both local and remote modified the same field differently), remote takes precedence
|
|
12
|
-
* and a warning is logged.
|
|
64
|
+
* and a warning is logged. Taxonomies are the exception: they are merged per taxonomy name with set
|
|
65
|
+
* semantics and true conflicts are reported via `taxonomyConflicts` instead of being overwritten.
|
|
13
66
|
*/
|
|
14
|
-
export declare function mergeFrontmatter(local: Frontmatter, base: Frontmatter | null, remote: Frontmatter): {
|
|
67
|
+
export declare function mergeFrontmatter(local: Frontmatter, base: Frontmatter | null, remote: Frontmatter, options?: TaxonomyMergeOptions): {
|
|
15
68
|
merged: Frontmatter;
|
|
16
69
|
warnings: string[];
|
|
70
|
+
taxonomyConflicts: string[];
|
|
71
|
+
autoMergedTaxonomies?: TaxonomyMergeItem[];
|
|
72
|
+
wipeWarnings?: TaxonomyWipeWarning[];
|
|
17
73
|
};
|
|
18
74
|
/**
|
|
19
75
|
* Merges markdown body line by line using diff3.
|
|
@@ -32,5 +88,5 @@ export declare function hybrid3WayMerge(local: ParsedMarkdown, base: {
|
|
|
32
88
|
} | null, remote: {
|
|
33
89
|
frontmatter: Frontmatter;
|
|
34
90
|
body: string;
|
|
35
|
-
}): MergeResult;
|
|
91
|
+
}, options?: TaxonomyMergeOptions): MergeResult;
|
|
36
92
|
//# sourceMappingURL=merge.d.ts.map
|
package/dist/sync/merge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC3C,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAQD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;IAC1C,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EACjD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,EAC5C,OAAO,CAAC,EAAE,oBAAoB,GAC7B,mBAAmB,CA4IrB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC3C,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACtC,CA8EA;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAgB9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACvD,MAAM,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAClD,OAAO,CAAC,EAAE,oBAAoB,GAC7B,WAAW,CA0Bb"}
|
package/dist/sync/merge.js
CHANGED
|
@@ -20,14 +20,169 @@
|
|
|
20
20
|
* SOFTWARE.
|
|
21
21
|
*/
|
|
22
22
|
import { merge as diff3Merge } from 'node-diff3';
|
|
23
|
+
/** Order-insensitive normalization for a taxonomy term list (undefined stays undefined). */
|
|
24
|
+
function normalizeTermList(val) {
|
|
25
|
+
if (!Array.isArray(val))
|
|
26
|
+
return undefined;
|
|
27
|
+
return [...new Set(val.map((v) => String(v)))].sort();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
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)
|
|
52
|
+
*/
|
|
53
|
+
export function mergeTaxonomies(local, base, remote, options) {
|
|
54
|
+
const merged = {};
|
|
55
|
+
const conflicts = [];
|
|
56
|
+
const autoMergedTaxonomies = [];
|
|
57
|
+
const wipeWarnings = [];
|
|
58
|
+
const names = new Set([
|
|
59
|
+
...Object.keys(local || {}),
|
|
60
|
+
...Object.keys(base || {}),
|
|
61
|
+
...Object.keys(remote || {}),
|
|
62
|
+
]);
|
|
63
|
+
const eq = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
64
|
+
for (const name of names) {
|
|
65
|
+
const lDefined = local !== undefined && name in local && local[name] !== undefined;
|
|
66
|
+
const rDefined = remote !== undefined && name in remote && remote[name] !== undefined;
|
|
67
|
+
const bDefined = base !== null && base !== undefined && name in base && base[name] !== undefined;
|
|
68
|
+
// Case 1: Neither side defined this taxonomy
|
|
69
|
+
if (!lDefined && !rDefined) {
|
|
70
|
+
if (bDefined && base[name] !== undefined) {
|
|
71
|
+
merged[name] = base[name];
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// Case 2: Only local defined this taxonomy (remote omitted or deleted)
|
|
76
|
+
if (lDefined && !rDefined) {
|
|
77
|
+
if (!bDefined) {
|
|
78
|
+
merged[name] = local[name];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const l = normalizeTermList(local[name]);
|
|
82
|
+
const b = normalizeTermList(base[name]);
|
|
83
|
+
if (eq(l, b)) {
|
|
84
|
+
// Local didn't change it, remote deleted it
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Local changed it, remote deleted it -> Conflict
|
|
88
|
+
conflicts.push(name);
|
|
89
|
+
merged[name] = local[name];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// Case 3: Only remote defined this taxonomy (local omitted the field)
|
|
95
|
+
if (!lDefined && rDefined) {
|
|
96
|
+
merged[name] = remote[name];
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Case 4: Both local and remote defined this taxonomy
|
|
100
|
+
const lRaw = local[name];
|
|
101
|
+
const rRaw = remote[name];
|
|
102
|
+
const l = normalizeTermList(lRaw) ?? [];
|
|
103
|
+
const r = normalizeTermList(rRaw) ?? [];
|
|
104
|
+
if (eq(l, r)) {
|
|
105
|
+
merged[name] = lRaw;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// (iii) Base is null / missing: cannot compute 3-way -> conservative conflict
|
|
109
|
+
if (!bDefined) {
|
|
110
|
+
conflicts.push(name);
|
|
111
|
+
merged[name] = lRaw;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const b = normalizeTermList(base[name]) ?? [];
|
|
115
|
+
const baseSet = new Set(b);
|
|
116
|
+
const localSet = new Set(l);
|
|
117
|
+
const remoteSet = new Set(r);
|
|
118
|
+
const localAdded = l.filter((x) => !baseSet.has(x));
|
|
119
|
+
const localRemoved = b.filter((x) => !localSet.has(x));
|
|
120
|
+
const remoteAdded = r.filter((x) => !baseSet.has(x));
|
|
121
|
+
const remoteRemoved = b.filter((x) => !remoteSet.has(x));
|
|
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;
|
|
133
|
+
}
|
|
134
|
+
// 3. Both sides changed:
|
|
135
|
+
// union := (base \ (localRemoved ∪ remoteRemoved)) ∪ localAdded ∪ remoteAdded
|
|
136
|
+
const allRemovals = new Set([...localRemoved, ...remoteRemoved]);
|
|
137
|
+
const union = [
|
|
138
|
+
...b.filter((x) => !allRemovals.has(x)),
|
|
139
|
+
...localAdded,
|
|
140
|
+
...remoteAdded.filter((x) => !localAdded.includes(x)),
|
|
141
|
+
];
|
|
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
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return { merged, conflicts, autoMergedTaxonomies, wipeWarnings };
|
|
173
|
+
}
|
|
23
174
|
/**
|
|
24
175
|
* Merges frontmatter fields key by key.
|
|
25
176
|
* Never inserts conflict markers into YAML (always produces valid Frontmatter).
|
|
26
177
|
* On collision (both local and remote modified the same field differently), remote takes precedence
|
|
27
|
-
* and a warning is logged.
|
|
178
|
+
* and a warning is logged. Taxonomies are the exception: they are merged per taxonomy name with set
|
|
179
|
+
* semantics and true conflicts are reported via `taxonomyConflicts` instead of being overwritten.
|
|
28
180
|
*/
|
|
29
|
-
export function mergeFrontmatter(local, base, remote) {
|
|
181
|
+
export function mergeFrontmatter(local, base, remote, options) {
|
|
30
182
|
const warnings = [];
|
|
183
|
+
let taxonomyConflicts = [];
|
|
184
|
+
let autoMergedTaxonomies;
|
|
185
|
+
let wipeWarnings;
|
|
31
186
|
const merged = { ...remote };
|
|
32
187
|
// Helper to check equality
|
|
33
188
|
const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
@@ -43,6 +198,14 @@ export function mergeFrontmatter(local, base, remote) {
|
|
|
43
198
|
'bylines',
|
|
44
199
|
];
|
|
45
200
|
for (const key of keys) {
|
|
201
|
+
if (key === 'taxonomies') {
|
|
202
|
+
const tax = mergeTaxonomies(local.taxonomies, base ? base.taxonomies : null, remote.taxonomies, options);
|
|
203
|
+
merged.taxonomies = tax.merged;
|
|
204
|
+
taxonomyConflicts = tax.conflicts;
|
|
205
|
+
autoMergedTaxonomies = tax.autoMergedTaxonomies;
|
|
206
|
+
wipeWarnings = tax.wipeWarnings;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
46
209
|
const localVal = local[key];
|
|
47
210
|
const remoteVal = remote[key];
|
|
48
211
|
const baseVal = base ? base[key] : undefined;
|
|
@@ -75,7 +238,13 @@ export function mergeFrontmatter(local, base, remote) {
|
|
|
75
238
|
// Preserve mandatory immutable fields
|
|
76
239
|
merged.id = remote.id || local.id;
|
|
77
240
|
merged.collection = remote.collection || local.collection;
|
|
78
|
-
return {
|
|
241
|
+
return {
|
|
242
|
+
merged,
|
|
243
|
+
warnings,
|
|
244
|
+
taxonomyConflicts,
|
|
245
|
+
autoMergedTaxonomies,
|
|
246
|
+
wipeWarnings,
|
|
247
|
+
};
|
|
79
248
|
}
|
|
80
249
|
/**
|
|
81
250
|
* Merges markdown body line by line using diff3.
|
|
@@ -99,8 +268,8 @@ export function mergeBody(localBody, baseBody, remoteBody) {
|
|
|
99
268
|
/**
|
|
100
269
|
* Executes a Hybrid 3-Way Merge separating frontmatter structured merge and markdown text merge.
|
|
101
270
|
*/
|
|
102
|
-
export function hybrid3WayMerge(local, base, remote) {
|
|
103
|
-
const { merged: frontmatter, warnings } = 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);
|
|
104
273
|
const baseBody = base ? base.body : '';
|
|
105
274
|
const { mergedBody: body, hasConflict } = mergeBody(local.body, baseBody, remote.body);
|
|
106
275
|
return {
|
|
@@ -108,6 +277,9 @@ export function hybrid3WayMerge(local, base, remote) {
|
|
|
108
277
|
frontmatter,
|
|
109
278
|
body,
|
|
110
279
|
warnings,
|
|
280
|
+
taxonomyConflicts,
|
|
281
|
+
autoMergedTaxonomies,
|
|
282
|
+
wipeWarnings,
|
|
111
283
|
};
|
|
112
284
|
}
|
|
113
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';
|
|
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, 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>;
|