logicstamp-context 0.1.1 → 0.2.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 (159) hide show
  1. package/LLM_CONTEXT.md +4 -3
  2. package/README.md +116 -19
  3. package/dist/cli/commands/compare.d.ts.map +1 -1
  4. package/dist/cli/commands/compare.js +17 -8
  5. package/dist/cli/commands/compare.js.map +1 -1
  6. package/dist/cli/commands/context/bundleFormatter.d.ts +20 -0
  7. package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -0
  8. package/dist/cli/commands/context/bundleFormatter.js +55 -0
  9. package/dist/cli/commands/context/bundleFormatter.js.map +1 -0
  10. package/dist/cli/commands/context/configManager.d.ts +23 -0
  11. package/dist/cli/commands/context/configManager.d.ts.map +1 -0
  12. package/dist/cli/commands/context/configManager.js +69 -0
  13. package/dist/cli/commands/context/configManager.js.map +1 -0
  14. package/dist/cli/commands/context/contractBuilder.d.ts +18 -0
  15. package/dist/cli/commands/context/contractBuilder.d.ts.map +1 -0
  16. package/dist/cli/commands/context/contractBuilder.js +72 -0
  17. package/dist/cli/commands/context/contractBuilder.js.map +1 -0
  18. package/dist/cli/commands/context/fileWriter.d.ts +38 -0
  19. package/dist/cli/commands/context/fileWriter.d.ts.map +1 -0
  20. package/dist/cli/commands/context/fileWriter.js +165 -0
  21. package/dist/cli/commands/context/fileWriter.js.map +1 -0
  22. package/dist/cli/commands/context/statsCalculator.d.ts +44 -0
  23. package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -0
  24. package/dist/cli/commands/context/statsCalculator.js +150 -0
  25. package/dist/cli/commands/context/statsCalculator.js.map +1 -0
  26. package/dist/cli/commands/context/tokenEstimator.d.ts +76 -0
  27. package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -0
  28. package/dist/cli/commands/context/tokenEstimator.js +258 -0
  29. package/dist/cli/commands/context/tokenEstimator.js.map +1 -0
  30. package/dist/cli/commands/context.d.ts +1 -0
  31. package/dist/cli/commands/context.d.ts.map +1 -1
  32. package/dist/cli/commands/context.js +72 -399
  33. package/dist/cli/commands/context.js.map +1 -1
  34. package/dist/cli/commands/style.d.ts +11 -0
  35. package/dist/cli/commands/style.d.ts.map +1 -0
  36. package/dist/cli/commands/style.js +15 -0
  37. package/dist/cli/commands/style.js.map +1 -0
  38. package/dist/cli/handlers/cleanHandler.d.ts +5 -0
  39. package/dist/cli/handlers/cleanHandler.d.ts.map +1 -0
  40. package/dist/cli/handlers/cleanHandler.js +28 -0
  41. package/dist/cli/handlers/cleanHandler.js.map +1 -0
  42. package/dist/cli/handlers/compareHandler.d.ts +5 -0
  43. package/dist/cli/handlers/compareHandler.d.ts.map +1 -0
  44. package/dist/cli/handlers/compareHandler.js +332 -0
  45. package/dist/cli/handlers/compareHandler.js.map +1 -0
  46. package/dist/cli/handlers/contextHandler.d.ts +5 -0
  47. package/dist/cli/handlers/contextHandler.d.ts.map +1 -0
  48. package/dist/cli/handlers/contextHandler.js +24 -0
  49. package/dist/cli/handlers/contextHandler.js.map +1 -0
  50. package/dist/cli/handlers/initHandler.d.ts +6 -0
  51. package/dist/cli/handlers/initHandler.d.ts.map +1 -0
  52. package/dist/cli/handlers/initHandler.js +30 -0
  53. package/dist/cli/handlers/initHandler.js.map +1 -0
  54. package/dist/cli/handlers/styleHandler.d.ts +5 -0
  55. package/dist/cli/handlers/styleHandler.d.ts.map +1 -0
  56. package/dist/cli/handlers/styleHandler.js +30 -0
  57. package/dist/cli/handlers/styleHandler.js.map +1 -0
  58. package/dist/cli/handlers/validateHandler.d.ts +5 -0
  59. package/dist/cli/handlers/validateHandler.d.ts.map +1 -0
  60. package/dist/cli/handlers/validateHandler.js +23 -0
  61. package/dist/cli/handlers/validateHandler.js.map +1 -0
  62. package/dist/cli/parser/argumentParser.d.ts +44 -0
  63. package/dist/cli/parser/argumentParser.d.ts.map +1 -0
  64. package/dist/cli/parser/argumentParser.js +194 -0
  65. package/dist/cli/parser/argumentParser.js.map +1 -0
  66. package/dist/cli/parser/helpText.d.ts +11 -0
  67. package/dist/cli/parser/helpText.d.ts.map +1 -0
  68. package/dist/cli/parser/helpText.js +373 -0
  69. package/dist/cli/parser/helpText.js.map +1 -0
  70. package/dist/cli/stamp.js +14 -821
  71. package/dist/cli/stamp.js.map +1 -1
  72. package/dist/core/astParser/detectors.d.ts +24 -0
  73. package/dist/core/astParser/detectors.d.ts.map +1 -0
  74. package/dist/core/astParser/detectors.js +102 -0
  75. package/dist/core/astParser/detectors.js.map +1 -0
  76. package/dist/core/astParser/extractors/componentExtractor.d.ts +13 -0
  77. package/dist/core/astParser/extractors/componentExtractor.d.ts.map +1 -0
  78. package/dist/core/astParser/extractors/componentExtractor.js +41 -0
  79. package/dist/core/astParser/extractors/componentExtractor.js.map +1 -0
  80. package/dist/core/astParser/extractors/eventExtractor.d.ts +14 -0
  81. package/dist/core/astParser/extractors/eventExtractor.d.ts.map +1 -0
  82. package/dist/core/astParser/extractors/eventExtractor.js +49 -0
  83. package/dist/core/astParser/extractors/eventExtractor.js.map +1 -0
  84. package/dist/core/astParser/extractors/propExtractor.d.ts +14 -0
  85. package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -0
  86. package/dist/core/astParser/extractors/propExtractor.js +73 -0
  87. package/dist/core/astParser/extractors/propExtractor.js.map +1 -0
  88. package/dist/core/astParser/extractors/stateExtractor.d.ts +13 -0
  89. package/dist/core/astParser/extractors/stateExtractor.d.ts.map +1 -0
  90. package/dist/core/astParser/extractors/stateExtractor.js +66 -0
  91. package/dist/core/astParser/extractors/stateExtractor.js.map +1 -0
  92. package/dist/core/astParser.d.ts.map +1 -1
  93. package/dist/core/astParser.js +5 -307
  94. package/dist/core/astParser.js.map +1 -1
  95. package/dist/core/contractBuilder.d.ts +1 -0
  96. package/dist/core/contractBuilder.d.ts.map +1 -1
  97. package/dist/core/contractBuilder.js +1 -0
  98. package/dist/core/contractBuilder.js.map +1 -1
  99. package/dist/core/pack/builder.d.ts +35 -0
  100. package/dist/core/pack/builder.d.ts.map +1 -0
  101. package/dist/core/pack/builder.js +76 -0
  102. package/dist/core/pack/builder.js.map +1 -0
  103. package/dist/core/pack/collector.d.ts +20 -0
  104. package/dist/core/pack/collector.d.ts.map +1 -0
  105. package/dist/core/pack/collector.js +71 -0
  106. package/dist/core/pack/collector.js.map +1 -0
  107. package/dist/core/pack/loader.d.ts +23 -0
  108. package/dist/core/pack/loader.d.ts.map +1 -0
  109. package/dist/core/pack/loader.js +66 -0
  110. package/dist/core/pack/loader.js.map +1 -0
  111. package/dist/core/pack/resolver.d.ts +21 -0
  112. package/dist/core/pack/resolver.d.ts.map +1 -0
  113. package/dist/core/pack/resolver.js +79 -0
  114. package/dist/core/pack/resolver.js.map +1 -0
  115. package/dist/core/pack.d.ts +17 -27
  116. package/dist/core/pack.d.ts.map +1 -1
  117. package/dist/core/pack.js +18 -225
  118. package/dist/core/pack.js.map +1 -1
  119. package/dist/core/styleExtractor/index.d.ts +11 -0
  120. package/dist/core/styleExtractor/index.d.ts.map +1 -0
  121. package/dist/core/styleExtractor/index.js +11 -0
  122. package/dist/core/styleExtractor/index.js.map +1 -0
  123. package/dist/core/styleExtractor/layout.d.ts +14 -0
  124. package/dist/core/styleExtractor/layout.d.ts.map +1 -0
  125. package/dist/core/styleExtractor/layout.js +86 -0
  126. package/dist/core/styleExtractor/layout.js.map +1 -0
  127. package/dist/core/styleExtractor/motion.d.ts +20 -0
  128. package/dist/core/styleExtractor/motion.d.ts.map +1 -0
  129. package/dist/core/styleExtractor/motion.js +74 -0
  130. package/dist/core/styleExtractor/motion.js.map +1 -0
  131. package/dist/core/styleExtractor/scss.d.ts +30 -0
  132. package/dist/core/styleExtractor/scss.d.ts.map +1 -0
  133. package/dist/core/styleExtractor/scss.js +80 -0
  134. package/dist/core/styleExtractor/scss.js.map +1 -0
  135. package/dist/core/styleExtractor/styleExtractor.d.ts +11 -0
  136. package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -0
  137. package/dist/core/styleExtractor/styleExtractor.js +115 -0
  138. package/dist/core/styleExtractor/styleExtractor.js.map +1 -0
  139. package/dist/core/styleExtractor/styled.d.ts +13 -0
  140. package/dist/core/styleExtractor/styled.d.ts.map +1 -0
  141. package/dist/core/styleExtractor/styled.js +31 -0
  142. package/dist/core/styleExtractor/styled.js.map +1 -0
  143. package/dist/core/styleExtractor/tailwind.d.ts +16 -0
  144. package/dist/core/styleExtractor/tailwind.d.ts.map +1 -0
  145. package/dist/core/styleExtractor/tailwind.js +85 -0
  146. package/dist/core/styleExtractor/tailwind.js.map +1 -0
  147. package/dist/core/styleExtractor.d.ts +8 -0
  148. package/dist/core/styleExtractor.d.ts.map +1 -0
  149. package/dist/core/styleExtractor.js +8 -0
  150. package/dist/core/styleExtractor.js.map +1 -0
  151. package/dist/types/UIFContract.d.ts +71 -0
  152. package/dist/types/UIFContract.d.ts.map +1 -1
  153. package/dist/types/UIFContract.js.map +1 -1
  154. package/dist/utils/tokens.d.ts +18 -10
  155. package/dist/utils/tokens.d.ts.map +1 -1
  156. package/dist/utils/tokens.js +112 -10
  157. package/dist/utils/tokens.js.map +1 -1
  158. package/package.json +3 -1
  159. package/schema/logicstamp.context.schema.json +288 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.d.ts","sourceRoot":"","sources":["../../../src/core/styleExtractor/tailwind.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBnE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CA6BxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAY9D"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Tailwind CSS extractor - Extracts and categorizes Tailwind utility classes
3
+ */
4
+ /**
5
+ * Tailwind utility class categories for semantic grouping
6
+ */
7
+ const TAILWIND_CATEGORIES = {
8
+ layout: /^(flex|grid|block|inline|hidden|container|box-|aspect-|columns-|break-)/,
9
+ spacing: /^(p-|m-|px-|py-|mx-|my-|pt-|pb-|pl-|pr-|mt-|mb-|ml-|mr-|space-|gap-)/,
10
+ sizing: /^(w-|h-|min-w-|min-h-|max-w-|max-h-|size-)/,
11
+ typography: /^(text-|font-|leading-|tracking-|antialiased|subpixel|italic|not-italic|uppercase|lowercase|capitalize|normal-case|truncate|whitespace-)/,
12
+ colors: /^(bg-|text-|border-|ring-|outline-|shadow-|from-|via-|to-|decoration-)/,
13
+ borders: /^(border-|rounded-|ring-|divide-)/,
14
+ effects: /^(shadow-|opacity-|mix-|backdrop-|blur-|brightness-|contrast-|grayscale|hue-|invert|saturate|sepia)/,
15
+ transitions: /^(transition-|duration-|ease-|delay-|animate-)/,
16
+ transforms: /^(scale-|rotate-|translate-|skew-|origin-)/,
17
+ interactivity: /^(cursor-|select-|pointer-events-|resize-|scroll-|touch-|will-)/,
18
+ svg: /^(fill-|stroke-)/,
19
+ };
20
+ /**
21
+ * Extract Tailwind classes from className attributes in JSX
22
+ */
23
+ export function extractTailwindClasses(sourceText) {
24
+ const classNames = [];
25
+ // Match className="..." or className='...' or className={...}
26
+ const patterns = [
27
+ /className\s*=\s*"([^"]*)"/g,
28
+ /className\s*=\s*'([^']*)'/g,
29
+ /className\s*=\s*`([^`]*)`/g,
30
+ ];
31
+ for (const pattern of patterns) {
32
+ for (const match of sourceText.matchAll(pattern)) {
33
+ if (match[1]) {
34
+ // Split by whitespace and filter empty strings
35
+ const classes = match[1].split(/\s+/).filter(Boolean);
36
+ classNames.push(...classes);
37
+ }
38
+ }
39
+ }
40
+ return classNames;
41
+ }
42
+ /**
43
+ * Categorize Tailwind utility classes
44
+ */
45
+ export function categorizeTailwindClasses(classes) {
46
+ const categorized = {};
47
+ for (const className of classes) {
48
+ // Remove responsive prefixes (sm:, md:, lg:, etc.) for categorization
49
+ const baseClass = className.replace(/^(sm|md|lg|xl|2xl|max-sm|max-md|max-lg|max-xl|max-2xl|hover|focus|active|disabled|group-hover|peer-focus|dark):/, '');
50
+ let matchedCategory = false;
51
+ for (const [category, pattern] of Object.entries(TAILWIND_CATEGORIES)) {
52
+ if (pattern.test(baseClass)) {
53
+ if (!categorized[category]) {
54
+ categorized[category] = new Set();
55
+ }
56
+ categorized[category].add(className);
57
+ matchedCategory = true;
58
+ break;
59
+ }
60
+ }
61
+ // Catch-all for uncategorized utilities
62
+ if (!matchedCategory) {
63
+ if (!categorized['other']) {
64
+ categorized['other'] = new Set();
65
+ }
66
+ categorized['other'].add(className);
67
+ }
68
+ }
69
+ return categorized;
70
+ }
71
+ /**
72
+ * Extract responsive breakpoints used in the component
73
+ */
74
+ export function extractBreakpoints(classes) {
75
+ const breakpoints = new Set();
76
+ const breakpointPattern = /^(sm|md|lg|xl|2xl|max-sm|max-md|max-lg|max-xl|max-2xl):/;
77
+ for (const className of classes) {
78
+ const match = className.match(breakpointPattern);
79
+ if (match) {
80
+ breakpoints.add(match[1]);
81
+ }
82
+ }
83
+ return Array.from(breakpoints).sort();
84
+ }
85
+ //# sourceMappingURL=tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/core/styleExtractor/tailwind.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,MAAM,EAAE,yEAAyE;IACjF,OAAO,EAAE,sEAAsE;IAC/E,MAAM,EAAE,4CAA4C;IACpD,UAAU,EAAE,0IAA0I;IACtJ,MAAM,EAAE,wEAAwE;IAChF,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,qGAAqG;IAC9G,WAAW,EAAE,gDAAgD;IAC7D,UAAU,EAAE,4CAA4C;IACxD,aAAa,EAAE,iEAAiE;IAChF,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,8DAA8D;IAC9D,MAAM,QAAQ,GAAG;QACf,4BAA4B;QAC5B,4BAA4B;QAC5B,4BAA4B;KAC7B,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,+CAA+C;gBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtD,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAiB;IACzD,MAAM,WAAW,GAAgC,EAAE,CAAC;IAEpD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,sEAAsE;QACtE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,iHAAiH,EAAE,EAAE,CAAC,CAAC;QAE3J,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtE,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;gBACpC,CAAC;gBACD,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrC,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM;YACR,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACnC,CAAC;YACD,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAiB;IAClD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,iBAAiB,GAAG,yDAAyD,CAAC;IAEpF,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjD,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Style Extractor - Re-export for backward compatibility
3
+ * Main functionality has been moved to src/core/styleExtractor/ directory
4
+ *
5
+ * @deprecated Import directly from './styleExtractor/index.js' for better tree-shaking
6
+ */
7
+ export { extractStyleMetadata } from './styleExtractor/index.js';
8
+ //# sourceMappingURL=styleExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleExtractor.d.ts","sourceRoot":"","sources":["../../src/core/styleExtractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Style Extractor - Re-export for backward compatibility
3
+ * Main functionality has been moved to src/core/styleExtractor/ directory
4
+ *
5
+ * @deprecated Import directly from './styleExtractor/index.js' for better tree-shaking
6
+ */
7
+ export { extractStyleMetadata } from './styleExtractor/index.js';
8
+ //# sourceMappingURL=styleExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleExtractor.js","sourceRoot":"","sources":["../../src/core/styleExtractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -85,6 +85,76 @@ export interface NextJSMetadata {
85
85
  export type ExportMetadata = 'default' | 'named' | {
86
86
  named: string[];
87
87
  };
88
+ /**
89
+ * Style metadata extracted from component
90
+ */
91
+ export interface StyleSources {
92
+ tailwind?: {
93
+ categories: Record<string, string[]>;
94
+ breakpoints?: string[];
95
+ classCount: number;
96
+ };
97
+ scssModule?: string;
98
+ scssDetails?: {
99
+ selectors: string[];
100
+ properties: string[];
101
+ features: {
102
+ variables?: boolean;
103
+ nesting?: boolean;
104
+ mixins?: boolean;
105
+ };
106
+ };
107
+ cssModule?: string;
108
+ cssDetails?: {
109
+ selectors: string[];
110
+ properties: string[];
111
+ };
112
+ inlineStyles?: boolean;
113
+ styledComponents?: {
114
+ components?: string[];
115
+ usesTheme?: boolean;
116
+ usesCssProp?: boolean;
117
+ };
118
+ motion?: {
119
+ components?: string[];
120
+ variants?: string[];
121
+ features: {
122
+ gestures?: boolean;
123
+ layoutAnimations?: boolean;
124
+ viewportAnimations?: boolean;
125
+ };
126
+ };
127
+ }
128
+ export interface LayoutMetadata {
129
+ type?: 'flex' | 'grid' | 'relative' | 'absolute';
130
+ cols?: string;
131
+ hasHeroPattern?: boolean;
132
+ hasFeatureCards?: boolean;
133
+ sections?: string[];
134
+ }
135
+ export interface VisualMetadata {
136
+ colors?: string[];
137
+ spacing?: string[];
138
+ radius?: string;
139
+ typography?: string[];
140
+ }
141
+ export interface AnimationMetadata {
142
+ type?: string;
143
+ library?: string;
144
+ trigger?: string;
145
+ }
146
+ export interface PageLayoutMetadata {
147
+ pageRole?: string;
148
+ sections?: string[];
149
+ ctaCount?: number;
150
+ }
151
+ export interface StyleMetadata {
152
+ styleSources?: StyleSources;
153
+ layout?: LayoutMetadata;
154
+ visual?: VisualMetadata;
155
+ animation?: AnimationMetadata;
156
+ pageLayout?: PageLayoutMetadata;
157
+ }
88
158
  export interface UIFContract {
89
159
  type: 'UIFContract';
90
160
  schemaVersion: '0.3';
@@ -102,6 +172,7 @@ export interface UIFContract {
102
172
  metrics?: ContractMetrics;
103
173
  links?: ContractLinks;
104
174
  nextjs?: NextJSMetadata;
175
+ style?: StyleMetadata;
105
176
  semanticHash: string;
106
177
  fileHash: string;
107
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UIFContract.d.ts","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UIFContract.d.ts","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UIFContract.js","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA0GH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,eAAe,IAAI,GAAG;QACtB,GAAG,CAAC,aAAa,KAAK,KAAK,CAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"UIFContract.js","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkMH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,eAAe,IAAI,GAAG;QACtB,GAAG,CAAC,aAAa,KAAK,KAAK,CAC5B,CAAC;AACJ,CAAC"}
@@ -1,23 +1,31 @@
1
1
  /**
2
2
  * Token estimation utilities for GPT and Claude models
3
- * Uses character-based approximations
3
+ * Uses character-based approximations by default
4
4
  *
5
- * For production use, consider installing:
6
- * - @dqbd/tiktoken for GPT models
7
- * - @anthropic-ai/tokenizer for Claude
5
+ * For accurate token counts, optionally install:
6
+ * - @dqbd/tiktoken for GPT models (gpt-4o encoding)
7
+ * - @anthropic-ai/tokenizer for Claude (claude-3-5-sonnet-20241022 encoding)
8
8
  */
9
9
  /**
10
- * Estimate GPT-4 tokens using character-based approximation
11
- * GPT-4 typically uses ~4 characters per token for code/JSON
10
+ * Estimate GPT-4 tokens
11
+ * Uses @dqbd/tiktoken if available, otherwise falls back to character-based approximation
12
12
  */
13
- export declare function estimateGPT4Tokens(text: string): number;
13
+ export declare function estimateGPT4Tokens(text: string): Promise<number>;
14
14
  /**
15
- * Estimate Claude tokens using character-based approximation
16
- * Claude typically uses ~4.5 characters per token for code/JSON
15
+ * Estimate Claude tokens
16
+ * Uses @anthropic-ai/tokenizer if available, otherwise falls back to character-based approximation
17
17
  */
18
- export declare function estimateClaudeTokens(text: string): number;
18
+ export declare function estimateClaudeTokens(text: string): Promise<number>;
19
19
  /**
20
20
  * Format token count with commas for readability
21
21
  */
22
22
  export declare function formatTokenCount(count: number): string;
23
+ /**
24
+ * Check if tokenizers are available
25
+ * Returns status for both GPT-4 and Claude tokenizers
26
+ */
27
+ export declare function getTokenizerStatus(): Promise<{
28
+ gpt4: boolean;
29
+ claude: boolean;
30
+ }>;
23
31
  //# sourceMappingURL=tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqEH;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CActE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAItF"}
@@ -1,23 +1,116 @@
1
1
  /**
2
2
  * Token estimation utilities for GPT and Claude models
3
- * Uses character-based approximations
3
+ * Uses character-based approximations by default
4
4
  *
5
- * For production use, consider installing:
6
- * - @dqbd/tiktoken for GPT models
7
- * - @anthropic-ai/tokenizer for Claude
5
+ * For accurate token counts, optionally install:
6
+ * - @dqbd/tiktoken for GPT models (gpt-4o encoding)
7
+ * - @anthropic-ai/tokenizer for Claude (claude-3-5-sonnet-20241022 encoding)
8
8
  */
9
+ // Lazy-loaded tokenizers (only loaded if available)
10
+ let tiktokenEncoder = null;
11
+ let anthropicTokenizer = null;
12
+ let tiktokenLoaded = false;
13
+ let anthropicLoaded = false;
9
14
  /**
10
- * Estimate GPT-4 tokens using character-based approximation
11
- * GPT-4 typically uses ~4 characters per token for code/JSON
15
+ * Try to load tiktoken encoder (lazy, only once)
12
16
  */
13
- export function estimateGPT4Tokens(text) {
17
+ async function loadTiktoken() {
18
+ if (tiktokenLoaded) {
19
+ return tiktokenEncoder !== null;
20
+ }
21
+ tiktokenLoaded = true;
22
+ try {
23
+ const tiktoken = await import('@dqbd/tiktoken');
24
+ // Try encoding_for_model first (preferred API)
25
+ if (typeof tiktoken.encoding_for_model === 'function') {
26
+ tiktokenEncoder = tiktoken.encoding_for_model('gpt-4o');
27
+ return true;
28
+ }
29
+ // Fallback to get_encoding if available
30
+ if (typeof tiktoken.get_encoding === 'function') {
31
+ tiktokenEncoder = tiktoken.get_encoding('cl100k_base');
32
+ return true;
33
+ }
34
+ // If neither method exists, tokenizer not usable
35
+ return false;
36
+ }
37
+ catch (error) {
38
+ // tiktoken not installed - use fallback
39
+ return false;
40
+ }
41
+ }
42
+ /**
43
+ * Try to load Anthropic tokenizer (lazy, only once)
44
+ */
45
+ async function loadAnthropicTokenizer() {
46
+ if (anthropicLoaded) {
47
+ return anthropicTokenizer !== null;
48
+ }
49
+ anthropicLoaded = true;
50
+ try {
51
+ const tokenizer = await import('@anthropic-ai/tokenizer');
52
+ // Check if it's a default export or named export
53
+ const tokenizerModule = tokenizer.default || tokenizer;
54
+ // Try to get tokenizer for claude-3-5-sonnet-20241022 (latest stable)
55
+ if (typeof tokenizerModule === 'function') {
56
+ anthropicTokenizer = tokenizerModule;
57
+ return true;
58
+ }
59
+ // Check for countTokens method directly
60
+ if (typeof tokenizerModule.countTokens === 'function') {
61
+ anthropicTokenizer = tokenizerModule;
62
+ return true;
63
+ }
64
+ // If no usable methods, tokenizer not usable
65
+ return false;
66
+ }
67
+ catch (error) {
68
+ // tokenizer not installed - use fallback
69
+ return false;
70
+ }
71
+ }
72
+ /**
73
+ * Estimate GPT-4 tokens
74
+ * Uses @dqbd/tiktoken if available, otherwise falls back to character-based approximation
75
+ */
76
+ export async function estimateGPT4Tokens(text) {
77
+ const hasTiktoken = await loadTiktoken();
78
+ if (hasTiktoken && tiktokenEncoder) {
79
+ try {
80
+ return tiktokenEncoder.encode(text).length;
81
+ }
82
+ catch (error) {
83
+ // Fall through to character-based estimation
84
+ }
85
+ }
86
+ // Fallback: character-based approximation
87
+ // GPT-4 typically uses ~4 characters per token for code/JSON
14
88
  return Math.ceil(text.length / 4);
15
89
  }
16
90
  /**
17
- * Estimate Claude tokens using character-based approximation
18
- * Claude typically uses ~4.5 characters per token for code/JSON
91
+ * Estimate Claude tokens
92
+ * Uses @anthropic-ai/tokenizer if available, otherwise falls back to character-based approximation
19
93
  */
20
- export function estimateClaudeTokens(text) {
94
+ export async function estimateClaudeTokens(text) {
95
+ const hasTokenizer = await loadAnthropicTokenizer();
96
+ if (hasTokenizer && anthropicTokenizer) {
97
+ try {
98
+ // Try countTokens method first (most common API)
99
+ if (typeof anthropicTokenizer.countTokens === 'function') {
100
+ return anthropicTokenizer.countTokens(text);
101
+ }
102
+ // Try as a function that takes text and returns count
103
+ if (typeof anthropicTokenizer === 'function') {
104
+ const result = anthropicTokenizer(text);
105
+ return typeof result === 'number' ? result : 0;
106
+ }
107
+ }
108
+ catch (error) {
109
+ // Fall through to character-based estimation
110
+ }
111
+ }
112
+ // Fallback: character-based approximation
113
+ // Claude typically uses ~4.5 characters per token for code/JSON
21
114
  return Math.ceil(text.length / 4.5);
22
115
  }
23
116
  /**
@@ -26,4 +119,13 @@ export function estimateClaudeTokens(text) {
26
119
  export function formatTokenCount(count) {
27
120
  return count.toLocaleString();
28
121
  }
122
+ /**
123
+ * Check if tokenizers are available
124
+ * Returns status for both GPT-4 and Claude tokenizers
125
+ */
126
+ export async function getTokenizerStatus() {
127
+ const gpt4 = await loadTiktoken();
128
+ const claude = await loadAnthropicTokenizer();
129
+ return { gpt4, claude };
130
+ }
29
131
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "logicstamp-context",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Generate AI-friendly context bundles from React codebases with LogicStamp contracts",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -57,6 +57,8 @@
57
57
  "ts-morph": "^21.0.1"
58
58
  },
59
59
  "devDependencies": {
60
+ "@anthropic-ai/tokenizer": "^0.0.4",
61
+ "@dqbd/tiktoken": "^1.0.17",
60
62
  "@types/node": "^20.11.5",
61
63
  "@vitest/coverage-v8": "^4.0.8",
62
64
  "@vitest/ui": "^4.0.8",