oh-my-agent 4.24.1 → 4.25.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
@@ -516,7 +516,7 @@ source: migrated
516
516
  </html>`;function nT(){let $=pf();if(!nf($))hf($,{recursive:!0});let I=cf((g,J)=>{if(g.url==="/api/state")J.writeHead(200,{"Content-Type":"application/json"}),J.end(JSON.stringify(cX($)));else J.writeHead(200,{"Content-Type":"text/html"}),J.end($x)}),_=new dX.default({server:I}),u=null;function U(g,J){if(u)clearTimeout(u);u=setTimeout(()=>{let G=JSON.stringify({type:"update",event:g,file:J,data:cX($)});_.clients.forEach((q)=>{if(q.readyState===hX.default.OPEN)q.send(G)})},100)}let z=b2($,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:200,pollInterval:50}});z.on("all",(g,J)=>U(g,rT(J))),_.on("connection",(g)=>{g.send(JSON.stringify({type:"full",data:cX($)})),g.on("error",()=>g.terminate())}),process.on("SIGINT",()=>{console.log(`
517
517
  Shutting down...`),z.close(),_.clients.forEach((g)=>{g.terminate()}),_.close(()=>I.close(()=>process.exit(0))),setTimeout(()=>process.exit(1),3000).unref()}),process.on("SIGTERM",()=>process.emit("SIGINT")),I.listen(mT,()=>{console.log(P0.magenta(`
518
518
  \uD83D\uDEF8 Serena Memory Dashboard`)),console.log(P0.white(` http://localhost:${mT}`)),console.log(P0.dim(` Watching: ${$}
519
- `))})}var hT={name:"oh-my-agent",version:"4.24.1",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 Ux,mkdirSync as _x,readdirSync as zU,readFileSync as ux,statSync as aX}from"node:fs";import{basename as zx,join as j4}from"node:path";var y$=v$(P$(),1),gx="●",Jx="✓",Gx="✗",qx="○",Xx="◌";function Nx(){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 gU($){try{return ux($,"utf-8")}catch{return""}}function Qx($){try{let I=zU($);if(I.includes("orchestrator-session.md"))return j4($,"orchestrator-session.md");let _=I.filter((u)=>/^session-.*\.md$/.test(u)).map((u)=>({name:u,mtime:aX(j4($,u)).mtimeMs})).sort((u,U)=>U.mtime-u.mtime);if(_.length>0&&_[0])return j4($,_[0].name)}catch{}return null}function vx($){let I=Qx($);if(!I)return{id:"N/A",status:"UNKNOWN"};let _=gU(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]||zx(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 Hx($){let I=gU(j4($,"task-board.md"));if(!I)return[];let _=[],u=I.split(`
519
+ `))})}var hT={name:"oh-my-agent",version:"4.25.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 Ux,mkdirSync as _x,readdirSync as zU,readFileSync as ux,statSync as aX}from"node:fs";import{basename as zx,join as j4}from"node:path";var y$=v$(P$(),1),gx="●",Jx="✓",Gx="✗",qx="○",Xx="◌";function Nx(){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 gU($){try{return ux($,"utf-8")}catch{return""}}function Qx($){try{let I=zU($);if(I.includes("orchestrator-session.md"))return j4($,"orchestrator-session.md");let _=I.filter((u)=>/^session-.*\.md$/.test(u)).map((u)=>({name:u,mtime:aX(j4($,u)).mtimeMs})).sort((u,U)=>U.mtime-u.mtime);if(_.length>0&&_[0])return j4($,_[0].name)}catch{}return null}function vx($){let I=Qx($);if(!I)return{id:"N/A",status:"UNKNOWN"};let _=gU(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]||zx(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 Hx($){let I=gU(j4($,"task-board.md"));if(!I)return[];let _=[],u=I.split(`
520
520
  `);for(let U of u){if(!U.startsWith("|")||/^\|\s*-+/.test(U))continue;let z=U.split("|").map((q)=>q.trim()).filter(Boolean),g=z[0];if(z.length<2||!g||/^agent$/i.test(g))continue;let J=z[1],G=z[2];_.push({agent:g,status:J||"pending",task:G||""})}return _}function tX($,I){try{let _=zU($).filter((z)=>z.startsWith(`progress-${I}`)&&z.endsWith(".md")).sort().reverse();if(_.length===0||!_[0])return null;let U=gU(j4($,_[0])).match(/turn[:\s]*(\d+)/i);return U?.[1]?parseInt(U[1],10):null}catch{return null}}function Yx($){try{let I=zU($).filter((u)=>u.endsWith(".md")&&u!==".gitkeep").map((u)=>({name:u,mtime:aX(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$/,""),g=gU(j4($,u.name)).split(`
521
521
  `).map((G)=>G.trim()).filter((G)=>G&&!G.startsWith("---")&&G.length>3),J="";for(let G=g.length-1;G>=0;G--){let q=g[G];if(!q)continue;if(/^\*\*|^#+|^-|^\d+\.|Status|Result|Action|Step/i.test(q)){if(J=q.replace(/^[#*\-\d.]+\s*/,"").replace(/\*\*/g,"").trim(),J.length>5)break}}if(J.length>52)J=`${J.substring(0,49)}...`;if(J)_.push({agent:U,message:J})}return _}catch{return[]}}function Ox($){let I=[],_=new Set;try{let u=zU($).filter((U)=>U.endsWith(".md")&&U!==".gitkeep").map((U)=>({name:U,mtime:aX(j4($,U)).mtimeMs})).sort((U,z)=>z.mtime-U.mtime);for(let U of u){let z=gU(j4($,U.name)),g=z.match(/\*\*Agent\*\*:\s*(.+)/i)||z.match(/Agent:\s*(.+)/i)||z.match(/^#+\s*(.+?)\s*Agent/im),J=null;if(g?.[1])J=g[1].trim();else if(/_agent|agent_|-agent/i.test(U.name))J=U.name.replace(/\.md$/,"").replace(/[-_]completion|[-_]progress|[-_]result/gi,"").replace(/[-_]/g," ").trim();if(J&&!_.has(J.toLowerCase())){_.add(J.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:J,status:G,task:N,turn:tX($,J)})}}}catch{}return I}function Tx($){let I=$.toLowerCase();if(["running","active","in_progress","in-progress"].includes(I))return`${y$.default.green(gx)} running`;else if(["completed","done","finished"].includes(I))return`${y$.default.cyan(Jx)} completed`;else if(["failed","error"].includes(I))return`${y$.default.red(Gx)} failed`;else if(["blocked","waiting"].includes(I))return`${y$.default.yellow(qx)} blocked`;return`${y$.default.dim(Xx)} pending`}function dT($){console.clear();let I=vx($),u=Hx($).map((v)=>({...v,turn:tX($,v.agent)}));if(u.length===0)u=Ox($);if(u.length===0)try{let v=zU($).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:tX($,T)})}}catch{}let U=56,z="═".repeat(U),g=(v)=>" ".repeat(Math.max(0,v)),J=(v)=>y$.default.magenta(v),G=(v)=>y$.default.bold(v),q=(v)=>y$.default.dim(v),N=y$.default.yellow;if(I.status==="RUNNING")N=y$.default.green;else if(I.status==="COMPLETED")N=y$.default.cyan;else if(I.status==="FAILED")N=y$.default.red;console.log(`${J(`╔${z}╗`)}`),console.log(`${J("║")} ${G(J("Serena Memory Dashboard"))}${g(U-25)}${J("║")}`);let X=`Session: ${G(I.id.padEnd(20))} [${N(I.status)}]`;if(console.log(`${J("║")} ${X}${g(U-4-X.length-9)}${J("║")}`),console.log(`${J(`╠${z}╣`)}`),console.log(`${J("║")} ${G(`${"Agent".padEnd(12)} ${"Status".padEnd(12)} ${"Turn".padEnd(6)} ${"Task".padEnd(20)}`)} ${J("║")}`),console.log(`${J("║")} ${q(`${"──────────".padEnd(12)} ${"──────────".padEnd(12)} ${"────".padEnd(6)} ${"──────────────────".padEnd(20)}`)} ${J("║")}`),u.length===0)console.log(`${J("║")} ${q(`No agents detected yet${g(32)}`)}${J("║")}`);else for(let v of u){let O=Tx(v.status),T=v.turn!=null?String(v.turn):"-",L=v.task.substring(0,20);console.log(`${J("║")} ${v.agent.padEnd(12)} ${O.padEnd(22)} ${T.padEnd(6)} ${L.padEnd(20)}${J("║")}`)}console.log(`${J(`╠${z}╣`)}`),console.log(`${J("║")} ${G("Latest Activity:")}${g(U-18)}${J("║")}`);let Q=Yx($);if(Q.length===0)console.log(`${J("║")} ${q(`No activity yet${g(38)}`)}${J("║")}`);else for(let v of Q){let O=`[${v.agent}] ${v.message}`;console.log(`${J("║")} ${q(O.substring(0,52).padEnd(52))}${J("║")}`)}console.log(`${J(`╠${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(`${J("║")} ${q(Y)}${g(U-4-Y.length)}${J("║")}`),console.log(`${J(`╚${z}╝`)}`)}async function cT(){let $=Nx();if(!Ux($))_x($,{recursive:!0}),console.log(y$.default.yellow(`Created ${$} — waiting for memory files...`));console.log(y$.default.magenta(`
522
522
  \uD83D\uDEF8 Serena Terminal Dashboard`)),console.log(y$.default.dim(` Watching: ${$}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "4.24.1",
3
+ "version": "4.25.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": {