oh-my-agent 4.26.3 → 4.27.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.
Files changed (2) hide show
  1. package/bin/cli.js +1 -1
  2. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -529,7 +529,7 @@ source: migrated
529
529
  </html>`;function XB(){let $=bx();if(!Zx($))Wx($,{recursive:!0});let I=Px((J,G)=>{if(J.url==="/api/state")G.writeHead(200,{"Content-Type":"application/json"}),G.end(JSON.stringify(_5($)));else G.writeHead(200,{"Content-Type":"text/html"}),G.end(Ex)}),_=new U5.default({server:I}),u=null;function U(J,G){if(u)clearTimeout(u);u=setTimeout(()=>{let g=JSON.stringify({type:"update",event:J,file:G,data:_5($)});_.clients.forEach((q)=>{if(q.readyState===I5.default.OPEN)q.send(g)})},100)}let z=fu($,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:200,pollInterval:50}});z.on("all",(J,G)=>U(J,qB(G))),_.on("connection",(J)=>{J.send(JSON.stringify({type:"full",data:_5($)})),J.on("error",()=>J.terminate())}),process.on("SIGINT",()=>{console.log(`
530
530
  Shutting down...`),z.close(),_.clients.forEach((J)=>{J.terminate()}),_.close(()=>I.close(()=>process.exit(0))),setTimeout(()=>process.exit(1),3000).unref()}),process.on("SIGTERM",()=>process.emit("SIGINT")),I.listen(gB,()=>{console.log(S0.magenta(`
531
531
  \uD83D\uDEF8 Serena Memory Dashboard`)),console.log(S0.white(` http://localhost:${gB}`)),console.log(S0.dim(` Watching: ${$}
532
- `))})}var NB={name:"oh-my-agent",version:"4.26.3",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing","gemini"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs",build:"bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify",dev:"bun run cli.ts",lint:"biome check --write --unsafe .",test:"vitest run",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0",chokidar:"^5.0.0",commander:"^14.0.3","p-map":"^7.0.4",picocolors:"^1.1.1",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@biomejs/biome":"2.4.5","@types/bun":"^1.3.10","@types/ws":"^8.18.1",vitest:"^4.0.18"},peerDependencies:{typescript:"^6"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},antigravity:{skillsPath:".agents/skills",skills:["oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestrator","oma-dev-workflow","oma-tf-infra","oma-commit","oma-pdf"]}};import{existsSync as fx,mkdirSync as xx,readdirSync as vU,readFileSync as kx,statSync as G5}from"node:fs";import{basename as yx,join as j4}from"node:path";var r$=H$(b$(),1),ix="●",lx="✓",mx="✗",rx="○",nx="◌";function hx(){if(process.env.MEMORIES_DIR)return process.env.MEMORIES_DIR;let $=process.argv[3];if($)return j4($,".serena","memories");return j4(process.cwd(),".serena","memories")}function HU($){try{return kx($,"utf-8")}catch{return""}}function dx($){try{let I=vU($);if(I.includes("orchestrator-session.md"))return j4($,"orchestrator-session.md");let _=I.filter((u)=>/^session-.*\.md$/.test(u)).map((u)=>({name:u,mtime:G5(j4($,u)).mtimeMs})).sort((u,U)=>U.mtime-u.mtime);if(_.length>0&&_[0])return j4($,_[0].name)}catch{}return null}function cx($){let I=dx($);if(!I)return{id:"N/A",status:"UNKNOWN"};let _=HU(I);if(!_)return{id:"N/A",status:"UNKNOWN"};let u=(_.match(/session-id:\s*(.+)/i)||[])[1]||(_.match(/# Session:\s*(.+)/i)||[])[1]||_.match(/(session-\d{8}-\d{6})/)?.[1]||yx(I,".md"),U="UNKNOWN";if(/IN PROGRESS|RUNNING|## Active|\[IN PROGRESS\]/i.test(_))U="RUNNING";else if(/COMPLETED|DONE|## Completed|\[COMPLETED\]/i.test(_))U="COMPLETED";else if(/FAILED|ERROR|## Failed|\[FAILED\]/i.test(_))U="FAILED";else if(/Step \d+:.*\[/i.test(_))U="RUNNING";return{id:(u||"N/A").trim(),status:U}}function px($){let I=HU(j4($,"task-board.md"));if(!I)return[];let _=[],u=I.split(`
532
+ `))})}var NB={name:"oh-my-agent",version:"4.27.0",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing","gemini"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs",build:"bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify",dev:"bun run cli.ts",lint:"biome check --write --unsafe .",test:"vitest run",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0",chokidar:"^5.0.0",commander:"^14.0.3","p-map":"^7.0.4",picocolors:"^1.1.1",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@biomejs/biome":"2.4.5","@types/bun":"^1.3.10","@types/ws":"^8.18.1",vitest:"^4.0.18"},peerDependencies:{typescript:"^6"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},antigravity:{skillsPath:".agents/skills",skills:["oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestrator","oma-dev-workflow","oma-tf-infra","oma-commit","oma-pdf"]}};import{existsSync as fx,mkdirSync as xx,readdirSync as vU,readFileSync as kx,statSync as G5}from"node:fs";import{basename as yx,join as j4}from"node:path";var r$=H$(b$(),1),ix="●",lx="✓",mx="✗",rx="○",nx="◌";function hx(){if(process.env.MEMORIES_DIR)return process.env.MEMORIES_DIR;let $=process.argv[3];if($)return j4($,".serena","memories");return j4(process.cwd(),".serena","memories")}function HU($){try{return kx($,"utf-8")}catch{return""}}function dx($){try{let I=vU($);if(I.includes("orchestrator-session.md"))return j4($,"orchestrator-session.md");let _=I.filter((u)=>/^session-.*\.md$/.test(u)).map((u)=>({name:u,mtime:G5(j4($,u)).mtimeMs})).sort((u,U)=>U.mtime-u.mtime);if(_.length>0&&_[0])return j4($,_[0].name)}catch{}return null}function cx($){let I=dx($);if(!I)return{id:"N/A",status:"UNKNOWN"};let _=HU(I);if(!_)return{id:"N/A",status:"UNKNOWN"};let u=(_.match(/session-id:\s*(.+)/i)||[])[1]||(_.match(/# Session:\s*(.+)/i)||[])[1]||_.match(/(session-\d{8}-\d{6})/)?.[1]||yx(I,".md"),U="UNKNOWN";if(/IN PROGRESS|RUNNING|## Active|\[IN PROGRESS\]/i.test(_))U="RUNNING";else if(/COMPLETED|DONE|## Completed|\[COMPLETED\]/i.test(_))U="COMPLETED";else if(/FAILED|ERROR|## Failed|\[FAILED\]/i.test(_))U="FAILED";else if(/Step \d+:.*\[/i.test(_))U="RUNNING";return{id:(u||"N/A").trim(),status:U}}function px($){let I=HU(j4($,"task-board.md"));if(!I)return[];let _=[],u=I.split(`
533
533
  `);for(let U of u){if(!U.startsWith("|")||/^\|\s*-+/.test(U))continue;let z=U.split("|").map((q)=>q.trim()).filter(Boolean),J=z[0];if(z.length<2||!J||/^agent$/i.test(J))continue;let G=z[1],g=z[2];_.push({agent:J,status:G||"pending",task:g||""})}return _}function J5($,I){try{let _=vU($).filter((z)=>z.startsWith(`progress-${I}`)&&z.endsWith(".md")).sort().reverse();if(_.length===0||!_[0])return null;let U=HU(j4($,_[0])).match(/turn[:\s]*(\d+)/i);return U?.[1]?parseInt(U[1],10):null}catch{return null}}function ox($){try{let I=vU($).filter((u)=>u.endsWith(".md")&&u!==".gitkeep").map((u)=>({name:u,mtime:G5(j4($,u)).mtimeMs})).sort((u,U)=>U.mtime-u.mtime).slice(0,5),_=[];for(let u of I){let U=u.name.replace(/^(progress|result|session|debug|task)-?/,"").replace(/[-_]agent/,"").replace(/[-_]completion/,"").replace(/\.md$/,"").replace(/[-_]/g," ").trim()||u.name.replace(/\.md$/,""),J=HU(j4($,u.name)).split(`
534
534
  `).map((g)=>g.trim()).filter((g)=>g&&!g.startsWith("---")&&g.length>3),G="";for(let g=J.length-1;g>=0;g--){let q=J[g];if(!q)continue;if(/^\*\*|^#+|^-|^\d+\.|Status|Result|Action|Step/i.test(q)){if(G=q.replace(/^[#*\-\d.]+\s*/,"").replace(/\*\*/g,"").trim(),G.length>5)break}}if(G.length>52)G=`${G.substring(0,49)}...`;if(G)_.push({agent:U,message:G})}return _}catch{return[]}}function tx($){let I=[],_=new Set;try{let u=vU($).filter((U)=>U.endsWith(".md")&&U!==".gitkeep").map((U)=>({name:U,mtime:G5(j4($,U)).mtimeMs})).sort((U,z)=>z.mtime-U.mtime);for(let U of u){let z=HU(j4($,U.name)),J=z.match(/\*\*Agent\*\*:\s*(.+)/i)||z.match(/Agent:\s*(.+)/i)||z.match(/^#+\s*(.+?)\s*Agent/im),G=null;if(J?.[1])G=J[1].trim();else if(/_agent|agent_|-agent/i.test(U.name))G=U.name.replace(/\.md$/,"").replace(/[-_]completion|[-_]progress|[-_]result/gi,"").replace(/[-_]/g," ").trim();if(G&&!_.has(G.toLowerCase())){_.add(G.toLowerCase());let g="unknown";if(/\[COMPLETED\]|## Completed|## Results/i.test(z))g="completed";else if(/\[IN PROGRESS\]|## Progress|IN PROGRESS/i.test(z))g="running";else if(/\[FAILED\]|## Failed|ERROR/i.test(z))g="failed";let q=z.match(/## Task\s*\n+(.+)/i)||z.match(/\*\*Task\*\*:\s*(.+)/i),N=q?.[1]?q[1].trim().substring(0,20):"";I.push({agent:G,status:g,task:N,turn:J5($,G)})}}}catch{}return I}function ax($){let I=$.toLowerCase();if(["running","active","in_progress","in-progress"].includes(I))return`${r$.default.green(ix)} running`;else if(["completed","done","finished"].includes(I))return`${r$.default.cyan(lx)} completed`;else if(["failed","error"].includes(I))return`${r$.default.red(mx)} failed`;else if(["blocked","waiting"].includes(I))return`${r$.default.yellow(rx)} blocked`;return`${r$.default.dim(nx)} pending`}function QB($){console.clear();let I=cx($),u=px($).map((v)=>({...v,turn:J5($,v.agent)}));if(u.length===0)u=tx($);if(u.length===0)try{let v=vU($).filter((O)=>O.startsWith("progress-")&&O.endsWith(".md"));for(let O of v){let T=O.replace(/^progress-/,"").replace(/\.md$/,"");u.push({agent:T,status:"running",task:"",turn:J5($,T)})}}catch{}let U=56,z="═".repeat(U),J=(v)=>" ".repeat(Math.max(0,v)),G=(v)=>r$.default.magenta(v),g=(v)=>r$.default.bold(v),q=(v)=>r$.default.dim(v),N=r$.default.yellow;if(I.status==="RUNNING")N=r$.default.green;else if(I.status==="COMPLETED")N=r$.default.cyan;else if(I.status==="FAILED")N=r$.default.red;console.log(`${G(`╔${z}╗`)}`),console.log(`${G("║")} ${g(G("Serena Memory Dashboard"))}${J(U-25)}${G("║")}`);let X=`Session: ${g(I.id.padEnd(20))} [${N(I.status)}]`;if(console.log(`${G("║")} ${X}${J(U-4-X.length-9)}${G("║")}`),console.log(`${G(`╠${z}╣`)}`),console.log(`${G("║")} ${g(`${"Agent".padEnd(12)} ${"Status".padEnd(12)} ${"Turn".padEnd(6)} ${"Task".padEnd(20)}`)} ${G("║")}`),console.log(`${G("║")} ${q(`${"──────────".padEnd(12)} ${"──────────".padEnd(12)} ${"────".padEnd(6)} ${"──────────────────".padEnd(20)}`)} ${G("║")}`),u.length===0)console.log(`${G("║")} ${q(`No agents detected yet${J(32)}`)}${G("║")}`);else for(let v of u){let O=ax(v.status),T=v.turn!=null?String(v.turn):"-",V=v.task.substring(0,20);console.log(`${G("║")} ${v.agent.padEnd(12)} ${O.padEnd(22)} ${T.padEnd(6)} ${V.padEnd(20)}${G("║")}`)}console.log(`${G(`╠${z}╣`)}`),console.log(`${G("║")} ${g("Latest Activity:")}${J(U-18)}${G("║")}`);let Q=ox($);if(Q.length===0)console.log(`${G("║")} ${q(`No activity yet${J(38)}`)}${G("║")}`);else for(let v of Q){let O=`[${v.agent}] ${v.message}`;console.log(`${G("║")} ${q(O.substring(0,52).padEnd(52))}${G("║")}`)}console.log(`${G(`╠${z}╣`)}`);let Y=`Updated: ${new Date().toLocaleString("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})} | Ctrl+C to exit`;console.log(`${G("║")} ${q(Y)}${J(U-4-Y.length)}${G("║")}`),console.log(`${G(`╚${z}╝`)}`)}async function vB(){let $=hx();if(!fx($))xx($,{recursive:!0}),console.log(r$.default.yellow(`Created ${$} — waiting for memory files...`));console.log(r$.default.magenta(`
535
535
  \uD83D\uDEF8 Serena Terminal Dashboard`)),console.log(r$.default.dim(` Watching: ${$}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "4.26.3",
3
+ "version": "4.27.0",
4
4
  "description": "Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",
5
5
  "type": "module",
6
6
  "bin": {