@zonease/aiworker-cli 0.13.0 → 0.13.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
|
@@ -1708,7 +1708,7 @@ ${F}`)}formatType(D,u,A){let F=sh[D.type]||xh[D.level]||"gray";if(u)return ph(F)
|
|
|
1708
1708
|
`)});if($)w=$(w)||w;console.log(w.map((E)=>{return E.title?`${E.title}:
|
|
1709
1709
|
${E.body}`:E.body}).join(`
|
|
1710
1710
|
|
|
1711
|
-
`))}outputVersion(){let{name:D}=this.cli,{versionNumber:u}=this.cli.globalCommand;if(u)console.log(`${D}/${u} ${FQ}`)}checkRequiredArgs(){let D=this.args.filter((u)=>u.required).length;if(this.cli.args.length<D)throw new qF(`missing required args for command \`${this.rawName}\``)}checkUnknownOptions(){let{options:D,globalCommand:u}=this.cli;if(!this.config.allowUnknownOptions){for(let A of Object.keys(D))if(A!=="--"&&!this.hasOption(A)&&!u.hasOption(A))throw new qF(`Unknown option \`${A.length>1?`--${A}`:`-${A}`}\``)}}checkOptionValue(){let{options:D,globalCommand:u}=this.cli,A=[...u.options,...this.options];for(let F of A){let $=D[F.name.split(".")[0]];if(F.required){let w=A.some((f)=>f.negated&&f.names.includes(F.name));if($===!0||$===!1&&!w)throw new qF(`option \`${F.rawName}\` value is missing`)}}}}class p4 extends c4{constructor(D){super("@@global@@","",{},D)}}var LF=Object.assign;class $W extends cN{constructor(D=""){super();this.name=D,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new p4(this),this.globalCommand.usage("<command> [options]")}usage(D){return this.globalCommand.usage(D),this}command(D,u,A){let F=new c4(D,u||"",A,this);return F.globalCommand=this.globalCommand,this.commands.push(F),F}option(D,u,A){return this.globalCommand.option(D,u,A),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},A,F){if(this.args=D,this.options=u,A)this.matchedCommand=A;if(F)this.matchedCommandName=F;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}parse(D=AQ,{run:u=!0}={}){if(this.rawArgs=D,!this.name)this.name=D[1]?uQ(D[1]):"cli";let A=!0;for(let $ of this.commands){let w=this.mri(D.slice(2),$),f=w.args[0];if($.isMatched(f)){A=!1;let _=LF(LF({},w),{args:w.args.slice(1)});this.setParsedInfo(_,$,f),this.emit(`command:${f}`,$)}}if(A){for(let $ of this.commands)if($.name===""){A=!1;let w=this.mri(D.slice(2),$);this.setParsedInfo(w,$),this.emit("command:!",$)}}if(A){let $=this.mri(D.slice(2));this.setParsedInfo($)}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 F={args:this.args,options:this.options};if(u)this.runMatchedCommand();if(!this.matchedCommand&&this.args[0])this.emit("command:*");return F}mri(D,u){let A=[...this.globalCommand.options,...u?u.options:[]],F=tN(A),$=[],w=D.indexOf("--");if(w>-1)$=D.slice(w+1),D=D.slice(0,w);let f=mN(D,F);f=Object.keys(f).reduce((J,W)=>{return LF(LF({},J),{[AW(W)]:f[W]})},{_:[]});let _=f._,E={"--":$},B=u&&u.config.ignoreOptionDefaultValue?u.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,S=Object.create(null);for(let J of A){if(!B&&J.config.default!==void 0)for(let W of J.names)E[W]=J.config.default;if(Array.isArray(J.config.type)){if(S[J.name]===void 0)S[J.name]=Object.create(null),S[J.name].shouldTransform=!0,S[J.name].transformFunction=J.config.type[0]}}for(let J of Object.keys(f))if(J!=="_"){let W=J.split(".");eN(E,W,f[J]),DQ(E,S)}return{args:_,options:E}}runMatchedCommand(){let{args:D,options:u,matchedCommand:A}=this;if(!A||!A.commandAction)return;A.checkUnknownOptions(),A.checkOptionValue(),A.checkRequiredArgs();let F=[];return A.args.forEach(($,w)=>{if($.variadic)F.push(D.slice(w));else F.push(D[w])}),F.push(u),A.commandAction.apply(this,F)}}var $Q=(D="")=>new $W(D),fW=$Q;dF();var rA={name:"@zonease/aiworker-cli",type:"module",version:"0.13.
|
|
1711
|
+
`))}outputVersion(){let{name:D}=this.cli,{versionNumber:u}=this.cli.globalCommand;if(u)console.log(`${D}/${u} ${FQ}`)}checkRequiredArgs(){let D=this.args.filter((u)=>u.required).length;if(this.cli.args.length<D)throw new qF(`missing required args for command \`${this.rawName}\``)}checkUnknownOptions(){let{options:D,globalCommand:u}=this.cli;if(!this.config.allowUnknownOptions){for(let A of Object.keys(D))if(A!=="--"&&!this.hasOption(A)&&!u.hasOption(A))throw new qF(`Unknown option \`${A.length>1?`--${A}`:`-${A}`}\``)}}checkOptionValue(){let{options:D,globalCommand:u}=this.cli,A=[...u.options,...this.options];for(let F of A){let $=D[F.name.split(".")[0]];if(F.required){let w=A.some((f)=>f.negated&&f.names.includes(F.name));if($===!0||$===!1&&!w)throw new qF(`option \`${F.rawName}\` value is missing`)}}}}class p4 extends c4{constructor(D){super("@@global@@","",{},D)}}var LF=Object.assign;class $W extends cN{constructor(D=""){super();this.name=D,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new p4(this),this.globalCommand.usage("<command> [options]")}usage(D){return this.globalCommand.usage(D),this}command(D,u,A){let F=new c4(D,u||"",A,this);return F.globalCommand=this.globalCommand,this.commands.push(F),F}option(D,u,A){return this.globalCommand.option(D,u,A),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},A,F){if(this.args=D,this.options=u,A)this.matchedCommand=A;if(F)this.matchedCommandName=F;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}parse(D=AQ,{run:u=!0}={}){if(this.rawArgs=D,!this.name)this.name=D[1]?uQ(D[1]):"cli";let A=!0;for(let $ of this.commands){let w=this.mri(D.slice(2),$),f=w.args[0];if($.isMatched(f)){A=!1;let _=LF(LF({},w),{args:w.args.slice(1)});this.setParsedInfo(_,$,f),this.emit(`command:${f}`,$)}}if(A){for(let $ of this.commands)if($.name===""){A=!1;let w=this.mri(D.slice(2),$);this.setParsedInfo(w,$),this.emit("command:!",$)}}if(A){let $=this.mri(D.slice(2));this.setParsedInfo($)}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 F={args:this.args,options:this.options};if(u)this.runMatchedCommand();if(!this.matchedCommand&&this.args[0])this.emit("command:*");return F}mri(D,u){let A=[...this.globalCommand.options,...u?u.options:[]],F=tN(A),$=[],w=D.indexOf("--");if(w>-1)$=D.slice(w+1),D=D.slice(0,w);let f=mN(D,F);f=Object.keys(f).reduce((J,W)=>{return LF(LF({},J),{[AW(W)]:f[W]})},{_:[]});let _=f._,E={"--":$},B=u&&u.config.ignoreOptionDefaultValue?u.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,S=Object.create(null);for(let J of A){if(!B&&J.config.default!==void 0)for(let W of J.names)E[W]=J.config.default;if(Array.isArray(J.config.type)){if(S[J.name]===void 0)S[J.name]=Object.create(null),S[J.name].shouldTransform=!0,S[J.name].transformFunction=J.config.type[0]}}for(let J of Object.keys(f))if(J!=="_"){let W=J.split(".");eN(E,W,f[J]),DQ(E,S)}return{args:_,options:E}}runMatchedCommand(){let{args:D,options:u,matchedCommand:A}=this;if(!A||!A.commandAction)return;A.checkUnknownOptions(),A.checkOptionValue(),A.checkRequiredArgs();let F=[];return A.args.forEach(($,w)=>{if($.variadic)F.push(D.slice(w));else F.push(D[w])}),F.push(u),A.commandAction.apply(this,F)}}var $Q=(D="")=>new $W(D),fW=$Q;dF();var rA={name:"@zonease/aiworker-cli",type:"module",version:"0.13.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"}};var i=fW("aiworker"),wr=c.dirname(kq(import.meta.url)),ur="soul-app.manifest.json";function Er(D=wr){let u=c.resolve(D,"official-apps");if(ou(c.join(u,"aiworker-hr",ur)))return u;let A=c.resolve(D,"../../apps");if(ou(c.join(A,"aiworker-hr",ur)))return A;return}function Nq(D=wr){let u=c.resolve(D,"web","worker");if(ou(c.join(u,"index.html")))return u;let A=c.resolve(D,"../../web/dist/worker");if(ou(c.join(A,"index.html")))return A;return}function bA(){let D=SD.env.AIWORKER_HOME??c.join(Iq(),".aiworker");return{home:D,dbPath:SD.env.WORKER_DB_PATH??c.join(D,"aiworker.db"),workersRoot:c.join(D,"workers"),pidFile:c.join(D,"aiworker-daemon.pid"),logFile:c.join(D,"aiworker-daemon.log")}}async function GD(){let D=bA();return await Dr(D.home,{recursive:!0}),await Dr(c.dirname(D.dbPath),{recursive:!0}),f8(D.dbPath),w8(Tu().WORKER_MIGRATIONS_FOLDER),D}function Qq(){let u=e2().find((A)=>A.key==="selected-worker")?.valueJson;return u&&typeof u.workerId==="string"?u.workerId:null}function l5(){return{hostVersion:rA.version}}function pD(D,u={}){return JA({executor:u.executor,officialAppsRoot:u.officialAppsRoot??Er(),registryContext:u.registryContext??l5,workersRoot:D.workersRoot})}async function n1(D={}){let u=await GD(),A=D.worker??Qq();if(!A)throw Error("worker is required; pass --worker or run `aiworker worker select <id>`");let F=VD(A);if(!F)throw Error(`worker not found: ${A}`);let $=pD(u).createRuntimeForWorker(F);return await $.init(),$}async function Mu(){return await GD(),F0()}function x(D){SD.stdout.write(`${JSON.stringify(D,null,2)}
|
|
1712
1712
|
`)}function Ou(D,u){if(typeof D!=="string"||D.trim().length===0)throw Error(`${u} is required`);return D.trim()}function i1(D){let u=D?.[0];return typeof u==="number"&&Number.isFinite(u)?u:void 0}function hq(D){try{return SD.kill(D,0),!0}catch{return!1}}async function Lq(){let D=await GD();x({home:D.home,dbPath:D.dbPath,workersRoot:D.workersRoot,workers:F0()})}async function qq(){let D=await GD();x({ok:!0,home:D.home,dbPath:D.dbPath,apps:pD(D).listApps(),workers:F0(),workspaces:Qu(),daemon:E6(),settings:e2()})}function E6(){let D=bA();if(!ou(D.pidFile))return{pid:null,running:!1,logFile:D.logFile};let u=Number.parseInt(zA(D.pidFile,"utf8"),10);return{pid:Number.isFinite(u)?u:null,running:Number.isFinite(u)&&hq(u),logFile:D.logFile}}async function zq(D={}){let u=bA();$r(u.home,{recursive:!0});let A=E6();if(A.running)throw Error(`daemon already running: pid=${A.pid}`);x5(u.logFile,"");let F=Oq(u.logFile,"a"),$=Fr(SD.execPath,[c.resolve(SD.argv[1]??"aiworker"),"daemon","foreground",...D.host?["--host",D.host]:[],...D.port?["--port",String(D.port)]:[]],{cwd:SD.cwd(),detached:!0,env:{...SD.env,AIWORKER_HOME:u.home,WORKER_DB_PATH:u.dbPath},stdio:["ignore",F,F]});if($.unref(),Uq(F),!$.pid)throw Error("daemon did not return a pid");x5(u.pidFile,String($.pid)),x({started:!0,pid:$.pid,logFile:u.logFile,url:`http://127.0.0.1:${D.port??Tu().PORT}`})}async function bq(){let D=bA(),u=E6();if(!u.pid||!u.running){s5(D.pidFile,{force:!0}),x({stopped:!1,running:!1});return}SD.kill(u.pid,"SIGTERM"),s5(D.pidFile,{force:!0}),x({stopped:!0,pid:u.pid})}async function Ar(D={}){let{bootstrapWorkerApp:u}=await Promise.resolve().then(() => (eC(),aC)),{app:A,port:F}=await u({officialAppsRoot:Er(),webStaticDir:Nq()}),$=Tu(),w=Bun.serve({fetch:A.fetch,hostname:D.host??$.AIWORKER_WORKER_HOST,idleTimeout:255,port:D.port??F});z2.success(`[aiworker-daemon] listening on http://${w.hostname}:${w.port}`),await new Promise((f)=>{let _=setInterval(()=>{return},60000),E=()=>{clearInterval(_),w.stop(),f()};SD.once("SIGINT",E),SD.once("SIGTERM",E)})}async function jq(D={}){let u=Tu(),A=`http://${D.host??u.AIWORKER_WORKER_HOST}:${D.port??u.PORT}/health`,F=await fetch(A);x({ok:F.ok,status:F.status,body:await F.json().catch(()=>null)})}async function Tq(D={}){let u=bA().logFile;if(!ou(u))return;let F=(await Vq(u,"utf8")).split(/\r?\n/);SD.stdout.write(`${F.slice(-(D.tail??80)).join(`
|
|
1713
1713
|
`)}
|
|
1714
1714
|
`)}async function Zq(D){let u=await GD(),A=await pD(u).createSoulWorker({id:D.id,name:Ou(D.name,"name"),soulId:Ou(D.soul,"soul")});x({worker:A.snapshot.worker})}async function vq(D){await GD();let u=VD(D);if(!u)throw Error(`worker not found: ${D}`);x({setting:R8("selected-worker",{workerId:u.id})})}async function iq(D){let u=await n1({worker:D.worker});x({workspace:await u.createWorkspace({name:Ou(D.name,"name")})})}async function nq(D){if(!D.worker){await GD(),x({workspaces:Qu()});return}let u=await n1({worker:D.worker});x({workspaces:Qu(u.workerId)})}async function yq(D){let u=await GD(),A=await n1({worker:D.worker}),F=Ou(D.workspace,"workspace"),$=oD(F);if(!$||$.workerId!==A.workerId)throw Error(`workspace not found for ${A.workerId}: ${F}`);let w=Ou(D.skill,"skill"),f=pD(u).requireCapabilityTemplateForWorker(A.workerId,w),_=await A.createSession({workspaceId:F,capabilityTemplateId:f.id,title:Ou(D.title,"title"),context:D.context??"",metadata:{inputHints:f.inputHints,outputKind:f.outputKind,reviewRubric:f.reviewRubric,skillName:f.name}}),E=Ou(D.input,"input");x(await A.startTurn({sessionId:_.id,input:E,engineId:"codex",engineCommand:"codex",metadata:{inputHints:f.inputHints,outputKind:f.outputKind,reviewRubric:f.reviewRubric,skillName:f.name,executionMode:"local-cli"}}))}async function dq(D){await GD();let u=Ou(D.session,"session"),A=Au(u);if(!A)throw Error(`session not found: ${u}`);let F=await n1({worker:D.worker??A.workerId});x(await F.startTurn({sessionId:u,input:Ou(D.input,"input"),engineId:"codex",engineCommand:"codex",metadata:{executionMode:"local-cli"}}))}async function sq(D){await Mu(),x({sessions:d0(D.workspace)})}async function xq(D){await Mu(),x({session:Au(D),turns:$0(D)})}async function lq(D){await Mu(),x({files:hu(D.workspace)})}async function cq(D,u){await GD();let A=Ou(u.workspace,"workspace"),F=oD(A);if(!F)throw Error(`workspace not found: ${A}`);let $=await n1({worker:u.worker??F.workerId});SD.stdout.write(await $.files(A).read(D))}async function pq(D,u){await GD();let A=p2(D);if(!A)throw Error(`artifact not found: ${D}`);let F=oD(A.workspaceId);if(!F)throw Error(`workspace not found for artifact: ${D}`);let w=(await n1({worker:u.worker??F.workerId})).files(F.id).resolve(A.path);Bun.spawn(["open",w]),x({opened:w})}async function mq(D){await Mu(),x({artifacts:w0(D.workspace)})}async function oq(D){await Mu(),x({reviews:o2(D.workspace)})}async function tq(D){await Mu();let u=Ou(D.workspace,"workspace"),A=s0({id:gq(),workspaceId:u,sourceReviewId:D.review??null,statement:Ou(D.statement,"statement"),evidenceJson:D.review?[{reviewId:D.review}]:[]});x({lesson:A})}async function aq(){let D=await GD();x({apps:pD(D).listApps()})}async function eq(D){let u=await GD();x({app:pD(u).getApp(D)})}async function Dz(D){let u=await GD();x({app:await pD(u).installAppFromPath(D)})}async function uz(D){let u=await GD(),A=pD(u);x({app:A.enableApp(D),catalog:A.listCatalog()})}async function Az(D){let u=await GD(),A=pD(u);x({app:A.disableApp(D),catalog:A.listCatalog()})}async function Fz(D){let u=await GD();x({app:pD(u).healthcheckApp(D)})}async function $z(D){let u=await GD(),A=pD(u).getApp(D);x({appId:D,permissions:A?.manifest.permissions??[]})}async function fz(D){let u=await GD();if(D!=="official")throw Error(`unsupported app bootstrap scope: ${D}`);let A=await pD(u).bootstrapOfficialSoulApps();if(x({bootstrap:A,catalog:A.catalog}),A.status==="fail")SD.exitCode=1}async function wz(D,u={}){let A=BD.parse(D),F=c.resolve(u.dir??A);if(ou(F)&&fr(F).length>0)throw Error(`target directory is not empty: ${F}`);let $=Sz(A),w=_r(A);mu(c.join(F,"soul-app.manifest.json"),`${JSON.stringify($,null,2)}
|