ctxr-cli 0.9.0 → 0.10.0

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 (172) hide show
  1. package/README.md +17 -7
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +2 -1
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/publish-check.d.ts.map +1 -1
  6. package/dist/commands/publish-check.js +8 -0
  7. package/dist/commands/publish-check.js.map +1 -1
  8. package/dist/commands/publish-new.d.ts.map +1 -1
  9. package/dist/commands/publish-new.js +15 -0
  10. package/dist/commands/publish-new.js.map +1 -1
  11. package/dist/commands/serve.d.ts.map +1 -1
  12. package/dist/commands/serve.js +33 -11
  13. package/dist/commands/serve.js.map +1 -1
  14. package/dist/commands/session-start.d.ts.map +1 -1
  15. package/dist/commands/session-start.js +9 -1
  16. package/dist/commands/session-start.js.map +1 -1
  17. package/dist/commands/source-check.d.ts.map +1 -1
  18. package/dist/commands/source-check.js +28 -3
  19. package/dist/commands/source-check.js.map +1 -1
  20. package/dist/commands/update.d.ts.map +1 -1
  21. package/dist/commands/update.js +7 -1
  22. package/dist/commands/update.js.map +1 -1
  23. package/dist/commands/verify.d.ts +11 -2
  24. package/dist/commands/verify.d.ts.map +1 -1
  25. package/dist/commands/verify.js +86 -5
  26. package/dist/commands/verify.js.map +1 -1
  27. package/dist/commands/version.d.ts +31 -0
  28. package/dist/commands/version.d.ts.map +1 -0
  29. package/dist/commands/version.js +87 -0
  30. package/dist/commands/version.js.map +1 -0
  31. package/dist/config/defaults.d.ts +12 -2
  32. package/dist/config/defaults.d.ts.map +1 -1
  33. package/dist/config/defaults.js +9 -2
  34. package/dist/config/defaults.js.map +1 -1
  35. package/dist/config/load.d.ts +2 -2
  36. package/dist/config/load.d.ts.map +1 -1
  37. package/dist/config/load.js +13 -3
  38. package/dist/config/load.js.map +1 -1
  39. package/dist/config/render.d.ts +0 -6
  40. package/dist/config/render.d.ts.map +1 -1
  41. package/dist/config/render.js +4 -27
  42. package/dist/config/render.js.map +1 -1
  43. package/dist/config/schema.d.ts +17 -66
  44. package/dist/config/schema.d.ts.map +1 -1
  45. package/dist/config/schema.js +59 -111
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/core/browse/nav.d.ts.map +1 -1
  48. package/dist/core/browse/nav.js +4 -1
  49. package/dist/core/browse/nav.js.map +1 -1
  50. package/dist/core/browse/preferences.d.ts +26 -0
  51. package/dist/core/browse/preferences.d.ts.map +1 -0
  52. package/dist/core/browse/preferences.js +74 -0
  53. package/dist/core/browse/preferences.js.map +1 -0
  54. package/dist/core/browse/routes.d.ts +10 -8
  55. package/dist/core/browse/routes.d.ts.map +1 -1
  56. package/dist/core/browse/routes.js +113 -24
  57. package/dist/core/browse/routes.js.map +1 -1
  58. package/dist/core/browse/templates.d.ts +14 -4
  59. package/dist/core/browse/templates.d.ts.map +1 -1
  60. package/dist/core/browse/templates.js +22 -4
  61. package/dist/core/browse/templates.js.map +1 -1
  62. package/dist/core/checks/harness-portability-checks.d.ts +21 -0
  63. package/dist/core/checks/harness-portability-checks.d.ts.map +1 -1
  64. package/dist/core/checks/harness-portability-checks.js +46 -1
  65. package/dist/core/checks/harness-portability-checks.js.map +1 -1
  66. package/dist/core/checks/integrity-checks.d.ts +0 -2
  67. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  68. package/dist/core/checks/integrity-checks.js +2 -27
  69. package/dist/core/checks/integrity-checks.js.map +1 -1
  70. package/dist/core/command.d.ts +6 -0
  71. package/dist/core/command.d.ts.map +1 -1
  72. package/dist/core/env.d.ts +5 -0
  73. package/dist/core/env.d.ts.map +1 -1
  74. package/dist/core/env.js +3 -0
  75. package/dist/core/env.js.map +1 -1
  76. package/dist/core/environment/probe.d.ts +12 -0
  77. package/dist/core/environment/probe.d.ts.map +1 -0
  78. package/dist/core/environment/probe.js +36 -0
  79. package/dist/core/environment/probe.js.map +1 -0
  80. package/dist/core/errors.d.ts +16 -3
  81. package/dist/core/errors.d.ts.map +1 -1
  82. package/dist/core/errors.js +41 -15
  83. package/dist/core/errors.js.map +1 -1
  84. package/dist/core/git/worktree.d.ts +22 -0
  85. package/dist/core/git/worktree.d.ts.map +1 -1
  86. package/dist/core/git/worktree.js +34 -0
  87. package/dist/core/git/worktree.js.map +1 -1
  88. package/dist/core/harness/isolated-run.d.ts +52 -0
  89. package/dist/core/harness/isolated-run.d.ts.map +1 -0
  90. package/dist/core/harness/isolated-run.js +100 -0
  91. package/dist/core/harness/isolated-run.js.map +1 -0
  92. package/dist/core/install-kind.d.ts +25 -0
  93. package/dist/core/install-kind.d.ts.map +1 -0
  94. package/dist/core/install-kind.js +56 -0
  95. package/dist/core/install-kind.js.map +1 -0
  96. package/dist/core/publish/script-check.d.ts +5 -2
  97. package/dist/core/publish/script-check.d.ts.map +1 -1
  98. package/dist/core/publish/script-check.js +5 -2
  99. package/dist/core/publish/script-check.js.map +1 -1
  100. package/dist/core/registry.d.ts +40 -0
  101. package/dist/core/registry.d.ts.map +1 -0
  102. package/dist/core/registry.js +55 -0
  103. package/dist/core/registry.js.map +1 -0
  104. package/dist/core/root.d.ts +11 -5
  105. package/dist/core/root.d.ts.map +1 -1
  106. package/dist/core/root.js +20 -8
  107. package/dist/core/root.js.map +1 -1
  108. package/dist/core/skills.d.ts.map +1 -1
  109. package/dist/core/skills.js +7 -0
  110. package/dist/core/skills.js.map +1 -1
  111. package/dist/core/version-check.d.ts +63 -0
  112. package/dist/core/version-check.d.ts.map +1 -0
  113. package/dist/core/version-check.js +181 -0
  114. package/dist/core/version-check.js.map +1 -0
  115. package/dist/run.d.ts +1 -1
  116. package/dist/run.d.ts.map +1 -1
  117. package/dist/run.js +38 -16
  118. package/dist/run.js.map +1 -1
  119. package/dist/version.d.ts +8 -1
  120. package/dist/version.d.ts.map +1 -1
  121. package/dist/version.js +8 -1
  122. package/dist/version.js.map +1 -1
  123. package/package.json +1 -1
  124. package/templates/agents/canonical.md +1 -1
  125. package/templates/serve/shell.html +16 -2
  126. package/templates/serve/style.css +145 -3
  127. package/templates/skills/ctxr-session-lifecycle.md +20 -0
  128. package/templates/skills/ctxr-upgrade.md +44 -0
  129. package/dist/commands/migrate.d.ts +0 -30
  130. package/dist/commands/migrate.d.ts.map +0 -1
  131. package/dist/commands/migrate.js +0 -56
  132. package/dist/commands/migrate.js.map +0 -1
  133. package/dist/core/migrations/add-explanation-craft-skill.d.ts +0 -26
  134. package/dist/core/migrations/add-explanation-craft-skill.d.ts.map +0 -1
  135. package/dist/core/migrations/add-explanation-craft-skill.js +0 -94
  136. package/dist/core/migrations/add-explanation-craft-skill.js.map +0 -1
  137. package/dist/core/migrations/archive-destination-from-taxonomy.d.ts +0 -35
  138. package/dist/core/migrations/archive-destination-from-taxonomy.d.ts.map +0 -1
  139. package/dist/core/migrations/archive-destination-from-taxonomy.js +0 -109
  140. package/dist/core/migrations/archive-destination-from-taxonomy.js.map +0 -1
  141. package/dist/core/migrations/config-defaults-as-the-convention.d.ts +0 -21
  142. package/dist/core/migrations/config-defaults-as-the-convention.d.ts.map +0 -1
  143. package/dist/core/migrations/config-defaults-as-the-convention.js +0 -54
  144. package/dist/core/migrations/config-defaults-as-the-convention.js.map +0 -1
  145. package/dist/core/migrations/drop-access-axes.d.ts +0 -24
  146. package/dist/core/migrations/drop-access-axes.d.ts.map +0 -1
  147. package/dist/core/migrations/drop-access-axes.js +0 -54
  148. package/dist/core/migrations/drop-access-axes.js.map +0 -1
  149. package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts +0 -19
  150. package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts.map +0 -1
  151. package/dist/core/migrations/drop-forge-and-workspaces-external.js +0 -49
  152. package/dist/core/migrations/drop-forge-and-workspaces-external.js.map +0 -1
  153. package/dist/core/migrations/registry.d.ts +0 -16
  154. package/dist/core/migrations/registry.d.ts.map +0 -1
  155. package/dist/core/migrations/registry.js +0 -34
  156. package/dist/core/migrations/registry.js.map +0 -1
  157. package/dist/core/migrations/rename-conventions-path.d.ts +0 -26
  158. package/dist/core/migrations/rename-conventions-path.d.ts.map +0 -1
  159. package/dist/core/migrations/rename-conventions-path.js +0 -86
  160. package/dist/core/migrations/rename-conventions-path.js.map +0 -1
  161. package/dist/core/migrations/rename-procedures-path.d.ts +0 -17
  162. package/dist/core/migrations/rename-procedures-path.d.ts.map +0 -1
  163. package/dist/core/migrations/rename-procedures-path.js +0 -45
  164. package/dist/core/migrations/rename-procedures-path.js.map +0 -1
  165. package/dist/core/migrations/retain-captures-as-provenance.d.ts +0 -22
  166. package/dist/core/migrations/retain-captures-as-provenance.d.ts.map +0 -1
  167. package/dist/core/migrations/retain-captures-as-provenance.js +0 -133
  168. package/dist/core/migrations/retain-captures-as-provenance.js.map +0 -1
  169. package/dist/core/migrations/types.d.ts +0 -27
  170. package/dist/core/migrations/types.d.ts.map +0 -1
  171. package/dist/core/migrations/types.js +0 -2
  172. package/dist/core/migrations/types.js.map +0 -1
@@ -3,56 +3,21 @@ import { z } from 'zod';
3
3
  * store-lifecycle spec: schema_version versions STORE STATE (config shape +
4
4
  * note frontmatter conventions) — a monotonic integer independent of the npm
5
5
  * package version — not "what this CLI release happens to be."
6
- */
7
- /**
8
- * Bumped to 2 by the visibility-field key rename migration (store-lifecycle
9
- * spec task 9.2). Both that field and the config key naming it were removed
10
- * at schema 7 (see below); the migration survives only to keep the 1 -> 2
11
- * step in the chain intact.
12
- *
13
- * Bumped to 3 by the procedures-to-skills key rename migration
14
- * (rename-procedures-to-skills, 0003-rename-procedures-path-to-skills):
15
- * `harness.procedures_path` -> `harness.skills_path`. HarnessSchema's
16
- * transform accepts the old key through this version so an unmigrated
17
- * store still loads (see schema.ts's HarnessSchema comment).
18
6
  *
19
- * Bumped to 4 by the conventions-to-guidance key rename migration
20
- * (rename-conventions-path-to-guidance-path, 0004-rename-conventions-path-to-guidance-path):
21
- * `harness.conventions_path` -> `harness.guidance_path`. HarnessSchema's
22
- * transform accepts the old key through this version too, the same way.
23
- */
24
- /**
25
- * Bumped to 7 on main by the explanation-craft-skill migration
26
- * (vendor-explanation-craft-skill, 0007-add-explanation-craft-skill), which
27
- * pins its own local SCHEMA_VERSION and is unaffected by later bumps here.
7
+ * retire-store-migrations: contexture ships no migration mechanism, so this
8
+ * number is a gate rather than a starting point. `readConfig` refuses any
9
+ * store whose recorded version is not exactly this one, in either direction:
10
+ * a newer store because this release cannot know its shape, an older one
11
+ * because this release no longer reads that shape and offers nothing that
12
+ * would bring it forward. A release that changes the store's shape bumps this
13
+ * and documents the one-time fixup in its release notes.
28
14
  *
29
- * Bumped to 8 by the access-axis removal (retire-the-access-axes,
30
- * drop-access-axes): the `visibility:` and `disclosure:` blocks and the
31
- * `fields:` block that named the visibility frontmatter key are all gone.
32
- * Unlike the rename migrations above, nothing here is accepted loosely for
33
- * an older store — `noUnrecognizedConfigKeysCheck` derives from this
34
- * schema's shape, so an unmigrated store fails `doctor` on the three stale
35
- * keys until `ctxr migrate` drops them, exactly as `identity` did when
36
- * remove-agent-identity retired it.
37
- */
38
- /**
39
- * Bumped to 9 by the capture-tier change (retain-captures-as-provenance,
40
- * retain-captures-as-provenance): `ingest.capture_root` is added and
41
- * `ingest.inbox_path`'s shipped default moves inside it. IngestSchema accepts
42
- * a config with no `capture_root` so an unmigrated store still loads —
43
- * `ctxr migrate` has to be able to read the file it is about to rewrite —
44
- * and skips the nesting rule for exactly that case.
15
+ * It stayed at 10 through that retirement on purpose: nothing about a
16
+ * conforming store's shape changed. What was dropped were superseded INPUT
17
+ * spellings that no store at 10 has ever written, since `renderStoreConfig`
18
+ * only ever emitted the current names.
45
19
  */
46
20
  export declare const SUPPORTED_SCHEMA_VERSION = 10;
47
- /** The version at which the capture tier became part of the store's shape, and its nesting rule enforceable. */
48
- export declare const CAPTURE_TIER_SCHEMA_VERSION = 9;
49
- /**
50
- * Bumped to 10 by config-defaults-as-the-convention: every convention key now
51
- * carries its shipped default here, and a written config omits what it agrees
52
- * with. Nothing about the shape got stricter — the bump exists so the pruning
53
- * migration has a `schema_version <` predicate to decide it still has work,
54
- * the same way every migration in this repo does.
55
- */
56
21
  export declare const TaxonomyLayerSchema: z.ZodObject<{
57
22
  name: z.ZodString;
58
23
  path: z.ZodString;
@@ -125,6 +90,10 @@ export declare const StoreConfigSchema: z.ZodObject<{
125
90
  skills: z.ZodPrefault<z.ZodObject<{
126
91
  vendored: z.ZodDefault<z.ZodArray<z.ZodString>>;
127
92
  }, z.core.$strip>>;
93
+ update_check: z.ZodPrefault<z.ZodObject<{
94
+ enabled: z.ZodDefault<z.ZodBoolean>;
95
+ ttl_hours: z.ZodDefault<z.ZodNumber>;
96
+ }, z.core.$strip>>;
128
97
  ingest: z.ZodPrefault<z.ZodObject<{
129
98
  inbox_path: z.ZodDefault<z.ZodString>;
130
99
  capture_root: z.ZodDefault<z.ZodString>;
@@ -132,7 +101,6 @@ export declare const StoreConfigSchema: z.ZodObject<{
132
101
  }, z.core.$strip>>;
133
102
  organize: z.ZodPipe<z.ZodObject<{
134
103
  archive_destination: z.ZodOptional<z.ZodString>;
135
- archive_path: z.ZodOptional<z.ZodString>;
136
104
  rollup_stale_days: z.ZodDefault<z.ZodNumber>;
137
105
  mission_path: z.ZodOptional<z.ZodString>;
138
106
  }, z.core.$strip>, z.ZodTransform<{
@@ -141,15 +109,12 @@ export declare const StoreConfigSchema: z.ZodObject<{
141
109
  mission_path?: string | undefined;
142
110
  }, {
143
111
  archive_destination?: string | undefined;
144
- archive_path?: string | undefined;
145
112
  rollup_stale_days: number;
146
113
  mission_path?: string | undefined;
147
114
  }>>;
148
115
  harness: z.ZodPrefault<z.ZodPipe<z.ZodObject<{
149
116
  skills_path: z.ZodOptional<z.ZodString>;
150
- procedures_path: z.ZodOptional<z.ZodString>;
151
117
  guidance_path: z.ZodOptional<z.ZodString>;
152
- conventions_path: z.ZodOptional<z.ZodString>;
153
118
  convention_max_bytes: z.ZodDefault<z.ZodNumber>;
154
119
  }, z.core.$strip>, z.ZodTransform<{
155
120
  skills_path: string;
@@ -157,31 +122,17 @@ export declare const StoreConfigSchema: z.ZodObject<{
157
122
  convention_max_bytes: number;
158
123
  }, {
159
124
  skills_path?: string | undefined;
160
- procedures_path?: string | undefined;
161
125
  guidance_path?: string | undefined;
162
- conventions_path?: string | undefined;
163
126
  convention_max_bytes: number;
164
127
  }>>>;
165
- adapters: z.ZodDefault<z.ZodPipe<z.ZodPipe<z.ZodArray<z.ZodObject<{
166
- id: z.ZodString;
167
- kind: z.ZodString;
168
- module: z.ZodOptional<z.ZodString>;
169
- }, z.core.$strip>>, z.ZodTransform<{
170
- id: string;
171
- kind: string;
172
- module?: string | undefined;
173
- }[], {
174
- id: string;
175
- kind: string;
176
- module?: string | undefined;
177
- }[]>>, z.ZodArray<z.ZodObject<{
128
+ adapters: z.ZodDefault<z.ZodArray<z.ZodObject<{
178
129
  id: z.ZodString;
179
130
  kind: z.ZodEnum<{
180
131
  "harness-generation": "harness-generation";
181
132
  }>;
182
133
  module: z.ZodOptional<z.ZodString>;
183
134
  skills_dir: z.ZodOptional<z.ZodString>;
184
- }, z.core.$strip>>>>;
135
+ }, z.core.$strip>>>;
185
136
  }, z.core.$loose>;
186
137
  export type StoreConfig = z.infer<typeof StoreConfigSchema>;
187
138
  export type TaxonomyLayerConfig = z.infer<typeof TaxonomyLayerSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;GAaG;AACH;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,gHAAgH;AAChH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAYH;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB;;;;;iBAKvB,CAAC;AAmOH,QAAA,MAAM,wBAAwB;;;;;;;iBAM5B,CAAC;AAiBH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC1B,CAAC;AAEL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAYH;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB;;;;;iBAKvB,CAAC;AAoNH,QAAA,MAAM,wBAAwB;;;;;;;iBAM5B,CAAC;AAiBH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC1B,CAAC;AAEL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -5,56 +5,21 @@ import { SHIPPED_DEFAULTS } from './defaults.js';
5
5
  * store-lifecycle spec: schema_version versions STORE STATE (config shape +
6
6
  * note frontmatter conventions) — a monotonic integer independent of the npm
7
7
  * package version — not "what this CLI release happens to be."
8
- */
9
- /**
10
- * Bumped to 2 by the visibility-field key rename migration (store-lifecycle
11
- * spec task 9.2). Both that field and the config key naming it were removed
12
- * at schema 7 (see below); the migration survives only to keep the 1 -> 2
13
- * step in the chain intact.
14
8
  *
15
- * Bumped to 3 by the procedures-to-skills key rename migration
16
- * (rename-procedures-to-skills, 0003-rename-procedures-path-to-skills):
17
- * `harness.procedures_path` -> `harness.skills_path`. HarnessSchema's
18
- * transform accepts the old key through this version so an unmigrated
19
- * store still loads (see schema.ts's HarnessSchema comment).
20
- *
21
- * Bumped to 4 by the conventions-to-guidance key rename migration
22
- * (rename-conventions-path-to-guidance-path, 0004-rename-conventions-path-to-guidance-path):
23
- * `harness.conventions_path` -> `harness.guidance_path`. HarnessSchema's
24
- * transform accepts the old key through this version too, the same way.
25
- */
26
- /**
27
- * Bumped to 7 on main by the explanation-craft-skill migration
28
- * (vendor-explanation-craft-skill, 0007-add-explanation-craft-skill), which
29
- * pins its own local SCHEMA_VERSION and is unaffected by later bumps here.
9
+ * retire-store-migrations: contexture ships no migration mechanism, so this
10
+ * number is a gate rather than a starting point. `readConfig` refuses any
11
+ * store whose recorded version is not exactly this one, in either direction:
12
+ * a newer store because this release cannot know its shape, an older one
13
+ * because this release no longer reads that shape and offers nothing that
14
+ * would bring it forward. A release that changes the store's shape bumps this
15
+ * and documents the one-time fixup in its release notes.
30
16
  *
31
- * Bumped to 8 by the access-axis removal (retire-the-access-axes,
32
- * drop-access-axes): the `visibility:` and `disclosure:` blocks and the
33
- * `fields:` block that named the visibility frontmatter key are all gone.
34
- * Unlike the rename migrations above, nothing here is accepted loosely for
35
- * an older store — `noUnrecognizedConfigKeysCheck` derives from this
36
- * schema's shape, so an unmigrated store fails `doctor` on the three stale
37
- * keys until `ctxr migrate` drops them, exactly as `identity` did when
38
- * remove-agent-identity retired it.
39
- */
40
- /**
41
- * Bumped to 9 by the capture-tier change (retain-captures-as-provenance,
42
- * retain-captures-as-provenance): `ingest.capture_root` is added and
43
- * `ingest.inbox_path`'s shipped default moves inside it. IngestSchema accepts
44
- * a config with no `capture_root` so an unmigrated store still loads —
45
- * `ctxr migrate` has to be able to read the file it is about to rewrite —
46
- * and skips the nesting rule for exactly that case.
17
+ * It stayed at 10 through that retirement on purpose: nothing about a
18
+ * conforming store's shape changed. What was dropped were superseded INPUT
19
+ * spellings that no store at 10 has ever written, since `renderStoreConfig`
20
+ * only ever emitted the current names.
47
21
  */
48
22
  export const SUPPORTED_SCHEMA_VERSION = 10;
49
- /** The version at which the capture tier became part of the store's shape, and its nesting rule enforceable. */
50
- export const CAPTURE_TIER_SCHEMA_VERSION = 9;
51
- /**
52
- * Bumped to 10 by config-defaults-as-the-convention: every convention key now
53
- * carries its shipped default here, and a written config omits what it agrees
54
- * with. Nothing about the shape got stricter — the bump exists so the pruning
55
- * migration has a `schema_version <` predicate to decide it still has work,
56
- * the same way every migration in this repo does.
57
- */
58
23
  export const TaxonomyLayerSchema = z.object({
59
24
  name: z.string().min(1),
60
25
  path: z.string().min(1),
@@ -139,6 +104,17 @@ const PublishSchema = z.object({
139
104
  * `contexture.yaml` predating this key still parses. An empty list opts
140
105
  * out entirely — same schema-optional-with-default shape as `publish`.
141
106
  */
107
+ /**
108
+ * cli-contract (keep-the-installed-cli-current): whether session start and
109
+ * update consult the release registry, and how long a resolved answer is
110
+ * reused. Schema-optional with defaults, like `publish` and `skills` — a
111
+ * `contexture.yaml` predating this key parses unchanged, which is why this
112
+ * block needed no schema_version bump.
113
+ */
114
+ const UpdateCheckSchema = z.object({
115
+ enabled: z.boolean().default(SHIPPED_DEFAULTS.update_check.enabled),
116
+ ttl_hours: z.number().positive().default(SHIPPED_DEFAULTS.update_check.ttl_hours),
117
+ });
142
118
  const SkillsSchema = z.object({
143
119
  vendored: z.array(z.string()).default([...SHIPPED_DEFAULTS.skills.vendored]),
144
120
  });
@@ -147,10 +123,9 @@ const SkillsSchema = z.object({
147
123
  * ledger's root and `inbox_path` is the not-yet-ingested state inside it.
148
124
  *
149
125
  * Both paths carry the shipped convention as a schema default, so a config
150
- * written before schema 9 still parses — `ctxr migrate` has to be able to
151
- * read the file it is about to rewrite. The rule that the inbox sits inside
152
- * the capture root lives on StoreConfigSchema instead of here, since it is a
153
- * schema-9 invariant and only that scope can see the version.
126
+ * that declares neither resolves to it. The rule that the inbox sits inside
127
+ * the capture root lives on StoreConfigSchema instead of here, because it
128
+ * spans two keys and only that scope sees both.
154
129
  */
155
130
  const IngestSchema = z
156
131
  .object({
@@ -163,22 +138,15 @@ const IngestSchema = z
163
138
  * context-organize spec: archive's destination — independent of taxonomy
164
139
  * layers, so it works under any profile.
165
140
  *
166
- * archive-destination-from-taxonomy migration (0006): `archive_destination`
167
- * is the current key; `archive_path` is its pre-migration name, accepted
168
- * here so a store on schema 5 still loads. Like `harness.guidance_path` and
169
- * unlike `harness.skills_path`, this key always had a workable default, so
170
- * an unmigrated store loads silently onto that default rather than erroring
171
- * — `ctxr migrate` rewrites the key (and, for a profile that declares a
172
- * destination, the value) but nothing breaks before it runs.
173
- *
174
- * The transform below is the ONLY place the old spelling is read — every
175
- * other consumer sees `config.organize.archive_destination` and nothing
176
- * else, so `archive_path` never leaks past config loading.
141
+ * `archive_destination` is the only spelling. Its pre-rename name
142
+ * `archive_path` was accepted here as an input while a migration existed to
143
+ * rewrite it; retire-store-migrations removed both, so a config still
144
+ * carrying the old name now fails the schema-version gate before it reaches
145
+ * this schema at all.
177
146
  */
178
147
  const OrganizeSchema = z
179
148
  .object({
180
149
  archive_destination: z.string().min(1).optional(),
181
- archive_path: z.string().min(1).optional(),
182
150
  /** store-primitives-from-migration-audit spec (D4): the grace period, in days, before a stale rollup is reported — bounds noise from a backlink edited moments ago. */
183
151
  rollup_stale_days: z.number().int().nonnegative().default(SHIPPED_DEFAULTS.organize.rollup_stale_days),
184
152
  /**
@@ -200,12 +168,12 @@ const OrganizeSchema = z
200
168
  * archive-destination-from-taxonomy exists to prevent. Absent under both
201
169
  * spellings, the key is reported rather than guessed.
202
170
  */
203
- const archiveDestination = value.archive_destination ?? value.archive_path;
171
+ const archiveDestination = value.archive_destination;
204
172
  if (archiveDestination === undefined) {
205
173
  ctx.addIssue({
206
174
  code: 'custom',
207
175
  path: ['archive_destination'],
208
- message: 'organize.archive_destination is missing. It is resolved from the store taxonomy at init rather than defaulted, so declare it explicitly (or run `ctxr migrate` if this store predates the key).',
176
+ message: 'organize.archive_destination is missing. It is resolved from the store taxonomy at init rather than defaulted, so declare it explicitly.',
209
177
  });
210
178
  return z.NEVER;
211
179
  }
@@ -230,30 +198,16 @@ const OrganizeSchema = z
230
198
  * convention files, and the mission document) AGENTS.md's generated
231
199
  * sections read from and inline.
232
200
  *
233
- * rename-procedures-to-skills migration (0003): `skills_path` is the
234
- * current key; `procedures_path` is its pre-migration name, accepted here
235
- * so a store on schema 2 still loads (with a message pointing at `ctxr
236
- * migrate`, not a raw shape-validation error) rather than failing the
237
- * moment this schema starts requiring the new key.
238
- *
239
- * rename-conventions-path-to-guidance-path migration (0004): `guidance_path`
240
- * is the current key; `conventions_path` is its pre-migration name. Unlike
241
- * `skills_path`, this key always had a workable default, so an unmigrated
242
- * store loads silently onto that default rather than erroring — `ctxr
243
- * migrate` moves the directory and rewrites the key, but nothing breaks if
244
- * it hasn't run yet.
245
- *
246
- * The transform below is the ONLY place any of these spellings is read —
247
- * every other consumer in the codebase sees `config.harness.skills_path` /
248
- * `config.harness.guidance_path` and nothing else, so no old key ever leaks
249
- * past config loading.
201
+ * `skills_path` and `guidance_path` are the only spellings. Their pre-rename
202
+ * names `procedures_path` and `conventions_path` were accepted here as inputs
203
+ * while migrations existed to rewrite them; retire-store-migrations removed
204
+ * both, so a config still carrying either now fails the schema-version gate
205
+ * before it reaches this schema at all.
250
206
  */
251
207
  const HarnessSchema = z
252
208
  .object({
253
209
  skills_path: z.string().min(1).optional(),
254
- procedures_path: z.string().min(1).optional(),
255
210
  guidance_path: z.string().min(1).optional(),
256
- conventions_path: z.string().min(1).optional(),
257
211
  /**
258
212
  * compose-store-guidance-documents design.md D6: a size ceiling on
259
213
  * AGENTS.md's inlined "Store conventions" section, guarding against
@@ -267,16 +221,11 @@ const HarnessSchema = z
267
221
  })
268
222
  .transform((value) => {
269
223
  /**
270
- * config-defaults-as-the-convention: the pre-rename spellings are still
271
- * read first, so an unmigrated store keeps the path it declared. What
272
- * changed is the end of the chain — absent under BOTH spellings used to
273
- * raise a custom "run `ctxr migrate`" error, but an unmigrated store HAS
274
- * `procedures_path` and never reached it. What it actually rejected was a
275
- * config declining to name a skills path, which is now a config that
276
- * accepts the shipped one.
224
+ * config-defaults-as-the-convention: a config declining to name either
225
+ * path is a config accepting the shipped one, not an error.
277
226
  */
278
- const skillsPath = value.skills_path ?? value.procedures_path ?? SHIPPED_DEFAULTS.harness.skills_path;
279
- const guidancePath = value.guidance_path ?? value.conventions_path ?? SHIPPED_DEFAULTS.harness.guidance_path;
227
+ const skillsPath = value.skills_path ?? SHIPPED_DEFAULTS.harness.skills_path;
228
+ const guidancePath = value.guidance_path ?? SHIPPED_DEFAULTS.harness.guidance_path;
280
229
  // Spread, not a plain key, so the output type keeps `convention_max_bytes`
281
230
  // genuinely optional (`key?: number`) rather than always-present-but-possibly-undefined
282
231
  // (`key: number | undefined`) — the latter would require every existing
@@ -302,19 +251,19 @@ const AdapterDeclarationSchema = z.object({
302
251
  skills_dir: z.string().min(1).optional(),
303
252
  });
304
253
  /**
305
- * session-keeps-only-what-git-cannot-do (D2): removing the `forge` kind
306
- * outright would make a store still declaring `{ kind: forge }` fail to
307
- * load at all — a shape error, not a migration opportunity — since
308
- * `readConfig` runs this schema before `ctxr migrate` can act. Mirrors
309
- * `HarnessSchema`'s fallback-transform precedent: accept the legacy shape
310
- * loosely, drop it here, and let the schema_version < 5 migration rewrite
311
- * the YAML on disk. Any OTHER unrecognized kind is a genuine error and
312
- * still fails loudly against `AdapterDeclarationSchema` below.
254
+ * Every declaration is validated by `AdapterDeclarationSchema` directly, so
255
+ * an unrecognized `kind` fails loudly.
256
+ *
257
+ * retire-store-migrations (D8): this used to pipe through a looser
258
+ * `z.object({ id, kind, module? })` that filtered out the retired
259
+ * `kind: forge` before strict validation, so a store still declaring it
260
+ * could be read by the migration about to rewrite it. That pre-schema was
261
+ * also silently dropping `skills_dir` — zod strips unknown keys, and the
262
+ * looser object never declared it — so a store's declared override never
263
+ * reached `effectiveSkillsDir`. Removing the filter is what makes
264
+ * `adapters[].skills_dir` work at all.
313
265
  */
314
- const AdaptersFieldSchema = z
315
- .array(z.object({ id: z.string().min(1), kind: z.string().min(1), module: z.string().min(1).optional() }))
316
- .transform((declarations) => declarations.filter((d) => d.kind !== 'forge'))
317
- .pipe(z.array(AdapterDeclarationSchema));
266
+ const AdaptersFieldSchema = z.array(AdapterDeclarationSchema);
318
267
  export const StoreConfigSchema = z
319
268
  .object({
320
269
  schema_version: z.number().int().positive(),
@@ -330,6 +279,7 @@ export const StoreConfigSchema = z
330
279
  catalog: CatalogSchema.prefault({}),
331
280
  publish: PublishSchema.prefault({}),
332
281
  skills: SkillsSchema.prefault({}),
282
+ update_check: UpdateCheckSchema.prefault({}),
333
283
  ingest: IngestSchema.prefault({}),
334
284
  organize: OrganizeSchema,
335
285
  harness: HarnessSchema.prefault({}),
@@ -340,14 +290,12 @@ export const StoreConfigSchema = z
340
290
  /**
341
291
  * retain-captures-as-provenance (D7): one prefix has to serve both the
342
292
  * retrieval exclusion and the write-path gate, which only holds while the
343
- * inbox is strictly inside the capture root. Gated on the version that
344
- * introduced the capture tier — a store still on an older schema has a
345
- * `capture_root` this schema defaulted in, not one it declared, and
346
- * migrations of earlier versions must be able to write their configs
347
- * back untouched.
293
+ * inbox is strictly inside the capture root. Unconditional since
294
+ * retire-store-migrations — every config that reaches this refinement is
295
+ * at the supported version, which is exactly what the old version guard
296
+ * tested for. It existed only while migrations had to write configs at
297
+ * earlier versions back to disk.
348
298
  */
349
- if (value.schema_version < CAPTURE_TIER_SCHEMA_VERSION)
350
- return;
351
299
  if (!isStrictlyUnderPrefix(value.ingest.inbox_path, value.ingest.capture_root)) {
352
300
  ctx.addIssue({
353
301
  code: 'custom',
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../../src/core/browse/nav.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAmGhF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMnD;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CASzD"}
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../../src/core/browse/nav.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAqGhF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMnD;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CASzD"}
@@ -58,7 +58,10 @@ function renderAreaContent(table, area) {
58
58
  switch (area) {
59
59
  case 'publish': {
60
60
  const pages = publishPages(table);
61
- const tree = buildPathTree(pages, (page) => lastSegment(page), (page) => `/publish/${encodeURI(page)}/${PUBLISH_INDEX_FILE}`);
61
+ const tree = buildPathTree(pages,
62
+ // serve-page-names-theme-and-nav-toggle D1: a page's declared name, falling back to its
63
+ // directory segment — the same "one answer to what this is called" principle D6 gives notes.
64
+ (page) => table.publishTitles.get(page) ?? lastSegment(page), (page) => `/publish/${encodeURI(page)}/${PUBLISH_INDEX_FILE}`);
62
65
  return renderTree(tree, 0);
63
66
  }
64
67
  case 'notes': {
@@ -1 +1 @@
1
- {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../../src/core/browse/nav.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../../src/core/browse/nav.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type ThemeMode = 'light' | 'dark' | 'system';
2
+ export interface ResolvedTheme {
3
+ theme: ThemeMode;
4
+ /** A `Set-Cookie` header value to persist the choice, present only when a query parameter just made it. */
5
+ setCookie: string | undefined;
6
+ }
7
+ /**
8
+ * design.md D6 (serve-page-names-theme-and-nav-toggle): resolves the theme for one response from
9
+ * (in priority order) a `?ctxr-theme=` query parameter on the current request, the persisted
10
+ * cookie, and finally `system` — never a route of its own, so this stays transparent to dispatch.
11
+ */
12
+ export declare function resolveTheme(cookieHeader: string | undefined, searchParams: URLSearchParams): ResolvedTheme;
13
+ export type NavState = 'shown' | 'collapsed';
14
+ export interface ResolvedNavState {
15
+ navState: NavState;
16
+ /** A `Set-Cookie` header value to persist the choice, present only when a query parameter just made it. */
17
+ setCookie: string | undefined;
18
+ }
19
+ /**
20
+ * design.md D9 (serve-page-names-theme-and-nav-toggle): resolves the wide-viewport collapsed/shown
21
+ * state the same way `resolveTheme` resolves a theme — a query parameter, else the persisted
22
+ * cookie, else the default. This governs only the wide-viewport link; the narrow-viewport
23
+ * disclosure is a plain CSS checkbox with no server-side state at all.
24
+ */
25
+ export declare function resolveNavState(cookieHeader: string | undefined, searchParams: URLSearchParams): ResolvedNavState;
26
+ //# sourceMappingURL=preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../../src/core/browse/preferences.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AA6DpD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,2GAA2G;IAC3G,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,aAAa,CAI3G;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;AAO7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,2GAA2G;IAC3G,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,gBAAgB,CAIjH"}
@@ -0,0 +1,74 @@
1
+ const THEME_MODES = ['light', 'dark', 'system'];
2
+ const THEME_COOKIE = 'ctxr_theme';
3
+ const THEME_QUERY_PARAM = 'ctxr-theme';
4
+ const DEFAULT_THEME = 'system';
5
+ const COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 365;
6
+ /**
7
+ * Minimal Cookie-header parser: "name=value" pairs separated by "; ". The
8
+ * first occurrence of a repeated name wins, the same resolution a browser
9
+ * itself applies when more than one cookie shares a name.
10
+ */
11
+ function parseCookies(header) {
12
+ const cookies = new Map();
13
+ if (!header)
14
+ return cookies;
15
+ for (const part of header.split(';')) {
16
+ const eq = part.indexOf('=');
17
+ if (eq === -1)
18
+ continue;
19
+ const name = part.slice(0, eq).trim();
20
+ if (name.length === 0 || cookies.has(name))
21
+ continue;
22
+ let value = part.slice(eq + 1).trim();
23
+ if (value.length >= 2 && value.startsWith('"') && value.endsWith('"'))
24
+ value = value.slice(1, -1);
25
+ cookies.set(name, value);
26
+ }
27
+ return cookies;
28
+ }
29
+ function isOneOf(value, allowed) {
30
+ return value !== null && value !== undefined && allowed.includes(value);
31
+ }
32
+ /**
33
+ * design.md D6/D7 (serve-page-names-theme-and-nav-toggle): a query parameter overrides the
34
+ * persisted cookie for this response and is what gets persisted going forward. An unrecognized
35
+ * cookie value — absent, malformed, from an old or foreign build — is never trusted, and falls
36
+ * back to `fallback` exactly as if no cookie had been sent at all.
37
+ */
38
+ function resolvePreference(queryValue, cookieValue, allowed, fallback) {
39
+ if (isOneOf(queryValue, allowed))
40
+ return { value: queryValue, fromQueryParam: true };
41
+ if (isOneOf(cookieValue, allowed))
42
+ return { value: cookieValue, fromQueryParam: false };
43
+ return { value: fallback, fromQueryParam: false };
44
+ }
45
+ /** design.md D7: `Path=/`, a one-year lifetime, `SameSite=Lax`, and `HttpOnly` — nothing in this surface ever reads a cookie from script. */
46
+ function setCookieHeader(name, value) {
47
+ return `${name}=${value}; Path=/; Max-Age=${COOKIE_MAX_AGE_SECONDS}; SameSite=Lax; HttpOnly`;
48
+ }
49
+ /**
50
+ * design.md D6 (serve-page-names-theme-and-nav-toggle): resolves the theme for one response from
51
+ * (in priority order) a `?ctxr-theme=` query parameter on the current request, the persisted
52
+ * cookie, and finally `system` — never a route of its own, so this stays transparent to dispatch.
53
+ */
54
+ export function resolveTheme(cookieHeader, searchParams) {
55
+ const cookies = parseCookies(cookieHeader);
56
+ const resolved = resolvePreference(searchParams.get(THEME_QUERY_PARAM), cookies.get(THEME_COOKIE), THEME_MODES, DEFAULT_THEME);
57
+ return { theme: resolved.value, setCookie: resolved.fromQueryParam ? setCookieHeader(THEME_COOKIE, resolved.value) : undefined };
58
+ }
59
+ const NAV_STATES = ['shown', 'collapsed'];
60
+ const NAV_COOKIE = 'ctxr_nav';
61
+ const NAV_QUERY_PARAM = 'ctxr-nav';
62
+ const DEFAULT_NAV_STATE = 'shown';
63
+ /**
64
+ * design.md D9 (serve-page-names-theme-and-nav-toggle): resolves the wide-viewport collapsed/shown
65
+ * state the same way `resolveTheme` resolves a theme — a query parameter, else the persisted
66
+ * cookie, else the default. This governs only the wide-viewport link; the narrow-viewport
67
+ * disclosure is a plain CSS checkbox with no server-side state at all.
68
+ */
69
+ export function resolveNavState(cookieHeader, searchParams) {
70
+ const cookies = parseCookies(cookieHeader);
71
+ const resolved = resolvePreference(searchParams.get(NAV_QUERY_PARAM), cookies.get(NAV_COOKIE), NAV_STATES, DEFAULT_NAV_STATE);
72
+ return { navState: resolved.value, setCookie: resolved.fromQueryParam ? setCookieHeader(NAV_COOKIE, resolved.value) : undefined };
73
+ }
74
+ //# sourceMappingURL=preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../../src/core/browse/preferences.ts"],"names":[],"mappings":"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"}