@koda-sl/baker-cli 0.484.0 → 0.485.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 (73) hide show
  1. package/README.md +1 -1
  2. package/dist/{brand-LAIIXZBL.js → brand-TRPJFCRL.js} +2 -2
  3. package/dist/{canvas-EAC3236V.js → canvas-ZKBXEUYK.js} +11 -11
  4. package/dist/{chunk-FY5RZBOY.js → chunk-67S6LADS.js} +2 -2
  5. package/dist/{chunk-Q4WWS3UQ.js → chunk-7SHNGCJ2.js} +2 -2
  6. package/dist/{chunk-AXDKLXCG.js → chunk-CTJPTSD4.js} +2 -2
  7. package/dist/{chunk-5O77KEKO.js → chunk-DFQHO3SL.js} +3 -3
  8. package/dist/{chunk-Z5SOZUUB.js → chunk-F4WLKHUS.js} +2 -2
  9. package/dist/{chunk-MGIOV72F.js → chunk-GIECLBJ3.js} +3 -3
  10. package/dist/{chunk-27DJRM3F.js → chunk-GPY2JEXL.js} +2 -2
  11. package/dist/{chunk-CS5JF52J.js → chunk-HDTR5DNA.js} +2 -2
  12. package/dist/{chunk-VNNCYWNN.js → chunk-HKQH6H2P.js} +3 -3
  13. package/dist/{chunk-IX2QLW6G.js → chunk-OEYVPXQZ.js} +28 -4
  14. package/dist/chunk-OEYVPXQZ.js.map +1 -0
  15. package/dist/{chunk-K2JTERIO.js → chunk-RSYOUKIQ.js} +2 -2
  16. package/dist/{chunk-3PXC2OXT.js → chunk-X3PM773M.js} +2 -2
  17. package/dist/{chunk-EFL6RNH3.js → chunk-YXVJA37O.js} +5 -5
  18. package/dist/cli.js +4 -4
  19. package/dist/{creatives-NK5HOXSF.js → creatives-K2BKGN6J.js} +5 -5
  20. package/dist/{critique-N5OL42C6.js → critique-2UMC3GJP.js} +14 -7
  21. package/dist/critique-2UMC3GJP.js.map +1 -0
  22. package/dist/{critique-EDMP5P5R.js → critique-GTUDKADX.js} +4 -4
  23. package/dist/{feedback-OCN3XNKF.js → feedback-7JVO62CE.js} +7 -7
  24. package/dist/{feedback-record-Z66AXZ57.js → feedback-record-YEJZKVFC.js} +7 -7
  25. package/dist/{fonts-I434ILTG.js → fonts-DIVC6DP2.js} +4 -4
  26. package/dist/{landing-EJGYTI5W.js → landing-6OJYUEWP.js} +2 -2
  27. package/dist/{make-ZYEFMAR6.js → make-2XZBKFJC.js} +8 -8
  28. package/dist/{rerun-VL3FSINT.js → rerun-VCZBNGDW.js} +8 -8
  29. package/dist/{run-NTUJERPZ.js → run-WOOBUVP3.js} +8 -8
  30. package/dist/{scaffold-ad-LZSSM5HS.js → scaffold-ad-PJ47R3IF.js} +6 -6
  31. package/dist/{scaffold-static-ad-F4HEJJ5N.js → scaffold-static-ad-PZBZV6SQ.js} +11 -11
  32. package/dist/{scaffold-video-7KSBESQ6.js → scaffold-video-GU4C7HCK.js} +5 -5
  33. package/dist/{select-POYNXE2L.js → select-JM2MFVNP.js} +6 -6
  34. package/dist/{set-prompt-USTAJUV6.js → set-prompt-JP3MASVF.js} +4 -4
  35. package/dist/{stale-6HL4ELJW.js → stale-VCZRIG25.js} +5 -5
  36. package/dist/{sync-definition-YGQU4BFK.js → sync-definition-Z7TY43IA.js} +5 -5
  37. package/dist/{translate-ACGKNKQP.js → translate-ZONETQ2W.js} +7 -7
  38. package/dist/{validate-SXDUQ5KO.js → validate-UTNTXLOL.js} +6 -6
  39. package/package.json +1 -1
  40. package/dist/chunk-IX2QLW6G.js.map +0 -1
  41. package/dist/critique-N5OL42C6.js.map +0 -1
  42. /package/dist/{brand-LAIIXZBL.js.map → brand-TRPJFCRL.js.map} +0 -0
  43. /package/dist/{canvas-EAC3236V.js.map → canvas-ZKBXEUYK.js.map} +0 -0
  44. /package/dist/{chunk-FY5RZBOY.js.map → chunk-67S6LADS.js.map} +0 -0
  45. /package/dist/{chunk-Q4WWS3UQ.js.map → chunk-7SHNGCJ2.js.map} +0 -0
  46. /package/dist/{chunk-AXDKLXCG.js.map → chunk-CTJPTSD4.js.map} +0 -0
  47. /package/dist/{chunk-5O77KEKO.js.map → chunk-DFQHO3SL.js.map} +0 -0
  48. /package/dist/{chunk-Z5SOZUUB.js.map → chunk-F4WLKHUS.js.map} +0 -0
  49. /package/dist/{chunk-MGIOV72F.js.map → chunk-GIECLBJ3.js.map} +0 -0
  50. /package/dist/{chunk-27DJRM3F.js.map → chunk-GPY2JEXL.js.map} +0 -0
  51. /package/dist/{chunk-CS5JF52J.js.map → chunk-HDTR5DNA.js.map} +0 -0
  52. /package/dist/{chunk-VNNCYWNN.js.map → chunk-HKQH6H2P.js.map} +0 -0
  53. /package/dist/{chunk-K2JTERIO.js.map → chunk-RSYOUKIQ.js.map} +0 -0
  54. /package/dist/{chunk-3PXC2OXT.js.map → chunk-X3PM773M.js.map} +0 -0
  55. /package/dist/{chunk-EFL6RNH3.js.map → chunk-YXVJA37O.js.map} +0 -0
  56. /package/dist/{creatives-NK5HOXSF.js.map → creatives-K2BKGN6J.js.map} +0 -0
  57. /package/dist/{critique-EDMP5P5R.js.map → critique-GTUDKADX.js.map} +0 -0
  58. /package/dist/{feedback-OCN3XNKF.js.map → feedback-7JVO62CE.js.map} +0 -0
  59. /package/dist/{feedback-record-Z66AXZ57.js.map → feedback-record-YEJZKVFC.js.map} +0 -0
  60. /package/dist/{fonts-I434ILTG.js.map → fonts-DIVC6DP2.js.map} +0 -0
  61. /package/dist/{landing-EJGYTI5W.js.map → landing-6OJYUEWP.js.map} +0 -0
  62. /package/dist/{make-ZYEFMAR6.js.map → make-2XZBKFJC.js.map} +0 -0
  63. /package/dist/{rerun-VL3FSINT.js.map → rerun-VCZBNGDW.js.map} +0 -0
  64. /package/dist/{run-NTUJERPZ.js.map → run-WOOBUVP3.js.map} +0 -0
  65. /package/dist/{scaffold-ad-LZSSM5HS.js.map → scaffold-ad-PJ47R3IF.js.map} +0 -0
  66. /package/dist/{scaffold-static-ad-F4HEJJ5N.js.map → scaffold-static-ad-PZBZV6SQ.js.map} +0 -0
  67. /package/dist/{scaffold-video-7KSBESQ6.js.map → scaffold-video-GU4C7HCK.js.map} +0 -0
  68. /package/dist/{select-POYNXE2L.js.map → select-JM2MFVNP.js.map} +0 -0
  69. /package/dist/{set-prompt-USTAJUV6.js.map → set-prompt-JP3MASVF.js.map} +0 -0
  70. /package/dist/{stale-6HL4ELJW.js.map → stale-VCZRIG25.js.map} +0 -0
  71. /package/dist/{sync-definition-YGQU4BFK.js.map → sync-definition-Z7TY43IA.js.map} +0 -0
  72. /package/dist/{translate-ACGKNKQP.js.map → translate-ZONETQ2W.js.map} +0 -0
  73. /package/dist/{validate-SXDUQ5KO.js.map → validate-UTNTXLOL.js.map} +0 -0
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  readDefinitionPlatforms,
13
13
  syncCreativeDefinitionBestEffort
14
- } from "./chunk-FY5RZBOY.js";
14
+ } from "./chunk-67S6LADS.js";
15
15
  import "./chunk-NPMAATZG.js";
16
16
  import {
17
17
  pinnedModelHint
@@ -48,7 +48,7 @@ import {
48
48
  voiceGenderModel,
49
49
  webFontUrl,
50
50
  writeSceneFiles
51
- } from "./chunk-AXDKLXCG.js";
51
+ } from "./chunk-CTJPTSD4.js";
52
52
  import "./chunk-EOY6BK4C.js";
53
53
  import "./chunk-ZINMEMOB.js";
54
54
  import "./chunk-UKL7GWEH.js";
@@ -60,9 +60,9 @@ import "./chunk-G2LGMWNG.js";
60
60
  import {
61
61
  fetchJson,
62
62
  lookupGoogleCss
63
- } from "./chunk-CS5JF52J.js";
64
- import "./chunk-K2JTERIO.js";
65
- import "./chunk-IX2QLW6G.js";
63
+ } from "./chunk-HDTR5DNA.js";
64
+ import "./chunk-RSYOUKIQ.js";
65
+ import "./chunk-OEYVPXQZ.js";
66
66
  import "./chunk-JYALBYN7.js";
67
67
  import "./chunk-FNA277HP.js";
68
68
  import {
@@ -1508,4 +1508,4 @@ async function stageBrandDisplayFace(outDir, compositionDir) {
1508
1508
  export {
1509
1509
  scaffoldAdCommand
1510
1510
  };
1511
- //# sourceMappingURL=scaffold-ad-LZSSM5HS.js.map
1511
+ //# sourceMappingURL=scaffold-ad-PJ47R3IF.js.map
@@ -16,12 +16,12 @@ import {
16
16
  import {
17
17
  readDefinitionPlatforms,
18
18
  syncCreativeDefinitionBestEffort
19
- } from "./chunk-FY5RZBOY.js";
19
+ } from "./chunk-67S6LADS.js";
20
20
  import {
21
21
  buildBackendClient
22
- } from "./chunk-EFL6RNH3.js";
22
+ } from "./chunk-YXVJA37O.js";
23
23
  import "./chunk-NPMAATZG.js";
24
- import "./chunk-5O77KEKO.js";
24
+ import "./chunk-DFQHO3SL.js";
25
25
  import "./chunk-WN4KX7GE.js";
26
26
  import "./chunk-H5HDZ7IC.js";
27
27
  import "./chunk-IVIJJXXT.js";
@@ -34,7 +34,7 @@ import {
34
34
  deliveryNote,
35
35
  namesDelivery,
36
36
  scaffoldDelivery
37
- } from "./chunk-Z5SOZUUB.js";
37
+ } from "./chunk-F4WLKHUS.js";
38
38
  import {
39
39
  LIBRARY_PLATFORMS,
40
40
  NO_FIT_HINT,
@@ -51,9 +51,9 @@ import {
51
51
  import {
52
52
  enforceNewCreativeLimit
53
53
  } from "./chunk-XZ4YMCZK.js";
54
- import "./chunk-MGIOV72F.js";
54
+ import "./chunk-GIECLBJ3.js";
55
55
  import "./chunk-UWXDNVS5.js";
56
- import "./chunk-Q4WWS3UQ.js";
56
+ import "./chunk-7SHNGCJ2.js";
57
57
  import {
58
58
  brandBlock,
59
59
  brandHeadlineFont,
@@ -79,7 +79,7 @@ import {
79
79
  staticAvatarsNotCast,
80
80
  titleFromSlug,
81
81
  webFontUrl
82
- } from "./chunk-AXDKLXCG.js";
82
+ } from "./chunk-CTJPTSD4.js";
83
83
  import "./chunk-ABXTGAG7.js";
84
84
  import "./chunk-EOY6BK4C.js";
85
85
  import {
@@ -95,9 +95,9 @@ import "./chunk-G2LGMWNG.js";
95
95
  import {
96
96
  fetchJson,
97
97
  lookupGoogleCss
98
- } from "./chunk-CS5JF52J.js";
99
- import "./chunk-K2JTERIO.js";
100
- import "./chunk-IX2QLW6G.js";
98
+ } from "./chunk-HDTR5DNA.js";
99
+ import "./chunk-RSYOUKIQ.js";
100
+ import "./chunk-OEYVPXQZ.js";
101
101
  import "./chunk-JYALBYN7.js";
102
102
  import "./chunk-BITS62MF.js";
103
103
  import "./chunk-FNA277HP.js";
@@ -1002,4 +1002,4 @@ export {
1002
1002
  uploadSourceAsReference,
1003
1003
  validateScaffoldedStaticAd
1004
1004
  };
1005
- //# sourceMappingURL=scaffold-static-ad-F4HEJJ5N.js.map
1005
+ //# sourceMappingURL=scaffold-static-ad-PZBZV6SQ.js.map
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  readDefinitionPlatforms,
19
19
  syncCreativeDefinitionBestEffort
20
- } from "./chunk-FY5RZBOY.js";
20
+ } from "./chunk-67S6LADS.js";
21
21
  import "./chunk-NPMAATZG.js";
22
22
  import {
23
23
  enforceNewCreativeLimit
@@ -47,15 +47,15 @@ import {
47
47
  videoReport,
48
48
  voiceGenderModel,
49
49
  writeSceneFiles
50
- } from "./chunk-AXDKLXCG.js";
50
+ } from "./chunk-CTJPTSD4.js";
51
51
  import "./chunk-EOY6BK4C.js";
52
52
  import "./chunk-ZINMEMOB.js";
53
53
  import "./chunk-UKL7GWEH.js";
54
54
  import "./chunk-LCW3U4EA.js";
55
55
  import "./chunk-WKLQFSV6.js";
56
56
  import "./chunk-G2LGMWNG.js";
57
- import "./chunk-K2JTERIO.js";
58
- import "./chunk-IX2QLW6G.js";
57
+ import "./chunk-RSYOUKIQ.js";
58
+ import "./chunk-OEYVPXQZ.js";
59
59
  import "./chunk-JYALBYN7.js";
60
60
  import "./chunk-FNA277HP.js";
61
61
  import {
@@ -880,4 +880,4 @@ export {
880
880
  resolveVideoModel,
881
881
  scaffoldVideoCommand
882
882
  };
883
- //# sourceMappingURL=scaffold-video-7KSBESQ6.js.map
883
+ //# sourceMappingURL=scaffold-video-GU4C7HCK.js.map
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  versionOf
3
- } from "./chunk-3PXC2OXT.js";
4
- import "./chunk-Q4WWS3UQ.js";
5
- import "./chunk-AXDKLXCG.js";
3
+ } from "./chunk-X3PM773M.js";
4
+ import "./chunk-7SHNGCJ2.js";
5
+ import "./chunk-CTJPTSD4.js";
6
6
  import "./chunk-EOY6BK4C.js";
7
7
  import "./chunk-ZINMEMOB.js";
8
8
  import "./chunk-UKL7GWEH.js";
9
9
  import "./chunk-LCW3U4EA.js";
10
10
  import "./chunk-WKLQFSV6.js";
11
11
  import "./chunk-G2LGMWNG.js";
12
- import "./chunk-K2JTERIO.js";
13
- import "./chunk-IX2QLW6G.js";
12
+ import "./chunk-RSYOUKIQ.js";
13
+ import "./chunk-OEYVPXQZ.js";
14
14
  import "./chunk-JYALBYN7.js";
15
15
  import "./chunk-FNA277HP.js";
16
16
  import "./chunk-5WMTPYKT.js";
@@ -98,4 +98,4 @@ var selectCommand = defineCommand({
98
98
  export {
99
99
  selectCommand
100
100
  };
101
- //# sourceMappingURL=select-POYNXE2L.js.map
101
+ //# sourceMappingURL=select-JM2MFVNP.js.map
@@ -4,15 +4,15 @@ import {
4
4
  compiledPromptNodeIds,
5
5
  prepareCanvas,
6
6
  sceneOwnedPrompts
7
- } from "./chunk-AXDKLXCG.js";
7
+ } from "./chunk-CTJPTSD4.js";
8
8
  import "./chunk-EOY6BK4C.js";
9
9
  import "./chunk-ZINMEMOB.js";
10
10
  import "./chunk-UKL7GWEH.js";
11
11
  import "./chunk-LCW3U4EA.js";
12
12
  import "./chunk-WKLQFSV6.js";
13
13
  import "./chunk-G2LGMWNG.js";
14
- import "./chunk-K2JTERIO.js";
15
- import "./chunk-IX2QLW6G.js";
14
+ import "./chunk-RSYOUKIQ.js";
15
+ import "./chunk-OEYVPXQZ.js";
16
16
  import "./chunk-JYALBYN7.js";
17
17
  import "./chunk-FNA277HP.js";
18
18
  import "./chunk-5WMTPYKT.js";
@@ -190,4 +190,4 @@ export {
190
190
  setPromptCommand,
191
191
  setPromptInCanvasFile
192
192
  };
193
- //# sourceMappingURL=set-prompt-USTAJUV6.js.map
193
+ //# sourceMappingURL=set-prompt-JP3MASVF.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  staleCreatives
3
- } from "./chunk-Q4WWS3UQ.js";
4
- import "./chunk-AXDKLXCG.js";
3
+ } from "./chunk-7SHNGCJ2.js";
4
+ import "./chunk-CTJPTSD4.js";
5
5
  import "./chunk-EOY6BK4C.js";
6
6
  import "./chunk-ZINMEMOB.js";
7
7
  import "./chunk-UKL7GWEH.js";
8
8
  import "./chunk-LCW3U4EA.js";
9
9
  import "./chunk-WKLQFSV6.js";
10
10
  import "./chunk-G2LGMWNG.js";
11
- import "./chunk-K2JTERIO.js";
12
- import "./chunk-IX2QLW6G.js";
11
+ import "./chunk-RSYOUKIQ.js";
12
+ import "./chunk-OEYVPXQZ.js";
13
13
  import "./chunk-JYALBYN7.js";
14
14
  import "./chunk-FNA277HP.js";
15
15
  import "./chunk-5WMTPYKT.js";
@@ -68,4 +68,4 @@ var staleCommand = defineCommand({
68
68
  export {
69
69
  staleCommand
70
70
  };
71
- //# sourceMappingURL=stale-6HL4ELJW.js.map
71
+ //# sourceMappingURL=stale-VCZRIG25.js.map
@@ -9,18 +9,18 @@ import {
9
9
  resolveCanvasPath,
10
10
  syncCreativeDefinitionBestEffort,
11
11
  syncDefinitionCommand
12
- } from "./chunk-FY5RZBOY.js";
12
+ } from "./chunk-67S6LADS.js";
13
13
  import "./chunk-NPMAATZG.js";
14
14
  import "./chunk-UWXDNVS5.js";
15
- import "./chunk-AXDKLXCG.js";
15
+ import "./chunk-CTJPTSD4.js";
16
16
  import "./chunk-EOY6BK4C.js";
17
17
  import "./chunk-ZINMEMOB.js";
18
18
  import "./chunk-UKL7GWEH.js";
19
19
  import "./chunk-LCW3U4EA.js";
20
20
  import "./chunk-WKLQFSV6.js";
21
21
  import "./chunk-G2LGMWNG.js";
22
- import "./chunk-K2JTERIO.js";
23
- import "./chunk-IX2QLW6G.js";
22
+ import "./chunk-RSYOUKIQ.js";
23
+ import "./chunk-OEYVPXQZ.js";
24
24
  import "./chunk-JYALBYN7.js";
25
25
  import "./chunk-FNA277HP.js";
26
26
  import "./chunk-5WMTPYKT.js";
@@ -61,4 +61,4 @@ export {
61
61
  syncCreativeDefinitionBestEffort,
62
62
  syncDefinitionCommand
63
63
  };
64
- //# sourceMappingURL=sync-definition-YGQU4BFK.js.map
64
+ //# sourceMappingURL=sync-definition-Z7TY43IA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  withoutFields
3
- } from "./chunk-27DJRM3F.js";
3
+ } from "./chunk-GPY2JEXL.js";
4
4
  import {
5
5
  claimNewCreativeInWorkspace,
6
6
  creativeLimitRefusal
@@ -10,9 +10,9 @@ import {
10
10
  runBaker,
11
11
  seriesLeadsAbove,
12
12
  writeSeriesMemberCanvas
13
- } from "./chunk-MGIOV72F.js";
13
+ } from "./chunk-GIECLBJ3.js";
14
14
  import "./chunk-UWXDNVS5.js";
15
- import "./chunk-Q4WWS3UQ.js";
15
+ import "./chunk-7SHNGCJ2.js";
16
16
  import {
17
17
  isCustomersWords,
18
18
  isSignatureLine,
@@ -23,7 +23,7 @@ import {
23
23
  parseDefinitionStrategyFields,
24
24
  sameTag,
25
25
  tagSlug
26
- } from "./chunk-AXDKLXCG.js";
26
+ } from "./chunk-CTJPTSD4.js";
27
27
  import "./chunk-ABXTGAG7.js";
28
28
  import {
29
29
  setDefinitionFields
@@ -34,8 +34,8 @@ import "./chunk-UKL7GWEH.js";
34
34
  import "./chunk-LCW3U4EA.js";
35
35
  import "./chunk-WKLQFSV6.js";
36
36
  import "./chunk-G2LGMWNG.js";
37
- import "./chunk-K2JTERIO.js";
38
- import "./chunk-IX2QLW6G.js";
37
+ import "./chunk-RSYOUKIQ.js";
38
+ import "./chunk-OEYVPXQZ.js";
39
39
  import "./chunk-JYALBYN7.js";
40
40
  import "./chunk-FNA277HP.js";
41
41
  import {
@@ -601,4 +601,4 @@ var translateCommand = defineCommand({
601
601
  export {
602
602
  translateCommand
603
603
  };
604
- //# sourceMappingURL=translate-ACGKNKQP.js.map
604
+ //# sourceMappingURL=translate-ZONETQ2W.js.map
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  outputRatioWarningsFor,
3
3
  shownBaseline
4
- } from "./chunk-5O77KEKO.js";
4
+ } from "./chunk-DFQHO3SL.js";
5
5
  import {
6
6
  creativeSlugFromCanvasPath
7
7
  } from "./chunk-UWXDNVS5.js";
8
- import "./chunk-Q4WWS3UQ.js";
8
+ import "./chunk-7SHNGCJ2.js";
9
9
  import {
10
10
  exitOnPrepareError,
11
11
  prepareCanvas
12
- } from "./chunk-AXDKLXCG.js";
12
+ } from "./chunk-CTJPTSD4.js";
13
13
  import "./chunk-EOY6BK4C.js";
14
14
  import "./chunk-ZINMEMOB.js";
15
15
  import "./chunk-UKL7GWEH.js";
16
16
  import "./chunk-LCW3U4EA.js";
17
17
  import "./chunk-WKLQFSV6.js";
18
18
  import "./chunk-G2LGMWNG.js";
19
- import "./chunk-K2JTERIO.js";
20
- import "./chunk-IX2QLW6G.js";
19
+ import "./chunk-RSYOUKIQ.js";
20
+ import "./chunk-OEYVPXQZ.js";
21
21
  import "./chunk-JYALBYN7.js";
22
22
  import "./chunk-FNA277HP.js";
23
23
  import "./chunk-5WMTPYKT.js";
@@ -114,4 +114,4 @@ var validateCommand = defineCommand({
114
114
  export {
115
115
  validateCommand
116
116
  };
117
- //# sourceMappingURL=validate-SXDUQ5KO.js.map
117
+ //# sourceMappingURL=validate-UTNTXLOL.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-cli",
3
- "version": "0.484.0",
3
+ "version": "0.485.0",
4
4
  "description": "AI-agent-first CLI for interacting with Baker, including the Baker creative canvas.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/engine/landing/lib/brand-tokens.ts","../src/engine/landing/lib/color.ts"],"sourcesContent":["/**\n * Landing anti-slop detector — brand allowlist.\n *\n * The client's committed brand is the allowlist: a value that matches a brand\n * token is a decision, not a tell, so the detector downgrades it to advisory\n * (mirrors impeccable's DESIGN.md drift model). The canonical source is\n * `src/brand/tokens.json` (validated with the shared `@baker/api` schema); a\n * workspace that predates it falls back to the legacy scan of the global.css\n * `@theme` block plus the faces and colours BRAND.md says the brand uses, read\n * in any language by the brand reader (`brand/brand-doc.ts`). A value BRAND.md\n * bans is never allowlisted.\n *\n * Empty/TODO brand (a fresh scaffold) → no allowlist, full strictness.\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { brandTokensSchema, type BrandTokens as CanonicalBrandTokens } from \"@baker/api\";\nimport { type BrandDocReading, type ReadBrandDocs, readWorkspaceBrandDoc } from \"../../brand/brand-doc.ts\";\nimport type { ReviewUsage } from \"../../nodes/local/lib/render-review.ts\";\nimport { getHue, hasChroma, isAiPurpleHue, isCreamColor, parseColor, type Rgb } from \"./color.ts\";\n\nexport type BrandTokens = {\n /** Lowercased committed font-family names (e.g. \"inter\", \"geist\"). */\n fonts: Set<string>;\n /** Parsed committed colors. */\n colors: Rgb[];\n /** True once any real token was found — distinguishes \"branded\" from \"blank\". */\n hasTokens: boolean;\n};\n\nconst EMPTY: BrandTokens = { fonts: new Set(), colors: [], hasTokens: false };\n\n/**\n * A token value that is a weight, a length, or a style keyword — never a family.\n *\n * Deliberately narrow, and the same predicate as `isNotAFamily` in the\n * scaffold's `__tooling__/checks/sdk/theme-css.mjs`. \"Anything starting with a\n * digit\" also swallows the real families that are named with digits — SAP's\n * \"72\", the \"3270\" monospace face — and because the scaffold keeps those,\n * dropping them here made `baker brand fonts check` clear a brand the client's\n * verify then rejected. `__tests__/theme-css-contract.test.ts` pins the two.\n */\nexport function isNotAFamily(value: string): boolean {\n return (\n /^[1-9]00$/.test(value) ||\n /^\\d+(?:\\.\\d+)?(?:px|rem|em|%|pt|vw|vh|ch|ex)$/i.test(value) ||\n /^(?:normal|bold|bolder|lighter|italic|oblique|none|auto|inherit|initial|unset)$/i.test(value)\n );\n}\n\n/** Pure parse of the two legacy brand sources: the theme, and what BRAND.md says it uses. */\nexport function parseBrandTokens(globalCss: string, brandDoc?: BrandDocReading | null): BrandTokens {\n const fonts = new Set<string>();\n const colors: Rgb[] = [];\n parseGlobalCss(globalCss, fonts, colors);\n for (const font of brandDoc?.fonts ?? []) if (font.use) fonts.add(font.family.toLowerCase());\n for (const color of brandDoc?.colors ?? []) {\n const parsed = color.use ? parseColor(color.hex) : null;\n if (parsed) colors.push(parsed);\n }\n return { fonts, colors, hasTokens: fonts.size > 0 || colors.length > 0 };\n}\n\n/** global.css `@theme` tokens: `--font-*` families and `--color-*` values.\n * Comments are stripped first — a commented-out legacy token is not a\n * commitment, and one stale purple would defang the color rules page-wide.\n *\n * The `--font-` match is anchored with a lookbehind and its value is checked:\n * `--text-h1--font-weight: 700` is a Tailwind v4 sub-property, and reading its\n * `--font-weight: 700` substring as a family called \"700\" put a 3-character\n * numeric string into the committed set — which `brandCommitsFont` then\n * substring-matched against every snippet containing \"700\", silently\n * whitelisting off-brand fonts. Mirrors\n * `apps/scaffold-template/__tooling__/checks/sdk/theme-css.mjs`. */\nfunction parseGlobalCss(rawCss: string, fonts: Set<string>, colors: Rgb[]): void {\n const globalCss = rawCss.replace(/\\/\\*[\\s\\S]*?\\*\\//g, (block) => block.replace(/[^\\n]/g, \" \"));\n for (const m of globalCss.matchAll(/(?<![\\w-])--font-([\\w-]*)\\s*:\\s*([^;]+);/gi)) {\n const slug = m[1] ?? \"\";\n if (slug.includes(\"--\") || /^weight(?:$|[-\\s])/i.test(slug)) continue;\n const first = (m[2] ?? \"\")\n .split(\",\")[0]\n ?.trim()\n .replace(/^['\"]|['\"]$/g, \"\")\n .toLowerCase();\n if (!first || isNotAFamily(first)) continue;\n fonts.add(first);\n }\n for (const m of globalCss.matchAll(\n /--color-[\\w-]*\\s*:\\s*(#[0-9a-f]{3,8}\\b|rgba?\\([^)]+\\)|oklch\\([^)]+\\)|hsla?\\([^)]+\\))/gi,\n )) {\n const c = parseColor(m[1] ?? \"\");\n if (c) colors.push(c);\n }\n}\n\n/** Canonical tokens.json → allowlist shape — exported for tests. */\nexport function brandTokensFromCanonical(tokens: CanonicalBrandTokens): BrandTokens {\n const fonts = new Set<string>(tokens.fonts.map((f) => f.family.toLowerCase()));\n const colors: Rgb[] = [];\n for (const color of tokens.colors) {\n const parsed = parseColor(color.value);\n if (parsed) colors.push(parsed);\n }\n return { fonts, colors, hasTokens: fonts.size > 0 || colors.length > 0 };\n}\n\n/**\n * Load brand tokens from a project root; degrades to empty when absent.\n * `src/brand/tokens.json` (canonical) wins; an absent or invalid file falls\n * back to the legacy global.css/BRAND.md scan — invalid is the drift\n * validator's finding to report, not a reason to run blind here.\n */\nexport async function loadBrandTokens(\n projectRoot: string,\n opts: { readBrandDoc?: ReadBrandDocs; onSpend?: (usage: ReviewUsage) => void } = {},\n): Promise<BrandTokens> {\n const tokensRaw = await safeRead(path.join(projectRoot, \"src\", \"brand\", \"tokens.json\"));\n if (tokensRaw) {\n try {\n const canonical = brandTokensSchema.safeParse(JSON.parse(tokensRaw));\n if (canonical.success) return brandTokensFromCanonical(canonical.data);\n } catch {\n // fall through to the legacy scan\n }\n }\n const globalCss = await safeRead(path.join(projectRoot, \"src\", \"styles\", \"global.css\"));\n const brandDoc = await readWorkspaceBrandDoc(projectRoot, {\n ...(opts.readBrandDoc ? { read: opts.readBrandDoc } : {}),\n ...(opts.onSpend ? { onSpend: opts.onSpend } : {}),\n });\n if (!globalCss && !brandDoc) return EMPTY;\n return parseBrandTokens(globalCss, brandDoc);\n}\n\nasync function safeRead(file: string): Promise<string> {\n try {\n return await readFile(file, \"utf8\");\n } catch {\n return \"\";\n }\n}\n\n/** Does the brand commit this font name (as it appears in a finding snippet)? */\nexport function brandCommitsFont(brand: BrandTokens, snippet: string): boolean {\n if (brand.fonts.size === 0) return false;\n const lower = snippet.toLowerCase();\n for (const f of brand.fonts) if (f.length >= 3 && lower.includes(f)) return true;\n return false;\n}\n\n/** Does the brand commit a purple/indigo hue (so the AI-palette tell is a choice)? */\nexport function brandCommitsAiHue(brand: BrandTokens): boolean {\n return brand.colors.some((c) => hasChroma(c, 40) && isAiPurpleHue(getHue(c)));\n}\n\n/** Does the brand commit a cream ground (so the cream tell is a choice)? */\nexport function brandCommitsCream(brand: BrandTokens): boolean {\n return brand.colors.some((c) => isCreamColor(c));\n}\n","/**\n * Landing anti-slop detector — color utilities.\n *\n * Ported (with sense) from impeccable's `cli/engine/shared/color.mjs` +\n * `isNeutralAuthoredColor` from `detect-text.mjs`. These parse colors as WRITTEN\n * in authored CSS (hex, named, rgb/hsl/oklch), not just the computed forms a\n * browser emits — because we scan `.astro` source, not a rendered DOM.\n */\n\nexport type Rgb = { r: number; g: number; b: number; a: number };\n\n/** CSS named colors whose channels are equal (achromatic). */\nconst NEUTRAL_COLOR_KEYWORDS = new Set<string>([\n \"transparent\",\n \"currentcolor\",\n \"black\",\n \"white\",\n \"gray\",\n \"grey\",\n \"silver\",\n \"dimgray\",\n \"dimgrey\",\n \"darkgray\",\n \"darkgrey\",\n \"lightgray\",\n \"lightgrey\",\n \"gainsboro\",\n \"whitesmoke\",\n]);\n\nfunction hexChannels(color: string): [number, number, number] | null {\n const long = color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})(?:[0-9a-f]{2})?$/i);\n if (long)\n return [\n Number.parseInt(long[1] ?? \"0\", 16),\n Number.parseInt(long[2] ?? \"0\", 16),\n Number.parseInt(long[3] ?? \"0\", 16),\n ];\n const short = color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])(?:[0-9a-f])?$/i);\n if (short) {\n const dup = (s: string | undefined) => Number.parseInt(`${s ?? \"0\"}${s ?? \"0\"}`, 16);\n return [dup(short[1]), dup(short[2]), dup(short[3])];\n }\n return null;\n}\n\n/** Parse any authored hex / rgb() / oklch() color to {r,g,b,a}. Null if unknown. */\nexport function parseColor(raw: string): Rgb | null {\n const c = String(raw || \"\")\n .trim()\n .toLowerCase();\n if (!c || c === \"transparent\") return null;\n const rgb = c.match(/rgba?\\(\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)(?:[\\s,/]+([\\d.]+%?))?\\s*\\)/i);\n if (rgb) {\n const alpha = rgb[4];\n const a = alpha === undefined ? 1 : alpha.endsWith(\"%\") ? Number.parseFloat(alpha) / 100 : Number.parseFloat(alpha);\n return { r: Number(rgb[1]), g: Number(rgb[2]), b: Number(rgb[3]), a };\n }\n const oklch = parseOklch(c);\n if (oklch) return oklch;\n const hex = hexChannels(c);\n if (hex) return { r: hex[0], g: hex[1], b: hex[2], a: 1 };\n return null;\n}\n\n/** `oklch(L C H)` / `oklch(L% C H / a)` → Rgb, or null when not oklch. */\nfunction parseOklch(c: string): Rgb | null {\n const m = c.match(/oklch\\(\\s*([\\d.]+%?)\\s+([\\d.]+%?)\\s+([\\d.]+)(?:deg)?(?:\\s*\\/\\s*([\\d.]+%?))?\\s*\\)/i);\n if (!m) return null;\n const pct = (s: string, scale: number) =>\n s.endsWith(\"%\") ? (Number.parseFloat(s) / 100) * scale : Number.parseFloat(s);\n const alpha = m[4];\n const a = alpha === undefined ? 1 : pct(alpha, 1);\n return { ...oklchToRgb(pct(m[1] ?? \"0\", 1), pct(m[2] ?? \"0\", 0.4), Number.parseFloat(m[3] ?? \"0\")), a };\n}\n\n/** oklch(L C H) → sRGB via OKLab (Björn Ottosson's reference constants), so\n * Tailwind v4-idiomatic `@theme` colors participate in the brand allowlist. */\nfunction oklchToRgb(L: number, C: number, H: number): { r: number; g: number; b: number } {\n const hRad = (H * Math.PI) / 180;\n const a = C * Math.cos(hRad);\n const b = C * Math.sin(hRad);\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n const lin = [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n ].map((v) => {\n const g = v <= 0.0031308 ? 12.92 * v : 1.055 * Math.sign(v) * Math.abs(v) ** (1 / 2.4) - 0.055;\n return Math.round(Math.max(0, Math.min(1, g)) * 255);\n });\n return { r: lin[0] ?? 0, g: lin[1] ?? 0, b: lin[2] ?? 0 };\n}\n\n/**\n * Neutrality test for colors as written in source CSS. Handles hex and named\n * neutrals directly; for rgb()/hsl()/oklch() etc. uses the channel/component\n * spread. An unrecognized spelling stays chromatic so a real accent is never\n * silently skipped (impeccable's fail-toward-detection default).\n */\nexport function isNeutralAuthoredColor(rawColor: string): boolean {\n const c = String(rawColor || \"\")\n .trim()\n .toLowerCase();\n if (!c) return false;\n if (NEUTRAL_COLOR_KEYWORDS.has(c)) return true;\n if (/^rgba?\\(/i.test(c)) {\n const channels = c.match(/^rgba?\\(\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)/i);\n if (channels) {\n const values = [1, 2, 3].map((i) => Number(channels[i]));\n return Math.max(...values) - Math.min(...values) < 30;\n }\n return false;\n }\n // oklch/lch chroma is the second component; hsl saturation is the second.\n const oklch = c.match(/oklch\\(\\s*[\\d.]+%?\\s+([\\d.-]+)/i);\n if (oklch) return Number.parseFloat(oklch[1] ?? \"0\") < 0.02;\n const lch = c.match(/lch\\(\\s*[\\d.]+%?\\s+([\\d.-]+)/i);\n if (lch) return Number.parseFloat(lch[1] ?? \"0\") < 3;\n const hsl = c.match(/hsla?\\(\\s*[\\d.-]+\\s*,?\\s*([\\d.]+)%/i);\n if (hsl) return Number.parseFloat(hsl[1] ?? \"0\") < 10;\n const channels = hexChannels(c);\n if (channels) return Math.max(...channels) - Math.min(...channels) < 30;\n return false;\n}\n\nexport function hasChroma(c: Rgb | null, threshold = 30): boolean {\n if (!c) return false;\n return Math.max(c.r, c.g, c.b) - Math.min(c.r, c.g, c.b) >= threshold;\n}\n\n/** Hue in degrees (0–360) for an rgb color. */\nexport function getHue(c: Rgb | null): number {\n if (!c) return 0;\n const r = c.r / 255;\n const g = c.g / 255;\n const b = c.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n if (max === min) return 0;\n const d = max - min;\n let h: number;\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) h = ((b - r) / d + 2) / 6;\n else h = ((r - g) / d + 4) / 6;\n return Math.round(h * 360);\n}\n\n/** Is this hue in the purple/violet/indigo band the AI-palette rule flags?\n * 225–310 covers everything the detection side bans: Tailwind indigo (~239°),\n * the indigo hero hexes (#667eea 229°, #6366f1 239°), violet (#8b5cf6 258°),\n * and purple (#7c3aed 262°+). Keep in lockstep with `AI_PURPLE_HEXES`. */\nexport function isAiPurpleHue(hue: number): boolean {\n return hue >= 225 && hue <= 310;\n}\n\n/** Is this a warm cream/parchment ground (light, r≥g≥b, small warmth)? */\nexport function isCreamColor(c: Rgb): boolean {\n if (Math.min(c.r, c.g, c.b) < 209) return false;\n if (!(c.r >= c.g && c.g >= c.b)) return false;\n const warmth = c.r - c.b;\n return warmth >= 6 && warmth <= 48;\n}\n"],"mappings":"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","names":["channels"]}