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.
- package/LLM_CONTEXT.md +4 -3
- package/README.md +116 -19
- package/dist/cli/commands/compare.d.ts.map +1 -1
- package/dist/cli/commands/compare.js +17 -8
- package/dist/cli/commands/compare.js.map +1 -1
- package/dist/cli/commands/context/bundleFormatter.d.ts +20 -0
- package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -0
- package/dist/cli/commands/context/bundleFormatter.js +55 -0
- package/dist/cli/commands/context/bundleFormatter.js.map +1 -0
- package/dist/cli/commands/context/configManager.d.ts +23 -0
- package/dist/cli/commands/context/configManager.d.ts.map +1 -0
- package/dist/cli/commands/context/configManager.js +69 -0
- package/dist/cli/commands/context/configManager.js.map +1 -0
- package/dist/cli/commands/context/contractBuilder.d.ts +18 -0
- package/dist/cli/commands/context/contractBuilder.d.ts.map +1 -0
- package/dist/cli/commands/context/contractBuilder.js +72 -0
- package/dist/cli/commands/context/contractBuilder.js.map +1 -0
- package/dist/cli/commands/context/fileWriter.d.ts +38 -0
- package/dist/cli/commands/context/fileWriter.d.ts.map +1 -0
- package/dist/cli/commands/context/fileWriter.js +165 -0
- package/dist/cli/commands/context/fileWriter.js.map +1 -0
- package/dist/cli/commands/context/statsCalculator.d.ts +44 -0
- package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -0
- package/dist/cli/commands/context/statsCalculator.js +150 -0
- package/dist/cli/commands/context/statsCalculator.js.map +1 -0
- package/dist/cli/commands/context/tokenEstimator.d.ts +76 -0
- package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -0
- package/dist/cli/commands/context/tokenEstimator.js +258 -0
- package/dist/cli/commands/context/tokenEstimator.js.map +1 -0
- package/dist/cli/commands/context.d.ts +1 -0
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/context.js +72 -399
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/style.d.ts +11 -0
- package/dist/cli/commands/style.d.ts.map +1 -0
- package/dist/cli/commands/style.js +15 -0
- package/dist/cli/commands/style.js.map +1 -0
- package/dist/cli/handlers/cleanHandler.d.ts +5 -0
- package/dist/cli/handlers/cleanHandler.d.ts.map +1 -0
- package/dist/cli/handlers/cleanHandler.js +28 -0
- package/dist/cli/handlers/cleanHandler.js.map +1 -0
- package/dist/cli/handlers/compareHandler.d.ts +5 -0
- package/dist/cli/handlers/compareHandler.d.ts.map +1 -0
- package/dist/cli/handlers/compareHandler.js +332 -0
- package/dist/cli/handlers/compareHandler.js.map +1 -0
- package/dist/cli/handlers/contextHandler.d.ts +5 -0
- package/dist/cli/handlers/contextHandler.d.ts.map +1 -0
- package/dist/cli/handlers/contextHandler.js +24 -0
- package/dist/cli/handlers/contextHandler.js.map +1 -0
- package/dist/cli/handlers/initHandler.d.ts +6 -0
- package/dist/cli/handlers/initHandler.d.ts.map +1 -0
- package/dist/cli/handlers/initHandler.js +30 -0
- package/dist/cli/handlers/initHandler.js.map +1 -0
- package/dist/cli/handlers/styleHandler.d.ts +5 -0
- package/dist/cli/handlers/styleHandler.d.ts.map +1 -0
- package/dist/cli/handlers/styleHandler.js +30 -0
- package/dist/cli/handlers/styleHandler.js.map +1 -0
- package/dist/cli/handlers/validateHandler.d.ts +5 -0
- package/dist/cli/handlers/validateHandler.d.ts.map +1 -0
- package/dist/cli/handlers/validateHandler.js +23 -0
- package/dist/cli/handlers/validateHandler.js.map +1 -0
- package/dist/cli/parser/argumentParser.d.ts +44 -0
- package/dist/cli/parser/argumentParser.d.ts.map +1 -0
- package/dist/cli/parser/argumentParser.js +194 -0
- package/dist/cli/parser/argumentParser.js.map +1 -0
- package/dist/cli/parser/helpText.d.ts +11 -0
- package/dist/cli/parser/helpText.d.ts.map +1 -0
- package/dist/cli/parser/helpText.js +373 -0
- package/dist/cli/parser/helpText.js.map +1 -0
- package/dist/cli/stamp.js +14 -821
- package/dist/cli/stamp.js.map +1 -1
- package/dist/core/astParser/detectors.d.ts +24 -0
- package/dist/core/astParser/detectors.d.ts.map +1 -0
- package/dist/core/astParser/detectors.js +102 -0
- package/dist/core/astParser/detectors.js.map +1 -0
- package/dist/core/astParser/extractors/componentExtractor.d.ts +13 -0
- package/dist/core/astParser/extractors/componentExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/componentExtractor.js +41 -0
- package/dist/core/astParser/extractors/componentExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/eventExtractor.d.ts +14 -0
- package/dist/core/astParser/extractors/eventExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/eventExtractor.js +49 -0
- package/dist/core/astParser/extractors/eventExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/propExtractor.d.ts +14 -0
- package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/propExtractor.js +73 -0
- package/dist/core/astParser/extractors/propExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/stateExtractor.d.ts +13 -0
- package/dist/core/astParser/extractors/stateExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/stateExtractor.js +66 -0
- package/dist/core/astParser/extractors/stateExtractor.js.map +1 -0
- package/dist/core/astParser.d.ts.map +1 -1
- package/dist/core/astParser.js +5 -307
- package/dist/core/astParser.js.map +1 -1
- package/dist/core/contractBuilder.d.ts +1 -0
- package/dist/core/contractBuilder.d.ts.map +1 -1
- package/dist/core/contractBuilder.js +1 -0
- package/dist/core/contractBuilder.js.map +1 -1
- package/dist/core/pack/builder.d.ts +35 -0
- package/dist/core/pack/builder.d.ts.map +1 -0
- package/dist/core/pack/builder.js +76 -0
- package/dist/core/pack/builder.js.map +1 -0
- package/dist/core/pack/collector.d.ts +20 -0
- package/dist/core/pack/collector.d.ts.map +1 -0
- package/dist/core/pack/collector.js +71 -0
- package/dist/core/pack/collector.js.map +1 -0
- package/dist/core/pack/loader.d.ts +23 -0
- package/dist/core/pack/loader.d.ts.map +1 -0
- package/dist/core/pack/loader.js +66 -0
- package/dist/core/pack/loader.js.map +1 -0
- package/dist/core/pack/resolver.d.ts +21 -0
- package/dist/core/pack/resolver.d.ts.map +1 -0
- package/dist/core/pack/resolver.js +79 -0
- package/dist/core/pack/resolver.js.map +1 -0
- package/dist/core/pack.d.ts +17 -27
- package/dist/core/pack.d.ts.map +1 -1
- package/dist/core/pack.js +18 -225
- package/dist/core/pack.js.map +1 -1
- package/dist/core/styleExtractor/index.d.ts +11 -0
- package/dist/core/styleExtractor/index.d.ts.map +1 -0
- package/dist/core/styleExtractor/index.js +11 -0
- package/dist/core/styleExtractor/index.js.map +1 -0
- package/dist/core/styleExtractor/layout.d.ts +14 -0
- package/dist/core/styleExtractor/layout.d.ts.map +1 -0
- package/dist/core/styleExtractor/layout.js +86 -0
- package/dist/core/styleExtractor/layout.js.map +1 -0
- package/dist/core/styleExtractor/motion.d.ts +20 -0
- package/dist/core/styleExtractor/motion.d.ts.map +1 -0
- package/dist/core/styleExtractor/motion.js +74 -0
- package/dist/core/styleExtractor/motion.js.map +1 -0
- package/dist/core/styleExtractor/scss.d.ts +30 -0
- package/dist/core/styleExtractor/scss.d.ts.map +1 -0
- package/dist/core/styleExtractor/scss.js +80 -0
- package/dist/core/styleExtractor/scss.js.map +1 -0
- package/dist/core/styleExtractor/styleExtractor.d.ts +11 -0
- package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -0
- package/dist/core/styleExtractor/styleExtractor.js +115 -0
- package/dist/core/styleExtractor/styleExtractor.js.map +1 -0
- package/dist/core/styleExtractor/styled.d.ts +13 -0
- package/dist/core/styleExtractor/styled.d.ts.map +1 -0
- package/dist/core/styleExtractor/styled.js +31 -0
- package/dist/core/styleExtractor/styled.js.map +1 -0
- package/dist/core/styleExtractor/tailwind.d.ts +16 -0
- package/dist/core/styleExtractor/tailwind.d.ts.map +1 -0
- package/dist/core/styleExtractor/tailwind.js +85 -0
- package/dist/core/styleExtractor/tailwind.js.map +1 -0
- package/dist/core/styleExtractor.d.ts +8 -0
- package/dist/core/styleExtractor.d.ts.map +1 -0
- package/dist/core/styleExtractor.js +8 -0
- package/dist/core/styleExtractor.js.map +1 -0
- package/dist/types/UIFContract.d.ts +71 -0
- package/dist/types/UIFContract.d.ts.map +1 -1
- package/dist/types/UIFContract.js.map +1 -1
- package/dist/utils/tokens.d.ts +18 -10
- package/dist/utils/tokens.d.ts.map +1 -1
- package/dist/utils/tokens.js +112 -10
- package/dist/utils/tokens.js.map +1 -1
- package/package.json +3 -1
- 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":"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"}
|
|
@@ -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;
|
|
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"}
|
package/dist/utils/tokens.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
11
|
-
*
|
|
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
|
|
16
|
-
*
|
|
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;
|
|
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"}
|
package/dist/utils/tokens.js
CHANGED
|
@@ -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
|
|
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
|
-
*
|
|
11
|
-
* GPT-4 typically uses ~4 characters per token for code/JSON
|
|
15
|
+
* Try to load tiktoken encoder (lazy, only once)
|
|
12
16
|
*/
|
|
13
|
-
|
|
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
|
|
18
|
-
*
|
|
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
|
package/dist/utils/tokens.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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",
|