@c4a/context 0.7.15 → 0.7.17

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.
@@ -93,8 +93,14 @@ The website uses a full-width VitePress theme with system fonts, compact navigat
93
93
  a wide reading area and a smaller article outline. It starts in
94
94
  light mode regardless of the operating system; an explicit reader choice is
95
95
  remembered in browser storage. Search runs locally, without a search service.
96
- Mermaid renders in the browser with a restrained theme; invalid diagrams retain
97
- their source instead of blocking publication. Code samples and raw HTML are
96
+ Mermaid renders in the browser using the website theme, with fit, original-size,
97
+ zoom, full-screen and source controls. Controls appear on hover or keyboard focus
98
+ (and remain visible on touch devices). Layout and source/copy actions are on the
99
+ left, sizing actions on the right. Source view replaces the diagram. Flowcharts default to ELK and can switch to Dagre without changing the article. Offline Review reports use the same
100
+ viewer and include its resources only when a candidate contains Mermaid.
101
+ Article provenance initially shows ten sources; Show more reveals the full list.
102
+ Invalid diagrams and diagrams with embedded image/HTML resources retain their
103
+ source with a rendering notice instead of blocking publication. Code samples and raw HTML are
98
104
  displayed as content, not executed as Vue components or scripts.
99
105
 
100
106
  The accepted `src/knowledge-map.yaml` controls sidebar organization. Entries
@@ -501,3 +507,31 @@ result instead of guessing a hostname. No new workspace configuration is needed.
501
507
  The address is an access hint, not proof of publication or content freshness.
502
508
  Query Skills use it only to append related links in the final summary, with no
503
509
  network probes or version checks. Packages without the map work as before.
510
+
511
+ ### Shared color theme
512
+
513
+ Website builds create `src/site/theme.json` with the current default light and
514
+ dark palettes if the file is missing. Edit this optional JSON file to customize
515
+ all websites and offline Review reports in the workspace. It is configuration,
516
+ not a generated HTML file: builds never overwrite existing values. Deleting it
517
+ restores built-in defaults; Review does not need the file or an existing website
518
+ build. The next website build recreates it.
519
+
520
+ Each `light`/`dark` object supports `brand`, `accent`, `background`, `surface`,
521
+ `text`, `mutedText`, and `border`. Values are hexadecimal CSS colors (`#RGB`,
522
+ `#RRGGBB`, or `#RRGGBBAA`). Partial objects inherit missing default colors. Invalid
523
+ JSON or colors produce a configuration error identifying the optional file.
524
+
525
+ A package may override these colors through `kbPackage({ site: { theme: {
526
+ light: { brand: "#6750a4" }, dark: { brand: "#d0bcff" }
527
+ } } })`. Precedence is built-in defaults, workspace file, then `site.theme`.
528
+ A Review with one website package uses that package's overrides. With multiple
529
+ website packages it uses the shared workspace theme, without selecting an
530
+ arbitrary package. New/Modify/approve/reject status colors remain independent.
531
+
532
+ The compiler projects tokens into VitePress and standalone Review CSS. Mermaid
533
+ reads the same resolved colors. Changes to the theme invalidate website build
534
+ receipts. Arbitrary extension CSS is not copied into Review; custom components
535
+ can consume `--context-brand`, `--context-accent`, `--context-background`,
536
+ `--context-surface`, `--context-text`, `--context-muted-text`, and
537
+ `--context-border` rather than hard-coding colors.
package/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export { siteThemeSchema, DEFAULT_SITE_THEME, type SiteTheme, type SiteThemeColors } from "./siteTheme.js";
1
2
  import { type PackageSiteDefinition } from "./packageSite.js";
2
3
  export { packageSiteSchema, type PackageSiteDefinition } from "./packageSite.js";
3
4
  import type { PackageNavigationDefinition, PackageSelectDefinition } from "./contracts.js";
package/index.js CHANGED
@@ -10888,6 +10888,22 @@ var coerce = {
10888
10888
  date: (arg) => ZodDate.create({ ...arg, coerce: true })
10889
10889
  };
10890
10890
  var NEVER = INVALID;
10891
+ // src/siteTheme.ts
10892
+ var color = exports_external.string().regex(/^#(?:[\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/iu, "Use a hexadecimal CSS color (#RGB, #RRGGBB or #RRGGBBAA)");
10893
+ var siteThemeColorsSchema = exports_external.object({
10894
+ brand: color.optional(),
10895
+ accent: color.optional(),
10896
+ background: color.optional(),
10897
+ surface: color.optional(),
10898
+ text: color.optional(),
10899
+ mutedText: color.optional(),
10900
+ border: color.optional()
10901
+ }).strict();
10902
+ var siteThemeSchema = exports_external.object({ light: siteThemeColorsSchema.optional(), dark: siteThemeColorsSchema.optional() }).strict();
10903
+ var DEFAULT_SITE_THEME = {
10904
+ light: { brand: "#2563eb", accent: "#00bec8", background: "#ffffff", surface: "#f8f9fc", text: "#161e2e", mutedText: "#646b7c", border: "#e7e9ef" },
10905
+ dark: { brand: "#8eb7ff", accent: "#b3cfff", background: "#171b24", surface: "#1b1d24", text: "#e2e4ed", mutedText: "#a1a6b7", border: "#303440" }
10906
+ };
10891
10907
  // src/packageSite.ts
10892
10908
  var siteHrefSchema = exports_external.string().trim().min(1).refine((value) => /^(?:https?:\/\/|mailto:|\/(?!\/)|#)/u.test(value), "Use an https URL, mailto URL, root-relative path, or page anchor");
10893
10909
  var packageSiteHomeActionSchema = exports_external.object({
@@ -10913,6 +10929,7 @@ var packageSiteHomeSchema = exports_external.object({
10913
10929
  resources: exports_external.array(packageSiteHomeResourceSchema).optional()
10914
10930
  }).strict();
10915
10931
  var packageSiteSchema = exports_external.object({
10932
+ theme: siteThemeSchema.optional(),
10916
10933
  title: exports_external.string().trim().min(1).optional(),
10917
10934
  description: exports_external.string().optional(),
10918
10935
  lang: exports_external.string().min(1).default("en-US"),
@@ -32413,6 +32430,7 @@ export {
32413
32430
  startIndexerMainRun,
32414
32431
  sourceUpdateSemanticInputSchema,
32415
32432
  source,
32433
+ siteThemeSchema,
32416
32434
  sessionChangesSchema,
32417
32435
  sessionChangeSchema,
32418
32436
  sameIndexerParserExecutionPlan,
@@ -32987,6 +33005,7 @@ export {
32987
33005
  DOCUMENT_SECTION_CONTENT_MODES,
32988
33006
  DOCUMENT_EVIDENCE_SECTION_VALIDATION_STAGES,
32989
33007
  DOCUMENT_COMPILE_ACTION_SCHEMA_VERSION,
33008
+ DEFAULT_SITE_THEME,
32990
33009
  DEFAULT_REPO_SOURCES_REGISTRY_PATH,
32991
33010
  DEFAULT_PACKAGE_NAVIGATION,
32992
33011
  DEFAULT_LARK_SOURCES_REGISTRY_PATH,
@@ -10,11 +10,11 @@ export declare const indexerArtifactPolicyEligibilitySchema: z.ZodObject<{
10
10
  path: z.ZodString;
11
11
  value: z.ZodType<IndexerJson, z.ZodTypeDef, IndexerJson>;
12
12
  }, "strict", z.ZodTypeAny, {
13
- path: string;
14
13
  value: IndexerJson;
15
- }, {
16
14
  path: string;
15
+ }, {
17
16
  value: IndexerJson;
17
+ path: string;
18
18
  }>, "many">;
19
19
  provider_supported_variants: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
20
20
  eligible_variants: z.ZodArray<z.ZodObject<{
@@ -71,8 +71,8 @@ export declare const indexerArtifactPolicyEligibilitySchema: z.ZodObject<{
71
71
  profile_id: string;
72
72
  profile_contract_digest: string;
73
73
  canonical_facts: {
74
- path: string;
75
74
  value: IndexerJson;
75
+ path: string;
76
76
  }[];
77
77
  provider_supported_variants: string[];
78
78
  eligible_variants: {
@@ -94,8 +94,8 @@ export declare const indexerArtifactPolicyEligibilitySchema: z.ZodObject<{
94
94
  profile_id: string;
95
95
  profile_contract_digest: string;
96
96
  canonical_facts: {
97
- path: string;
98
97
  value: IndexerJson;
98
+ path: string;
99
99
  }[];
100
100
  provider_supported_variants: string[];
101
101
  eligible_variants: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c4a/context",
3
- "version": "0.7.15",
3
+ "version": "0.7.17",
4
4
  "type": "module",
5
5
  "description": "Declarative SDK for Context knowledge sources, workflows, review, and package outputs",
6
6
  "license": "MIT",
package/packageSite.d.ts CHANGED
@@ -1,6 +1,96 @@
1
1
  import { z } from "zod";
2
2
  /** Static website in a sibling dist/<name-without-trailing-kb>-site directory. */
3
3
  export declare const packageSiteSchema: z.ZodObject<{
4
+ theme: z.ZodOptional<z.ZodObject<{
5
+ light: z.ZodOptional<z.ZodObject<{
6
+ brand: z.ZodOptional<z.ZodString>;
7
+ accent: z.ZodOptional<z.ZodString>;
8
+ background: z.ZodOptional<z.ZodString>;
9
+ surface: z.ZodOptional<z.ZodString>;
10
+ text: z.ZodOptional<z.ZodString>;
11
+ mutedText: z.ZodOptional<z.ZodString>;
12
+ border: z.ZodOptional<z.ZodString>;
13
+ }, "strict", z.ZodTypeAny, {
14
+ brand?: string | undefined;
15
+ accent?: string | undefined;
16
+ background?: string | undefined;
17
+ surface?: string | undefined;
18
+ text?: string | undefined;
19
+ mutedText?: string | undefined;
20
+ border?: string | undefined;
21
+ }, {
22
+ brand?: string | undefined;
23
+ accent?: string | undefined;
24
+ background?: string | undefined;
25
+ surface?: string | undefined;
26
+ text?: string | undefined;
27
+ mutedText?: string | undefined;
28
+ border?: string | undefined;
29
+ }>>;
30
+ dark: z.ZodOptional<z.ZodObject<{
31
+ brand: z.ZodOptional<z.ZodString>;
32
+ accent: z.ZodOptional<z.ZodString>;
33
+ background: z.ZodOptional<z.ZodString>;
34
+ surface: z.ZodOptional<z.ZodString>;
35
+ text: z.ZodOptional<z.ZodString>;
36
+ mutedText: z.ZodOptional<z.ZodString>;
37
+ border: z.ZodOptional<z.ZodString>;
38
+ }, "strict", z.ZodTypeAny, {
39
+ brand?: string | undefined;
40
+ accent?: string | undefined;
41
+ background?: string | undefined;
42
+ surface?: string | undefined;
43
+ text?: string | undefined;
44
+ mutedText?: string | undefined;
45
+ border?: string | undefined;
46
+ }, {
47
+ brand?: string | undefined;
48
+ accent?: string | undefined;
49
+ background?: string | undefined;
50
+ surface?: string | undefined;
51
+ text?: string | undefined;
52
+ mutedText?: string | undefined;
53
+ border?: string | undefined;
54
+ }>>;
55
+ }, "strict", z.ZodTypeAny, {
56
+ light?: {
57
+ brand?: string | undefined;
58
+ accent?: string | undefined;
59
+ background?: string | undefined;
60
+ surface?: string | undefined;
61
+ text?: string | undefined;
62
+ mutedText?: string | undefined;
63
+ border?: string | undefined;
64
+ } | undefined;
65
+ dark?: {
66
+ brand?: string | undefined;
67
+ accent?: string | undefined;
68
+ background?: string | undefined;
69
+ surface?: string | undefined;
70
+ text?: string | undefined;
71
+ mutedText?: string | undefined;
72
+ border?: string | undefined;
73
+ } | undefined;
74
+ }, {
75
+ light?: {
76
+ brand?: string | undefined;
77
+ accent?: string | undefined;
78
+ background?: string | undefined;
79
+ surface?: string | undefined;
80
+ text?: string | undefined;
81
+ mutedText?: string | undefined;
82
+ border?: string | undefined;
83
+ } | undefined;
84
+ dark?: {
85
+ brand?: string | undefined;
86
+ accent?: string | undefined;
87
+ background?: string | undefined;
88
+ surface?: string | undefined;
89
+ text?: string | undefined;
90
+ mutedText?: string | undefined;
91
+ border?: string | undefined;
92
+ } | undefined;
93
+ }>>;
4
94
  title: z.ZodOptional<z.ZodString>;
5
95
  description: z.ZodOptional<z.ZodString>;
6
96
  lang: z.ZodDefault<z.ZodString>;
@@ -140,6 +230,26 @@ export declare const packageSiteSchema: z.ZodObject<{
140
230
  }, "strict", z.ZodTypeAny, {
141
231
  lang: string;
142
232
  base: string;
233
+ theme?: {
234
+ light?: {
235
+ brand?: string | undefined;
236
+ accent?: string | undefined;
237
+ background?: string | undefined;
238
+ surface?: string | undefined;
239
+ text?: string | undefined;
240
+ mutedText?: string | undefined;
241
+ border?: string | undefined;
242
+ } | undefined;
243
+ dark?: {
244
+ brand?: string | undefined;
245
+ accent?: string | undefined;
246
+ background?: string | undefined;
247
+ surface?: string | undefined;
248
+ text?: string | undefined;
249
+ mutedText?: string | undefined;
250
+ border?: string | undefined;
251
+ } | undefined;
252
+ } | undefined;
143
253
  title?: string | undefined;
144
254
  description?: string | undefined;
145
255
  home?: {
@@ -172,6 +282,26 @@ export declare const packageSiteSchema: z.ZodObject<{
172
282
  pages?: Record<string, string> | undefined;
173
283
  } | undefined;
174
284
  }, {
285
+ theme?: {
286
+ light?: {
287
+ brand?: string | undefined;
288
+ accent?: string | undefined;
289
+ background?: string | undefined;
290
+ surface?: string | undefined;
291
+ text?: string | undefined;
292
+ mutedText?: string | undefined;
293
+ border?: string | undefined;
294
+ } | undefined;
295
+ dark?: {
296
+ brand?: string | undefined;
297
+ accent?: string | undefined;
298
+ background?: string | undefined;
299
+ surface?: string | undefined;
300
+ text?: string | undefined;
301
+ mutedText?: string | undefined;
302
+ border?: string | undefined;
303
+ } | undefined;
304
+ } | undefined;
175
305
  title?: string | undefined;
176
306
  description?: string | undefined;
177
307
  lang?: string | undefined;
@@ -210,6 +340,26 @@ export type PackageSiteDefinition = z.input<typeof packageSiteSchema>;
210
340
  export declare function normalizePackageSite(value: PackageSiteDefinition | undefined): {
211
341
  lang: string;
212
342
  base: string;
343
+ theme?: {
344
+ light?: {
345
+ brand?: string | undefined;
346
+ accent?: string | undefined;
347
+ background?: string | undefined;
348
+ surface?: string | undefined;
349
+ text?: string | undefined;
350
+ mutedText?: string | undefined;
351
+ border?: string | undefined;
352
+ } | undefined;
353
+ dark?: {
354
+ brand?: string | undefined;
355
+ accent?: string | undefined;
356
+ background?: string | undefined;
357
+ surface?: string | undefined;
358
+ text?: string | undefined;
359
+ mutedText?: string | undefined;
360
+ border?: string | undefined;
361
+ } | undefined;
362
+ } | undefined;
213
363
  title?: string | undefined;
214
364
  description?: string | undefined;
215
365
  home?: {
package/siteTheme.d.ts ADDED
@@ -0,0 +1,122 @@
1
+ import { z } from "zod";
2
+ export declare const siteThemeColorsSchema: z.ZodObject<{
3
+ brand: z.ZodOptional<z.ZodString>;
4
+ accent: z.ZodOptional<z.ZodString>;
5
+ background: z.ZodOptional<z.ZodString>;
6
+ surface: z.ZodOptional<z.ZodString>;
7
+ text: z.ZodOptional<z.ZodString>;
8
+ mutedText: z.ZodOptional<z.ZodString>;
9
+ border: z.ZodOptional<z.ZodString>;
10
+ }, "strict", z.ZodTypeAny, {
11
+ brand?: string | undefined;
12
+ accent?: string | undefined;
13
+ background?: string | undefined;
14
+ surface?: string | undefined;
15
+ text?: string | undefined;
16
+ mutedText?: string | undefined;
17
+ border?: string | undefined;
18
+ }, {
19
+ brand?: string | undefined;
20
+ accent?: string | undefined;
21
+ background?: string | undefined;
22
+ surface?: string | undefined;
23
+ text?: string | undefined;
24
+ mutedText?: string | undefined;
25
+ border?: string | undefined;
26
+ }>;
27
+ export declare const siteThemeSchema: z.ZodObject<{
28
+ light: z.ZodOptional<z.ZodObject<{
29
+ brand: z.ZodOptional<z.ZodString>;
30
+ accent: z.ZodOptional<z.ZodString>;
31
+ background: z.ZodOptional<z.ZodString>;
32
+ surface: z.ZodOptional<z.ZodString>;
33
+ text: z.ZodOptional<z.ZodString>;
34
+ mutedText: z.ZodOptional<z.ZodString>;
35
+ border: z.ZodOptional<z.ZodString>;
36
+ }, "strict", z.ZodTypeAny, {
37
+ brand?: string | undefined;
38
+ accent?: string | undefined;
39
+ background?: string | undefined;
40
+ surface?: string | undefined;
41
+ text?: string | undefined;
42
+ mutedText?: string | undefined;
43
+ border?: string | undefined;
44
+ }, {
45
+ brand?: string | undefined;
46
+ accent?: string | undefined;
47
+ background?: string | undefined;
48
+ surface?: string | undefined;
49
+ text?: string | undefined;
50
+ mutedText?: string | undefined;
51
+ border?: string | undefined;
52
+ }>>;
53
+ dark: z.ZodOptional<z.ZodObject<{
54
+ brand: z.ZodOptional<z.ZodString>;
55
+ accent: z.ZodOptional<z.ZodString>;
56
+ background: z.ZodOptional<z.ZodString>;
57
+ surface: z.ZodOptional<z.ZodString>;
58
+ text: z.ZodOptional<z.ZodString>;
59
+ mutedText: z.ZodOptional<z.ZodString>;
60
+ border: z.ZodOptional<z.ZodString>;
61
+ }, "strict", z.ZodTypeAny, {
62
+ brand?: string | undefined;
63
+ accent?: string | undefined;
64
+ background?: string | undefined;
65
+ surface?: string | undefined;
66
+ text?: string | undefined;
67
+ mutedText?: string | undefined;
68
+ border?: string | undefined;
69
+ }, {
70
+ brand?: string | undefined;
71
+ accent?: string | undefined;
72
+ background?: string | undefined;
73
+ surface?: string | undefined;
74
+ text?: string | undefined;
75
+ mutedText?: string | undefined;
76
+ border?: string | undefined;
77
+ }>>;
78
+ }, "strict", z.ZodTypeAny, {
79
+ light?: {
80
+ brand?: string | undefined;
81
+ accent?: string | undefined;
82
+ background?: string | undefined;
83
+ surface?: string | undefined;
84
+ text?: string | undefined;
85
+ mutedText?: string | undefined;
86
+ border?: string | undefined;
87
+ } | undefined;
88
+ dark?: {
89
+ brand?: string | undefined;
90
+ accent?: string | undefined;
91
+ background?: string | undefined;
92
+ surface?: string | undefined;
93
+ text?: string | undefined;
94
+ mutedText?: string | undefined;
95
+ border?: string | undefined;
96
+ } | undefined;
97
+ }, {
98
+ light?: {
99
+ brand?: string | undefined;
100
+ accent?: string | undefined;
101
+ background?: string | undefined;
102
+ surface?: string | undefined;
103
+ text?: string | undefined;
104
+ mutedText?: string | undefined;
105
+ border?: string | undefined;
106
+ } | undefined;
107
+ dark?: {
108
+ brand?: string | undefined;
109
+ accent?: string | undefined;
110
+ background?: string | undefined;
111
+ surface?: string | undefined;
112
+ text?: string | undefined;
113
+ mutedText?: string | undefined;
114
+ border?: string | undefined;
115
+ } | undefined;
116
+ }>;
117
+ export type SiteTheme = z.infer<typeof siteThemeSchema>;
118
+ export type SiteThemeColors = Required<z.infer<typeof siteThemeColorsSchema>>;
119
+ export declare const DEFAULT_SITE_THEME: {
120
+ light: SiteThemeColors;
121
+ dark: SiteThemeColors;
122
+ };