oh-my-agent 8.10.1 → 8.10.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.
- package/bin/cli.js +2 -2
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -2007,7 +2007,7 @@ data: ${z}
|
|
|
2007
2007
|
'box-sizing:border-box'
|
|
2008
2008
|
].join(';');
|
|
2009
2009
|
document.body.appendChild(div);
|
|
2010
|
-
})()`),`data:image/png;base64,${
|
|
2010
|
+
})()`),`data:image/png;base64,${await K.screenshot({type:"png",clip:{x:0,y:0,width:m_2,height:i_2},encoding:"base64"})}`}finally{await K.close().catch(()=>{}),await U.close().catch(()=>{})}}function c_2($){if(typeof $!=="object"||$===null)return!1;let z=$;return typeof z.x==="number"&&typeof z.y==="number"&&typeof z.width==="number"&&typeof z.height==="number"&&z.width>0&&z.height>0}async function l_2($){let z;try{z=P7($.dir)}catch(j){return console.error(c8.default.red(j.message)),4}let{dir:G,meta:J}=z,U=$.port??0,K=U>0?U:Mr5,Q;try{Q=await Ir5(K)}catch(j){return console.error(c8.default.red(j.message)),1}let Z=(()=>{try{return Xz(Ar5(new URL(".",import.meta.url)),"ui")}catch{return Xz(process.cwd(),"cli","commands","slide","editor","ui")}})(),Y=Xz(Z,"editor.html"),W=(j)=>{let F=J.order.map((q,N)=>({file:q,index:N,path:Xz(G,q),exists:QB(Xz(G,q))}));m3(j,200,{title:J.title,slideCount:F.length,slides:F})},V=(j,F)=>{try{KB(F)}catch(N){WB(j,400,"text/plain",N.message);return}let q=Xz(G,F);if(!QB(q)){WB(j,404,"text/plain",`Slide not found: ${F}`);return}WB(j,200,"text/html; charset=utf-8",f_2(q,"utf8"))},B=async(j,F)=>{let{slideFile:q,bbox:N}=F;if(typeof q!=="string"){m3(j,400,{error:"slideFile must be a string"});return}try{KB(q)}catch(M){m3(j,400,{error:M.message});return}if(!c_2(N)){m3(j,400,{error:"bbox must be { x, y, width, height } with positive dimensions"});return}let A=Xz(G,q);if(!QB(A)){m3(j,404,{error:`Slide not found: ${q}`});return}try{let M=await ur5(A,N);m3(j,200,{dataUrl:M})}catch(M){m3(j,500,{error:M.message})}},k=(j,F)=>{let{slideFile:q,bbox:N,prompt:A}=F;if(typeof q!=="string"){m3(j,400,{error:"slideFile must be a string"});return}try{KB(q)}catch(O){m3(j,400,{error:O.message});return}if(!c_2(N)){m3(j,400,{error:"bbox must be { x, y, width, height } with positive dimensions"});return}if(typeof A!=="string"||A.trim().length===0){m3(j,400,{error:"prompt must be a non-empty string"});return}let M=Xz(G,q);if(!QB(M)){m3(j,404,{error:`Slide not found: ${q}`});return}let I=`edit-${Date.now()}`;m3(j,200,{editId:I,status:"dispatched"}),vr5(q,()=>new Promise((O)=>{g_2({workDir:G,slideFile:q,bbox:N,prompt:A.trim(),onProgress:(D)=>{ZB("progress",D.replace(/\n/g,"\\n"))},onDone:(D)=>{ZB("done",String(D)),O()},onError:(D)=>{ZB("progress",`[error] ${D.message}`),ZB("done","1"),O()}})})).catch((O)=>{ZB("progress",`[lock error] ${O.message}`),ZB("done","1")})},L=(j,F)=>{F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"});let q={res:F,editId:String(Date.now())};kQ.add(q);let N=setInterval(()=>{try{F.write(`: heartbeat
|
|
2011
2011
|
|
|
2012
2012
|
`)}catch{clearInterval(N),kQ.delete(q)}},15000),A=()=>{clearInterval(N),kQ.delete(q)};j.on("close",A),F.on("close",A)},X=(j,F)=>{let q=F.slideFile;if(typeof q!=="string"){m3(j,400,{error:"slideFile must be a string"});return}try{KB(q)}catch(A){m3(j,400,{error:A.message});return}let N=Xz(G,q);if(!QB(N)){m3(j,404,{error:`Slide not found: ${q}`});return}m3(j,200,{ok:!0,file:q,path:N})},H=async(j,F)=>{let q=j.method??"GET",A=new URL(j.url??"/",`http://${VT}`).pathname;if(q==="GET"&&A==="/"){if(QB(Y))WB(F,200,"text/html; charset=utf-8",f_2(Y,"utf8"));else WB(F,500,"text/plain","Editor UI not found");return}if(q==="GET"&&A==="/slides"){W(F);return}if(q==="GET"&&A.startsWith("/slide-file/")){V(F,decodeURIComponent(A.slice(12)));return}if(q==="GET"&&A==="/events"){L(j,F);return}if(q==="POST"&&A==="/screenshot"){await B(F,await vt(j));return}if(q==="POST"&&A==="/edit"){k(F,await vt(j));return}if(q==="POST"&&A==="/save"){X(F,await vt(j));return}WB(F,404,"text/plain","Not found")};return new Promise((j)=>{let F=qr5((N,A)=>{H(N,A).catch((M)=>{try{m3(A,500,{error:M.message})}catch{}})});F.listen(Q,VT,()=>{let N=`http://${VT}:${Q}`;console.log(c8.default.bold(`
|
|
2013
2013
|
oma slide editor`)),console.log(c8.default.green(` Listening: ${N}`)),console.log(c8.default.dim(` Workspace: ${G}`)),console.log(c8.default.dim(` Slides: ${J.order.length}`)),console.log(c8.default.dim(` Press Ctrl+C to stop.
|
|
@@ -2232,7 +2232,7 @@ Fetched and cached design.md for "${z}"`)),console.log(M5.default.dim(` Cached
|
|
|
2232
2232
|
`);if(e2(X,"Overview"),L.totalSpawns>0){let j=Object.entries(L.byVendor).sort(([,q],[,N])=>N.tokens-q.tokens).map(([q,N])=>` ${q.padEnd(12)} ${Ri2(N.tokens).padStart(12)} tokens · ${String(N.spawns).padStart(3)} spawns · ${wi2(N.usd).padStart(7)}`),F=[Y7.default.bold("\uD83D\uDCB0 Cost Telemetry (all sessions)"),"┌─────────────────────┬──────────────┐",`│ ${Y7.default.bold("Metric")} │ ${Y7.default.bold("Value")} │`,"├─────────────────────┼──────────────┤",`│ Total tokens (est.) │ ${Ri2(L.totalTokens).padEnd(12)} │`,`│ Total spawns │ ${String(L.totalSpawns).padEnd(12)} │`,`│ Estimated USD │ ${wi2(L.estimatedUsd).padEnd(12)} │`,"└─────────────────────┴──────────────┘",Y7.default.dim("By vendor (sorted by tokens):"),...j,Y7.default.dim("Estimate is input-only (prompt char approximation); output tokens not yet tracked."),Y7.default.dim("Configure session.quota_cap in .agents/oma-config.yaml to enforce budgets.")].join(`
|
|
2233
2233
|
`);e2(F,"Cost")}let H=Object.entries(U.skillsUsed).sort(([,j],[,F])=>F-j).slice(0,5);if(H.length>0){let j=[Y7.default.bold("\uD83C\uDFC6 Top Skills Used"),...H.map(([F,q],N)=>` ${N+1}. ${F} (${q})`)].join(`
|
|
2234
2234
|
`);e2(j,"Skills")}O5(Y7.default.dim(`Data stored in: ${J}`))}function Ei2($){Z1($.command("stats").description("View productivity metrics").option("--reset","Reset metrics data")).action(z5(async(z)=>{await Ti2(G1(z),z.reset)},{supportsJsonOutput:!0}))}H7();var Q8=i2(C5(),1);import*as o8 from"node:fs";import*as c3 from"node:path";var k64="oma-config.yaml",X64="mcp.json",H64="<!-- oma:generated -->";function yQ($){try{let z=o8.lstatSync($);if(z.isSymbolicLink())return"symlink";if(z.isDirectory())return"dir";return"file"}catch{return null}}function j64($){try{return o8.readFileSync($,"utf-8").includes(H64)}catch{return!1}}function d22($){try{return o8.readdirSync($,{withFileTypes:!0})}catch{return[]}}function F64($){let z=[],G=[],J=c3.join($,T1);for(let V of d22(J)){let B=c3.join(J,V.name),k=yQ(B);if(k===null)continue;let L;if(V.name==="_version.json")L="oma install metadata (saveLocalVersion)";else if(V.name==="_shared")L="shared assets (installShared)";else L="skill directory (installSkill)";z.push({path:B,kind:k,reason:L})}let U=c3.join($,".agents","workflows");if(yQ(U)==="dir")z.push({path:U,kind:"dir",reason:"created by installWorkflows"});let K=c3.join($,".agents","rules");if(yQ(K)==="dir")z.push({path:K,kind:"dir",reason:"created by installRules"});let Q=c3.join($,".agents","config");if(yQ(Q)==="dir")z.push({path:Q,kind:"dir",reason:"created by installConfigs"});let Z=c3.join($,".agents",k64);if(yQ(Z)!==null)G.push({path:Z,kind:"file",reason:"user preferences"});let Y=c3.join($,".agents",X64);if(yQ(Y)!==null)G.push({path:Y,kind:"file",reason:"may contain user MCP servers"});for(let[V,B]of Object.entries(Z8)){let L=i7()==="global"?B.homePath:B.projectPath,X=c3.join($,L);for(let H of d22(X)){let j=c3.join(X,H.name),F=yQ(j);if(F===null)continue;if(F==="symlink")z.push({path:j,kind:"symlink",reason:`created by createVendorSymlinks (${V})`});else G.push({path:j,kind:F,reason:"user-authored skill"})}}let W=c3.join($,".github","prompts");for(let V of d22(W)){if(!V.isFile()||!V.name.endsWith(".prompt.md"))continue;let B=c3.join(W,V.name);if(j64(B))z.push({path:B,kind:"file",reason:"generated by installCopilotWorkflowPrompts (oma:generated)"})}return{omaOwned:z,userOwned:G}}function Pi2($,z){let G=c3.relative(z,$);return c3.join("<root>",G)}function q64($,z,G){let J=$.length===0?[Q8.default.dim(" (nothing to remove)")]:$.map((Q)=>` ${Q8.default.red("✗")} ${Pi2(Q.path,G).padEnd(55)} ${Q8.default.dim(`(${Q.kind}, ${Q.reason})`)}`),U=z.length===0?[Q8.default.dim(" (none)")]:z.map((Q)=>` ${Q8.default.green("✓")} ${Pi2(Q.path,G).padEnd(55)} ${Q8.default.dim(`(${Q.reason})`)}`),K=[Q8.default.bold("The following oma-owned entries will be removed:"),...J,"",Q8.default.bold("The following user-owned entries will be preserved:"),...U].join(`
|
|
2235
|
-
`);e2(K,"Uninstall preview")}function N64($){for(let G of $){if(G.kind!=="symlink")continue;try{o8.unlinkSync(G.path)}catch{}}for(let G of $){if(G.kind!=="file")continue;try{o8.unlinkSync(G.path)}catch{}}let z=$.filter((G)=>G.kind==="dir").sort((G,J)=>J.path.split(c3.sep).length-G.path.split(c3.sep).length);for(let G of z)try{o8.rmSync(G.path,{recursive:!0,force:!0})}catch{}}async function Ci2($={}){let z=yZ(),G=$.yes===!0||process.env.OMA_YES==="1"||process.env.CI==="true"||process.env.CI==="1",{omaOwned:J,userOwned:U}=F64(z);if(q64(J,U,z),$.dryRun){O5(Q8.default.yellow("Dry-run — no files were changed."));return}if(J.length===0){O5(Q8.default.dim("Nothing to remove."));return}if(!G){let K=await _1({message:`Remove ${J.length} oma-owned entries from ${z}?`,initialValue:!1});if($4(K)||!K){c4("Uninstall cancelled.");return}}N64(J),O5(Q8.default.green("Uninstall complete. User-owned files were preserved."))}function bi2($){$.command("uninstall").description("Remove oh-my-agent's owned files (preserves oma-config.yaml, mcp.json, and user-authored skills)").option("--dry-run","Preview what would be removed without deleting").option("-y, --yes","Skip confirmation prompt").action(z5(async(z)=>{let G=$.opts();await Ci2({yes:z.yes,dryRun:z.dryRun,global:G.global})}))}H7();var Q1=i2(C5(),1);import{execSync as hi2}from"node:child_process";import{cpSync as OE,existsSync as vz,mkdirSync as p22,readFileSync as IE,rmSync as a22,writeFileSync as o22}from"node:fs";import{homedir as u64,tmpdir as T64}from"node:os";import{join as b7}from"node:path";var ME=i2(C5(),1);import{execSync as A64,spawn as M64}from"node:child_process";import{realpathSync as yi2}from"node:fs";import Zq from"node:process";var SQ="oh-my-agent";function D64($=Zq.argv[1]){if(!$)return{packageManager:"unknown",isGlobal:!1};if(Zq.env.IS_BINARY==="true")return{packageManager:"binary",isGlobal:!0,updateMessage:"Running as a standalone binary. Download the latest release from GitHub."};let z;try{z=k8(yi2($))}catch{return{packageManager:"unknown",isGlobal:!1}}if(z.includes("/.npm/_npx")||z.includes("/npm/_npx"))return{packageManager:"npx",isGlobal:!1,updateMessage:"Running via npx, auto-update not applicable."};if(z.includes("/.pnpm/_pnpx")||z.includes("/.cache/pnpm/dlx"))return{packageManager:"pnpx",isGlobal:!1,updateMessage:"Running via pnpx, auto-update not applicable."};if(z.includes("/.bun/install/cache"))return{packageManager:"bunx",isGlobal:!1,updateMessage:"Running via bunx, auto-update not applicable."};if(Zq.platform==="darwin")try{let G=A64(`brew --prefix ${SQ}`,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();if(G){let J=k8(yi2(G));if(z.startsWith(J))return{packageManager:"homebrew",isGlobal:!0,updateCommand:`brew upgrade ${SQ}`,updateMessage:"Installed via Homebrew. Updating in background..."}}}catch{}if(z.includes("/.pnpm/global")||z.includes("/.local/share/pnpm"))return{packageManager:"pnpm",isGlobal:!0,updateCommand:`pnpm add -g ${SQ}@latest`,updateMessage:"Installed via pnpm. Updating in background..."};if(z.includes("/.yarn/global"))return{packageManager:"yarn",isGlobal:!0,updateCommand:`yarn global add ${SQ}@latest`,updateMessage:"Installed via yarn. Updating in background..."};if(z.includes("/.bun/install/global"))return{packageManager:"bun",isGlobal:!0,updateCommand:`bun add -g ${SQ}@latest`,updateMessage:"Installed via bun. Updating in background..."};return{packageManager:"npm",isGlobal:!0,updateCommand:`npm install -g ${SQ}@latest`,updateMessage:"Installed via npm. Updating in background..."}}var Si2=/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/;function O64($,z){let G=$.match(Si2),J=z.match(Si2);if(!G||!J)return!1;for(let U=1;U<=3;U++){let K=Number(G[U]),Q=Number(J[U]);if(K<Q)return!0;if(K>Q)return!1}return!1}async function I64($=SQ,z=2000){try{let G=await D8.get(`https://registry.npmjs.org/${$}/latest`,{timeout:z});return typeof G.data?.version==="string"?G.data.version:null}catch{return null}}async function _i2($){if(!$.enabled)return{triggered:!1,reason:"disabled"};if(Zq.env.OMA_SKIP_VERSION_CHECK==="1")return{triggered:!1,reason:"skipped-env"};if(Zq.env.NODE_ENV==="development")return{triggered:!1,reason:"skipped-env"};let z=await I64();if(!z)return{triggered:!1,reason:"fetch-failed"};if(!O64($.currentVersion,z))return{triggered:!1,reason:"up-to-date",latest:z};let G=D64();if(!G.updateCommand)return $.onNotice?.(ME.default.yellow(`global oh-my-agent ${$.currentVersion} → ${z} available. ${G.updateMessage??"Update manually."}`)),{triggered:!1,reason:"non-upgradable",latest:z};try{return M64(G.updateCommand,{stdio:"ignore",shell:!0,detached:!0}).unref(),$.onSpawnStart?.(ME.default.cyan(`global oh-my-agent ${$.currentVersion} → ${z} updating in background. New version applies on next run.`)),{triggered:!0,latest:z}}catch{return $.onNotice?.(ME.default.yellow(`global oh-my-agent ${$.currentVersion} → ${z} available. Run: ${G.updateCommand}`)),{triggered:!1,reason:"spawn-failed",latest:z}}}var DE={name:"oh-my-agent",version:"8.10.
|
|
2235
|
+
`);e2(K,"Uninstall preview")}function N64($){for(let G of $){if(G.kind!=="symlink")continue;try{o8.unlinkSync(G.path)}catch{}}for(let G of $){if(G.kind!=="file")continue;try{o8.unlinkSync(G.path)}catch{}}let z=$.filter((G)=>G.kind==="dir").sort((G,J)=>J.path.split(c3.sep).length-G.path.split(c3.sep).length);for(let G of z)try{o8.rmSync(G.path,{recursive:!0,force:!0})}catch{}}async function Ci2($={}){let z=yZ(),G=$.yes===!0||process.env.OMA_YES==="1"||process.env.CI==="true"||process.env.CI==="1",{omaOwned:J,userOwned:U}=F64(z);if(q64(J,U,z),$.dryRun){O5(Q8.default.yellow("Dry-run — no files were changed."));return}if(J.length===0){O5(Q8.default.dim("Nothing to remove."));return}if(!G){let K=await _1({message:`Remove ${J.length} oma-owned entries from ${z}?`,initialValue:!1});if($4(K)||!K){c4("Uninstall cancelled.");return}}N64(J),O5(Q8.default.green("Uninstall complete. User-owned files were preserved."))}function bi2($){$.command("uninstall").description("Remove oh-my-agent's owned files (preserves oma-config.yaml, mcp.json, and user-authored skills)").option("--dry-run","Preview what would be removed without deleting").option("-y, --yes","Skip confirmation prompt").action(z5(async(z)=>{let G=$.opts();await Ci2({yes:z.yes,dryRun:z.dryRun,global:G.global})}))}H7();var Q1=i2(C5(),1);import{execSync as hi2}from"node:child_process";import{cpSync as OE,existsSync as vz,mkdirSync as p22,readFileSync as IE,rmSync as a22,writeFileSync as o22}from"node:fs";import{homedir as u64,tmpdir as T64}from"node:os";import{join as b7}from"node:path";var ME=i2(C5(),1);import{execSync as A64,spawn as M64}from"node:child_process";import{realpathSync as yi2}from"node:fs";import Zq from"node:process";var SQ="oh-my-agent";function D64($=Zq.argv[1]){if(!$)return{packageManager:"unknown",isGlobal:!1};if(Zq.env.IS_BINARY==="true")return{packageManager:"binary",isGlobal:!0,updateMessage:"Running as a standalone binary. Download the latest release from GitHub."};let z;try{z=k8(yi2($))}catch{return{packageManager:"unknown",isGlobal:!1}}if(z.includes("/.npm/_npx")||z.includes("/npm/_npx"))return{packageManager:"npx",isGlobal:!1,updateMessage:"Running via npx, auto-update not applicable."};if(z.includes("/.pnpm/_pnpx")||z.includes("/.cache/pnpm/dlx"))return{packageManager:"pnpx",isGlobal:!1,updateMessage:"Running via pnpx, auto-update not applicable."};if(z.includes("/.bun/install/cache"))return{packageManager:"bunx",isGlobal:!1,updateMessage:"Running via bunx, auto-update not applicable."};if(Zq.platform==="darwin")try{let G=A64(`brew --prefix ${SQ}`,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();if(G){let J=k8(yi2(G));if(z.startsWith(J))return{packageManager:"homebrew",isGlobal:!0,updateCommand:`brew upgrade ${SQ}`,updateMessage:"Installed via Homebrew. Updating in background..."}}}catch{}if(z.includes("/.pnpm/global")||z.includes("/.local/share/pnpm"))return{packageManager:"pnpm",isGlobal:!0,updateCommand:`pnpm add -g ${SQ}@latest`,updateMessage:"Installed via pnpm. Updating in background..."};if(z.includes("/.yarn/global"))return{packageManager:"yarn",isGlobal:!0,updateCommand:`yarn global add ${SQ}@latest`,updateMessage:"Installed via yarn. Updating in background..."};if(z.includes("/.bun/install/global"))return{packageManager:"bun",isGlobal:!0,updateCommand:`bun add -g ${SQ}@latest`,updateMessage:"Installed via bun. Updating in background..."};return{packageManager:"npm",isGlobal:!0,updateCommand:`npm install -g ${SQ}@latest`,updateMessage:"Installed via npm. Updating in background..."}}var Si2=/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/;function O64($,z){let G=$.match(Si2),J=z.match(Si2);if(!G||!J)return!1;for(let U=1;U<=3;U++){let K=Number(G[U]),Q=Number(J[U]);if(K<Q)return!0;if(K>Q)return!1}return!1}async function I64($=SQ,z=2000){try{let G=await D8.get(`https://registry.npmjs.org/${$}/latest`,{timeout:z});return typeof G.data?.version==="string"?G.data.version:null}catch{return null}}async function _i2($){if(!$.enabled)return{triggered:!1,reason:"disabled"};if(Zq.env.OMA_SKIP_VERSION_CHECK==="1")return{triggered:!1,reason:"skipped-env"};if(Zq.env.NODE_ENV==="development")return{triggered:!1,reason:"skipped-env"};let z=await I64();if(!z)return{triggered:!1,reason:"fetch-failed"};if(!O64($.currentVersion,z))return{triggered:!1,reason:"up-to-date",latest:z};let G=D64();if(!G.updateCommand)return $.onNotice?.(ME.default.yellow(`global oh-my-agent ${$.currentVersion} → ${z} available. ${G.updateMessage??"Update manually."}`)),{triggered:!1,reason:"non-upgradable",latest:z};try{return M64(G.updateCommand,{stdio:"ignore",shell:!0,detached:!0}).unref(),$.onSpawnStart?.(ME.default.cyan(`global oh-my-agent ${$.currentVersion} → ${z} updating in background. New version applies on next run.`)),{triggered:!0,latest:z}}catch{return $.onNotice?.(ME.default.yellow(`global oh-my-agent ${$.currentVersion} → ${z} available. Run: ${G.updateCommand}`)),{triggered:!1,reason:"spawn-failed",latest:z}}}var DE={name:"oh-my-agent",version:"8.10.2",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","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0","@date-fns/tz":"^1.4.1","@napi-rs/keyring":"^1.3.0",axios:"^1.15.0","better-sqlite3":"^12.9.0",chokidar:"^5.0.0",commander:"^14.0.3","date-fns":"^4.2.1",eld:"^2.0.3","fast-xml-parser":"^5",minimatch:"^10.2.5","p-map":"^7.0.4",picocolors:"^1.1.1","puppeteer-core":"^24",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.6.1",unified:"^11.0.5",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},optionalDependencies:{pptxgenjs:"^3.12.0"},devDependencies:{"@biomejs/biome":"^2.4.15","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^24","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.4",typescript:"^6",vitest:"^4.0.18"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","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-scm","oma-pdf","oma-recap"]}};function R64(){if((process.env.LANG??"").toLowerCase().startsWith("ko"))return"ko";return"en"}var w64={"install.sudoRefused":{en:"Refusing to install under sudo. Re-run as the target user.",ko:"sudo로는 설치할 수 없습니다. 대상 사용자로 다시 실행하세요."},"install.cwdHomeWarn":{en:"Running in your HOME directory without --global. This will scatter files in ~/. Are you sure?",ko:"HOME 디렉토리에서 --global 없이 실행 중입니다. ~/ 에 파일이 흩어집니다. 진행할까요?"},"install.ciGlobalWarn":{en:"Running `oma install --global` in CI. This will modify the CI user's HOME.",ko:"CI에서 `oma install --global`을 실행합니다. CI 사용자의 HOME을 수정합니다."},"install.wslHomeInfo":{en:"WSL detected. $HOME is distinct from Windows %USERPROFILE%; oma installs only to the WSL HOME. To install on the Windows side, run from PowerShell.",ko:"WSL이 감지됐습니다. $HOME은 Windows %USERPROFILE%과 다릅니다; oma는 WSL HOME에만 설치합니다. Windows 쪽에 설치하려면 PowerShell에서 실행하세요."},"install.firstGlobalIntro":{en:"This is your first global install of oh-my-agent.",ko:"oh-my-agent를 글로벌로 처음 설치합니다."},"install.lockHeld":{en:"Another oma install/update is running (pid={pid}). Try again in a moment.",ko:"다른 oma install/update가 실행 중입니다 (pid={pid}). 잠시 후 다시 시도하세요."},"install.outroSuccess":{en:`Done! Next steps:
|
|
2236
2236
|
1. Open your project in your IDE
|
|
2237
2237
|
2. Type /orchestrate to spawn a multi-agent workflow
|
|
2238
2238
|
3. Run \`oma doctor\` if anything looks off`,ko:`완료! 다음 단계:
|
package/package.json
CHANGED