@se-studio/contentful-cms 2.6.1 → 2.7.1
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 +12 -0
- package/dist/commands/asset.d.ts.map +1 -1
- package/dist/commands/asset.js +9 -5
- package/dist/commands/asset.js.map +1 -1
- package/dist/commands/create-from-json.d.ts.map +1 -1
- package/dist/commands/create-from-json.js +11 -0
- package/dist/commands/create-from-json.js.map +1 -1
- package/dist/commands/create-taxonomy.d.ts.map +1 -1
- package/dist/commands/create-taxonomy.js +5 -3
- package/dist/commands/create-taxonomy.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +13 -3
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/nav.d.ts.map +1 -1
- package/dist/commands/nav.js +14 -0
- package/dist/commands/nav.js.map +1 -1
- package/dist/commands/save.d.ts.map +1 -1
- package/dist/commands/save.js +13 -0
- package/dist/commands/save.js.map +1 -1
- package/dist/editor-pack/generate.d.ts.map +1 -1
- package/dist/editor-pack/generate.js +6 -0
- package/dist/editor-pack/generate.js.map +1 -1
- package/dist/generated/hosted-guide.d.ts +1 -1
- package/dist/generated/hosted-guide.d.ts.map +1 -1
- package/dist/generated/hosted-guide.js +1 -1
- package/dist/generated/hosted-guide.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/hosted/index.d.ts +1 -0
- package/dist/hosted/index.d.ts.map +1 -1
- package/dist/hosted/index.js +1 -0
- package/dist/hosted/index.js.map +1 -1
- package/dist/hosted/next/redis.d.ts.map +1 -1
- package/dist/hosted/next/redis.js +11 -3
- package/dist/hosted/next/redis.js.map +1 -1
- package/dist/hosted/next/routes/mcp.d.ts.map +1 -1
- package/dist/hosted/next/routes/mcp.js +2 -1
- package/dist/hosted/next/routes/mcp.js.map +1 -1
- package/dist/index/blob.d.ts +5 -0
- package/dist/index/blob.d.ts.map +1 -0
- package/dist/index/blob.js +15 -0
- package/dist/index/blob.js.map +1 -0
- package/dist/index/cache-keys.d.ts +9 -0
- package/dist/index/cache-keys.d.ts.map +1 -0
- package/dist/index/cache-keys.js +13 -0
- package/dist/index/cache-keys.js.map +1 -0
- package/dist/index/cache-store.d.ts +31 -0
- package/dist/index/cache-store.d.ts.map +1 -0
- package/dist/index/cache-store.js +17 -0
- package/dist/index/cache-store.js.map +1 -0
- package/dist/index/distributed-sync-lock.d.ts +3 -0
- package/dist/index/distributed-sync-lock.d.ts.map +1 -0
- package/dist/index/distributed-sync-lock.js +22 -0
- package/dist/index/distributed-sync-lock.js.map +1 -0
- package/dist/index/file-index-cache.d.ts +16 -0
- package/dist/index/file-index-cache.d.ts.map +1 -0
- package/dist/index/file-index-cache.js +103 -0
- package/dist/index/file-index-cache.js.map +1 -0
- package/dist/index/hydrate.d.ts +4 -0
- package/dist/index/hydrate.d.ts.map +1 -0
- package/dist/index/hydrate.js +24 -0
- package/dist/index/hydrate.js.map +1 -0
- package/dist/index/invalidate.d.ts +24 -0
- package/dist/index/invalidate.d.ts.map +1 -0
- package/dist/index/invalidate.js +60 -0
- package/dist/index/invalidate.js.map +1 -0
- package/dist/index/patch-index.d.ts +12 -0
- package/dist/index/patch-index.d.ts.map +1 -0
- package/dist/index/patch-index.js +40 -0
- package/dist/index/patch-index.js.map +1 -0
- package/dist/index/publish-cache.d.ts +5 -0
- package/dist/index/publish-cache.d.ts.map +1 -0
- package/dist/index/publish-cache.js +26 -0
- package/dist/index/publish-cache.js.map +1 -0
- package/dist/index/redis-index-cache.d.ts +24 -0
- package/dist/index/redis-index-cache.d.ts.map +1 -0
- package/dist/index/redis-index-cache.js +83 -0
- package/dist/index/redis-index-cache.js.map +1 -0
- package/dist/index/require.d.ts +5 -4
- package/dist/index/require.d.ts.map +1 -1
- package/dist/index/require.js +17 -6
- package/dist/index/require.js.map +1 -1
- package/dist/index/run-sync.d.ts +2 -0
- package/dist/index/run-sync.d.ts.map +1 -1
- package/dist/index/run-sync.js +16 -9
- package/dist/index/run-sync.js.map +1 -1
- package/dist/index/sync.d.ts +9 -1
- package/dist/index/sync.d.ts.map +1 -1
- package/dist/index/sync.js +53 -0
- package/dist/index/sync.js.map +1 -1
- package/dist/runtime/context.d.ts +3 -0
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/context.js.map +1 -1
- package/dist/session/session-store.d.ts +2 -1
- package/dist/session/session-store.d.ts.map +1 -1
- package/docs/editor-tasks/create-article.md +24 -7
- package/docs/help/fields-article.md +59 -10
- package/docs/help/index-sync.md +9 -3
- package/docs/mcp/e2e-test-prompt.md +1 -1
- package/docs/mcp/hosted-guide.md +2 -0
- package/package.json +1 -1
package/dist/index/require.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ContentIndexSyncError } from './errors.js';
|
|
2
|
+
import { tryHydrateIndexFromCache } from './hydrate.js';
|
|
2
3
|
import { resolveIndexPreview } from './mode.js';
|
|
3
4
|
import { getIndexSyncedAt } from './query.js';
|
|
4
5
|
import { runContentIndexSync } from './run-sync.js';
|
|
5
|
-
import { getIndexSyncReason, INDEX_STALE_MS, isSyncedAtStale, } from './sync.js';
|
|
6
|
+
import { getIndexSyncReason, INDEX_STALE_MS, indexSyncModeForReason, isSyncedAtStale, resolveIndexSyncReason, } from './sync.js';
|
|
6
7
|
import { IndexSyncLockError } from './sync-lock.js';
|
|
7
8
|
import { isIndexSyncVerbose } from './sync-log.js';
|
|
8
9
|
function rebuildMessage(reason) {
|
|
@@ -13,17 +14,23 @@ function rebuildMessage(reason) {
|
|
|
13
14
|
return 'Rebuilding content index (schema outdated)…';
|
|
14
15
|
case 'stale':
|
|
15
16
|
return 'Refreshing content index (stale >24h, incremental)…';
|
|
17
|
+
case 'invalidated-incremental':
|
|
18
|
+
return 'Refreshing content index (recent edits, incremental)…';
|
|
19
|
+
case 'invalidated-full':
|
|
20
|
+
return 'Rebuilding content index (catalog change, full)…';
|
|
16
21
|
default:
|
|
17
22
|
return 'Syncing content index…';
|
|
18
23
|
}
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
|
-
* Ensures the local content index exists and is current (schema
|
|
22
|
-
* Auto-sync: full rebuild when missing
|
|
26
|
+
* Ensures the local content index exists and is current (schema v4, synced within 24h,
|
|
27
|
+
* and not invalidated by a committed write). Auto-sync: full rebuild when missing, schema
|
|
28
|
+
* outdated, or fully invalidated; incremental when only stale or incrementally invalidated.
|
|
23
29
|
*/
|
|
24
30
|
export async function ensureContentIndex(space, opts = {}) {
|
|
25
31
|
const preview = resolveIndexPreview(opts.preview);
|
|
26
|
-
|
|
32
|
+
await tryHydrateIndexFromCache(space, preview);
|
|
33
|
+
const reason = await resolveIndexSyncReason(space, preview);
|
|
27
34
|
if (reason === 'current') {
|
|
28
35
|
const syncedAt = getIndexSyncedAt(space, preview);
|
|
29
36
|
return {
|
|
@@ -32,7 +39,11 @@ export async function ensureContentIndex(space, opts = {}) {
|
|
|
32
39
|
rebuilt: false,
|
|
33
40
|
};
|
|
34
41
|
}
|
|
35
|
-
const mode = reason
|
|
42
|
+
const mode = indexSyncModeForReason(reason);
|
|
43
|
+
if (!mode) {
|
|
44
|
+
const syncedAt = getIndexSyncedAt(space, preview);
|
|
45
|
+
return { syncedAt, stale: false, rebuilt: false };
|
|
46
|
+
}
|
|
36
47
|
opts.onRebuild?.(rebuildMessage(reason));
|
|
37
48
|
try {
|
|
38
49
|
const result = await runContentIndexSync(space, {
|
|
@@ -56,5 +67,5 @@ export async function ensureContentIndex(space, opts = {}) {
|
|
|
56
67
|
throw new ContentIndexSyncError(`Content index sync failed (${detail}). Run: cms-edit index sync`, { cause: err });
|
|
57
68
|
}
|
|
58
69
|
}
|
|
59
|
-
export { INDEX_STALE_MS };
|
|
70
|
+
export { getIndexSyncReason, INDEX_STALE_MS };
|
|
60
71
|
//# sourceMappingURL=require.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require.js","sourceRoot":"","sources":["../../src/index/require.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAsB,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,cAAc,EAEd,eAAe,
|
|
1
|
+
{"version":3,"file":"require.js","sourceRoot":"","sources":["../../src/index/require.ts"],"names":[],"mappings":"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"}
|
package/dist/index/run-sync.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface RunContentIndexSyncOptions {
|
|
|
12
12
|
mode?: IndexSyncMode;
|
|
13
13
|
/** Progress on stderr; also enabled with `LOG_CMS_INDEX=1`. */
|
|
14
14
|
verbose?: boolean;
|
|
15
|
+
/** When false, skip publishing the SQLite blob to the shared cache (internal). */
|
|
16
|
+
publishCache?: boolean;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* Fetches CDA/CPA payload and rebuilds or merges into the local SQLite index.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-sync.d.ts","sourceRoot":"","sources":["../../src/index/run-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-sync.d.ts","sourceRoot":"","sources":["../../src/index/run-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYtD,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAGnB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC;AAEnD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAkBD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,0BAA+B,GACpC,OAAO,CAAC,eAAe,CAAC,CAsE1B"}
|
package/dist/index/run-sync.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { fetchCdaIndexPayload } from '../contentful/cda-sync.js';
|
|
2
2
|
import { DEFAULT_DELIVERY_KEY_NAME, resolveDeliveryAccessToken, } from '../contentful/delivery-token.js';
|
|
3
3
|
import { warnMsg } from '../output/print.js';
|
|
4
|
+
import { withDistributedIndexSyncLock } from './distributed-sync-lock.js';
|
|
4
5
|
import { resolveIndexPreview } from './mode.js';
|
|
5
6
|
import { ensureIndexDirectory, getIndexDbPath } from './paths.js';
|
|
7
|
+
import { publishIndexCache } from './publish-cache.js';
|
|
6
8
|
import { getIndexSyncedAt } from './query.js';
|
|
7
|
-
import { getIndexSyncReason, mergeIndexFromPayload, rebuildIndexFromPayload, } from './sync.js';
|
|
8
|
-
import { withIndexSyncLock } from './sync-lock.js';
|
|
9
|
+
import { getIndexSyncReason, indexSyncModeForReason, mergeIndexFromPayload, rebuildIndexFromPayload, resolveIndexSyncReason, } from './sync.js';
|
|
9
10
|
import { indexSyncVerbose, isIndexSyncVerbose } from './sync-log.js';
|
|
10
|
-
function resolveSyncMode(space, preview, requested) {
|
|
11
|
+
async function resolveSyncMode(space, preview, requested) {
|
|
11
12
|
if (requested === 'full')
|
|
12
13
|
return 'full';
|
|
13
14
|
if (requested === 'incremental')
|
|
14
15
|
return 'incremental';
|
|
15
|
-
const reason =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const reason = await resolveIndexSyncReason(space, preview);
|
|
17
|
+
const fromReason = indexSyncModeForReason(reason);
|
|
18
|
+
if (fromReason)
|
|
19
|
+
return fromReason;
|
|
20
|
+
const legacyReason = getIndexSyncReason(space, preview);
|
|
21
|
+
return indexSyncModeForReason(legacyReason) ?? 'full';
|
|
19
22
|
}
|
|
20
23
|
/**
|
|
21
24
|
* Fetches CDA/CPA payload and rebuilds or merges into the local SQLite index.
|
|
@@ -24,9 +27,10 @@ export async function runContentIndexSync(space, opts = {}) {
|
|
|
24
27
|
const preview = resolveIndexPreview(opts.preview);
|
|
25
28
|
ensureIndexDirectory(space, preview);
|
|
26
29
|
const dbPath = getIndexDbPath(space, preview);
|
|
27
|
-
const mode = resolveSyncMode(space, preview, opts.mode);
|
|
30
|
+
const mode = await resolveSyncMode(space, preview, opts.mode);
|
|
28
31
|
const verbose = opts.verbose === true || isIndexSyncVerbose();
|
|
29
|
-
|
|
32
|
+
const publishCache = opts.publishCache !== false;
|
|
33
|
+
return withDistributedIndexSyncLock(space, preview, dbPath, async () => {
|
|
30
34
|
if (verbose) {
|
|
31
35
|
indexSyncVerbose(`Starting ${mode} sync → ${dbPath}${preview ? ' (preview/draft)' : ' (published)'}`);
|
|
32
36
|
}
|
|
@@ -63,6 +67,9 @@ export async function runContentIndexSync(space, opts = {}) {
|
|
|
63
67
|
indexSyncVerbose(`Done (${result.syncMode}): ${String(result.assetCount)} assets, ` +
|
|
64
68
|
`${String(result.mediaCount)} media, ${String(result.referenceCount)} catalog in index`);
|
|
65
69
|
}
|
|
70
|
+
if (publishCache) {
|
|
71
|
+
await publishIndexCache(space, preview, result);
|
|
72
|
+
}
|
|
66
73
|
return result;
|
|
67
74
|
});
|
|
68
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-sync.js","sourceRoot":"","sources":["../../src/index/run-sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"run-sync.js","sourceRoot":"","sources":["../../src/index/run-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index/sync.d.ts
CHANGED
|
@@ -15,16 +15,24 @@ export interface SyncIndexResult {
|
|
|
15
15
|
/** `full` replaced all rows; `incremental` merged updates since last sync. */
|
|
16
16
|
syncMode: 'full' | 'incremental';
|
|
17
17
|
}
|
|
18
|
-
export type IndexSyncReason = 'missing' | 'schema' | 'stale' | 'current';
|
|
18
|
+
export type IndexSyncReason = 'missing' | 'schema' | 'stale' | 'invalidated-full' | 'invalidated-incremental' | 'current';
|
|
19
|
+
export type IndexSyncMode = 'full' | 'incremental';
|
|
20
|
+
export declare function indexSyncModeForReason(reason: IndexSyncReason): IndexSyncMode | null;
|
|
19
21
|
export declare function rebuildIndexFromPayload(space: SpaceConfig, options: SyncIndexOptions): SyncIndexResult;
|
|
20
22
|
/** Merges CDA rows into an existing index (upsert). Used for stale refresh with same schema. */
|
|
21
23
|
export declare function mergeIndexFromPayload(space: SpaceConfig, options: SyncIndexOptions): SyncIndexResult;
|
|
22
24
|
/** Upsert a single asset row after CMA upload (optional dedup freshness). */
|
|
23
25
|
export declare function upsertAssetRow(space: SpaceConfig, asset: CdaAssetRecord, preview?: boolean): void;
|
|
26
|
+
/** Removes a catalog row after a committed delete. */
|
|
27
|
+
export declare function deleteReferenceRow(space: SpaceConfig, entryId: string, preview?: boolean): void;
|
|
28
|
+
/** Removes an asset row after a committed delete. */
|
|
29
|
+
export declare function deleteAssetRow(space: SpaceConfig, assetId: string, preview?: boolean): void;
|
|
24
30
|
/** Upsert a single reference row after taxonomy/template create. */
|
|
25
31
|
export declare function upsertReferenceRow(space: SpaceConfig, reference: CdaReferenceRecord, preview?: boolean): void;
|
|
26
32
|
export declare function getStoredSchemaVersion(space: SpaceConfig, preview?: boolean): number | null;
|
|
27
33
|
export declare function getIndexSyncReason(space: SpaceConfig, preview?: boolean): IndexSyncReason;
|
|
34
|
+
/** Resolves sync reason including shared invalidation markers (Redis or file). */
|
|
35
|
+
export declare function resolveIndexSyncReason(space: SpaceConfig, preview?: boolean): Promise<IndexSyncReason>;
|
|
28
36
|
/** True when the index must be synced (missing, schema mismatch, or older than 24h). */
|
|
29
37
|
export declare function indexNeedsRebuild(space: SpaceConfig, preview?: boolean): boolean;
|
|
30
38
|
export declare function readIndexStatus(space: SpaceConfig, preview?: boolean): {
|
package/dist/index/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/index/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/index/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index/sync.js
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
import { hashDeliveryToken } from '../contentful/delivery-token.js';
|
|
2
|
+
import { indexCacheKeyFromSpace } from './cache-keys.js';
|
|
3
|
+
import { getIndexCacheStore } from './cache-store.js';
|
|
2
4
|
import { getMeta, openIndexDatabase, setMeta } from './db.js';
|
|
3
5
|
import { DEFAULT_INDEX_PREVIEW, resolveIndexPreview } from './mode.js';
|
|
4
6
|
import { ensureIndexDirectory, getIndexDbPath, indexExists } from './paths.js';
|
|
7
|
+
import { getIndexSyncedAt } from './query.js';
|
|
5
8
|
import { SCHEMA_VERSION } from './schema.js';
|
|
9
|
+
export function indexSyncModeForReason(reason) {
|
|
10
|
+
switch (reason) {
|
|
11
|
+
case 'missing':
|
|
12
|
+
case 'schema':
|
|
13
|
+
case 'invalidated-full':
|
|
14
|
+
return 'full';
|
|
15
|
+
case 'stale':
|
|
16
|
+
case 'invalidated-incremental':
|
|
17
|
+
return 'incremental';
|
|
18
|
+
case 'current':
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
6
22
|
function clearTables(db) {
|
|
7
23
|
db.exec('DELETE FROM assets; DELETE FROM media; DELETE FROM reference_entries;');
|
|
8
24
|
}
|
|
@@ -157,6 +173,26 @@ function refreshReferenceCountMeta(db) {
|
|
|
157
173
|
const row = db.prepare(`SELECT COUNT(*) AS count FROM reference_entries`).get();
|
|
158
174
|
setMeta(db, 'referenceCount', String(row.count));
|
|
159
175
|
}
|
|
176
|
+
/** Removes a catalog row after a committed delete. */
|
|
177
|
+
export function deleteReferenceRow(space, entryId, preview = DEFAULT_INDEX_PREVIEW) {
|
|
178
|
+
const dbPath = getIndexDbPath(space, preview);
|
|
179
|
+
if (!indexExists(space, preview))
|
|
180
|
+
return;
|
|
181
|
+
const db = openIndexDatabase(dbPath);
|
|
182
|
+
db.prepare('DELETE FROM reference_entries WHERE id = ?').run(entryId);
|
|
183
|
+
refreshReferenceCountMeta(db);
|
|
184
|
+
db.close();
|
|
185
|
+
}
|
|
186
|
+
/** Removes an asset row after a committed delete. */
|
|
187
|
+
export function deleteAssetRow(space, assetId, preview = DEFAULT_INDEX_PREVIEW) {
|
|
188
|
+
const dbPath = getIndexDbPath(space, preview);
|
|
189
|
+
if (!indexExists(space, preview))
|
|
190
|
+
return;
|
|
191
|
+
const db = openIndexDatabase(dbPath);
|
|
192
|
+
db.prepare('DELETE FROM assets WHERE id = ?').run(assetId);
|
|
193
|
+
db.prepare('DELETE FROM media WHERE assetId = ?').run(assetId);
|
|
194
|
+
db.close();
|
|
195
|
+
}
|
|
160
196
|
/** Upsert a single reference row after taxonomy/template create. */
|
|
161
197
|
export function upsertReferenceRow(space, reference, preview = DEFAULT_INDEX_PREVIEW) {
|
|
162
198
|
const dbPath = getIndexDbPath(space, preview);
|
|
@@ -191,6 +227,23 @@ export function getIndexSyncReason(space, preview) {
|
|
|
191
227
|
return 'stale';
|
|
192
228
|
return 'current';
|
|
193
229
|
}
|
|
230
|
+
/** Resolves sync reason including shared invalidation markers (Redis or file). */
|
|
231
|
+
export async function resolveIndexSyncReason(space, preview) {
|
|
232
|
+
const base = getIndexSyncReason(space, preview);
|
|
233
|
+
if (base !== 'current')
|
|
234
|
+
return base;
|
|
235
|
+
const usePreview = resolveIndexPreview(preview);
|
|
236
|
+
const inv = await getIndexCacheStore().getInvalidation(indexCacheKeyFromSpace(space, usePreview));
|
|
237
|
+
if (!inv)
|
|
238
|
+
return 'current';
|
|
239
|
+
const syncedAt = getIndexSyncedAt(space, usePreview);
|
|
240
|
+
if (!syncedAt)
|
|
241
|
+
return 'current';
|
|
242
|
+
if (Date.parse(inv.invalidatedAt) > Date.parse(syncedAt)) {
|
|
243
|
+
return inv.mode === 'full' ? 'invalidated-full' : 'invalidated-incremental';
|
|
244
|
+
}
|
|
245
|
+
return 'current';
|
|
246
|
+
}
|
|
194
247
|
/** True when the index must be synced (missing, schema mismatch, or older than 24h). */
|
|
195
248
|
export function indexNeedsRebuild(space, preview) {
|
|
196
249
|
return getIndexSyncReason(space, preview) !== 'current';
|
package/dist/index/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/index/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/index/sync.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAA6B,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA6B7C,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,yBAAyB;YAC5B,OAAO,aAAa,CAAC;QACvB,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAwB;IAC3C,EAAE,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,EAAwB,EAAE,MAAwB;IACtE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAavB,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,GAAG,EACL,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,SAAS,CACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,EAAwB,EACxB,KAAuB,EACvB,iBAAsC;IAEtC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;GAQvB,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,EAAwB,EAAE,SAA6B;IACpF,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;GAYV,CAAC,CAAC,GAAG,CACJ,SAAS,CAAC,EAAE,EACZ,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,eAAe,EACzB,SAAS,CAAC,IAAI,CACf,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAwB,EAAE,UAAgC;IAClF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,qBAAqB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAwB;IACrD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,EAAwB;IAK/C,MAAM,UAAU,GAAI,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAwB;SAC/F,KAAK,CAAC;IACT,MAAM,UAAU,GAAI,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAwB;SAC9F,KAAK,CAAC;IACT,MAAM,cAAc,GAClB,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAClE,CAAC,KAAK,CAAC;IACR,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CACpB,EAAwB,EACxB,OAAyB,EACzB,OAAgB,EAChB,MAA0E,EAC1E,QAAgB;IAEhB,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAkB,EAClB,OAAyB;IAEzB,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAErC,WAAW,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAExE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC1D,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtD,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO;QACL,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,QAAQ;QACR,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CACnC,KAAkB,EAClB,OAAyB;IAEzB,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC1D,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtD,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO;QACL,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,QAAQ;QACR,QAAQ,EAAE,aAAa;KACxB,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,KAAqB,EACrB,UAAmB,qBAAqB;IAExC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAaV,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CAChB,CAAC;IACF,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,SAAS,yBAAyB,CAAC,EAAwB;IACzD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAE5E,CAAC;IACF,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,OAAe,EACf,UAAmB,qBAAqB;IAExC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO;IAEzC,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtE,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,OAAe,EACf,UAAmB,qBAAqB;IAExC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO;IAEzC,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrC,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3D,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/D,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,SAA6B,EAC7B,UAAmB,qBAAqB;IAExC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO;IAEzC,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrC,qBAAqB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACrC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAkB,EAAE,OAAiB;IAC1E,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACzC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAkB,EAAE,OAAiB;IACtE,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtD,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAChE,IAAI,aAAa,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IAEtD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAEjC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAkB,EAClB,OAAiB;IAEjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC,eAAe,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAClG,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,yBAAyB,CAAC;IAC9E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,KAAkB,EAAE,OAAiB;IACrE,OAAO,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAkB,EAClB,OAAiB;IAWjB,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM;YACN,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACzC,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1D,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM;QACN,QAAQ;QACR,UAAU;QACV,UAAU;QACV,cAAc;QACd,QAAQ;QACR,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAChE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,GAAG,GAAG,CAAC,GAAG,cAAc,CAAC;AAClC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import type { CmsEditConfig } from '../config/types.js';
|
|
3
|
+
import type { IndexCacheStore } from '../index/cache-store.js';
|
|
3
4
|
import type { SessionStore } from '../session/session-store.js';
|
|
4
5
|
export interface ContentfulUserIdentity {
|
|
5
6
|
userId: string;
|
|
@@ -10,6 +11,8 @@ export interface CmsEditRuntimeContext {
|
|
|
10
11
|
config?: CmsEditConfig;
|
|
11
12
|
/** Session persistence backend (filesystem default when omitted). */
|
|
12
13
|
sessionStore?: SessionStore;
|
|
14
|
+
/** Shared content index cache (Redis on hosted; file fallback locally). */
|
|
15
|
+
indexCacheStore?: IndexCacheStore;
|
|
13
16
|
/** Contentful user for session key isolation in hosted mode. */
|
|
14
17
|
user?: ContentfulUserIdentity;
|
|
15
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,qEAAqE;IACrE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gEAAgE;IAChE,IAAI,CAAC,EAAE,sBAAsB,CAAC;CAC/B;AAED,eAAO,MAAM,cAAc,0CAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAAI,qBAAqB,GAAG,SAAS,CAErE;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,OAAO,EAAE,qBAAqB,EAC9B,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB"}
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,qEAAqE;IACrE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gEAAgE;IAChE,IAAI,CAAC,EAAE,sBAAsB,CAAC;CAC/B;AAED,eAAO,MAAM,cAAc,0CAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAAI,qBAAqB,GAAG,SAAS,CAErE;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,OAAO,EAAE,qBAAqB,EAC9B,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAqBrD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAyB,CAAC;AAE7E,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAA8B,EAC9B,EAAwB;IAExB,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -10,7 +10,8 @@ export interface RedisClient {
|
|
|
10
10
|
get(key: string): Promise<unknown>;
|
|
11
11
|
set(key: string, value: string, options?: {
|
|
12
12
|
ex?: number;
|
|
13
|
-
|
|
13
|
+
nx?: boolean;
|
|
14
|
+
}): Promise<boolean | void>;
|
|
14
15
|
del(key: string): Promise<void>;
|
|
15
16
|
keys(pattern: string): Promise<string[]>;
|
|
16
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/session/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,CACF,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/session/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,CACF,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAClG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAIR;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAElE"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- create a blog post
|
|
6
6
|
- new article
|
|
7
7
|
- add publication
|
|
8
|
+
- press release
|
|
8
9
|
|
|
9
10
|
## Requires capabilities
|
|
10
11
|
|
|
@@ -18,11 +19,13 @@
|
|
|
18
19
|
|
|
19
20
|
## Steps
|
|
20
21
|
|
|
21
|
-
1. Resolve article type slug/name
|
|
22
|
-
2.
|
|
23
|
-
3.
|
|
24
|
-
4. `
|
|
25
|
-
5.
|
|
22
|
+
1. Resolve article type slug/name (`list --type articleType`)
|
|
23
|
+
2. Read site playbook for required fields, tags, and which components belong in `content`
|
|
24
|
+
3. **Check template hierarchy** — inspect `articleType.articleTemplate` (`peek --id <template-id>`). Do not add hero/layout components to `content` when the template's `preContent` / `postContent` already provides them
|
|
25
|
+
4. Ask about custom images; apply `defaults` and playbook rules for `featuredImage` and `visuals` (set explicitly when the playbook requires both)
|
|
26
|
+
5. Build `create from-json` payload (article fields + body components per playbook)
|
|
27
|
+
6. `cms_edit ["create", "from-json", "--file", "<path>", "--dry-run", "--strict"]`
|
|
28
|
+
7. On approval, create and `save`
|
|
26
29
|
|
|
27
30
|
Or minimal shell:
|
|
28
31
|
|
|
@@ -30,9 +33,22 @@ Or minimal shell:
|
|
|
30
33
|
cms_edit ["create", "article", "--slug", "<slug>", "--title", "<title>", "--article-type-slug", "<type>"]
|
|
31
34
|
```
|
|
32
35
|
|
|
36
|
+
## Before save
|
|
37
|
+
|
|
38
|
+
Confirm (site playbook may add more):
|
|
39
|
+
|
|
40
|
+
- [ ] `title`, `slug`, `date`, `articleType` correct
|
|
41
|
+
- [ ] `description` set and under ~160 characters when used for SEO meta
|
|
42
|
+
- [ ] `tags` / primary tag set when URL includes a topic segment
|
|
43
|
+
- [ ] `featuredImage` and `visuals` per playbook (`featuredImage` landscape for OG when used for social)
|
|
44
|
+
- [ ] `content` has only the component types the playbook allows (no duplicate heroes from template)
|
|
45
|
+
- [ ] Component `cmsLabel` values renamed from defaults ("New …")
|
|
46
|
+
- [ ] `indexed: true`, `hidden: false` unless intentionally otherwise
|
|
47
|
+
- [ ] `diff` reviewed, then `save`
|
|
48
|
+
|
|
33
49
|
## Confirmation gates
|
|
34
50
|
|
|
35
|
-
1. Confirm slug, title, article type,
|
|
51
|
+
1. Confirm slug, title, article type, tags, and image choices with the user
|
|
36
52
|
2. `--dry-run --strict` before create
|
|
37
53
|
3. `diff` before `save`
|
|
38
54
|
|
|
@@ -43,4 +59,5 @@ cms_edit ["create", "article", "--slug", "<slug>", "--title", "<title>", "--arti
|
|
|
43
59
|
## Related resources
|
|
44
60
|
|
|
45
61
|
- `cms-edit://customer/articles`
|
|
46
|
-
- `cms-edit://customer/defaults`
|
|
62
|
+
- `cms-edit://customer/defaults`
|
|
63
|
+
- `cms-edit help fields-article` — field reference and template hierarchy
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# cms-edit — Article Field Reference
|
|
2
2
|
|
|
3
|
-
An `article` entry is a blog post
|
|
3
|
+
An `article` entry is a blog post, news item, or publication. It has a slug, date, article type classification, and usually a `content` array of body components.
|
|
4
|
+
|
|
5
|
+
Read `cms-edit://customer/articles` for site-specific playbooks (press releases, publications, tag rules).
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
@@ -8,16 +10,58 @@ An `article` entry is a blog post or news item. It has a slug, date, article typ
|
|
|
8
10
|
|
|
9
11
|
| Field | Type | Required | Description |
|
|
10
12
|
|---|---|---|---|
|
|
11
|
-
| `slug` | Text | Yes | URL slug without leading or trailing slash. Example: `part1/part2/part3
|
|
13
|
+
| `slug` | Text | Yes | URL slug without leading or trailing slash. Example: `part1/part2/part3` |
|
|
12
14
|
| `title` | Text | Yes | Article title |
|
|
13
|
-
| `description` | Text | No | SEO meta description
|
|
15
|
+
| `description` | Text | No | SEO meta description — keep under ~160 characters when used for meta |
|
|
16
|
+
| `subtitle` | Text | No | Display line on news/publication heroes (site-specific) |
|
|
14
17
|
| `cmsLabel` | Text | No | Label in Contentful's entry list. Defaults to `title` |
|
|
15
18
|
| `date` | Date | Yes | Publication date in `YYYY-MM-DD` format. Defaults to today in `create from-json` |
|
|
16
19
|
| `articleType` | Link (Entry) | Yes | Link to an `articleType` entry (categorises the article) |
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
+
| `tags` | Array of Links | No | Tag entries (often drives URL topic segment when primary tag is in slug) |
|
|
21
|
+
| `content` | Array of Links | No | Body components — see [Template hierarchy](#template-hierarchy) before adding heroes |
|
|
22
|
+
| `template` | Link (Entry) | No | Per-article layout override (rare); overrides `articleType.articleTemplate` |
|
|
23
|
+
| `featuredImage` | Link (Asset) | No | Often used for OpenGraph / social sharing — prefer **landscape** (wider than tall) |
|
|
24
|
+
| `visuals` | Array of Links | No | Media entries — on many sites drives on-page hero and listing thumbnails |
|
|
25
|
+
| `download` | Link (Asset) | No | Downloadable file (e.g. PDF poster) |
|
|
20
26
|
| `icon` | Link (Asset) | No | Icon asset |
|
|
27
|
+
| `authors` | Array of Links | No | Person entries (ordered bylines) |
|
|
28
|
+
| `externalLink` | Text | No | External URL (e.g. DOI, journal link) |
|
|
29
|
+
| `indexed` | Boolean | Yes | Search indexing (default `true`) |
|
|
30
|
+
| `hidden` | Boolean | Yes | Sitemap visibility (default `false`) |
|
|
31
|
+
|
|
32
|
+
### `featuredImage` vs `visuals`
|
|
33
|
+
|
|
34
|
+
On sites that use **both** fields, they often serve different purposes:
|
|
35
|
+
|
|
36
|
+
| Field | Typical use |
|
|
37
|
+
|-------|-------------|
|
|
38
|
+
| `visuals` | On-page hero image and listing/card thumbnail |
|
|
39
|
+
| `featuredImage` | OpenGraph and social sharing cards (landscape) |
|
|
40
|
+
|
|
41
|
+
Read `cms-edit://customer/articles` and `defaults` for site rules. When the playbook requires both, set each explicitly — do not omit `featuredImage` expecting inheritance to fill gaps on listing or OG surfaces.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Template hierarchy
|
|
46
|
+
|
|
47
|
+
Rendered article layout is assembled from the article entry **and** a resolved **template** entry:
|
|
48
|
+
|
|
49
|
+
1. Article `template` field (if set) — takes precedence
|
|
50
|
+
2. Else linked `articleType` → `articleTemplate` field
|
|
51
|
+
|
|
52
|
+
Template entries provide `preContent` and `postContent` arrays that wrap the article's `content` field. On many marketing sites, **heroes and shells live in the template**, not in per-article `content`.
|
|
53
|
+
|
|
54
|
+
Before adding components to an article:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
cms-edit list --type articleType
|
|
58
|
+
# Note articleTemplate on the target type, then inspect that template:
|
|
59
|
+
cms-edit peek --id <template-entry-id>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Do not duplicate** hero or layout components in `content` when the resolved template's `preContent` / `postContent` already provides them. The site playbook (`cms-edit://customer/articles`) lists which component types belong in `content` (e.g. rich text only).
|
|
63
|
+
|
|
64
|
+
> **Note:** `articleType.articlePageTopContent` exists in Contentful on some spaces but is **not** read by the standard article converter — use `articleTemplate` → `preContent` instead.
|
|
21
65
|
|
|
22
66
|
---
|
|
23
67
|
|
|
@@ -71,6 +115,8 @@ cms-edit set @c0 date "2025-06-01"
|
|
|
71
115
|
|
|
72
116
|
## Adding Content to an Article
|
|
73
117
|
|
|
118
|
+
Check [Template hierarchy](#template-hierarchy) and the site articles playbook first.
|
|
119
|
+
|
|
74
120
|
```bash
|
|
75
121
|
# Add a component to the article's content array
|
|
76
122
|
cms-edit add TextBlock component
|
|
@@ -82,6 +128,8 @@ cms-edit add CardGrid collection
|
|
|
82
128
|
cms-edit add Generic component --after @c3
|
|
83
129
|
```
|
|
84
130
|
|
|
131
|
+
Rename component `cmsLabel` from defaults like "New Article rich text" to a descriptive label (site playbook may specify a pattern).
|
|
132
|
+
|
|
85
133
|
---
|
|
86
134
|
|
|
87
135
|
## In create from-json
|
|
@@ -94,19 +142,20 @@ cms-edit add Generic component --after @c3
|
|
|
94
142
|
"description": "A landmark study on hepatology cohort data.",
|
|
95
143
|
"date": "2025-06-01",
|
|
96
144
|
"articleTypeSlug": "resources/blog",
|
|
97
|
-
"featuredImageAssetFilename": "hero.jpg",
|
|
98
|
-
"
|
|
145
|
+
"featuredImageAssetFilename": "hero-landscape.jpg",
|
|
146
|
+
"visualsIds": ["<media-entry-id>"],
|
|
99
147
|
"components": [
|
|
100
148
|
{
|
|
101
149
|
"contentType": "component",
|
|
102
150
|
"type": "TextBlock",
|
|
103
151
|
"fields": {
|
|
104
152
|
"heading": "Study Overview",
|
|
105
|
-
"body": "The study included 1,200 patients.\n\nResults showed significant improvement."
|
|
153
|
+
"body": "The study included 1,200 patients.\n\nResults showed significant improvement.",
|
|
154
|
+
"cmsLabel": "News — New Hepatology Cohort Study Published"
|
|
106
155
|
}
|
|
107
156
|
}
|
|
108
157
|
]
|
|
109
158
|
}
|
|
110
159
|
```
|
|
111
160
|
|
|
112
|
-
Auto-detection: if `articleTypeId` is present and `type` is omitted, the entry is automatically created as an article.
|
|
161
|
+
Auto-detection: if `articleTypeId` is present and `type` is omitted, the entry is automatically created as an article.
|
package/docs/help/index-sync.md
CHANGED
|
@@ -82,16 +82,22 @@ Commands that depend on the index call **`ensureContentIndex`** internally. You
|
|
|
82
82
|
|
|
83
83
|
| Condition | Auto-sync behaviour |
|
|
84
84
|
|-----------|---------------------|
|
|
85
|
-
| Index missing | **
|
|
85
|
+
| Index missing | **Hydrate** from shared cache blob if valid, else **full** rebuild |
|
|
86
86
|
| Schema version outdated (e.g. v2 → v3) | **Full** rebuild |
|
|
87
|
+
| Committed write invalidated index (incremental) | **Incremental** upsert on next index command |
|
|
88
|
+
| Committed write invalidated index (full — slug change or catalog delete) | **Full** rebuild on next index command |
|
|
87
89
|
| Last sync older than **24 hours** | **Incremental** upsert (`sys.updatedAt[gte]` last `syncedAt`) |
|
|
88
90
|
| Index fresh | No sync |
|
|
89
91
|
|
|
90
92
|
Manual `cms-edit index sync` always performs a **full** rebuild.
|
|
91
93
|
|
|
92
|
-
**
|
|
94
|
+
**Invalidation (lazy, no thrashing):** `save`, `create page|article|…`, `asset upload`, and similar **committed** writes mark the index dirty (Redis on hosted MCP; `invalidation.json` locally). They do **not** sync immediately. The next `list`, `open`, `asset search`, etc. refreshes the index. In-session `set` / `rtf` edits do **not** invalidate.
|
|
93
95
|
|
|
94
|
-
**
|
|
96
|
+
**Shared cache (hosted MCP):** After sync, the SQLite file is gzipped into Redis (~sub-MB for typical spaces). Cold serverless instances restore from Redis instead of re-fetching all assets from the Preview API.
|
|
97
|
+
|
|
98
|
+
**Incremental limitations:** Only rows changed since the last sync are fetched. Entries deleted in Contentful may remain in the index until the next **full** invalidation/sync. Duplicate slug/label/cmsLabel rows in the index cause lookup commands to fail with an explicit error (fix in Contentful, then full sync).
|
|
99
|
+
|
|
100
|
+
**Single writer:** File lock beside `media.db` plus a shared Redis lock on hosted MCP. If another sync is in progress, the command **fails immediately** (exit code 1). Stale file locks (>30 min or dead pid) are removed automatically.
|
|
95
101
|
|
|
96
102
|
## Preview / delivery API token
|
|
97
103
|
|
|
@@ -67,7 +67,7 @@ Every E2E prompt should cover these phases (trim for smoke tests):
|
|
|
67
67
|
|-------|---------|-------------------|
|
|
68
68
|
| **0** Connector | version, health, guide, help | Expected version range |
|
|
69
69
|
| **1** Customer resources | tasks-index, capabilities, routing, indexes | Confirm routing bullets |
|
|
70
|
-
| **2** Discovery | index status, list, resolve, search | Article/tag types if enabled |
|
|
70
|
+
| **2** Discovery | index status, list, resolve, search | `index status` may show not built on a cold hosted instance before any sync; re-check after `list` or `open`. Article/tag types if enabled |
|
|
71
71
|
| **3** Peek | Tree without session | Fallback slug if `/about` missing |
|
|
72
72
|
| **4** Session | open → snapshot → read → diff | Homepage slug from routing |
|
|
73
73
|
| **5** Schema | `schema colours`, `schema types`, `schema fields` | Any site-specific content types |
|
package/docs/mcp/hosted-guide.md
CHANGED
|
@@ -274,6 +274,8 @@ Then open: `["peek", "--article-slug", "<slug>"]` or `["open", "--id", "<entry-i
|
|
|
274
274
|
|
|
275
275
|
After upgrading cms-edit, run `["index", "sync"]` once so the local index includes article `date` values (schema v4).
|
|
276
276
|
|
|
277
|
+
**Index freshness on hosted MCP:** The catalog index is shared via Redis (gzipped SQLite blob). `index status` on a cold instance may show **not built** until `list`, `open`, or another index command runs — that is normal. Committed writes (`save`, `create page`, `asset upload`, …) mark the index dirty; the next discovery command refreshes it. In-session `set` edits do not trigger a sync.
|
|
278
|
+
|
|
277
279
|
## Command reference (cms_edit args)
|
|
278
280
|
|
|
279
281
|
**Discovery:** `list --type <type>`, `search <query>`, `schema <contentType>`, `index sync`, `index status`
|