@aiready/core 0.23.4 → 0.23.6

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 (109) hide show
  1. package/dist/{chunk-NGHT7JOG.mjs → chunk-Q55AMEFV.mjs} +63 -0
  2. package/dist/{client-D-cn9ydj.d.mts → client-CKcjnPXt.d.mts} +79 -1
  3. package/dist/{client-D-cn9ydj.d.ts → client-CKcjnPXt.d.ts} +79 -1
  4. package/dist/client.d.mts +1 -1
  5. package/dist/client.d.ts +1 -1
  6. package/dist/client.js +66 -0
  7. package/dist/client.mjs +9 -1
  8. package/dist/index.d.mts +10 -2
  9. package/dist/index.d.ts +10 -2
  10. package/dist/index.js +159 -21
  11. package/dist/index.mjs +102 -22
  12. package/package.json +1 -1
  13. package/dist/__tests__/parser-factory.test.d.ts +0 -5
  14. package/dist/__tests__/parser-factory.test.d.ts.map +0 -1
  15. package/dist/__tests__/parser-factory.test.js +0 -70
  16. package/dist/__tests__/parser-factory.test.js.map +0 -1
  17. package/dist/__tests__/python-parser.test.d.ts +0 -5
  18. package/dist/__tests__/python-parser.test.d.ts.map +0 -1
  19. package/dist/__tests__/python-parser.test.js +0 -194
  20. package/dist/__tests__/python-parser.test.js.map +0 -1
  21. package/dist/__tests__/scoring.test.d.ts +0 -2
  22. package/dist/__tests__/scoring.test.d.ts.map +0 -1
  23. package/dist/__tests__/scoring.test.js +0 -197
  24. package/dist/__tests__/scoring.test.js.map +0 -1
  25. package/dist/chunk-3YI4IS3D.mjs +0 -601
  26. package/dist/chunk-5HIXDC3X.mjs +0 -716
  27. package/dist/chunk-5V3L53AE.mjs +0 -805
  28. package/dist/chunk-CKVKHN3G.mjs +0 -660
  29. package/dist/chunk-COHIBX3Q.mjs +0 -635
  30. package/dist/chunk-CWRCDSKZ.mjs +0 -417
  31. package/dist/chunk-D3D3NCRR.mjs +0 -556
  32. package/dist/chunk-HCFYP7UD.mjs +0 -805
  33. package/dist/chunk-HFLFBA6F.mjs +0 -417
  34. package/dist/chunk-HKSARRCD.mjs +0 -365
  35. package/dist/chunk-JJ5JL5FX.mjs +0 -417
  36. package/dist/chunk-KDSTXVLQ.mjs +0 -724
  37. package/dist/chunk-KI7XORTN.mjs +0 -417
  38. package/dist/chunk-LTMHFNFK.mjs +0 -690
  39. package/dist/chunk-LTNXTXRI.mjs +0 -659
  40. package/dist/chunk-M22BXHBR.mjs +0 -805
  41. package/dist/chunk-MH3A3LX6.mjs +0 -615
  42. package/dist/chunk-OQ6IGDXG.mjs +0 -553
  43. package/dist/chunk-QAFB3HXQ.mjs +0 -590
  44. package/dist/chunk-QQBKXHLU.mjs +0 -678
  45. package/dist/chunk-RDHYGES7.mjs +0 -678
  46. package/dist/chunk-SWTDBVYJ.mjs +0 -660
  47. package/dist/chunk-UIWL5JQB.mjs +0 -417
  48. package/dist/chunk-UQGI67WR.mjs +0 -417
  49. package/dist/chunk-UTZOO4XO.mjs +0 -553
  50. package/dist/chunk-X4F46I5L.mjs +0 -635
  51. package/dist/chunk-XKK7YHPX.mjs +0 -619
  52. package/dist/chunk-YCA4FTEK.mjs +0 -600
  53. package/dist/chunk-ZSZRRTJM.mjs +0 -719
  54. package/dist/client-BgmiMoil.d.mts +0 -1344
  55. package/dist/client-BgmiMoil.d.ts +0 -1344
  56. package/dist/client-BxGrPuuN.d.mts +0 -1191
  57. package/dist/client-BxGrPuuN.d.ts +0 -1191
  58. package/dist/client-D9seCH4K.d.mts +0 -1334
  59. package/dist/client-D9seCH4K.d.ts +0 -1334
  60. package/dist/client-DIXIh7rw.d.mts +0 -1193
  61. package/dist/client-DIXIh7rw.d.ts +0 -1193
  62. package/dist/client-DVHXWOHw.d.mts +0 -1245
  63. package/dist/client-DVHXWOHw.d.ts +0 -1245
  64. package/dist/index.d.ts.map +0 -1
  65. package/dist/index.js.map +0 -1
  66. package/dist/parsers/parser-factory.d.ts +0 -69
  67. package/dist/parsers/parser-factory.d.ts.map +0 -1
  68. package/dist/parsers/parser-factory.js +0 -116
  69. package/dist/parsers/parser-factory.js.map +0 -1
  70. package/dist/parsers/python-parser.d.ts +0 -47
  71. package/dist/parsers/python-parser.d.ts.map +0 -1
  72. package/dist/parsers/python-parser.js +0 -243
  73. package/dist/parsers/python-parser.js.map +0 -1
  74. package/dist/parsers/typescript-parser.d.ts +0 -22
  75. package/dist/parsers/typescript-parser.d.ts.map +0 -1
  76. package/dist/parsers/typescript-parser.js +0 -242
  77. package/dist/parsers/typescript-parser.js.map +0 -1
  78. package/dist/scoring.d.ts +0 -120
  79. package/dist/scoring.d.ts.map +0 -1
  80. package/dist/scoring.js +0 -197
  81. package/dist/scoring.js.map +0 -1
  82. package/dist/types/language.d.ts +0 -172
  83. package/dist/types/language.d.ts.map +0 -1
  84. package/dist/types/language.js +0 -45
  85. package/dist/types/language.js.map +0 -1
  86. package/dist/types.d.ts +0 -122
  87. package/dist/types.d.ts.map +0 -1
  88. package/dist/types.js +0 -2
  89. package/dist/types.js.map +0 -1
  90. package/dist/utils/ast-parser.d.ts +0 -59
  91. package/dist/utils/ast-parser.d.ts.map +0 -1
  92. package/dist/utils/ast-parser.js +0 -213
  93. package/dist/utils/ast-parser.js.map +0 -1
  94. package/dist/utils/cli-helpers.d.ts +0 -54
  95. package/dist/utils/cli-helpers.d.ts.map +0 -1
  96. package/dist/utils/cli-helpers.js +0 -78
  97. package/dist/utils/cli-helpers.js.map +0 -1
  98. package/dist/utils/config.d.ts +0 -9
  99. package/dist/utils/config.d.ts.map +0 -1
  100. package/dist/utils/config.js +0 -80
  101. package/dist/utils/config.js.map +0 -1
  102. package/dist/utils/file-scanner.d.ts +0 -16
  103. package/dist/utils/file-scanner.d.ts.map +0 -1
  104. package/dist/utils/file-scanner.js +0 -104
  105. package/dist/utils/file-scanner.js.map +0 -1
  106. package/dist/utils/metrics.d.ts +0 -6
  107. package/dist/utils/metrics.d.ts.map +0 -1
  108. package/dist/utils/metrics.js +0 -8
  109. package/dist/utils/metrics.js.map +0 -1
@@ -1,194 +0,0 @@
1
- /**
2
- * Test Python parser
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- import { PythonParser } from '../parsers/python-parser';
6
- import { Language } from '../types/language';
7
- describe('PythonParser', () => {
8
- const parser = new PythonParser();
9
- it('should have correct language and extensions', () => {
10
- expect(parser.language).toBe(Language.Python);
11
- expect(parser.extensions).toContain('.py');
12
- });
13
- it('should handle .py files', () => {
14
- expect(parser.canHandle('test.py')).toBe(true);
15
- expect(parser.canHandle('Test.PY')).toBe(true);
16
- expect(parser.canHandle('test.ts')).toBe(false);
17
- });
18
- it('should return PEP 8 naming conventions', () => {
19
- const conventions = parser.getNamingConventions();
20
- // Variables and functions should be snake_case
21
- expect(conventions.variablePattern.test('my_variable')).toBe(true);
22
- expect(conventions.variablePattern.test('myVariable')).toBe(false);
23
- expect(conventions.functionPattern.test('my_function')).toBe(true);
24
- // Classes should be PascalCase
25
- expect(conventions.classPattern.test('MyClass')).toBe(true);
26
- expect(conventions.classPattern.test('my_class')).toBe(false);
27
- // Constants should be UPPER_CASE
28
- expect(conventions.constantPattern.test('MY_CONSTANT')).toBe(true);
29
- expect(conventions.constantPattern.test('myConstant')).toBe(false);
30
- // Should have Python special method exceptions
31
- expect(conventions.exceptions).toContain('__init__');
32
- expect(conventions.exceptions).toContain('__str__');
33
- });
34
- describe('Import Extraction', () => {
35
- it('should extract simple imports', () => {
36
- const code = `
37
- import os
38
- import sys
39
- import json
40
- `;
41
- const result = parser.parse(code, 'test.py');
42
- expect(result.imports).toHaveLength(3);
43
- expect(result.imports[0].source).toBe('os');
44
- expect(result.imports[1].source).toBe('sys');
45
- expect(result.imports[2].source).toBe('json');
46
- });
47
- it('should extract from imports', () => {
48
- const code = `
49
- from typing import List, Dict, Optional
50
- from pathlib import Path
51
- `;
52
- const result = parser.parse(code, 'test.py');
53
- expect(result.imports).toHaveLength(2);
54
- const typingImport = result.imports.find((i) => i.source === 'typing');
55
- expect(typingImport).toBeDefined();
56
- expect(typingImport?.specifiers).toContain('List');
57
- expect(typingImport?.specifiers).toContain('Dict');
58
- expect(typingImport?.specifiers).toContain('Optional');
59
- const pathlibImport = result.imports.find((i) => i.source === 'pathlib');
60
- expect(pathlibImport?.specifiers).toContain('Path');
61
- });
62
- it('should handle wildcard imports', () => {
63
- const code = `from os import *`;
64
- const result = parser.parse(code, 'test.py');
65
- expect(result.imports[0].source).toBe('os');
66
- expect(result.imports[0].specifiers).toContain('*');
67
- });
68
- });
69
- describe('Export Extraction', () => {
70
- it('should extract module-level functions', () => {
71
- const code = `
72
- def public_function():
73
- pass
74
-
75
- def another_function(arg1, arg2):
76
- return arg1 + arg2
77
- `;
78
- const result = parser.parse(code, 'test.py');
79
- const funcNames = result.exports.map((e) => e.name);
80
- expect(funcNames).toContain('public_function');
81
- expect(funcNames).toContain('another_function');
82
- });
83
- it('should extract classes', () => {
84
- const code = `
85
- class MyClass:
86
- def __init__(self):
87
- self.value = 0
88
-
89
- def method(self):
90
- pass
91
-
92
- class AnotherClass:
93
- pass
94
- `;
95
- const result = parser.parse(code, 'test.py');
96
- const classNames = result.exports
97
- .filter((e) => e.type === 'class')
98
- .map((e) => e.name);
99
- expect(classNames).toContain('MyClass');
100
- expect(classNames).toContain('AnotherClass');
101
- // Methods should not be exported as separate entities
102
- const methodNames = result.exports.map((e) => e.name);
103
- expect(methodNames).not.toContain('method');
104
- });
105
- it('should not export private functions', () => {
106
- const code = `
107
- def public_function():
108
- pass
109
-
110
- def _private_function():
111
- pass
112
-
113
- def __dunder_function__():
114
- pass
115
- `;
116
- const result = parser.parse(code, 'test.py');
117
- const funcNames = result.exports.map((e) => e.name);
118
- expect(funcNames).toContain('public_function');
119
- expect(funcNames).toContain('__dunder_function__'); // Dunder methods are included
120
- expect(funcNames).not.toContain('_private_function'); // Single underscore excluded
121
- });
122
- it('should extract __all__ exports', () => {
123
- const code = `
124
- __all__ = ['foo', 'bar', 'MyClass']
125
-
126
- def foo():
127
- pass
128
-
129
- def bar():
130
- pass
131
-
132
- class MyClass:
133
- pass
134
- `;
135
- const result = parser.parse(code, 'test.py');
136
- const names = result.exports.map((e) => e.name);
137
- expect(names).toContain('foo');
138
- expect(names).toContain('bar');
139
- expect(names).toContain('MyClass');
140
- });
141
- });
142
- it('should include warning about regex-based parsing', () => {
143
- const code = 'import os';
144
- const result = parser.parse(code, 'test.py');
145
- expect(result.warnings).toBeDefined();
146
- expect(result.warnings.length).toBeGreaterThan(0);
147
- expect(result.warnings[0]).toContain('regex-based');
148
- });
149
- it('should parse real-world Python code', () => {
150
- const code = `
151
- """
152
- A sample Python module
153
- """
154
- from typing import List, Optional
155
- import os
156
- import sys
157
-
158
- __all__ = ['process_data', 'DataProcessor']
159
-
160
- class DataProcessor:
161
- """Process data"""
162
-
163
- def __init__(self, config: dict):
164
- self.config = config
165
-
166
- def process(self, data: List[str]) -> List[str]:
167
- return [item.upper() for item in data]
168
-
169
- def process_data(items: List[str]) -> Optional[List[str]]:
170
- """Process a list of items"""
171
- if not items:
172
- return None
173
- return [item.strip() for item in items]
174
-
175
- def _helper_function():
176
- """Private helper"""
177
- pass
178
-
179
- MY_CONSTANT = 42
180
- `;
181
- const result = parser.parse(code, 'example.py');
182
- // Check imports
183
- expect(result.imports.length).toBeGreaterThan(0);
184
- const typingImport = result.imports.find((i) => i.source === 'typing');
185
- expect(typingImport).toBeDefined();
186
- // Check exports
187
- const exportNames = result.exports.map((e) => e.name);
188
- expect(exportNames).toContain('DataProcessor');
189
- expect(exportNames).toContain('process_data');
190
- expect(exportNames).not.toContain('_helper_function');
191
- expect(exportNames).not.toContain('process'); // Method, not module-level
192
- });
193
- });
194
- //# sourceMappingURL=python-parser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"python-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/python-parser.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=scoring.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoring.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":""}
@@ -1,197 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import {
3
- calculateOverallScore,
4
- getRating,
5
- parseWeightString,
6
- normalizeToolName,
7
- getToolWeight,
8
- DEFAULT_TOOL_WEIGHTS,
9
- } from '../scoring';
10
- describe('Core Scoring Infrastructure', () => {
11
- describe('calculateOverallScore', () => {
12
- it('should calculate weighted average correctly', () => {
13
- const toolOutputs = new Map([
14
- [
15
- 'pattern-detect',
16
- {
17
- toolName: 'pattern-detect',
18
- score: 80,
19
- rawMetrics: {},
20
- factors: [],
21
- recommendations: [],
22
- },
23
- ],
24
- [
25
- 'context-analyzer',
26
- {
27
- toolName: 'context-analyzer',
28
- score: 60,
29
- rawMetrics: {},
30
- factors: [],
31
- recommendations: [],
32
- },
33
- ],
34
- ]);
35
- // Default weights: pattern-detect=40, context-analyzer=35
36
- // (80 * 40 + 60 * 35) / (40 + 35) = (3200 + 2100) / 75 = 5300 / 75 = 70.67 → 71
37
- const result = calculateOverallScore(toolOutputs);
38
- expect(result.overall).toBe(71);
39
- expect(result.rating).toBe('Fair'); // 71 is in Fair range (60-74)
40
- expect(result.toolsUsed).toEqual(['pattern-detect', 'context-analyzer']);
41
- expect(result.breakdown).toHaveLength(2);
42
- });
43
- it('should apply CLI weight overrides', () => {
44
- const toolOutputs = new Map([
45
- [
46
- 'pattern-detect',
47
- {
48
- toolName: 'pattern-detect',
49
- score: 80,
50
- rawMetrics: {},
51
- factors: [],
52
- recommendations: [],
53
- },
54
- ],
55
- [
56
- 'context-analyzer',
57
- {
58
- toolName: 'context-analyzer',
59
- score: 60,
60
- rawMetrics: {},
61
- factors: [],
62
- recommendations: [],
63
- },
64
- ],
65
- ]);
66
- const cliWeights = new Map([
67
- ['pattern-detect', 50],
68
- ['context-analyzer', 50],
69
- ]);
70
- // Equal weights: (80 * 50 + 60 * 50) / 100 = 7000 / 100 = 70
71
- const result = calculateOverallScore(toolOutputs, undefined, cliWeights);
72
- expect(result.overall).toBe(70);
73
- expect(result.calculation.weights['pattern-detect']).toBe(50);
74
- expect(result.calculation.weights['context-analyzer']).toBe(50);
75
- });
76
- it('should handle single tool scoring', () => {
77
- const toolOutputs = new Map([
78
- [
79
- 'pattern-detect',
80
- {
81
- toolName: 'pattern-detect',
82
- score: 85,
83
- rawMetrics: {},
84
- factors: [],
85
- recommendations: [],
86
- },
87
- ],
88
- ]);
89
- const result = calculateOverallScore(toolOutputs);
90
- expect(result.overall).toBe(85);
91
- expect(result.toolsUsed).toEqual(['pattern-detect']);
92
- });
93
- it('should apply config weights when no CLI override', () => {
94
- const toolOutputs = new Map([
95
- [
96
- 'pattern-detect',
97
- {
98
- toolName: 'pattern-detect',
99
- score: 90,
100
- rawMetrics: {},
101
- factors: [],
102
- recommendations: [],
103
- },
104
- ],
105
- ]);
106
- const config = {
107
- tools: {
108
- 'pattern-detect': {
109
- scoreWeight: 60,
110
- },
111
- },
112
- };
113
- const result = calculateOverallScore(toolOutputs, config);
114
- expect(result.overall).toBe(90);
115
- expect(result.calculation.weights['pattern-detect']).toBe(60);
116
- });
117
- it('should throw error when no tool outputs provided', () => {
118
- const toolOutputs = new Map();
119
- expect(() => calculateOverallScore(toolOutputs)).toThrow(
120
- 'No tool outputs provided for scoring'
121
- );
122
- });
123
- });
124
- describe('getRating', () => {
125
- it('should return correct ratings for score ranges', () => {
126
- expect(getRating(100)).toBe('Excellent');
127
- expect(getRating(90)).toBe('Excellent');
128
- expect(getRating(89)).toBe('Good');
129
- expect(getRating(75)).toBe('Good');
130
- expect(getRating(74)).toBe('Fair');
131
- expect(getRating(60)).toBe('Fair');
132
- expect(getRating(59)).toBe('Needs Work');
133
- expect(getRating(40)).toBe('Needs Work');
134
- expect(getRating(39)).toBe('Critical');
135
- expect(getRating(0)).toBe('Critical');
136
- });
137
- });
138
- describe('parseWeightString', () => {
139
- it('should parse valid weight string', () => {
140
- const weights = parseWeightString(
141
- 'patterns:50,context:30,consistency:20'
142
- );
143
- expect(weights.get('pattern-detect')).toBe(50);
144
- expect(weights.get('context-analyzer')).toBe(30);
145
- expect(weights.get('consistency')).toBe(20);
146
- });
147
- it('should return empty map for undefined input', () => {
148
- const weights = parseWeightString(undefined);
149
- expect(weights.size).toBe(0);
150
- });
151
- it('should skip invalid pairs', () => {
152
- const weights = parseWeightString(
153
- 'patterns:50,invalid,context:abc,consistency:30'
154
- );
155
- expect(weights.get('pattern-detect')).toBe(50);
156
- expect(weights.get('context-analyzer')).toBeUndefined();
157
- expect(weights.get('consistency')).toBe(30);
158
- });
159
- });
160
- describe('normalizeToolName', () => {
161
- it('should normalize shorthand tool names', () => {
162
- expect(normalizeToolName('patterns')).toBe('pattern-detect');
163
- expect(normalizeToolName('context')).toBe('context-analyzer');
164
- expect(normalizeToolName('consistency')).toBe('consistency');
165
- });
166
- it('should return full names unchanged', () => {
167
- expect(normalizeToolName('pattern-detect')).toBe('pattern-detect');
168
- expect(normalizeToolName('context-analyzer')).toBe('context-analyzer');
169
- });
170
- it('should return unknown names unchanged', () => {
171
- expect(normalizeToolName('unknown-tool')).toBe('unknown-tool');
172
- });
173
- });
174
- describe('getToolWeight', () => {
175
- it('should prioritize CLI override', () => {
176
- const weight = getToolWeight('pattern-detect', { scoreWeight: 30 }, 50);
177
- expect(weight).toBe(50);
178
- });
179
- it('should use config weight when no CLI override', () => {
180
- const weight = getToolWeight(
181
- 'pattern-detect',
182
- { scoreWeight: 30 },
183
- undefined
184
- );
185
- expect(weight).toBe(30);
186
- });
187
- it('should fall back to default weight', () => {
188
- const weight = getToolWeight('pattern-detect', undefined, undefined);
189
- expect(weight).toBe(DEFAULT_TOOL_WEIGHTS['pattern-detect']);
190
- });
191
- it('should use 10 for unknown tools', () => {
192
- const weight = getToolWeight('unknown-tool', undefined, undefined);
193
- expect(weight).toBe(10);
194
- });
195
- });
196
- });
197
- //# sourceMappingURL=scoring.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoring.test.js","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":"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"}