@aiready/core 0.23.5 → 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/{client-BF9NjhE8.d.mts → client-CKcjnPXt.d.mts} +1 -0
  2. package/dist/{client-BF9NjhE8.d.ts → client-CKcjnPXt.d.ts} +1 -0
  3. package/dist/client.d.mts +1 -1
  4. package/dist/client.d.ts +1 -1
  5. package/dist/index.d.mts +10 -2
  6. package/dist/index.d.ts +10 -2
  7. package/dist/index.js +74 -13
  8. package/dist/index.mjs +74 -13
  9. package/package.json +1 -1
  10. package/dist/__tests__/parser-factory.test.d.ts +0 -5
  11. package/dist/__tests__/parser-factory.test.d.ts.map +0 -1
  12. package/dist/__tests__/parser-factory.test.js +0 -70
  13. package/dist/__tests__/parser-factory.test.js.map +0 -1
  14. package/dist/__tests__/python-parser.test.d.ts +0 -5
  15. package/dist/__tests__/python-parser.test.d.ts.map +0 -1
  16. package/dist/__tests__/python-parser.test.js +0 -194
  17. package/dist/__tests__/python-parser.test.js.map +0 -1
  18. package/dist/__tests__/scoring.test.d.ts +0 -2
  19. package/dist/__tests__/scoring.test.d.ts.map +0 -1
  20. package/dist/__tests__/scoring.test.js +0 -197
  21. package/dist/__tests__/scoring.test.js.map +0 -1
  22. package/dist/chunk-3YI4IS3D.mjs +0 -601
  23. package/dist/chunk-5HIXDC3X.mjs +0 -716
  24. package/dist/chunk-5V3L53AE.mjs +0 -805
  25. package/dist/chunk-CKVKHN3G.mjs +0 -660
  26. package/dist/chunk-COHIBX3Q.mjs +0 -635
  27. package/dist/chunk-CWRCDSKZ.mjs +0 -417
  28. package/dist/chunk-D3D3NCRR.mjs +0 -556
  29. package/dist/chunk-HCFYP7UD.mjs +0 -805
  30. package/dist/chunk-HFLFBA6F.mjs +0 -417
  31. package/dist/chunk-HKSARRCD.mjs +0 -365
  32. package/dist/chunk-JJ5JL5FX.mjs +0 -417
  33. package/dist/chunk-KDSTXVLQ.mjs +0 -724
  34. package/dist/chunk-KI7XORTN.mjs +0 -417
  35. package/dist/chunk-LTMHFNFK.mjs +0 -690
  36. package/dist/chunk-LTNXTXRI.mjs +0 -659
  37. package/dist/chunk-M22BXHBR.mjs +0 -805
  38. package/dist/chunk-MH3A3LX6.mjs +0 -615
  39. package/dist/chunk-NGHT7JOG.mjs +0 -697
  40. package/dist/chunk-OQ6IGDXG.mjs +0 -553
  41. package/dist/chunk-QAFB3HXQ.mjs +0 -590
  42. package/dist/chunk-QQBKXHLU.mjs +0 -678
  43. package/dist/chunk-RDHYGES7.mjs +0 -678
  44. package/dist/chunk-SWTDBVYJ.mjs +0 -660
  45. package/dist/chunk-UIWL5JQB.mjs +0 -417
  46. package/dist/chunk-UQGI67WR.mjs +0 -417
  47. package/dist/chunk-UTZOO4XO.mjs +0 -553
  48. package/dist/chunk-X4F46I5L.mjs +0 -635
  49. package/dist/chunk-XKK7YHPX.mjs +0 -619
  50. package/dist/chunk-YCA4FTEK.mjs +0 -600
  51. package/dist/chunk-ZSZRRTJM.mjs +0 -719
  52. package/dist/client-BgmiMoil.d.mts +0 -1344
  53. package/dist/client-BgmiMoil.d.ts +0 -1344
  54. package/dist/client-BxGrPuuN.d.mts +0 -1191
  55. package/dist/client-BxGrPuuN.d.ts +0 -1191
  56. package/dist/client-D-cn9ydj.d.mts +0 -1136
  57. package/dist/client-D-cn9ydj.d.ts +0 -1136
  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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"}