emdash-emit 0.1.14 → 0.1.15
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 +77 -1
- package/README.md +235 -187
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +6 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/pull.d.ts +32 -0
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +108 -9
- 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 +18 -0
- 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 +15 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/client/media.d.ts.map +1 -1
- package/dist/client/media.js +16 -5
- package/dist/client/media.js.map +1 -1
- package/dist/db/cache.d.ts +19 -4
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +127 -16
- package/dist/db/cache.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +5 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
- package/dist/mcp/tools/sync-doctor.js +12 -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 +49 -12
- 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 +5 -0
- 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 +6 -2
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/sync/delete.d.ts +2 -1
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +6 -19
- package/dist/sync/delete.js.map +1 -1
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +18 -2
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/doctor.d.ts +27 -1
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +309 -26
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/guards.d.ts +45 -0
- package/dist/sync/guards.d.ts.map +1 -0
- package/dist/sync/guards.js +235 -0
- package/dist/sync/guards.js.map +1 -0
- package/dist/sync/media/body_scan.d.ts +15 -0
- package/dist/sync/media/body_scan.d.ts.map +1 -0
- package/dist/sync/media/body_scan.js +132 -0
- package/dist/sync/media/body_scan.js.map +1 -0
- package/dist/sync/media/companions.d.ts +20 -0
- package/dist/sync/media/companions.d.ts.map +1 -0
- package/dist/sync/media/companions.js +111 -0
- package/dist/sync/media/companions.js.map +1 -0
- package/dist/sync/media/index.d.ts +9 -0
- package/dist/sync/media/index.d.ts.map +1 -0
- package/dist/sync/media/index.js +9 -0
- package/dist/sync/media/index.js.map +1 -0
- package/dist/sync/media/mirror_item.d.ts +27 -0
- package/dist/sync/media/mirror_item.d.ts.map +1 -0
- package/dist/sync/media/mirror_item.js +207 -0
- package/dist/sync/media/mirror_item.js.map +1 -0
- package/dist/sync/media/naming_mirror.d.ts +36 -0
- package/dist/sync/media/naming_mirror.d.ts.map +1 -0
- package/dist/sync/media/naming_mirror.js +143 -0
- package/dist/sync/media/naming_mirror.js.map +1 -0
- package/dist/sync/media/pull_article.d.ts +37 -0
- package/dist/sync/media/pull_article.d.ts.map +1 -0
- package/dist/sync/media/pull_article.js +273 -0
- package/dist/sync/media/pull_article.js.map +1 -0
- package/dist/sync/media/pull_library.d.ts +12 -0
- package/dist/sync/media/pull_library.d.ts.map +1 -0
- package/dist/sync/media/pull_library.js +207 -0
- package/dist/sync/media/pull_library.js.map +1 -0
- package/dist/sync/media/remote_index.d.ts +18 -0
- package/dist/sync/media/remote_index.d.ts.map +1 -0
- package/dist/sync/media/remote_index.js +94 -0
- package/dist/sync/media/remote_index.js.map +1 -0
- package/dist/sync/media/types.d.ts +191 -0
- package/dist/sync/media/types.d.ts.map +1 -0
- package/dist/sync/media/types.js +11 -0
- package/dist/sync/media/types.js.map +1 -0
- package/dist/sync/media.d.ts +1 -74
- package/dist/sync/media.d.ts.map +1 -1
- package/dist/sync/media.js +1 -592
- package/dist/sync/media.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +23 -0
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +85 -1
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/preflight.d.ts +1 -1
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +127 -15
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull.d.ts +19 -0
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +169 -15
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts +7 -0
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +37 -10
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +4 -0
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +68 -4
- package/dist/sync/status.js.map +1 -1
- package/dist/utils/config.d.ts +25 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +28 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +15 -4
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/media-body-refs.d.ts +81 -0
- package/dist/utils/media-body-refs.d.ts.map +1 -0
- package/dist/utils/media-body-refs.js +240 -0
- package/dist/utils/media-body-refs.js.map +1 -0
- package/dist/utils/media-refs.d.ts +44 -0
- package/dist/utils/media-refs.d.ts.map +1 -0
- package/dist/utils/media-refs.js +101 -0
- package/dist/utils/media-refs.js.map +1 -0
- package/dist/utils/naming.d.ts +31 -0
- package/dist/utils/naming.d.ts.map +1 -1
- package/dist/utils/naming.js +58 -0
- package/dist/utils/naming.js.map +1 -1
- package/package.json +1 -1
package/dist/sync/doctor.js
CHANGED
|
@@ -24,29 +24,88 @@ import path from 'node:path';
|
|
|
24
24
|
import yaml from 'js-yaml';
|
|
25
25
|
import { getPackageVersion } from '../utils/version.js';
|
|
26
26
|
import { parseMarkdown, lenientRepairMarkdownFrontmatter } from '../utils/frontmatter.js';
|
|
27
|
+
import { storageKeyToMarkdownRef } from '../utils/naming.js';
|
|
27
28
|
import { listConflicts } from './conflicts.js';
|
|
28
29
|
import { getWorkspaceStatus } from './status.js';
|
|
29
30
|
import { calculateHash } from './pull.js';
|
|
31
|
+
import { collectRemoteStorageKeys, storageKeyFromMediaMeta, } from './media.js';
|
|
30
32
|
import { checkMcpProcess } from '../mcp/heartbeat.js';
|
|
33
|
+
import { VALID_MEDIA_FILE_KEY, MEDIA_FILE_ROUTE_PREFIX, FENCE_POLICY, isCodeFenceDelimiter, } from '../utils/media-refs.js';
|
|
34
|
+
/**
|
|
35
|
+
* Counts the media assets this workspace actually mirrors: canonical binaries under `media/`, excluding
|
|
36
|
+
* `drafts/` staging and the `legacy_*` residue that backs no real record.
|
|
37
|
+
*/
|
|
38
|
+
function countMirroredMedia(mediaDir) {
|
|
39
|
+
if (!fs.existsSync(mediaDir))
|
|
40
|
+
return 0;
|
|
41
|
+
let count = 0;
|
|
42
|
+
for (const file of fs.readdirSync(mediaDir)) {
|
|
43
|
+
if (file.endsWith('.yaml') || file.startsWith('legacy_'))
|
|
44
|
+
continue;
|
|
45
|
+
if (!fs.statSync(path.join(mediaDir, file)).isFile())
|
|
46
|
+
continue;
|
|
47
|
+
count++;
|
|
48
|
+
}
|
|
49
|
+
return count;
|
|
50
|
+
}
|
|
51
|
+
/** Any storageKey-style ULID appearing inside a media file URL. */
|
|
52
|
+
const MEDIA_ULID_IN_URL = /[0-9A-HJ-NP-Z]{26}/g;
|
|
53
|
+
/** True when the captured image markup sits inside an inline code span on the same line. */
|
|
54
|
+
function isInlineCodeSpan(line, matchText, matchIndex) {
|
|
55
|
+
if (line.includes('`' + matchText))
|
|
56
|
+
return true;
|
|
57
|
+
const first = line.indexOf('`');
|
|
58
|
+
return first !== -1 && first < matchIndex && matchIndex < line.lastIndexOf('`');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Classify a captured media URL. Anything that cannot name a real asset (template placeholders, or
|
|
62
|
+
* a key polluted by leaked markup) is reported separately so it never counts as missing media.
|
|
63
|
+
*/
|
|
64
|
+
function classifyMediaUrl(url) {
|
|
65
|
+
if (url.includes('<') || url.includes('>') || url.includes('${'))
|
|
66
|
+
return 'placeholder';
|
|
67
|
+
const keyMatch = url.match(/(?:^|\/)media\/file\/([^?#]*)/);
|
|
68
|
+
if (!keyMatch)
|
|
69
|
+
return 'valid'; // a plain local path: resolved by filesystem checks instead
|
|
70
|
+
if (VALID_MEDIA_FILE_KEY.test(keyMatch[1]))
|
|
71
|
+
return 'valid';
|
|
72
|
+
// A ULID is present but the captured key is polluted by leaked markup, as in the real legacy
|
|
73
|
+
// body line ``. The asset itself still
|
|
74
|
+
// resolves through the ULID, so only the surrounding capture is treated as residue.
|
|
75
|
+
return MEDIA_ULID_IN_URL.test(keyMatch[1]) ? 'valid' : 'invalid';
|
|
76
|
+
}
|
|
31
77
|
/**
|
|
32
78
|
* Scans article markdown to separate standard body image references from
|
|
33
|
-
* informational references (code blocks, inline code, HTML comments,
|
|
79
|
+
* informational references (code blocks, inline code, HTML comments, opaque custom-block fences,
|
|
80
|
+
* or placeholder URLs) and from structurally invalid captures.
|
|
34
81
|
*/
|
|
35
82
|
export function scanArticleMediaDetailed(bodyMarkdown) {
|
|
36
83
|
const normalRefs = new Set();
|
|
37
84
|
const informationalRefs = new Set();
|
|
85
|
+
const invalidRefs = new Set();
|
|
38
86
|
const lines = bodyMarkdown.split('\n');
|
|
39
87
|
let inFence = false;
|
|
40
88
|
let fenceDelimiter = '';
|
|
89
|
+
// EmDash serializes unknown Portable Text blocks as single-line opaque fences
|
|
90
|
+
// (`<!--ec:block {...} -->`). Their embedded JSON may contain media URLs that belong to the
|
|
91
|
+
// remote block, not to editable markdown, so they must never be reported as missing.
|
|
92
|
+
let inOpaqueFence = false;
|
|
41
93
|
for (const line of lines) {
|
|
42
94
|
const trimmed = line.trim();
|
|
95
|
+
if (/^<!--ec:block\s/.test(trimmed)) {
|
|
96
|
+
inOpaqueFence = !/^.*-->$/.test(trimmed);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (inOpaqueFence)
|
|
100
|
+
continue;
|
|
43
101
|
// Note: Doctor treats both backticks and tildes (~~~) as fences for diagnostic
|
|
44
102
|
// reporting to avoid false warnings on code examples, whereas push guards (G5/G11)
|
|
45
103
|
// strictly exempt only backtick fences per AGENTS.md.
|
|
46
|
-
|
|
104
|
+
const delim = isCodeFenceDelimiter(trimmed, FENCE_POLICY.diagnostic);
|
|
105
|
+
if (delim) {
|
|
47
106
|
if (!inFence) {
|
|
48
107
|
inFence = true;
|
|
49
|
-
fenceDelimiter =
|
|
108
|
+
fenceDelimiter = delim;
|
|
50
109
|
continue;
|
|
51
110
|
}
|
|
52
111
|
else if (trimmed.startsWith(fenceDelimiter)) {
|
|
@@ -60,12 +119,13 @@ export function scanArticleMediaDetailed(bodyMarkdown) {
|
|
|
60
119
|
while ((match = mdRegex.exec(line)) !== null) {
|
|
61
120
|
const url = match[1].trim();
|
|
62
121
|
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
122
|
+
const kind = classifyMediaUrl(url);
|
|
123
|
+
if (kind === 'invalid') {
|
|
124
|
+
invalidRefs.add(url);
|
|
125
|
+
}
|
|
126
|
+
else if (inFence ||
|
|
127
|
+
isInlineCodeSpan(line, match[0], match.index) ||
|
|
128
|
+
kind === 'placeholder') {
|
|
69
129
|
informationalRefs.add(url);
|
|
70
130
|
}
|
|
71
131
|
else {
|
|
@@ -78,8 +138,11 @@ export function scanArticleMediaDetailed(bodyMarkdown) {
|
|
|
78
138
|
while ((match = htmlRegex.exec(line)) !== null) {
|
|
79
139
|
const url = match[1].trim();
|
|
80
140
|
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
81
|
-
const
|
|
82
|
-
if (
|
|
141
|
+
const kind = classifyMediaUrl(url);
|
|
142
|
+
if (kind === 'invalid') {
|
|
143
|
+
invalidRefs.add(url);
|
|
144
|
+
}
|
|
145
|
+
else if (inFence || kind === 'placeholder' || line.includes('<!--')) {
|
|
83
146
|
informationalRefs.add(url);
|
|
84
147
|
}
|
|
85
148
|
else {
|
|
@@ -87,10 +150,22 @@ export function scanArticleMediaDetailed(bodyMarkdown) {
|
|
|
87
150
|
}
|
|
88
151
|
}
|
|
89
152
|
}
|
|
153
|
+
// Legacy WordPress-derived custom container lines that survived the migration, e.g.
|
|
154
|
+
// `[dimage url="/_emdash/api/media/file/<ULID>.jpg" control=true]`. The URL is quoted inside
|
|
155
|
+
// the line, so the regexes above cannot capture it; a trailing attribute or bracket marks the
|
|
156
|
+
// capture as markup residue rather than a real asset reference.
|
|
157
|
+
const legacyContainerRegex = /\[([a-z]+)\s+url=["']?([^"'\s\]]+)["']?[^\]]*\]/gi;
|
|
158
|
+
while ((match = legacyContainerRegex.exec(line)) !== null) {
|
|
159
|
+
const url = match[2].trim();
|
|
160
|
+
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
161
|
+
informationalRefs.add(url);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
90
164
|
}
|
|
91
165
|
return {
|
|
92
166
|
normalRefs: Array.from(normalRefs).sort(),
|
|
93
167
|
informationalRefs: Array.from(informationalRefs).sort(),
|
|
168
|
+
invalidRefs: Array.from(invalidRefs).sort(),
|
|
94
169
|
};
|
|
95
170
|
}
|
|
96
171
|
/**
|
|
@@ -138,6 +213,7 @@ export async function runWorkspaceDoctor(options) {
|
|
|
138
213
|
}
|
|
139
214
|
// 3. Frontmatter Syntax & Schema Integrity Check
|
|
140
215
|
const invalidFiles = [];
|
|
216
|
+
const healableFiles = [];
|
|
141
217
|
let totalArticles = 0;
|
|
142
218
|
for (const status of ['draft', 'published']) {
|
|
143
219
|
const dir = path.join(options.workspaceRoot, collection, status);
|
|
@@ -157,6 +233,7 @@ export async function runWorkspaceDoctor(options) {
|
|
|
157
233
|
const healed = lenientRepairMarkdownFrontmatter(content);
|
|
158
234
|
if (healed) {
|
|
159
235
|
parseMarkdown(healed);
|
|
236
|
+
healableFiles.push(path.join(collection, status, file));
|
|
160
237
|
}
|
|
161
238
|
else {
|
|
162
239
|
throw new Error('Unrecoverable parse error');
|
|
@@ -177,6 +254,15 @@ export async function runWorkspaceDoctor(options) {
|
|
|
177
254
|
details: invalidFiles,
|
|
178
255
|
});
|
|
179
256
|
}
|
|
257
|
+
else if (healableFiles.length > 0) {
|
|
258
|
+
checks.push({
|
|
259
|
+
id: 'frontmatter_integrity',
|
|
260
|
+
name: 'Frontmatter Integrity',
|
|
261
|
+
status: 'warning',
|
|
262
|
+
message: `${healableFiles.length} article(s) have invalid frontmatter YAML that Emit can repair automatically. Run "emit pull" (syntax-only re-quoting; local body is strictly preserved).`,
|
|
263
|
+
details: healableFiles,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
180
266
|
else {
|
|
181
267
|
checks.push({
|
|
182
268
|
id: 'frontmatter_integrity',
|
|
@@ -341,32 +427,56 @@ export async function runWorkspaceDoctor(options) {
|
|
|
341
427
|
});
|
|
342
428
|
}
|
|
343
429
|
// 6. Media References Integrity Check
|
|
344
|
-
// Index
|
|
430
|
+
// Index every local resolution source so a body URL can be matched even when the companion YAML
|
|
431
|
+
// is missing its storageKey field, which is common for legacy corpora (D1)
|
|
345
432
|
const mediaDir = path.join(options.workspaceRoot, 'media');
|
|
346
433
|
const knownStorageKeys = new Set();
|
|
347
434
|
const knownMediaIds = new Set();
|
|
348
435
|
const knownLocalFiles = new Set();
|
|
436
|
+
// StorageKey-derived stems of mirrored assets. A body URL carries the storageKey, and a mirror is now
|
|
437
|
+
// named after exactly that key, so the stem — not a filename tail parsed out of an id-based name — is
|
|
438
|
+
// what lets `/_emdash/api/media/file/<storageKey>` resolve to a file on disk.
|
|
439
|
+
const knownMediaStems = new Set();
|
|
349
440
|
if (fs.existsSync(mediaDir)) {
|
|
350
441
|
const mediaFiles = fs.readdirSync(mediaDir);
|
|
351
442
|
for (const f of mediaFiles) {
|
|
352
443
|
knownLocalFiles.add(f);
|
|
353
444
|
knownLocalFiles.add(path.posix.join('media', f));
|
|
445
|
+
if (f.startsWith('legacy_')) {
|
|
446
|
+
// Leftover mirrors from the removed file-route fallback must never feed the known-storageKey
|
|
447
|
+
// or known-media-id sets: they back no real media record, so a body referencing them stays a
|
|
448
|
+
// missing-file warning and `--check-media-urls` can still downgrade it to a served note.
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
354
451
|
if (f.endsWith('.yaml')) {
|
|
355
452
|
try {
|
|
356
453
|
const doc = yaml.load(fs.readFileSync(path.join(mediaDir, f), 'utf8'));
|
|
357
454
|
if (doc) {
|
|
358
|
-
if (typeof doc.storageKey === 'string' && doc.storageKey) {
|
|
359
|
-
knownStorageKeys.add(doc.storageKey);
|
|
360
|
-
}
|
|
361
455
|
if (typeof doc.id === 'string' && doc.id) {
|
|
362
456
|
knownMediaIds.add(doc.id);
|
|
363
457
|
}
|
|
458
|
+
// The storageKey field is missing on older mirrors, but their `url:` still names the key,
|
|
459
|
+
// so both forms count as confirmed local metadata.
|
|
460
|
+
const metaKey = storageKeyFromMediaMeta(doc);
|
|
461
|
+
if (metaKey)
|
|
462
|
+
knownStorageKeys.add(metaKey);
|
|
364
463
|
}
|
|
365
464
|
}
|
|
366
465
|
catch {
|
|
367
466
|
// ignore corrupted individual yaml
|
|
368
467
|
}
|
|
369
468
|
}
|
|
469
|
+
else {
|
|
470
|
+
// media/<markdownRef>.<ext>: the stem is the sanitized storageKey, so it is recorded whole and
|
|
471
|
+
// matched against the key a body URL carries. Legacy id-based names stay readable too, because a
|
|
472
|
+
// workspace that has not been re-pulled yet still holds them.
|
|
473
|
+
const stem = f.replace(/\.[^.]+$/, '');
|
|
474
|
+
knownMediaStems.add(stem);
|
|
475
|
+
knownMediaStems.add(stem.replace(/^\d{8}_/, ''));
|
|
476
|
+
const dash = stem.indexOf('-');
|
|
477
|
+
if (dash !== -1)
|
|
478
|
+
knownMediaStems.add(stem.slice(dash + 1));
|
|
479
|
+
}
|
|
370
480
|
}
|
|
371
481
|
const draftsDir = path.join(mediaDir, 'drafts');
|
|
372
482
|
if (fs.existsSync(draftsDir)) {
|
|
@@ -376,8 +486,48 @@ export async function runWorkspaceDoctor(options) {
|
|
|
376
486
|
}
|
|
377
487
|
}
|
|
378
488
|
}
|
|
489
|
+
// Cache-backed fallbacks: media_state records the confirmed storageKey of every asset Emit
|
|
490
|
+
// uploaded, and base snapshots preserve the remote featured_image object (which carries
|
|
491
|
+
// meta.storageKey) for articles whose local frontmatter only holds the media record id.
|
|
492
|
+
for (const record of options.cache.listMediaStates()) {
|
|
493
|
+
if (record.storageKey)
|
|
494
|
+
knownStorageKeys.add(record.storageKey);
|
|
495
|
+
if (record.mediaId)
|
|
496
|
+
knownMediaIds.add(record.mediaId);
|
|
497
|
+
}
|
|
498
|
+
const knownFeaturedStorageKeys = new Set();
|
|
499
|
+
for (const state of options.cache.getAllSyncStates()) {
|
|
500
|
+
const snapshot = options.cache.getBaseSnapshot(state.id);
|
|
501
|
+
if (!snapshot?.frontmatterYaml)
|
|
502
|
+
continue;
|
|
503
|
+
try {
|
|
504
|
+
const fm = JSON.parse(snapshot.frontmatterYaml);
|
|
505
|
+
const fi = fm.featuredImage ?? fm.featured_image;
|
|
506
|
+
const meta = fi?.meta;
|
|
507
|
+
if (typeof meta?.storageKey === 'string' && meta.storageKey) {
|
|
508
|
+
knownFeaturedStorageKeys.add(meta.storageKey);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
catch {
|
|
512
|
+
// baseline frontmatter is JSON-encoded by contract; ignore unreadable snapshots
|
|
513
|
+
}
|
|
514
|
+
}
|
|
379
515
|
const missingMedia = [];
|
|
516
|
+
// References that survived every local fallback yet are still served by the public file route. The
|
|
517
|
+
// live HEAD (only when --check-media-urls is set) proves the R2 object exists; it says nothing about
|
|
518
|
+
// whether a D1 record exists, because the probe addresses the storageKey and not the primary key.
|
|
519
|
+
const verifiedFileRouteOnly = [];
|
|
520
|
+
const unreachableFileRoute = [];
|
|
380
521
|
const informationalUnresolved = [];
|
|
522
|
+
const invalidMediaRefs = [];
|
|
523
|
+
// Candidates that survived every local fallback; probed live only when checkMediaUrls is enabled.
|
|
524
|
+
const pendingRemoteProbes = [];
|
|
525
|
+
const probeKey = (ref) => {
|
|
526
|
+
const m = ref.match(/(?:^|\/)media\/file\/([^?#]+)/);
|
|
527
|
+
if (!m)
|
|
528
|
+
return null;
|
|
529
|
+
return VALID_MEDIA_FILE_KEY.test(m[1]) ? m[1] : null;
|
|
530
|
+
};
|
|
381
531
|
for (const status of ['draft', 'published']) {
|
|
382
532
|
const dir = path.join(options.workspaceRoot, collection, status);
|
|
383
533
|
if (!fs.existsSync(dir))
|
|
@@ -392,38 +542,160 @@ export async function runWorkspaceDoctor(options) {
|
|
|
392
542
|
const storageKeyMatch = ref.match(/(?:^|\/)media\/file\/([^?#]+)/);
|
|
393
543
|
if (storageKeyMatch) {
|
|
394
544
|
const key = storageKeyMatch[1];
|
|
395
|
-
|
|
545
|
+
if (knownStorageKeys.has(key))
|
|
546
|
+
return true;
|
|
547
|
+
// The body URL may carry the media record id instead of the storageKey, or a key whose
|
|
548
|
+
// companion YAML lacks the field: resolve by ULID, then by the mirror stem that names the key.
|
|
549
|
+
const ulidMatch = key.match(/[0-9A-HJ-NP-Z]{26}/);
|
|
550
|
+
if (ulidMatch && knownMediaIds.has(ulidMatch[0].toUpperCase()))
|
|
551
|
+
return true;
|
|
552
|
+
const keyStem = storageKeyToMarkdownRef(key);
|
|
553
|
+
if (keyStem && knownMediaStems.has(keyStem))
|
|
554
|
+
return true;
|
|
555
|
+
for (const stem of knownMediaStems) {
|
|
556
|
+
if (key.endsWith(stem))
|
|
557
|
+
return true;
|
|
558
|
+
}
|
|
559
|
+
return knownFeaturedStorageKeys.has(key);
|
|
396
560
|
}
|
|
397
561
|
// Check 2: Direct relative or local filesystem path
|
|
398
562
|
const cleanRef = ref.replace(/^[./]+/, '');
|
|
399
563
|
const directFull = path.isAbsolute(ref) ? ref : path.join(options.workspaceRoot, ref);
|
|
400
|
-
|
|
564
|
+
if (fs.existsSync(directFull) ||
|
|
565
|
+
knownLocalFiles.has(ref) ||
|
|
566
|
+
knownLocalFiles.has(cleanRef)) {
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
569
|
+
// Check 3: A local mirror reference (`../../media/<storageKey>` or the older depth-free
|
|
570
|
+
// `media/<storageKey>`) names the key outright, so a collision-suffixed or truncated mirror stem
|
|
571
|
+
// leaves no file at that exact path. Resolve it through
|
|
572
|
+
// the same confirmed-key and stem indexes Check 1 uses instead of reporting a mirrored asset missing.
|
|
573
|
+
const localKeyMatch = cleanRef.match(/^media\/([^?#]+)/);
|
|
574
|
+
if (localKeyMatch) {
|
|
575
|
+
const key = localKeyMatch[1];
|
|
576
|
+
if (knownStorageKeys.has(key))
|
|
577
|
+
return true;
|
|
578
|
+
const keyStem = storageKeyToMarkdownRef(key);
|
|
579
|
+
if (keyStem && knownMediaStems.has(keyStem))
|
|
580
|
+
return true;
|
|
581
|
+
}
|
|
582
|
+
return false;
|
|
401
583
|
};
|
|
402
584
|
for (const ref of detailed.normalRefs) {
|
|
403
|
-
if (
|
|
404
|
-
|
|
585
|
+
if (checkRef(ref))
|
|
586
|
+
continue;
|
|
587
|
+
const source = path.join(collection, status, file);
|
|
588
|
+
const key = options.checkMediaUrls ? probeKey(ref) : null;
|
|
589
|
+
if (key) {
|
|
590
|
+
pendingRemoteProbes.push({ ref, key, source });
|
|
591
|
+
}
|
|
592
|
+
else {
|
|
593
|
+
missingMedia.push(`${ref} (referenced by ${source})`);
|
|
405
594
|
}
|
|
406
595
|
}
|
|
407
596
|
for (const ref of detailed.informationalRefs) {
|
|
408
597
|
if (!checkRef(ref)) {
|
|
409
|
-
informationalUnresolved.push(`${ref} (code-example/
|
|
598
|
+
informationalUnresolved.push(`${ref} (code-example/custom-block in ${path.join(collection, status, file)})`);
|
|
410
599
|
}
|
|
411
600
|
}
|
|
601
|
+
for (const ref of detailed.invalidRefs) {
|
|
602
|
+
invalidMediaRefs.push(`${ref} (malformed reference in ${path.join(collection, status, file)})`);
|
|
603
|
+
}
|
|
412
604
|
}
|
|
413
605
|
catch {
|
|
414
606
|
// Skip unreadable files
|
|
415
607
|
}
|
|
416
608
|
}
|
|
417
609
|
}
|
|
610
|
+
// Live file-route probe: legacy migrated assets can still be served by /_emdash/api/media/file/
|
|
611
|
+
// even though their media record returns 404, so confirm them against the origin instead of
|
|
612
|
+
// reporting them as missing files that pull-media cannot fetch.
|
|
613
|
+
if (options.checkMediaUrls && pendingRemoteProbes.length > 0) {
|
|
614
|
+
const origin = options.profileOrigin || options.config.origin;
|
|
615
|
+
const probeFetch = options.fetchFn || globalThis.fetch;
|
|
616
|
+
const reachableByKey = new Map();
|
|
617
|
+
for (const candidate of pendingRemoteProbes) {
|
|
618
|
+
if (reachableByKey.has(candidate.key))
|
|
619
|
+
continue;
|
|
620
|
+
let reachable = false;
|
|
621
|
+
try {
|
|
622
|
+
const url = new URL(`${MEDIA_FILE_ROUTE_PREFIX}${candidate.key}`, origin).toString();
|
|
623
|
+
const res = await probeFetch(url, { method: 'HEAD' });
|
|
624
|
+
reachable = res.ok;
|
|
625
|
+
}
|
|
626
|
+
catch {
|
|
627
|
+
reachable = false;
|
|
628
|
+
}
|
|
629
|
+
reachableByKey.set(candidate.key, reachable);
|
|
630
|
+
}
|
|
631
|
+
for (const candidate of pendingRemoteProbes) {
|
|
632
|
+
if (reachableByKey.get(candidate.key)) {
|
|
633
|
+
verifiedFileRouteOnly.push(`${candidate.ref} (served by the file route but matched by no local mirror or record lookup; referenced by ${candidate.source})`);
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
unreachableFileRoute.push(`${candidate.ref} (referenced by ${candidate.source})`);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
missingMedia.push(...unreachableFileRoute);
|
|
641
|
+
// Remote library census: the list operation is the only handle that reaches migrated assets, because
|
|
642
|
+
// it is the one endpoint that reports each record's own storageKey and exposes no key filter. A
|
|
643
|
+
// complete walk turns "447 references have no local file" into "the library holds M records, this
|
|
644
|
+
// workspace mirrors K of them", which is what tells a user to widen the window instead of chase data
|
|
645
|
+
// loss. Credentials are required, so plain doctor runs stay offline and skip this block.
|
|
646
|
+
let remoteLibrary = null;
|
|
647
|
+
if (options.checkMediaLibrary) {
|
|
648
|
+
const origin = options.profileOrigin || options.config.origin;
|
|
649
|
+
try {
|
|
650
|
+
const index = await collectRemoteStorageKeys({
|
|
651
|
+
workspaceRoot: options.workspaceRoot,
|
|
652
|
+
origin,
|
|
653
|
+
token: options.token || '',
|
|
654
|
+
refreshToken: options.refreshToken,
|
|
655
|
+
fetchFn: options.fetchFn,
|
|
656
|
+
});
|
|
657
|
+
// Live EmDash sends no `totalCount`, so the walk itself is the only library figure available.
|
|
658
|
+
remoteLibrary = {
|
|
659
|
+
totalCount: index.totalCount ?? (index.complete ? index.scannedCount : null),
|
|
660
|
+
complete: index.complete,
|
|
661
|
+
mirroredCount: countMirroredMedia(mediaDir),
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
catch {
|
|
665
|
+
// An unreachable or unauthenticated library is not a workspace defect; doctor stays silent.
|
|
666
|
+
}
|
|
667
|
+
}
|
|
418
668
|
if (missingMedia.length > 0) {
|
|
669
|
+
const coverage = remoteLibrary
|
|
670
|
+
? remoteLibrary.complete
|
|
671
|
+
? ` The remote library walk reached ${remoteLibrary.totalCount ?? 'no'} media record(s), and this workspace mirrors ${remoteLibrary.mirroredCount} of them, so most of these references were simply never downloaded.`
|
|
672
|
+
: ` The remote library is larger than the walk that could be completed here, and this workspace mirrors ${remoteLibrary.mirroredCount} record(s), so most of these references were simply never downloaded.`
|
|
673
|
+
: '';
|
|
419
674
|
checks.push({
|
|
420
675
|
id: 'media_references',
|
|
421
676
|
name: 'Media References',
|
|
422
677
|
status: 'warning',
|
|
423
|
-
message: `${missingMedia.length} referenced media file(s) are missing from disk
|
|
678
|
+
message: `${missingMedia.length} referenced media file(s) are missing from disk.${coverage} ` +
|
|
679
|
+
`Run "emit pull-media --article <id>" for the specific article, or "emit doctor --check-media-library" ` +
|
|
680
|
+
`to size the remote library (metadata-only walk). Reserve "emit pull-media --all" for deliberate full offline backups. ` +
|
|
681
|
+
`Body URLs carry R2 storage keys, so a missing local file does not mean the remote asset is broken: see docs/media-id-spaces.md.`,
|
|
682
|
+
suggestion: options.checkMediaUrls
|
|
683
|
+
? 'These keys are R2 storage keys, not media record ids, so a file-route hit proves only that the object exists. The full library index is reachable without binary downloads through "emit doctor --check-media-library" (or "emit pull-media --all" for complete offline backup), which reports every storageKey the server holds without any server-side query. Confirm by storageKey before registering anything — a blind INSERT can duplicate an existing record. Emit mirrors records, never repairs server data.'
|
|
684
|
+
: undefined,
|
|
424
685
|
details: missingMedia,
|
|
425
686
|
});
|
|
426
687
|
}
|
|
688
|
+
else if (remoteLibrary) {
|
|
689
|
+
const notes = [
|
|
690
|
+
`Remote media library holds ${remoteLibrary.totalCount ?? 'an unknown number of'} record(s); this workspace mirrors ${remoteLibrary.mirroredCount}`,
|
|
691
|
+
];
|
|
692
|
+
checks.push({
|
|
693
|
+
id: 'media_references',
|
|
694
|
+
name: 'Media References',
|
|
695
|
+
status: 'ok',
|
|
696
|
+
message: notes.join('; '),
|
|
697
|
+
});
|
|
698
|
+
}
|
|
427
699
|
else if (options.strictMedia && informationalUnresolved.length > 0) {
|
|
428
700
|
checks.push({
|
|
429
701
|
id: 'media_references',
|
|
@@ -434,15 +706,26 @@ export async function runWorkspaceDoctor(options) {
|
|
|
434
706
|
});
|
|
435
707
|
}
|
|
436
708
|
else {
|
|
437
|
-
const
|
|
438
|
-
|
|
439
|
-
|
|
709
|
+
const notes = [];
|
|
710
|
+
if (verifiedFileRouteOnly.length > 0) {
|
|
711
|
+
notes.push(`${verifiedFileRouteOnly.length} reference(s) served by the remote file route that no local mirror or record lookup matched`);
|
|
712
|
+
}
|
|
713
|
+
if (informationalUnresolved.length > 0) {
|
|
714
|
+
notes.push(`${informationalUnresolved.length} informational/custom-block reference(s) ignored`);
|
|
715
|
+
}
|
|
716
|
+
if (invalidMediaRefs.length > 0) {
|
|
717
|
+
notes.push(`${invalidMediaRefs.length} malformed reference(s) skipped (not valid media file keys)`);
|
|
718
|
+
}
|
|
440
719
|
checks.push({
|
|
441
720
|
id: 'media_references',
|
|
442
721
|
name: 'Media References',
|
|
443
722
|
status: 'ok',
|
|
444
|
-
message: `All referenced local media files exist on disk.${
|
|
445
|
-
...(
|
|
723
|
+
message: `All referenced local media files exist on disk.${notes.length ? ` (${notes.join('; ')})` : ''}`,
|
|
724
|
+
...(verifiedFileRouteOnly.length > 0 ||
|
|
725
|
+
informationalUnresolved.length > 0 ||
|
|
726
|
+
invalidMediaRefs.length > 0
|
|
727
|
+
? { details: [...verifiedFileRouteOnly, ...informationalUnresolved, ...invalidMediaRefs] }
|
|
728
|
+
: {}),
|
|
446
729
|
});
|
|
447
730
|
}
|
|
448
731
|
// 7. MCP Process Check
|
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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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical registry of preflight guards, authoring safety checks, and known error codes.
|
|
3
|
+
*
|
|
4
|
+
* This file is the single source of truth for:
|
|
5
|
+
* 1. Numbered safety guards (G1 through G19).
|
|
6
|
+
* 2. Operational ApiErrors emitted by network/push/media transport layers.
|
|
7
|
+
* 3. Standing protection errors raised by dedicated error classes.
|
|
8
|
+
*
|
|
9
|
+
* Verified against src/ via tests/guards.test.ts to guarantee zero drift.
|
|
10
|
+
*/
|
|
11
|
+
export type GuardStage = 'cli-mcp' | 'preflight' | 'push' | 'conflicts' | 'new';
|
|
12
|
+
export type GuardSeverity = 'error' | 'warning' | 'info';
|
|
13
|
+
export interface GuardMeta {
|
|
14
|
+
/** Canonical numeric identifier (G1..G19). */
|
|
15
|
+
id: number;
|
|
16
|
+
/** Primary canonical name / label of the guard. */
|
|
17
|
+
name: string;
|
|
18
|
+
/**
|
|
19
|
+
* Concrete error codes emitted by this guard.
|
|
20
|
+
* Empty for invocation-layer guards (G1), mutations (G7), or syntax warnings (G8).
|
|
21
|
+
*/
|
|
22
|
+
codes: readonly string[];
|
|
23
|
+
/** Execution stage where the guard is enforced. */
|
|
24
|
+
stage: GuardStage;
|
|
25
|
+
/** Severity level when triggered. */
|
|
26
|
+
severity: GuardSeverity;
|
|
27
|
+
/** Primary source location for implementation reference. */
|
|
28
|
+
source: string;
|
|
29
|
+
/** Human-readable explanation of authoring misbehavior prevented. */
|
|
30
|
+
description: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Operational ApiErrors (network, lock, HTTP transport, server reject).
|
|
34
|
+
* They report a failed system operation rather than a rejected authoring intent.
|
|
35
|
+
* Exhaustively enumerated against src/ to ensure the rogue-code check in tests/guards.test.ts is total.
|
|
36
|
+
*/
|
|
37
|
+
export declare const OPERATIONAL_ERROR_CODES: readonly ['PUSH_CREATE_FAILED', 'PUSH_FAILED', 'PUSH_RETRY_FAILED', 'PUBLISH_FAILED', 'UNPUBLISH_FAILED', 'REMOTE_ARTICLE_DELETED', 'CONFLICT_REMOTE_FETCH_FAILED', 'TAXONOMY_UPDATE_FAILED', 'TAXONOMY_DIVERGENCE', 'TAXONOMY_UNION_REJECTED', 'TAXONOMY_FETCH_FAILED', 'ENTRY_LOCKED', 'MEDIA_UPLOAD_URL_FAILED', 'MEDIA_BINARY_UPLOAD_FAILED', 'MEDIA_CONFIRM_FAILED', 'MEDIA_NOT_READY', 'ARTICLE_LIST_FAILED', 'ARTICLE_PULL_FAILED', 'ARTICLE_NOT_FOUND', 'MEDIA_LIST_FAILED', 'NETWORK_ERROR', 'REMOTE_DELETE_FAILED', 'REMOTE_DELETE_UNCONFIRMED'];
|
|
38
|
+
/**
|
|
39
|
+
* Standing protection errors raised by dedicated error classes rather than ApiError.
|
|
40
|
+
* They guard destructive operations (e.g. deleting published or modified articles)
|
|
41
|
+
* or fundamental parsing, living outside GUARD_REGISTRY.
|
|
42
|
+
*/
|
|
43
|
+
export declare const PROTECTION_ERROR_CODES: readonly ['UNPUSHED_CHANGES_PROTECTION', 'PUBLISHED_ARTICLE_PROTECTION', 'FRONTMATTER_PARSE_ERROR'];
|
|
44
|
+
export declare const GUARD_REGISTRY: readonly GuardMeta[];
|
|
45
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/sync/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mDAAmD;IACnD,KAAK,EAAE,UAAU,CAAC;IAClB,qCAAqC;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,YAElC,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAE9B,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EAEvB,cAAc,EAEd,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EAEjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EAEf,sBAAsB,EACtB,2BAA2B,CACnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,CACjB,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,SAAS,SAAS,EAkLrC,CAAC"}
|