@aiready/core 0.23.5 → 0.23.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.
Files changed (111) hide show
  1. package/dist/{client-D-cn9ydj.d.mts → client-BrIMPk89.d.mts} +94 -16
  2. package/dist/{client-D-cn9ydj.d.ts → client-BrIMPk89.d.ts} +94 -16
  3. package/dist/client-C5BuGX4F.d.mts +1205 -0
  4. package/dist/client-C5BuGX4F.d.ts +1205 -0
  5. package/dist/{client-BF9NjhE8.d.mts → client-CKcjnPXt.d.mts} +1 -0
  6. package/dist/{client-BF9NjhE8.d.ts → client-CKcjnPXt.d.ts} +1 -0
  7. package/dist/client.d.mts +1 -1
  8. package/dist/client.d.ts +1 -1
  9. package/dist/index.d.mts +464 -134
  10. package/dist/index.d.ts +464 -134
  11. package/dist/index.js +211 -47
  12. package/dist/index.mjs +211 -44
  13. package/package.json +1 -1
  14. package/dist/__tests__/parser-factory.test.d.ts +0 -5
  15. package/dist/__tests__/parser-factory.test.d.ts.map +0 -1
  16. package/dist/__tests__/parser-factory.test.js +0 -70
  17. package/dist/__tests__/parser-factory.test.js.map +0 -1
  18. package/dist/__tests__/python-parser.test.d.ts +0 -5
  19. package/dist/__tests__/python-parser.test.d.ts.map +0 -1
  20. package/dist/__tests__/python-parser.test.js +0 -194
  21. package/dist/__tests__/python-parser.test.js.map +0 -1
  22. package/dist/__tests__/scoring.test.d.ts +0 -2
  23. package/dist/__tests__/scoring.test.d.ts.map +0 -1
  24. package/dist/__tests__/scoring.test.js +0 -197
  25. package/dist/__tests__/scoring.test.js.map +0 -1
  26. package/dist/chunk-3YI4IS3D.mjs +0 -601
  27. package/dist/chunk-5HIXDC3X.mjs +0 -716
  28. package/dist/chunk-5V3L53AE.mjs +0 -805
  29. package/dist/chunk-CKVKHN3G.mjs +0 -660
  30. package/dist/chunk-COHIBX3Q.mjs +0 -635
  31. package/dist/chunk-CWRCDSKZ.mjs +0 -417
  32. package/dist/chunk-D3D3NCRR.mjs +0 -556
  33. package/dist/chunk-HCFYP7UD.mjs +0 -805
  34. package/dist/chunk-HFLFBA6F.mjs +0 -417
  35. package/dist/chunk-HKSARRCD.mjs +0 -365
  36. package/dist/chunk-JJ5JL5FX.mjs +0 -417
  37. package/dist/chunk-KDSTXVLQ.mjs +0 -724
  38. package/dist/chunk-KI7XORTN.mjs +0 -417
  39. package/dist/chunk-LTMHFNFK.mjs +0 -690
  40. package/dist/chunk-LTNXTXRI.mjs +0 -659
  41. package/dist/chunk-M22BXHBR.mjs +0 -805
  42. package/dist/chunk-MH3A3LX6.mjs +0 -615
  43. package/dist/chunk-NGHT7JOG.mjs +0 -697
  44. package/dist/chunk-OQ6IGDXG.mjs +0 -553
  45. package/dist/chunk-QAFB3HXQ.mjs +0 -590
  46. package/dist/chunk-QQBKXHLU.mjs +0 -678
  47. package/dist/chunk-RDHYGES7.mjs +0 -678
  48. package/dist/chunk-SWTDBVYJ.mjs +0 -660
  49. package/dist/chunk-UIWL5JQB.mjs +0 -417
  50. package/dist/chunk-UQGI67WR.mjs +0 -417
  51. package/dist/chunk-UTZOO4XO.mjs +0 -553
  52. package/dist/chunk-X4F46I5L.mjs +0 -635
  53. package/dist/chunk-XKK7YHPX.mjs +0 -619
  54. package/dist/chunk-YCA4FTEK.mjs +0 -600
  55. package/dist/chunk-ZSZRRTJM.mjs +0 -719
  56. package/dist/client-BgmiMoil.d.mts +0 -1344
  57. package/dist/client-BgmiMoil.d.ts +0 -1344
  58. package/dist/client-BxGrPuuN.d.mts +0 -1191
  59. package/dist/client-BxGrPuuN.d.ts +0 -1191
  60. package/dist/client-D9seCH4K.d.mts +0 -1334
  61. package/dist/client-D9seCH4K.d.ts +0 -1334
  62. package/dist/client-DIXIh7rw.d.mts +0 -1193
  63. package/dist/client-DIXIh7rw.d.ts +0 -1193
  64. package/dist/client-DVHXWOHw.d.mts +0 -1245
  65. package/dist/client-DVHXWOHw.d.ts +0 -1245
  66. package/dist/index.d.ts.map +0 -1
  67. package/dist/index.js.map +0 -1
  68. package/dist/parsers/parser-factory.d.ts +0 -69
  69. package/dist/parsers/parser-factory.d.ts.map +0 -1
  70. package/dist/parsers/parser-factory.js +0 -116
  71. package/dist/parsers/parser-factory.js.map +0 -1
  72. package/dist/parsers/python-parser.d.ts +0 -47
  73. package/dist/parsers/python-parser.d.ts.map +0 -1
  74. package/dist/parsers/python-parser.js +0 -243
  75. package/dist/parsers/python-parser.js.map +0 -1
  76. package/dist/parsers/typescript-parser.d.ts +0 -22
  77. package/dist/parsers/typescript-parser.d.ts.map +0 -1
  78. package/dist/parsers/typescript-parser.js +0 -242
  79. package/dist/parsers/typescript-parser.js.map +0 -1
  80. package/dist/scoring.d.ts +0 -120
  81. package/dist/scoring.d.ts.map +0 -1
  82. package/dist/scoring.js +0 -197
  83. package/dist/scoring.js.map +0 -1
  84. package/dist/types/language.d.ts +0 -172
  85. package/dist/types/language.d.ts.map +0 -1
  86. package/dist/types/language.js +0 -45
  87. package/dist/types/language.js.map +0 -1
  88. package/dist/types.d.ts +0 -122
  89. package/dist/types.d.ts.map +0 -1
  90. package/dist/types.js +0 -2
  91. package/dist/types.js.map +0 -1
  92. package/dist/utils/ast-parser.d.ts +0 -59
  93. package/dist/utils/ast-parser.d.ts.map +0 -1
  94. package/dist/utils/ast-parser.js +0 -213
  95. package/dist/utils/ast-parser.js.map +0 -1
  96. package/dist/utils/cli-helpers.d.ts +0 -54
  97. package/dist/utils/cli-helpers.d.ts.map +0 -1
  98. package/dist/utils/cli-helpers.js +0 -78
  99. package/dist/utils/cli-helpers.js.map +0 -1
  100. package/dist/utils/config.d.ts +0 -9
  101. package/dist/utils/config.d.ts.map +0 -1
  102. package/dist/utils/config.js +0 -80
  103. package/dist/utils/config.js.map +0 -1
  104. package/dist/utils/file-scanner.d.ts +0 -16
  105. package/dist/utils/file-scanner.d.ts.map +0 -1
  106. package/dist/utils/file-scanner.js +0 -104
  107. package/dist/utils/file-scanner.js.map +0 -1
  108. package/dist/utils/metrics.d.ts +0 -6
  109. package/dist/utils/metrics.d.ts.map +0 -1
  110. package/dist/utils/metrics.js +0 -8
  111. 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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"}