ex-workflow 0.6.0-stage → 1.0.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.
- package/CHANGELOG.md +17 -2
- package/README.md +12 -6
- package/dist/chunk-3KFQPSRX.mjs +2 -0
- package/dist/chunk-3KFQPSRX.mjs.map +1 -0
- package/dist/{chunk-MH66G5KV.cjs → chunk-5PHK72VM.cjs} +2 -2
- package/dist/{chunk-MH66G5KV.cjs.map → chunk-5PHK72VM.cjs.map} +1 -1
- package/dist/chunk-CYXVGHQM.cjs +2 -0
- package/dist/chunk-CYXVGHQM.cjs.map +1 -0
- package/dist/chunk-FKTCGQYB.cjs +2 -0
- package/dist/chunk-FKTCGQYB.cjs.map +1 -0
- package/dist/chunk-HIHMBMB5.cjs +2 -0
- package/dist/chunk-HIHMBMB5.cjs.map +1 -0
- package/dist/{chunk-KF5VQH3M.mjs → chunk-MQWMQ4PD.mjs} +2 -2
- package/dist/{chunk-KF5VQH3M.mjs.map → chunk-MQWMQ4PD.mjs.map} +1 -1
- package/dist/chunk-QDMEM62U.mjs +2 -0
- package/dist/chunk-QDMEM62U.mjs.map +1 -0
- package/dist/chunk-U3OXAO67.mjs +2 -0
- package/dist/chunk-U3OXAO67.mjs.map +1 -0
- package/dist/chunk-UZQV73X7.mjs +2 -0
- package/dist/chunk-UZQV73X7.mjs.map +1 -0
- package/dist/chunk-VXH2FAKV.cjs +2 -0
- package/dist/chunk-VXH2FAKV.cjs.map +1 -0
- package/dist/chunk-XMO2RCXB.cjs +2 -0
- package/dist/chunk-XMO2RCXB.cjs.map +1 -0
- package/dist/chunk-YBHHICTZ.mjs +2 -0
- package/dist/chunk-YBHHICTZ.mjs.map +1 -0
- package/dist/{chunk-3CLDZCHN.cjs → chunk-YJN4JEJU.cjs} +2 -2
- package/dist/{chunk-3CLDZCHN.cjs.map → chunk-YJN4JEJU.cjs.map} +1 -1
- package/dist/chunk-Z2G7DGDF.mjs +2 -0
- package/dist/{chunk-TEPK5Y36.mjs.map → chunk-Z2G7DGDF.mjs.map} +1 -1
- package/dist/cli/bin.cjs +1 -1
- package/dist/cli/bin.mjs +1 -1
- package/dist/cli/index.cjs +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/kanban/index.cjs +1 -1
- package/dist/kanban/index.mjs +1 -1
- package/dist/scrum/index.cjs +1 -1
- package/dist/scrum/index.mjs +1 -1
- package/dist/waterfall/index.cjs +1 -1
- package/dist/waterfall/index.d.cts +2 -1
- package/dist/waterfall/index.d.ts +2 -1
- package/dist/waterfall/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-2OVYXXNV.cjs +0 -2
- package/dist/chunk-2OVYXXNV.cjs.map +0 -1
- package/dist/chunk-7CDGPTEJ.mjs +0 -2
- package/dist/chunk-7CDGPTEJ.mjs.map +0 -1
- package/dist/chunk-GT57PLUT.mjs +0 -2
- package/dist/chunk-GT57PLUT.mjs.map +0 -1
- package/dist/chunk-IHE5K4X3.mjs +0 -2
- package/dist/chunk-IHE5K4X3.mjs.map +0 -1
- package/dist/chunk-N3QB2S7R.cjs +0 -2
- package/dist/chunk-N3QB2S7R.cjs.map +0 -1
- package/dist/chunk-NA53TZE4.mjs +0 -2
- package/dist/chunk-NA53TZE4.mjs.map +0 -1
- package/dist/chunk-TEPK5Y36.mjs +0 -2
- package/dist/chunk-UBFIKDIP.cjs +0 -2
- package/dist/chunk-UBFIKDIP.cjs.map +0 -1
- package/dist/chunk-UUOMQMWT.cjs +0 -2
- package/dist/chunk-UUOMQMWT.cjs.map +0 -1
- package/dist/chunk-Z3PU6EBI.mjs +0 -2
- package/dist/chunk-Z3PU6EBI.mjs.map +0 -1
- package/dist/chunk-ZTE7LREB.cjs +0 -2
- package/dist/chunk-ZTE7LREB.cjs.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkMH66G5KV_cjs=require('./chunk-MH66G5KV.cjs'),chunkUUOMQMWT_cjs=require('./chunk-UUOMQMWT.cjs'),chunk2OVYXXNV_cjs=require('./chunk-2OVYXXNV.cjs'),chunkUBFIKDIP_cjs=require('./chunk-UBFIKDIP.cjs'),chunkZTE7LREB_cjs=require('./chunk-ZTE7LREB.cjs'),chunkYRATJT7P_cjs=require('./chunk-YRATJT7P.cjs'),chunkWOGK54HB_cjs=require('./chunk-WOGK54HB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs'),promises=require('fs/promises'),w=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var w__default=/*#__PURE__*/_interopDefault(w);var $={scrum:chunkUUOMQMWT_cjs.l,kanban:chunk2OVYXXNV_cjs.I,waterfall:chunkUBFIKDIP_cjs.N},p=["exwf init <scrum|kanban|waterfall> --config <file> [--roles <file>]","exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]","exwf next [--max n] [--fallback-tokens-per-weight n]","exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m [--estimate] [--role r]","exwf account <item> [--line n] [--tokens-in n] [--tokens-out n] [--duration-ms n] [--model m] [--by who]","exwf ceremony <name> [input.json] [--by who]","exwf decide <pendingId> approve|reject [--by who] [--note text]","exwf config set <patch.json> [--by who] exwf unblock <item> [--blocker id] [--note text] [--by who]","exwf status | board | metrics | pending | lessons","exwf validate <action.json> exwf role add <manifest.json> | role list"],at=new Set(["estimate"]);function et(l){let t=[],u={};for(let a=0;a<l.length;a++){let v=l[a];if(v.startsWith("--")){let n=v.slice(2);if(at.has(n)){u[n]="true";continue}let m=l[a+1];(m===void 0||m.startsWith("--"))&&chunkS3BXVHO7_cjs.b("invalid-input",`--${n} needs a value`,`pass --${n} <text>`),u[n]=m,a++;}else t.push(v);}return {positional:t,flags:u}}async function x(l){try{return JSON.parse(await promises.readFile(l,"utf8"))}catch(t){return chunkS3BXVHO7_cjs.b("invalid-input",`cannot read JSON from ${l}: ${t.message}`,"check the path and that the file is valid JSON")}}function h(l){let t=Object.hasOwn($,l.methodology)?$[l.methodology]:void 0;return t||chunkS3BXVHO7_cjs.b("config-invalid",`methodology "${l.methodology}" is not available in this build`,`available: ${Object.keys($).join(", ")}`),t()}function y(l,t){let u=Number(l[t]);return Number.isFinite(u)||chunkS3BXVHO7_cjs.b("invalid-input",`--${t} must be a number (got ${JSON.stringify(l[t])})`,`pass --${t} <n>`),u}var it=new Set(["init","add","edit","next","complete","account","ceremony","decide","unblock"]);async function St(l,t){try{let[u,a]=et(l).positional;return u!==void 0&&(it.has(u)||u==="role"&&a==="add"||u==="config"&&a==="set")?await chunkYRATJT7P_cjs.c(t,()=>tt(l,t)):await tt(l,t)}catch(u){if(u instanceof chunkS3BXVHO7_cjs.a)return {exit:1,out:{ok:false,error:u.toJSON()}};throw u}}async function tt(l,t){let{positional:u,flags:a}=et(l),[v,...n]=u,m=a.by??"human",d=new Date().toISOString();switch(v){case "init":{let[e]=n,o=e&&Object.hasOwn($,e)?$[e]:void 0;if(!o||!a.config)return {exit:2,out:{ok:false,usage:p}};try{await promises.stat(chunkYRATJT7P_cjs.b(t)),chunkS3BXVHO7_cjs.b("invalid-input",`${chunkYRATJT7P_cjs.b(t)} already exists`,"delete .workflow/state.json to start over");}catch(c){if(c instanceof chunkS3BXVHO7_cjs.a||c.code!=="ENOENT")throw c}let s=await x(w__default.default.resolve(t,a.config)),i=a.roles?await x(w__default.default.resolve(t,a.roles)):void 0;if(i!==void 0){Array.isArray(i)||chunkS3BXVHO7_cjs.b("invalid-input",`roles file ${a.roles} must contain an array of role manifests`,"wrap the manifests in [ ... ]");for(let c of i)chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.e,c,`roles file ${a.roles}`);}let r=chunkZTE7LREB_cjs.X(i?{methodology:o(),config:s,roles:i,by:m,now:d}:{methodology:o(),config:s,by:m,now:d});return await chunkYRATJT7P_cjs.d(t,r.state),{exit:0,out:{ok:true,warnings:r.warnings,state:{methodology:r.state.methodology,stages:r.state.stages.map(c=>c.id),roles:Object.keys(r.state.roles)}}}}case "add":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[0]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.f,o,`item file ${n[0]}`);let s=chunkZTE7LREB_cjs.W(e,h(e),{type:"item.add",by:m,payload:{item:o}},i=>chunkZTE7LREB_cjs.v(i,o,m,d));return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,warnings:s.warnings,item:chunkZTE7LREB_cjs.u(s.state,o.id)}}}case "edit":{if(!n[0]||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=n[0],s=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.g,s,`patch file ${n[1]}`);let i=chunkZTE7LREB_cjs.W(e,h(e),{type:"item.edit",by:m,payload:{id:o,patch:s}},r=>chunkZTE7LREB_cjs.w(r,o,s,m,d));return await chunkYRATJT7P_cjs.d(t,i.state),{exit:0,out:{ok:true,warnings:i.warnings,item:chunkZTE7LREB_cjs.u(i.state,o)}}}case "next":{let e=await chunkYRATJT7P_cjs.e(t),o={now:d};a.max&&(o.max=y(a,"max")),a["fallback-tokens-per-weight"]&&(o.fallbackTokensPerWeight=y(a,"fallback-tokens-per-weight"));let s=chunkMH66G5KV_cjs.c(e,h(e),o);for(let i of s.briefs)await chunkYRATJT7P_cjs.f(t,i);return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,reason:s.reason??null,skipped:s.skipped,briefs:s.briefs}}}case "complete":{if(!n[0]||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.h,o,`handoff file ${n[1]}`),o.item!==n[0]&&chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff.item "${o.item}" differs from the command's item "${n[0]}"`,"make them match");let s=a.role??o.role,i=y(a,"duration-ms"),r={item:n[0],role:s,model:a.model??"",tokensIn:y(a,"tokens-in"),tokensOut:y(a,"tokens-out"),durationMs:i,startedAt:new Date(Date.parse(d)-i).toISOString(),endedAt:d};a.estimate==="true"&&(r.estimate=true);let c=chunkMH66G5KV_cjs.d(e,h(e),{...o,role:s},r,d);return await chunkYRATJT7P_cjs.g(t,o,c.state.events.length),await chunkYRATJT7P_cjs.d(t,c.state),{exit:0,out:{ok:true,warnings:c.warnings,item:chunkZTE7LREB_cjs.u(c.state,n[0])}}}case "account":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o={};a["tokens-in"]!==void 0&&(o.tokensIn=y(a,"tokens-in")),a["tokens-out"]!==void 0&&(o.tokensOut=y(a,"tokens-out")),a["duration-ms"]!==void 0&&(o.durationMs=y(a,"duration-ms")),a.model!==void 0&&(o.model=a.model);let s=a.line!==void 0?y(a,"line"):void 0,i=chunkMH66G5KV_cjs.e(e,n[0],o,a.by??"human",d,s);await chunkYRATJT7P_cjs.d(t,i);let r=chunkZTE7LREB_cjs.d(i),c=r.payload.line;return {exit:0,out:{ok:true,line:i.accounting.filter(A=>A.item===n[0])[c-1],event:r}}}case "ceremony":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=h(e),s=Object.hasOwn(o.ceremonies,n[0])?o.ceremonies[n[0]]:void 0;s||chunkS3BXVHO7_cjs.b("unknown-ceremony",`"${n[0]}" is not a ${o.name} ceremony`,`available: ${Object.keys(o.ceremonies).join(", ")}`);let i=n[1]?await x(w__default.default.resolve(t,n[1])):{},r=s(e,{...i,by:m,now:d});return await chunkYRATJT7P_cjs.d(t,r.state),{exit:0,out:{ok:true,warnings:r.warnings,lastEvent:chunkZTE7LREB_cjs.d(r.state)}}}case "config":{if(n[0]!=="set"||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[1])),s=chunkZTE7LREB_cjs.Y(e,h(e),o,m,d);return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,warnings:s.warnings,changed:chunkZTE7LREB_cjs.d(s.state).payload.changed,config:s.state.config}}}case "unblock":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=n[0],o=await chunkYRATJT7P_cjs.e(t),s=chunkZTE7LREB_cjs.u(o,e).blockers.filter(O=>!O.clearedAt).map(O=>O.id);s.length===0&&chunkS3BXVHO7_cjs.b("invalid-input",`item ${e} has no open blocker`,"nothing to clear; check exwf board");let i=a.blocker!==void 0?[a.blocker]:s,r=a.note,c=chunkZTE7LREB_cjs.W(o,h(o),{type:"blocker.clear",by:m,payload:{id:e,blockers:i,note:r??null}},O=>i.reduce((A,ot)=>chunkZTE7LREB_cjs.A(A,e,ot,m,d,r),O));return await chunkYRATJT7P_cjs.d(t,c.state),{exit:0,out:{ok:true,warnings:c.warnings,item:chunkZTE7LREB_cjs.u(c.state,e)}}}case "decide":{if(!n[0]||n[1]!=="approve"&&n[1]!=="reject")return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=e.pending.find(i=>i.id===n[0]),s=chunkZTE7LREB_cjs.J(e,n[0],n[1],m,a.note??"",d,h(e));return await chunkYRATJT7P_cjs.d(t,s),{exit:0,out:{ok:true,item:o?.item?chunkZTE7LREB_cjs.u(s,o.item):null}}}case "status":{let e=await chunkYRATJT7P_cjs.e(t),o=h(e),s={todo:0,in_progress:0,blocked:0,review:0,awaiting_human:0,done:0,dropped:0};for(let i of Object.values(e.items))s[i.status]+=1;return {exit:0,out:{ok:true,methodology:e.methodology,openIteration:chunkZTE7LREB_cjs.P(e)??null,counts:s,pending:e.pending,openQuestions:chunkMH66G5KV_cjs.b(e),lastEvent:chunkZTE7LREB_cjs.d(e),report:o.report?o.report(e):null}}}case "board":{let e=await chunkYRATJT7P_cjs.e(t);return {exit:0,out:{ok:true,columns:e.stages.map(s=>({stage:s.id,wipLimit:s.wipLimit??null,items:Object.values(e.items).filter(i=>i.stage===s.id&&i.status!=="dropped").map(i=>({id:i.id,title:i.title,status:i.status,role:i.role??null,age:i.transitions.length?Date.parse(d)-Date.parse(i.transitions[i.transitions.length-1].at):null}))}))}}}case "metrics":{let e=await chunkYRATJT7P_cjs.e(t);return {exit:0,out:{ok:true,metrics:h(e).metrics(e)}}}case "pending":return {exit:0,out:{ok:true,pending:(await chunkYRATJT7P_cjs.e(t)).pending}};case "lessons":return {exit:0,out:{ok:true,lessons:(await chunkYRATJT7P_cjs.e(t)).lessons}};case "validate":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[0]));return {exit:0,out:{ok:true,violations:chunkZTE7LREB_cjs.V(e,h(e),o)}}}case "role":{let e=await chunkYRATJT7P_cjs.e(t);if(n[0]==="list")return {exit:0,out:{ok:true,roles:Object.keys(e.roles),detail:e.roles}};if(n[0]==="add"&&n[1]){let o=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.e,o,`role manifest ${n[1]}`);let s=chunkZTE7LREB_cjs.f(e,o,m,d);return await chunkYRATJT7P_cjs.d(t,s),{exit:0,out:{ok:true,roles:Object.keys(s.roles)}}}return {exit:2,out:{ok:false,usage:p}}}default:return {exit:2,out:{ok:false,usage:p}}}}exports.a=p;exports.b=et;exports.c=St;//# sourceMappingURL=chunk-3CLDZCHN.cjs.map
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunk5PHK72VM_cjs=require('./chunk-5PHK72VM.cjs'),chunkHIHMBMB5_cjs=require('./chunk-HIHMBMB5.cjs'),chunkCYXVGHQM_cjs=require('./chunk-CYXVGHQM.cjs'),chunkFKTCGQYB_cjs=require('./chunk-FKTCGQYB.cjs'),chunkXMO2RCXB_cjs=require('./chunk-XMO2RCXB.cjs'),chunkYRATJT7P_cjs=require('./chunk-YRATJT7P.cjs'),chunkWOGK54HB_cjs=require('./chunk-WOGK54HB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs'),promises=require('fs/promises'),w=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var w__default=/*#__PURE__*/_interopDefault(w);var $={scrum:chunkHIHMBMB5_cjs.l,kanban:chunkCYXVGHQM_cjs.I,waterfall:chunkFKTCGQYB_cjs.N},p=["exwf init <scrum|kanban|waterfall> --config <file> [--roles <file>]","exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]","exwf next [--max n] [--fallback-tokens-per-weight n]","exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m [--estimate] [--role r]","exwf account <item> [--line n] [--tokens-in n] [--tokens-out n] [--duration-ms n] [--model m] [--by who]","exwf ceremony <name> [input.json] [--by who]","exwf decide <pendingId> approve|reject [--by who] [--note text]","exwf config set <patch.json> [--by who] exwf unblock <item> [--blocker id] [--note text] [--by who]","exwf status | board | metrics | pending | lessons","exwf validate <action.json> exwf role add <manifest.json> | role list"],at=new Set(["estimate"]);function et(l){let t=[],u={};for(let a=0;a<l.length;a++){let v=l[a];if(v.startsWith("--")){let n=v.slice(2);if(at.has(n)){u[n]="true";continue}let m=l[a+1];(m===void 0||m.startsWith("--"))&&chunkS3BXVHO7_cjs.b("invalid-input",`--${n} needs a value`,`pass --${n} <text>`),u[n]=m,a++;}else t.push(v);}return {positional:t,flags:u}}async function x(l){try{return JSON.parse(await promises.readFile(l,"utf8"))}catch(t){return chunkS3BXVHO7_cjs.b("invalid-input",`cannot read JSON from ${l}: ${t.message}`,"check the path and that the file is valid JSON")}}function h(l){let t=Object.hasOwn($,l.methodology)?$[l.methodology]:void 0;return t||chunkS3BXVHO7_cjs.b("config-invalid",`methodology "${l.methodology}" is not available in this build`,`available: ${Object.keys($).join(", ")}`),t()}function y(l,t){let u=Number(l[t]);return Number.isFinite(u)||chunkS3BXVHO7_cjs.b("invalid-input",`--${t} must be a number (got ${JSON.stringify(l[t])})`,`pass --${t} <n>`),u}var it=new Set(["init","add","edit","next","complete","account","ceremony","decide","unblock"]);async function St(l,t){try{let[u,a]=et(l).positional;return u!==void 0&&(it.has(u)||u==="role"&&a==="add"||u==="config"&&a==="set")?await chunkYRATJT7P_cjs.c(t,()=>tt(l,t)):await tt(l,t)}catch(u){if(u instanceof chunkS3BXVHO7_cjs.a)return {exit:1,out:{ok:false,error:u.toJSON()}};throw u}}async function tt(l,t){let{positional:u,flags:a}=et(l),[v,...n]=u,m=a.by??"human",d=new Date().toISOString();switch(v){case "init":{let[e]=n,o=e&&Object.hasOwn($,e)?$[e]:void 0;if(!o||!a.config)return {exit:2,out:{ok:false,usage:p}};try{await promises.stat(chunkYRATJT7P_cjs.b(t)),chunkS3BXVHO7_cjs.b("invalid-input",`${chunkYRATJT7P_cjs.b(t)} already exists`,"delete .workflow/state.json to start over");}catch(c){if(c instanceof chunkS3BXVHO7_cjs.a||c.code!=="ENOENT")throw c}let s=await x(w__default.default.resolve(t,a.config)),i=a.roles?await x(w__default.default.resolve(t,a.roles)):void 0;if(i!==void 0){Array.isArray(i)||chunkS3BXVHO7_cjs.b("invalid-input",`roles file ${a.roles} must contain an array of role manifests`,"wrap the manifests in [ ... ]");for(let c of i)chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.e,c,`roles file ${a.roles}`);}let r=chunkXMO2RCXB_cjs.Z(i?{methodology:o(),config:s,roles:i,by:m,now:d}:{methodology:o(),config:s,by:m,now:d});return await chunkYRATJT7P_cjs.d(t,r.state),{exit:0,out:{ok:true,warnings:r.warnings,state:{methodology:r.state.methodology,stages:r.state.stages.map(c=>c.id),roles:Object.keys(r.state.roles)}}}}case "add":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[0]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.f,o,`item file ${n[0]}`);let s=chunkXMO2RCXB_cjs.Y(e,h(e),{type:"item.add",by:m,payload:{item:o}},i=>chunkXMO2RCXB_cjs.v(i,o,m,d));return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,warnings:s.warnings,item:chunkXMO2RCXB_cjs.u(s.state,o.id)}}}case "edit":{if(!n[0]||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=n[0],s=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.g,s,`patch file ${n[1]}`);let i=chunkXMO2RCXB_cjs.Y(e,h(e),{type:"item.edit",by:m,payload:{id:o,patch:s}},r=>chunkXMO2RCXB_cjs.w(r,o,s,m,d));return await chunkYRATJT7P_cjs.d(t,i.state),{exit:0,out:{ok:true,warnings:i.warnings,item:chunkXMO2RCXB_cjs.u(i.state,o)}}}case "next":{let e=await chunkYRATJT7P_cjs.e(t),o={now:d};a.max&&(o.max=y(a,"max")),a["fallback-tokens-per-weight"]&&(o.fallbackTokensPerWeight=y(a,"fallback-tokens-per-weight"));let s=chunk5PHK72VM_cjs.c(e,h(e),o);for(let i of s.briefs)await chunkYRATJT7P_cjs.f(t,i);return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,reason:s.reason??null,skipped:s.skipped,briefs:s.briefs}}}case "complete":{if(!n[0]||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.h,o,`handoff file ${n[1]}`),o.item!==n[0]&&chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff.item "${o.item}" differs from the command's item "${n[0]}"`,"make them match");let s=a.role??o.role,i=y(a,"duration-ms"),r={item:n[0],role:s,model:a.model??"",tokensIn:y(a,"tokens-in"),tokensOut:y(a,"tokens-out"),durationMs:i,startedAt:new Date(Date.parse(d)-i).toISOString(),endedAt:d};a.estimate==="true"&&(r.estimate=true);let c=chunk5PHK72VM_cjs.d(e,h(e),{...o,role:s},r,d);return await chunkYRATJT7P_cjs.g(t,o,c.state.events.length),await chunkYRATJT7P_cjs.d(t,c.state),{exit:0,out:{ok:true,warnings:c.warnings,item:chunkXMO2RCXB_cjs.u(c.state,n[0])}}}case "account":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o={};a["tokens-in"]!==void 0&&(o.tokensIn=y(a,"tokens-in")),a["tokens-out"]!==void 0&&(o.tokensOut=y(a,"tokens-out")),a["duration-ms"]!==void 0&&(o.durationMs=y(a,"duration-ms")),a.model!==void 0&&(o.model=a.model);let s=a.line!==void 0?y(a,"line"):void 0,i=chunk5PHK72VM_cjs.e(e,n[0],o,a.by??"human",d,s);await chunkYRATJT7P_cjs.d(t,i);let r=chunkXMO2RCXB_cjs.d(i),c=r.payload.line;return {exit:0,out:{ok:true,line:i.accounting.filter(A=>A.item===n[0])[c-1],event:r}}}case "ceremony":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=h(e),s=Object.hasOwn(o.ceremonies,n[0])?o.ceremonies[n[0]]:void 0;s||chunkS3BXVHO7_cjs.b("unknown-ceremony",`"${n[0]}" is not a ${o.name} ceremony`,`available: ${Object.keys(o.ceremonies).join(", ")}`);let i=n[1]?await x(w__default.default.resolve(t,n[1])):{},r=s(e,{...i,by:m,now:d});return await chunkYRATJT7P_cjs.d(t,r.state),{exit:0,out:{ok:true,warnings:r.warnings,lastEvent:chunkXMO2RCXB_cjs.d(r.state)}}}case "config":{if(n[0]!=="set"||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[1])),s=chunkXMO2RCXB_cjs._(e,h(e),o,m,d);return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,warnings:s.warnings,changed:chunkXMO2RCXB_cjs.d(s.state).payload.changed,config:s.state.config}}}case "unblock":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=n[0],o=await chunkYRATJT7P_cjs.e(t),s=chunkXMO2RCXB_cjs.u(o,e).blockers.filter(O=>!O.clearedAt).map(O=>O.id);s.length===0&&chunkS3BXVHO7_cjs.b("invalid-input",`item ${e} has no open blocker`,"nothing to clear; check exwf board");let i=a.blocker!==void 0?[a.blocker]:s,r=a.note,c=chunkXMO2RCXB_cjs.Y(o,h(o),{type:"blocker.clear",by:m,payload:{id:e,blockers:i,note:r??null}},O=>i.reduce((A,ot)=>chunkXMO2RCXB_cjs.A(A,e,ot,m,d,r),O));return await chunkYRATJT7P_cjs.d(t,c.state),{exit:0,out:{ok:true,warnings:c.warnings,item:chunkXMO2RCXB_cjs.u(c.state,e)}}}case "decide":{if(!n[0]||n[1]!=="approve"&&n[1]!=="reject")return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=e.pending.find(i=>i.id===n[0]),s=chunkXMO2RCXB_cjs.L(e,n[0],n[1],m,a.note??"",d,h(e));return await chunkYRATJT7P_cjs.d(t,s),{exit:0,out:{ok:true,item:o?.item?chunkXMO2RCXB_cjs.u(s,o.item):null}}}case "status":{let e=await chunkYRATJT7P_cjs.e(t),o=h(e),s={todo:0,in_progress:0,blocked:0,review:0,awaiting_human:0,done:0,dropped:0};for(let i of Object.values(e.items))s[i.status]+=1;return {exit:0,out:{ok:true,methodology:e.methodology,openIteration:chunkXMO2RCXB_cjs.R(e)??null,counts:s,pending:e.pending,openQuestions:chunk5PHK72VM_cjs.b(e),lastEvent:chunkXMO2RCXB_cjs.d(e),report:o.report?o.report(e):null}}}case "board":{let e=await chunkYRATJT7P_cjs.e(t);return {exit:0,out:{ok:true,columns:e.stages.map(s=>({stage:s.id,wipLimit:s.wipLimit??null,items:Object.values(e.items).filter(i=>i.stage===s.id&&i.status!=="dropped").map(i=>({id:i.id,title:i.title,status:i.status,role:i.role??null,age:i.transitions.length?Date.parse(d)-Date.parse(i.transitions[i.transitions.length-1].at):null}))}))}}}case "metrics":{let e=await chunkYRATJT7P_cjs.e(t);return {exit:0,out:{ok:true,metrics:h(e).metrics(e)}}}case "pending":return {exit:0,out:{ok:true,pending:(await chunkYRATJT7P_cjs.e(t)).pending}};case "lessons":return {exit:0,out:{ok:true,lessons:(await chunkYRATJT7P_cjs.e(t)).lessons}};case "validate":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[0]));return {exit:0,out:{ok:true,violations:chunkXMO2RCXB_cjs.X(e,h(e),o)}}}case "role":{let e=await chunkYRATJT7P_cjs.e(t);if(n[0]==="list")return {exit:0,out:{ok:true,roles:Object.keys(e.roles),detail:e.roles}};if(n[0]==="add"&&n[1]){let o=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.e,o,`role manifest ${n[1]}`);let s=chunkXMO2RCXB_cjs.f(e,o,m,d);return await chunkYRATJT7P_cjs.d(t,s),{exit:0,out:{ok:true,roles:Object.keys(s.roles)}}}return {exit:2,out:{ok:false,usage:p}}}default:return {exit:2,out:{ok:false,usage:p}}}}exports.a=p;exports.b=et;exports.c=St;//# sourceMappingURL=chunk-YJN4JEJU.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-YJN4JEJU.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands.ts"],"names":["METHODOLOGIES","scrum","kanban","waterfall","USAGE","BOOLEAN_FLAGS","parseArgs","argv","positional","flags","i","a","key","val","fail","readJson","file","readFile","e","methodologyOf","state","f","num","v","WRITERS","runCommand","cwd","cmd","sub","withStateLock","execute","WorkflowError","rest","by","now","name","stat","statePath","config","path","roles","r","assertValid","roleSchema","res","init","saveState","s","loadState","item","newItemSchema","applyAction","addItem","getItem","id","patch","itemPatchSchema","editItem","opts","next","b","saveBrief","handoff","handoffSchema","role","durationMs","acc","complete","saveHandoff","line","s2","correctAccounting","ev","lastEvent","idx","m","c","input","changeConfig","open","blockers","note","clearBlocker","entry","p","decide","counts","openIteration","openQuestions","st","action","validateAction","manifest","registerRole"],"mappings":"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","file":"chunk-3CLDZCHN.cjs","sourcesContent":["import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n loadState,\n saveBrief,\n saveHandoff,\n saveState,\n statePath,\n withStateLock,\n} from \"../adapters/file.ts\";\nimport { next as planNext, openQuestions } from \"../brief.ts\";\nimport { complete } from \"../complete.ts\";\nimport { correctAccounting, type AccountingPatch } from \"../accounting.ts\";\nimport { WorkflowError, fail } from \"../errors.ts\";\nimport { decide } from \"../gates.ts\";\nimport { addItem, clearBlocker, editItem, getItem, type ItemPatch } from \"../items.ts\";\nimport { applyAction, changeConfig, init, validateAction } from \"../methodology.ts\";\nimport { openIteration, type PlanOptions } from \"../planner.ts\";\nimport { registerRole } from \"../roles.ts\";\nimport {\n assertValid,\n handoffSchema,\n itemPatchSchema,\n newItemSchema,\n roleSchema,\n} from \"../schema/index.ts\";\nimport { lastEvent } from \"../state.ts\";\nimport { scrum } from \"../scrum/index.ts\";\nimport { kanban } from \"../kanban/index.ts\";\nimport { waterfall } from \"../waterfall/index.ts\";\nimport type {\n Accounting,\n Action,\n Handoff,\n ItemStatus,\n Methodology,\n NewItem,\n Role,\n WorkflowState,\n} from \"../types.ts\";\n\nconst METHODOLOGIES: Record<string, () => Methodology> = {\n scrum: scrum as () => Methodology,\n kanban: kanban as () => Methodology,\n waterfall: waterfall as () => Methodology,\n};\n\nexport const USAGE = [\n \"exwf init <scrum|kanban|waterfall> --config <file> [--roles <file>]\",\n \"exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]\",\n \"exwf next [--max n] [--fallback-tokens-per-weight n]\",\n \"exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m [--estimate] [--role r]\",\n \"exwf account <item> [--line n] [--tokens-in n] [--tokens-out n] [--duration-ms n] [--model m] [--by who]\",\n \"exwf ceremony <name> [input.json] [--by who]\",\n \"exwf decide <pendingId> approve|reject [--by who] [--note text]\",\n \"exwf config set <patch.json> [--by who] exwf unblock <item> [--blocker id] [--note text] [--by who]\",\n \"exwf status | board | metrics | pending | lessons\",\n \"exwf validate <action.json> exwf role add <manifest.json> | role list\",\n];\n\nexport interface Parsed {\n positional: string[];\n flags: Record<string, string>;\n}\n/** Flags that take no value; every other flag needs one. */\nconst BOOLEAN_FLAGS = new Set([\"estimate\"]);\n\nexport function parseArgs(argv: string[]): Parsed {\n const positional: string[] = [];\n const flags: Record<string, string> = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i]!;\n if (a.startsWith(\"--\")) {\n const key = a.slice(2);\n if (BOOLEAN_FLAGS.has(key)) {\n flags[key] = \"true\";\n continue;\n }\n const val = argv[i + 1];\n if (val === undefined || val.startsWith(\"--\"))\n fail(\"invalid-input\", `--${key} needs a value`, `pass --${key} <text>`);\n flags[key] = val;\n i++;\n } else positional.push(a);\n }\n return { positional, flags };\n}\n\nasync function readJson<T>(file: string): Promise<T> {\n try {\n return JSON.parse(await readFile(file, \"utf8\")) as T;\n } catch (e) {\n return fail(\n \"invalid-input\",\n `cannot read JSON from ${file}: ${(e as Error).message}`,\n \"check the path and that the file is valid JSON\",\n );\n }\n}\n\nfunction methodologyOf(state: WorkflowState): Methodology {\n const f = Object.hasOwn(METHODOLOGIES, state.methodology)\n ? METHODOLOGIES[state.methodology]\n : undefined;\n if (!f)\n fail(\n \"config-invalid\",\n `methodology \"${state.methodology}\" is not available in this build`,\n `available: ${Object.keys(METHODOLOGIES).join(\", \")}`,\n );\n return f();\n}\n\nfunction num(flags: Record<string, string>, key: string): number {\n const v = Number(flags[key]);\n if (!Number.isFinite(v))\n fail(\n \"invalid-input\",\n `--${key} must be a number (got ${JSON.stringify(flags[key])})`,\n `pass --${key} <n>`,\n );\n return v;\n}\n\nexport interface CommandResult {\n exit: 0 | 1 | 2;\n out: unknown;\n}\n\n/** Commands that load, change and save the state: they run under .workflow/state.lock. */\nconst WRITERS = new Set([\n \"init\",\n \"add\",\n \"edit\",\n \"next\",\n \"complete\",\n \"account\",\n \"ceremony\",\n \"decide\",\n \"unblock\",\n]);\n\nexport async function runCommand(argv: string[], cwd: string): Promise<CommandResult> {\n try {\n const [cmd, sub] = parseArgs(argv).positional;\n const writes =\n cmd !== undefined &&\n (WRITERS.has(cmd) ||\n (cmd === \"role\" && sub === \"add\") ||\n (cmd === \"config\" && sub === \"set\"));\n return writes ? await withStateLock(cwd, () => execute(argv, cwd)) : await execute(argv, cwd);\n } catch (e) {\n if (e instanceof WorkflowError) return { exit: 1, out: { ok: false, error: e.toJSON() } };\n throw e;\n }\n}\n\nasync function execute(argv: string[], cwd: string): Promise<CommandResult> {\n const { positional, flags } = parseArgs(argv);\n const [cmd, ...rest] = positional;\n const by = flags[\"by\"] ?? \"human\";\n const now = new Date().toISOString();\n switch (cmd) {\n case \"init\": {\n const [name] = rest;\n const f = name && Object.hasOwn(METHODOLOGIES, name) ? METHODOLOGIES[name] : undefined;\n if (!f || !flags[\"config\"]) return { exit: 2, out: { ok: false, usage: USAGE } };\n try {\n await stat(statePath(cwd));\n fail(\n \"invalid-input\",\n `${statePath(cwd)} already exists`,\n \"delete .workflow/state.json to start over\",\n );\n } catch (e) {\n if (e instanceof WorkflowError) throw e;\n if ((e as NodeJS.ErrnoException).code !== \"ENOENT\") throw e;\n }\n const config = await readJson<unknown>(path.resolve(cwd, flags[\"config\"]));\n const roles = flags[\"roles\"]\n ? await readJson<Role[]>(path.resolve(cwd, flags[\"roles\"]))\n : undefined;\n if (roles !== undefined) {\n if (!Array.isArray(roles))\n fail(\n \"invalid-input\",\n `roles file ${flags[\"roles\"]} must contain an array of role manifests`,\n \"wrap the manifests in [ ... ]\",\n );\n for (const r of roles) assertValid(roleSchema, r, `roles file ${flags[\"roles\"]}`);\n }\n const res = init(\n roles\n ? { methodology: f(), config, roles, by, now }\n : { methodology: f(), config, by, now },\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n state: {\n methodology: res.state.methodology,\n stages: res.state.stages.map((s) => s.id),\n roles: Object.keys(res.state.roles),\n },\n },\n };\n }\n case \"add\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const item = await readJson<NewItem>(path.resolve(cwd, rest[0]));\n assertValid(newItemSchema, item, `item file ${rest[0]}`);\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"item.add\", by, payload: { item } },\n (s) => addItem(s, item, by, now),\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n item: getItem(res.state, item.id),\n },\n };\n }\n case \"edit\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const id = rest[0];\n const patch = await readJson<ItemPatch>(path.resolve(cwd, rest[1]));\n assertValid(itemPatchSchema, patch, `patch file ${rest[1]}`);\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"item.edit\", by, payload: { id, patch } },\n (s) => editItem(s, id, patch, by, now),\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: { ok: true, warnings: res.warnings, item: getItem(res.state, id) },\n };\n }\n case \"next\": {\n const state = await loadState(cwd);\n const opts: PlanOptions = { now };\n if (flags[\"max\"]) opts.max = num(flags, \"max\");\n if (flags[\"fallback-tokens-per-weight\"])\n opts.fallbackTokensPerWeight = num(flags, \"fallback-tokens-per-weight\");\n const res = planNext(state, methodologyOf(state), opts);\n // briefs first: a crash then leaves an orphan brief (overwritten next dispatch), never a dispatched item without one\n for (const b of res.briefs) await saveBrief(cwd, b);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n reason: res.reason ?? null,\n skipped: res.skipped,\n briefs: res.briefs,\n },\n };\n }\n case \"complete\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const handoff = await readJson<Handoff>(path.resolve(cwd, rest[1]));\n assertValid(handoffSchema, handoff, `handoff file ${rest[1]}`);\n if (handoff.item !== rest[0])\n fail(\n \"handoff-invalid\",\n `handoff.item \"${handoff.item}\" differs from the command's item \"${rest[0]}\"`,\n \"make them match\",\n );\n const role = flags[\"role\"] ?? handoff.role;\n const durationMs = num(flags, \"duration-ms\");\n const acc: Accounting = {\n item: rest[0],\n role,\n model: flags[\"model\"] ?? \"\",\n tokensIn: num(flags, \"tokens-in\"),\n tokensOut: num(flags, \"tokens-out\"),\n durationMs,\n startedAt: new Date(Date.parse(now) - durationMs).toISOString(),\n endedAt: now,\n };\n if (flags[\"estimate\"] === \"true\") acc.estimate = true;\n const res = complete(state, methodologyOf(state), { ...handoff, role }, acc, now);\n // handoff first: a retry of the same command reproduces the same seq and overwrites an orphan\n await saveHandoff(cwd, handoff, res.state.events.length);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n item: getItem(res.state, rest[0]),\n },\n };\n }\n case \"account\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const patch: AccountingPatch = {};\n if (flags[\"tokens-in\"] !== undefined) patch.tokensIn = num(flags, \"tokens-in\");\n if (flags[\"tokens-out\"] !== undefined) patch.tokensOut = num(flags, \"tokens-out\");\n if (flags[\"duration-ms\"] !== undefined) patch.durationMs = num(flags, \"duration-ms\");\n if (flags[\"model\"] !== undefined) patch.model = flags[\"model\"];\n const line = flags[\"line\"] !== undefined ? num(flags, \"line\") : undefined;\n const s2 = correctAccounting(state, rest[0], patch, flags[\"by\"] ?? \"human\", now, line);\n await saveState(cwd, s2);\n const ev = lastEvent(s2)!;\n const idx = (ev.payload as { line: number }).line;\n const mine = s2.accounting.filter((a) => a.item === rest[0]);\n return { exit: 0, out: { ok: true, line: mine[idx - 1], event: ev } };\n }\n case \"ceremony\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const c = Object.hasOwn(m.ceremonies, rest[0]) ? m.ceremonies[rest[0]] : undefined;\n if (!c)\n fail(\n \"unknown-ceremony\",\n `\"${rest[0]}\" is not a ${m.name} ceremony`,\n `available: ${Object.keys(m.ceremonies).join(\", \")}`,\n );\n const input = rest[1]\n ? await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]))\n : {};\n const res = c(state, { ...input, by, now });\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n lastEvent: lastEvent(res.state),\n },\n };\n }\n case \"config\": {\n if (rest[0] !== \"set\" || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const patch = await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]));\n const res = changeConfig(state, methodologyOf(state), patch, by, now);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n changed: (lastEvent(res.state)!.payload as { changed: string[] }).changed,\n config: res.state.config,\n },\n };\n }\n case \"unblock\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const id = rest[0];\n const state = await loadState(cwd);\n const open = getItem(state, id)\n .blockers.filter((b) => !b.clearedAt)\n .map((b) => b.id);\n if (open.length === 0)\n fail(\n \"invalid-input\",\n `item ${id} has no open blocker`,\n \"nothing to clear; check exwf board\",\n );\n const blockers = flags[\"blocker\"] !== undefined ? [flags[\"blocker\"]] : open;\n const note = flags[\"note\"];\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"blocker.clear\", by, payload: { id, blockers, note: note ?? null } },\n (s) => blockers.reduce((acc, b) => clearBlocker(acc, id, b, by, now, note), s),\n );\n await saveState(cwd, res.state);\n return { exit: 0, out: { ok: true, warnings: res.warnings, item: getItem(res.state, id) } };\n }\n case \"decide\": {\n if (!rest[0] || (rest[1] !== \"approve\" && rest[1] !== \"reject\"))\n return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const entry = state.pending.find((p) => p.id === rest[0]);\n const s2 = decide(\n state,\n rest[0],\n rest[1],\n by,\n flags[\"note\"] ?? \"\",\n now,\n methodologyOf(state),\n );\n await saveState(cwd, s2);\n return {\n exit: 0,\n out: { ok: true, item: entry?.item ? getItem(s2, entry.item) : null },\n };\n }\n case \"status\": {\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const counts: Record<ItemStatus, number> = {\n todo: 0,\n in_progress: 0,\n blocked: 0,\n review: 0,\n awaiting_human: 0,\n done: 0,\n dropped: 0,\n };\n for (const i of Object.values(state.items)) counts[i.status] += 1;\n return {\n exit: 0,\n out: {\n ok: true,\n methodology: state.methodology,\n openIteration: openIteration(state) ?? null,\n counts,\n pending: state.pending,\n openQuestions: openQuestions(state),\n lastEvent: lastEvent(state),\n report: m.report ? m.report(state) : null,\n },\n };\n }\n case \"board\": {\n const state = await loadState(cwd);\n const columns = state.stages.map((st) => ({\n stage: st.id,\n wipLimit: st.wipLimit ?? null,\n items: Object.values(state.items)\n .filter((i) => i.stage === st.id && i.status !== \"dropped\")\n .map((i) => ({\n id: i.id,\n title: i.title,\n status: i.status,\n role: i.role ?? null,\n age: i.transitions.length\n ? Date.parse(now) - Date.parse(i.transitions[i.transitions.length - 1]!.at)\n : null,\n })),\n }));\n return { exit: 0, out: { ok: true, columns } };\n }\n case \"metrics\": {\n const state = await loadState(cwd);\n return {\n exit: 0,\n out: { ok: true, metrics: methodologyOf(state).metrics(state) },\n };\n }\n case \"pending\":\n return {\n exit: 0,\n out: { ok: true, pending: (await loadState(cwd)).pending },\n };\n case \"lessons\":\n return {\n exit: 0,\n out: { ok: true, lessons: (await loadState(cwd)).lessons },\n };\n case \"validate\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const action = await readJson<Action>(path.resolve(cwd, rest[0]));\n return {\n exit: 0,\n out: {\n ok: true,\n violations: validateAction(state, methodologyOf(state), action),\n },\n };\n }\n case \"role\": {\n const state = await loadState(cwd);\n if (rest[0] === \"list\")\n return {\n exit: 0,\n out: {\n ok: true,\n roles: Object.keys(state.roles),\n detail: state.roles,\n },\n };\n if (rest[0] === \"add\" && rest[1]) {\n const manifest = await readJson<Role>(path.resolve(cwd, rest[1]));\n assertValid(roleSchema, manifest, `role manifest ${rest[1]}`);\n const s2 = registerRole(state, manifest, by, now);\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, roles: Object.keys(s2.roles) } };\n }\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n default:\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands.ts"],"names":["METHODOLOGIES","scrum","kanban","waterfall","USAGE","BOOLEAN_FLAGS","parseArgs","argv","positional","flags","i","a","key","val","fail","readJson","file","readFile","e","methodologyOf","state","f","num","v","WRITERS","runCommand","cwd","cmd","sub","withStateLock","execute","WorkflowError","rest","by","now","name","stat","statePath","config","path","roles","r","assertValid","roleSchema","res","init","saveState","s","loadState","item","newItemSchema","applyAction","addItem","getItem","id","patch","itemPatchSchema","editItem","opts","next","b","saveBrief","handoff","handoffSchema","role","durationMs","acc","complete","saveHandoff","line","s2","correctAccounting","ev","lastEvent","idx","m","c","input","changeConfig","open","blockers","note","clearBlocker","entry","p","decide","counts","openIteration","openQuestions","st","action","validateAction","manifest","registerRole"],"mappings":"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","file":"chunk-YJN4JEJU.cjs","sourcesContent":["import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n loadState,\n saveBrief,\n saveHandoff,\n saveState,\n statePath,\n withStateLock,\n} from \"../adapters/file.ts\";\nimport { next as planNext, openQuestions } from \"../brief.ts\";\nimport { complete } from \"../complete.ts\";\nimport { correctAccounting, type AccountingPatch } from \"../accounting.ts\";\nimport { WorkflowError, fail } from \"../errors.ts\";\nimport { decide } from \"../gates.ts\";\nimport { addItem, clearBlocker, editItem, getItem, type ItemPatch } from \"../items.ts\";\nimport { applyAction, changeConfig, init, validateAction } from \"../methodology.ts\";\nimport { openIteration, type PlanOptions } from \"../planner.ts\";\nimport { registerRole } from \"../roles.ts\";\nimport {\n assertValid,\n handoffSchema,\n itemPatchSchema,\n newItemSchema,\n roleSchema,\n} from \"../schema/index.ts\";\nimport { lastEvent } from \"../state.ts\";\nimport { scrum } from \"../scrum/index.ts\";\nimport { kanban } from \"../kanban/index.ts\";\nimport { waterfall } from \"../waterfall/index.ts\";\nimport type {\n Accounting,\n Action,\n Handoff,\n ItemStatus,\n Methodology,\n NewItem,\n Role,\n WorkflowState,\n} from \"../types.ts\";\n\nconst METHODOLOGIES: Record<string, () => Methodology> = {\n scrum: scrum as () => Methodology,\n kanban: kanban as () => Methodology,\n waterfall: waterfall as () => Methodology,\n};\n\nexport const USAGE = [\n \"exwf init <scrum|kanban|waterfall> --config <file> [--roles <file>]\",\n \"exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]\",\n \"exwf next [--max n] [--fallback-tokens-per-weight n]\",\n \"exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m [--estimate] [--role r]\",\n \"exwf account <item> [--line n] [--tokens-in n] [--tokens-out n] [--duration-ms n] [--model m] [--by who]\",\n \"exwf ceremony <name> [input.json] [--by who]\",\n \"exwf decide <pendingId> approve|reject [--by who] [--note text]\",\n \"exwf config set <patch.json> [--by who] exwf unblock <item> [--blocker id] [--note text] [--by who]\",\n \"exwf status | board | metrics | pending | lessons\",\n \"exwf validate <action.json> exwf role add <manifest.json> | role list\",\n];\n\nexport interface Parsed {\n positional: string[];\n flags: Record<string, string>;\n}\n/** Flags that take no value; every other flag needs one. */\nconst BOOLEAN_FLAGS = new Set([\"estimate\"]);\n\nexport function parseArgs(argv: string[]): Parsed {\n const positional: string[] = [];\n const flags: Record<string, string> = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i]!;\n if (a.startsWith(\"--\")) {\n const key = a.slice(2);\n if (BOOLEAN_FLAGS.has(key)) {\n flags[key] = \"true\";\n continue;\n }\n const val = argv[i + 1];\n if (val === undefined || val.startsWith(\"--\"))\n fail(\"invalid-input\", `--${key} needs a value`, `pass --${key} <text>`);\n flags[key] = val;\n i++;\n } else positional.push(a);\n }\n return { positional, flags };\n}\n\nasync function readJson<T>(file: string): Promise<T> {\n try {\n return JSON.parse(await readFile(file, \"utf8\")) as T;\n } catch (e) {\n return fail(\n \"invalid-input\",\n `cannot read JSON from ${file}: ${(e as Error).message}`,\n \"check the path and that the file is valid JSON\",\n );\n }\n}\n\nfunction methodologyOf(state: WorkflowState): Methodology {\n const f = Object.hasOwn(METHODOLOGIES, state.methodology)\n ? METHODOLOGIES[state.methodology]\n : undefined;\n if (!f)\n fail(\n \"config-invalid\",\n `methodology \"${state.methodology}\" is not available in this build`,\n `available: ${Object.keys(METHODOLOGIES).join(\", \")}`,\n );\n return f();\n}\n\nfunction num(flags: Record<string, string>, key: string): number {\n const v = Number(flags[key]);\n if (!Number.isFinite(v))\n fail(\n \"invalid-input\",\n `--${key} must be a number (got ${JSON.stringify(flags[key])})`,\n `pass --${key} <n>`,\n );\n return v;\n}\n\nexport interface CommandResult {\n exit: 0 | 1 | 2;\n out: unknown;\n}\n\n/** Commands that load, change and save the state: they run under .workflow/state.lock. */\nconst WRITERS = new Set([\n \"init\",\n \"add\",\n \"edit\",\n \"next\",\n \"complete\",\n \"account\",\n \"ceremony\",\n \"decide\",\n \"unblock\",\n]);\n\nexport async function runCommand(argv: string[], cwd: string): Promise<CommandResult> {\n try {\n const [cmd, sub] = parseArgs(argv).positional;\n const writes =\n cmd !== undefined &&\n (WRITERS.has(cmd) ||\n (cmd === \"role\" && sub === \"add\") ||\n (cmd === \"config\" && sub === \"set\"));\n return writes ? await withStateLock(cwd, () => execute(argv, cwd)) : await execute(argv, cwd);\n } catch (e) {\n if (e instanceof WorkflowError) return { exit: 1, out: { ok: false, error: e.toJSON() } };\n throw e;\n }\n}\n\nasync function execute(argv: string[], cwd: string): Promise<CommandResult> {\n const { positional, flags } = parseArgs(argv);\n const [cmd, ...rest] = positional;\n const by = flags[\"by\"] ?? \"human\";\n const now = new Date().toISOString();\n switch (cmd) {\n case \"init\": {\n const [name] = rest;\n const f = name && Object.hasOwn(METHODOLOGIES, name) ? METHODOLOGIES[name] : undefined;\n if (!f || !flags[\"config\"]) return { exit: 2, out: { ok: false, usage: USAGE } };\n try {\n await stat(statePath(cwd));\n fail(\n \"invalid-input\",\n `${statePath(cwd)} already exists`,\n \"delete .workflow/state.json to start over\",\n );\n } catch (e) {\n if (e instanceof WorkflowError) throw e;\n if ((e as NodeJS.ErrnoException).code !== \"ENOENT\") throw e;\n }\n const config = await readJson<unknown>(path.resolve(cwd, flags[\"config\"]));\n const roles = flags[\"roles\"]\n ? await readJson<Role[]>(path.resolve(cwd, flags[\"roles\"]))\n : undefined;\n if (roles !== undefined) {\n if (!Array.isArray(roles))\n fail(\n \"invalid-input\",\n `roles file ${flags[\"roles\"]} must contain an array of role manifests`,\n \"wrap the manifests in [ ... ]\",\n );\n for (const r of roles) assertValid(roleSchema, r, `roles file ${flags[\"roles\"]}`);\n }\n const res = init(\n roles\n ? { methodology: f(), config, roles, by, now }\n : { methodology: f(), config, by, now },\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n state: {\n methodology: res.state.methodology,\n stages: res.state.stages.map((s) => s.id),\n roles: Object.keys(res.state.roles),\n },\n },\n };\n }\n case \"add\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const item = await readJson<NewItem>(path.resolve(cwd, rest[0]));\n assertValid(newItemSchema, item, `item file ${rest[0]}`);\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"item.add\", by, payload: { item } },\n (s) => addItem(s, item, by, now),\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n item: getItem(res.state, item.id),\n },\n };\n }\n case \"edit\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const id = rest[0];\n const patch = await readJson<ItemPatch>(path.resolve(cwd, rest[1]));\n assertValid(itemPatchSchema, patch, `patch file ${rest[1]}`);\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"item.edit\", by, payload: { id, patch } },\n (s) => editItem(s, id, patch, by, now),\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: { ok: true, warnings: res.warnings, item: getItem(res.state, id) },\n };\n }\n case \"next\": {\n const state = await loadState(cwd);\n const opts: PlanOptions = { now };\n if (flags[\"max\"]) opts.max = num(flags, \"max\");\n if (flags[\"fallback-tokens-per-weight\"])\n opts.fallbackTokensPerWeight = num(flags, \"fallback-tokens-per-weight\");\n const res = planNext(state, methodologyOf(state), opts);\n // briefs first: a crash then leaves an orphan brief (overwritten next dispatch), never a dispatched item without one\n for (const b of res.briefs) await saveBrief(cwd, b);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n reason: res.reason ?? null,\n skipped: res.skipped,\n briefs: res.briefs,\n },\n };\n }\n case \"complete\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const handoff = await readJson<Handoff>(path.resolve(cwd, rest[1]));\n assertValid(handoffSchema, handoff, `handoff file ${rest[1]}`);\n if (handoff.item !== rest[0])\n fail(\n \"handoff-invalid\",\n `handoff.item \"${handoff.item}\" differs from the command's item \"${rest[0]}\"`,\n \"make them match\",\n );\n const role = flags[\"role\"] ?? handoff.role;\n const durationMs = num(flags, \"duration-ms\");\n const acc: Accounting = {\n item: rest[0],\n role,\n model: flags[\"model\"] ?? \"\",\n tokensIn: num(flags, \"tokens-in\"),\n tokensOut: num(flags, \"tokens-out\"),\n durationMs,\n startedAt: new Date(Date.parse(now) - durationMs).toISOString(),\n endedAt: now,\n };\n if (flags[\"estimate\"] === \"true\") acc.estimate = true;\n const res = complete(state, methodologyOf(state), { ...handoff, role }, acc, now);\n // handoff first: a retry of the same command reproduces the same seq and overwrites an orphan\n await saveHandoff(cwd, handoff, res.state.events.length);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n item: getItem(res.state, rest[0]),\n },\n };\n }\n case \"account\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const patch: AccountingPatch = {};\n if (flags[\"tokens-in\"] !== undefined) patch.tokensIn = num(flags, \"tokens-in\");\n if (flags[\"tokens-out\"] !== undefined) patch.tokensOut = num(flags, \"tokens-out\");\n if (flags[\"duration-ms\"] !== undefined) patch.durationMs = num(flags, \"duration-ms\");\n if (flags[\"model\"] !== undefined) patch.model = flags[\"model\"];\n const line = flags[\"line\"] !== undefined ? num(flags, \"line\") : undefined;\n const s2 = correctAccounting(state, rest[0], patch, flags[\"by\"] ?? \"human\", now, line);\n await saveState(cwd, s2);\n const ev = lastEvent(s2)!;\n const idx = (ev.payload as { line: number }).line;\n const mine = s2.accounting.filter((a) => a.item === rest[0]);\n return { exit: 0, out: { ok: true, line: mine[idx - 1], event: ev } };\n }\n case \"ceremony\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const c = Object.hasOwn(m.ceremonies, rest[0]) ? m.ceremonies[rest[0]] : undefined;\n if (!c)\n fail(\n \"unknown-ceremony\",\n `\"${rest[0]}\" is not a ${m.name} ceremony`,\n `available: ${Object.keys(m.ceremonies).join(\", \")}`,\n );\n const input = rest[1]\n ? await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]))\n : {};\n const res = c(state, { ...input, by, now });\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n lastEvent: lastEvent(res.state),\n },\n };\n }\n case \"config\": {\n if (rest[0] !== \"set\" || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const patch = await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]));\n const res = changeConfig(state, methodologyOf(state), patch, by, now);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n changed: (lastEvent(res.state)!.payload as { changed: string[] }).changed,\n config: res.state.config,\n },\n };\n }\n case \"unblock\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const id = rest[0];\n const state = await loadState(cwd);\n const open = getItem(state, id)\n .blockers.filter((b) => !b.clearedAt)\n .map((b) => b.id);\n if (open.length === 0)\n fail(\n \"invalid-input\",\n `item ${id} has no open blocker`,\n \"nothing to clear; check exwf board\",\n );\n const blockers = flags[\"blocker\"] !== undefined ? [flags[\"blocker\"]] : open;\n const note = flags[\"note\"];\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"blocker.clear\", by, payload: { id, blockers, note: note ?? null } },\n (s) => blockers.reduce((acc, b) => clearBlocker(acc, id, b, by, now, note), s),\n );\n await saveState(cwd, res.state);\n return { exit: 0, out: { ok: true, warnings: res.warnings, item: getItem(res.state, id) } };\n }\n case \"decide\": {\n if (!rest[0] || (rest[1] !== \"approve\" && rest[1] !== \"reject\"))\n return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const entry = state.pending.find((p) => p.id === rest[0]);\n const s2 = decide(\n state,\n rest[0],\n rest[1],\n by,\n flags[\"note\"] ?? \"\",\n now,\n methodologyOf(state),\n );\n await saveState(cwd, s2);\n return {\n exit: 0,\n out: { ok: true, item: entry?.item ? getItem(s2, entry.item) : null },\n };\n }\n case \"status\": {\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const counts: Record<ItemStatus, number> = {\n todo: 0,\n in_progress: 0,\n blocked: 0,\n review: 0,\n awaiting_human: 0,\n done: 0,\n dropped: 0,\n };\n for (const i of Object.values(state.items)) counts[i.status] += 1;\n return {\n exit: 0,\n out: {\n ok: true,\n methodology: state.methodology,\n openIteration: openIteration(state) ?? null,\n counts,\n pending: state.pending,\n openQuestions: openQuestions(state),\n lastEvent: lastEvent(state),\n report: m.report ? m.report(state) : null,\n },\n };\n }\n case \"board\": {\n const state = await loadState(cwd);\n const columns = state.stages.map((st) => ({\n stage: st.id,\n wipLimit: st.wipLimit ?? null,\n items: Object.values(state.items)\n .filter((i) => i.stage === st.id && i.status !== \"dropped\")\n .map((i) => ({\n id: i.id,\n title: i.title,\n status: i.status,\n role: i.role ?? null,\n age: i.transitions.length\n ? Date.parse(now) - Date.parse(i.transitions[i.transitions.length - 1]!.at)\n : null,\n })),\n }));\n return { exit: 0, out: { ok: true, columns } };\n }\n case \"metrics\": {\n const state = await loadState(cwd);\n return {\n exit: 0,\n out: { ok: true, metrics: methodologyOf(state).metrics(state) },\n };\n }\n case \"pending\":\n return {\n exit: 0,\n out: { ok: true, pending: (await loadState(cwd)).pending },\n };\n case \"lessons\":\n return {\n exit: 0,\n out: { ok: true, lessons: (await loadState(cwd)).lessons },\n };\n case \"validate\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const action = await readJson<Action>(path.resolve(cwd, rest[0]));\n return {\n exit: 0,\n out: {\n ok: true,\n violations: validateAction(state, methodologyOf(state), action),\n },\n };\n }\n case \"role\": {\n const state = await loadState(cwd);\n if (rest[0] === \"list\")\n return {\n exit: 0,\n out: {\n ok: true,\n roles: Object.keys(state.roles),\n detail: state.roles,\n },\n };\n if (rest[0] === \"add\" && rest[1]) {\n const manifest = await readJson<Role>(path.resolve(cwd, rest[1]));\n assertValid(roleSchema, manifest, `role manifest ${rest[1]}`);\n const s2 = registerRole(state, manifest, by, now);\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, roles: Object.keys(s2.roles) } };\n }\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n default:\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {e,R,p,O,V,Y as Y$1,a,y,u,N,c,v,B,x,G,J as J$1,K as K$1,C as C$1,z,i,s,H}from'./chunk-YBHHICTZ.mjs';import {b}from'./chunk-2FRRD6A3.mjs';function Q(r,s){let e=[];for(let n of r.events)n.type==="item.completed"&&n.payload.id===s&&e.push({...n.payload,at:n.at});return e}function J(r,s){let e=Q(r,s);return e[e.length-1]}function ee(r,s,e$1){e$1.role||b("unknown-role",`item "${e$1.id}" has no role assigned`,"dispatch it with next() or set item.role",{items:[e$1.id]});let n=e(r,e$1.role);n||b("unknown-role",`role "${e$1.role}" does not exist`,`registered roles: ${Object.keys(r.roles).join(", ")}`);let m=[],a=[...n.do_not],i=[...e$1.dependsOn,...e$1.type==="bug"||e$1.type==="change-request"?e$1.affects??[]:[]];for(let o of i){let d=J(r,o);if(d){m.push({item:o,produced:d.produced,notes:d.notes});for(let g of d.do_not)a.includes(g)||a.push(g);}}let l=Q(r,e$1.id).map(o=>({role:o.role,verdict:o.verdict,notes:o.notes,produced:o.produced,at:o.at})),t=new Set([e$1.id,...e$1.dependsOn]),p$1=Object.values(r.items).filter(o=>(o.type==="bug"||o.type==="change-request")&&o.id!==e$1.id&&o.status!=="done"&&o.status!=="dropped"&&(o.affects??[]).some(d=>t.has(d))).map(o=>({id:o.id,title:o.title,affects:o.affects??[]})),$=R(r),f=p(r,e$1.stage).gate,y={item:e$1,role:n,modelTier:n.modelTier,invariants:[...s.invariants(r,e$1),...r.agreements],do_not:a,acceptance:e$1.acceptance,upstream:m,priorHandoffs:l,relatedBugs:p$1,budgetRemaining:$?O($.budget,$.spent):{}};if(f&&(y.gateAhead=f),e$1.type==="question"&&e$1.parent){let o=J(r,e$1.parent);if(o){y.parent={item:e$1.parent,role:o.role,notes:o.notes,produced:o.produced,open_questions:o.open_questions??[],do_not:o.do_not};for(let d of o.do_not)a.includes(d)||a.push(d);}}return y}function ce(r){let s=new Map;for(let e of r.events){if(e.type!=="item.completed")continue;let n=e.payload;s.delete(n.id),s.set(n.id,{...n,at:e.at});}return [...s.values()].filter(e=>(e.verdict==="done"||e.verdict==="needs-review")&&(e.open_questions??[]).length>0).map(e=>({item:e.id,role:e.role,questions:e.open_questions??[],at:e.at}))}function ue(r,s,e={}){let n=V(r,s,e),m=n.dispatched.map(a=>ee(n.state,s,n.state.items[a.id]));return n.reason?{state:n.state,briefs:m,skipped:n.skipped,reason:n.reason}:{state:n.state,briefs:m,skipped:n.skipped}}var X=["done","needs-review","rework","blocked","escalate"],K=["policy","skill","memory","spec","review"],C=r=>typeof r=="object"&&r!==null&&!Array.isArray(r),_=r=>typeof r=="string";function te(r,s,e){let n=u(r,s.item);n.status!=="in_progress"&&b("invalid-transition",`item "${n.id}" is ${n.status}, not in_progress`,"only dispatched items can be completed; call next() first",{items:[n.id]}),Array.isArray(s.do_not)||b("handoff-invalid",`handoff for "${n.id}" has no do_not array`,"set handoff.do_not to [] when there is nothing to forbid",{items:[n.id]}),(!Array.isArray(s.produced)||!Array.isArray(s.open_questions))&&b("handoff-invalid",`handoff for "${n.id}" needs produced[] and open_questions[]`,"pass empty arrays when there is nothing",{items:[n.id]});let m=(t,p)=>b("handoff-invalid",`handoff for "${n.id}": ${t}`,p,{items:[n.id]}),a=s.verdict??"done";X.includes(a)||m(`unknown verdict ${JSON.stringify(a)}`,`use one of: ${X.join(", ")}`),s.produced.every(t=>C(t)&&_(t.kind)&&_(t.ref))||m("produced[] entries need string kind and ref",'use { "kind": "code", "ref": "src/a.ts" }');let i=s.lessons??[];(!Array.isArray(i)||!i.every(t=>C(t)&&_(t.text)&&K.includes(t.scope)))&&m("lessons[] entries need a text and a scope",`scope is one of: ${K.join(", ")}`);let l=s.follow_ups??[];(!Array.isArray(l)||!l.every(t=>C(t)&&_(t.id)&&_(t.title)))&&m("follow_ups[] entries need a string id and title","describe each follow-up as a new item"),s.role!==n.role&&b("handoff-invalid",`handoff role "${s.role}" differs from the dispatched role "${n.role}"`,`complete as "${n.role}" or re-dispatch`,{items:[n.id]}),(!e.model||e.model.trim()==="")&&b("accounting-invalid",`accounting for "${n.id}" has no model`,"record the model id that actually ran the work",{items:[n.id]});for(let t of ["tokensIn","tokensOut","durationMs"])(!Number.isFinite(e[t])||e[t]<0)&&b("accounting-invalid",`accounting.${t} must be a non-negative number`,`measure ${t} from the host's usage report`,{items:[n.id]});e.tokensIn+e.tokensOut===0&&e.estimate!==true&&b("accounting-invalid",`accounting for "${n.id}" records 0 tokens`,"pass the host's usage figures, or set estimate: true (CLI --estimate) to record a placeholder and correct it later with correctAccounting / exwf account",{items:[n.id]});}function Y(r){for(let s=r.transitions.length-1;s>=0;s--){let e=r.transitions[s];if(e.to.status==="in_progress")return e.from.stage}return r.stage}function oe(r,s){return H(r,s)?.from.stage??Y(s)}function be(r,s,e,n,m){te(r,e,n);let a,i=Y$1(r,s,{type:"item.complete",by:e.role,payload:{item:e.item,handoff:e}},()=>(a=ne(r,s,e,n,m),a.state));return {state:i.state,warnings:[...i.warnings,...a.warnings]}}function ne(r,s$1,e,n,m){let a$1=a(m),i$1=e.item,l=e.role,t={...r,accounting:[...r.accounting,n]};for(let o of e.produced)t=y(t,i$1,{kind:o.kind,ref:o.ref,by:l},a$1);let p$1=R(t);p$1&&(p$1.committed.includes(i$1)||u(t,i$1).iteration===p$1.id)&&(t={...t,iterations:t.iterations.map(o=>o.id===p$1.id?{...o,spent:N(o.spent,n)}:o)});for(let o of e.lessons??[]){let d=`L${t.lessons.length+1}`;t={...t,lessons:[...t.lessons,{id:d,at:a$1,text:o.text,scope:o.scope,status:"raised",from:l,item:i$1}]},t=c(t,"lesson.raised",l,{id:d,from:l,item:i$1,scope:o.scope},a$1);}let $=[];for(let o of e.follow_ups??[]){let d=t.stages[0],{iteration:g,...k}=o;t=v(t,{...k,stage:d.id,parent:i$1,tags:[...o.tags??[],"follow-up"]},l,a$1),$.push(o.id);}let f=e.verdict??"done",y$1=[];if((f==="done"||f==="needs-review")&&e.open_questions.length>0&&y$1.push({rule:"open-questions-ignored",severity:"warning",item:i$1,message:`"${i$1}" finished with ${e.open_questions.length} open question(s) nobody will see: ${e.open_questions.join(" | ")}`,fix:'use verdict "escalate" to route them to a role with capability escalate, or answer them in the next brief'}),f==="rework"){(!e.notes||e.notes.trim()==="")&&b("handoff-invalid",`rework on "${i$1}" needs notes`,"say what must change in handoff.notes",{items:[i$1]});let o=u(t,i$1);t=B(x(t,i$1,{stage:oe(t,o),status:"todo"},l,a$1),i$1),t=c(t,"item.rework",l,{id:i$1,by:l,notes:e.notes},a$1);}else if((f==="done"||f==="needs-review")&&u(t,i$1).type==="question"){let o=t.stages[t.stages.length-1].id;t=x(t,i$1,{stage:o,status:"done"},l,a$1);}else if(f==="done"||f==="needs-review"){let o=u(t,i$1),d=p(t,o.stage);if(G(t,o,d.exitPolicy,`leave "${d.id}"`),d.gate){let g=J$1(t,o,d.gate,l);g.outcome==="fail"&&b("gate-unmet",`gate "${d.gate.id}" blocks "${i$1}": ${g.violations.map(k=>k.message).join("; ")}`,g.violations.map(k=>k.fix).join("; "),{items:[i$1],rule:g.violations[0].rule}),g.outcome==="human"?t=K$1(t,{kind:"gate",item:i$1,gate:d.gate.id,question:`Approve gate "${d.gate.id}" for "${o.title}" (${i$1})?`},a$1):t=c(C$1(t,i$1,l,f==="needs-review",a$1),"gate.passed",l,{item:i$1,gate:d.gate.id},a$1);}else t=C$1(t,i$1,l,f==="needs-review",a$1);}else if(f==="blocked")t=z(t,i$1,e.notes||"blocked by worker",l,l,a$1);else if(f==="escalate"){let o=i(t,"escalate")[0];o||b("missing-capability",`no role has capability "escalate" to receive the question from "${i$1}"`,"register a role with capability escalate",{items:[i$1]});let d=Object.keys(t.items).filter(w=>w.startsWith(`${i$1}-q`)).length+1,g=`${i$1}-q${d}`,k=u(t,i$1),O=Y(k),b$1={id:g,type:"question",title:e.open_questions.join(" | ")||e.notes||`question from ${i$1}`,parent:i$1,role:o.id,priority:Number.MAX_SAFE_INTEGER,stage:O};k.iteration!==void 0&&(b$1.iteration=k.iteration),t=v(t,b$1,l,a$1),t=x(t,i$1,{stage:O,status:"todo"},l,a$1),t=s(t,i$1,w=>({...w,dependsOn:[...w.dependsOn,g]})),t=c(t,"item.escalated",l,{id:i$1,question:g,to:o.id},a$1);}return t=c(t,"item.completed",l,{id:i$1,role:l,verdict:f,produced:e.produced,notes:e.notes,do_not:e.do_not,open_questions:e.open_questions,followUps:$,tokens:n.tokensIn+n.tokensOut,durationMs:n.durationMs,model:n.model},a$1),s$1.afterComplete&&(t=s$1.afterComplete(t,i$1,a$1)),{state:t,warnings:y$1}}var se=[["tokensIn","tokens-in"],["tokensOut","tokens-out"],["durationMs","duration-ms"]],Z=r=>({tokensIn:r.tokensIn,tokensOut:r.tokensOut,durationMs:r.durationMs,model:r.model});function qe(r,s,e,n,m,a$1){u(r,s);let i=[];r.accounting.forEach((u,A)=>{u.item===s&&i.push(A);}),i.length===0&&b("invalid-input",`item "${s}" has no accounting line to correct`,`complete "${s}" first (exwf complete), then exwf account`,{items:[s]});let l=a$1??i.length;(!Number.isInteger(l)||l<1||l>i.length)&&b("invalid-input",`item "${s}" has ${i.length} accounting line(s), not line ${String(a$1)}`,`pass --line 1..${i.length}`,{items:[s]});let t=i[l-1],p=r.accounting[t];for(let[u,A]of se){let W=e[u];W!==void 0&&(!Number.isFinite(W)||W<0)&&b("accounting-invalid",`${u} must be a non-negative number`,`pass --${A} <n> with a measured figure`,{items:[s]});}e.model!==void 0&&e.model.trim()===""&&b("accounting-invalid","model must not be empty","pass --model with the model id that ran the work",{items:[s]});let{estimate:$,...f}=p,y={...f,tokensIn:e.tokensIn??p.tokensIn,tokensOut:e.tokensOut??p.tokensOut,durationMs:e.durationMs??p.durationMs,model:e.model??p.model};y.tokensIn+y.tokensOut===0&&b("accounting-invalid",`the correction leaves "${s}" at 0 tokens`,"pass the host's usage figures with --tokens-in / --tokens-out",{items:[s]});let o=Z(p),d=Z(y);o.tokensIn===d.tokensIn&&o.tokensOut===d.tokensOut&&o.durationMs===d.durationMs&&o.model===d.model&&p.estimate!==true&&b("no-op",`accounting for "${s}" line ${l} already has these figures`,"pass at least one different value to exwf account",{items:[s]});let k={tokens:d.tokensIn+d.tokensOut-(o.tokensIn+o.tokensOut),durationMs:d.durationMs-o.durationMs},O=r.items[s],b$1;for(let u of r.iterations)(u.committed.includes(s)||O.iteration===u.id)&&u.startedAt<=p.endedAt&&(u.endedAt===void 0||p.endedAt<=u.endedAt)&&(b$1=u);let w={...r,accounting:r.accounting.map((u,A)=>A===t?y:u)};return b$1&&(w={...w,iterations:w.iterations.map(u=>u.id===b$1.id?{...u,spent:{...u.spent,tokens:Math.max(0,u.spent.tokens+k.tokens),wallclockMs:Math.max(0,u.spent.wallclockMs+k.durationMs)}}:u)}),c(w,"accounting.corrected",n,{item:s,line:l,iteration:b$1?.id??null,before:o,after:d,delta:k},a(m))}export{ee as a,ce as b,ue as c,be as d,qe as e};//# sourceMappingURL=chunk-Z2G7DGDF.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-Z2G7DGDF.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brief.ts","../src/complete.ts","../src/accounting.ts"],"names":["completions","state","itemId","out","ev","lastCompletion","all","synthesizeBrief","methodology","item","fail","role","roleOf","upstream","doNot","sources","dep","p","d","priorHandoffs","touched","relatedBugs","b","a","it","openIteration","gate","stageOf","brief","remaining","openQuestions","last","next","opts","res","plan","briefs","VERDICTS","LESSON_SCOPES","isObj","x","str","validate","handoff","acc","getItem","bad","what","fix","verdict","lessons","l","followUps","f","k","pulledFromStage","i","t","reworkStage","lastDispatchBefore","complete","now","result","ruled","applyAction","completeBody","at","nowOf","id","s","addEvidence","addSpent","lid","appendEvent","n","first","_drop","rest","addItem","warnings","clearRole","moveItem","lastStageId","stage","assertPolicies","checkGate","v","raisePending","advanceItem","raiseBlocker","thinker","rolesWith","qid","parent","pulledFrom","q","patchItem","NUMERIC","pick","correctAccounting","patch","by","line","indexes","idx","before","flag","after","delta","owner"],"mappings":"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","file":"chunk-TEPK5Y36.mjs","sourcesContent":["import { remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { stageOf } from \"./items.ts\";\nimport { openIteration, plan, type PlanOptions, type PlanReason, type Skipped } from \"./planner.ts\";\nimport { roleOf } from \"./roles.ts\";\nimport type { Brief, Handoff, Methodology, Verdict, WorkItem, WorkflowState } from \"./types.ts\";\n\ninterface CompletedPayload {\n id: string;\n role: string;\n verdict: Verdict;\n produced: Handoff[\"produced\"];\n notes: string;\n do_not: string[];\n open_questions?: string[];\n}\n\nfunction completions(\n state: WorkflowState,\n itemId: string,\n): Array<CompletedPayload & { at: string }> {\n const out: Array<CompletedPayload & { at: string }> = [];\n for (const ev of state.events) {\n if (ev.type === \"item.completed\" && (ev.payload as CompletedPayload).id === itemId)\n out.push({ ...(ev.payload as CompletedPayload), at: ev.at });\n }\n return out;\n}\n\nfunction lastCompletion(state: WorkflowState, itemId: string): CompletedPayload | undefined {\n const all = completions(state, itemId);\n return all[all.length - 1];\n}\n\nexport function synthesizeBrief(\n state: WorkflowState,\n methodology: Methodology,\n item: WorkItem,\n): Brief {\n if (!item.role)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" has no role assigned`,\n \"dispatch it with next() or set item.role\",\n { items: [item.id] },\n );\n const role = roleOf(state, item.role);\n if (!role)\n fail(\n \"unknown-role\",\n `role \"${item.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const upstream: Brief[\"upstream\"] = [];\n const doNot = [...role.do_not];\n const sources = [\n ...item.dependsOn,\n ...(item.type === \"bug\" || item.type === \"change-request\" ? (item.affects ?? []) : []),\n ];\n for (const dep of sources) {\n const p = lastCompletion(state, dep);\n if (!p) continue;\n upstream.push({ item: dep, produced: p.produced, notes: p.notes });\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n const priorHandoffs: Brief[\"priorHandoffs\"] = completions(state, item.id).map((p) => ({\n role: p.role,\n verdict: p.verdict,\n notes: p.notes,\n produced: p.produced,\n at: p.at,\n }));\n const touched = new Set([item.id, ...item.dependsOn]);\n const relatedBugs: Brief[\"relatedBugs\"] = Object.values(state.items)\n .filter(\n (b) =>\n (b.type === \"bug\" || b.type === \"change-request\") &&\n b.id !== item.id &&\n b.status !== \"done\" &&\n b.status !== \"dropped\" &&\n (b.affects ?? []).some((a) => touched.has(a)),\n )\n .map((b) => ({ id: b.id, title: b.title, affects: b.affects ?? [] }));\n const it = openIteration(state);\n const gate = stageOf(state, item.stage).gate;\n const brief: Brief = {\n item,\n role,\n modelTier: role.modelTier,\n invariants: [...methodology.invariants(state, item), ...state.agreements],\n do_not: doNot,\n acceptance: item.acceptance,\n upstream,\n priorHandoffs,\n relatedBugs,\n budgetRemaining: it ? remaining(it.budget, it.spent) : {},\n };\n if (gate) brief.gateAhead = gate;\n if (item.type === \"question\" && item.parent) {\n const p = lastCompletion(state, item.parent);\n if (p) {\n brief.parent = {\n item: item.parent,\n role: p.role,\n notes: p.notes,\n produced: p.produced,\n open_questions: p.open_questions ?? [],\n do_not: p.do_not,\n };\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n }\n return brief;\n}\n\n/** Open questions of finished items: the last completion per item, verdict done/needs-review, with open_questions left unanswered. */\nexport function openQuestions(\n state: WorkflowState,\n): Array<{ item: string; role: string; questions: string[]; at: string }> {\n const last = new Map<string, CompletedPayload & { at: string }>();\n for (const ev of state.events) {\n if (ev.type !== \"item.completed\") continue;\n const p = ev.payload as CompletedPayload;\n last.delete(p.id);\n last.set(p.id, { ...p, at: ev.at });\n }\n return [...last.values()]\n .filter(\n (p) =>\n (p.verdict === \"done\" || p.verdict === \"needs-review\") &&\n (p.open_questions ?? []).length > 0,\n )\n .map((p) => ({ item: p.id, role: p.role, questions: p.open_questions ?? [], at: p.at }));\n}\n\nexport interface NextResult {\n state: WorkflowState;\n briefs: Brief[];\n skipped: Skipped[];\n reason?: PlanReason;\n}\n\nexport function next(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): NextResult {\n const res = plan(state, methodology, opts);\n const briefs = res.dispatched.map((d) =>\n synthesizeBrief(res.state, methodology, res.state.items[d.id]!),\n );\n return res.reason\n ? { state: res.state, briefs, skipped: res.skipped, reason: res.reason }\n : { state: res.state, briefs, skipped: res.skipped };\n}\n","import { addSpent } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { checkGate, lastDispatchBefore, raisePending } from \"./gates.ts\";\nimport {\n addEvidence,\n addItem,\n advanceItem,\n clearRole,\n getItem,\n moveItem,\n patchItem,\n raiseBlocker,\n stageOf,\n} from \"./items.ts\";\nimport { applyAction } from \"./methodology.ts\";\nimport { assertPolicies } from \"./policies.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Accounting,\n ApplyResult,\n Handoff,\n Methodology,\n NewItem,\n Violation,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nconst VERDICTS: readonly string[] = [\"done\", \"needs-review\", \"rework\", \"blocked\", \"escalate\"];\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst str = (x: unknown) => typeof x === \"string\";\n\nfunction validate(state: WorkflowState, handoff: Handoff, acc: Accounting): void {\n const item = getItem(state, handoff.item);\n if (item.status !== \"in_progress\")\n fail(\n \"invalid-transition\",\n `item \"${item.id}\" is ${item.status}, not in_progress`,\n \"only dispatched items can be completed; call next() first\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.do_not))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" has no do_not array`,\n \"set handoff.do_not to [] when there is nothing to forbid\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.produced) || !Array.isArray(handoff.open_questions))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" needs produced[] and open_questions[]`,\n \"pass empty arrays when there is nothing\",\n { items: [item.id] },\n );\n const bad = (what: string, fix: string) =>\n fail(\"handoff-invalid\", `handoff for \"${item.id}\": ${what}`, fix, { items: [item.id] });\n const verdict = handoff.verdict ?? \"done\";\n if (!VERDICTS.includes(verdict))\n bad(`unknown verdict ${JSON.stringify(verdict)}`, `use one of: ${VERDICTS.join(\", \")}`);\n if (!handoff.produced.every((p) => isObj(p) && str(p.kind) && str(p.ref)))\n bad(\"produced[] entries need string kind and ref\", 'use { \"kind\": \"code\", \"ref\": \"src/a.ts\" }');\n const lessons: unknown = handoff.lessons ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every((l) => isObj(l) && str(l.text) && LESSON_SCOPES.includes(l.scope as string))\n )\n bad(\n \"lessons[] entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const followUps: unknown = handoff.follow_ups ?? [];\n if (!Array.isArray(followUps) || !followUps.every((f) => isObj(f) && str(f.id) && str(f.title)))\n bad(\"follow_ups[] entries need a string id and title\", \"describe each follow-up as a new item\");\n if (handoff.role !== item.role)\n fail(\n \"handoff-invalid\",\n `handoff role \"${handoff.role}\" differs from the dispatched role \"${item.role}\"`,\n `complete as \"${item.role}\" or re-dispatch`,\n { items: [item.id] },\n );\n if (!acc.model || acc.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" has no model`,\n \"record the model id that actually ran the work\",\n { items: [item.id] },\n );\n for (const k of [\"tokensIn\", \"tokensOut\", \"durationMs\"] as const) {\n if (!Number.isFinite(acc[k]) || acc[k] < 0)\n fail(\n \"accounting-invalid\",\n `accounting.${k} must be a non-negative number`,\n `measure ${k} from the host's usage report`,\n { items: [item.id] },\n );\n }\n if (acc.tokensIn + acc.tokensOut === 0 && acc.estimate !== true)\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" records 0 tokens`,\n \"pass the host's usage figures, or set estimate: true (CLI --estimate) to record a placeholder and correct it later with correctAccounting / exwf account\",\n { items: [item.id] },\n );\n}\n\n/** Stage the item was pulled from: the `from.stage` of its last transition into in_progress, else its current stage. */\nfunction pulledFromStage(item: WorkItem): string {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === \"in_progress\") return t.from.stage;\n }\n return item.stage;\n}\n\n/** Stage a reworked item returns to: the from.stage of the last dispatch made from a stage strictly before the current one (so a reviewer's rework lands where the work was pulled from), else the plain pulled-from stage. */\nfunction reworkStage(state: WorkflowState, item: WorkItem): string {\n return lastDispatchBefore(state, item)?.from.stage ?? pulledFromStage(item);\n}\n\nexport function complete(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n validate(state, handoff, acc);\n // the methodology's rules see the completion (applyAction validates, appends nothing, then reduces)\n let result: ApplyResult | undefined;\n const ruled = applyAction(\n state,\n methodology,\n { type: \"item.complete\", by: handoff.role, payload: { item: handoff.item, handoff } },\n () => {\n result = completeBody(state, methodology, handoff, acc, now);\n return result.state;\n },\n );\n return { state: ruled.state, warnings: [...ruled.warnings, ...result!.warnings] };\n}\n\nfunction completeBody(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n const at = nowOf(now);\n const id = handoff.item;\n const role = handoff.role;\n let s: WorkflowState = { ...state, accounting: [...state.accounting, acc] };\n for (const p of handoff.produced)\n s = addEvidence(s, id, { kind: p.kind, ref: p.ref, by: role }, at);\n const it = openIteration(s);\n if (it && (it.committed.includes(id) || getItem(s, id).iteration === it.id)) {\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, spent: addSpent(x.spent, acc) } : x,\n ),\n };\n }\n\n for (const l of handoff.lessons ?? []) {\n const lid = `L${s.lessons.length + 1}`;\n s = {\n ...s,\n lessons: [\n ...s.lessons,\n { id: lid, at, text: l.text, scope: l.scope, status: \"raised\", from: role, item: id },\n ],\n };\n s = appendEvent(\n s,\n \"lesson.raised\",\n role,\n { id: lid, from: role, item: id, scope: l.scope },\n at,\n );\n }\n\n const followUps: string[] = [];\n for (const n of handoff.follow_ups ?? []) {\n const first = s.stages[0]!;\n const { iteration: _drop, ...rest } = n;\n s = addItem(\n s,\n { ...rest, stage: first.id, parent: id, tags: [...(n.tags ?? []), \"follow-up\"] },\n role,\n at,\n );\n followUps.push(n.id);\n }\n\n const verdict = handoff.verdict ?? \"done\";\n const warnings: Violation[] = [];\n if ((verdict === \"done\" || verdict === \"needs-review\") && handoff.open_questions.length > 0)\n warnings.push({\n rule: \"open-questions-ignored\",\n severity: \"warning\",\n item: id,\n message: `\"${id}\" finished with ${handoff.open_questions.length} open question(s) nobody will see: ${handoff.open_questions.join(\" | \")}`,\n fix: 'use verdict \"escalate\" to route them to a role with capability escalate, or answer them in the next brief',\n });\n if (verdict === \"rework\") {\n if (!handoff.notes || handoff.notes.trim() === \"\")\n fail(\n \"handoff-invalid\",\n `rework on \"${id}\" needs notes`,\n \"say what must change in handoff.notes\",\n { items: [id] },\n );\n const item = getItem(s, id);\n s = clearRole(moveItem(s, id, { stage: reworkStage(s, item), status: \"todo\" }, role, at), id);\n s = appendEvent(s, \"item.rework\", role, { id, by: role, notes: handoff.notes }, at);\n } else if (\n (verdict === \"done\" || verdict === \"needs-review\") &&\n getItem(s, id).type === \"question\"\n ) {\n // a question is answered, not delivered: it skips exit policies and gates\n const lastStageId = s.stages[s.stages.length - 1]!.id;\n s = moveItem(s, id, { stage: lastStageId, status: \"done\" }, role, at);\n } else if (verdict === \"done\" || verdict === \"needs-review\") {\n const item = getItem(s, id);\n const stage = stageOf(s, item.stage);\n assertPolicies(s, item, stage.exitPolicy, `leave \"${stage.id}\"`);\n if (stage.gate) {\n const res = checkGate(s, item, stage.gate, role);\n if (res.outcome === \"fail\")\n fail(\n \"gate-unmet\",\n `gate \"${stage.gate.id}\" blocks \"${id}\": ${res.violations.map((v) => v.message).join(\"; \")}`,\n res.violations.map((v) => v.fix).join(\"; \"),\n { items: [id], rule: res.violations[0]!.rule },\n );\n if (res.outcome === \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n item: id,\n gate: stage.gate.id,\n question: `Approve gate \"${stage.gate.id}\" for \"${item.title}\" (${id})?`,\n },\n at,\n );\n } else {\n s = appendEvent(\n advanceItem(s, id, role, verdict === \"needs-review\", at),\n \"gate.passed\",\n role,\n { item: id, gate: stage.gate.id },\n at,\n );\n }\n } else {\n s = advanceItem(s, id, role, verdict === \"needs-review\", at);\n }\n } else if (verdict === \"blocked\") {\n s = raiseBlocker(s, id, handoff.notes || \"blocked by worker\", role, role, at);\n } else if (verdict === \"escalate\") {\n const thinker = rolesWith(s, \"escalate\")[0];\n if (!thinker)\n fail(\n \"missing-capability\",\n `no role has capability \"escalate\" to receive the question from \"${id}\"`,\n \"register a role with capability escalate\",\n { items: [id] },\n );\n const n = Object.keys(s.items).filter((k) => k.startsWith(`${id}-q`)).length + 1;\n const qid = `${id}-q${n}`;\n const parent = getItem(s, id);\n const pulledFrom = pulledFromStage(parent);\n const q: NewItem = {\n id: qid,\n type: \"question\",\n title: handoff.open_questions.join(\" | \") || handoff.notes || `question from ${id}`,\n parent: id,\n role: thinker.id,\n priority: Number.MAX_SAFE_INTEGER,\n stage: pulledFrom,\n };\n if (parent.iteration !== undefined) q.iteration = parent.iteration;\n s = addItem(s, q, role, at);\n s = moveItem(s, id, { stage: pulledFrom, status: \"todo\" }, role, at);\n s = patchItem(s, id, (x) => ({ ...x, dependsOn: [...x.dependsOn, qid] }));\n s = appendEvent(s, \"item.escalated\", role, { id, question: qid, to: thinker.id }, at);\n }\n\n s = appendEvent(\n s,\n \"item.completed\",\n role,\n {\n id,\n role,\n verdict,\n produced: handoff.produced,\n notes: handoff.notes,\n do_not: handoff.do_not,\n open_questions: handoff.open_questions,\n followUps,\n tokens: acc.tokensIn + acc.tokensOut,\n durationMs: acc.durationMs,\n model: acc.model,\n },\n at,\n );\n if (methodology.afterComplete) s = methodology.afterComplete(s, id, at);\n return { state: s, warnings };\n}\n","import { fail } from \"./errors.ts\";\nimport { getItem } from \"./items.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type { Accounting, Iteration, WorkflowState } from \"./types.ts\";\n\nexport interface AccountingPatch {\n tokensIn?: number;\n tokensOut?: number;\n durationMs?: number;\n model?: string;\n}\n\nconst NUMERIC = [\n [\"tokensIn\", \"tokens-in\"],\n [\"tokensOut\", \"tokens-out\"],\n [\"durationMs\", \"duration-ms\"],\n] as const;\n\nconst pick = (a: Accounting) => ({\n tokensIn: a.tokensIn,\n tokensOut: a.tokensOut,\n durationMs: a.durationMs,\n model: a.model,\n});\n\n/**\n * Rewrite one accounting line of an item (`line` is 1-based among the item's lines, default the last).\n * The owning iteration's spent follows the delta, open or closed; the event records before/after.\n */\nexport function correctAccounting(\n state: WorkflowState,\n itemId: string,\n patch: AccountingPatch,\n by: string,\n now?: string,\n line?: number,\n): WorkflowState {\n getItem(state, itemId);\n const indexes: number[] = [];\n state.accounting.forEach((a, i) => {\n if (a.item === itemId) indexes.push(i);\n });\n if (indexes.length === 0)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has no accounting line to correct`,\n `complete \"${itemId}\" first (exwf complete), then exwf account`,\n { items: [itemId] },\n );\n const n = line ?? indexes.length;\n if (!Number.isInteger(n) || n < 1 || n > indexes.length)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has ${indexes.length} accounting line(s), not line ${String(line)}`,\n `pass --line 1..${indexes.length}`,\n { items: [itemId] },\n );\n const idx = indexes[n - 1]!;\n const before = state.accounting[idx]!;\n for (const [k, flag] of NUMERIC) {\n const v = patch[k];\n if (v !== undefined && (!Number.isFinite(v) || v < 0))\n fail(\n \"accounting-invalid\",\n `${k} must be a non-negative number`,\n `pass --${flag} <n> with a measured figure`,\n { items: [itemId] },\n );\n }\n if (patch.model !== undefined && patch.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n \"model must not be empty\",\n \"pass --model with the model id that ran the work\",\n { items: [itemId] },\n );\n const { estimate: _drop, ...rest } = before;\n const after: Accounting = {\n ...rest,\n tokensIn: patch.tokensIn ?? before.tokensIn,\n tokensOut: patch.tokensOut ?? before.tokensOut,\n durationMs: patch.durationMs ?? before.durationMs,\n model: patch.model ?? before.model,\n };\n if (after.tokensIn + after.tokensOut === 0)\n fail(\n \"accounting-invalid\",\n `the correction leaves \"${itemId}\" at 0 tokens`,\n \"pass the host's usage figures with --tokens-in / --tokens-out\",\n { items: [itemId] },\n );\n const b = pick(before);\n const a = pick(after);\n const unchanged =\n b.tokensIn === a.tokensIn &&\n b.tokensOut === a.tokensOut &&\n b.durationMs === a.durationMs &&\n b.model === a.model;\n // replacing a placeholder with the same figures still settles it, so it is not a no-op\n if (unchanged && before.estimate !== true)\n fail(\n \"no-op\",\n `accounting for \"${itemId}\" line ${n} already has these figures`,\n \"pass at least one different value to exwf account\",\n { items: [itemId] },\n );\n const delta = {\n tokens: a.tokensIn + a.tokensOut - (b.tokensIn + b.tokensOut),\n durationMs: a.durationMs - b.durationMs,\n };\n const item = state.items[itemId]!;\n let owner: Iteration | undefined;\n for (const it of state.iterations) {\n // the last iteration that was open when the line was recorded and carried the item\n if (\n (it.committed.includes(itemId) || item.iteration === it.id) &&\n it.startedAt <= before.endedAt &&\n (it.endedAt === undefined || before.endedAt <= it.endedAt)\n )\n owner = it;\n }\n let s: WorkflowState = {\n ...state,\n accounting: state.accounting.map((x, i) => (i === idx ? after : x)),\n };\n if (owner)\n s = {\n ...s,\n iterations: s.iterations.map((it) =>\n it.id === owner.id\n ? {\n ...it,\n spent: {\n ...it.spent,\n tokens: Math.max(0, it.spent.tokens + delta.tokens),\n wallclockMs: Math.max(0, it.spent.wallclockMs + delta.durationMs),\n },\n }\n : it,\n ),\n };\n return appendEvent(\n s,\n \"accounting.corrected\",\n by,\n {\n item: itemId,\n line: n,\n iteration: owner?.id ?? null,\n before: b,\n after: a,\n delta,\n },\n nowOf(now),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/brief.ts","../src/complete.ts","../src/accounting.ts"],"names":["completions","state","itemId","out","ev","lastCompletion","all","synthesizeBrief","methodology","item","fail","role","roleOf","upstream","doNot","sources","dep","p","d","priorHandoffs","touched","relatedBugs","b","a","it","openIteration","gate","stageOf","brief","remaining","openQuestions","last","next","opts","res","plan","briefs","VERDICTS","LESSON_SCOPES","isObj","x","str","validate","handoff","acc","getItem","bad","what","fix","verdict","lessons","l","followUps","f","k","pulledFromStage","i","t","reworkStage","lastDispatchBefore","complete","now","result","ruled","applyAction","completeBody","at","nowOf","id","s","addEvidence","addSpent","lid","appendEvent","n","first","_drop","rest","addItem","warnings","clearRole","moveItem","lastStageId","stage","assertPolicies","checkGate","v","raisePending","advanceItem","raiseBlocker","thinker","rolesWith","qid","parent","pulledFrom","q","patchItem","NUMERIC","pick","correctAccounting","patch","by","line","indexes","idx","before","flag","after","delta","owner"],"mappings":"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","file":"chunk-Z2G7DGDF.mjs","sourcesContent":["import { remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { stageOf } from \"./items.ts\";\nimport { openIteration, plan, type PlanOptions, type PlanReason, type Skipped } from \"./planner.ts\";\nimport { roleOf } from \"./roles.ts\";\nimport type { Brief, Handoff, Methodology, Verdict, WorkItem, WorkflowState } from \"./types.ts\";\n\ninterface CompletedPayload {\n id: string;\n role: string;\n verdict: Verdict;\n produced: Handoff[\"produced\"];\n notes: string;\n do_not: string[];\n open_questions?: string[];\n}\n\nfunction completions(\n state: WorkflowState,\n itemId: string,\n): Array<CompletedPayload & { at: string }> {\n const out: Array<CompletedPayload & { at: string }> = [];\n for (const ev of state.events) {\n if (ev.type === \"item.completed\" && (ev.payload as CompletedPayload).id === itemId)\n out.push({ ...(ev.payload as CompletedPayload), at: ev.at });\n }\n return out;\n}\n\nfunction lastCompletion(state: WorkflowState, itemId: string): CompletedPayload | undefined {\n const all = completions(state, itemId);\n return all[all.length - 1];\n}\n\nexport function synthesizeBrief(\n state: WorkflowState,\n methodology: Methodology,\n item: WorkItem,\n): Brief {\n if (!item.role)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" has no role assigned`,\n \"dispatch it with next() or set item.role\",\n { items: [item.id] },\n );\n const role = roleOf(state, item.role);\n if (!role)\n fail(\n \"unknown-role\",\n `role \"${item.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const upstream: Brief[\"upstream\"] = [];\n const doNot = [...role.do_not];\n const sources = [\n ...item.dependsOn,\n ...(item.type === \"bug\" || item.type === \"change-request\" ? (item.affects ?? []) : []),\n ];\n for (const dep of sources) {\n const p = lastCompletion(state, dep);\n if (!p) continue;\n upstream.push({ item: dep, produced: p.produced, notes: p.notes });\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n const priorHandoffs: Brief[\"priorHandoffs\"] = completions(state, item.id).map((p) => ({\n role: p.role,\n verdict: p.verdict,\n notes: p.notes,\n produced: p.produced,\n at: p.at,\n }));\n const touched = new Set([item.id, ...item.dependsOn]);\n const relatedBugs: Brief[\"relatedBugs\"] = Object.values(state.items)\n .filter(\n (b) =>\n (b.type === \"bug\" || b.type === \"change-request\") &&\n b.id !== item.id &&\n b.status !== \"done\" &&\n b.status !== \"dropped\" &&\n (b.affects ?? []).some((a) => touched.has(a)),\n )\n .map((b) => ({ id: b.id, title: b.title, affects: b.affects ?? [] }));\n const it = openIteration(state);\n const gate = stageOf(state, item.stage).gate;\n const brief: Brief = {\n item,\n role,\n modelTier: role.modelTier,\n invariants: [...methodology.invariants(state, item), ...state.agreements],\n do_not: doNot,\n acceptance: item.acceptance,\n upstream,\n priorHandoffs,\n relatedBugs,\n budgetRemaining: it ? remaining(it.budget, it.spent) : {},\n };\n if (gate) brief.gateAhead = gate;\n if (item.type === \"question\" && item.parent) {\n const p = lastCompletion(state, item.parent);\n if (p) {\n brief.parent = {\n item: item.parent,\n role: p.role,\n notes: p.notes,\n produced: p.produced,\n open_questions: p.open_questions ?? [],\n do_not: p.do_not,\n };\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n }\n return brief;\n}\n\n/** Open questions of finished items: the last completion per item, verdict done/needs-review, with open_questions left unanswered. */\nexport function openQuestions(\n state: WorkflowState,\n): Array<{ item: string; role: string; questions: string[]; at: string }> {\n const last = new Map<string, CompletedPayload & { at: string }>();\n for (const ev of state.events) {\n if (ev.type !== \"item.completed\") continue;\n const p = ev.payload as CompletedPayload;\n last.delete(p.id);\n last.set(p.id, { ...p, at: ev.at });\n }\n return [...last.values()]\n .filter(\n (p) =>\n (p.verdict === \"done\" || p.verdict === \"needs-review\") &&\n (p.open_questions ?? []).length > 0,\n )\n .map((p) => ({ item: p.id, role: p.role, questions: p.open_questions ?? [], at: p.at }));\n}\n\nexport interface NextResult {\n state: WorkflowState;\n briefs: Brief[];\n skipped: Skipped[];\n reason?: PlanReason;\n}\n\nexport function next(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): NextResult {\n const res = plan(state, methodology, opts);\n const briefs = res.dispatched.map((d) =>\n synthesizeBrief(res.state, methodology, res.state.items[d.id]!),\n );\n return res.reason\n ? { state: res.state, briefs, skipped: res.skipped, reason: res.reason }\n : { state: res.state, briefs, skipped: res.skipped };\n}\n","import { addSpent } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { checkGate, lastDispatchBefore, raisePending } from \"./gates.ts\";\nimport {\n addEvidence,\n addItem,\n advanceItem,\n clearRole,\n getItem,\n moveItem,\n patchItem,\n raiseBlocker,\n stageOf,\n} from \"./items.ts\";\nimport { applyAction } from \"./methodology.ts\";\nimport { assertPolicies } from \"./policies.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Accounting,\n ApplyResult,\n Handoff,\n Methodology,\n NewItem,\n Violation,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nconst VERDICTS: readonly string[] = [\"done\", \"needs-review\", \"rework\", \"blocked\", \"escalate\"];\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst str = (x: unknown) => typeof x === \"string\";\n\nfunction validate(state: WorkflowState, handoff: Handoff, acc: Accounting): void {\n const item = getItem(state, handoff.item);\n if (item.status !== \"in_progress\")\n fail(\n \"invalid-transition\",\n `item \"${item.id}\" is ${item.status}, not in_progress`,\n \"only dispatched items can be completed; call next() first\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.do_not))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" has no do_not array`,\n \"set handoff.do_not to [] when there is nothing to forbid\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.produced) || !Array.isArray(handoff.open_questions))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" needs produced[] and open_questions[]`,\n \"pass empty arrays when there is nothing\",\n { items: [item.id] },\n );\n const bad = (what: string, fix: string) =>\n fail(\"handoff-invalid\", `handoff for \"${item.id}\": ${what}`, fix, { items: [item.id] });\n const verdict = handoff.verdict ?? \"done\";\n if (!VERDICTS.includes(verdict))\n bad(`unknown verdict ${JSON.stringify(verdict)}`, `use one of: ${VERDICTS.join(\", \")}`);\n if (!handoff.produced.every((p) => isObj(p) && str(p.kind) && str(p.ref)))\n bad(\"produced[] entries need string kind and ref\", 'use { \"kind\": \"code\", \"ref\": \"src/a.ts\" }');\n const lessons: unknown = handoff.lessons ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every((l) => isObj(l) && str(l.text) && LESSON_SCOPES.includes(l.scope as string))\n )\n bad(\n \"lessons[] entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const followUps: unknown = handoff.follow_ups ?? [];\n if (!Array.isArray(followUps) || !followUps.every((f) => isObj(f) && str(f.id) && str(f.title)))\n bad(\"follow_ups[] entries need a string id and title\", \"describe each follow-up as a new item\");\n if (handoff.role !== item.role)\n fail(\n \"handoff-invalid\",\n `handoff role \"${handoff.role}\" differs from the dispatched role \"${item.role}\"`,\n `complete as \"${item.role}\" or re-dispatch`,\n { items: [item.id] },\n );\n if (!acc.model || acc.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" has no model`,\n \"record the model id that actually ran the work\",\n { items: [item.id] },\n );\n for (const k of [\"tokensIn\", \"tokensOut\", \"durationMs\"] as const) {\n if (!Number.isFinite(acc[k]) || acc[k] < 0)\n fail(\n \"accounting-invalid\",\n `accounting.${k} must be a non-negative number`,\n `measure ${k} from the host's usage report`,\n { items: [item.id] },\n );\n }\n if (acc.tokensIn + acc.tokensOut === 0 && acc.estimate !== true)\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" records 0 tokens`,\n \"pass the host's usage figures, or set estimate: true (CLI --estimate) to record a placeholder and correct it later with correctAccounting / exwf account\",\n { items: [item.id] },\n );\n}\n\n/** Stage the item was pulled from: the `from.stage` of its last transition into in_progress, else its current stage. */\nfunction pulledFromStage(item: WorkItem): string {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === \"in_progress\") return t.from.stage;\n }\n return item.stage;\n}\n\n/** Stage a reworked item returns to: the from.stage of the last dispatch made from a stage strictly before the current one (so a reviewer's rework lands where the work was pulled from), else the plain pulled-from stage. */\nfunction reworkStage(state: WorkflowState, item: WorkItem): string {\n return lastDispatchBefore(state, item)?.from.stage ?? pulledFromStage(item);\n}\n\nexport function complete(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n validate(state, handoff, acc);\n // the methodology's rules see the completion (applyAction validates, appends nothing, then reduces)\n let result: ApplyResult | undefined;\n const ruled = applyAction(\n state,\n methodology,\n { type: \"item.complete\", by: handoff.role, payload: { item: handoff.item, handoff } },\n () => {\n result = completeBody(state, methodology, handoff, acc, now);\n return result.state;\n },\n );\n return { state: ruled.state, warnings: [...ruled.warnings, ...result!.warnings] };\n}\n\nfunction completeBody(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n const at = nowOf(now);\n const id = handoff.item;\n const role = handoff.role;\n let s: WorkflowState = { ...state, accounting: [...state.accounting, acc] };\n for (const p of handoff.produced)\n s = addEvidence(s, id, { kind: p.kind, ref: p.ref, by: role }, at);\n const it = openIteration(s);\n if (it && (it.committed.includes(id) || getItem(s, id).iteration === it.id)) {\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, spent: addSpent(x.spent, acc) } : x,\n ),\n };\n }\n\n for (const l of handoff.lessons ?? []) {\n const lid = `L${s.lessons.length + 1}`;\n s = {\n ...s,\n lessons: [\n ...s.lessons,\n { id: lid, at, text: l.text, scope: l.scope, status: \"raised\", from: role, item: id },\n ],\n };\n s = appendEvent(\n s,\n \"lesson.raised\",\n role,\n { id: lid, from: role, item: id, scope: l.scope },\n at,\n );\n }\n\n const followUps: string[] = [];\n for (const n of handoff.follow_ups ?? []) {\n const first = s.stages[0]!;\n const { iteration: _drop, ...rest } = n;\n s = addItem(\n s,\n { ...rest, stage: first.id, parent: id, tags: [...(n.tags ?? []), \"follow-up\"] },\n role,\n at,\n );\n followUps.push(n.id);\n }\n\n const verdict = handoff.verdict ?? \"done\";\n const warnings: Violation[] = [];\n if ((verdict === \"done\" || verdict === \"needs-review\") && handoff.open_questions.length > 0)\n warnings.push({\n rule: \"open-questions-ignored\",\n severity: \"warning\",\n item: id,\n message: `\"${id}\" finished with ${handoff.open_questions.length} open question(s) nobody will see: ${handoff.open_questions.join(\" | \")}`,\n fix: 'use verdict \"escalate\" to route them to a role with capability escalate, or answer them in the next brief',\n });\n if (verdict === \"rework\") {\n if (!handoff.notes || handoff.notes.trim() === \"\")\n fail(\n \"handoff-invalid\",\n `rework on \"${id}\" needs notes`,\n \"say what must change in handoff.notes\",\n { items: [id] },\n );\n const item = getItem(s, id);\n s = clearRole(moveItem(s, id, { stage: reworkStage(s, item), status: \"todo\" }, role, at), id);\n s = appendEvent(s, \"item.rework\", role, { id, by: role, notes: handoff.notes }, at);\n } else if (\n (verdict === \"done\" || verdict === \"needs-review\") &&\n getItem(s, id).type === \"question\"\n ) {\n // a question is answered, not delivered: it skips exit policies and gates\n const lastStageId = s.stages[s.stages.length - 1]!.id;\n s = moveItem(s, id, { stage: lastStageId, status: \"done\" }, role, at);\n } else if (verdict === \"done\" || verdict === \"needs-review\") {\n const item = getItem(s, id);\n const stage = stageOf(s, item.stage);\n assertPolicies(s, item, stage.exitPolicy, `leave \"${stage.id}\"`);\n if (stage.gate) {\n const res = checkGate(s, item, stage.gate, role);\n if (res.outcome === \"fail\")\n fail(\n \"gate-unmet\",\n `gate \"${stage.gate.id}\" blocks \"${id}\": ${res.violations.map((v) => v.message).join(\"; \")}`,\n res.violations.map((v) => v.fix).join(\"; \"),\n { items: [id], rule: res.violations[0]!.rule },\n );\n if (res.outcome === \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n item: id,\n gate: stage.gate.id,\n question: `Approve gate \"${stage.gate.id}\" for \"${item.title}\" (${id})?`,\n },\n at,\n );\n } else {\n s = appendEvent(\n advanceItem(s, id, role, verdict === \"needs-review\", at),\n \"gate.passed\",\n role,\n { item: id, gate: stage.gate.id },\n at,\n );\n }\n } else {\n s = advanceItem(s, id, role, verdict === \"needs-review\", at);\n }\n } else if (verdict === \"blocked\") {\n s = raiseBlocker(s, id, handoff.notes || \"blocked by worker\", role, role, at);\n } else if (verdict === \"escalate\") {\n const thinker = rolesWith(s, \"escalate\")[0];\n if (!thinker)\n fail(\n \"missing-capability\",\n `no role has capability \"escalate\" to receive the question from \"${id}\"`,\n \"register a role with capability escalate\",\n { items: [id] },\n );\n const n = Object.keys(s.items).filter((k) => k.startsWith(`${id}-q`)).length + 1;\n const qid = `${id}-q${n}`;\n const parent = getItem(s, id);\n const pulledFrom = pulledFromStage(parent);\n const q: NewItem = {\n id: qid,\n type: \"question\",\n title: handoff.open_questions.join(\" | \") || handoff.notes || `question from ${id}`,\n parent: id,\n role: thinker.id,\n priority: Number.MAX_SAFE_INTEGER,\n stage: pulledFrom,\n };\n if (parent.iteration !== undefined) q.iteration = parent.iteration;\n s = addItem(s, q, role, at);\n s = moveItem(s, id, { stage: pulledFrom, status: \"todo\" }, role, at);\n s = patchItem(s, id, (x) => ({ ...x, dependsOn: [...x.dependsOn, qid] }));\n s = appendEvent(s, \"item.escalated\", role, { id, question: qid, to: thinker.id }, at);\n }\n\n s = appendEvent(\n s,\n \"item.completed\",\n role,\n {\n id,\n role,\n verdict,\n produced: handoff.produced,\n notes: handoff.notes,\n do_not: handoff.do_not,\n open_questions: handoff.open_questions,\n followUps,\n tokens: acc.tokensIn + acc.tokensOut,\n durationMs: acc.durationMs,\n model: acc.model,\n },\n at,\n );\n if (methodology.afterComplete) s = methodology.afterComplete(s, id, at);\n return { state: s, warnings };\n}\n","import { fail } from \"./errors.ts\";\nimport { getItem } from \"./items.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type { Accounting, Iteration, WorkflowState } from \"./types.ts\";\n\nexport interface AccountingPatch {\n tokensIn?: number;\n tokensOut?: number;\n durationMs?: number;\n model?: string;\n}\n\nconst NUMERIC = [\n [\"tokensIn\", \"tokens-in\"],\n [\"tokensOut\", \"tokens-out\"],\n [\"durationMs\", \"duration-ms\"],\n] as const;\n\nconst pick = (a: Accounting) => ({\n tokensIn: a.tokensIn,\n tokensOut: a.tokensOut,\n durationMs: a.durationMs,\n model: a.model,\n});\n\n/**\n * Rewrite one accounting line of an item (`line` is 1-based among the item's lines, default the last).\n * The owning iteration's spent follows the delta, open or closed; the event records before/after.\n */\nexport function correctAccounting(\n state: WorkflowState,\n itemId: string,\n patch: AccountingPatch,\n by: string,\n now?: string,\n line?: number,\n): WorkflowState {\n getItem(state, itemId);\n const indexes: number[] = [];\n state.accounting.forEach((a, i) => {\n if (a.item === itemId) indexes.push(i);\n });\n if (indexes.length === 0)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has no accounting line to correct`,\n `complete \"${itemId}\" first (exwf complete), then exwf account`,\n { items: [itemId] },\n );\n const n = line ?? indexes.length;\n if (!Number.isInteger(n) || n < 1 || n > indexes.length)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has ${indexes.length} accounting line(s), not line ${String(line)}`,\n `pass --line 1..${indexes.length}`,\n { items: [itemId] },\n );\n const idx = indexes[n - 1]!;\n const before = state.accounting[idx]!;\n for (const [k, flag] of NUMERIC) {\n const v = patch[k];\n if (v !== undefined && (!Number.isFinite(v) || v < 0))\n fail(\n \"accounting-invalid\",\n `${k} must be a non-negative number`,\n `pass --${flag} <n> with a measured figure`,\n { items: [itemId] },\n );\n }\n if (patch.model !== undefined && patch.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n \"model must not be empty\",\n \"pass --model with the model id that ran the work\",\n { items: [itemId] },\n );\n const { estimate: _drop, ...rest } = before;\n const after: Accounting = {\n ...rest,\n tokensIn: patch.tokensIn ?? before.tokensIn,\n tokensOut: patch.tokensOut ?? before.tokensOut,\n durationMs: patch.durationMs ?? before.durationMs,\n model: patch.model ?? before.model,\n };\n if (after.tokensIn + after.tokensOut === 0)\n fail(\n \"accounting-invalid\",\n `the correction leaves \"${itemId}\" at 0 tokens`,\n \"pass the host's usage figures with --tokens-in / --tokens-out\",\n { items: [itemId] },\n );\n const b = pick(before);\n const a = pick(after);\n const unchanged =\n b.tokensIn === a.tokensIn &&\n b.tokensOut === a.tokensOut &&\n b.durationMs === a.durationMs &&\n b.model === a.model;\n // replacing a placeholder with the same figures still settles it, so it is not a no-op\n if (unchanged && before.estimate !== true)\n fail(\n \"no-op\",\n `accounting for \"${itemId}\" line ${n} already has these figures`,\n \"pass at least one different value to exwf account\",\n { items: [itemId] },\n );\n const delta = {\n tokens: a.tokensIn + a.tokensOut - (b.tokensIn + b.tokensOut),\n durationMs: a.durationMs - b.durationMs,\n };\n const item = state.items[itemId]!;\n let owner: Iteration | undefined;\n for (const it of state.iterations) {\n // the last iteration that was open when the line was recorded and carried the item\n if (\n (it.committed.includes(itemId) || item.iteration === it.id) &&\n it.startedAt <= before.endedAt &&\n (it.endedAt === undefined || before.endedAt <= it.endedAt)\n )\n owner = it;\n }\n let s: WorkflowState = {\n ...state,\n accounting: state.accounting.map((x, i) => (i === idx ? after : x)),\n };\n if (owner)\n s = {\n ...s,\n iterations: s.iterations.map((it) =>\n it.id === owner.id\n ? {\n ...it,\n spent: {\n ...it.spent,\n tokens: Math.max(0, it.spent.tokens + delta.tokens),\n wallclockMs: Math.max(0, it.spent.wallclockMs + delta.durationMs),\n },\n }\n : it,\n ),\n };\n return appendEvent(\n s,\n \"accounting.corrected\",\n by,\n {\n item: itemId,\n line: n,\n iteration: owner?.id ?? null,\n before: b,\n after: a,\n delta,\n },\n nowOf(now),\n );\n}\n"]}
|
package/dist/cli/bin.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict';var
|
|
2
|
+
'use strict';var chunkYJN4JEJU_cjs=require('../chunk-YJN4JEJU.cjs');require('../chunk-5PHK72VM.cjs'),require('../chunk-HIHMBMB5.cjs'),require('../chunk-CYXVGHQM.cjs'),require('../chunk-FKTCGQYB.cjs'),require('../chunk-VXH2FAKV.cjs'),require('../chunk-XMO2RCXB.cjs'),require('../chunk-YRATJT7P.cjs'),require('../chunk-WOGK54HB.cjs'),require('../chunk-S3BXVHO7.cjs');chunkYJN4JEJU_cjs.c(process.argv.slice(2),process.cwd()).then(r=>{process.stdout.write(JSON.stringify(r.out,null,2)+`
|
|
3
3
|
`),process.exitCode=r.exit;},r=>{process.stderr.write(`exwf crashed: ${r.stack??String(r)}
|
|
4
4
|
`),process.exitCode=2;});//# sourceMappingURL=bin.cjs.map
|
|
5
5
|
//# sourceMappingURL=bin.cjs.map
|
package/dist/cli/bin.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {c}from'../chunk-
|
|
2
|
+
import {c}from'../chunk-MQWMQ4PD.mjs';import'../chunk-Z2G7DGDF.mjs';import'../chunk-QDMEM62U.mjs';import'../chunk-UZQV73X7.mjs';import'../chunk-3KFQPSRX.mjs';import'../chunk-U3OXAO67.mjs';import'../chunk-YBHHICTZ.mjs';import'../chunk-7IG6EQI4.mjs';import'../chunk-5TXYMLBF.mjs';import'../chunk-2FRRD6A3.mjs';c(process.argv.slice(2),process.cwd()).then(r=>{process.stdout.write(JSON.stringify(r.out,null,2)+`
|
|
3
3
|
`),process.exitCode=r.exit;},r=>{process.stderr.write(`exwf crashed: ${r.stack??String(r)}
|
|
4
4
|
`),process.exitCode=2;});//# sourceMappingURL=bin.mjs.map
|
|
5
5
|
//# sourceMappingURL=bin.mjs.map
|
package/dist/cli/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkYJN4JEJU_cjs=require('../chunk-YJN4JEJU.cjs');require('../chunk-5PHK72VM.cjs'),require('../chunk-HIHMBMB5.cjs'),require('../chunk-CYXVGHQM.cjs'),require('../chunk-FKTCGQYB.cjs'),require('../chunk-VXH2FAKV.cjs'),require('../chunk-XMO2RCXB.cjs'),require('../chunk-YRATJT7P.cjs'),require('../chunk-WOGK54HB.cjs'),require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"USAGE",{enumerable:true,get:function(){return chunkYJN4JEJU_cjs.a}});Object.defineProperty(exports,"parseArgs",{enumerable:true,get:function(){return chunkYJN4JEJU_cjs.b}});Object.defineProperty(exports,"runCommand",{enumerable:true,get:function(){return chunkYJN4JEJU_cjs.c}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cli/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as USAGE,b as parseArgs,c as runCommand}from'../chunk-
|
|
1
|
+
export{a as USAGE,b as parseArgs,c as runCommand}from'../chunk-MQWMQ4PD.mjs';import'../chunk-Z2G7DGDF.mjs';import'../chunk-QDMEM62U.mjs';import'../chunk-UZQV73X7.mjs';import'../chunk-3KFQPSRX.mjs';import'../chunk-U3OXAO67.mjs';import'../chunk-YBHHICTZ.mjs';import'../chunk-7IG6EQI4.mjs';import'../chunk-5TXYMLBF.mjs';import'../chunk-2FRRD6A3.mjs';//# sourceMappingURL=index.mjs.map
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';require('./chunk-PO2SPQJP.cjs');var
|
|
1
|
+
'use strict';require('./chunk-PO2SPQJP.cjs');var chunk5PHK72VM_cjs=require('./chunk-5PHK72VM.cjs'),chunkXMO2RCXB_cjs=require('./chunk-XMO2RCXB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs');var te="1.0.0";Object.defineProperty(exports,"complete",{enumerable:true,get:function(){return chunk5PHK72VM_cjs.d}});Object.defineProperty(exports,"correctAccounting",{enumerable:true,get:function(){return chunk5PHK72VM_cjs.e}});Object.defineProperty(exports,"next",{enumerable:true,get:function(){return chunk5PHK72VM_cjs.c}});Object.defineProperty(exports,"openQuestions",{enumerable:true,get:function(){return chunk5PHK72VM_cjs.b}});Object.defineProperty(exports,"synthesizeBrief",{enumerable:true,get:function(){return chunk5PHK72VM_cjs.a}});Object.defineProperty(exports,"ZERO_SPENT",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.M}});Object.defineProperty(exports,"addEvidence",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.y}});Object.defineProperty(exports,"addItem",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.v}});Object.defineProperty(exports,"addSpent",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.N}});Object.defineProperty(exports,"appendEvent",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.c}});Object.defineProperty(exports,"applyAction",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.Y}});Object.defineProperty(exports,"applyAgreement",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.D}});Object.defineProperty(exports,"approversFor",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.k}});Object.defineProperty(exports,"assertPolicies",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.G}});Object.defineProperty(exports,"assignRole",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.S}});Object.defineProperty(exports,"authorOf",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.I}});Object.defineProperty(exports,"canDo",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.n}});Object.defineProperty(exports,"changeConfig",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs._}});Object.defineProperty(exports,"checkGate",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.J}});Object.defineProperty(exports,"clearBlocker",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.A}});Object.defineProperty(exports,"coreRulesFor",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.W}});Object.defineProperty(exports,"createState",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.b}});Object.defineProperty(exports,"decide",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.L}});Object.defineProperty(exports,"editItem",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.w}});Object.defineProperty(exports,"estimateTokens",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.Q}});Object.defineProperty(exports,"evaluatePolicies",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.F}});Object.defineProperty(exports,"getItem",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.u}});Object.defineProperty(exports,"hasCapability",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.h}});Object.defineProperty(exports,"init",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.Z}});Object.defineProperty(exports,"isExhausted",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.P}});Object.defineProperty(exports,"isTerminalStage",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.r}});Object.defineProperty(exports,"lastDispatchBefore",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.H}});Object.defineProperty(exports,"lastEvent",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.d}});Object.defineProperty(exports,"moveItem",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.x}});Object.defineProperty(exports,"nextStageOf",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.q}});Object.defineProperty(exports,"nowOf",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.a}});Object.defineProperty(exports,"openIteration",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.R}});Object.defineProperty(exports,"plan",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.V}});Object.defineProperty(exports,"raiseBlocker",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.z}});Object.defineProperty(exports,"raisePending",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.K}});Object.defineProperty(exports,"registerRole",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.f}});Object.defineProperty(exports,"remaining",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.O}});Object.defineProperty(exports,"requireCap",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.o}});Object.defineProperty(exports,"requireCapabilities",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.l}});Object.defineProperty(exports,"resourceCapsFor",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.T}});Object.defineProperty(exports,"retireAgreement",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.E}});Object.defineProperty(exports,"retireRole",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.g}});Object.defineProperty(exports,"rolesWith",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.i}});Object.defineProperty(exports,"separationLost",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.m}});Object.defineProperty(exports,"stageOf",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.p}});Object.defineProperty(exports,"toExNodes",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.U}});Object.defineProperty(exports,"validateAction",{enumerable:true,get:function(){return chunkXMO2RCXB_cjs.X}});Object.defineProperty(exports,"WorkflowError",{enumerable:true,get:function(){return chunkS3BXVHO7_cjs.a}});Object.defineProperty(exports,"assertId",{enumerable:true,get:function(){return chunkS3BXVHO7_cjs.c}});Object.defineProperty(exports,"fail",{enumerable:true,get:function(){return chunkS3BXVHO7_cjs.b}});exports.VERSION=te;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"uMAAO,IAAMA,EAAAA,CAAU","file":"index.cjs","sourcesContent":["export const VERSION = \"1.0.0\";\nexport * from \"./types.ts\";\nexport { WorkflowError, fail } from \"./errors.ts\";\nexport { createState, appendEvent, lastEvent, nowOf } from \"./state.ts\";\nexport {\n registerRole,\n retireRole,\n hasCapability,\n rolesWith,\n approversFor,\n requireCapabilities,\n separationLost,\n canDo,\n requireCap,\n} from \"./roles.ts\";\nexport {\n assertId,\n stageOf,\n nextStageOf,\n isTerminalStage,\n getItem,\n addItem,\n editItem,\n moveItem,\n addEvidence,\n raiseBlocker,\n clearBlocker,\n} from \"./items.ts\";\nexport type { ItemPatch } from \"./items.ts\";\nexport { applyAgreement, retireAgreement } from \"./agreements.ts\";\nexport { evaluatePolicies, assertPolicies } from \"./policies.ts\";\nexport { checkGate, authorOf, lastDispatchBefore, raisePending, decide } from \"./gates.ts\";\nexport type { GateResult } from \"./gates.ts\";\nexport { ZERO_SPENT, addSpent, remaining, isExhausted, estimateTokens } from \"./budget.ts\";\nexport type { EstimateMode } from \"./budget.ts\";\nexport { plan, toExNodes, assignRole, resourceCapsFor, openIteration } from \"./planner.ts\";\nexport type { PlanOptions, PlanReason, PlanResult, Skipped } from \"./planner.ts\";\nexport { synthesizeBrief, next, openQuestions } from \"./brief.ts\";\nexport type { NextResult } from \"./brief.ts\";\nexport { complete } from \"./complete.ts\";\nexport { correctAccounting } from \"./accounting.ts\";\nexport type { AccountingPatch } from \"./accounting.ts\";\nexport { coreRulesFor } from \"./rules.ts\";\nexport { applyAction, validateAction, init, changeConfig } from \"./methodology.ts\";\nexport type { InitInput } from \"./methodology.ts\";\n"]}
|