bobo-ai-cli 2.0.0 → 3.0.0
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 +52 -9
- package/dist/agent.js +70 -45
- package/dist/agent.js.map +1 -1
- package/dist/agents/catalog.d.ts +40 -0
- package/dist/agents/catalog.js +172 -0
- package/dist/agents/catalog.js.map +1 -0
- package/dist/agents/index.d.ts +6 -0
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/router.d.ts +43 -0
- package/dist/agents/router.js +87 -0
- package/dist/agents/router.js.map +1 -0
- package/dist/agents/spawn.d.ts +46 -0
- package/dist/agents/spawn.js +91 -0
- package/dist/agents/spawn.js.map +1 -0
- package/dist/autonomous.js +41 -1
- package/dist/autonomous.js.map +1 -1
- package/dist/claude-bridge.d.ts +18 -0
- package/dist/claude-bridge.js +91 -0
- package/dist/claude-bridge.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +667 -0
- package/dist/cli.js.map +1 -0
- package/dist/compactor.d.ts +49 -4
- package/dist/compactor.js +164 -17
- package/dist/compactor.js.map +1 -1
- package/dist/completer.js +2 -0
- package/dist/completer.js.map +1 -1
- package/dist/cost-tracker.js +35 -2
- package/dist/cost-tracker.js.map +1 -1
- package/dist/dream.d.ts +42 -0
- package/dist/dream.js +321 -0
- package/dist/dream.js.map +1 -0
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +4 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +8 -1099
- package/dist/index.js.map +1 -1
- package/dist/insight.js +4 -11
- package/dist/insight.js.map +1 -1
- package/dist/knowledge.d.ts +13 -0
- package/dist/knowledge.js +13 -2
- package/dist/knowledge.js.map +1 -1
- package/dist/memory.d.ts +4 -0
- package/dist/memory.js +6 -0
- package/dist/memory.js.map +1 -1
- package/dist/repl.d.ts +16 -0
- package/dist/repl.js +702 -0
- package/dist/repl.js.map +1 -0
- package/dist/sessions.js +23 -0
- package/dist/sessions.js.map +1 -1
- package/dist/skills/composer.d.ts +18 -0
- package/dist/skills/composer.js +59 -0
- package/dist/skills/composer.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +12 -0
- package/dist/skills/loader.js +150 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/types.d.ts +28 -0
- package/dist/skills/types.js +9 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills.d.ts +1 -0
- package/dist/skills.js +1 -0
- package/dist/skills.js.map +1 -1
- package/dist/state/artifacts.d.ts +71 -0
- package/dist/state/artifacts.js +131 -0
- package/dist/state/artifacts.js.map +1 -0
- package/dist/state/index.d.ts +9 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/manager.d.ts +89 -0
- package/dist/state/manager.js +130 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/project-memory.d.ts +24 -0
- package/dist/state/project-memory.js +81 -0
- package/dist/state/project-memory.js.map +1 -0
- package/dist/state/recovery.d.ts +24 -0
- package/dist/state/recovery.js +94 -0
- package/dist/state/recovery.js.map +1 -0
- package/dist/statusbar.d.ts +1 -0
- package/dist/statusbar.js +12 -1
- package/dist/statusbar.js.map +1 -1
- package/dist/sub-agent-runner.d.ts +1 -0
- package/dist/sub-agent-runner.js +29 -3
- package/dist/sub-agent-runner.js.map +1 -1
- package/dist/sub-agents.d.ts +19 -1
- package/dist/sub-agents.js +137 -2
- package/dist/sub-agents.js.map +1 -1
- package/dist/tool-governance.d.ts +77 -0
- package/dist/tool-governance.js +335 -0
- package/dist/tool-governance.js.map +1 -0
- package/dist/tools/claude-bridge-tool.d.ts +4 -0
- package/dist/tools/claude-bridge-tool.js +44 -0
- package/dist/tools/claude-bridge-tool.js.map +1 -0
- package/dist/tools/claude-code.d.ts +33 -0
- package/dist/tools/claude-code.js +279 -0
- package/dist/tools/claude-code.js.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/ui/hud.d.ts +25 -0
- package/dist/ui/hud.js +67 -0
- package/dist/ui/hud.js.map +1 -0
- package/dist/verification-agent.d.ts +46 -0
- package/dist/verification-agent.js +528 -0
- package/dist/verification-agent.js.map +1 -0
- package/dist/workflows/ask.d.ts +13 -0
- package/dist/workflows/ask.js +66 -0
- package/dist/workflows/ask.js.map +1 -0
- package/dist/workflows/index.d.ts +5 -0
- package/dist/workflows/index.js +6 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/interview.d.ts +11 -0
- package/dist/workflows/interview.js +36 -0
- package/dist/workflows/interview.js.map +1 -0
- package/dist/workflows/plan.d.ts +13 -0
- package/dist/workflows/plan.js +34 -0
- package/dist/workflows/plan.js.map +1 -0
- package/dist/workflows/team.d.ts +17 -0
- package/dist/workflows/team.js +86 -0
- package/dist/workflows/team.js.map +1 -0
- package/dist/workflows/verify.d.ts +11 -0
- package/dist/workflows/verify.js +21 -0
- package/dist/workflows/verify.js.map +1 -0
- package/package.json +2 -4
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification Agent — 'try to break it' philosophy
|
|
3
|
+
*
|
|
4
|
+
* Instead of confirming success, this agent actively tries to find flaws.
|
|
5
|
+
* - Enforces build/test/lint execution
|
|
6
|
+
* - Adversarial probing: boundary testing, actual API calls
|
|
7
|
+
* - Separation of concerns: independent from the code-writing agent
|
|
8
|
+
* - Returns VERDICT: PASS / FAIL / PARTIAL
|
|
9
|
+
*/
|
|
10
|
+
import { execSync } from 'node:child_process';
|
|
11
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
/**
|
|
14
|
+
* Main verification function — runs all checks and returns verdict.
|
|
15
|
+
*/
|
|
16
|
+
export async function runVerification(task, result, options = {}) {
|
|
17
|
+
const cwd = options.cwd || process.cwd();
|
|
18
|
+
const checks = [];
|
|
19
|
+
// Check 1: Build (if applicable)
|
|
20
|
+
if (!options.skipBuild) {
|
|
21
|
+
checks.push(await verifyBuild(cwd));
|
|
22
|
+
}
|
|
23
|
+
// Check 2: Tests (if applicable)
|
|
24
|
+
if (!options.skipTests) {
|
|
25
|
+
checks.push(await verifyTests(cwd));
|
|
26
|
+
}
|
|
27
|
+
// Check 3: Lint (if applicable)
|
|
28
|
+
if (!options.skipLint) {
|
|
29
|
+
checks.push(await verifyLint(cwd));
|
|
30
|
+
}
|
|
31
|
+
// Check 4: Adversarial tests (boundary values, edge cases)
|
|
32
|
+
if (options.adversarialTests && options.adversarialTests.length > 0) {
|
|
33
|
+
for (const test of options.adversarialTests) {
|
|
34
|
+
checks.push(await runAdversarialTest(test, cwd));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Auto-detect common adversarial tests
|
|
39
|
+
checks.push(...await autoDetectAdversarialTests(task, result, cwd));
|
|
40
|
+
}
|
|
41
|
+
// Compute verdict
|
|
42
|
+
const verdict = computeVerdict(checks);
|
|
43
|
+
const summary = generateSummary(checks, verdict);
|
|
44
|
+
const reasoning = generateReasoning(checks, task, result);
|
|
45
|
+
const suggestedFixes = generateSuggestedFixes(checks);
|
|
46
|
+
return {
|
|
47
|
+
verdict,
|
|
48
|
+
summary,
|
|
49
|
+
checks,
|
|
50
|
+
reasoning,
|
|
51
|
+
suggestedFixes: suggestedFixes.length > 0 ? suggestedFixes : undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Verify build passes.
|
|
56
|
+
*/
|
|
57
|
+
async function verifyBuild(cwd) {
|
|
58
|
+
const packageJsonPath = join(cwd, 'package.json');
|
|
59
|
+
if (!existsSync(packageJsonPath)) {
|
|
60
|
+
return {
|
|
61
|
+
name: 'Build',
|
|
62
|
+
passed: true,
|
|
63
|
+
skipped: true,
|
|
64
|
+
skipReason: 'No package.json found',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
68
|
+
const buildScript = packageJson.scripts?.build;
|
|
69
|
+
if (!buildScript) {
|
|
70
|
+
return {
|
|
71
|
+
name: 'Build',
|
|
72
|
+
passed: true,
|
|
73
|
+
skipped: true,
|
|
74
|
+
skipReason: 'No build script defined',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const output = execSync('npm run build', {
|
|
79
|
+
cwd,
|
|
80
|
+
encoding: 'utf-8',
|
|
81
|
+
timeout: 120000,
|
|
82
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
name: 'Build',
|
|
86
|
+
passed: true,
|
|
87
|
+
output: output.trim(),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
const err = e;
|
|
92
|
+
return {
|
|
93
|
+
name: 'Build',
|
|
94
|
+
passed: false,
|
|
95
|
+
error: `Build failed: ${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Verify tests pass.
|
|
101
|
+
*/
|
|
102
|
+
async function verifyTests(cwd) {
|
|
103
|
+
const packageJsonPath = join(cwd, 'package.json');
|
|
104
|
+
if (!existsSync(packageJsonPath)) {
|
|
105
|
+
return {
|
|
106
|
+
name: 'Tests',
|
|
107
|
+
passed: true,
|
|
108
|
+
skipped: true,
|
|
109
|
+
skipReason: 'No package.json found',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
113
|
+
const testScript = packageJson.scripts?.test;
|
|
114
|
+
if (!testScript) {
|
|
115
|
+
return {
|
|
116
|
+
name: 'Tests',
|
|
117
|
+
passed: true,
|
|
118
|
+
skipped: true,
|
|
119
|
+
skipReason: 'No test script defined',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const output = execSync('npm test', {
|
|
124
|
+
cwd,
|
|
125
|
+
encoding: 'utf-8',
|
|
126
|
+
timeout: 180000,
|
|
127
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
128
|
+
});
|
|
129
|
+
return {
|
|
130
|
+
name: 'Tests',
|
|
131
|
+
passed: true,
|
|
132
|
+
output: output.trim(),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
const err = e;
|
|
137
|
+
return {
|
|
138
|
+
name: 'Tests',
|
|
139
|
+
passed: false,
|
|
140
|
+
error: `Tests failed: ${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Verify linting passes.
|
|
146
|
+
*/
|
|
147
|
+
async function verifyLint(cwd) {
|
|
148
|
+
const packageJsonPath = join(cwd, 'package.json');
|
|
149
|
+
if (!existsSync(packageJsonPath)) {
|
|
150
|
+
return {
|
|
151
|
+
name: 'Lint',
|
|
152
|
+
passed: true,
|
|
153
|
+
skipped: true,
|
|
154
|
+
skipReason: 'No package.json found',
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
158
|
+
const lintScript = packageJson.scripts?.lint;
|
|
159
|
+
if (!lintScript) {
|
|
160
|
+
// Try common linters
|
|
161
|
+
const linters = ['eslint', 'tslint', 'biome'];
|
|
162
|
+
for (const linter of linters) {
|
|
163
|
+
try {
|
|
164
|
+
const output = execSync(`npx ${linter} --version`, {
|
|
165
|
+
cwd,
|
|
166
|
+
encoding: 'utf-8',
|
|
167
|
+
timeout: 10000,
|
|
168
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
169
|
+
});
|
|
170
|
+
// Linter exists, try running it
|
|
171
|
+
try {
|
|
172
|
+
const lintOutput = execSync(`npx ${linter} .`, {
|
|
173
|
+
cwd,
|
|
174
|
+
encoding: 'utf-8',
|
|
175
|
+
timeout: 60000,
|
|
176
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
177
|
+
});
|
|
178
|
+
return {
|
|
179
|
+
name: 'Lint',
|
|
180
|
+
passed: true,
|
|
181
|
+
output: `${linter}: ${lintOutput.trim()}`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch (lintErr) {
|
|
185
|
+
const err = lintErr;
|
|
186
|
+
return {
|
|
187
|
+
name: 'Lint',
|
|
188
|
+
passed: false,
|
|
189
|
+
error: `${linter} found issues: ${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Linter not found, continue
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
name: 'Lint',
|
|
199
|
+
passed: true,
|
|
200
|
+
skipped: true,
|
|
201
|
+
skipReason: 'No lint script or linter found',
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const output = execSync('npm run lint', {
|
|
206
|
+
cwd,
|
|
207
|
+
encoding: 'utf-8',
|
|
208
|
+
timeout: 60000,
|
|
209
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
name: 'Lint',
|
|
213
|
+
passed: true,
|
|
214
|
+
output: output.trim(),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
const err = e;
|
|
219
|
+
return {
|
|
220
|
+
name: 'Lint',
|
|
221
|
+
passed: false,
|
|
222
|
+
error: `Lint failed: ${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Run a single adversarial test.
|
|
228
|
+
*/
|
|
229
|
+
async function runAdversarialTest(test, cwd) {
|
|
230
|
+
try {
|
|
231
|
+
const output = execSync(test.command, {
|
|
232
|
+
cwd,
|
|
233
|
+
encoding: 'utf-8',
|
|
234
|
+
timeout: 30000,
|
|
235
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
236
|
+
});
|
|
237
|
+
if (test.expectFail) {
|
|
238
|
+
// Expected to fail but didn't
|
|
239
|
+
return {
|
|
240
|
+
name: test.name,
|
|
241
|
+
passed: false,
|
|
242
|
+
error: `Expected command to fail but it succeeded: ${output.trim()}`,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
name: test.name,
|
|
247
|
+
passed: true,
|
|
248
|
+
output: output.trim(),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
const err = e;
|
|
253
|
+
if (test.expectFail) {
|
|
254
|
+
// Expected to fail and did
|
|
255
|
+
return {
|
|
256
|
+
name: test.name,
|
|
257
|
+
passed: true,
|
|
258
|
+
output: `Command failed as expected: ${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
name: test.name,
|
|
263
|
+
passed: false,
|
|
264
|
+
error: `${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Auto-detect adversarial tests based on task and result.
|
|
270
|
+
*/
|
|
271
|
+
async function autoDetectAdversarialTests(task, result, cwd) {
|
|
272
|
+
const checks = [];
|
|
273
|
+
// If task mentions API, try to find and test endpoints
|
|
274
|
+
if (task.toLowerCase().includes('api') || result.toLowerCase().includes('endpoint')) {
|
|
275
|
+
checks.push(await detectApiTests(result, cwd));
|
|
276
|
+
}
|
|
277
|
+
// If task mentions CLI, try to run help command
|
|
278
|
+
if (task.toLowerCase().includes('cli') || task.toLowerCase().includes('command')) {
|
|
279
|
+
checks.push(await detectCliTests(cwd));
|
|
280
|
+
}
|
|
281
|
+
// If task mentions database/migration, check schema
|
|
282
|
+
if (task.toLowerCase().includes('database') || task.toLowerCase().includes('migration')) {
|
|
283
|
+
checks.push(await detectDatabaseTests(cwd));
|
|
284
|
+
}
|
|
285
|
+
return checks.filter(c => !c.skipped);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Detect and test API endpoints.
|
|
289
|
+
*/
|
|
290
|
+
async function detectApiTests(result, cwd) {
|
|
291
|
+
// Try to find port numbers in result
|
|
292
|
+
const portMatch = result.match(/(?:port|PORT)[:\s]*(\d+)/);
|
|
293
|
+
if (!portMatch) {
|
|
294
|
+
return {
|
|
295
|
+
name: 'API Probe',
|
|
296
|
+
passed: true,
|
|
297
|
+
skipped: true,
|
|
298
|
+
skipReason: 'No port number detected',
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
const port = portMatch[1];
|
|
302
|
+
try {
|
|
303
|
+
// Simple health check
|
|
304
|
+
const output = execSync(`curl -s -o /dev/null -w "%{http_code}" http://localhost:${port}/health || echo "failed"`, {
|
|
305
|
+
cwd,
|
|
306
|
+
encoding: 'utf-8',
|
|
307
|
+
timeout: 5000,
|
|
308
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
309
|
+
});
|
|
310
|
+
if (output.includes('failed') || output.trim() === '000') {
|
|
311
|
+
return {
|
|
312
|
+
name: 'API Probe',
|
|
313
|
+
passed: false,
|
|
314
|
+
error: 'API endpoint not responding',
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
name: 'API Probe',
|
|
319
|
+
passed: true,
|
|
320
|
+
output: `API responding with HTTP ${output.trim()}`,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
catch (e) {
|
|
324
|
+
return {
|
|
325
|
+
name: 'API Probe',
|
|
326
|
+
passed: false,
|
|
327
|
+
error: `Failed to probe API: ${e.message}`,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Detect and test CLI commands.
|
|
333
|
+
*/
|
|
334
|
+
async function detectCliTests(cwd) {
|
|
335
|
+
const packageJsonPath = join(cwd, 'package.json');
|
|
336
|
+
if (!existsSync(packageJsonPath)) {
|
|
337
|
+
return {
|
|
338
|
+
name: 'CLI Test',
|
|
339
|
+
passed: true,
|
|
340
|
+
skipped: true,
|
|
341
|
+
skipReason: 'No package.json found',
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
345
|
+
const bin = packageJson.bin;
|
|
346
|
+
if (!bin) {
|
|
347
|
+
return {
|
|
348
|
+
name: 'CLI Test',
|
|
349
|
+
passed: true,
|
|
350
|
+
skipped: true,
|
|
351
|
+
skipReason: 'No CLI binary defined',
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
const cliName = typeof bin === 'string' ? Object.keys(packageJson)[0] : Object.keys(bin)[0];
|
|
355
|
+
try {
|
|
356
|
+
const output = execSync(`node ${typeof bin === 'string' ? bin : bin[cliName]} --help`, {
|
|
357
|
+
cwd,
|
|
358
|
+
encoding: 'utf-8',
|
|
359
|
+
timeout: 10000,
|
|
360
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
361
|
+
});
|
|
362
|
+
return {
|
|
363
|
+
name: 'CLI Test',
|
|
364
|
+
passed: true,
|
|
365
|
+
output: `CLI --help works: ${output.trim().split('\n')[0]}`,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
catch (e) {
|
|
369
|
+
const err = e;
|
|
370
|
+
return {
|
|
371
|
+
name: 'CLI Test',
|
|
372
|
+
passed: false,
|
|
373
|
+
error: `CLI --help failed: ${err.stderr || err.stdout || err.message || 'Unknown error'}`,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Detect database/migration tests.
|
|
379
|
+
*/
|
|
380
|
+
async function detectDatabaseTests(cwd) {
|
|
381
|
+
// Check for common migration tools
|
|
382
|
+
const migrationCommands = [
|
|
383
|
+
'npx prisma migrate status',
|
|
384
|
+
'npm run db:migrate',
|
|
385
|
+
'npx knex migrate:status',
|
|
386
|
+
];
|
|
387
|
+
for (const cmd of migrationCommands) {
|
|
388
|
+
try {
|
|
389
|
+
const output = execSync(cmd, {
|
|
390
|
+
cwd,
|
|
391
|
+
encoding: 'utf-8',
|
|
392
|
+
timeout: 10000,
|
|
393
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
394
|
+
});
|
|
395
|
+
return {
|
|
396
|
+
name: 'Database Migration',
|
|
397
|
+
passed: true,
|
|
398
|
+
output: output.trim(),
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
// Try next command
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return {
|
|
406
|
+
name: 'Database Migration',
|
|
407
|
+
passed: true,
|
|
408
|
+
skipped: true,
|
|
409
|
+
skipReason: 'No migration tool detected',
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Compute final verdict from all checks.
|
|
414
|
+
*/
|
|
415
|
+
function computeVerdict(checks) {
|
|
416
|
+
const relevantChecks = checks.filter(c => !c.skipped);
|
|
417
|
+
if (relevantChecks.length === 0) {
|
|
418
|
+
return 'PARTIAL'; // No checks ran
|
|
419
|
+
}
|
|
420
|
+
const failedChecks = relevantChecks.filter(c => !c.passed);
|
|
421
|
+
if (failedChecks.length === 0) {
|
|
422
|
+
return 'PASS'; // All checks passed
|
|
423
|
+
}
|
|
424
|
+
const passedChecks = relevantChecks.filter(c => c.passed);
|
|
425
|
+
if (passedChecks.length === 0) {
|
|
426
|
+
return 'FAIL'; // All checks failed
|
|
427
|
+
}
|
|
428
|
+
return 'PARTIAL'; // Some checks passed, some failed
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Generate summary of verification results.
|
|
432
|
+
*/
|
|
433
|
+
function generateSummary(checks, verdict) {
|
|
434
|
+
const relevantChecks = checks.filter(c => !c.skipped);
|
|
435
|
+
const passedCount = relevantChecks.filter(c => c.passed).length;
|
|
436
|
+
const failedCount = relevantChecks.filter(c => !c.passed).length;
|
|
437
|
+
const skippedCount = checks.filter(c => c.skipped).length;
|
|
438
|
+
return `Verification ${verdict}: ${passedCount}/${relevantChecks.length} checks passed` +
|
|
439
|
+
(failedCount > 0 ? `, ${failedCount} failed` : '') +
|
|
440
|
+
(skippedCount > 0 ? ` (${skippedCount} skipped)` : '');
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Generate reasoning about the verification.
|
|
444
|
+
*/
|
|
445
|
+
function generateReasoning(checks, task, result) {
|
|
446
|
+
const failedChecks = checks.filter(c => !c.passed && !c.skipped);
|
|
447
|
+
if (failedChecks.length === 0) {
|
|
448
|
+
return 'All verification checks passed. The implementation appears to be working correctly.';
|
|
449
|
+
}
|
|
450
|
+
const reasons = ['Verification found issues:'];
|
|
451
|
+
for (const check of failedChecks) {
|
|
452
|
+
reasons.push(`- ${check.name}: ${check.error || 'Failed'}`);
|
|
453
|
+
}
|
|
454
|
+
return reasons.join('\n');
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Generate suggested fixes for failed checks.
|
|
458
|
+
*/
|
|
459
|
+
function generateSuggestedFixes(checks) {
|
|
460
|
+
const fixes = [];
|
|
461
|
+
const failedChecks = checks.filter(c => !c.passed && !c.skipped);
|
|
462
|
+
for (const check of failedChecks) {
|
|
463
|
+
switch (check.name) {
|
|
464
|
+
case 'Build':
|
|
465
|
+
fixes.push('Fix build errors by checking TypeScript types and import statements');
|
|
466
|
+
break;
|
|
467
|
+
case 'Tests':
|
|
468
|
+
fixes.push('Fix failing tests or update test expectations if behavior changed intentionally');
|
|
469
|
+
break;
|
|
470
|
+
case 'Lint':
|
|
471
|
+
fixes.push('Run linter and fix code style issues');
|
|
472
|
+
break;
|
|
473
|
+
case 'API Probe':
|
|
474
|
+
fixes.push('Ensure API server is running and endpoints are correctly implemented');
|
|
475
|
+
break;
|
|
476
|
+
case 'CLI Test':
|
|
477
|
+
fixes.push('Verify CLI entry point exists and --help flag is implemented');
|
|
478
|
+
break;
|
|
479
|
+
default:
|
|
480
|
+
if (check.error) {
|
|
481
|
+
fixes.push(`Investigate: ${check.error.split('\n')[0]}`);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return [...new Set(fixes)]; // Remove duplicates
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Format verification result for display.
|
|
489
|
+
*/
|
|
490
|
+
export function formatVerificationResult(result) {
|
|
491
|
+
const lines = [];
|
|
492
|
+
lines.push(`\n╔═══════════════════════════════════════════════════════════════`);
|
|
493
|
+
lines.push(`║ VERIFICATION AGENT — 'try to break it' mode`);
|
|
494
|
+
lines.push(`╠═══════════════════════════════════════════════════════════════`);
|
|
495
|
+
lines.push(`║ VERDICT: ${result.verdict}`);
|
|
496
|
+
lines.push(`╠═══════════════════════════════════════════════════════════════`);
|
|
497
|
+
lines.push(`║ ${result.summary}`);
|
|
498
|
+
lines.push(`╠═══════════════════════════════════════════════════════════════`);
|
|
499
|
+
for (const check of result.checks) {
|
|
500
|
+
const status = check.skipped ? '⊘' : check.passed ? '✓' : '✗';
|
|
501
|
+
lines.push(`║ ${status} ${check.name}`);
|
|
502
|
+
if (check.skipped) {
|
|
503
|
+
lines.push(`║ └─ ${check.skipReason}`);
|
|
504
|
+
}
|
|
505
|
+
else if (!check.passed && check.error) {
|
|
506
|
+
const errorLines = check.error.split('\n').slice(0, 2);
|
|
507
|
+
for (const line of errorLines) {
|
|
508
|
+
lines.push(`║ └─ ${line.slice(0, 60)}`);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
lines.push(`╠═══════════════════════════════════════════════════════════════`);
|
|
513
|
+
lines.push(`║ REASONING:`);
|
|
514
|
+
const reasoningLines = result.reasoning.split('\n');
|
|
515
|
+
for (const line of reasoningLines) {
|
|
516
|
+
lines.push(`║ ${line}`);
|
|
517
|
+
}
|
|
518
|
+
if (result.suggestedFixes && result.suggestedFixes.length > 0) {
|
|
519
|
+
lines.push(`╠═══════════════════════════════════════════════════════════════`);
|
|
520
|
+
lines.push(`║ SUGGESTED FIXES:`);
|
|
521
|
+
for (const fix of result.suggestedFixes) {
|
|
522
|
+
lines.push(`║ • ${fix}`);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
lines.push(`╚═══════════════════════════════════════════════════════════════\n`);
|
|
526
|
+
return lines.join('\n');
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=verification-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-agent.js","sourceRoot":"","sources":["../src/verification-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface AskResult {
|
|
2
|
+
model: string;
|
|
3
|
+
path: string;
|
|
4
|
+
content: string;
|
|
5
|
+
response?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Real ask workflow using provider infrastructure
|
|
10
|
+
*
|
|
11
|
+
* Makes an actual API call to the specified provider/model
|
|
12
|
+
*/
|
|
13
|
+
export declare function runAskWorkflow(model: string, prompt: string): Promise<AskResult>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { writeAsk } from '../state/artifacts.js';
|
|
2
|
+
import { getPreset } from '../providers.js';
|
|
3
|
+
import OpenAI from 'openai';
|
|
4
|
+
import { loadConfig } from '../config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Real ask workflow using provider infrastructure
|
|
7
|
+
*
|
|
8
|
+
* Makes an actual API call to the specified provider/model
|
|
9
|
+
*/
|
|
10
|
+
export async function runAskWorkflow(model, prompt) {
|
|
11
|
+
const config = loadConfig();
|
|
12
|
+
let response;
|
|
13
|
+
let error;
|
|
14
|
+
try {
|
|
15
|
+
// Check if model is a provider preset name (e.g., "anthropic", "openai")
|
|
16
|
+
const preset = getPreset(model);
|
|
17
|
+
let client;
|
|
18
|
+
let actualModel;
|
|
19
|
+
if (preset) {
|
|
20
|
+
// Using a provider preset
|
|
21
|
+
const apiKey = preset.envKey ? process.env[preset.envKey] : config.apiKey;
|
|
22
|
+
if (!apiKey) {
|
|
23
|
+
throw new Error(`API key not found. Set ${preset.envKey || 'API key'} via environment or config.`);
|
|
24
|
+
}
|
|
25
|
+
client = new OpenAI({
|
|
26
|
+
apiKey,
|
|
27
|
+
baseURL: preset.baseUrl,
|
|
28
|
+
});
|
|
29
|
+
actualModel = preset.defaultModel;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Assume model is a specific model name, use current configured provider
|
|
33
|
+
if (!config.apiKey) {
|
|
34
|
+
throw new Error('API key not configured. Run: bobo config set apiKey <your-key>');
|
|
35
|
+
}
|
|
36
|
+
client = new OpenAI({
|
|
37
|
+
apiKey: config.apiKey,
|
|
38
|
+
baseURL: config.baseUrl,
|
|
39
|
+
});
|
|
40
|
+
actualModel = model;
|
|
41
|
+
}
|
|
42
|
+
// Make the API call
|
|
43
|
+
const completion = await client.chat.completions.create({
|
|
44
|
+
model: actualModel,
|
|
45
|
+
messages: [
|
|
46
|
+
{ role: 'user', content: prompt },
|
|
47
|
+
],
|
|
48
|
+
max_tokens: 4000,
|
|
49
|
+
});
|
|
50
|
+
response = completion.choices[0]?.message?.content || '(no response)';
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
error = e.message;
|
|
54
|
+
}
|
|
55
|
+
// Build content
|
|
56
|
+
let content;
|
|
57
|
+
if (error) {
|
|
58
|
+
content = `# Ask\n\n## Model\n${model}\n\n## Prompt\n${prompt}\n\n## Error\n${error}\n\n## Limitation\nAPI call failed. Check your API key and model availability.\n`;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
content = `# Ask\n\n## Model\n${model}\n\n## Prompt\n${prompt}\n\n## Response\n\n${response}\n`;
|
|
62
|
+
}
|
|
63
|
+
const path = writeAsk(model, content);
|
|
64
|
+
return { model, path, content, response, error };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/workflows/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU1C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,MAAc;IAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,QAA4B,CAAC;IACjC,IAAI,KAAyB,CAAC;IAE9B,IAAI,CAAC;QACH,yEAAyE;QACzE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,MAAc,CAAC;QACnB,IAAI,WAAmB,CAAC;QAExB,IAAI,MAAM,EAAE,CAAC;YACX,0BAA0B;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1E,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,IAAI,SAAS,6BAA6B,CAAC,CAAC;YACrG,CAAC;YAED,MAAM,GAAG,IAAI,MAAM,CAAC;gBAClB,MAAM;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;YACpF,CAAC;YAED,MAAM,GAAG,IAAI,MAAM,CAAC;gBAClB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACtD,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC;YACD,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,eAAe,CAAC;IACxE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,GAAI,CAAW,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAe,CAAC;IAEpB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,GAAG,sBAAsB,KAAK,kBAAkB,MAAM,iBAAiB,KAAK,kFAAkF,CAAC;IACxK,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,sBAAsB,KAAK,kBAAkB,MAAM,sBAAsB,QAAQ,IAAI,CAAC;IAClG,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface InterviewResult {
|
|
2
|
+
path: string;
|
|
3
|
+
questions: string[];
|
|
4
|
+
agentId?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Interview workflow with Socratic questioning approach
|
|
8
|
+
*
|
|
9
|
+
* Generates context-aware questions and optionally spawns an agent for deep exploration
|
|
10
|
+
*/
|
|
11
|
+
export declare function runInterviewWorkflow(topic: string): Promise<InterviewResult>;
|