Lines 221-245javascript
221Stored: ${getGlobalDevFlowDbPath()} (${r.runId})`}async function kd(e={}){let t=e.database??openGlobalDevFlowDatabase(),n,o=null;try{n=e.runId?t.getBenchmarkReport(e.runId):t.getLatestBenchmarkReport(),e.baselineRunId&&(o=t.getBenchmarkReport(e.baselineRunId));}finally{e.database||t.close();}if(!n)throw new Error(e.runId?`Benchmark report "${e.runId}" not found`:"No benchmark reports found. Run `devflow benchmark run` first.");if(e.baselineRunId&&!o)throw new Error(`Benchmark baseline "${e.baselineRunId}" not found`);let r=e.output??"text",s=renderBenchmarkReport(n,r);if(!o||r==="json")return ...
222## Change From Prior Baseline
224${i.map(a=>`- ${a}`).join(`
228Change from ${o.runId}:
229${i.map(a=>`- ${a}`).join(`
230`)}`}function wd(e,t){let n=e.summary.devflow,o=t.summary.devflow;return [Vt("tokensUsed",n.avgTokensUsed,o.avgTokensUsed,false),Vt("filesTouched",n.avgFilesTouched,o.avgFilesTouched,false),Vt("correctnessScore"
231`)}var Fs=D(()=>{});var bt={};j(bt,{resolveRuntimeLocale:()=>Ws,runtimeMessage:()=>X,runtimeMessages:()=>Hs});function Ws(e=process.env){return (e.DEVFLOW_LANG?.trim()||Intl.DateTimeFormat().resolvedOptions().locale).toLowerCase().startsWith("zh")?"zh":"en"}function X(e,t={},n){return Hs[Ws(n)][e].replace(/\{(\w+)\}/gu,(o,r)=>String(t[r]??`{${r}}`))}var Hs,Ce=D(()=>{Hs={en:{starting:"Starting the DevFlow Runtime...",ready:"Dashboard ready at {url}",reused:"Reused the existing DevFlow Runtime.",stopped:"DevFlow Runtime stopped.",notRunning:"No DevFlow Runtime is running.",portInUse:"Port {port} ...
232Run "devflow plugin list" to see available plugins.`);return}console.log(`Installed plugins:
233`),n.forEach(o=>{let r=t.plugins.find(s=>s.name===o);r?(console.log(` ${S.green(r.name)}@${r.version}`
234`);let n=Math.max(...t.plugins.map(o=>o.name.length));t.plugins.forEach(o=>{let r=" ".repeat(n-o.name.length+2);console.
235Install a plugin: devflow plugin install <name>`);}});});var Xs={};j(Xs,{pluginSearchCommand:()=>eg});var eg,ei=D(()=>{jt();eg=new Command("search").description("Search for plugins").argument("<keyword>"
236Try: devflow plugin list`);return}console.log(`Found ${o.length} plugin(s) matching "${e}":
237`),o.forEach(r=>{console.log(` ${S.green(r.name)}@${r.version}`),console.log(` ${r.description}`),r.tags.length>0
238${S.green("\u2713")} ${n}@${o.version} installed and activated`),console.log(`
239Run "devflow plugin list --installed" to verify.`);}catch(o){console.error(`
240${S.red("\u2717")} Installation failed: ${o.message}`),process.exitCode=1;}});});var si={};j(si,{pluginUninstallCommand:()=>rg});var rg,ii=D(()=>{Se();rg=new Command("uninstall").description("Uninstall a plugin").argument("<name>","Plugin name (with or without @devflow-tools/ prefix)").action(async e=>{let n=`@devflow-tools/plugin-${e.replace(/^@devflow-tools\/(?:plugin-)?/,"")}`;console.log(`Uninstalling ${n}...`);try{await ln(n,process.cwd(),!0),console.log(`
241${S.green("\u2713")} ${n} deactivated and uninstalled`);}catch(o){console.error(`
242${S.red("\u2717")} Uninstallation failed: ${o.message}`),process.exitCode=1;}});});function Xt(e){let t=join(e,".devflow","config.json");if(existsSync(t))try{let n=readFileSync(t,"utf-8");if(JSON.parse(n).serverUrl)return "server"}catch{}return "local"}var ai=createRequire(import.meta.url),go="0.0.0";try{go=ai("../package.json").version;}catch{try{go=ai("../../package.json").version;}catch{}}var E=new Command;try{let e=await Promise.resolve().then(()=>(wo(),ko));E.addCommand(e.createDefaultDeliveryCommand());}catch(e){if(!(e instanceof Error)||!/Cannot find package ['"]?@devflow-tools\/deliver ...
243`));}let n=Xt(t);console.error(S.blue(`DevFlow init \u2014 mode: ${n}`));let{initProject:o,renderInitReport:r}=await Promise.resolve().then(()=>(Fo(),Lo)),s=await o(t,{force:e.force,migrateLegacySkills:e.migrateLegacySkills});if
244 ${e} docs synced to .devflow/knowledge/${e}/`));}else {let r=await o.getSources();for(let s of r){let i=await o.syncDocs(s.source.name);for(let a of i)a.added>0?console.log(` ${S.green("\u2713")} ${a.source} \u2192 ${a.added} chunks`):console.log(` ${S.red("\u2717")} ${a.source} \u2014 ${a.errors.join(", ")||"no content"}`);}console.log(S.green(`
245 All docs synced.`));}});fo.command("backfill-vectors").description("Backfill missing knowledge chunk vectors").option("--source <name>","Only backfill one knowledge source").option("--batch-size <count>","Embedding batch size","32").action(async e=>{let{backfillKnowledgeVectors:t}=await Promise.resolve().then(()=>(Nn(),jn)),n=await t({source:e.source,batchSize:Number.parseInt(e.batchSize,10),onProgress:({processed:o,remaining:r})=>{console.log(` vectors: ${o} processed, ${r} remaining`);}});console.log(S.green(`Knowledge vectors ready: ${n.processed} added, ${n.remaining} remaining`));});fo ...
Long lines were clipped for display.