wiggum-cli 0.3.1 → 0.3.2
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/dist/ai/agents/index.d.ts.map +1 -1
- package/dist/ai/agents/index.js +38 -2
- package/dist/ai/agents/index.js.map +1 -1
- package/dist/utils/json-repair.d.ts.map +1 -1
- package/dist/utils/json-repair.js +43 -0
- package/dist/utils/json-repair.js.map +1 -1
- package/package.json +1 -1
- package/src/ai/agents/index.ts +37 -2
- package/src/utils/json-repair.ts +50 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EACV,kBAAkB,EAElB,YAAY,EACb,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EACV,kBAAkB,EAElB,YAAY,EACb,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAyFpC"}
|
package/dist/ai/agents/index.js
CHANGED
|
@@ -28,7 +28,7 @@ export async function runMultiAgentAnalysis(model, modelId, scanResult, options
|
|
|
28
28
|
if (verbose) {
|
|
29
29
|
logger.info('Running Codebase Analyst...');
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
let codebaseAnalysis = await runCodebaseAnalyst(model, modelId, {
|
|
32
32
|
scanResult,
|
|
33
33
|
projectRoot: scanResult.projectRoot,
|
|
34
34
|
}, verbose);
|
|
@@ -36,7 +36,8 @@ export async function runMultiAgentAnalysis(model, modelId, scanResult, options
|
|
|
36
36
|
if (verbose) {
|
|
37
37
|
logger.warn('Codebase Analyst failed, using defaults');
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
// Use defaults instead of aborting the pipeline
|
|
40
|
+
codebaseAnalysis = getDefaultCodebaseAnalysis(scanResult);
|
|
40
41
|
}
|
|
41
42
|
// Run Stack Researcher
|
|
42
43
|
if (verbose) {
|
|
@@ -69,6 +70,41 @@ export async function runMultiAgentAnalysis(model, modelId, scanResult, options
|
|
|
69
70
|
}
|
|
70
71
|
return finalResult;
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Get default codebase analysis when agent fails
|
|
75
|
+
*/
|
|
76
|
+
function getDefaultCodebaseAnalysis(scanResult) {
|
|
77
|
+
// Detect project type from scan result
|
|
78
|
+
let projectType = 'Unknown';
|
|
79
|
+
if (scanResult.stack.mcp?.isProject) {
|
|
80
|
+
projectType = 'MCP Server';
|
|
81
|
+
}
|
|
82
|
+
else if (scanResult.stack.framework?.name.includes('Next')) {
|
|
83
|
+
projectType = 'Next.js App';
|
|
84
|
+
}
|
|
85
|
+
else if (scanResult.stack.framework?.name.includes('React')) {
|
|
86
|
+
projectType = 'React SPA';
|
|
87
|
+
}
|
|
88
|
+
else if (scanResult.stack.framework?.name) {
|
|
89
|
+
projectType = `${scanResult.stack.framework.name} Project`;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
projectContext: {
|
|
93
|
+
entryPoints: ['src/index.ts'],
|
|
94
|
+
keyDirectories: { 'src': 'Source code' },
|
|
95
|
+
namingConventions: 'camelCase',
|
|
96
|
+
projectType,
|
|
97
|
+
},
|
|
98
|
+
commands: {
|
|
99
|
+
test: 'npm test',
|
|
100
|
+
lint: 'npm run lint',
|
|
101
|
+
build: 'npm run build',
|
|
102
|
+
dev: 'npm run dev',
|
|
103
|
+
},
|
|
104
|
+
implementationGuidelines: ['Follow existing patterns', 'Run tests after changes'],
|
|
105
|
+
possibleMissedTechnologies: [],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
72
108
|
/**
|
|
73
109
|
* Get default stack research when agent fails
|
|
74
110
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAoB,EACpB,OAAe,EACf,UAAsB,EACtB,UAAwB,EAAE;IAE1B,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAElE,yBAAyB;IACzB,MAAM,YAAY,GAAsB;QACtC,SAAS,EAAE,CAAC,CAAC,YAAY;QACzB,WAAW,EAAE,CAAC,CAAC,cAAc;KAC9B,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,SAAS,cAAc,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/agents/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-repair.d.ts","sourceRoot":"","sources":["../../src/utils/json-repair.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"json-repair.d.ts","sourceRoot":"","sources":["../../src/utils/json-repair.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiDH;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8D/C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAuCvD"}
|
|
@@ -2,6 +2,47 @@
|
|
|
2
2
|
* JSON Repair Utility
|
|
3
3
|
* Fixes common JSON syntax errors from AI responses
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Fix mismatched brackets in JSON
|
|
7
|
+
* AI sometimes writes } instead of ] or vice versa
|
|
8
|
+
*/
|
|
9
|
+
function fixMismatchedBrackets(text) {
|
|
10
|
+
const chars = text.split('');
|
|
11
|
+
const stack = [];
|
|
12
|
+
let inString = false;
|
|
13
|
+
let escapeNext = false;
|
|
14
|
+
for (let i = 0; i < chars.length; i++) {
|
|
15
|
+
const char = chars[i];
|
|
16
|
+
if (escapeNext) {
|
|
17
|
+
escapeNext = false;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (char === '\\' && inString) {
|
|
21
|
+
escapeNext = true;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (char === '"') {
|
|
25
|
+
inString = !inString;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (inString)
|
|
29
|
+
continue;
|
|
30
|
+
if (char === '{' || char === '[') {
|
|
31
|
+
stack.push({ char, index: i });
|
|
32
|
+
}
|
|
33
|
+
else if (char === '}' || char === ']') {
|
|
34
|
+
if (stack.length > 0) {
|
|
35
|
+
const last = stack.pop();
|
|
36
|
+
const expected = last.char === '{' ? '}' : ']';
|
|
37
|
+
if (char !== expected) {
|
|
38
|
+
// Mismatch! Fix it
|
|
39
|
+
chars[i] = expected;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return chars.join('');
|
|
45
|
+
}
|
|
5
46
|
/**
|
|
6
47
|
* Attempt to repair malformed JSON from AI responses
|
|
7
48
|
*/
|
|
@@ -9,6 +50,8 @@ export function repairJson(text) {
|
|
|
9
50
|
let json = text;
|
|
10
51
|
// Remove any leading/trailing whitespace
|
|
11
52
|
json = json.trim();
|
|
53
|
+
// Fix mismatched brackets (AI writes } instead of ] or vice versa)
|
|
54
|
+
json = fixMismatchedBrackets(json);
|
|
12
55
|
// Remove trailing commas before ] or }
|
|
13
56
|
json = json.replace(/,(\s*[\]}])/g, '$1');
|
|
14
57
|
// Fix missing commas between array elements or object properties
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-repair.js","sourceRoot":"","sources":["../../src/utils/json-repair.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json-repair.js","sourceRoot":"","sources":["../../src/utils/json-repair.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/ai/agents/index.ts
CHANGED
|
@@ -61,7 +61,7 @@ export async function runMultiAgentAnalysis(
|
|
|
61
61
|
logger.info('Running Codebase Analyst...');
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
let codebaseAnalysis = await runCodebaseAnalyst(
|
|
65
65
|
model,
|
|
66
66
|
modelId,
|
|
67
67
|
{
|
|
@@ -75,7 +75,8 @@ export async function runMultiAgentAnalysis(
|
|
|
75
75
|
if (verbose) {
|
|
76
76
|
logger.warn('Codebase Analyst failed, using defaults');
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
// Use defaults instead of aborting the pipeline
|
|
79
|
+
codebaseAnalysis = getDefaultCodebaseAnalysis(scanResult);
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
// Run Stack Researcher
|
|
@@ -132,6 +133,40 @@ export async function runMultiAgentAnalysis(
|
|
|
132
133
|
return finalResult;
|
|
133
134
|
}
|
|
134
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Get default codebase analysis when agent fails
|
|
138
|
+
*/
|
|
139
|
+
function getDefaultCodebaseAnalysis(scanResult: ScanResult) {
|
|
140
|
+
// Detect project type from scan result
|
|
141
|
+
let projectType = 'Unknown';
|
|
142
|
+
if (scanResult.stack.mcp?.isProject) {
|
|
143
|
+
projectType = 'MCP Server';
|
|
144
|
+
} else if (scanResult.stack.framework?.name.includes('Next')) {
|
|
145
|
+
projectType = 'Next.js App';
|
|
146
|
+
} else if (scanResult.stack.framework?.name.includes('React')) {
|
|
147
|
+
projectType = 'React SPA';
|
|
148
|
+
} else if (scanResult.stack.framework?.name) {
|
|
149
|
+
projectType = `${scanResult.stack.framework.name} Project`;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
projectContext: {
|
|
154
|
+
entryPoints: ['src/index.ts'],
|
|
155
|
+
keyDirectories: { 'src': 'Source code' },
|
|
156
|
+
namingConventions: 'camelCase',
|
|
157
|
+
projectType,
|
|
158
|
+
},
|
|
159
|
+
commands: {
|
|
160
|
+
test: 'npm test',
|
|
161
|
+
lint: 'npm run lint',
|
|
162
|
+
build: 'npm run build',
|
|
163
|
+
dev: 'npm run dev',
|
|
164
|
+
},
|
|
165
|
+
implementationGuidelines: ['Follow existing patterns', 'Run tests after changes'],
|
|
166
|
+
possibleMissedTechnologies: [],
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
135
170
|
/**
|
|
136
171
|
* Get default stack research when agent fails
|
|
137
172
|
*/
|
package/src/utils/json-repair.ts
CHANGED
|
@@ -3,6 +3,53 @@
|
|
|
3
3
|
* Fixes common JSON syntax errors from AI responses
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Fix mismatched brackets in JSON
|
|
8
|
+
* AI sometimes writes } instead of ] or vice versa
|
|
9
|
+
*/
|
|
10
|
+
function fixMismatchedBrackets(text: string): string {
|
|
11
|
+
const chars = text.split('');
|
|
12
|
+
const stack: Array<{ char: string; index: number }> = [];
|
|
13
|
+
let inString = false;
|
|
14
|
+
let escapeNext = false;
|
|
15
|
+
|
|
16
|
+
for (let i = 0; i < chars.length; i++) {
|
|
17
|
+
const char = chars[i];
|
|
18
|
+
|
|
19
|
+
if (escapeNext) {
|
|
20
|
+
escapeNext = false;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (char === '\\' && inString) {
|
|
25
|
+
escapeNext = true;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (char === '"') {
|
|
30
|
+
inString = !inString;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (inString) continue;
|
|
35
|
+
|
|
36
|
+
if (char === '{' || char === '[') {
|
|
37
|
+
stack.push({ char, index: i });
|
|
38
|
+
} else if (char === '}' || char === ']') {
|
|
39
|
+
if (stack.length > 0) {
|
|
40
|
+
const last = stack.pop()!;
|
|
41
|
+
const expected = last.char === '{' ? '}' : ']';
|
|
42
|
+
if (char !== expected) {
|
|
43
|
+
// Mismatch! Fix it
|
|
44
|
+
chars[i] = expected;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return chars.join('');
|
|
51
|
+
}
|
|
52
|
+
|
|
6
53
|
/**
|
|
7
54
|
* Attempt to repair malformed JSON from AI responses
|
|
8
55
|
*/
|
|
@@ -12,6 +59,9 @@ export function repairJson(text: string): string {
|
|
|
12
59
|
// Remove any leading/trailing whitespace
|
|
13
60
|
json = json.trim();
|
|
14
61
|
|
|
62
|
+
// Fix mismatched brackets (AI writes } instead of ] or vice versa)
|
|
63
|
+
json = fixMismatchedBrackets(json);
|
|
64
|
+
|
|
15
65
|
// Remove trailing commas before ] or }
|
|
16
66
|
json = json.replace(/,(\s*[\]}])/g, '$1');
|
|
17
67
|
|