emdash-emit 0.1.13 → 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 +108 -1
- package/README.md +235 -187
- package/dist/cli/commands/delete.d.ts.map +1 -1
- package/dist/cli/commands/delete.js +2 -0
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +9 -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 +24 -5
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +308 -61
- 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-delete.d.ts.map +1 -1
- package/dist/mcp/tools/sync-delete.js +5 -0
- package/dist/mcp/tools/sync-delete.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/conflicts.d.ts.map +1 -1
- package/dist/sync/conflicts.js +44 -0
- package/dist/sync/conflicts.js.map +1 -1
- package/dist/sync/delete.d.ts +3 -1
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +7 -20
- 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 +28 -1
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +393 -45
- 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/merge.d.ts +11 -0
- package/dist/sync/merge.d.ts.map +1 -1
- package/dist/sync/merge.js +53 -6
- package/dist/sync/merge.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 +21 -0
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +278 -17
- 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 +135 -58
- 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/db/cache.js
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
import { DatabaseSync } from 'node:sqlite';
|
|
23
23
|
import fs from 'node:fs';
|
|
24
24
|
import path from 'node:path';
|
|
25
|
-
|
|
25
|
+
import { getPackageVersion } from '../utils/version.js';
|
|
26
|
+
export const CURRENT_CACHE_SCHEMA_VERSION = 5;
|
|
26
27
|
export class CacheDatabase {
|
|
27
28
|
db;
|
|
28
29
|
dbPath;
|
|
@@ -76,6 +77,8 @@ export class CacheDatabase {
|
|
|
76
77
|
slug TEXT NOT NULL,
|
|
77
78
|
last_synced_at INTEGER NOT NULL,
|
|
78
79
|
conflict_pending INTEGER NOT NULL DEFAULT 0,
|
|
80
|
+
body_conflict_pending INTEGER NOT NULL DEFAULT 0,
|
|
81
|
+
taxonomy_conflict_pending INTEGER NOT NULL DEFAULT 0,
|
|
79
82
|
delete_pending INTEGER NOT NULL DEFAULT 0,
|
|
80
83
|
conflict_copy_hash TEXT,
|
|
81
84
|
conflict_copy_path TEXT,
|
|
@@ -97,14 +100,16 @@ export class CacheDatabase {
|
|
|
97
100
|
);
|
|
98
101
|
CREATE INDEX IF NOT EXISTS idx_bylines_slug ON bylines (slug);
|
|
99
102
|
`);
|
|
100
|
-
// 5. media_state table: local draft media upload tracking & idempotency
|
|
103
|
+
// 5. media_state table: local draft media upload tracking & idempotency (Schema v5)
|
|
101
104
|
this.db.exec(`
|
|
102
105
|
CREATE TABLE IF NOT EXISTS media_state (
|
|
103
|
-
|
|
106
|
+
storage_key TEXT PRIMARY KEY,
|
|
104
107
|
media_id TEXT NOT NULL,
|
|
105
|
-
|
|
108
|
+
local_content_hash TEXT,
|
|
109
|
+
remote_record_ref TEXT,
|
|
106
110
|
url TEXT NOT NULL,
|
|
107
111
|
workspace_path TEXT,
|
|
112
|
+
markdown_ref TEXT,
|
|
108
113
|
status TEXT NOT NULL,
|
|
109
114
|
uploaded_at INTEGER
|
|
110
115
|
);
|
|
@@ -116,6 +121,7 @@ export class CacheDatabase {
|
|
|
116
121
|
// Create indexes that depend on migrated columns
|
|
117
122
|
this.db.exec(`
|
|
118
123
|
CREATE INDEX IF NOT EXISTS idx_sync_state_conflict ON sync_state (conflict_pending);
|
|
124
|
+
CREATE INDEX IF NOT EXISTS idx_media_state_content_hash ON media_state (local_content_hash);
|
|
119
125
|
`);
|
|
120
126
|
}
|
|
121
127
|
runMigrations() {
|
|
@@ -126,43 +132,22 @@ export class CacheDatabase {
|
|
|
126
132
|
throw new Error(`[CACHE_SCHEMA_MISMATCH] Cache database at ${this.dbPath} was created with schema version ${currentVersion}, but current emit supports up to ${CURRENT_CACHE_SCHEMA_VERSION}. Please upgrade emdash-emit.`);
|
|
127
133
|
}
|
|
128
134
|
if (currentVersion < CURRENT_CACHE_SCHEMA_VERSION) {
|
|
129
|
-
// 1.
|
|
130
|
-
try {
|
|
131
|
-
this.db.exec('PRAGMA wal_checkpoint(TRUNCATE);');
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
// Ignore checkpoint failure in in-memory or constrained environments
|
|
135
|
-
}
|
|
136
|
-
// 2. Backup database before running migration if physical file exists (keep up to 3 recent backups)
|
|
135
|
+
// 1. Backup database before running migration via SQLite native VACUUM INTO
|
|
137
136
|
if (this.dbPath !== ':memory:' && fs.existsSync(this.dbPath)) {
|
|
138
137
|
try {
|
|
138
|
+
const version = getPackageVersion();
|
|
139
|
+
const versionStr = version !== 'unknown' ? version : CURRENT_CACHE_SCHEMA_VERSION;
|
|
139
140
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
140
|
-
const bakPath = `${this.dbPath}.bak
|
|
141
|
-
|
|
142
|
-
// Prune backups: retain only 3 newest .bak-* files
|
|
143
|
-
const dbDir = path.dirname(this.dbPath);
|
|
144
|
-
const dbBase = path.basename(this.dbPath);
|
|
145
|
-
const backupFiles = fs
|
|
146
|
-
.readdirSync(dbDir)
|
|
147
|
-
.filter((f) => f.startsWith(`${dbBase}.bak-`))
|
|
148
|
-
.map((f) => path.join(dbDir, f))
|
|
149
|
-
.sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs);
|
|
150
|
-
if (backupFiles.length > 3) {
|
|
151
|
-
for (const oldBak of backupFiles.slice(3)) {
|
|
152
|
-
try {
|
|
153
|
-
fs.unlinkSync(oldBak);
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
// Ignore unlink errors
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
141
|
+
const bakPath = `${this.dbPath}.bak-${versionStr}-${timestamp}`;
|
|
142
|
+
this.db.prepare('VACUUM INTO ?').run(bakPath);
|
|
160
143
|
}
|
|
161
144
|
catch {
|
|
162
|
-
// Ignore
|
|
145
|
+
// Ignore in-memory or constrained test environments
|
|
163
146
|
}
|
|
164
147
|
}
|
|
165
|
-
//
|
|
148
|
+
// Unconditionally sweep 0-byte or excess backups
|
|
149
|
+
this.pruneBackups();
|
|
150
|
+
// Migration 1 & 2: schema columns from v1 and v2 if missing
|
|
166
151
|
const columns = this.db.prepare("PRAGMA table_info('sync_state');").all();
|
|
167
152
|
const columnNames = new Set(columns.map((c) => String(c.name)));
|
|
168
153
|
if (!columnNames.has('conflict_pending')) {
|
|
@@ -186,12 +171,166 @@ export class CacheDatabase {
|
|
|
186
171
|
if (!columnNames.has('taxonomy_apply_pending')) {
|
|
187
172
|
this.db.exec('ALTER TABLE sync_state ADD COLUMN taxonomy_apply_pending INTEGER NOT NULL DEFAULT 0;');
|
|
188
173
|
}
|
|
174
|
+
// Migration 3 (v3): separate body and taxonomy conflict pending flags
|
|
175
|
+
if (!columnNames.has('body_conflict_pending')) {
|
|
176
|
+
this.db.exec('ALTER TABLE sync_state ADD COLUMN body_conflict_pending INTEGER NOT NULL DEFAULT 0;');
|
|
177
|
+
}
|
|
178
|
+
if (!columnNames.has('taxonomy_conflict_pending')) {
|
|
179
|
+
this.db.exec('ALTER TABLE sync_state ADD COLUMN taxonomy_conflict_pending INTEGER NOT NULL DEFAULT 0;');
|
|
180
|
+
}
|
|
181
|
+
// Existing rows allocation rule when upgrading to v3
|
|
182
|
+
if (currentVersion < 3) {
|
|
183
|
+
this.db.exec(`
|
|
184
|
+
UPDATE sync_state
|
|
185
|
+
SET body_conflict_pending = CASE
|
|
186
|
+
WHEN conflict_pending = 1 AND conflict_copy_path LIKE '%.conflict.md' THEN 1
|
|
187
|
+
WHEN conflict_pending = 1 AND remote_taxonomy_hash IS NOT NULL AND (conflict_copy_path IS NULL OR conflict_copy_path NOT LIKE '%.conflict.md') THEN 0
|
|
188
|
+
WHEN conflict_pending = 1 THEN 1
|
|
189
|
+
ELSE 0 END,
|
|
190
|
+
taxonomy_conflict_pending = CASE
|
|
191
|
+
WHEN conflict_pending = 1 AND conflict_copy_path LIKE '%.conflict.md' THEN 0
|
|
192
|
+
WHEN conflict_pending = 1 AND remote_taxonomy_hash IS NOT NULL THEN 1
|
|
193
|
+
WHEN conflict_pending = 1 THEN 1
|
|
194
|
+
ELSE 0 END
|
|
195
|
+
WHERE conflict_pending = 1;
|
|
196
|
+
`);
|
|
197
|
+
}
|
|
189
198
|
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sync_state_conflict ON sync_state (conflict_pending);');
|
|
199
|
+
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sync_state_body_conflict ON sync_state (body_conflict_pending);');
|
|
200
|
+
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sync_state_tax_conflict ON sync_state (taxonomy_conflict_pending);');
|
|
190
201
|
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sync_state_delete ON sync_state (delete_pending);');
|
|
191
202
|
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sync_state_tax_apply ON sync_state (taxonomy_apply_pending);');
|
|
203
|
+
// Migration 4 (v4): media mirrors are named after the storageKey
|
|
204
|
+
const mediaColumns = this.db.prepare("PRAGMA table_info('media_state');").all();
|
|
205
|
+
const mediaColumnNames = new Set(mediaColumns.map((c) => String(c.name)));
|
|
206
|
+
if (!mediaColumnNames.has('markdown_ref')) {
|
|
207
|
+
this.db.exec('ALTER TABLE media_state ADD COLUMN markdown_ref TEXT;');
|
|
208
|
+
}
|
|
209
|
+
// Migration 5 (v5): recreate media_state with storage_key as PRIMARY KEY,
|
|
210
|
+
// separating local_content_hash (SHA-256) and remote_record_ref (media-record:<id>).
|
|
211
|
+
if (currentVersion < 5) {
|
|
212
|
+
const mediaCols = this.db.prepare("PRAGMA table_info('media_state');").all();
|
|
213
|
+
const mediaColNames = new Set(mediaCols.map((c) => String(c.name)));
|
|
214
|
+
const storageKeyCol = mediaCols.find((c) => String(c.name) === 'storage_key');
|
|
215
|
+
const isStorageKeyPk = storageKeyCol && Number(storageKeyCol.pk) > 0;
|
|
216
|
+
if (!isStorageKeyPk) {
|
|
217
|
+
this.db.exec('BEGIN TRANSACTION;');
|
|
218
|
+
try {
|
|
219
|
+
this.db.exec(`
|
|
220
|
+
CREATE TABLE IF NOT EXISTS media_state_v5 (
|
|
221
|
+
storage_key TEXT PRIMARY KEY,
|
|
222
|
+
media_id TEXT NOT NULL,
|
|
223
|
+
local_content_hash TEXT,
|
|
224
|
+
remote_record_ref TEXT,
|
|
225
|
+
url TEXT NOT NULL,
|
|
226
|
+
workspace_path TEXT,
|
|
227
|
+
markdown_ref TEXT,
|
|
228
|
+
status TEXT NOT NULL,
|
|
229
|
+
uploaded_at INTEGER
|
|
230
|
+
);
|
|
231
|
+
`);
|
|
232
|
+
if (mediaColNames.has('local_hash')) {
|
|
233
|
+
const hasMarkdownRef = mediaColNames.has('markdown_ref');
|
|
234
|
+
this.db.exec(`
|
|
235
|
+
INSERT INTO media_state_v5 (
|
|
236
|
+
storage_key,
|
|
237
|
+
media_id,
|
|
238
|
+
local_content_hash,
|
|
239
|
+
remote_record_ref,
|
|
240
|
+
url,
|
|
241
|
+
workspace_path,
|
|
242
|
+
markdown_ref,
|
|
243
|
+
status,
|
|
244
|
+
uploaded_at
|
|
245
|
+
)
|
|
246
|
+
SELECT
|
|
247
|
+
COALESCE(
|
|
248
|
+
NULLIF(storage_key, ''),
|
|
249
|
+
CASE WHEN url LIKE '%/file/%' THEN substr(url, instr(url, '/file/') + 6) ELSE 'legacy_' || media_id END
|
|
250
|
+
) AS computed_key,
|
|
251
|
+
MAX(media_id),
|
|
252
|
+
MAX(CASE WHEN local_hash NOT LIKE 'media-record:%' THEN local_hash ELSE NULL END),
|
|
253
|
+
MAX(CASE WHEN local_hash LIKE 'media-record:%' THEN local_hash ELSE NULL END),
|
|
254
|
+
MAX(url),
|
|
255
|
+
MAX(workspace_path),
|
|
256
|
+
${hasMarkdownRef ? 'MAX(markdown_ref)' : 'NULL'},
|
|
257
|
+
MAX(status),
|
|
258
|
+
MAX(uploaded_at)
|
|
259
|
+
FROM media_state
|
|
260
|
+
WHERE (storage_key IS NOT NULL AND storage_key != '') OR url LIKE '%/file/%'
|
|
261
|
+
GROUP BY computed_key;
|
|
262
|
+
`);
|
|
263
|
+
this.db.exec('DROP TABLE media_state;');
|
|
264
|
+
}
|
|
265
|
+
this.db.exec('ALTER TABLE media_state_v5 RENAME TO media_state;');
|
|
266
|
+
this.db.exec(`
|
|
267
|
+
CREATE INDEX IF NOT EXISTS idx_media_state_media_id ON media_state (media_id);
|
|
268
|
+
CREATE INDEX IF NOT EXISTS idx_media_state_status ON media_state (status);
|
|
269
|
+
CREATE INDEX IF NOT EXISTS idx_media_state_content_hash ON media_state (local_content_hash);
|
|
270
|
+
`);
|
|
271
|
+
this.db.exec('COMMIT;');
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
this.db.exec('ROLLBACK;');
|
|
275
|
+
throw err;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
192
279
|
this.db.exec(`PRAGMA user_version = ${CURRENT_CACHE_SCHEMA_VERSION};`);
|
|
193
280
|
}
|
|
194
281
|
}
|
|
282
|
+
pruneBackups() {
|
|
283
|
+
if (this.dbPath === ':memory:')
|
|
284
|
+
return;
|
|
285
|
+
try {
|
|
286
|
+
const dbDir = path.dirname(this.dbPath);
|
|
287
|
+
const dbBase = path.basename(this.dbPath);
|
|
288
|
+
if (!fs.existsSync(dbDir))
|
|
289
|
+
return;
|
|
290
|
+
const backupFiles = fs
|
|
291
|
+
.readdirSync(dbDir)
|
|
292
|
+
.filter((f) => f.startsWith(`${dbBase}.bak-`))
|
|
293
|
+
.map((f) => path.join(dbDir, f));
|
|
294
|
+
// 1. Unconditionally purge 0-byte backup files
|
|
295
|
+
const validBackups = [];
|
|
296
|
+
for (const bak of backupFiles) {
|
|
297
|
+
try {
|
|
298
|
+
const stat = fs.statSync(bak);
|
|
299
|
+
if (stat.size === 0) {
|
|
300
|
+
fs.unlinkSync(bak);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
validBackups.push(bak);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
// Ignore stat/unlink errors
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// 2. Retain up to 3 newest valid backups
|
|
311
|
+
validBackups.sort((a, b) => {
|
|
312
|
+
try {
|
|
313
|
+
return fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs;
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
return 0;
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
if (validBackups.length > 3) {
|
|
320
|
+
for (const oldBak of validBackups.slice(3)) {
|
|
321
|
+
try {
|
|
322
|
+
fs.unlinkSync(oldBak);
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
// Ignore unlink errors
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// Ignore backup prune errors
|
|
332
|
+
}
|
|
333
|
+
}
|
|
195
334
|
getSchemaVersion() {
|
|
196
335
|
const row = this.db.prepare('PRAGMA user_version;').get();
|
|
197
336
|
return Number(row?.user_version || 0);
|
|
@@ -302,6 +441,9 @@ export class CacheDatabase {
|
|
|
302
441
|
}
|
|
303
442
|
// --- sync_state operations ---
|
|
304
443
|
rowToSyncState(row) {
|
|
444
|
+
const bodyConflictPending = Number(row.body_conflict_pending || 0);
|
|
445
|
+
const taxonomyConflictPending = Number(row.taxonomy_conflict_pending || 0);
|
|
446
|
+
const conflictPending = Math.max(Number(row.conflict_pending || 0), bodyConflictPending, taxonomyConflictPending);
|
|
305
447
|
return {
|
|
306
448
|
id: String(row.id),
|
|
307
449
|
localFilePath: String(row.local_file_path),
|
|
@@ -310,7 +452,9 @@ export class CacheDatabase {
|
|
|
310
452
|
status: String(row.status),
|
|
311
453
|
slug: String(row.slug),
|
|
312
454
|
lastSyncedAt: Number(row.last_synced_at),
|
|
313
|
-
conflictPending
|
|
455
|
+
conflictPending,
|
|
456
|
+
bodyConflictPending,
|
|
457
|
+
taxonomyConflictPending,
|
|
314
458
|
deletePending: Number(row.delete_pending || 0),
|
|
315
459
|
conflictCopyHash: row.conflict_copy_hash ? String(row.conflict_copy_hash) : null,
|
|
316
460
|
conflictCopyPath: row.conflict_copy_path ? String(row.conflict_copy_path) : null,
|
|
@@ -320,13 +464,17 @@ export class CacheDatabase {
|
|
|
320
464
|
};
|
|
321
465
|
}
|
|
322
466
|
saveSyncState(state) {
|
|
467
|
+
const bodyConflictPending = state.bodyConflictPending ?? (state.conflictPending === 0 ? 0 : (state.conflictPending ?? 0));
|
|
468
|
+
const taxonomyConflictPending = state.taxonomyConflictPending ?? (state.conflictPending === 0 ? 0 : 0);
|
|
469
|
+
const conflictPending = Math.max(state.conflictPending ?? 0, bodyConflictPending, taxonomyConflictPending);
|
|
323
470
|
const stmt = this.db.prepare(`
|
|
324
471
|
INSERT INTO sync_state (
|
|
325
472
|
id, local_file_path, local_hash, remote_rev, status, slug, last_synced_at,
|
|
326
|
-
conflict_pending,
|
|
473
|
+
conflict_pending, body_conflict_pending, taxonomy_conflict_pending, delete_pending,
|
|
474
|
+
conflict_copy_hash, conflict_copy_path, conflict_at,
|
|
327
475
|
remote_taxonomy_hash, taxonomy_apply_pending
|
|
328
476
|
)
|
|
329
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
477
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
330
478
|
ON CONFLICT(id) DO UPDATE SET
|
|
331
479
|
local_file_path = excluded.local_file_path,
|
|
332
480
|
local_hash = excluded.local_hash,
|
|
@@ -334,25 +482,92 @@ export class CacheDatabase {
|
|
|
334
482
|
status = excluded.status,
|
|
335
483
|
slug = excluded.slug,
|
|
336
484
|
last_synced_at = excluded.last_synced_at,
|
|
337
|
-
|
|
485
|
+
body_conflict_pending = excluded.body_conflict_pending,
|
|
486
|
+
taxonomy_conflict_pending = excluded.taxonomy_conflict_pending,
|
|
487
|
+
conflict_pending = MAX(excluded.body_conflict_pending, excluded.taxonomy_conflict_pending),
|
|
338
488
|
delete_pending = excluded.delete_pending,
|
|
339
|
-
conflict_copy_hash = CASE WHEN excluded.
|
|
340
|
-
|
|
341
|
-
|
|
489
|
+
conflict_copy_hash = CASE WHEN excluded.conflict_copy_path IS NOT NULL THEN excluded.conflict_copy_hash
|
|
490
|
+
WHEN COALESCE(excluded.body_conflict_pending, 0) + COALESCE(excluded.taxonomy_conflict_pending, 0) = 0 THEN NULL
|
|
491
|
+
ELSE sync_state.conflict_copy_hash END,
|
|
492
|
+
conflict_copy_path = CASE WHEN excluded.conflict_copy_path IS NOT NULL THEN excluded.conflict_copy_path
|
|
493
|
+
WHEN COALESCE(excluded.body_conflict_pending, 0) + COALESCE(excluded.taxonomy_conflict_pending, 0) = 0 THEN NULL
|
|
494
|
+
ELSE sync_state.conflict_copy_path END,
|
|
495
|
+
conflict_at = CASE WHEN excluded.conflict_copy_path IS NOT NULL THEN excluded.conflict_at
|
|
496
|
+
WHEN COALESCE(excluded.body_conflict_pending, 0) + COALESCE(excluded.taxonomy_conflict_pending, 0) = 0 THEN NULL
|
|
497
|
+
ELSE sync_state.conflict_at END,
|
|
342
498
|
remote_taxonomy_hash = CASE WHEN excluded.remote_taxonomy_hash IS NOT NULL THEN excluded.remote_taxonomy_hash ELSE sync_state.remote_taxonomy_hash END,
|
|
343
499
|
taxonomy_apply_pending = excluded.taxonomy_apply_pending
|
|
344
500
|
`);
|
|
345
|
-
stmt.run(state.id, state.localFilePath, state.localHash, state.remoteRev, state.status, state.slug, state.lastSyncedAt,
|
|
501
|
+
stmt.run(state.id, state.localFilePath, state.localHash, state.remoteRev, state.status, state.slug, state.lastSyncedAt, conflictPending, bodyConflictPending, taxonomyConflictPending, state.deletePending ?? 0, state.conflictCopyHash ?? null, state.conflictCopyPath ?? null, state.conflictAt ?? null, state.remoteTaxonomyHash ?? null, state.taxonomyApplyPending ?? 0);
|
|
346
502
|
}
|
|
347
|
-
setConflictPending(id, pending, copyHash, copyPath) {
|
|
348
|
-
if (pending) {
|
|
349
|
-
|
|
350
|
-
|
|
503
|
+
setConflictPending(id, kind, pending, copyHash, copyPath) {
|
|
504
|
+
if (!pending) {
|
|
505
|
+
this.clearConflictsByKind(id, kind);
|
|
506
|
+
return;
|
|
351
507
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
508
|
+
const actualHash = copyHash ?? null;
|
|
509
|
+
const actualPath = copyPath ?? null;
|
|
510
|
+
const now = Math.floor(Date.now() / 1000);
|
|
511
|
+
if (kind === 'all') {
|
|
512
|
+
const stmt = this.db.prepare(`
|
|
513
|
+
UPDATE sync_state
|
|
514
|
+
SET conflict_pending = 1,
|
|
515
|
+
body_conflict_pending = 1,
|
|
516
|
+
taxonomy_conflict_pending = 1,
|
|
517
|
+
conflict_copy_hash = CASE WHEN ? IS NOT NULL THEN ? ELSE conflict_copy_hash END,
|
|
518
|
+
conflict_copy_path = CASE WHEN ? IS NOT NULL THEN ? ELSE conflict_copy_path END,
|
|
519
|
+
conflict_at = CASE WHEN (? IS NOT NULL OR ? IS NOT NULL) THEN ? ELSE conflict_at END
|
|
520
|
+
WHERE id = ?
|
|
521
|
+
`);
|
|
522
|
+
stmt.run(actualHash, actualHash, actualPath, actualPath, actualHash, actualPath, now, id);
|
|
523
|
+
return;
|
|
355
524
|
}
|
|
525
|
+
const col = kind === 'body' ? 'body_conflict_pending' : 'taxonomy_conflict_pending';
|
|
526
|
+
const stmt = this.db.prepare(`
|
|
527
|
+
UPDATE sync_state
|
|
528
|
+
SET ${col} = 1,
|
|
529
|
+
conflict_pending = 1,
|
|
530
|
+
conflict_copy_hash = CASE WHEN ? IS NOT NULL THEN ? ELSE conflict_copy_hash END,
|
|
531
|
+
conflict_copy_path = CASE WHEN ? IS NOT NULL THEN ? ELSE conflict_copy_path END,
|
|
532
|
+
conflict_at = CASE WHEN (? IS NOT NULL OR ? IS NOT NULL) THEN ? ELSE conflict_at END
|
|
533
|
+
WHERE id = ?
|
|
534
|
+
`);
|
|
535
|
+
stmt.run(actualHash, actualHash, actualPath, actualPath, actualHash, actualPath, now, id);
|
|
536
|
+
}
|
|
537
|
+
clearConflictsByKind(id, kind) {
|
|
538
|
+
if (kind === 'all') {
|
|
539
|
+
this.db
|
|
540
|
+
.prepare(`
|
|
541
|
+
UPDATE sync_state
|
|
542
|
+
SET conflict_pending = 0,
|
|
543
|
+
body_conflict_pending = 0,
|
|
544
|
+
taxonomy_conflict_pending = 0,
|
|
545
|
+
conflict_copy_hash = NULL,
|
|
546
|
+
conflict_copy_path = NULL,
|
|
547
|
+
conflict_at = NULL
|
|
548
|
+
WHERE id = ?
|
|
549
|
+
`)
|
|
550
|
+
.run(id);
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
const current = this.getSyncState(id);
|
|
554
|
+
if (!current)
|
|
555
|
+
return;
|
|
556
|
+
const newBody = kind === 'body' ? 0 : (current.bodyConflictPending ?? 0);
|
|
557
|
+
const newTax = kind === 'taxonomy' ? 0 : (current.taxonomyConflictPending ?? 0);
|
|
558
|
+
const bothCleared = newBody === 0 && newTax === 0;
|
|
559
|
+
this.db
|
|
560
|
+
.prepare(`
|
|
561
|
+
UPDATE sync_state
|
|
562
|
+
SET body_conflict_pending = ?,
|
|
563
|
+
taxonomy_conflict_pending = ?,
|
|
564
|
+
conflict_pending = ?,
|
|
565
|
+
conflict_copy_hash = CASE WHEN ? = 1 THEN NULL ELSE conflict_copy_hash END,
|
|
566
|
+
conflict_copy_path = CASE WHEN ? = 1 THEN NULL ELSE conflict_copy_path END,
|
|
567
|
+
conflict_at = CASE WHEN ? = 1 THEN NULL ELSE conflict_at END
|
|
568
|
+
WHERE id = ?
|
|
569
|
+
`)
|
|
570
|
+
.run(newBody, newTax, bothCleared ? 0 : 1, bothCleared ? 1 : 0, bothCleared ? 1 : 0, bothCleared ? 1 : 0, id);
|
|
356
571
|
}
|
|
357
572
|
setDeletePending(id, pending) {
|
|
358
573
|
const stmt = this.db.prepare('UPDATE sync_state SET delete_pending = ? WHERE id = ?');
|
|
@@ -460,22 +675,35 @@ export class CacheDatabase {
|
|
|
460
675
|
}
|
|
461
676
|
// --- media_state operations ---
|
|
462
677
|
saveMediaState(record) {
|
|
678
|
+
const localContentHash = record.localContentHash ??
|
|
679
|
+
(record.localHash && !record.localHash.startsWith('media-record:') ? record.localHash : null);
|
|
680
|
+
const remoteRecordRef = record.remoteRecordRef ??
|
|
681
|
+
(record.localHash && record.localHash.startsWith('media-record:') ? record.localHash : null);
|
|
463
682
|
const stmt = this.db.prepare(`
|
|
464
|
-
INSERT INTO media_state (
|
|
465
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
466
|
-
ON CONFLICT(
|
|
683
|
+
INSERT INTO media_state (storage_key, media_id, local_content_hash, remote_record_ref, url, workspace_path, markdown_ref, status, uploaded_at)
|
|
684
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
685
|
+
ON CONFLICT(storage_key) DO UPDATE SET
|
|
467
686
|
media_id = excluded.media_id,
|
|
468
|
-
|
|
687
|
+
local_content_hash = COALESCE(excluded.local_content_hash, media_state.local_content_hash),
|
|
688
|
+
remote_record_ref = COALESCE(excluded.remote_record_ref, media_state.remote_record_ref),
|
|
469
689
|
url = excluded.url,
|
|
470
690
|
workspace_path = COALESCE(excluded.workspace_path, media_state.workspace_path),
|
|
691
|
+
markdown_ref = COALESCE(excluded.markdown_ref, media_state.markdown_ref),
|
|
471
692
|
status = excluded.status,
|
|
472
693
|
uploaded_at = excluded.uploaded_at
|
|
473
694
|
`);
|
|
474
|
-
stmt.run(record.
|
|
695
|
+
stmt.run(record.storageKey, record.mediaId, localContentHash, remoteRecordRef, record.url, record.workspacePath ?? null, record.markdownRef ?? null, record.status, record.uploadedAt ?? Math.floor(Date.now() / 1000));
|
|
696
|
+
}
|
|
697
|
+
getMediaState(storageKey) {
|
|
698
|
+
const stmt = this.db.prepare('SELECT * FROM media_state WHERE storage_key = ? ORDER BY uploaded_at DESC LIMIT 1');
|
|
699
|
+
const row = stmt.get(storageKey);
|
|
700
|
+
if (!row)
|
|
701
|
+
return null;
|
|
702
|
+
return this.mapMediaStateRow(row);
|
|
475
703
|
}
|
|
476
|
-
|
|
477
|
-
const stmt = this.db.prepare('SELECT * FROM media_state WHERE
|
|
478
|
-
const row = stmt.get(
|
|
704
|
+
getMediaStateByContentHash(contentHash) {
|
|
705
|
+
const stmt = this.db.prepare('SELECT * FROM media_state WHERE local_content_hash = ? ORDER BY uploaded_at DESC LIMIT 1');
|
|
706
|
+
const row = stmt.get(contentHash);
|
|
479
707
|
if (!row)
|
|
480
708
|
return null;
|
|
481
709
|
return this.mapMediaStateRow(row);
|
|
@@ -487,9 +715,16 @@ export class CacheDatabase {
|
|
|
487
715
|
return null;
|
|
488
716
|
return this.mapMediaStateRow(row);
|
|
489
717
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
718
|
+
getMediaStateByStorageKey(storageKey) {
|
|
719
|
+
return this.getMediaState(storageKey);
|
|
720
|
+
}
|
|
721
|
+
deleteMediaState(storageKey) {
|
|
722
|
+
const stmt = this.db.prepare('DELETE FROM media_state WHERE storage_key = ?');
|
|
723
|
+
stmt.run(storageKey);
|
|
724
|
+
}
|
|
725
|
+
deleteMediaStateByContentHash(contentHash) {
|
|
726
|
+
const stmt = this.db.prepare('DELETE FROM media_state WHERE local_content_hash = ?');
|
|
727
|
+
stmt.run(contentHash);
|
|
493
728
|
}
|
|
494
729
|
listMediaStates(status) {
|
|
495
730
|
const stmt = status
|
|
@@ -499,14 +734,26 @@ export class CacheDatabase {
|
|
|
499
734
|
return rows.map((r) => this.mapMediaStateRow(r));
|
|
500
735
|
}
|
|
501
736
|
mapMediaStateRow(row) {
|
|
737
|
+
const localContentHash = row.local_content_hash !== null && row.local_content_hash !== undefined
|
|
738
|
+
? String(row.local_content_hash)
|
|
739
|
+
: null;
|
|
740
|
+
const remoteRecordRef = row.remote_record_ref !== null && row.remote_record_ref !== undefined
|
|
741
|
+
? String(row.remote_record_ref)
|
|
742
|
+
: null;
|
|
743
|
+
const localHash = localContentHash || remoteRecordRef || undefined;
|
|
502
744
|
return {
|
|
503
|
-
localHash
|
|
745
|
+
localHash,
|
|
746
|
+
localContentHash,
|
|
747
|
+
remoteRecordRef,
|
|
504
748
|
mediaId: String(row.media_id),
|
|
505
749
|
storageKey: String(row.storage_key),
|
|
506
750
|
url: String(row.url),
|
|
507
751
|
workspacePath: row.workspace_path !== null && row.workspace_path !== undefined
|
|
508
752
|
? String(row.workspace_path)
|
|
509
753
|
: null,
|
|
754
|
+
markdownRef: row.markdown_ref !== null && row.markdown_ref !== undefined
|
|
755
|
+
? String(row.markdown_ref)
|
|
756
|
+
: null,
|
|
510
757
|
status: String(row.status),
|
|
511
758
|
uploadedAt: row.uploaded_at !== null && row.uploaded_at !== undefined ? Number(row.uploaded_at) : null,
|
|
512
759
|
};
|
package/dist/db/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/db/cache.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/db/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA2ExD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,MAAM,OAAO,aAAa;IAChB,EAAE,CAAe;IACjB,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,+DAA+D;QAC/D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAE3C,uCAAuC;QACvC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;KAcZ,CAAC,CAAC;QAEH,0DAA0D;QAC1D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;KASZ,CAAC,CAAC;QAEH,oEAAoE;QACpE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;KAoBZ,CAAC,CAAC;QAEH,6DAA6D;QAC7D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;KAUZ,CAAC,CAAC;QAEH,oFAAoF;QACpF,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;KAcZ,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,iDAAiD;QACjD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;KAGZ,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EACzB,CAAC;QACtC,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;QAE7D,6EAA6E;QAC7E,IAAI,cAAc,GAAG,4BAA4B,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,MAAM,oCAAoC,cAAc,qCAAqC,4BAA4B,+BAA+B,CAC3M,CAAC;QACJ,CAAC;QAED,IAAI,cAAc,GAAG,4BAA4B,EAAE,CAAC;YAClD,4EAA4E;YAC5E,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;oBAClF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACjE,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,QAAQ,UAAU,IAAI,SAAS,EAAE,CAAC;oBAChE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,oDAAoD;gBACtD,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,4DAA4D;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,EAEtE,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,gFAAgF,CACjF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,8EAA8E,CAC/E,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAC;YACJ,CAAC;YAED,sEAAsE;YACtE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,qFAAqF,CACtF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,yFAAyF,CAC1F,CAAC;YACJ,CAAC;YAED,qDAAqD;YACrD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;SAaZ,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,gGAAgG,CACjG,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,mGAAmG,CACpG,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,kFAAkF,CACnF,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,6FAA6F,CAC9F,CAAC;YAEF,iEAAiE;YACjE,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAE5E,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACxE,CAAC;YAED,0EAA0E;YAC1E,qFAAqF;YACrF,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAEzE,CAAC;gBACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;gBAC9E,MAAM,cAAc,GAAG,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAErE,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBACnC,IAAI,CAAC;wBACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;aAYZ,CAAC,CAAC;wBAEH,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;4BACpC,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;4BACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;oBAsBP,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM;;;;;;eAMlD,CAAC,CAAC;4BACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAC1C,CAAC;wBACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;wBAClE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;aAIZ,CAAC,CAAC;wBACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1B,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC1B,MAAM,GAAG,CAAC;oBACZ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,4BAA4B,GAAG,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO;QACvC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO;YAElC,MAAM,WAAW,GAAG,EAAE;iBACnB,WAAW,CAAC,KAAK,CAAC;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;iBAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAEnC,+CAA+C;YAC/C,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBACpB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,4BAA4B;gBAC9B,CAAC;YACH,CAAC;YAED,yCAAyC;YACzC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC;oBACH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,IAAI,CAAC;wBACH,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,uBAAuB;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAEM,gBAAgB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAClB,CAAC;QACtC,OAAO,MAAM,CAAC,GAAG,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,6BAA6B;IAEtB,SAAS,CAAC,KAAkB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAY5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,WAAW,IAAI,IAAI,EACzB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC;IAEM,QAAQ,CAAC,EAAU;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;QAChE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACxB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/D,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;SAClC,CAAC;IACJ,CAAC;IAEM,cAAc,CAAC,IAAY,EAAE,UAAmB;QACrD,MAAM,KAAK,GAAG,UAAU;YACtB,CAAC,CAAC,iEAAiE;YACnE,CAAC,CAAC,8CAA8C,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAChC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACxB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/D,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;SAClC,CAAC;IACJ,CAAC;IAEM,WAAW,CAAC,UAAmB;QACpC,MAAM,KAAK,GAAG,UAAU;YACtB,CAAC,CAAC,qEAAqE;YACvE,CAAC,CAAC,gDAAgD,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAA8B,CAAC;QAE3F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACxB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/D,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;SAClC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,oCAAoC;IAE7B,gBAAgB,CAAC,QAAsB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;KAS5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CACN,QAAQ,CAAC,EAAE,EACX,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,OAAO,CACjB,CAAC;IACJ,CAAC;IAEM,eAAe,CAAC,EAAU;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;QAChE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;YACvC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC7C,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC9B,CAAC;IACJ,CAAC;IAEM,kBAAkB,CAAC,EAAU;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IAED,gCAAgC;IAExB,cAAc,CAAC,GAA4B;QACjD,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC;QACnE,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,EACjC,mBAAmB,EACnB,uBAAuB,CACxB,CAAC;QACF,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;YAC1C,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YACjC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;YACxC,eAAe;YACf,mBAAmB;YACnB,uBAAuB;YACvB,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;YAC9C,gBAAgB,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;YAChF,gBAAgB,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;YAChF,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAC5D,kBAAkB,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI;YACtF,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,CAAC;SAC9D,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,KAAgB;QACnC,MAAM,mBAAmB,GACvB,KAAK,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,uBAAuB,GAC3B,KAAK,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,KAAK,CAAC,eAAe,IAAI,CAAC,EAC1B,mBAAmB,EACnB,uBAAuB,CACxB,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8B5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,YAAY,EAClB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,CAAC,aAAa,IAAI,CAAC,EACxB,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAC9B,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAC9B,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,kBAAkB,IAAI,IAAI,EAChC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC;IAEM,kBAAkB,CACvB,EAAU,EACV,IAAiC,EACjC,OAAgB,EAChB,QAAwB,EACxB,QAAwB;QAExB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,CAAC;QACpC,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE1C,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;OAS5B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,2BAA2B,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;YAErB,GAAG;;;;;;KAMV,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IAEM,oBAAoB,CAAC,EAAU,EAAE,IAAiC;QACvE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;;;;;;;OASH,CACE;iBACA,GAAG,CAAC,EAAE,CAAC,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC;QAElD,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;KASH,CACE;aACA,GAAG,CACF,OAAO,EACP,MAAM,EACN,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,EAAE,CACH,CAAC;IACN,CAAC;IAEM,gBAAgB,CAAC,EAAU,EAAE,OAAgB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;QACtF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAEM,uBAAuB,CAAC,EAAU,EAAE,OAAgB;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;QAC9F,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAEM,YAAY,CAAC,EAAU;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;QAChE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,kBAAkB,CAAC,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAwC,CAAC;QACtE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,kBAAkB,CAAC,IAAY;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAwC,CAAC;QAClE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,eAAe,CAAC,EAAU;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IAEM,gBAAgB;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAoC,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAEM,WAAW,CAAC,EAAU;QAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,6BAA6B;IAEtB,WAAW,CAAC,OAAuB,EAAE,YAAY,GAAG,KAAK;QAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;KAS5B,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;gBACvE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC1B,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,CAAC,CAAC,OAAO,IAAI,IAAI,EACjB,CAAC,CAAC,SAAS,IAAI,GAAG,CACnB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,UAAU;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAoC,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACpB,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;YACnC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5B,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;SAChC,CAAC,CAAC,CAAC;IACN,CAAC;IAEM,aAAa;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnB,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,iCAAiC;IAE1B,cAAc,CAAC,MAAwB;QAC5C,MAAM,gBAAgB,GACpB,MAAM,CAAC,gBAAgB;YACvB,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChG,MAAM,eAAe,GACnB,MAAM,CAAC,eAAe;YACtB,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE/F,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAY5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,OAAO,EACd,gBAAgB,EAChB,eAAe,EACf,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,aAAa,IAAI,IAAI,EAC5B,MAAM,CAAC,WAAW,IAAI,IAAI,EAC1B,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CACnD,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,UAAkB;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,mFAAmF,CACpF,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAwC,CAAC;QACxE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,0BAA0B,CAAC,WAAmB;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,0FAA0F,CAC3F,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAwC,CAAC;QACzE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,sBAAsB,CAAC,OAAe;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,gFAAgF,CACjF,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAwC,CAAC;QACrE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,yBAAyB,CAAC,UAAkB;QACjD,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAEM,gBAAgB,CAAC,UAAkB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;IAEM,6BAA6B,CAAC,WAAmB;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;QACrF,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC;IAEM,eAAe,CAAC,MAAyB;QAC9C,MAAM,IAAI,GAAG,MAAM;YACjB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC;YACzF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAmC,CAAC;QACxF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,gBAAgB,CAAC,GAA4B;QACnD,MAAM,gBAAgB,GACpB,GAAG,CAAC,kBAAkB,KAAK,IAAI,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS;YACrE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,eAAe,GACnB,GAAG,CAAC,iBAAiB,KAAK,IAAI,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS;YACnE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,SAAS,GAAG,gBAAgB,IAAI,eAAe,IAAI,SAAS,CAAC;QACnE,OAAO;YACL,SAAS;YACT,gBAAgB;YAChB,eAAe;YACf,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;YACnC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,aAAa,EACX,GAAG,CAAC,cAAc,KAAK,IAAI,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS;gBAC7D,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC5B,CAAC,CAAC,IAAI;YACV,WAAW,EACT,GAAG,CAAC,YAAY,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS;gBACzD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1B,CAAC,CAAC,IAAI;YACV,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAqB;YAC9C,UAAU,EACR,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;SAC7F,CAAC;IACJ,CAAC;IAEM,KAAK;QACV,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;CACF"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAsB/C,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAsB/C,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,QAqC1B,CAAC;AAET,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CA8I3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -49,7 +49,7 @@ Emit manages articles, taxonomies, and media as plain files on your local filesy
|
|
|
49
49
|
- posts/conflicts/<name>.conflict.md : Preserved divergent local copies (read-only rescue content; never an article)
|
|
50
50
|
- categories/<id>-<name>.yaml : Category definitions
|
|
51
51
|
- tags/<id>-<name>.yaml : Tag definitions
|
|
52
|
-
- media/<
|
|
52
|
+
- media/<markdownRef>.<ext> & .yaml : Media assets & companion metadata (markdownRef derived from the storageKey)
|
|
53
53
|
- media/drafts/<filename> : Staging folder for offline draft images (auto-uploaded on sync_push)
|
|
54
54
|
|
|
55
55
|
## Rescue Copy Rule (posts/conflicts/)
|
|
@@ -58,9 +58,11 @@ Emit manages articles, taxonomies, and media as plain files on your local filesy
|
|
|
58
58
|
- Never pass a posts/conflicts/ path to sync_push: it is refused with QUARANTINED_COPY_NOT_PUSHABLE because it would overwrite the canonical article with stale content.
|
|
59
59
|
|
|
60
60
|
## Media & Image Rules (Two Distinct ID Spaces)
|
|
61
|
+
- Every EmDash asset has two unrelated ULIDs: the D1 media record id (used by GET /_emdash/api/media/{id}) and the R2 storageKey (served by /_emdash/api/media/file/{storageKey}). They never match for the same asset, so a local mirror named media/<yyyyMMdd>_<record-id>-<name> is never addressable by its own body URL. Full specification: docs/media-id-spaces.md in this repository.
|
|
61
62
|
- Frontmatter featuredImage uses the 26-character media record id (e.g. "01M67P0MBMJQQXH2K95HHCYRYB") or null.
|
|
62
63
|
- Markdown body images use the storageKey-based URL: . Never put a media record id in /_emdash/api/media/file/.
|
|
63
|
-
- For new local images, place the file in media/drafts/<filename> and reference it on a standalone line: . sync_push will automatically upload it, rewrite the Markdown URL, and promote the file into media
|
|
64
|
+
- For new local images, place the file in media/drafts/<filename> and reference it on a standalone line: . sync_push will automatically upload it, rewrite the Markdown URL, and promote the file into media.
|
|
65
|
+
- Never treat an unresolved body storageKey as proof that a media record is missing, and never create or register media records from Emit. GET /_emdash/api/media/{id} searches the record id, so querying it with a storageKey returns 401 without a bearer token and 404 for a record that does exist. The list operation GET /_emdash/api/media is the only endpoint that reports each record's own storageKey and exposes no key filter. Use sync_doctor with checkMediaLibrary:true to compare remote and local counts before investigating server-side.
|
|
64
66
|
|
|
65
67
|
## AI Workflow (The Golden Path)
|
|
66
68
|
1. [CHECK]: Use sync_status to inspect locally tracked articles. Returns a summary-first payload (actionRequired capped at 30 items, recentArticles 5 items). To locate specific articles across the full workspace, use search (title/slug/id/filePath) or slugFilter. If articles are already present locally, do NOT query remote CMS APIs (e.g. emdash MCP tools like content_list).
|
|
@@ -71,7 +73,7 @@ Emit manages articles, taxonomies, and media as plain files on your local filesy
|
|
|
71
73
|
6. [DELETE]: Use sync_delete to permanently delete an article from both local workspace and remote CMS. Strictly refuses deletion if unpushed local modifications exist. Requires allowDeletePublished: true for published articles. Automatically saves a rescue copy in posts/conflicts/<file>.deleted.md and preserves referenced media files in media/.
|
|
72
74
|
7. [CONFLICTS]: Use sync_conflicts to inspect quarantined sync conflict copies (.conflict.md) and deletion rescue backups (.deleted.md) in posts/conflicts/ (action: 'list' | 'diff' | 'resolve', strategy: 'accept-local' | 'accept-canonical'). Overwriting canonical files with unpushed edits requires force: true (G13).
|
|
73
75
|
8. [DOCTOR]: Use sync_doctor to diagnose workspace health (version compatibility, origin consistency, frontmatter integrity, conflicts/quarantine, and media references).
|
|
74
|
-
9. [MEDIA]:
|
|
76
|
+
9. [MEDIA]: Referenced media in articles is mirrored on-demand automatically by sync_pull. If targeted media pull is needed for an article, use sync_pull_media with article: <ULID>. Do NOT use sync_pull_media with all: true in routine workflows (it downloads all binary files from remote and can overwhelm disk and bandwidth). If diagnosing unresolved media references, check sync_doctor with checkMediaLibrary: true first, and read docs/media-id-spaces.md before chasing a missing image.
|
|
75
77
|
All tool responses include "_meta" context describing profile, workspace directory, origin, and resolution mechanism.
|
|
76
78
|
`.trim();
|
|
77
79
|
export function createMcpServer(options) {
|