@orangepro/orangepro-mcp 0.2.1 → 0.2.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.
@@ -1560,6 +1560,36 @@ export async function opStart(root, opts = {}, deps = defaultDeps()) {
1560
1560
  };
1561
1561
  warnings.push(`auto-prove skipped: ${reason}`);
1562
1562
  }
1563
+ if (!opts.noAuto && providerConfigured && opts.ai !== false) {
1564
+ try {
1565
+ const graphForGeneration = loadGraph(workspacePaths(root).graphPath);
1566
+ const generatedTargets = new Set((graphForGeneration.generated_tests ?? []).map((t) => t.target_symbol_external_id).filter((id) => Boolean(id)));
1567
+ const targetIds = rankRiskGaps(graphForGeneration, { repoRoot: root, limit: START_GENERATE_RISK_LIMIT })
1568
+ .map((gap) => gap.id)
1569
+ .filter((id) => !generatedTargets.has(id));
1570
+ if (targetIds.length) {
1571
+ reportProgress(`generate: drafting tests for top ${targetIds.length} risk target(s)`, { current: 6, total: 8 });
1572
+ let accepted = 0;
1573
+ for (let i = 0; i < targetIds.length; i += START_GENERATE_BATCH_LIMIT) {
1574
+ const batch = targetIds.slice(i, i + START_GENERATE_BATCH_LIMIT);
1575
+ const generated = await opGenerate(root, {
1576
+ ...providerOpts,
1577
+ target_ids: batch,
1578
+ limit: batch.length,
1579
+ prompt_version: opts.promptVersion ?? "v5"
1580
+ }, providerDeps);
1581
+ accepted += generated.generated_tests.length;
1582
+ warnings.push(...generated.warnings.map((w) => `generate: ${w}`));
1583
+ }
1584
+ if (accepted === 0)
1585
+ warnings.push("generate: provider returned no accepted tests for the top risk targets.");
1586
+ }
1587
+ }
1588
+ catch (err) {
1589
+ const reason = err instanceof Error ? err.message : String(err);
1590
+ warnings.push(`generate skipped: ${reason}`);
1591
+ }
1592
+ }
1563
1593
  // G1: persist the distilled, already-redacted attempt classifications so
1564
1594
  // `opro doctor --proof` and standalone report regens can explain blockers
1565
1595
  // after this process exits. Sidecar only — never read by the oracle, RTM,
@@ -1680,6 +1710,8 @@ export async function opStart(root, opts = {}, deps = defaultDeps()) {
1680
1710
  }
1681
1711
  const NO_PROVIDER_MESSAGE = 'No model provider configured. Set OPENAI_API_KEY (or OLLAMA_BASE_URL / ANTHROPIC_API_KEY) in your shell environment or a .env.provider.local file to generate with your own model, or pass provider="deterministic" (or set ORANGEPRO_ALLOW_DETERMINISTIC=1) to use the offline deterministic stand-in. No tests were generated.';
1682
1712
  const START_RTM_LIMIT = 500;
1713
+ const START_GENERATE_RISK_LIMIT = 20;
1714
+ const START_GENERATE_BATCH_LIMIT = 5;
1683
1715
  const EMPTY_EVIDENCE_SUMMARY = {
1684
1716
  tests: 0,
1685
1717
  tests_with_proof: 0,
@@ -1711,7 +1743,7 @@ export async function opGenerate(root, opts = {}, deps = defaultDeps()) {
1711
1743
  // deterministic stand-in is opt-in only; otherwise return setup guidance
1712
1744
  // instead of silently degrading.
1713
1745
  const providerEnv = loadProviderEnv([root], deps.env);
1714
- const provider = resolveGenerationProvider(providerEnv, opts);
1746
+ const provider = deps.aiProvider ?? resolveGenerationProvider(providerEnv, opts);
1715
1747
  if (!provider) {
1716
1748
  return {
1717
1749
  run_id: null,
@@ -167,7 +167,6 @@ nav.tabs{display:flex;gap:2px;margin:18px 0 0;border-bottom:1px solid var(--bd)}
167
167
  .risk-rank{font-size:10px;color:var(--orange);font-weight:700;margin-bottom:3px}
168
168
  .risk-ep{font-family:var(--mono);font-size:13px;margin:0 0 6px}
169
169
  .risk-ep .v{color:var(--green);font-weight:700}
170
- .risk-desc{font-size:12px;color:var(--muted);margin:0 0 8px;max-width:72ch}
171
170
  .risk-tags{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:8px}
172
171
  .todo{background:var(--gbg);border:1px solid var(--gbd);border-radius:6px;padding:8px 11px;font-size:11.5px;color:var(--ink2)}
173
172
 
@@ -513,7 +512,6 @@ function riskCardHtml(r){
513
512
  }
514
513
  return \`<div class="risk-rank">#\${r.rank}</div>
515
514
  <div class="risk-ep"><span class="v">\${esc(r.verb)}</span> \${esc(r.path)}</div>
516
- <div class="risk-desc">\${esc(r.desc)}</div>
517
515
  <div class="risk-tags">\${tags}</div>
518
516
  <div class="todo">\${esc(r.todo)}</div>\${testsHtml}\${catHtml}\`;
519
517
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orangepro/orangepro-mcp",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "private": false,
5
5
  "description": "OrangePro (`opro`) — a local-first, BYOK CLI + MCP server that builds an evidence graph from a local checkout, ingests runtime coverage, and generates grounded tests. Metadata-only exports; no source upload; generated tests stay local.",
6
6
  "license": "MIT",