logicstamp-context 0.8.5 → 0.8.7
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/README.md +3 -2
- package/dist/cli/commands/clean.d.ts.map +1 -1
- package/dist/cli/commands/clean.js +8 -3
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/compare/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/compare/cleanup.js.map +1 -1
- package/dist/cli/commands/compare/core.d.ts.map +1 -1
- package/dist/cli/commands/compare/core.js +47 -19
- package/dist/cli/commands/compare/core.js.map +1 -1
- package/dist/cli/commands/compare/display.d.ts.map +1 -1
- package/dist/cli/commands/compare/display.js +31 -18
- package/dist/cli/commands/compare/display.js.map +1 -1
- package/dist/cli/commands/compare/multiFile.d.ts.map +1 -1
- package/dist/cli/commands/compare/multiFile.js +8 -8
- package/dist/cli/commands/compare/multiFile.js.map +1 -1
- package/dist/cli/commands/compare/singleFile.d.ts.map +1 -1
- package/dist/cli/commands/compare/singleFile.js +19 -13
- package/dist/cli/commands/compare/singleFile.js.map +1 -1
- package/dist/cli/commands/compare/types.d.ts.map +1 -1
- package/dist/cli/commands/compare/utils.d.ts.map +1 -1
- package/dist/cli/commands/compare/utils.js +2 -2
- package/dist/cli/commands/compare/utils.js.map +1 -1
- package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -1
- package/dist/cli/commands/context/bundleFormatter.js +8 -4
- package/dist/cli/commands/context/bundleFormatter.js.map +1 -1
- package/dist/cli/commands/context/configManager.d.ts.map +1 -1
- package/dist/cli/commands/context/configManager.js +2 -2
- package/dist/cli/commands/context/configManager.js.map +1 -1
- package/dist/cli/commands/context/contractBuilder.d.ts.map +1 -1
- package/dist/cli/commands/context/contractBuilder.js +3 -1
- package/dist/cli/commands/context/contractBuilder.js.map +1 -1
- package/dist/cli/commands/context/fileWriter.d.ts.map +1 -1
- package/dist/cli/commands/context/fileWriter.js +13 -6
- package/dist/cli/commands/context/fileWriter.js.map +1 -1
- package/dist/cli/commands/context/statsCalculator.d.ts +1 -1
- package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -1
- package/dist/cli/commands/context/statsCalculator.js +22 -8
- package/dist/cli/commands/context/statsCalculator.js.map +1 -1
- package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -1
- package/dist/cli/commands/context/tokenEstimator.js +52 -25
- package/dist/cli/commands/context/tokenEstimator.js.map +1 -1
- package/dist/cli/commands/context/watchMode/incrementalWatch.d.ts.map +1 -1
- package/dist/cli/commands/context/watchMode/incrementalWatch.js +15 -13
- package/dist/cli/commands/context/watchMode/incrementalWatch.js.map +1 -1
- package/dist/cli/commands/context/watchMode/watchDiff.d.ts.map +1 -1
- package/dist/cli/commands/context/watchMode/watchDiff.js +58 -35
- package/dist/cli/commands/context/watchMode/watchDiff.js.map +1 -1
- package/dist/cli/commands/context/watchMode/watchMode.d.ts.map +1 -1
- package/dist/cli/commands/context/watchMode/watchMode.js +76 -42
- package/dist/cli/commands/context/watchMode/watchMode.js.map +1 -1
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/context.js +32 -11
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/ignore.d.ts.map +1 -1
- package/dist/cli/commands/ignore.js +5 -5
- package/dist/cli/commands/ignore.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +8 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/security.d.ts.map +1 -1
- package/dist/cli/commands/security.js +19 -10
- package/dist/cli/commands/security.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +12 -7
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/handlers/cleanHandler.d.ts.map +1 -1
- package/dist/cli/handlers/cleanHandler.js.map +1 -1
- package/dist/cli/handlers/compareHandler.d.ts.map +1 -1
- package/dist/cli/handlers/compareHandler.js +76 -25
- package/dist/cli/handlers/compareHandler.js.map +1 -1
- package/dist/cli/handlers/contextHandler.d.ts.map +1 -1
- package/dist/cli/handlers/contextHandler.js +1 -1
- package/dist/cli/handlers/contextHandler.js.map +1 -1
- package/dist/cli/handlers/ignoreHandler.d.ts.map +1 -1
- package/dist/cli/handlers/ignoreHandler.js.map +1 -1
- package/dist/cli/handlers/securityHandler.d.ts.map +1 -1
- package/dist/cli/handlers/securityHandler.js +1 -1
- package/dist/cli/handlers/securityHandler.js.map +1 -1
- package/dist/cli/handlers/styleHandler.d.ts.map +1 -1
- package/dist/cli/handlers/styleHandler.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parser/argumentParser.d.ts.map +1 -1
- package/dist/cli/parser/argumentParser.js +2 -4
- package/dist/cli/parser/argumentParser.js.map +1 -1
- package/dist/cli/stamp.js +4 -2
- package/dist/cli/stamp.js.map +1 -1
- package/dist/core/astParser/detectors.d.ts +1 -1
- package/dist/core/astParser/detectors.d.ts.map +1 -1
- package/dist/core/astParser/detectors.js +48 -32
- package/dist/core/astParser/detectors.js.map +1 -1
- package/dist/core/astParser.d.ts.map +1 -1
- package/dist/core/astParser.js +10 -7
- package/dist/core/astParser.js.map +1 -1
- package/dist/core/contractBuilder.d.ts.map +1 -1
- package/dist/core/contractBuilder.js +10 -6
- package/dist/core/contractBuilder.js.map +1 -1
- package/dist/core/manifest.d.ts.map +1 -1
- package/dist/core/manifest.js +12 -5
- package/dist/core/manifest.js.map +1 -1
- package/dist/core/pack/builder.d.ts.map +1 -1
- package/dist/core/pack/builder.js +4 -2
- package/dist/core/pack/builder.js.map +1 -1
- package/dist/core/pack/collector.d.ts.map +1 -1
- package/dist/core/pack/collector.js +4 -2
- package/dist/core/pack/collector.js.map +1 -1
- package/dist/core/pack/loader.d.ts.map +1 -1
- package/dist/core/pack/loader.js +12 -6
- package/dist/core/pack/loader.js.map +1 -1
- package/dist/core/pack/packageInfo.d.ts +18 -1
- package/dist/core/pack/packageInfo.d.ts.map +1 -1
- package/dist/core/pack/packageInfo.js +57 -62
- package/dist/core/pack/packageInfo.js.map +1 -1
- package/dist/core/pack/resolver.d.ts.map +1 -1
- package/dist/core/pack/resolver.js +8 -3
- package/dist/core/pack/resolver.js.map +1 -1
- package/dist/core/pack.d.ts.map +1 -1
- package/dist/core/pack.js +8 -5
- package/dist/core/pack.js.map +1 -1
- package/dist/core/signature.d.ts.map +1 -1
- package/dist/core/signature.js +35 -13
- package/dist/core/signature.js.map +1 -1
- package/dist/core/violations.d.ts.map +1 -1
- package/dist/core/violations.js +41 -20
- package/dist/core/violations.js.map +1 -1
- package/dist/extractors/express/expressExtractor.d.ts +1 -1
- package/dist/extractors/express/expressExtractor.d.ts.map +1 -1
- package/dist/extractors/express/expressExtractor.js +5 -4
- package/dist/extractors/express/expressExtractor.js.map +1 -1
- package/dist/extractors/express/index.d.ts +1 -1
- package/dist/extractors/express/index.d.ts.map +1 -1
- package/dist/extractors/express/index.js +1 -1
- package/dist/extractors/express/index.js.map +1 -1
- package/dist/extractors/nest/nestjsExtractor.d.ts +1 -1
- package/dist/extractors/nest/nestjsExtractor.d.ts.map +1 -1
- package/dist/extractors/nest/nestjsExtractor.js +5 -3
- package/dist/extractors/nest/nestjsExtractor.js.map +1 -1
- package/dist/extractors/react/componentExtractor.d.ts +1 -1
- package/dist/extractors/react/componentExtractor.d.ts.map +1 -1
- package/dist/extractors/react/componentExtractor.js +9 -3
- package/dist/extractors/react/componentExtractor.js.map +1 -1
- package/dist/extractors/react/eventExtractor.d.ts +1 -1
- package/dist/extractors/react/eventExtractor.d.ts.map +1 -1
- package/dist/extractors/react/eventExtractor.js +11 -6
- package/dist/extractors/react/eventExtractor.js.map +1 -1
- package/dist/extractors/react/hookParameterExtractor.d.ts +1 -1
- package/dist/extractors/react/hookParameterExtractor.d.ts.map +1 -1
- package/dist/extractors/react/hookParameterExtractor.js +13 -9
- package/dist/extractors/react/hookParameterExtractor.js.map +1 -1
- package/dist/extractors/react/index.d.ts +1 -1
- package/dist/extractors/react/index.d.ts.map +1 -1
- package/dist/extractors/react/index.js +1 -1
- package/dist/extractors/react/index.js.map +1 -1
- package/dist/extractors/react/propExtractor.d.ts +1 -1
- package/dist/extractors/react/propExtractor.d.ts.map +1 -1
- package/dist/extractors/react/propExtractor.js +17 -8
- package/dist/extractors/react/propExtractor.js.map +1 -1
- package/dist/extractors/react/stateExtractor.d.ts +1 -1
- package/dist/extractors/react/stateExtractor.d.ts.map +1 -1
- package/dist/extractors/react/stateExtractor.js +7 -3
- package/dist/extractors/react/stateExtractor.js.map +1 -1
- package/dist/extractors/shared/backendExtractor.d.ts +1 -1
- package/dist/extractors/shared/backendExtractor.d.ts.map +1 -1
- package/dist/extractors/shared/backendExtractor.js +7 -5
- package/dist/extractors/shared/backendExtractor.js.map +1 -1
- package/dist/extractors/shared/index.d.ts +1 -1
- package/dist/extractors/shared/index.d.ts.map +1 -1
- package/dist/extractors/shared/index.js +1 -1
- package/dist/extractors/shared/index.js.map +1 -1
- package/dist/extractors/shared/propTypeNormalizer.d.ts.map +1 -1
- package/dist/extractors/shared/propTypeNormalizer.js +4 -4
- package/dist/extractors/shared/propTypeNormalizer.js.map +1 -1
- package/dist/extractors/styling/antd.d.ts +1 -1
- package/dist/extractors/styling/antd.d.ts.map +1 -1
- package/dist/extractors/styling/antd.js +119 -45
- package/dist/extractors/styling/antd.js.map +1 -1
- package/dist/extractors/styling/chakra.d.ts +1 -1
- package/dist/extractors/styling/chakra.d.ts.map +1 -1
- package/dist/extractors/styling/chakra.js +144 -37
- package/dist/extractors/styling/chakra.js.map +1 -1
- package/dist/extractors/styling/index.d.ts +1 -1
- package/dist/extractors/styling/index.d.ts.map +1 -1
- package/dist/extractors/styling/index.js +1 -1
- package/dist/extractors/styling/index.js.map +1 -1
- package/dist/extractors/styling/layout.d.ts +1 -1
- package/dist/extractors/styling/layout.d.ts.map +1 -1
- package/dist/extractors/styling/layout.js +27 -19
- package/dist/extractors/styling/layout.js.map +1 -1
- package/dist/extractors/styling/material.d.ts +1 -1
- package/dist/extractors/styling/material.d.ts.map +1 -1
- package/dist/extractors/styling/material.js +129 -38
- package/dist/extractors/styling/material.js.map +1 -1
- package/dist/extractors/styling/motion.d.ts +1 -1
- package/dist/extractors/styling/motion.d.ts.map +1 -1
- package/dist/extractors/styling/motion.js +47 -19
- package/dist/extractors/styling/motion.js.map +1 -1
- package/dist/extractors/styling/radix.d.ts +1 -1
- package/dist/extractors/styling/radix.d.ts.map +1 -1
- package/dist/extractors/styling/radix.js +163 -23
- package/dist/extractors/styling/radix.js.map +1 -1
- package/dist/extractors/styling/scss.d.ts +1 -1
- package/dist/extractors/styling/scss.d.ts.map +1 -1
- package/dist/extractors/styling/scss.js +141 -23
- package/dist/extractors/styling/scss.js.map +1 -1
- package/dist/extractors/styling/shadcn.d.ts +1 -1
- package/dist/extractors/styling/shadcn.d.ts.map +1 -1
- package/dist/extractors/styling/shadcn.js +173 -58
- package/dist/extractors/styling/shadcn.js.map +1 -1
- package/dist/extractors/styling/styleExtractor.d.ts +1 -1
- package/dist/extractors/styling/styleExtractor.d.ts.map +1 -1
- package/dist/extractors/styling/styleExtractor.js +78 -38
- package/dist/extractors/styling/styleExtractor.js.map +1 -1
- package/dist/extractors/styling/styled.d.ts +1 -1
- package/dist/extractors/styling/styled.d.ts.map +1 -1
- package/dist/extractors/styling/styled.js +9 -5
- package/dist/extractors/styling/styled.js.map +1 -1
- package/dist/extractors/styling/styledJsx.d.ts +1 -1
- package/dist/extractors/styling/styledJsx.d.ts.map +1 -1
- package/dist/extractors/styling/styledJsx.js +8 -6
- package/dist/extractors/styling/styledJsx.js.map +1 -1
- package/dist/extractors/styling/tailwind.d.ts +1 -1
- package/dist/extractors/styling/tailwind.d.ts.map +1 -1
- package/dist/extractors/styling/tailwind.js +22 -17
- package/dist/extractors/styling/tailwind.js.map +1 -1
- package/dist/extractors/vue/componentExtractor.d.ts +1 -1
- package/dist/extractors/vue/componentExtractor.d.ts.map +1 -1
- package/dist/extractors/vue/componentExtractor.js +97 -35
- package/dist/extractors/vue/componentExtractor.js.map +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/types/UIFContract.d.ts.map +1 -1
- package/dist/types/UIFContract.js.map +1 -1
- package/dist/utils/cleanup.js +2 -2
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/codeSanitizer.d.ts.map +1 -1
- package/dist/utils/codeSanitizer.js +13 -7
- package/dist/utils/codeSanitizer.js.map +1 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +4 -4
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/fileLock.d.ts.map +1 -1
- package/dist/utils/fileLock.js +3 -3
- package/dist/utils/fileLock.js.map +1 -1
- package/dist/utils/fsx.d.ts.map +1 -1
- package/dist/utils/fsx.js +4 -4
- package/dist/utils/fsx.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +11 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +11 -9
- package/dist/utils/gitignore.js.map +1 -1
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js +18 -6
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/llmContext.d.ts.map +1 -1
- package/dist/utils/llmContext.js +1 -4
- package/dist/utils/llmContext.js.map +1 -1
- package/dist/utils/schemaValidator.d.ts.map +1 -1
- package/dist/utils/schemaValidator.js +10 -3
- package/dist/utils/schemaValidator.js.map +1 -1
- package/dist/utils/secretDetector.d.ts.map +1 -1
- package/dist/utils/secretDetector.js +13 -9
- package/dist/utils/secretDetector.js.map +1 -1
- package/dist/utils/stampignore.d.ts.map +1 -1
- package/dist/utils/stampignore.js +4 -4
- package/dist/utils/stampignore.js.map +1 -1
- package/dist/utils/tokens.d.ts +28 -26
- package/dist/utils/tokens.d.ts.map +1 -1
- package/dist/utils/tokens.js +97 -115
- package/dist/utils/tokens.js.map +1 -1
- package/package.json +11 -4
package/dist/utils/tokens.js
CHANGED
|
@@ -2,143 +2,125 @@
|
|
|
2
2
|
* Token estimation utilities for GPT and Claude models
|
|
3
3
|
* Uses character-based approximations by default
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* Optional tokenizers (package.json optionalDependencies; npm tries to install them):
|
|
6
|
+
* - @dqbd/tiktoken — GPT-4o encoding; counts align with that tiktoken model when load succeeds.
|
|
7
|
+
* - @anthropic-ai/tokenizer — Anthropic documents this as intended for older models; for Claude 3+
|
|
8
|
+
* it is only a rough approximation vs API tokenization. Prefer `usage` in API responses for billing.
|
|
9
|
+
* If installation fails or is skipped, falls back to character-based estimation (~4 chars/token GPT,
|
|
10
|
+
* ~4.5 Claude).
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// Use clearTokenizerCache() to free memory if needed in long-running processes
|
|
15
|
-
let tiktokenEncoder = null;
|
|
16
|
-
let anthropicTokenizer = null;
|
|
17
|
-
let tiktokenLoaded = false;
|
|
18
|
-
let anthropicLoaded = false;
|
|
19
|
-
/**
|
|
20
|
-
* Clear tokenizer caches to free memory
|
|
21
|
-
* Note: Tokenizers will be reloaded on next use (expensive operation)
|
|
22
|
-
* Only call this in long-running processes that need to minimize memory
|
|
23
|
-
*/
|
|
24
|
-
export function clearTokenizerCache() {
|
|
25
|
-
// Free the encoder if it has a free() method (tiktoken does)
|
|
26
|
-
if (tiktokenEncoder && typeof tiktokenEncoder.free === 'function') {
|
|
27
|
-
try {
|
|
28
|
-
tiktokenEncoder.free();
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// Ignore errors during cleanup
|
|
32
|
-
}
|
|
33
|
-
}
|
|
12
|
+
/** Mutable tokenizer state lives on this class instead of module-level lets. */
|
|
13
|
+
export class TokenizerRuntime {
|
|
34
14
|
tiktokenEncoder = null;
|
|
35
15
|
anthropicTokenizer = null;
|
|
36
16
|
tiktokenLoaded = false;
|
|
37
17
|
anthropicLoaded = false;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Free tokenizer memory. Tokenizers reload on next use (expensive).
|
|
20
|
+
* Use in long-running processes when you need to minimize memory.
|
|
21
|
+
*/
|
|
22
|
+
clear() {
|
|
23
|
+
const enc = this.tiktokenEncoder;
|
|
24
|
+
if (enc && typeof enc.free === 'function') {
|
|
25
|
+
try {
|
|
26
|
+
enc.free();
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Ignore errors during cleanup
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
this.tiktokenEncoder = null;
|
|
33
|
+
this.anthropicTokenizer = null;
|
|
34
|
+
this.tiktokenLoaded = false;
|
|
35
|
+
this.anthropicLoaded = false;
|
|
45
36
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// Try encoding_for_model first (preferred API)
|
|
50
|
-
if (typeof tiktoken.encoding_for_model === 'function') {
|
|
51
|
-
tiktokenEncoder = tiktoken.encoding_for_model('gpt-4o');
|
|
52
|
-
return true;
|
|
37
|
+
async loadTiktoken() {
|
|
38
|
+
if (this.tiktokenLoaded) {
|
|
39
|
+
return this.tiktokenEncoder !== null;
|
|
53
40
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
this.tiktokenLoaded = true;
|
|
42
|
+
try {
|
|
43
|
+
const tiktoken = await import('@dqbd/tiktoken');
|
|
44
|
+
if (typeof tiktoken.encoding_for_model === 'function') {
|
|
45
|
+
this.tiktokenEncoder = tiktoken.encoding_for_model('gpt-4o');
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (typeof tiktoken.get_encoding === 'function') {
|
|
49
|
+
this.tiktokenEncoder = tiktoken.get_encoding('cl100k_base');
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
58
53
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
// tiktoken not installed - use fallback
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Try to load Anthropic tokenizer (lazy, only once)
|
|
69
|
-
*/
|
|
70
|
-
async function loadAnthropicTokenizer() {
|
|
71
|
-
if (anthropicLoaded) {
|
|
72
|
-
return anthropicTokenizer !== null;
|
|
73
|
-
}
|
|
74
|
-
anthropicLoaded = true;
|
|
75
|
-
try {
|
|
76
|
-
const tokenizer = await import('@anthropic-ai/tokenizer');
|
|
77
|
-
// @anthropic-ai/tokenizer exports countTokens as a named export
|
|
78
|
-
if (typeof tokenizer.countTokens === 'function') {
|
|
79
|
-
anthropicTokenizer = tokenizer;
|
|
80
|
-
return true;
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
81
56
|
}
|
|
82
|
-
// If countTokens not available, tokenizer not usable
|
|
83
|
-
return false;
|
|
84
57
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Estimate GPT-4 tokens
|
|
92
|
-
* Uses @dqbd/tiktoken if available, otherwise falls back to character-based approximation
|
|
93
|
-
*/
|
|
94
|
-
export async function estimateGPT4Tokens(text) {
|
|
95
|
-
const hasTiktoken = await loadTiktoken();
|
|
96
|
-
if (hasTiktoken && tiktokenEncoder) {
|
|
58
|
+
async loadAnthropicTokenizer() {
|
|
59
|
+
if (this.anthropicLoaded) {
|
|
60
|
+
return this.anthropicTokenizer !== null;
|
|
61
|
+
}
|
|
62
|
+
this.anthropicLoaded = true;
|
|
97
63
|
try {
|
|
98
|
-
|
|
64
|
+
const tokenizer = await import('@anthropic-ai/tokenizer');
|
|
65
|
+
if (typeof tokenizer.countTokens === 'function') {
|
|
66
|
+
this.anthropicTokenizer = tokenizer;
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
99
70
|
}
|
|
100
|
-
catch
|
|
101
|
-
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
102
73
|
}
|
|
103
74
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const hasTokenizer = await loadAnthropicTokenizer();
|
|
114
|
-
if (hasTokenizer && anthropicTokenizer) {
|
|
115
|
-
try {
|
|
116
|
-
// @anthropic-ai/tokenizer exports countTokens as a named export
|
|
117
|
-
if (typeof anthropicTokenizer.countTokens === 'function') {
|
|
118
|
-
return anthropicTokenizer.countTokens(text);
|
|
75
|
+
async estimateGPT4Tokens(text) {
|
|
76
|
+
const hasTiktoken = await this.loadTiktoken();
|
|
77
|
+
const encoder = this.tiktokenEncoder;
|
|
78
|
+
if (hasTiktoken && encoder && typeof encoder.encode === 'function') {
|
|
79
|
+
try {
|
|
80
|
+
return encoder.encode(text).length;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Fall through to character-based estimation
|
|
119
84
|
}
|
|
120
85
|
}
|
|
121
|
-
|
|
122
|
-
|
|
86
|
+
return Math.ceil(text.length / 4);
|
|
87
|
+
}
|
|
88
|
+
async estimateClaudeTokens(text) {
|
|
89
|
+
const hasTokenizer = await this.loadAnthropicTokenizer();
|
|
90
|
+
if (hasTokenizer && this.anthropicTokenizer?.countTokens) {
|
|
91
|
+
try {
|
|
92
|
+
return this.anthropicTokenizer.countTokens(text);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Fall through to character-based estimation
|
|
96
|
+
}
|
|
123
97
|
}
|
|
98
|
+
return Math.ceil(text.length / 4.5);
|
|
99
|
+
}
|
|
100
|
+
async getTokenizerStatus() {
|
|
101
|
+
const gpt4 = await this.loadTiktoken();
|
|
102
|
+
const claude = await this.loadAnthropicTokenizer();
|
|
103
|
+
return { gpt4, claude };
|
|
124
104
|
}
|
|
125
|
-
// Fallback: character-based approximation
|
|
126
|
-
// Claude typically uses ~4.5 characters per token for code/JSON
|
|
127
|
-
return Math.ceil(text.length / 4.5);
|
|
128
105
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
106
|
+
const defaultTokenizerRuntime = new TokenizerRuntime();
|
|
107
|
+
/** @internal For tests or alternate lifetimes; CLI uses {@link defaultTokenizerRuntime}. */
|
|
108
|
+
export function createTokenizerRuntime() {
|
|
109
|
+
return new TokenizerRuntime();
|
|
110
|
+
}
|
|
111
|
+
export function clearTokenizerCache() {
|
|
112
|
+
defaultTokenizerRuntime.clear();
|
|
113
|
+
}
|
|
114
|
+
export async function estimateGPT4Tokens(text) {
|
|
115
|
+
return defaultTokenizerRuntime.estimateGPT4Tokens(text);
|
|
116
|
+
}
|
|
117
|
+
export async function estimateClaudeTokens(text) {
|
|
118
|
+
return defaultTokenizerRuntime.estimateClaudeTokens(text);
|
|
119
|
+
}
|
|
132
120
|
export function formatTokenCount(count) {
|
|
133
121
|
return count.toLocaleString();
|
|
134
122
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Check if tokenizers are available
|
|
137
|
-
* Returns status for both GPT-4 and Claude tokenizers
|
|
138
|
-
*/
|
|
139
123
|
export async function getTokenizerStatus() {
|
|
140
|
-
|
|
141
|
-
const claude = await loadAnthropicTokenizer();
|
|
142
|
-
return { gpt4, claude };
|
|
124
|
+
return defaultTokenizerRuntime.getTokenizerStatus();
|
|
143
125
|
}
|
|
144
126
|
//# 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;;;;;;;;;;GAUG;AAEH,
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "logicstamp-context",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.7",
|
|
4
4
|
"description": "The context compiler for TypeScript. Compile your codebase into deterministic architectural contracts and dependency graphs for AI coding workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
|
-
".":
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
10
13
|
},
|
|
11
14
|
"bin": {
|
|
12
|
-
"logicstamp-context": "dist/cli/stamp.js",
|
|
13
|
-
"stamp": "dist/cli/stamp.js"
|
|
15
|
+
"logicstamp-context": "./dist/cli/stamp.js",
|
|
16
|
+
"stamp": "./dist/cli/stamp.js"
|
|
14
17
|
},
|
|
15
18
|
"files": [
|
|
16
19
|
"dist",
|
|
@@ -21,6 +24,9 @@
|
|
|
21
24
|
],
|
|
22
25
|
"scripts": {
|
|
23
26
|
"build": "tsc",
|
|
27
|
+
"lint": "biome lint src tests vitest.config.ts",
|
|
28
|
+
"lint:fix": "biome lint --write src tests vitest.config.ts",
|
|
29
|
+
"format": "biome format --write src tests biome.json package.json tsconfig.json vitest.config.ts",
|
|
24
30
|
"prepublishOnly": "npm run build",
|
|
25
31
|
"test": "vitest run",
|
|
26
32
|
"test:watch": "vitest",
|
|
@@ -73,6 +79,7 @@
|
|
|
73
79
|
"@dqbd/tiktoken": "^1.0.17"
|
|
74
80
|
},
|
|
75
81
|
"devDependencies": {
|
|
82
|
+
"@biomejs/biome": "^2.4.11",
|
|
76
83
|
"@types/node": "^20.19.27",
|
|
77
84
|
"@vitest/coverage-v8": "^4.0.16",
|
|
78
85
|
"@vitest/ui": "^4.0.16",
|