@zonease/aiworker-cli 0.16.0 → 0.16.1

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/aiworker-bun.js CHANGED
@@ -1715,7 +1715,7 @@ ${A}`)}formatType(D,u,r){let A=pQ[D.type]||xQ[D.level]||"gray";if(u)return eQ(A)
1715
1715
  `)});if(f)w=f(w)||w;console.log(w.map(($)=>{return $.title?`${$.title}:
1716
1716
  ${$.body}`:$.body}).join(`
1717
1717
 
1718
- `))}outputVersion(){let{name:D}=this.cli,{versionNumber:u}=this.cli.globalCommand;if(u)console.log(`${D}/${u} ${EN}`)}checkRequiredArgs(){let D=this.args.filter((u)=>u.required).length;if(this.cli.args.length<D)throw new xf(`missing required args for command \`${this.rawName}\``)}checkUnknownOptions(){let{options:D,globalCommand:u}=this.cli;if(!this.config.allowUnknownOptions){for(let r of Object.keys(D))if(r!=="--"&&!this.hasOption(r)&&!u.hasOption(r))throw new xf(`Unknown option \`${r.length>1?`--${r}`:`-${r}`}\``)}}checkOptionValue(){let{options:D,globalCommand:u}=this.cli,r=[...u.options,...this.options];for(let A of r){let f=D[A.name.split(".")[0]];if(A.required){let w=r.some((F)=>F.negated&&F.names.includes(A.name));if(f===!0||f===!1&&!w)throw new xf(`option \`${A.rawName}\` value is missing`)}}}}class L$ extends Q${constructor(D){super("@@global@@","",{},D)}}var pf=Object.assign;class HB extends ah{constructor(D=""){super();this.name=D,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new L$(this),this.globalCommand.usage("<command> [options]")}usage(D){return this.globalCommand.usage(D),this}command(D,u,r){let A=new Q$(D,u||"",r,this);return A.globalCommand=this.globalCommand,this.commands.push(A),A}option(D,u,r){return this.globalCommand.option(D,u,r),this}help(D){return this.globalCommand.option("-h, --help","Display this message"),this.globalCommand.helpCallback=D,this.showHelpOnExit=!0,this}version(D,u="-v, --version"){return this.globalCommand.version(D,u),this.showVersionOnExit=!0,this}example(D){return this.globalCommand.example(D),this}outputHelp(){if(this.matchedCommand)this.matchedCommand.outputHelp();else this.globalCommand.outputHelp()}outputVersion(){this.globalCommand.outputVersion()}setParsedInfo({args:D,options:u},r,A){if(this.args=D,this.options=u,r)this.matchedCommand=r;if(A)this.matchedCommandName=A;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}parse(D=$N,{run:u=!0}={}){if(this.rawArgs=D,!this.name)this.name=D[1]?wN(D[1]):"cli";let r=!0;for(let f of this.commands){let w=this.mri(D.slice(2),f),F=w.args[0];if(f.isMatched(F)){r=!1;let E=pf(pf({},w),{args:w.args.slice(1)});this.setParsedInfo(E,f,F),this.emit(`command:${F}`,f)}}if(r){for(let f of this.commands)if(f.name===""){r=!1;let w=this.mri(D.slice(2),f);this.setParsedInfo(w,f),this.emit("command:!",f)}}if(r){let f=this.mri(D.slice(2));this.setParsedInfo(f)}if(this.options.help&&this.showHelpOnExit)this.outputHelp(),u=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),u=!1,this.unsetMatchedCommand();let A={args:this.args,options:this.options};if(u)this.runMatchedCommand();if(!this.matchedCommand&&this.args[0])this.emit("command:*");return A}mri(D,u){let r=[...this.globalCommand.options,...u?u.options:[]],A=rN(r),f=[],w=D.indexOf("--");if(w>-1)f=D.slice(w+1),D=D.slice(0,w);let F=DN(D,A);F=Object.keys(F).reduce((R,n)=>{return pf(pf({},R),{[GB(n)]:F[n]})},{_:[]});let E=F._,$={"--":f},g=u&&u.config.ignoreOptionDefaultValue?u.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,_=Object.create(null);for(let R of r){if(!g&&R.config.default!==void 0)for(let n of R.names)$[n]=R.config.default;if(Array.isArray(R.config.type)){if(_[R.name]===void 0)_[R.name]=Object.create(null),_[R.name].shouldTransform=!0,_[R.name].transformFunction=R.config.type[0]}}for(let R of Object.keys(F))if(R!=="_"){let n=R.split(".");fN($,n,F[R]),FN($,_)}return{args:E,options:$}}runMatchedCommand(){let{args:D,options:u,matchedCommand:r}=this;if(!r||!r.commandAction)return;r.checkUnknownOptions(),r.checkOptionValue(),r.checkRequiredArgs();let A=[];return r.args.forEach((f,w)=>{if(f.variadic)A.push(D.slice(w));else A.push(D[w])}),A.push(u),r.commandAction.apply(this,A)}}var gN=(D="")=>new HB(D),XB=gN;w3();var Pu={name:"@zonease/aiworker-cli",type:"module",version:"0.16.0",description:"AIWorker CLI \u2014 local Host and vertical Soul workspace runtime",license:"MIT",homepage:"https://github.com/ZonEaseTech/aiworker#readme",repository:{type:"git",url:"git+https://github.com/ZonEaseTech/aiworker.git"},publishConfig:{access:"public"},bin:{aiworker:"./dist/aiworker.js"},files:["README.md","dist/"],engines:{bun:">=1.1"},scripts:{typecheck:"tsc --noEmit",test:"bun test --timeout=15000","test:stress":"bun test --timeout=15000 --rerun-each=3 src/commands/worker/init.integration.test.ts src/commands/worker/sessions.test.ts",build:"bun run --filter '@zonease/aiworker-web' build && bun run build:bundle","build:bundle":"bun run --filter '@zonease/aiworker-hr' build && bun run --filter '@zonease/aiworker-qa' build && bun build --target=bun --minify --outfile=dist/aiworker-bun.js src/aiworker.ts && bun scripts/build-publish-manifest.ts",prepublishOnly:"bun run build","smoke:dist-release":"bun scripts/smoke-dist-release.ts"},devDependencies:{"@types/bun":"^1.2.13","@zonease/aiworker-api":"workspace:*","@zonease/aiworker-core":"workspace:*","@zonease/aiworker-fs-layout":"workspace:*","@zonease/aiworker-shared":"workspace:*","@zonease/aiworker-storage-sqlite":"workspace:*",cac:"^6.7.14",consola:"^3.4.2",typescript:"^5.8.3",yaml:"^2.7.1"}};import I1 from"process";var _W="@zonease/aiworker-cli",AL="https://registry.npmjs.org/@zonease%2Faiworker-cli",fL="https://api.github.com/repos/ZonEaseTech/aiworker/releases/latest";function e$(D,u){if(u.channel!==void 0&&u.channel!=="stable"&&u.channel!=="preview")throw Error(`unsupported update channel: ${u.channel}`);let r=u.pre===!0||u.channel==="preview",A=u.check===!0?"check":u.dryRun===!0?"dry-run":"apply";return{channel:r?"preview":"stable",command:D,mode:A,prerelease:r,target:u.target,yes:u.yes===!0}}function D7(D){let u=g3(D.argv1),r=g3(D.realArgv1),A=g3(D.moduleDir),f=[u,r,A].filter(Boolean).join(`
1718
+ `))}outputVersion(){let{name:D}=this.cli,{versionNumber:u}=this.cli.globalCommand;if(u)console.log(`${D}/${u} ${EN}`)}checkRequiredArgs(){let D=this.args.filter((u)=>u.required).length;if(this.cli.args.length<D)throw new xf(`missing required args for command \`${this.rawName}\``)}checkUnknownOptions(){let{options:D,globalCommand:u}=this.cli;if(!this.config.allowUnknownOptions){for(let r of Object.keys(D))if(r!=="--"&&!this.hasOption(r)&&!u.hasOption(r))throw new xf(`Unknown option \`${r.length>1?`--${r}`:`-${r}`}\``)}}checkOptionValue(){let{options:D,globalCommand:u}=this.cli,r=[...u.options,...this.options];for(let A of r){let f=D[A.name.split(".")[0]];if(A.required){let w=r.some((F)=>F.negated&&F.names.includes(A.name));if(f===!0||f===!1&&!w)throw new xf(`option \`${A.rawName}\` value is missing`)}}}}class L$ extends Q${constructor(D){super("@@global@@","",{},D)}}var pf=Object.assign;class HB extends ah{constructor(D=""){super();this.name=D,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new L$(this),this.globalCommand.usage("<command> [options]")}usage(D){return this.globalCommand.usage(D),this}command(D,u,r){let A=new Q$(D,u||"",r,this);return A.globalCommand=this.globalCommand,this.commands.push(A),A}option(D,u,r){return this.globalCommand.option(D,u,r),this}help(D){return this.globalCommand.option("-h, --help","Display this message"),this.globalCommand.helpCallback=D,this.showHelpOnExit=!0,this}version(D,u="-v, --version"){return this.globalCommand.version(D,u),this.showVersionOnExit=!0,this}example(D){return this.globalCommand.example(D),this}outputHelp(){if(this.matchedCommand)this.matchedCommand.outputHelp();else this.globalCommand.outputHelp()}outputVersion(){this.globalCommand.outputVersion()}setParsedInfo({args:D,options:u},r,A){if(this.args=D,this.options=u,r)this.matchedCommand=r;if(A)this.matchedCommandName=A;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}parse(D=$N,{run:u=!0}={}){if(this.rawArgs=D,!this.name)this.name=D[1]?wN(D[1]):"cli";let r=!0;for(let f of this.commands){let w=this.mri(D.slice(2),f),F=w.args[0];if(f.isMatched(F)){r=!1;let E=pf(pf({},w),{args:w.args.slice(1)});this.setParsedInfo(E,f,F),this.emit(`command:${F}`,f)}}if(r){for(let f of this.commands)if(f.name===""){r=!1;let w=this.mri(D.slice(2),f);this.setParsedInfo(w,f),this.emit("command:!",f)}}if(r){let f=this.mri(D.slice(2));this.setParsedInfo(f)}if(this.options.help&&this.showHelpOnExit)this.outputHelp(),u=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),u=!1,this.unsetMatchedCommand();let A={args:this.args,options:this.options};if(u)this.runMatchedCommand();if(!this.matchedCommand&&this.args[0])this.emit("command:*");return A}mri(D,u){let r=[...this.globalCommand.options,...u?u.options:[]],A=rN(r),f=[],w=D.indexOf("--");if(w>-1)f=D.slice(w+1),D=D.slice(0,w);let F=DN(D,A);F=Object.keys(F).reduce((R,n)=>{return pf(pf({},R),{[GB(n)]:F[n]})},{_:[]});let E=F._,$={"--":f},g=u&&u.config.ignoreOptionDefaultValue?u.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,_=Object.create(null);for(let R of r){if(!g&&R.config.default!==void 0)for(let n of R.names)$[n]=R.config.default;if(Array.isArray(R.config.type)){if(_[R.name]===void 0)_[R.name]=Object.create(null),_[R.name].shouldTransform=!0,_[R.name].transformFunction=R.config.type[0]}}for(let R of Object.keys(F))if(R!=="_"){let n=R.split(".");fN($,n,F[R]),FN($,_)}return{args:E,options:$}}runMatchedCommand(){let{args:D,options:u,matchedCommand:r}=this;if(!r||!r.commandAction)return;r.checkUnknownOptions(),r.checkOptionValue(),r.checkRequiredArgs();let A=[];return r.args.forEach((f,w)=>{if(f.variadic)A.push(D.slice(w));else A.push(D[w])}),A.push(u),r.commandAction.apply(this,A)}}var gN=(D="")=>new HB(D),XB=gN;w3();var Pu={name:"@zonease/aiworker-cli",type:"module",version:"0.16.1",description:"AIWorker CLI \u2014 local Host and vertical Soul workspace runtime",license:"MIT",homepage:"https://github.com/ZonEaseTech/aiworker#readme",repository:{type:"git",url:"git+https://github.com/ZonEaseTech/aiworker.git"},publishConfig:{access:"public"},bin:{aiworker:"./dist/aiworker.js"},files:["README.md","dist/"],engines:{bun:">=1.1"},scripts:{typecheck:"tsc --noEmit",test:"bun test --timeout=15000","test:stress":"bun test --timeout=15000 --rerun-each=3 src/commands/worker/init.integration.test.ts src/commands/worker/sessions.test.ts",build:"bun run --filter '@zonease/aiworker-web' build && bun run build:bundle","build:bundle":"bun run --filter '@zonease/aiworker-hr' build && bun run --filter '@zonease/aiworker-qa' build && bun build --target=bun --minify --outfile=dist/aiworker-bun.js src/aiworker.ts && bun scripts/build-publish-manifest.ts",prepublishOnly:"bun run build","smoke:dist-release":"bun scripts/smoke-dist-release.ts"},devDependencies:{"@types/bun":"^1.2.13","@zonease/aiworker-api":"workspace:*","@zonease/aiworker-core":"workspace:*","@zonease/aiworker-fs-layout":"workspace:*","@zonease/aiworker-shared":"workspace:*","@zonease/aiworker-storage-sqlite":"workspace:*",cac:"^6.7.14",consola:"^3.4.2",typescript:"^5.8.3",yaml:"^2.7.1"}};import I1 from"process";var _W="@zonease/aiworker-cli",AL="https://registry.npmjs.org/@zonease%2Faiworker-cli",fL="https://api.github.com/repos/ZonEaseTech/aiworker/releases/latest";function e$(D,u){if(u.channel!==void 0&&u.channel!=="stable"&&u.channel!=="preview")throw Error(`unsupported update channel: ${u.channel}`);let r=u.pre===!0||u.channel==="preview",A=u.check===!0?"check":u.dryRun===!0?"dry-run":"apply";return{channel:r?"preview":"stable",command:D,mode:A,prerelease:r,target:u.target,yes:u.yes===!0}}function D7(D){let u=g3(D.argv1),r=g3(D.realArgv1),A=g3(D.moduleDir),f=[u,r,A].filter(Boolean).join(`
1719
1719
  `);if(A.includes("/apps/cli/src")||r.endsWith("/apps/cli/src/aiworker.ts"))return{canAutoUpgrade:!1,kind:"source-checkout",reason:"source checkout cannot self-modify"};if(f.includes("/.npm/_npx/")||f.includes("/.bun/install/cache/"))return{canAutoUpgrade:!1,kind:"ephemeral",reason:"ephemeral runner cache cannot be upgraded in place"};if(E3(u,D.npmGlobalBinDirs)||E3(r,D.npmGlobalBinDirs))return{canAutoUpgrade:!0,kind:"npm-global",packageManager:"npm"};if(E3(u,D.bunGlobalBinDirs)||E3(r,D.bunGlobalBinDirs))return{canAutoUpgrade:!0,kind:"bun-global",packageManager:"bun"};if(f.includes("/.bun/install/global/node_modules/@zonease/aiworker-cli"))return{canAutoUpgrade:!0,kind:"bun-global",packageManager:"bun"};if(f.includes("/lib/node_modules/@zonease/aiworker-cli"))return{canAutoUpgrade:!0,kind:"npm-global",packageManager:"npm"};if(A.includes("/aiworker-darwin-")||A.includes("/aiworker-linux-"))return{canAutoUpgrade:!0,kind:"github-tarball"};return{canAutoUpgrade:!1,kind:"unknown",reason:"installation source could not be proven"}}function u7(D){let u=[],r;if(SL(D.currentVersion,D.target.version)>=0)r="already_current";else if(D.source.kind==="unknown")r="source_unknown";else if(!D.source.canAutoUpgrade&&D.options.mode!=="check")r="source_not_supported";else if(D.source.kind==="github-tarball"&&D.options.mode!=="check"&&(!D.target.downloadUrl||!D.target.checksumUrl))r="source_not_supported";else r="update_available";if(r==="update_available"&&D.options.mode!=="check"){if(D.source.packageManager)u.push(wL(D.source.packageManager,D.target.version));else if(D.source.kind==="github-tarball"&&D.target.downloadUrl&&D.target.checksumUrl)u.push({checksumUrl:D.target.checksumUrl,downloadUrl:D.target.downloadUrl,kind:"github-tarball"});if(D.options.mode==="apply"&&u.length>0)u.push({kind:"host-convergence"},{kind:"daemon-restart"})}return{actions:u,currentVersion:D.currentVersion,mode:D.options.mode,requiresConfirmation:D.options.mode==="apply"&&u.length>0&&!D.options.yes,source:D.source,status:r,target:D.target,targetVersion:D.target.version}}async function r7(D){if(D.options.target)return{checksumUrl:null,downloadUrl:null,isPrerelease:D.options.prerelease,source:D.source.kind==="github-tarball"?"github":"npm",version:D.options.target};if(D.source.kind==="github-tarball"){let f=EL(await RW(D.fetch,fL)),w=(D.platformAssetName??FL)(),F=f.assets.find(($)=>$.name===w),E=f.assets.find(($)=>$.name===`${w}.sha256`);return{checksumUrl:nW(E,`${w}.sha256`),downloadUrl:nW(F,w),isPrerelease:D.options.prerelease,source:"github",version:f.tag_name.replace(/^v/,"")}}let u=$L(await RW(D.fetch,AL)),r=D.options.prerelease?"preview":"latest",A=u["dist-tags"]?.[r];if(typeof A!=="string"||A.length===0)throw Error(`npm dist-tag not found: ${r}`);return{checksumUrl:null,downloadUrl:null,isPrerelease:D.options.prerelease,source:"npm",version:A}}async function JW(D){if(D.plan.mode==="dry-run")return{completedActions:[],status:"dry_run"};if(D.plan.status!=="update_available"||D.plan.actions.length===0)return{completedActions:[],status:"skipped"};let u=[];for(let r of D.plan.actions){if(r.kind==="package-manager"){if(!r.command||!r.args)throw Error("package-manager upgrade action is missing command or args");await $3(D.runCommand,"runCommand")(r.command,r.args)}else if(r.kind==="github-tarball"){if(!r.downloadUrl||!r.checksumUrl)throw Error("github tarball upgrade action requires downloadUrl and checksumUrl");await $3(D.downloadAndReplace,"downloadAndReplace")({checksumUrl:r.checksumUrl,downloadUrl:r.downloadUrl})}else if(r.kind==="host-convergence")await $3(D.convergeHost,"convergeHost")();else await $3(D.restartDaemon,"restartDaemon")();u.push(r.kind)}return{completedActions:u,status:"completed"}}function GW(D,u){if(!D?.checkedAt)return{canCheck:!0,latestSeenVersion:D?.latestSeenVersion??null};let r=new Date(D.checkedAt),A=u.getTime()-r.getTime();return{canCheck:!Number.isFinite(r.getTime())||A<0||A>=86400000,latestSeenVersion:D.latestSeenVersion??null}}function FL(){let D=I1.platform==="win32"?"windows":I1.platform,u=I1.arch==="x64"?"x64":I1.arch==="arm64"?"arm64":I1.arch;return`aiworker-${D}-${u}.tar.gz`}function wL(D,u){if(D==="bun")return{args:["install","-g",`${_W}@${u}`],command:"bun",kind:"package-manager",packageManager:D};return{args:["install","-g",`${_W}@${u}`],command:"npm",kind:"package-manager",packageManager:D}}async function RW(D,u){let r=await(D??globalThis.fetch)(u);if(!r.ok)throw Error(`failed to resolve release target from ${u}: HTTP ${r.status}`);return await r.json()}function $L(D){if(!S3(D))return{};let u=D["dist-tags"];if(!S3(u))return{};return{"dist-tags":Object.fromEntries(Object.entries(u).filter((r)=>typeof r[1]==="string"))}}function EL(D){if(!S3(D)||typeof D.tag_name!=="string"||D.tag_name.length===0)throw Error("github release tag not found");if(!Array.isArray(D.assets))throw Error("github release assets invalid");return{assets:D.assets.filter(gL),tag_name:D.tag_name}}function gL(D){return S3(D)&&(D.name===void 0||typeof D.name==="string")}function nW(D,u){if(D===void 0)return null;if(typeof D.browser_download_url!=="string"||D.browser_download_url.trim().length===0)throw Error(`github release asset url invalid: ${u}`);return D.browser_download_url}function $3(D,u){if(D===void 0)throw Error(`upgrade executor hook missing: ${u}`);return D}function S3(D){return typeof D==="object"&&D!==null&&!Array.isArray(D)}function SL(D,u){let r=WW(D),A=WW(u);for(let f=0;f<3;f+=1){let w=r.core[f]??0,F=A.core[f]??0;if(w>F)return 1;if(w<F)return-1}return _L(r.prerelease,A.prerelease)}function E3(D,u){if(!D)return!1;return(u??[]).map(g3).some((r)=>{if(!r)return!1;return D===r||D.startsWith(`${r}/`)})}function g3(D){if(!D)return"";return D.replaceAll("\\","/").replace(/\/+/g,"/").replace(/\/$/,"")}function _L(D,u){if(D.length===0&&u.length===0)return 0;if(D.length===0)return 1;if(u.length===0)return-1;let r=Math.max(D.length,u.length);for(let A=0;A<r;A+=1){let f=D[A],w=u[A];if(f===void 0)return-1;if(w===void 0)return 1;let F=BW(f),E=BW(w);if(F!==void 0&&E!==void 0){if(F>E)return 1;if(F<E)return-1;continue}if(F!==void 0)return-1;if(E!==void 0)return 1;if(f>w)return 1;if(f<w)return-1}return 0}function BW(D){if(!/^\d+$/.test(D))return;return Number.parseInt(D,10)}function WW(D){let u=D.replace(/^v/,"").split("+",1)[0]??"",r=u.indexOf("-"),A=r===-1?u:u.slice(0,r),f=r===-1?void 0:u.slice(r+1);return{core:(A??"").split(".").slice(0,3).map((w)=>Number.parseInt(w,10)).map((w)=>Number.isFinite(w)?w:0),prerelease:f?f.split("."):[]}}var T=XB("aiworker"),p2=h.dirname(oq(import.meta.url)),YG="soul-app.manifest.json";function QG(D=p2){let u=h.resolve(D,"official-apps");if(cD(h.join(u,"aiworker-hr",YG)))return u;let r=h.resolve(D,"../../apps");if(cD(h.join(r,"aiworker-hr",YG)))return r;return}function dq(D=p2){let u=h.resolve(D,"web","worker");if(cD(h.join(u,"index.html")))return u;let r=h.resolve(D,"../../web/dist/worker");if(cD(h.join(r,"index.html")))return r;return}var lq=".aiworker-dev",yq=".aiworker";function cq(D=p2){let u=cD(h.join(D,"official-apps")),r=cD(h.join(D,"web","worker"));return u||r?yq:lq}function tq(D=p2){let u=h3({defaultHomeDir:cq(D)}).home;return{home:u,dbPath:a.env.WORKER_DB_PATH??h.join(u,"aiworker.db"),workersRoot:h.join(u,"workers"),pidFile:h.join(u,"aiworker-daemon.pid"),logFile:h.join(u,"aiworker-daemon.log")}}function pq(D){a.env.AIWORKER_HOME??=D.home,a.env.WORKER_DB_PATH??=D.dbPath}function x2(){let D=tq();return pq(D),D}async function SD(){let D=x2();return await UG(D.home,{recursive:!0}),await UG(h.dirname(D.dbPath),{recursive:!0}),WA(D.dbPath),JA(du().WORKER_MIGRATIONS_FOLDER),D}function xq(){let u=mr().find((r)=>r.key==="selected-worker")?.valueJson;return u&&typeof u.workerId==="string"?u.workerId:null}function s7(){return{hostVersion:Pu.version}}function tD(D,u={}){return M1({executor:u.executor,officialAppsRoot:u.officialAppsRoot??QG(),registryContext:u.registryContext??s7,workersRoot:D.workersRoot})}async function m2(D={}){let u=await SD(),r=D.worker??xq();if(!r)throw Error("worker is required; pass --worker or run `aiworker worker select <id>`");let A=PD(r);if(!A)throw Error(`worker not found: ${r}`);let f=tD(u).createRuntimeForWorker(A);return await f.init(),f}async function Vu(){return await SD(),gr()}function Z(D){a.stdout.write(`${JSON.stringify(D,null,2)}
1720
1720
  `)}function Ku(D,u){if(typeof D!=="string"||D.trim().length===0)throw Error(`${u} is required`);return D.trim()}function c2(D){let u=D?.[0];return typeof u==="number"&&Number.isFinite(u)?u:void 0}function mq(D){try{return a.kill(D,0),!0}catch{return!1}}async function aq(){let D=await SD();Z({home:D.home,dbPath:D.dbPath,workersRoot:D.workersRoot,workers:gr()})}async function eq(){let D=await SD(),u=await LG();Z({ok:!0,home:D.home,dbPath:D.dbPath,apps:tD(D).listApps(),workers:gr(),workspaces:Xu(),daemon:V3(),settings:mr(),updateNotice:u})}async function MG(D,u){let r=e$(D,u),A=z7(a.argv[1]),f=D7({argv1:A,bunGlobalBinDirs:bG(),moduleDir:p2,npmGlobalBinDirs:qG(),realArgv1:j7(A)}),w=await r7({fetch:($)=>fetch($),options:r,source:f}),F=u7({currentVersion:Pu.version,options:r,source:f,target:w});if(r.mode!=="apply"){Z({update:F});return}if(F.status==="source_not_supported"||F.status==="source_unknown")throw Z({update:F}),Error(`update_not_supported: ${F.source.detail??F.source.reason??F.source.kind}`);if(F.status==="update_available"&&F.actions.length===0)throw Z({update:F}),Error("update_not_actionable");if(F.status!=="update_available"){Z({update:F});return}if(F.requiresConfirmation)throw Z({update:F}),Error("update requires --yes to apply changes");let E=await JW({convergeHost:async()=>{await hb()},downloadAndReplace:async($)=>{await Db($)},plan:F,restartDaemon:async()=>{vr.info("AIWorker daemon requires manual restart after CLI upgrade")},runCommand:async($,g)=>{if(await Bun.spawn([$,...g],{stderr:"inherit",stdin:"inherit",stdout:"inherit"}).exited!==0)throw Error(`package manager upgrade failed: ${$} ${g.join(" ")}`)}});Z({update:F,result:E})}async function Db(D,u={}){let r=j7(z7(u.currentPath??a.argv[1]));if(!r)throw Error("current binary path is required");let A=u.renameSync??Tq,f=u.spawnSync??((B)=>Bun.spawnSync(B)),w=u.fetch??fetch,F=h.dirname(r),E=h.dirname(F),$=NG(h.join(E,".aiworker-update-")),g=h.join($,"aiworker.tar.gz"),_=h.join(E,`.aiworker-next-${a.pid}-${q7()}`),R=h.join(E,`.aiworker-backup-${a.pid}-${q7()}`),n=!1;try{let[B,C]=await Promise.all([rb(D.checksumUrl,w),ub(D.downloadUrl,w)]),J=B.trim().split(/\s+/)[0],X=KG("sha256").update(C).digest("hex");if(!J||X!==J)throw Error("checksum_mismatch");I3(g,C);let M=f(["tar","-xzf",g,"-C",$]);if(M.exitCode!==0){let Y=OG(M.stderr);throw Error(`staging_failed: ${Y||`tar exited ${M.exitCode}`}`)}let P=b7($).map((Y)=>h.join($,Y)).filter((Y)=>c1(Y).isDirectory()),k=P.find((Y)=>cD(h.join(Y,"aiworker")));if(!k)throw Error(P.length>0?"staging_failed: aiworker binary not found":"staging_failed: extracted directory not found");let s=h.join(k,"aiworker");if(!cD(s)||!c1(s).isFile())throw Error("staging_failed: aiworker binary not found");if(!cD(h.join(k,"web"))||!c1(h.join(k,"web")).isDirectory())throw Error("staging_failed: web assets not found");if(!cD(h.join(k,"drizzle"))||!c1(h.join(k,"drizzle")).isDirectory())throw Error("staging_failed: drizzle migrations not found");t0(_,{force:!0,recursive:!0}),t0(R,{force:!0,recursive:!0}),A(k,_),bq(h.join(_,"aiworker"),493);let q=f([h.join(_,"aiworker"),"--version"]);if(q.exitCode!==0){let Y=OG(q.stderr);throw Error(`staging_failed: version probe failed${Y?`: ${Y}`:""}`)}A(F,R);try{A(_,F)}catch(Y){throw A(R,F),Y}return n=!0,{backupPath:R,installedPath:r}}finally{if(t0($,{recursive:!0,force:!0}),!n)t0(_,{recursive:!0,force:!0})}}function OG(D){if(!D)return"";if(typeof D==="string")return D.trim();return IG.from(D.buffer,D.byteOffset,D.byteLength).toString("utf8").trim()}async function ub(D,u=fetch){let r=await u(D);if(!r.ok)throw Error(`update asset fetch failed: HTTP ${r.status}`);return IG.from(await r.arrayBuffer())}async function rb(D,u=fetch){let r=await u(D);if(!r.ok)throw Error(`update checksum fetch failed: HTTP ${r.status}`);return await r.text()}async function LG(){let D=new Date;try{await SD();let r=mr().find((g)=>g.key==="update.notice")?.valueJson??null,A=GW(r,D);if(!A.canCheck)return A.latestSeenVersion&&fb(A.latestSeenVersion,Pu.version)>0?{channel:"stable",command:"aiworker update",currentVersion:Pu.version,targetVersion:A.latestSeenVersion}:null;let f=e$("update",{check:!0,channel:"stable"}),w=z7(a.argv[1]),F=D7({argv1:w,bunGlobalBinDirs:bG(),moduleDir:p2,npmGlobalBinDirs:qG(),realArgv1:j7(w)}),E=await r7({fetch:(g)=>Ab(g),options:f,source:F}),$=u7({currentVersion:Pu.version,options:f,source:F,target:E});return k0("update.notice",{checkedAt:D.toISOString(),latestSeenVersion:E.version}),$.status==="update_available"?{channel:"stable",command:"aiworker update",currentVersion:Pu.version,targetVersion:E.version}:null}catch(u){let r=u instanceof Error?u.message:String(u);try{let A=mr().find((f)=>f.key==="update.notice")?.valueJson.latestSeenVersion;k0("update.notice",{checkedAt:D.toISOString(),errorMessage:r,latestSeenVersion:typeof A==="string"?A:Pu.version})}catch{}return null}}function qG(){return sG([a.env.npm_config_prefix?h.join(a.env.npm_config_prefix,"bin"):void 0,a.env.PREFIX?h.join(a.env.PREFIX,"bin"):void 0,"/usr/local/bin","/opt/homebrew/bin"])}function bG(){return sG([a.env.BUN_INSTALL?h.join(a.env.BUN_INSTALL,"bin"):void 0,a.env.HOME?h.join(a.env.HOME,".bun","bin"):void 0])}function sG(D){return[...new Set(D.filter((u)=>typeof u==="string"&&u.length>0).map((u)=>h.resolve(u)))]}function z7(D){return D?h.resolve(D):void 0}function j7(D){if(!D)return;try{return jq(D)}catch{return D}}async function Ab(D){let u=new AbortController,r=setTimeout(()=>u.abort(),750);try{return await fetch(D,{signal:u.signal})}finally{clearTimeout(r)}}function fb(D,u){let r=D.split(/[.-]/).map((w)=>Number.parseInt(w,10)||0),A=u.split(/[.-]/).map((w)=>Number.parseInt(w,10)||0),f=Math.max(r.length,A.length);for(let w=0;w<f;w++){let F=(r[w]??0)-(A[w]??0);if(F!==0)return F}return 0}function V3(){let D=x2();if(!cD(D.pidFile))return{pid:null,running:!1,logFile:D.logFile};let u=Number.parseInt(t2(D.pidFile,"utf8"),10);return{pid:Number.isFinite(u)?u:null,running:Number.isFinite(u)&&mq(u),logFile:D.logFile}}async function Fb(D={}){let u=x2();hG(u.home,{recursive:!0});let r=V3();if(r.running)throw Error(`daemon already running: pid=${r.pid}`);I3(u.logFile,"");let A=zq(u.logFile,"a"),f=VG(a.execPath,[h.resolve(a.argv[1]??"aiworker"),"daemon","foreground",...D.host?["--host",D.host]:[],...D.port?["--port",String(D.port)]:[]],{cwd:a.cwd(),detached:!0,env:{...a.env,AIWORKER_HOME:u.home,WORKER_DB_PATH:u.dbPath},stdio:["ignore",A,A]});if(f.unref(),sq(A),!f.pid)throw Error("daemon did not return a pid");I3(u.pidFile,String(f.pid)),Z({started:!0,pid:f.pid,logFile:u.logFile,url:`http://127.0.0.1:${D.port??du().PORT}`})}async function wb(){let D=x2(),u=V3();if(!u.pid||!u.running){t0(D.pidFile,{force:!0}),Z({stopped:!1,running:!1});return}a.kill(u.pid,"SIGTERM"),t0(D.pidFile,{force:!0}),Z({stopped:!0,pid:u.pid})}async function PG(D={}){x2();let u=await LG();if(u)vr.info(`[aiworker-daemon] update available: ${u.currentVersion} -> ${u.targetVersion}; run ${u.command}`);let{bootstrapWorkerApp:r}=await Promise.resolve().then(() => (iG(),XG)),{app:A,port:f}=await r({officialAppsRoot:QG(),runtimeVersion:Pu.version,webStaticDir:dq()}),w=du(),F=Bun.serve({fetch:A.fetch,hostname:D.host??w.AIWORKER_WORKER_HOST,idleTimeout:255,port:D.port??f});vr.success(`[aiworker-daemon] listening on http://${F.hostname}:${F.port}`),await new Promise((E)=>{let $=setInterval(()=>{return},60000),g=()=>{clearInterval($),F.stop(),E()};a.once("SIGINT",g),a.once("SIGTERM",g)})}async function $b(D={}){let u=du(),r=`http://${D.host??u.AIWORKER_WORKER_HOST}:${D.port??u.PORT}/health`,A=await fetch(r);Z({ok:A.ok,status:A.status,body:await A.json().catch(()=>null)})}async function Eb(D={}){let u=x2().logFile;if(!cD(u))return;let A=(await vq(u,"utf8")).split(/\r?\n/);a.stdout.write(`${A.slice(-(D.tail??80)).join(`
1721
1721
  `)}
@@ -4,7 +4,7 @@
4
4
  "localService": {
5
5
  "command": [
6
6
  "bun",
7
- "dist/host-mounted.js"
7
+ "dist/mounted/host-mounted.js"
8
8
  ],
9
9
  "healthPath": "/health"
10
10
  },
@@ -135,11 +135,11 @@
135
135
  },
136
136
  "modes": {
137
137
  "hostMounted": {
138
- "entry": "./dist/host-mounted.js",
138
+ "entry": "./dist/mounted/host-mounted.js",
139
139
  "supported": true
140
140
  },
141
141
  "standalone": {
142
- "entry": "./dist/standalone.js",
142
+ "entry": "./dist/standalone/standalone.js",
143
143
  "supported": true
144
144
  }
145
145
  },
@@ -4,7 +4,7 @@
4
4
  "localService": {
5
5
  "command": [
6
6
  "bun",
7
- "dist/host-mounted.js"
7
+ "dist/mounted/host-mounted.js"
8
8
  ],
9
9
  "healthPath": "/health"
10
10
  },
@@ -135,11 +135,11 @@
135
135
  },
136
136
  "modes": {
137
137
  "hostMounted": {
138
- "entry": "./dist/host-mounted.js",
138
+ "entry": "./dist/mounted/host-mounted.js",
139
139
  "supported": true
140
140
  },
141
141
  "standalone": {
142
- "entry": "./dist/standalone.js",
142
+ "entry": "./dist/standalone/standalone.js",
143
143
  "supported": true
144
144
  }
145
145
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zonease/aiworker-cli",
3
- "version": "0.16.0",
3
+ "version": "0.16.1",
4
4
  "description": "AIWorker CLI — local Host and vertical Soul workspace runtime",
5
5
  "license": "MIT",
6
6
  "type": "module",