canopycms 0.0.11 → 0.0.13

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 (143) hide show
  1. package/README.md +24 -27
  2. package/dist/ai/handler.d.ts +3 -3
  3. package/dist/ai/handler.d.ts.map +1 -1
  4. package/dist/ai/handler.js +6 -9
  5. package/dist/ai/handler.js.map +1 -1
  6. package/dist/ai/resolve-branch.d.ts +1 -2
  7. package/dist/ai/resolve-branch.d.ts.map +1 -1
  8. package/dist/ai/resolve-branch.js +8 -9
  9. package/dist/ai/resolve-branch.js.map +1 -1
  10. package/dist/api/branch.js +2 -2
  11. package/dist/api/branch.js.map +1 -1
  12. package/dist/api/comments.d.ts +2 -2
  13. package/dist/api/content.d.ts +4 -4
  14. package/dist/api/content.d.ts.map +1 -1
  15. package/dist/api/content.js +2 -2
  16. package/dist/api/content.js.map +1 -1
  17. package/dist/api/entries.d.ts +2 -2
  18. package/dist/api/entries.d.ts.map +1 -1
  19. package/dist/api/entries.js +2 -2
  20. package/dist/api/entries.js.map +1 -1
  21. package/dist/api/github-sync.js +0 -2
  22. package/dist/api/github-sync.js.map +1 -1
  23. package/dist/api/settings-helpers.d.ts +3 -5
  24. package/dist/api/settings-helpers.d.ts.map +1 -1
  25. package/dist/api/settings-helpers.js +6 -19
  26. package/dist/api/settings-helpers.js.map +1 -1
  27. package/dist/api/validators.d.ts +3 -13
  28. package/dist/api/validators.d.ts.map +1 -1
  29. package/dist/api/validators.js +3 -26
  30. package/dist/api/validators.js.map +1 -1
  31. package/dist/auth/caching-auth-plugin.d.ts +7 -1
  32. package/dist/auth/caching-auth-plugin.d.ts.map +1 -1
  33. package/dist/auth/caching-auth-plugin.js +31 -3
  34. package/dist/auth/caching-auth-plugin.js.map +1 -1
  35. package/dist/auth/plugin.d.ts +1 -1
  36. package/dist/authorization/types.d.ts +1 -1
  37. package/dist/branch-registry.js +1 -1
  38. package/dist/branch-registry.js.map +1 -1
  39. package/dist/branch-schema-cache.d.ts +8 -13
  40. package/dist/branch-schema-cache.d.ts.map +1 -1
  41. package/dist/branch-schema-cache.js +55 -44
  42. package/dist/branch-schema-cache.js.map +1 -1
  43. package/dist/cli/cli.d.ts +20 -0
  44. package/dist/cli/cli.d.ts.map +1 -0
  45. package/dist/cli/cli.js +196 -0
  46. package/dist/cli/cli.js.map +1 -0
  47. package/dist/cli/generate-ai-content.js +1508 -733
  48. package/dist/cli/init.d.ts +2 -3
  49. package/dist/cli/init.d.ts.map +1 -1
  50. package/dist/cli/init.js +258 -2861
  51. package/dist/cli/init.js.map +1 -1
  52. package/dist/cli/sync.d.ts +33 -0
  53. package/dist/cli/sync.d.ts.map +1 -0
  54. package/dist/cli/sync.js +510 -0
  55. package/dist/cli/sync.js.map +1 -0
  56. package/dist/config/schemas/config.d.ts +5 -5
  57. package/dist/config/schemas/config.d.ts.map +1 -1
  58. package/dist/config/schemas/config.js +1 -1
  59. package/dist/config/schemas/config.js.map +1 -1
  60. package/dist/config-test.d.ts.map +1 -1
  61. package/dist/config-test.js +0 -1
  62. package/dist/config-test.js.map +1 -1
  63. package/dist/content-id-index.d.ts +3 -3
  64. package/dist/content-id-index.d.ts.map +1 -1
  65. package/dist/content-id-index.js +7 -7
  66. package/dist/content-id-index.js.map +1 -1
  67. package/dist/content-listing.d.ts +3 -3
  68. package/dist/content-listing.d.ts.map +1 -1
  69. package/dist/content-listing.js +1 -1
  70. package/dist/content-listing.js.map +1 -1
  71. package/dist/content-reader.d.ts +2 -2
  72. package/dist/content-reader.d.ts.map +1 -1
  73. package/dist/content-reader.js +1 -1
  74. package/dist/content-reader.js.map +1 -1
  75. package/dist/content-store.d.ts +8 -8
  76. package/dist/content-store.d.ts.map +1 -1
  77. package/dist/content-store.js +6 -9
  78. package/dist/content-store.js.map +1 -1
  79. package/dist/content-tree.d.ts +2 -2
  80. package/dist/content-tree.d.ts.map +1 -1
  81. package/dist/context.js +1 -1
  82. package/dist/context.js.map +1 -1
  83. package/dist/editor/BranchManager.d.ts.map +1 -1
  84. package/dist/editor/BranchManager.js +1 -3
  85. package/dist/editor/BranchManager.js.map +1 -1
  86. package/dist/git-manager.d.ts +2 -3
  87. package/dist/git-manager.d.ts.map +1 -1
  88. package/dist/git-manager.js +12 -4
  89. package/dist/git-manager.js.map +1 -1
  90. package/dist/operating-mode/client-safe-strategy.d.ts +1 -12
  91. package/dist/operating-mode/client-safe-strategy.d.ts.map +1 -1
  92. package/dist/operating-mode/client-safe-strategy.js +5 -42
  93. package/dist/operating-mode/client-safe-strategy.js.map +1 -1
  94. package/dist/operating-mode/client-unsafe-strategy.d.ts.map +1 -1
  95. package/dist/operating-mode/client-unsafe-strategy.js +10 -68
  96. package/dist/operating-mode/client-unsafe-strategy.js.map +1 -1
  97. package/dist/operating-mode/index.d.ts +3 -3
  98. package/dist/operating-mode/index.d.ts.map +1 -1
  99. package/dist/operating-mode/index.js +2 -2
  100. package/dist/operating-mode/types.d.ts +2 -6
  101. package/dist/operating-mode/types.d.ts.map +1 -1
  102. package/dist/paths/index.d.ts +1 -1
  103. package/dist/paths/index.d.ts.map +1 -1
  104. package/dist/paths/index.js.map +1 -1
  105. package/dist/paths/test-utils.d.ts +4 -6
  106. package/dist/paths/test-utils.d.ts.map +1 -1
  107. package/dist/paths/test-utils.js +3 -5
  108. package/dist/paths/test-utils.js.map +1 -1
  109. package/dist/paths/types.d.ts +4 -11
  110. package/dist/paths/types.d.ts.map +1 -1
  111. package/dist/paths/validation.d.ts +5 -6
  112. package/dist/paths/validation.d.ts.map +1 -1
  113. package/dist/paths/validation.js +9 -10
  114. package/dist/paths/validation.js.map +1 -1
  115. package/dist/reference-resolver.d.ts +2 -2
  116. package/dist/reference-resolver.d.ts.map +1 -1
  117. package/dist/reference-resolver.js.map +1 -1
  118. package/dist/services.d.ts +6 -0
  119. package/dist/services.d.ts.map +1 -1
  120. package/dist/services.js +52 -40
  121. package/dist/services.js.map +1 -1
  122. package/dist/settings-branch-utils.d.ts +2 -2
  123. package/dist/settings-branch-utils.js +3 -3
  124. package/dist/settings-branch-utils.js.map +1 -1
  125. package/dist/settings-workspace.d.ts +1 -2
  126. package/dist/settings-workspace.d.ts.map +1 -1
  127. package/dist/settings-workspace.js +1 -2
  128. package/dist/settings-workspace.js.map +1 -1
  129. package/dist/utils/fs.d.ts +3 -0
  130. package/dist/utils/fs.d.ts.map +1 -0
  131. package/dist/utils/fs.js +15 -0
  132. package/dist/utils/fs.js.map +1 -0
  133. package/dist/utils/git.d.ts +7 -0
  134. package/dist/utils/git.d.ts.map +1 -0
  135. package/dist/utils/git.js +17 -0
  136. package/dist/utils/git.js.map +1 -0
  137. package/dist/validation/deletion-checker.d.ts +2 -2
  138. package/dist/validation/deletion-checker.d.ts.map +1 -1
  139. package/dist/worker/task-queue-config.d.ts +2 -4
  140. package/dist/worker/task-queue-config.d.ts.map +1 -1
  141. package/dist/worker/task-queue-config.js +3 -7
  142. package/dist/worker/task-queue-config.js.map +1 -1
  143. package/package.json +4 -2
@@ -102,8 +102,6 @@ export async function syncConvertToDraft(ctx, context) {
102
102
  */
103
103
  async function enqueueGitHubTask(ctx, context, task) {
104
104
  const taskDir = getTaskQueueDir(ctx.services.config);
105
- if (!taskDir)
106
- return {};
107
105
  try {
108
106
  await enqueueTask(taskDir, task);
109
107
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,7 @@ import type { ApiContext } from './types';
2
2
  import type { OperatingMode } from '../operating-mode';
3
3
  /**
4
4
  * Get the appropriate root path for settings (permissions/groups).
5
- * In dev mode, returns the main branch root (.canopy-dev/settings/).
6
- * In prod/prod-sim modes, returns the settings root (settings/).
5
+ * Returns the settings root managed by the settings workspace.
7
6
  */
8
7
  export declare function getSettingsBranchContext(ctx: ApiContext): Promise<{
9
8
  context: {
@@ -17,9 +16,8 @@ export declare function getSettingsBranchContext(ctx: ApiContext): Promise<{
17
16
  }>;
18
17
  /**
19
18
  * Commit and push settings changes based on the mode.
20
- * In dev mode, does nothing (no git operations).
21
- * In prod mode, uses commitToSettingsBranch.
22
- * In prod-sim mode, uses regular commitFiles.
19
+ * Both prod and dev use commitToSettingsBranch.
20
+ * In dev mode, commits to the settings branch but does not create a PR.
23
21
  */
24
22
  export declare function commitSettings(ctx: ApiContext, options: {
25
23
  context: {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-helpers.d.ts","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,UAAU,GACd,OAAO,CACN;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CACpC,CA6BA;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,aAAa,CAAA;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAuBf"}
1
+ {"version":3,"file":"settings-helpers.d.ts","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,UAAU,GACd,OAAO,CACN;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CACpC,CAiBA;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,aAAa,CAAA;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -1,8 +1,7 @@
1
1
  import { operatingStrategy } from '../operating-mode';
2
2
  /**
3
3
  * Get the appropriate root path for settings (permissions/groups).
4
- * In dev mode, returns the main branch root (.canopy-dev/settings/).
5
- * In prod/prod-sim modes, returns the settings root (settings/).
4
+ * Returns the settings root managed by the settings workspace.
6
5
  */
7
6
  export async function getSettingsBranchContext(ctx) {
8
7
  const mode = ctx.services.config.mode;
@@ -12,30 +11,18 @@ export async function getSettingsBranchContext(ctx) {
12
11
  settingsBranch: ctx.services.config.settingsBranch,
13
12
  defaultBaseBranch: ctx.services.config.defaultBaseBranch,
14
13
  });
15
- // For modes with separate settings branch, use settings root
16
- if (strategy.usesSeparateSettingsBranch()) {
17
- // Get settings root and ensure workspace exists
18
- const settingsRoot = await ctx.services.getSettingsBranchRoot();
19
- return {
20
- context: { branchRoot: settingsRoot },
21
- mode,
22
- branchName,
23
- };
24
- }
25
- // For dev mode, settings are stored in .canopy-dev/settings/
26
- // We need to pass the workspace root, not a branch root
27
- const workspaceRoot = ctx.services.config.sourceRoot ?? process.cwd();
14
+ // Both prod and dev use a separate settings branch
15
+ const settingsRoot = await ctx.services.getSettingsBranchRoot();
28
16
  return {
29
- context: { branchRoot: workspaceRoot },
17
+ context: { branchRoot: settingsRoot },
30
18
  mode,
31
19
  branchName,
32
20
  };
33
21
  }
34
22
  /**
35
23
  * Commit and push settings changes based on the mode.
36
- * In dev mode, does nothing (no git operations).
37
- * In prod mode, uses commitToSettingsBranch.
38
- * In prod-sim mode, uses regular commitFiles.
24
+ * Both prod and dev use commitToSettingsBranch.
25
+ * In dev mode, commits to the settings branch but does not create a PR.
39
26
  */
40
27
  export async function commitSettings(ctx, options) {
41
28
  const strategy = operatingStrategy(options.mode);
@@ -1 +1 @@
1
- {"version":3,"file":"settings-helpers.js","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAe;IAKf,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAA;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAExC,0DAA0D;IAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAChD,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc;QAClD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB;KACzD,CAAC,CAAA;IAEF,6DAA6D;IAC7D,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAC1C,gDAAgD;QAChD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA;QAC/D,OAAO;YACL,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;YACrC,IAAI;YACJ,UAAU;SACX,CAAA;IACH,CAAC;IAED,6DAA6D;IAC7D,wDAAwD;IACxD,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACrE,OAAO;QACL,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;QACtC,IAAI;QACJ,UAAU;KACX,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAe,EACf,OAMC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD,oDAAoD;IACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC7B,OAAM;IACR,CAAC;IAED,yEAAyE;IACzE,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACvD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,QAAQ;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC;gBACxC,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB;aAC/D,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"settings-helpers.js","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAe;IAKf,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAA;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAExC,0DAA0D;IAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAChD,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc;QAClD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB;KACzD,CAAC,CAAA;IAEF,mDAAmD;IACnD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA;IAC/D,OAAO;QACL,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;QACrC,IAAI;QACJ,UAAU;KACX,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAe,EACf,OAMC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD,oDAAoD;IACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC7B,OAAM;IACR,CAAC;IAED,yEAAyE;IACzE,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACvD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,QAAQ;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC;gBACxC,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB;aAC/D,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -20,7 +20,7 @@
20
20
  * ```
21
21
  */
22
22
  import { z } from 'zod';
23
- import { type BranchName, type LogicalPath, type ContentId, type EntrySlug, type CollectionSlug } from '../paths';
23
+ import { type BranchName, type LogicalPath, type ContentId, type Slug } from '../paths';
24
24
  import { type PermissionPath } from '../authorization';
25
25
  /**
26
26
  * Zod schema for BranchName - validates git branch naming rules and brands.
@@ -52,7 +52,7 @@ export declare const logicalPathSchema: z.ZodType<LogicalPath>;
52
52
  */
53
53
  export declare const contentIdSchema: z.ZodType<ContentId>;
54
54
  /**
55
- * Zod schema for EntrySlug - validates entry slugs.
55
+ * Zod schema for Slug - validates entry and collection slugs.
56
56
  *
57
57
  * Validates:
58
58
  * - No path separators (/ or \)
@@ -60,17 +60,7 @@ export declare const contentIdSchema: z.ZodType<ContentId>;
60
60
  * - Only lowercase letters, numbers, and hyphens
61
61
  * - Max 64 characters
62
62
  */
63
- export declare const entrySlugSchema: z.ZodType<EntrySlug>;
64
- /**
65
- * Zod schema for CollectionSlug - validates collection slugs.
66
- *
67
- * Validates:
68
- * - No path separators (/ or \)
69
- * - Starts with lowercase letter or number
70
- * - Only lowercase letters, numbers, and hyphens
71
- * - Max 64 characters
72
- */
73
- export declare const collectionSlugSchema: z.ZodType<CollectionSlug>;
63
+ export declare const slugSchema: z.ZodType<Slug>;
74
64
  /**
75
65
  * Zod schema for PermissionPath - validates permission rule paths.
76
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE3E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAaV,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAaX,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAUX,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAaT,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAEvC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAad,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;AAE5C;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAad,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,UAAU,CAAA;AACjB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE3E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAaV,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAaX,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAUX,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAaJ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAElC;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAad,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA"}
@@ -88,7 +88,7 @@ export const contentIdSchema = z.string().transform((val, ctx) => {
88
88
  return result.id;
89
89
  });
90
90
  /**
91
- * Zod schema for EntrySlug - validates entry slugs.
91
+ * Zod schema for Slug - validates entry and collection slugs.
92
92
  *
93
93
  * Validates:
94
94
  * - No path separators (/ or \)
@@ -96,34 +96,11 @@ export const contentIdSchema = z.string().transform((val, ctx) => {
96
96
  * - Only lowercase letters, numbers, and hyphens
97
97
  * - Max 64 characters
98
98
  */
99
- export const entrySlugSchema = z
99
+ export const slugSchema = z
100
100
  .string()
101
101
  .min(1)
102
102
  .transform((val, ctx) => {
103
- const result = parseSlug(val, 'entry');
104
- if (!result.ok) {
105
- ctx.addIssue({
106
- code: z.ZodIssueCode.custom,
107
- message: result.error,
108
- });
109
- return z.NEVER;
110
- }
111
- return result.slug;
112
- });
113
- /**
114
- * Zod schema for CollectionSlug - validates collection slugs.
115
- *
116
- * Validates:
117
- * - No path separators (/ or \)
118
- * - Starts with lowercase letter or number
119
- * - Only lowercase letters, numbers, and hyphens
120
- * - Max 64 characters
121
- */
122
- export const collectionSlugSchema = z
123
- .string()
124
- .min(1)
125
- .transform((val, ctx) => {
126
- const result = parseSlug(val, 'collection');
103
+ const result = parseSlug(val);
127
104
  if (!result.ok) {
128
105
  ctx.addIssue({
129
106
  code: z.ZodIssueCode.custom,
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"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"}
@@ -28,11 +28,17 @@ export type TokenVerifier = (context: unknown) => Promise<{
28
28
  * (e.g., Lambda with no internet). JWT verification is done locally,
29
29
  * and user/group metadata comes from a cache populated externally
30
30
  * (e.g., by an EC2 worker).
31
+ *
32
+ * In dev mode, an optional `lazyRefresher` can be provided to auto-populate
33
+ * the cache on first request, eliminating the need to run `worker run-once` manually.
31
34
  */
32
35
  export declare class CachingAuthPlugin implements AuthPlugin {
33
36
  private readonly verifyToken;
34
37
  private readonly cache;
35
- constructor(verifyToken: TokenVerifier, cache: AuthCacheProvider);
38
+ private readonly lazyRefresher?;
39
+ private refreshPromise;
40
+ constructor(verifyToken: TokenVerifier, cache: AuthCacheProvider, lazyRefresher?: (() => Promise<unknown>) | undefined);
41
+ private ensureCachePopulated;
36
42
  authenticate(context: unknown): Promise<AuthenticationResult>;
37
43
  searchUsers(query: string, limit?: number): Promise<UserSearchResult[]>;
38
44
  getUserMetadata(userId: CanopyUserId): Promise<UserSearchResult | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"caching-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/D,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1F;;;;;;;GAOG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAEhD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,iBAAiB;IAGrC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoC7D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAenE,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAIvE,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIvE,UAAU,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAQvD"}
1
+ {"version":3,"file":"caching-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/D,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1F;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAIhD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IALjC,OAAO,CAAC,cAAc,CAA6B;gBAGhC,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,iBAAiB,EACxB,aAAa,CAAC,GAAE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAA;YAG3C,oBAAoB;IAY5B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsC7D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAenE,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQvE,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAQvE,UAAU,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAQvD"}
@@ -7,17 +7,35 @@ const log = createDebugLogger({ prefix: 'CachingAuthPlugin' });
7
7
  * (e.g., Lambda with no internet). JWT verification is done locally,
8
8
  * and user/group metadata comes from a cache populated externally
9
9
  * (e.g., by an EC2 worker).
10
+ *
11
+ * In dev mode, an optional `lazyRefresher` can be provided to auto-populate
12
+ * the cache on first request, eliminating the need to run `worker run-once` manually.
10
13
  */
11
14
  export class CachingAuthPlugin {
12
- constructor(verifyToken, cache) {
15
+ constructor(verifyToken, cache, lazyRefresher) {
13
16
  this.verifyToken = verifyToken;
14
17
  this.cache = cache;
18
+ this.lazyRefresher = lazyRefresher;
19
+ this.refreshPromise = null;
20
+ }
21
+ async ensureCachePopulated() {
22
+ if (!this.lazyRefresher)
23
+ return;
24
+ // Use a shared promise so concurrent callers coalesce into a single refresh
25
+ this.refreshPromise ??= this.lazyRefresher()
26
+ .then(() => log.debug('auth', 'Lazy cache refresh completed'))
27
+ .catch((err) => {
28
+ log.debug('auth', 'Lazy cache refresh failed', { error: String(err) });
29
+ this.refreshPromise = null; // allow retry on next call
30
+ });
31
+ await this.refreshPromise;
15
32
  }
16
33
  async authenticate(context) {
17
34
  const identity = await this.verifyToken(context);
18
35
  if (!identity) {
19
36
  return { success: false, error: 'No valid authentication token' };
20
37
  }
38
+ await this.ensureCachePopulated();
21
39
  try {
22
40
  const user = await this.cache.getUser(identity.userId);
23
41
  const externalGroups = await this.cache.getUserExternalGroups(identity.userId);
@@ -60,10 +78,20 @@ export class CachingAuthPlugin {
60
78
  }
61
79
  }
62
80
  async getUserMetadata(userId) {
63
- return this.cache.getUser(userId);
81
+ try {
82
+ return await this.cache.getUser(userId);
83
+ }
84
+ catch {
85
+ return null;
86
+ }
64
87
  }
65
88
  async getGroupMetadata(groupId) {
66
- return this.cache.getGroup(groupId);
89
+ try {
90
+ return await this.cache.getGroup(groupId);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
67
95
  }
68
96
  async listGroups(limit = 50) {
69
97
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"caching-auth-plugin.js","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"caching-auth-plugin.js","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ export interface AuthPlugin {
43
43
  /**
44
44
  * Optional: lightweight token-only verification (no user metadata lookup, no network).
45
45
  * When present, createNextCanopyContext automatically wraps this plugin with
46
- * CachingAuthPlugin in prod/prod-sim modes. The cache is populated by the worker daemon.
46
+ * CachingAuthPlugin in prod/dev modes. The cache is populated by the worker daemon.
47
47
  */
48
48
  verifyTokenOnly?(context: unknown): Promise<{
49
49
  userId: CanopyUserId;
@@ -47,7 +47,7 @@ export interface ContentAccessDeps {
47
47
  mode: import('../operating-mode').OperatingMode;
48
48
  /**
49
49
  * Get the settings branch root path for loading centralized permissions.
50
- * Only used in prod/prod-sim modes.
50
+ * Used in modes with a separate settings branch.
51
51
  * Must throw if settings branch cannot be loaded.
52
52
  */
53
53
  getSettingsBranchRoot?: () => Promise<string>;
@@ -101,7 +101,7 @@ export class BranchRegistry {
101
101
  try {
102
102
  const entries = await fs.readdir(this.root, { withFileTypes: true });
103
103
  for (const entry of entries) {
104
- // Skip non-directories and hidden directories (like .canopy-meta, .canopy-prod-sim)
104
+ // Skip non-directories and hidden directories (like .canopy-meta)
105
105
  if (!entry.isDirectory() || entry.name.startsWith('.')) {
106
106
  continue;
107
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"branch-registry.js","sourceRoot":"","sources":["../src/branch-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"branch-registry.js","sourceRoot":"","sources":["../src/branch-registry.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { RootCollectionConfig } from './config';
2
2
  import type { FlatSchemaItem } from './config/types';
3
- import type { EntrySchemaRegistry } from './schema/types';
4
3
  import type { OperatingMode } from './operating-mode';
4
+ import type { EntrySchemaRegistry } from './schema/types';
5
5
  /**
6
6
  * Schema cache structure stored in {branchRoot}/.canopy-meta/schema-cache.json
7
7
  */
@@ -15,8 +15,8 @@ export interface BranchSchemaCacheEntry {
15
15
  * Manages per-branch schema caching with lazy loading and automatic invalidation.
16
16
  *
17
17
  * Caching Strategy:
18
- * - Prod/Prod-sim: File-based cache at {branchRoot}/.canopy-meta/schema-cache.json
19
- * - Dev mode: In-memory singleton (no file I/O)
18
+ * - File-based cache at {branchRoot}/.canopy-meta/schema-cache.json (no in-memory layer
19
+ * intentional: matches prod behavior and keeps cache coherent across Lambda invocations)
20
20
  * - Invalidation: Writers create .stale marker, causing cache regeneration on next access
21
21
  *
22
22
  * Multi-User Support:
@@ -25,13 +25,14 @@ export interface BranchSchemaCacheEntry {
25
25
  * - Atomic file operations prevent corruption during concurrent access
26
26
  */
27
27
  export declare class BranchSchemaCache {
28
- private readonly mode;
29
- private devModeCache?;
30
- constructor(mode: OperatingMode);
28
+ /** Tracks when we last checked mtimes per contentRoot, to debounce rapid requests */
29
+ private lastMtimeCheck;
30
+ private readonly devMode;
31
+ constructor(mode?: OperatingMode);
31
32
  /**
32
33
  * Get schema for a branch (loads from cache or resolves fresh).
33
34
  *
34
- * @param branchRoot - Root directory of the branch (e.g., .canopy-prod-sim/content-branches/main)
35
+ * @param branchRoot - Root directory of the branch (e.g., .canopy-dev/content-branches/main)
35
36
  * @param entrySchemaRegistry - Map of schema names to field definitions
36
37
  * @param contentRootName - Name of content directory (e.g., "content") from config
37
38
  * @returns Resolved schema tree and flattened schema
@@ -50,11 +51,5 @@ export declare class BranchSchemaCache {
50
51
  * @param branchRoot - Root directory of the branch
51
52
  */
52
53
  invalidate(branchRoot: string): Promise<void>;
53
- /**
54
- * Clear all caches (for testing).
55
- * In dev mode, clears in-memory cache.
56
- * In prod/prod-sim modes, this would need to traverse all branch directories.
57
- */
58
- clearAll(): Promise<void>;
59
54
  }
60
55
  //# sourceMappingURL=branch-schema-cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch-schema-cache.d.ts","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAOrD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,YAAY,CAAC,CAGpB;gBAE4B,IAAI,EAAE,aAAa;IAEhD;;;;;;;OAOG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,GAAE,MAAkB,GAClC,OAAO,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,UAAU,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IA6B1E;;OAEG;YACW,sBAAsB;IAoEpC;;;;OAIG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
1
+ {"version":3,"file":"branch-schema-cache.d.ts","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAUzD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB;AA8BD;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,IAAI,GAAE,aAAsB;IAIxC;;;;;;;OAOG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,GAAE,MAAkB,GAClC,OAAO,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,UAAU,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IAI1E;;OAEG;YACW,sBAAsB;IAkFpC;;;;OAIG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOpD"}
@@ -4,12 +4,45 @@ import { resolveSchema, isValidSchema } from './schema/resolver';
4
4
  import { flattenSchema } from './config/flatten';
5
5
  /** Bump when BranchSchemaCacheEntry shape changes to auto-invalidate stale caches */
6
6
  const SCHEMA_CACHE_VERSION = 2;
7
+ /** Minimum interval between mtime staleness checks (ms) */
8
+ const MTIME_CHECK_DEBOUNCE_MS = 1000;
9
+ /**
10
+ * In dev mode, check whether any .collection.json file under dir has been
11
+ * modified more recently than cachedAt. Returns true if stale.
12
+ *
13
+ * Uses a single recursive readdir to find all .collection.json files,
14
+ * then stats only those files.
15
+ */
16
+ async function isStaleByMtime(dir, cachedAt) {
17
+ let entries;
18
+ try {
19
+ entries = await fs.readdir(dir, { recursive: true, encoding: 'utf-8' });
20
+ }
21
+ catch {
22
+ return true;
23
+ }
24
+ for (const entry of entries) {
25
+ if (!entry.endsWith('.collection.json'))
26
+ continue;
27
+ const full = path.join(dir, entry);
28
+ try {
29
+ const stat = await fs.stat(full);
30
+ if (stat.mtimeMs > cachedAt.getTime())
31
+ return true;
32
+ }
33
+ catch {
34
+ // File may have been deleted between readdir and stat
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }
7
40
  /**
8
41
  * Manages per-branch schema caching with lazy loading and automatic invalidation.
9
42
  *
10
43
  * Caching Strategy:
11
- * - Prod/Prod-sim: File-based cache at {branchRoot}/.canopy-meta/schema-cache.json
12
- * - Dev mode: In-memory singleton (no file I/O)
44
+ * - File-based cache at {branchRoot}/.canopy-meta/schema-cache.json (no in-memory layer
45
+ * intentional: matches prod behavior and keeps cache coherent across Lambda invocations)
13
46
  * - Invalidation: Writers create .stale marker, causing cache regeneration on next access
14
47
  *
15
48
  * Multi-User Support:
@@ -18,38 +51,20 @@ const SCHEMA_CACHE_VERSION = 2;
18
51
  * - Atomic file operations prevent corruption during concurrent access
19
52
  */
20
53
  export class BranchSchemaCache {
21
- constructor(mode) {
22
- this.mode = mode;
54
+ constructor(mode = 'prod') {
55
+ /** Tracks when we last checked mtimes per contentRoot, to debounce rapid requests */
56
+ this.lastMtimeCheck = new Map();
57
+ this.devMode = mode === 'dev';
23
58
  }
24
59
  /**
25
60
  * Get schema for a branch (loads from cache or resolves fresh).
26
61
  *
27
- * @param branchRoot - Root directory of the branch (e.g., .canopy-prod-sim/content-branches/main)
62
+ * @param branchRoot - Root directory of the branch (e.g., .canopy-dev/content-branches/main)
28
63
  * @param entrySchemaRegistry - Map of schema names to field definitions
29
64
  * @param contentRootName - Name of content directory (e.g., "content") from config
30
65
  * @returns Resolved schema tree and flattened schema
31
66
  */
32
67
  async getSchema(branchRoot, entrySchemaRegistry, contentRootName = 'content') {
33
- // Dev mode: use in-memory singleton
34
- if (this.mode === 'dev') {
35
- if (!this.devModeCache) {
36
- const contentRoot = path.join(branchRoot, contentRootName);
37
- const result = await resolveSchema(contentRoot, entrySchemaRegistry);
38
- // Validate schema has content
39
- if (!isValidSchema(result.schema)) {
40
- throw new Error(`No schema found in ${contentRoot}. Create .collection.json files ` +
41
- 'with references to field schemas defined in your entry schema registry.');
42
- }
43
- // Use configured contentRoot name as base path for logical paths
44
- const flatSchema = flattenSchema(result.schema, contentRootName);
45
- this.devModeCache = {
46
- schema: result.schema,
47
- flatSchema,
48
- };
49
- }
50
- return this.devModeCache;
51
- }
52
- // Prod/prod-sim: use file-based cache with stale marker invalidation
53
68
  return this.loadFromCacheOrResolve(branchRoot, entrySchemaRegistry, contentRootName);
54
69
  }
55
70
  /**
@@ -77,7 +92,21 @@ export class BranchSchemaCache {
77
92
  cacheData = null;
78
93
  }
79
94
  if (cacheData && cacheData.version === SCHEMA_CACHE_VERSION) {
80
- return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
95
+ // In dev mode, also check file mtimes so direct schema edits (outside the CMS) are picked up.
96
+ // Debounce: skip the walk if we checked this contentRoot within the last second.
97
+ const now = Date.now();
98
+ const lastCheck = this.lastMtimeCheck.get(contentRoot) ?? 0;
99
+ if (this.devMode &&
100
+ now - lastCheck >= MTIME_CHECK_DEBOUNCE_MS &&
101
+ (await isStaleByMtime(contentRoot, new Date(cacheData.cachedAt)))) {
102
+ this.lastMtimeCheck.set(contentRoot, now);
103
+ cacheData = null;
104
+ }
105
+ else {
106
+ if (this.devMode)
107
+ this.lastMtimeCheck.set(contentRoot, now);
108
+ return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
109
+ }
81
110
  }
82
111
  // Cache miss or stale - regenerate
83
112
  const result = await resolveSchema(contentRoot, entrySchemaRegistry);
@@ -115,28 +144,10 @@ export class BranchSchemaCache {
115
144
  * @param branchRoot - Root directory of the branch
116
145
  */
117
146
  async invalidate(branchRoot) {
118
- if (this.mode === 'dev') {
119
- // Clear in-memory cache
120
- this.devModeCache = undefined;
121
- return;
122
- }
123
- // Prod/prod-sim: create stale marker (empty file)
124
147
  const cacheDir = path.join(branchRoot, '.canopy-meta');
125
148
  const stalePath = path.join(cacheDir, 'schema-cache.stale');
126
149
  await fs.mkdir(cacheDir, { recursive: true });
127
150
  await fs.writeFile(stalePath, '', 'utf-8');
128
151
  }
129
- /**
130
- * Clear all caches (for testing).
131
- * In dev mode, clears in-memory cache.
132
- * In prod/prod-sim modes, this would need to traverse all branch directories.
133
- */
134
- async clearAll() {
135
- if (this.mode === 'dev') {
136
- this.devModeCache = undefined;
137
- }
138
- // For prod/prod-sim, clearing all caches would require knowing all branch roots
139
- // For now, just clear dev mode cache. Tests can invalidate specific branches.
140
- }
141
152
  }
142
153
  //# sourceMappingURL=branch-schema-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch-schema-cache.js","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"branch-schema-cache.js","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * CanopyCMS CLI entrypoint.
4
+ *
5
+ * Routes commands to their implementations:
6
+ * init, init-deploy, worker, generate-ai-content, sync
7
+ *
8
+ * Command implementations live in separate files (init.ts, sync.ts, etc.)
9
+ * and are dynamically imported to keep startup fast.
10
+ */
11
+ import minimist from 'minimist';
12
+ /** Parse raw CLI args into structured flags and positional command. Exported for testing. */
13
+ export declare function parseArgs(rawArgs: string[]): {
14
+ argv: minimist.ParsedArgs;
15
+ flags: Record<string, string | boolean>;
16
+ command: string | undefined;
17
+ };
18
+ /** Resolve sync direction from --push/--pull/--abort flags. Exported for testing. */
19
+ export declare function resolveSyncDirection(push: boolean, pull: boolean, abort: boolean): 'push' | 'pull' | 'both' | 'abort';
20
+ //# sourceMappingURL=cli.d.ts.map