@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.
Files changed (101) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/asset.d.ts.map +1 -1
  3. package/dist/commands/asset.js +9 -5
  4. package/dist/commands/asset.js.map +1 -1
  5. package/dist/commands/create-from-json.d.ts.map +1 -1
  6. package/dist/commands/create-from-json.js +11 -0
  7. package/dist/commands/create-from-json.js.map +1 -1
  8. package/dist/commands/create-taxonomy.d.ts.map +1 -1
  9. package/dist/commands/create-taxonomy.js +5 -3
  10. package/dist/commands/create-taxonomy.js.map +1 -1
  11. package/dist/commands/create.d.ts.map +1 -1
  12. package/dist/commands/create.js +13 -3
  13. package/dist/commands/create.js.map +1 -1
  14. package/dist/commands/nav.d.ts.map +1 -1
  15. package/dist/commands/nav.js +14 -0
  16. package/dist/commands/nav.js.map +1 -1
  17. package/dist/commands/save.d.ts.map +1 -1
  18. package/dist/commands/save.js +13 -0
  19. package/dist/commands/save.js.map +1 -1
  20. package/dist/editor-pack/generate.d.ts.map +1 -1
  21. package/dist/editor-pack/generate.js +6 -0
  22. package/dist/editor-pack/generate.js.map +1 -1
  23. package/dist/generated/hosted-guide.d.ts +1 -1
  24. package/dist/generated/hosted-guide.d.ts.map +1 -1
  25. package/dist/generated/hosted-guide.js +1 -1
  26. package/dist/generated/hosted-guide.js.map +1 -1
  27. package/dist/generated/version.d.ts +1 -1
  28. package/dist/generated/version.js +1 -1
  29. package/dist/hosted/index.d.ts +1 -0
  30. package/dist/hosted/index.d.ts.map +1 -1
  31. package/dist/hosted/index.js +1 -0
  32. package/dist/hosted/index.js.map +1 -1
  33. package/dist/hosted/next/redis.d.ts.map +1 -1
  34. package/dist/hosted/next/redis.js +11 -3
  35. package/dist/hosted/next/redis.js.map +1 -1
  36. package/dist/hosted/next/routes/mcp.d.ts.map +1 -1
  37. package/dist/hosted/next/routes/mcp.js +2 -1
  38. package/dist/hosted/next/routes/mcp.js.map +1 -1
  39. package/dist/index/blob.d.ts +5 -0
  40. package/dist/index/blob.d.ts.map +1 -0
  41. package/dist/index/blob.js +15 -0
  42. package/dist/index/blob.js.map +1 -0
  43. package/dist/index/cache-keys.d.ts +9 -0
  44. package/dist/index/cache-keys.d.ts.map +1 -0
  45. package/dist/index/cache-keys.js +13 -0
  46. package/dist/index/cache-keys.js.map +1 -0
  47. package/dist/index/cache-store.d.ts +31 -0
  48. package/dist/index/cache-store.d.ts.map +1 -0
  49. package/dist/index/cache-store.js +17 -0
  50. package/dist/index/cache-store.js.map +1 -0
  51. package/dist/index/distributed-sync-lock.d.ts +3 -0
  52. package/dist/index/distributed-sync-lock.d.ts.map +1 -0
  53. package/dist/index/distributed-sync-lock.js +22 -0
  54. package/dist/index/distributed-sync-lock.js.map +1 -0
  55. package/dist/index/file-index-cache.d.ts +16 -0
  56. package/dist/index/file-index-cache.d.ts.map +1 -0
  57. package/dist/index/file-index-cache.js +103 -0
  58. package/dist/index/file-index-cache.js.map +1 -0
  59. package/dist/index/hydrate.d.ts +4 -0
  60. package/dist/index/hydrate.d.ts.map +1 -0
  61. package/dist/index/hydrate.js +24 -0
  62. package/dist/index/hydrate.js.map +1 -0
  63. package/dist/index/invalidate.d.ts +24 -0
  64. package/dist/index/invalidate.d.ts.map +1 -0
  65. package/dist/index/invalidate.js +60 -0
  66. package/dist/index/invalidate.js.map +1 -0
  67. package/dist/index/patch-index.d.ts +12 -0
  68. package/dist/index/patch-index.d.ts.map +1 -0
  69. package/dist/index/patch-index.js +40 -0
  70. package/dist/index/patch-index.js.map +1 -0
  71. package/dist/index/publish-cache.d.ts +5 -0
  72. package/dist/index/publish-cache.d.ts.map +1 -0
  73. package/dist/index/publish-cache.js +26 -0
  74. package/dist/index/publish-cache.js.map +1 -0
  75. package/dist/index/redis-index-cache.d.ts +24 -0
  76. package/dist/index/redis-index-cache.d.ts.map +1 -0
  77. package/dist/index/redis-index-cache.js +83 -0
  78. package/dist/index/redis-index-cache.js.map +1 -0
  79. package/dist/index/require.d.ts +5 -4
  80. package/dist/index/require.d.ts.map +1 -1
  81. package/dist/index/require.js +17 -6
  82. package/dist/index/require.js.map +1 -1
  83. package/dist/index/run-sync.d.ts +2 -0
  84. package/dist/index/run-sync.d.ts.map +1 -1
  85. package/dist/index/run-sync.js +16 -9
  86. package/dist/index/run-sync.js.map +1 -1
  87. package/dist/index/sync.d.ts +9 -1
  88. package/dist/index/sync.d.ts.map +1 -1
  89. package/dist/index/sync.js +53 -0
  90. package/dist/index/sync.js.map +1 -1
  91. package/dist/runtime/context.d.ts +3 -0
  92. package/dist/runtime/context.d.ts.map +1 -1
  93. package/dist/runtime/context.js.map +1 -1
  94. package/dist/session/session-store.d.ts +2 -1
  95. package/dist/session/session-store.d.ts.map +1 -1
  96. package/docs/editor-tasks/create-article.md +24 -7
  97. package/docs/help/fields-article.md +59 -10
  98. package/docs/help/index-sync.md +9 -3
  99. package/docs/mcp/e2e-test-prompt.md +1 -1
  100. package/docs/mcp/hosted-guide.md +2 -0
  101. package/package.json +1 -1
@@ -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 v3, synced within 24h).
22
- * Auto-sync: full rebuild when missing or schema outdated; incremental when only stale.
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
- const reason = getIndexSyncReason(space, preview);
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 === 'stale' ? 'incremental' : 'full';
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,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAenD,SAAS,cAAc,CAAC,MAAuB;IAC7C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,qCAAqC,CAAC;QAC/C,KAAK,QAAQ;YACX,OAAO,6CAA6C,CAAC;QACvD,KAAK,OAAO;YACV,OAAO,qDAAqD,CAAC;QAC/D;YACE,OAAO,wBAAwB,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAkB,EAClB,OAAkC,EAAE;IAEpC,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAElD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;YACL,QAAQ;YACR,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;YAClD,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAkB,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE;YAC9C,OAAO;YACP,gBAAgB,EAAE,IAAI;YACtB,IAAI;YACJ,OAAO,EAAE,kBAAkB,EAAE;SAC9B,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;YACtC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,qBAAqB,CAC7B,8BAA8B,MAAM,6BAA6B,EACjE,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"require.js","sourceRoot":"","sources":["../../src/index/require.ts"],"names":[],"mappings":"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"}
@@ -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;AAUtD,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAInB,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;CACnB;AAeD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,0BAA+B,GACpC,OAAO,CAAC,eAAe,CAAC,CAiE1B"}
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"}
@@ -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 = getIndexSyncReason(space, preview);
16
- if (reason === 'stale')
17
- return 'incremental';
18
- return 'full';
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
- return withIndexSyncLock(dbPath, async () => {
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,GAExB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAiBrE,SAAS,eAAe,CACtB,KAAkB,EAClB,OAAgB,EAChB,SAAyB;IAEzB,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAEtD,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,aAAa,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAkB,EAClB,OAAmC,EAAE;IAErC,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,kBAAkB,EAAE,CAAC;IAE9D,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB,CACd,YAAY,IAAI,WAAW,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,IAAI,OAAO;YAAE,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACtE,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB,CACd,iBAAiB,QAAQ,CAAC,MAAM,EAAE;gBAChC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC/D,OAAO,CACL,qCAAqC,yBAAyB,mBAAmB;gBAC/E,qFAAqF,CACxF,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAChB,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE;YAC/E,YAAY;YACZ,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB,CACd,mBAAmB,IAAI,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW;gBACnE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAC7F,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,OAAO;YACP,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,OAAO;SACR,CAAC;QAEF,MAAM,MAAM,GACV,IAAI,KAAK,aAAa,IAAI,YAAY;YACpC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC;YAC3C,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAElD,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB,CACd,SAAS,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW;gBAChE,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAC1F,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"run-sync.js","sourceRoot":"","sources":["../../src/index/run-sync.ts"],"names":[],"mappings":"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"}
@@ -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): {
@@ -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;AAOnC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;CAClC;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAmIzE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,gBAAgB,GACxB,eAAe,CA4BjB;AAED,gGAAgG;AAChG,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,gBAAgB,GACxB,eAAe,CAyBjB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,OAA+B,GACvC,IAAI,CA6BN;AASD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,GAAE,OAA+B,GACvC,IAAI,CAQN;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAU3F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,eAAe,CAWzF;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAEhF;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB,CAoCA;AAED,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAI3E"}
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;AAUnC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;CAClC;AAED,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,QAAQ,GACR,OAAO,GACP,kBAAkB,GAClB,yBAAyB,GACzB,SAAS,CAAC;AAEd,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC;AAEnD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,GAAG,IAAI,CAYpF;AAmID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,gBAAgB,GACxB,eAAe,CA4BjB;AAED,gGAAgG;AAChG,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,gBAAgB,GACxB,eAAe,CAyBjB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,OAA+B,GACvC,IAAI,CA6BN;AASD,sDAAsD;AACtD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAA+B,GACvC,IAAI,CAQN;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAA+B,GACvC,IAAI,CAQN;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,GAAE,OAA+B,GACvC,IAAI,CAQN;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAU3F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,eAAe,CAWzF;AAED,kFAAkF;AAClF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAEhF;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB,CAoCA;AAED,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAI3E"}
@@ -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';
@@ -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":"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"}
@@ -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;AAkBrD,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"}
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
- }): Promise<void>;
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;IAC1E,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"}
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. Ask about custom featured image; otherwise apply `defaults` inheritance rules
23
- 3. Build `create from-json` payload (article + components from articles playbook)
24
- 4. `cms_edit ["create", "from-json", "--file", "<path>", "--dry-run", "--strict"]`
25
- 5. On approval, create and `save`
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, featured image choice
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 or news item. It has a slug, date, article type classification, and a content array.
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`. Use `index` for the home page. |
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 / article summary |
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
- | `content` | Array of Links | No | Content components (same as page content) |
18
- | `featuredImage` | Link (Asset) | No | Featured / hero image asset |
19
- | `download` | Link (Asset) | No | Downloadable file (e.g. PDF) |
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
- "downloadAssetFilename": "report.pdf",
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.
@@ -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 | **Full** rebuild |
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
- **Incremental limitations:** Only rows changed since the last sync are fetched. Entries deleted in Contentful may remain in the index until the next full `index sync`. Duplicate slug/label/cmsLabel rows in the index cause lookup commands to fail with an explicit error (fix in Contentful, then full sync).
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
- **Single writer:** Only one cms-edit process syncs a given database at a time (file lock beside `media.db`). If another sync is in progress, the command **fails immediately** (exit code 1) with the lock path and holder pid/start time. Stale locks (>30 min or dead pid) are removed automatically.
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 |
@@ -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`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/contentful-cms",
3
- "version": "2.6.1",
3
+ "version": "2.7.1",
4
4
  "description": "CLI tool for AI agents to read and edit Contentful draft content without publish permissions",
5
5
  "repository": {
6
6
  "type": "git",