@team-semicolon/semicolony-cli 4.18.60 → 4.18.61

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/dist/bundle.js +2 -2
  2. package/package.json +1 -1
package/dist/bundle.js CHANGED
@@ -3163,7 +3163,7 @@ ${e}`}function iqr(t={}){let e=Buffer.alloc(0);process.stdin.on("data",r=>{e=Buf
3163
3163
  AND r.profile_id = wp.profile_id
3164
3164
  WHERE wp.profile_id = $1
3165
3165
  `,[n]),i=r[0];if(!i)throw new Error(`workspace profile not found: ${n}`);let s=typeof i.active_release_id=="string"?{release_id:i.active_release_id,version:String(i.active_release_version),status:"active",manifest_sha256:String(i.manifest_sha256),source_commit:String(i.source_commit),activated_at:typeof i.activated_at=="string"?i.activated_at:null,activated_by:typeof i.activated_by=="string"?i.activated_by:null}:null,o=(await NJ({profileId:n},e)).map(HN);return{profile_id:n,active_release:s,devices:o}}function Uqr(t){let e=t.active_release,n=["",rp.default.cyan.bold(`SEMO Ops worker release: ${t.profile_id}`)];e?(n.push(` active=${e.version} (${e.release_id})`),n.push(rp.default.gray(` activated=${e.activated_at??"-"} by=${e.activated_by??"-"}`))):n.push(rp.default.yellow(" active=none")),t.devices.length||n.push(rp.default.gray(" registered devices=none"));for(let r of t.devices){let i=r.applied_release_version??r.applied_release_id??"none";n.push(` ${r.worker_id}/${r.device_id} \xB7 applied=${i} \xB7 doctor=${r.last_doctor_status}`)}return n.push(""),n.join(`
3166
- `)}function iWt(t,e){let n=t.command("release").description("immutable worker profile release operator commands");n.command("stage").description("rendered immutable manifest\uB97C staged release\uB85C \uC800\uC7A5\uD569\uB2C8\uB2E4").requiredOption("--profile <id>","workspace profile id").requiredOption("--version <version>","release version").requiredOption("--manifest <file>","already-rendered manifest JSON file").requiredOption("--source-commit <sha>","reviewed source commit SHA").action(async r=>{try{let i=await Pqr({profileId:r.profile,version:r.version,manifestPath:r.manifest,sourceCommit:r.sourceCommit});console.log(rp.default.green(`\u2714 staged worker release ${i.profile_id}@${i.version} (${i.release_id})`))}catch(i){console.error(rp.default.red(`${e} worker release stage failed: ${i instanceof Error?i.message:i}`)),process.exitCode=1}finally{await S()}}),n.command("activate <release-id>").description("staged release\uB97C \uD574\uB2F9 profile\uC758 desired release\uB85C \uD65C\uC131\uD654\uD569\uB2C8\uB2E4").requiredOption("--activated-by <actor>","operator identity").action(async(r,i)=>{try{await Fqr({releaseId:r,activatedBy:i.activatedBy}),console.log(rp.default.green(`\u2714 activated worker release ${r}`))}catch(s){console.error(rp.default.red(`${e} worker release activate failed: ${s instanceof Error?s.message:s}`)),process.exitCode=1}finally{await S()}}),n.command("status").description("profile desired release\uC640 registered device rollout \uC0C1\uD0DC\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4").requiredOption("--profile <id>","workspace profile id").option("--json","JSON output").action(async r=>{try{let i=await Lqr(r.profile);console.log(r.json?JSON.stringify(i,null,2):Uqr(i))}catch(i){console.error(rp.default.red(`${e} worker release status failed: ${i instanceof Error?i.message:i}`)),process.exitCode=1}finally{await S()}})}var hWt=require("node:crypto"),bt=x(require("node:fs")),fWt=x(require("node:os")),Ft=x(require("node:path"));rs();var pWt=/^[A-Fa-f0-9]{64}$/,VN=/^[a-z0-9][a-z0-9-]*$/,qqr=/^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$/,jqr=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,gWt=new Set(["shared-script:feedback-capture.py"]);function lI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function YN(t,e,n){let r=Object.keys(t).find(i=>!e.includes(i));if(r)throw new Error(`${n} has unsupported field: ${r}`)}function bl(t,e){if(typeof t!="string"||t.length===0)throw new Error(`${e} must be a non-empty string`);return t}function jJ(t,e){if(!Array.isArray(t))throw new Error(`${e} must be an array`);return t}function uI(t){return(0,hWt.createHash)("sha256").update(t).digest("hex")}function $J(t){if(t===null)return"null";if(typeof t=="string"||typeof t=="boolean")return JSON.stringify(t);if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("manifest JSON contains a non-finite number");return JSON.stringify(t)}if(Array.isArray(t))return`[${t.map($J).join(",")}]`;if(lI(t))return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${$J(t[e])}`).join(",")}}`;throw new Error("manifest contains a non-JSON value")}function iBe(t,e,n){if(!pWt.test(t)||t.toLowerCase()!==uI(e))throw new Error(`${n}.sha256 does not match its content`)}function hQ(t,e){if(new Set(t).size!==t.length)throw new Error(`${e} must not contain duplicates`)}function $qr(t){if(!lI(t))throw new Error("worker release manifest must be an object");if(YN(t,["schema","contexts","skills","assets","required_doctor_checks"],"worker release manifest"),t.schema!=="semo-ops/worker-release/v1")throw new Error("worker release manifest schema is invalid");let e=jJ(t.contexts,"contexts").map((s,o)=>{if(!lI(s))throw new Error(`contexts[${o}] must be an object`);YN(s,["id","parity_group","claude_content","codex_content","sha256"],`contexts[${o}]`);let a={id:bl(s.id,`contexts[${o}].id`),parity_group:bl(s.parity_group,`contexts[${o}].parity_group`),claude_content:bl(s.claude_content,`contexts[${o}].claude_content`),codex_content:bl(s.codex_content,`contexts[${o}].codex_content`),sha256:bl(s.sha256,`contexts[${o}].sha256`)};if(!VN.test(a.id)||!VN.test(a.parity_group))throw new Error(`contexts[${o}] identifiers are invalid`);return iBe(a.sha256,$J({claude_content:a.claude_content,codex_content:a.codex_content}),`contexts[${o}]`),a}),n=jJ(t.skills,"skills").map((s,o)=>{if(!lI(s))throw new Error(`skills[${o}] must be an object`);YN(s,["name","content","sha256"],`skills[${o}]`);let a={name:bl(s.name,`skills[${o}].name`),content:bl(s.content,`skills[${o}].content`),sha256:bl(s.sha256,`skills[${o}].sha256`)};if(!VN.test(a.name))throw new Error(`skills[${o}] skill name is invalid`);return iBe(a.sha256,a.content,`skills[${o}]`),a}),r=jJ(t.assets,"assets").map((s,o)=>{if(!lI(s))throw new Error(`assets[${o}] must be an object`);YN(s,["id","target","content_base64","sha256","mode"],`assets[${o}]`);let a=bl(s.id,`assets[${o}].id`),c=bl(s.target,`assets[${o}].target`),l=bl(s.content_base64,`assets[${o}].content_base64`),u=bl(s.sha256,`assets[${o}].sha256`),d=bl(s.mode,`assets[${o}].mode`);if(!VN.test(a))throw new Error(`assets[${o}].id is invalid`);if(!gWt.has(c))throw new Error(`assets[${o}] asset target is invalid`);if(d!=="0755"&&d!=="0644")throw new Error(`assets[${o}].mode is invalid`);if(!jqr.test(l))throw new Error(`assets[${o}].content_base64 is invalid`);let A=Buffer.from(l,"base64");if(A.length===0||A.toString("base64")!==l)throw new Error(`assets[${o}].content_base64 is not canonical`);return iBe(u,A,`assets[${o}]`),{id:a,target:c,content:A,sha256:u.toLowerCase(),mode:d}}),i=jJ(t.required_doctor_checks,"required_doctor_checks").map((s,o)=>bl(s,`required_doctor_checks[${o}]`));return hQ(e.map(({id:s})=>s),"context ids"),hQ(e.map(({parity_group:s})=>s),"context parity groups"),hQ(n.map(({name:s})=>s),"skill names"),hQ(r.map(({id:s})=>s),"asset ids"),hQ(r.map(({target:s})=>s),"asset targets"),hQ(i,"required_doctor_checks"),{schema:"semo-ops/worker-release/v1",contexts:e,skills:n,assets:r,required_doctor_checks:i}}function mWt(t){if(!lI(t)||typeof t.release_id!="string"||typeof t.version!="string"||typeof t.manifest_sha256!="string")throw new Error("worker release Gateway response is invalid");if(!qqr.test(t.release_id))throw new Error("worker release id is invalid");let e=Yh(t.version);if(!pWt.test(t.manifest_sha256))throw new Error("worker release manifest sha256 is invalid");return{releaseId:t.release_id,version:e,manifestSha256:t.manifest_sha256.toLowerCase()}}function Gqr(t){let e=mWt(t);if(!lI(t))throw new Error("worker release Gateway response is invalid");YN(t,["release_id","version","manifest","manifest_sha256"],"worker release");let n=$qr(t.manifest);if(uI($J(t.manifest))!==e.manifestSha256)throw new Error("worker release manifest sha256 does not match the canonical manifest");return{...e,manifest:n}}function cBe(t,e){if(e==="shared-script:feedback-capture.py")return Ft.join(t,".semo","shared","scripts","feedback-capture.py");throw new Error("worker release asset target has no local mapping")}function Hqr(t,e){return[Ft.join(t,".claude","CLAUDE.md"),Ft.join(t,".codex","AGENTS.md"),...e.manifest.skills.flatMap(n=>[Ft.join(t,".claude","skills",n.name,"SKILL.md"),Ft.join(t,".agents","skills",n.name,"SKILL.md")]),...e.manifest.assets.map(n=>cBe(t,n.target)),jo(t).workerState,jo(t).releaseState,jo(t).updateLock,jo(t).rollbackFailure]}function ph(t){try{return bt.lstatSync(t)}catch(e){if(e.code==="ENOENT")return null;throw e}}function Su(t,e){let n=Ft.resolve(t),r=Ft.resolve(e),i=Ft.relative(n,r);if(i===""||i.startsWith("..")||Ft.isAbsolute(i))throw new Error("worker release target escapes the worker home");let s=n,o=i.split(Ft.sep);for(let[a,c]of o.entries()){s=Ft.join(s,c);let l=ph(s);if(l){if(l.isSymbolicLink())throw new Error("worker release target contains a symlink");if(a<o.length-1&&!l.isDirectory())throw new Error("worker release target ancestor is not a directory");if(a===o.length-1&&l.isDirectory())throw new Error("worker release file target is a directory")}}}function sWt(t,e){for(let n of Hqr(t,e))Su(t,n)}var fQ=class extends Error{constructor(n,r){super(`worker doctor returned ${n}`);this.doctorStatus=n;this.report=r}};function GJ(t,e){return`<!-- SEMO_OPS_WORKER_RELEASE:${t}:${e} -->`}function oBe(t,e){let n=0,r=0;for(;;){let i=t.indexOf(e,r);if(i<0)return n;n+=1,r=i+e.length}}function oWt(t,e,n){let r=GJ(e,"BEGIN"),i=GJ(e,"END");if(n.includes("SEMO_OPS_WORKER_RELEASE"))throw new Error("worker release context content contains a reserved marker");let s=oBe(t,r),o=oBe(t,i);if(s!==o||s>1)throw new Error(`worker release context ${e} has unpaired managed markers`);let a=n.endsWith(`
3166
+ `)}function iWt(t,e){let n=t.command("release").description("immutable worker profile release operator commands");n.command("stage").description("rendered immutable manifest\uB97C staged release\uB85C \uC800\uC7A5\uD569\uB2C8\uB2E4").requiredOption("--profile <id>","workspace profile id").requiredOption("--release-version <version>","release version").requiredOption("--manifest <file>","already-rendered manifest JSON file").requiredOption("--source-commit <sha>","reviewed source commit SHA").action(async r=>{try{let i=await Pqr({profileId:r.profile,version:r.releaseVersion,manifestPath:r.manifest,sourceCommit:r.sourceCommit});console.log(rp.default.green(`\u2714 staged worker release ${i.profile_id}@${i.version} (${i.release_id})`))}catch(i){console.error(rp.default.red(`${e} worker release stage failed: ${i instanceof Error?i.message:i}`)),process.exitCode=1}finally{await S()}}),n.command("activate <release-id>").description("staged release\uB97C \uD574\uB2F9 profile\uC758 desired release\uB85C \uD65C\uC131\uD654\uD569\uB2C8\uB2E4").requiredOption("--activated-by <actor>","operator identity").action(async(r,i)=>{try{await Fqr({releaseId:r,activatedBy:i.activatedBy}),console.log(rp.default.green(`\u2714 activated worker release ${r}`))}catch(s){console.error(rp.default.red(`${e} worker release activate failed: ${s instanceof Error?s.message:s}`)),process.exitCode=1}finally{await S()}}),n.command("status").description("profile desired release\uC640 registered device rollout \uC0C1\uD0DC\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4").requiredOption("--profile <id>","workspace profile id").option("--json","JSON output").action(async r=>{try{let i=await Lqr(r.profile);console.log(r.json?JSON.stringify(i,null,2):Uqr(i))}catch(i){console.error(rp.default.red(`${e} worker release status failed: ${i instanceof Error?i.message:i}`)),process.exitCode=1}finally{await S()}})}var hWt=require("node:crypto"),bt=x(require("node:fs")),fWt=x(require("node:os")),Ft=x(require("node:path"));rs();var pWt=/^[A-Fa-f0-9]{64}$/,VN=/^[a-z0-9][a-z0-9-]*$/,qqr=/^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$/,jqr=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,gWt=new Set(["shared-script:feedback-capture.py"]);function lI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function YN(t,e,n){let r=Object.keys(t).find(i=>!e.includes(i));if(r)throw new Error(`${n} has unsupported field: ${r}`)}function bl(t,e){if(typeof t!="string"||t.length===0)throw new Error(`${e} must be a non-empty string`);return t}function jJ(t,e){if(!Array.isArray(t))throw new Error(`${e} must be an array`);return t}function uI(t){return(0,hWt.createHash)("sha256").update(t).digest("hex")}function $J(t){if(t===null)return"null";if(typeof t=="string"||typeof t=="boolean")return JSON.stringify(t);if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("manifest JSON contains a non-finite number");return JSON.stringify(t)}if(Array.isArray(t))return`[${t.map($J).join(",")}]`;if(lI(t))return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${$J(t[e])}`).join(",")}}`;throw new Error("manifest contains a non-JSON value")}function iBe(t,e,n){if(!pWt.test(t)||t.toLowerCase()!==uI(e))throw new Error(`${n}.sha256 does not match its content`)}function hQ(t,e){if(new Set(t).size!==t.length)throw new Error(`${e} must not contain duplicates`)}function $qr(t){if(!lI(t))throw new Error("worker release manifest must be an object");if(YN(t,["schema","contexts","skills","assets","required_doctor_checks"],"worker release manifest"),t.schema!=="semo-ops/worker-release/v1")throw new Error("worker release manifest schema is invalid");let e=jJ(t.contexts,"contexts").map((s,o)=>{if(!lI(s))throw new Error(`contexts[${o}] must be an object`);YN(s,["id","parity_group","claude_content","codex_content","sha256"],`contexts[${o}]`);let a={id:bl(s.id,`contexts[${o}].id`),parity_group:bl(s.parity_group,`contexts[${o}].parity_group`),claude_content:bl(s.claude_content,`contexts[${o}].claude_content`),codex_content:bl(s.codex_content,`contexts[${o}].codex_content`),sha256:bl(s.sha256,`contexts[${o}].sha256`)};if(!VN.test(a.id)||!VN.test(a.parity_group))throw new Error(`contexts[${o}] identifiers are invalid`);return iBe(a.sha256,$J({claude_content:a.claude_content,codex_content:a.codex_content}),`contexts[${o}]`),a}),n=jJ(t.skills,"skills").map((s,o)=>{if(!lI(s))throw new Error(`skills[${o}] must be an object`);YN(s,["name","content","sha256"],`skills[${o}]`);let a={name:bl(s.name,`skills[${o}].name`),content:bl(s.content,`skills[${o}].content`),sha256:bl(s.sha256,`skills[${o}].sha256`)};if(!VN.test(a.name))throw new Error(`skills[${o}] skill name is invalid`);return iBe(a.sha256,a.content,`skills[${o}]`),a}),r=jJ(t.assets,"assets").map((s,o)=>{if(!lI(s))throw new Error(`assets[${o}] must be an object`);YN(s,["id","target","content_base64","sha256","mode"],`assets[${o}]`);let a=bl(s.id,`assets[${o}].id`),c=bl(s.target,`assets[${o}].target`),l=bl(s.content_base64,`assets[${o}].content_base64`),u=bl(s.sha256,`assets[${o}].sha256`),d=bl(s.mode,`assets[${o}].mode`);if(!VN.test(a))throw new Error(`assets[${o}].id is invalid`);if(!gWt.has(c))throw new Error(`assets[${o}] asset target is invalid`);if(d!=="0755"&&d!=="0644")throw new Error(`assets[${o}].mode is invalid`);if(!jqr.test(l))throw new Error(`assets[${o}].content_base64 is invalid`);let A=Buffer.from(l,"base64");if(A.length===0||A.toString("base64")!==l)throw new Error(`assets[${o}].content_base64 is not canonical`);return iBe(u,A,`assets[${o}]`),{id:a,target:c,content:A,sha256:u.toLowerCase(),mode:d}}),i=jJ(t.required_doctor_checks,"required_doctor_checks").map((s,o)=>bl(s,`required_doctor_checks[${o}]`));return hQ(e.map(({id:s})=>s),"context ids"),hQ(e.map(({parity_group:s})=>s),"context parity groups"),hQ(n.map(({name:s})=>s),"skill names"),hQ(r.map(({id:s})=>s),"asset ids"),hQ(r.map(({target:s})=>s),"asset targets"),hQ(i,"required_doctor_checks"),{schema:"semo-ops/worker-release/v1",contexts:e,skills:n,assets:r,required_doctor_checks:i}}function mWt(t){if(!lI(t)||typeof t.release_id!="string"||typeof t.version!="string"||typeof t.manifest_sha256!="string")throw new Error("worker release Gateway response is invalid");if(!qqr.test(t.release_id))throw new Error("worker release id is invalid");let e=Yh(t.version);if(!pWt.test(t.manifest_sha256))throw new Error("worker release manifest sha256 is invalid");return{releaseId:t.release_id,version:e,manifestSha256:t.manifest_sha256.toLowerCase()}}function Gqr(t){let e=mWt(t);if(!lI(t))throw new Error("worker release Gateway response is invalid");YN(t,["release_id","version","manifest","manifest_sha256"],"worker release");let n=$qr(t.manifest);if(uI($J(t.manifest))!==e.manifestSha256)throw new Error("worker release manifest sha256 does not match the canonical manifest");return{...e,manifest:n}}function cBe(t,e){if(e==="shared-script:feedback-capture.py")return Ft.join(t,".semo","shared","scripts","feedback-capture.py");throw new Error("worker release asset target has no local mapping")}function Hqr(t,e){return[Ft.join(t,".claude","CLAUDE.md"),Ft.join(t,".codex","AGENTS.md"),...e.manifest.skills.flatMap(n=>[Ft.join(t,".claude","skills",n.name,"SKILL.md"),Ft.join(t,".agents","skills",n.name,"SKILL.md")]),...e.manifest.assets.map(n=>cBe(t,n.target)),jo(t).workerState,jo(t).releaseState,jo(t).updateLock,jo(t).rollbackFailure]}function ph(t){try{return bt.lstatSync(t)}catch(e){if(e.code==="ENOENT")return null;throw e}}function Su(t,e){let n=Ft.resolve(t),r=Ft.resolve(e),i=Ft.relative(n,r);if(i===""||i.startsWith("..")||Ft.isAbsolute(i))throw new Error("worker release target escapes the worker home");let s=n,o=i.split(Ft.sep);for(let[a,c]of o.entries()){s=Ft.join(s,c);let l=ph(s);if(l){if(l.isSymbolicLink())throw new Error("worker release target contains a symlink");if(a<o.length-1&&!l.isDirectory())throw new Error("worker release target ancestor is not a directory");if(a===o.length-1&&l.isDirectory())throw new Error("worker release file target is a directory")}}}function sWt(t,e){for(let n of Hqr(t,e))Su(t,n)}var fQ=class extends Error{constructor(n,r){super(`worker doctor returned ${n}`);this.doctorStatus=n;this.report=r}};function GJ(t,e){return`<!-- SEMO_OPS_WORKER_RELEASE:${t}:${e} -->`}function oBe(t,e){let n=0,r=0;for(;;){let i=t.indexOf(e,r);if(i<0)return n;n+=1,r=i+e.length}}function oWt(t,e,n){let r=GJ(e,"BEGIN"),i=GJ(e,"END");if(n.includes("SEMO_OPS_WORKER_RELEASE"))throw new Error("worker release context content contains a reserved marker");let s=oBe(t,r),o=oBe(t,i);if(s!==o||s>1)throw new Error(`worker release context ${e} has unpaired managed markers`);let a=n.endsWith(`
3167
3167
  `)?n:`${n}
3168
3168
  `,c=`${r}
3169
3169
  ${a}${i}`;if(s===0){let d=t.length===0||t.endsWith(`
@@ -3526,4 +3526,4 @@ DB \uC5F0\uACB0:`)),await ve()?console.log(B.default.green(" \u2713 DB \uC5F0\u
3526
3526
  `)),await S();return}}let o=await uj(n,t,!!e.force);e.format==="json"?console.log(JSON.stringify(o,null,2)):o.success?(console.log(B.default.green(`
3527
3527
  \u2705 \uB3C4\uBA54\uC778 '${t}' \uC0AD\uC81C \uC644\uB8CC`)),o.deleted_entries&&o.deleted_entries>0&&console.log(B.default.gray(` KB \uD56D\uBAA9 ${o.deleted_entries}\uAC74 \uD568\uAED8 \uC0AD\uC81C\uB428`)),console.log()):(console.log(B.default.red(`
3528
3528
  \u274C \uC0AD\uC81C \uC2E4\uD328: ${o.error}
3529
- `)),process.exit(1)),await S()}catch(n){console.error(B.default.red(`\uC0AD\uC81C \uC2E4\uD328: ${n}`)),await S(),process.exit(1)}});O$e(Ke);EGe(Ke);wGe(Ke);_Ge(Ke);xGe(Ke);kGe(Ke);DJe(Ke);NJe(Ke);VJe(Ke);YJe(Ke);KJe(Ke);n3e(Ke);i3e(Ke);b3e(Ke);I3e(Ke);_Ke(Ke);iZe(Ke);aZe(Ke);l3e(Ke);u3e(Ke);async function b5r(){let t=process.argv.slice(2);t.length===1&&(t[0]==="-v"||t[0]==="--version-info")&&(await c4t(),process.exit(0)),Ke.parse()}b5r();
3529
+ `)),process.exit(1)),await S()}catch(n){console.error(B.default.red(`\uC0AD\uC81C \uC2E4\uD328: ${n}`)),await S(),process.exit(1)}});O$e(Ke);EGe(Ke);wGe(Ke);_Ge(Ke);xGe(Ke);kGe(Ke);DJe(Ke);NJe(Ke);VJe(Ke);YJe(Ke);KJe(Ke);n3e(Ke);i3e(Ke);b3e(Ke);I3e(Ke);_Ke(Ke);iZe(Ke);aZe(Ke);l3e(Ke);u3e(Ke);async function b5r(){let t=process.argv.slice(2);t.length===1&&(t[0]==="-v"||t[0]==="--version-info")&&(await c4t(),process.exit(0)),await Ke.parseAsync()}b5r();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-semicolon/semicolony-cli",
3
- "version": "4.18.60",
3
+ "version": "4.18.61",
4
4
  "description": "SemiColony CLI - AI operations and agent orchestration installer",
5
5
  "main": "dist/bundle.js",
6
6
  "bin": {