ex-workflow 0.4.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +58 -2
  2. package/README.md +68 -32
  3. package/dist/adapters/index.cjs +1 -1
  4. package/dist/adapters/index.mjs +1 -1
  5. package/dist/{roles-BLBRKhUZ.d.ts → budget-Cx63FX2K.d.ts} +9 -2
  6. package/dist/{roles-aneKYJ3Z.d.cts → budget-JyNKxP5N.d.cts} +9 -2
  7. package/dist/chunk-3KFQPSRX.mjs +2 -0
  8. package/dist/chunk-3KFQPSRX.mjs.map +1 -0
  9. package/dist/chunk-5PHK72VM.cjs +2 -0
  10. package/dist/chunk-5PHK72VM.cjs.map +1 -0
  11. package/dist/chunk-5TXYMLBF.mjs +3 -0
  12. package/dist/chunk-5TXYMLBF.mjs.map +1 -0
  13. package/dist/chunk-7IG6EQI4.mjs +6 -0
  14. package/dist/chunk-7IG6EQI4.mjs.map +1 -0
  15. package/dist/chunk-CYXVGHQM.cjs +2 -0
  16. package/dist/chunk-CYXVGHQM.cjs.map +1 -0
  17. package/dist/chunk-FKTCGQYB.cjs +2 -0
  18. package/dist/chunk-FKTCGQYB.cjs.map +1 -0
  19. package/dist/chunk-HIHMBMB5.cjs +2 -0
  20. package/dist/chunk-HIHMBMB5.cjs.map +1 -0
  21. package/dist/chunk-MQWMQ4PD.mjs +2 -0
  22. package/dist/chunk-MQWMQ4PD.mjs.map +1 -0
  23. package/dist/chunk-QDMEM62U.mjs +2 -0
  24. package/dist/chunk-QDMEM62U.mjs.map +1 -0
  25. package/dist/chunk-U3OXAO67.mjs +2 -0
  26. package/dist/chunk-U3OXAO67.mjs.map +1 -0
  27. package/dist/chunk-UZQV73X7.mjs +2 -0
  28. package/dist/chunk-UZQV73X7.mjs.map +1 -0
  29. package/dist/chunk-VXH2FAKV.cjs +2 -0
  30. package/dist/chunk-VXH2FAKV.cjs.map +1 -0
  31. package/dist/chunk-WOGK54HB.cjs +3 -0
  32. package/dist/chunk-WOGK54HB.cjs.map +1 -0
  33. package/dist/chunk-XMO2RCXB.cjs +2 -0
  34. package/dist/chunk-XMO2RCXB.cjs.map +1 -0
  35. package/dist/chunk-YBHHICTZ.mjs +2 -0
  36. package/dist/chunk-YBHHICTZ.mjs.map +1 -0
  37. package/dist/chunk-YJN4JEJU.cjs +2 -0
  38. package/dist/chunk-YJN4JEJU.cjs.map +1 -0
  39. package/dist/chunk-YRATJT7P.cjs +6 -0
  40. package/dist/chunk-YRATJT7P.cjs.map +1 -0
  41. package/dist/chunk-Z2G7DGDF.mjs +2 -0
  42. package/dist/chunk-Z2G7DGDF.mjs.map +1 -0
  43. package/dist/cli/bin.cjs +1 -1
  44. package/dist/cli/bin.mjs +1 -1
  45. package/dist/cli/index.cjs +1 -1
  46. package/dist/cli/index.mjs +1 -1
  47. package/dist/index.cjs +1 -1
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +35 -12
  50. package/dist/index.d.ts +35 -12
  51. package/dist/index.mjs +1 -1
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/kanban/index.cjs +1 -1
  54. package/dist/kanban/index.mjs +1 -1
  55. package/dist/schema/index.cjs +1 -1
  56. package/dist/schema/index.mjs +1 -1
  57. package/dist/scrum/index.cjs +1 -1
  58. package/dist/scrum/index.d.cts +18 -3
  59. package/dist/scrum/index.d.ts +18 -3
  60. package/dist/scrum/index.mjs +1 -1
  61. package/dist/types.d.cts +23 -1
  62. package/dist/types.d.ts +23 -1
  63. package/dist/waterfall/index.cjs +1 -1
  64. package/dist/waterfall/index.d.cts +4 -1
  65. package/dist/waterfall/index.d.ts +4 -1
  66. package/dist/waterfall/index.mjs +1 -1
  67. package/package.json +1 -1
  68. package/dist/chunk-36M6OVUJ.mjs +0 -2
  69. package/dist/chunk-36M6OVUJ.mjs.map +0 -1
  70. package/dist/chunk-7KF5K3L7.cjs +0 -2
  71. package/dist/chunk-7KF5K3L7.cjs.map +0 -1
  72. package/dist/chunk-CWBH7H52.cjs +0 -2
  73. package/dist/chunk-CWBH7H52.cjs.map +0 -1
  74. package/dist/chunk-DXC2RSN5.cjs +0 -3
  75. package/dist/chunk-DXC2RSN5.cjs.map +0 -1
  76. package/dist/chunk-GATJZYTB.mjs +0 -2
  77. package/dist/chunk-GATJZYTB.mjs.map +0 -1
  78. package/dist/chunk-GFH2FEZH.mjs +0 -2
  79. package/dist/chunk-GFH2FEZH.mjs.map +0 -1
  80. package/dist/chunk-HHC5EZ54.cjs +0 -2
  81. package/dist/chunk-HHC5EZ54.cjs.map +0 -1
  82. package/dist/chunk-KSKEFYY7.cjs +0 -2
  83. package/dist/chunk-KSKEFYY7.cjs.map +0 -1
  84. package/dist/chunk-KUUIAKEJ.cjs +0 -2
  85. package/dist/chunk-KUUIAKEJ.cjs.map +0 -1
  86. package/dist/chunk-L2ZN6HEL.mjs +0 -2
  87. package/dist/chunk-L2ZN6HEL.mjs.map +0 -1
  88. package/dist/chunk-NDORREWR.mjs +0 -2
  89. package/dist/chunk-NDORREWR.mjs.map +0 -1
  90. package/dist/chunk-NZ2DIDOD.mjs +0 -2
  91. package/dist/chunk-NZ2DIDOD.mjs.map +0 -1
  92. package/dist/chunk-OHSQ52DW.mjs +0 -6
  93. package/dist/chunk-OHSQ52DW.mjs.map +0 -1
  94. package/dist/chunk-RSKZVOYC.cjs +0 -6
  95. package/dist/chunk-RSKZVOYC.cjs.map +0 -1
  96. package/dist/chunk-S22CPYXJ.mjs +0 -3
  97. package/dist/chunk-S22CPYXJ.mjs.map +0 -1
  98. package/dist/chunk-SHAPFMVP.mjs +0 -2
  99. package/dist/chunk-SHAPFMVP.mjs.map +0 -1
  100. package/dist/chunk-SJRRQZ3R.cjs +0 -2
  101. package/dist/chunk-SJRRQZ3R.cjs.map +0 -1
  102. package/dist/chunk-UM5X2JHB.cjs +0 -2
  103. package/dist/chunk-UM5X2JHB.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/waterfall/config.ts","../src/waterfall/phases.ts","../src/waterfall/baseline.ts","../src/waterfall/change.ts","../src/waterfall/retro.ts","../src/waterfall/traceability.ts","../src/waterfall/ceremonies.ts","../src/waterfall/metrics.ts","../src/waterfall/roles.ts","../src/waterfall/rules.ts","../src/waterfall/stages.ts","../src/waterfall/index.ts"],"names":["DEFAULT_PHASE_IDS","DEFAULT_DELIVERABLES","DEFAULT_DELIVER_BY","GATE_ID","id","CHANGE_GATE","CAPABILITIES","title","defaultPhases","p","by","configOf","state","isObj","x","strings","s","budget","raw","where","fail","out","k","v","requirements","q","phase","i","human","assertId","deliverables","gate","g","evidence","b","validateWaterfallConfig","c","hg","phases","ids","dupe","cc","changeControl","tr","traceability","to","t","fallback","WORK","REVIEW","DONE","phasesOf","ph","withPhases","phaseIndex","idx","getPhase","phaseOf","item","seen","cur","itemsInPhase","phaseId","openPhase","currentPhase","isFrozen","producedKinds","kinds","it","e","missingDeliverables","extra","have","wanted","lastToPhase","order","closeIteration","prefix","outcome","now","openIteration","baselinePhase","approvedBy","items","itemSnapshot","earlier","baseline","appendEvent","reopenPhases","reopened","suspended","earliest","open","approveChange","changeId","note","cr","getItem","ia","r","moveItem","rejectChange","phaseRetrospective","methodology","input","requireCap","wantPhase","parsed","parseLessonInput","applyAction","s0","nowOf","applyLessonInput","byId","a","artefacts","timSort","linked","traceabilityMatrix","cfg","rows","f","links","missing","m","missingTraces","toPhase","ceremony","recordDeliverable","kind","ref","waterfallCeremonies","act","type","reduce","version","ZERO_SPENT","approvers","approverIds","already","given","d","raisePending","pending","decision","canDo","rolesWith","needsHuman","waterfallAfterDecide","entry","reviewer","waterfallMetrics","zero","total","done","planned","spent","defects","typeOf","status","changeRequests","approved","rejected","reworkWeight","phasesReopened","counted","ev","was","completion","variance","n","traced","reqTotal","decided","waterfallRoles","config","gates","rule","message","fix","payloadOf","phaseArg","phaseById","phaseIds","itemById","phaseOfNew","parent","governed","frozenFix","changeOf","impactShape","waterfallRules","patch","approve","mine","authorOf","others","added","traces","isCr","ok","target","waterfallStages","_config","WATERFALL_VOCABULARY","deliverRoleFor","phaseReport","waterfall","po","frozen","itemId","_now","acc","addSpent"],"mappings":"2OAsBO,IAAMA,GAAuC,CAClD,cAAA,CACA,SACA,gBAAA,CACA,cAAA,CACA,aACA,aACF,CAAA,CACaC,GAAiD,CAC5D,YAAA,CAAc,CAAC,KAAK,CAAA,CACpB,OAAQ,CAAC,YAAA,CAAc,gBAAgB,CAAA,CACvC,cAAA,CAAgB,CAAC,eAAe,CAAA,CAChC,aAAc,CAAC,aAAA,CAAe,qBAAqB,CAAA,CACnD,UAAA,CAAY,CAAC,eAAA,CAAiB,mBAAmB,EACjD,WAAA,CAAa,CAAC,YAAY,CAC5B,CAAA,CACaC,GAA6C,CACxD,YAAA,CAAc,mBACd,MAAA,CAAQ,WAAA,CACR,UAAA,CAAY,iBACd,EACaC,EAAAA,CAAWC,CAAAA,EAAuB,GAAGA,CAAE,CAAA,KAAA,CAAA,CACvCC,GAAc,gBAAA,CACdC,EAAAA,CAAkC,CAC7C,eAAA,CACA,mBAAA,CACA,aACA,SAAA,CACA,QAAA,CACA,SACA,cAAA,CACA,aAAA,CACA,iBACA,UACF,CAAA,CAEMC,GAASH,CAAAA,EAAeA,CAAAA,CAAG,OAAO,CAAC,CAAA,CAAE,aAAY,CAAIA,CAAAA,CAAG,MAAM,CAAC,EAE9D,SAASI,EAAAA,EAAwC,CACtD,OAAOR,EAAAA,CAAkB,GAAA,CAAKI,GAAO,CACnC,IAAMK,EAA0B,CAC9B,EAAA,CAAAL,CAAAA,CACA,IAAA,CAAMG,GAAMH,CAAE,CAAA,CACd,aAAc,CAAC,GAAIH,GAAqBG,CAAE,CAAA,EAAK,EAAG,CAAA,CAClD,KAAM,CACJ,EAAA,CAAID,GAAQC,CAAE,CAAA,CACd,SAAU,CAAC,CAAE,WAAY,cAAe,CAAC,EACzC,QAAA,CAAU,GACV,MAAA,CAAQ,CAAE,OAAQ,OAAQ,CAC5B,CACF,CAAA,CACMM,CAAAA,CAAKR,GAAmBE,CAAE,CAAA,CAChC,OAAIM,CAAAA,GAAO,MAAA,GAAWD,EAAE,SAAA,CAAYC,CAAAA,CAAAA,CAC7BD,CACT,CAAC,CACH,CAEO,SAASE,EAASC,CAAAA,CAAuC,CAC9D,OAAOA,CAAAA,CAAM,MACf,CAEA,IAAMC,CAAAA,CAASC,GACb,OAAOA,CAAAA,EAAM,UAAYA,CAAAA,GAAM,IAAA,EAAQ,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAC,CAAA,CACnDC,EAAAA,CAAWD,GACf,KAAA,CAAM,OAAA,CAAQA,CAAC,CAAA,EAAKA,CAAAA,CAAE,MAAOE,CAAAA,EAAM,OAAOA,GAAM,QAAA,EAAYA,CAAAA,CAAE,MAAK,GAAM,EAAE,EAE7E,SAASC,EAAAA,CAAOC,EAAcC,CAAAA,CAAmC,CAC/D,GAAID,CAAAA,GAAQ,OAAW,OAClBL,CAAAA,CAAMK,CAAG,CAAA,EACZE,GAAAA,CAAK,iBAAkB,CAAA,EAAGD,CAAK,4BAA6B,2BAA2B,CAAA,CACzF,IAAME,CAAAA,CAAc,GACpB,IAAA,IAAWC,CAAAA,IAAK,CAAC,QAAA,CAAU,OAAA,CAAS,aAAa,CAAA,CAAY,CAC3D,IAAMC,CAAAA,CAAIL,CAAAA,CAAII,CAAC,CAAA,CACXC,CAAAA,GAAM,UACN,OAAOA,CAAAA,EAAM,UAAY,CAAC,MAAA,CAAO,SAASA,CAAC,CAAA,EAAKA,EAAI,CAAA,GACtDH,GAAAA,CACE,iBACA,CAAA,EAAGD,CAAK,CAAA,QAAA,EAAWG,CAAC,iCACpB,sBACF,CAAA,CACFD,EAAIC,CAAC,CAAA,CAAIC,GACX,CACA,OAAOF,CACT,CAEA,SAASG,GAAaN,CAAAA,CAAcC,CAAAA,CAAkC,CACpE,OAAA,CAAI,CAAC,MAAM,OAAA,CAAQD,CAAG,GAAKA,CAAAA,CAAI,MAAA,GAAW,IACxCE,GAAAA,CACE,gBAAA,CACA,GAAGD,CAAK,CAAA,sDAAA,CAAA,CACR,kDACF,CAAA,CACKD,CAAAA,CAAI,IAAKO,CAAAA,EACVA,CAAAA,GAAM,QAAgB,OAAA,CACtBZ,CAAAA,CAAMY,CAAC,CAAA,EAAK,OAAOA,EAAE,UAAA,EAAkB,QAAA,EAAYnB,EAAAA,CAAa,QAAA,CAASmB,EAAE,UAAa,CAAA,CACnF,CAAE,UAAA,CAAYA,CAAAA,CAAE,UAAc,CAAA,CAChCL,GAAAA,CACL,iBACA,CAAA,EAAGD,CAAK,UAAU,IAAA,CAAK,SAAA,CAAUM,CAAC,CAAC,CAAA,qCAAA,CAAA,CACnC,yCAAyCnB,EAAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAClE,CACD,CACH,CAEA,SAASoB,EAAAA,CAAMR,CAAAA,CAAcS,EAAWC,CAAAA,CAAsD,CAC5F,IAAMT,CAAAA,CAAQ,CAAA,wBAAA,EAA2BQ,CAAC,CAAA,CAAA,CAAA,CACrCd,CAAAA,CAAMK,CAAG,CAAA,EAAGE,GAAAA,CAAK,iBAAkB,CAAA,EAAGD,CAAK,CAAA,kBAAA,CAAA,CAAsB,yBAAyB,EAC/FU,GAAAA,CAASX,CAAAA,CAAI,GAAO,CAAA,EAAGC,CAAK,KAAK,CAAA,CACjC,IAAMf,EAAKc,CAAAA,CAAI,EAAA,CACTY,EAAeZ,CAAAA,CAAI,YAAA,EAAmBjB,GAAqBG,CAAE,CAAA,EAAK,EAAC,CACpEW,EAAAA,CAAQe,CAAY,CAAA,EACvBV,GAAAA,CACE,iBACA,CAAA,EAAGD,CAAK,qDACR,cACF,CAAA,CACF,IAAIY,CAAAA,CACJ,GAAIb,EAAI,IAAA,GAAY,MAAA,CAClBa,EAAO,CACL,EAAA,CAAI5B,GAAQC,CAAE,CAAA,CACd,SAAU,CAAC,CAAE,UAAA,CAAY,cAAe,CAAC,CAAA,CACzC,QAAA,CAAU,EAAC,CACX,MAAA,CAAQ,CAAE,MAAA,CAAQ,OAAQ,CAC5B,CAAA,CAAA,KACK,CACL,IAAM4B,CAAAA,CAAId,CAAAA,CAAI,MACV,CAACL,CAAAA,CAAMmB,CAAC,CAAA,EAAK,OAAOA,EAAE,EAAA,EAAU,QAAA,EAAYA,EAAE,EAAA,CAAM,IAAA,KAAW,EAAA,GACjEZ,GAAAA,CACE,iBACA,CAAA,EAAGD,CAAK,kCACR,8FACF,CAAA,CACF,IAAMc,CAAAA,CAAWD,CAAAA,CAAE,UAAe,EAAC,CAC9BjB,GAAQkB,CAAQ,CAAA,EACnBb,GAAAA,CACE,gBAAA,CACA,GAAGD,CAAK,CAAA,iCAAA,CAAA,CACR,gCACF,CAAA,CACFY,CAAAA,CAAO,CACL,EAAA,CAAIC,CAAAA,CAAE,GACN,QAAA,CAAUR,EAAAA,CACRQ,EAAE,QAAA,EAAe,CAAC,CAAE,UAAA,CAAY,cAAe,CAAC,CAAA,CAChD,CAAA,EAAGb,CAAK,CAAA,cAAA,CACV,CAAA,CACA,SAAU,CAAC,GAAGc,CAAQ,CAAA,CACtB,MAAA,CAAQ,CAAE,MAAA,CAAQ,OAAQ,CAC5B,EACF,CACIL,EAAMxB,CAAE,CAAA,EAAK,CAAC2B,CAAAA,CAAK,QAAA,CAAS,SAAS,OAAO,CAAA,GAAGA,CAAAA,CAAK,QAAA,CAAW,CAAC,OAAA,CAAS,GAAGA,EAAK,QAAQ,CAAA,CAAA,CAC7F,IAAMV,CAAAA,CAA4B,CAChC,GAAAjB,CAAAA,CACA,IAAA,CAAM,OAAOc,CAAAA,CAAI,IAAA,EAAY,UAAYA,CAAAA,CAAI,IAAA,CAAQ,MAAK,GAAM,EAAA,CAAKA,EAAI,IAAA,CAAUX,EAAAA,CAAMH,CAAE,CAAA,CAC3F,YAAA,CAAc,CAAC,GAAG0B,CAAY,EAC9B,IAAA,CAAAC,CACF,EACMG,CAAAA,CAAIjB,EAAAA,CAAOC,EAAI,MAAA,CAAWC,CAAK,EACjCe,CAAAA,GAAM,MAAA,GAAWb,EAAI,MAAA,CAASa,CAAAA,CAAAA,CAClC,IAAMxB,CAAAA,CAAKQ,EAAI,SAAA,EAAgBhB,EAAAA,CAAmBE,CAAE,CAAA,CACpD,OAAIM,IAAO,MAAA,GAAA,CACL,OAAOA,GAAO,QAAA,EAAYA,CAAAA,CAAG,MAAK,GAAM,EAAA,GAC1CU,IACE,gBAAA,CACA,CAAA,EAAGD,CAAK,CAAA,4BAAA,CAAA,CACR,mDACF,EACFE,CAAAA,CAAI,SAAA,CAAYX,GAEXW,CACT,CAEO,SAASc,EAAAA,CAAwBjB,CAAAA,CAA+B,CACrE,IAAMkB,CAAAA,CAAKlB,GAAO,EAAC,CACfkB,EAAE,MAAA,GAAc,MAAA,EAAa,CAAC,KAAA,CAAM,OAAA,CAAQA,EAAE,MAAS,CAAA,EACzDhB,GAAAA,CACE,gBAAA,CACA,qDACA,wCACF,CAAA,CACF,IAAMiB,CAAAA,CAAKD,CAAAA,CAAE,YAAiB,KAAA,CAC1BC,CAAAA,GAAO,OAAS,CAACtB,EAAAA,CAAQsB,CAAE,CAAA,EAC7BjB,GAAAA,CACE,iBACA,sEAAA,CACA,mBACF,EACF,IAAMQ,CAAAA,CAAQS,IAAO,KAAA,CAAQ,IAAM,KAAQjC,CAAAA,EAAgBiC,CAAAA,CAAgB,SAASjC,CAAE,CAAA,CAChFkC,EACJF,CAAAA,CAAE,MAAA,GAAc,OACZ5B,EAAAA,EAAc,CAAE,IAAI,CAACC,CAAAA,CAAGkB,IAAMD,EAAAA,CAAMjB,CAAAA,CAAGkB,EAAGC,CAAK,CAAC,CAAA,CAC/CQ,CAAAA,CAAE,OAAwB,GAAA,CAAI,CAAC3B,EAAGkB,CAAAA,GAAMD,EAAAA,CAAMjB,EAAGkB,CAAAA,CAAGC,CAAK,CAAC,CAAA,CAC7DU,CAAAA,CAAO,SAAW,CAAA,EACpBlB,GAAAA,CACE,iBACA,kDAAA,CACA,iCACF,EACF,IAAMmB,CAAAA,CAAMD,EAAO,GAAA,CAAK7B,CAAAA,EAAMA,EAAE,EAAE,CAAA,CAC5B+B,EAAOD,CAAAA,CAAI,IAAA,CAAK,CAACnC,CAAAA,CAAIuB,CAAAA,GAAMY,EAAI,OAAA,CAAQnC,CAAE,IAAMuB,CAAC,CAAA,CAGtD,GAFIa,CAAAA,GAAS,MAAA,EACXpB,IAAK,gBAAA,CAAkB,CAAA,oBAAA,EAAuBoB,CAAI,CAAA,CAAA,CAAA,CAAK,8BAA8B,CAAA,CACnFH,CAAAA,GAAO,MACT,IAAA,IAAWjC,CAAAA,IAAMiC,EACVE,CAAAA,CAAI,QAAA,CAASnC,CAAE,CAAA,EAClBgB,GAAAA,CACE,iBACA,CAAA,iDAAA,EAAoDhB,CAAE,IACtD,CAAA,YAAA,EAAemC,CAAAA,CAAI,KAAK,IAAI,CAAC,EAC/B,CAAA,CACN,IAAME,EAAKL,CAAAA,CAAE,aAAA,EAAoB,EAAC,CAC7BvB,CAAAA,CAAM4B,CAAE,CAAA,EACXrB,GAAAA,CACE,iBACA,kDAAA,CACA,iEACF,EAEAqB,CAAAA,CAAG,sBAAA,GAA8B,QACjC,OAAOA,CAAAA,CAAG,wBAA8B,SAAA,EAExCrB,GAAAA,CACE,iBACA,yEAAA,CACA,kBACF,EACF,IAAMsB,CAAAA,CAAkD,CACtD,sBAAA,CACED,CAAAA,CAAG,yBAA8B,MAAA,CAAY,IAAA,CAAQA,EAAG,sBAAA,CAC1D,SAAA,CAAWjB,GACTiB,CAAAA,CAAG,SAAA,EAAgB,CAAC,OAAA,CAAS,CAAE,WAAY,gBAAiB,CAAC,EAC7D,0CACF,CACF,EACME,CAAAA,CAAKP,CAAAA,CAAE,aACTQ,CAAAA,CACJ,GAAID,IAAO,MAAA,CACTC,CAAAA,CACEL,EAAI,QAAA,CAAS,cAAc,GAAKA,CAAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAKA,CAAAA,CAAI,SAAS,cAAc,CAAA,CACjF,CAAE,IAAA,CAAM,eAAgB,EAAA,CAAI,CAAC,SAAU,cAAc,CAAE,EACvD,CAAE,IAAA,CAAMA,EAAI,CAAC,CAAA,CAAI,GAAI,EAAG,OACzB,CAAA,CACD,CAAC1B,EAAM8B,CAAE,CAAA,EAAK,OAAOA,CAAAA,CAAG,IAAA,EAAY,UAAY,CAACJ,CAAAA,CAAI,SAASI,CAAAA,CAAG,IAAO,IAC1EvB,GAAAA,CACE,gBAAA,CACA,wDACA,CAAA,YAAA,EAAemB,CAAAA,CAAI,KAAK,IAAI,CAAC,EAC/B,CAAA,CACF,IAAMM,EAAKF,CAAAA,CAAG,EAAA,EAAS,EAAC,CACnB5B,GAAQ8B,CAAE,CAAA,EACbzB,IACE,gBAAA,CACA,kEAAA,CACA,eAAemB,CAAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAC/B,EACF,IAAA,IAAWO,CAAAA,IAAKD,EACTN,CAAAA,CAAI,QAAA,CAASO,CAAC,CAAA,EACjB1B,GAAAA,CACE,iBACA,CAAA,sDAAA,EAAyD0B,CAAC,IAC1D,CAAA,YAAA,EAAeP,CAAAA,CAAI,KAAK,IAAI,CAAC,EAC/B,CAAA,CACEA,CAAAA,CAAI,QAAQO,CAAC,CAAA,EAAKP,EAAI,OAAA,CAAQI,CAAAA,CAAG,IAAO,CAAA,EAC1CvB,GAAAA,CACE,iBACA,CAAA,wCAAA,EAA2C0B,CAAC,CAAA,mBAAA,EAAsBH,CAAAA,CAAG,IAAO,CAAA,CAAA,CAAA,CAC5E,yDACF,EAEJC,CAAAA,CAAe,CAAE,KAAMD,CAAAA,CAAG,IAAA,CAAS,GAAI,CAAC,GAAGE,CAAE,CAAE,EACjD,CACA,IAAME,CAAAA,CAAWX,EAAE,uBAAA,CAEjBW,CAAAA,GAAa,SACZ,OAAOA,CAAAA,EAAa,UAAY,CAAC,MAAA,CAAO,SAASA,CAAQ,CAAA,EAAKA,GAAY,CAAA,CAAA,EAE3E3B,GAAAA,CACE,iBACA,2EAAA,CACA,+BACF,EACF,IAAMC,CAAAA,CAAuB,CAC3B,MAAA,CAAAiB,CAAAA,CACA,cAAAI,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,UAAA,CAAYP,IAAO,KAAA,CAAQ,KAAA,CAAQ,CAAC,GAAIA,CAAe,CACzD,CAAA,CACA,OAAIU,IAAa,MAAA,GAAW1B,CAAAA,CAAI,wBAA0B0B,CAAAA,CAAAA,CACnD1B,CACT,CClTO,IAAM2B,CAAAA,CAAO,OACPC,CAAAA,CAAS,QAAA,CACTC,EAAO,OAGb,SAASC,EAASvC,CAAAA,CAA+B,CACtD,OAAIA,CAAAA,CAAM,MAAA,CAAeA,EAAM,MAAA,CACxBD,CAAAA,CAASC,CAAK,CAAA,CAAE,MAAA,CAAO,IAAKH,CAAAA,EAAM,CACvC,IAAM2C,CAAAA,CAAY,CAChB,GAAI3C,CAAAA,CAAE,EAAA,CACN,IAAA,CAAMA,CAAAA,CAAE,KACR,YAAA,CAAc,CAAC,GAAGA,CAAAA,CAAE,YAAY,EAChC,IAAA,CAAMA,CAAAA,CAAE,KACR,MAAA,CAAQ,SACV,EACA,OAAIA,CAAAA,CAAE,SAAQ2C,CAAAA,CAAG,MAAA,CAAS3C,EAAE,MAAA,CAAA,CACrB2C,CACT,CAAC,CACH,CAEO,SAASC,CAAAA,CAAWzC,CAAAA,CAAsB0B,EAAgC,CAC/E,OAAO,CAAE,GAAG1B,CAAAA,CAAO,OAAA0B,CAAO,CAC5B,CAEO,SAASgB,CAAAA,CAAW1C,EAAsBR,CAAAA,CAAoB,CACnE,IAAMmD,CAAAA,CAAMJ,CAAAA,CAASvC,CAAK,CAAA,CAAE,UAAWH,CAAAA,EAAMA,CAAAA,CAAE,KAAOL,CAAE,CAAA,CACxD,OAAImD,CAAAA,CAAM,CAAA,EACRnC,IACE,gBAAA,CACA,CAAA,eAAA,EAAkBhB,CAAE,CAAA,CAAA,CAAA,CACpB,CAAA,YAAA,EAAe+C,EAASvC,CAAK,CAAA,CAC1B,IAAKH,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,UAAK,CAAC,CAAA,CAChB,EACK8C,CACT,CAEO,SAASC,CAAAA,CAAS5C,CAAAA,CAAsBR,EAAmB,CAChE,OAAO+C,EAASvC,CAAK,CAAA,CAAE0C,EAAW1C,CAAAA,CAAOR,CAAE,CAAC,CAC9C,CAGO,SAASqD,CAAAA,CAAQ7C,EAAsB8C,CAAAA,CAAoC,CAChF,IAAMC,CAAAA,CAAO,IAAI,IACbC,CAAAA,CAA4BF,CAAAA,CAChC,KAAOE,CAAAA,EAAO,CAACD,EAAK,GAAA,CAAIC,CAAAA,CAAI,EAAE,CAAA,EAAG,CAC/B,GAAIA,CAAAA,CAAI,KAAA,GAAU,OAAW,OAAOA,CAAAA,CAAI,MACxCD,CAAAA,CAAK,GAAA,CAAIC,EAAI,EAAE,CAAA,CACfA,EACEA,CAAAA,CAAI,MAAA,GAAW,QAAa,MAAA,CAAO,MAAA,CAAOhD,EAAM,KAAA,CAAOgD,CAAAA,CAAI,MAAM,CAAA,CAC7DhD,CAAAA,CAAM,MAAMgD,CAAAA,CAAI,MAAM,EACtB,OACR,CAEF,CAEO,SAASC,CAAAA,CAAajD,EAAsBkD,CAAAA,CAA6B,CAC9E,OAAO,MAAA,CAAO,MAAA,CAAOlD,EAAM,KAAK,CAAA,CAAE,OAC/Be,CAAAA,EAAMA,CAAAA,CAAE,SAAW,SAAA,EAAa8B,CAAAA,CAAQ7C,EAAOe,CAAC,CAAA,GAAMmC,CACzD,CACF,CAEO,SAASC,CAAAA,CAAUnD,CAAAA,CAAyC,CACjE,OAAOuC,CAAAA,CAASvC,CAAK,CAAA,CAAE,IAAA,CAAMH,GAAMA,CAAAA,CAAE,MAAA,GAAW,MAAM,CACxD,CAGO,SAASuD,EAAAA,CAAapD,CAAAA,CAAyC,CACpE,OAAOuC,CAAAA,CAASvC,CAAK,CAAA,CAAE,KAAMH,CAAAA,EAAMA,CAAAA,CAAE,SAAW,WAAW,CAC7D,CAEO,SAASwD,EAAAA,CAASrD,EAAsB8C,CAAAA,CAAyB,CACtE,IAAMtD,CAAAA,CAAKqD,CAAAA,CAAQ7C,EAAO8C,CAAI,CAAA,CAC9B,OAAOtD,CAAAA,GAAO,MAAA,EAAa+C,EAASvC,CAAK,CAAA,CAAE,KAAMH,CAAAA,EAAMA,CAAAA,CAAE,KAAOL,CAAE,CAAA,EAAG,SAAW,WAClF,CAEO,SAAS8D,EAAAA,CAActD,CAAAA,CAAsBc,EAA2B,CAC7E,IAAMyC,EAAQ,IAAI,GAAA,CAAA,CAAazC,EAAM,QAAA,EAAY,EAAC,EAAG,GAAA,CAAKjB,GAAMA,CAAAA,CAAE,IAAI,CAAC,CAAA,CACvE,IAAA,IAAW2D,KAAMP,CAAAA,CAAajD,CAAAA,CAAOc,EAAM,EAAE,CAAA,CAAG,QAAW2C,CAAAA,IAAKD,CAAAA,CAAG,SAAUD,CAAAA,CAAM,GAAA,CAAIE,EAAE,IAAI,CAAA,CAC7F,OAAOF,CACT,CAGO,SAASG,CAAAA,CACd1D,CAAAA,CACAc,EACA6C,CAAAA,CAAkB,GACR,CACV,IAAMC,EAAON,EAAAA,CAActD,CAAAA,CAAOc,CAAK,CAAA,CACvC,IAAA,IAAWJ,KAAKiD,CAAAA,CAAOC,CAAAA,CAAK,IAAIlD,CAAC,CAAA,CACjC,IAAMmD,CAAAA,CAAmB,EAAC,CAC1B,IAAA,IAAWnD,KAAK,CAAC,GAAGI,EAAM,YAAA,CAAc,GAAGA,EAAM,IAAA,CAAK,QAAQ,EACvD+C,CAAAA,CAAO,QAAA,CAASnD,CAAC,CAAA,EAAGmD,CAAAA,CAAO,KAAKnD,CAAC,CAAA,CACxC,OAAOmD,CAAAA,CAAO,MAAA,CAAQnD,GAAM,CAACkD,CAAAA,CAAK,IAAIlD,CAAC,CAAC,CAC1C,CAGO,SAASoD,EAAY9D,CAAAA,CAA0C,CACpE,IAAM+D,CAAAA,CAAQxB,CAAAA,CAASvC,CAAK,CAAA,CAAE,GAAA,CAAKH,GAAMA,CAAAA,CAAE,EAAE,CAAA,CACvCoC,CAAAA,CAAKlC,EAASC,CAAK,CAAA,CAAE,aAAa,EAAA,CAAG,MAAA,CAAQkC,GAAM6B,CAAAA,CAAM,QAAA,CAAS7B,CAAC,CAAC,CAAA,CAC1E,GAAID,CAAAA,CAAG,MAAA,GAAW,EAClB,OAAOA,CAAAA,CAAG,OAAO,CAAC,CAAA,CAAGX,IAAOyC,CAAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAKA,CAAAA,CAAM,QAAQzC,CAAC,CAAA,CAAI,EAAIA,CAAE,CAC3E,CCpGA,SAAS0C,EAAAA,CACPhE,EACAiE,CAAAA,CACAC,CAAAA,CACAC,EACe,CACf,IAAMX,EAAKY,GAAAA,CAAcpE,CAAK,CAAA,CAC9B,OAAI,CAACwD,CAAAA,EAAM,CAACA,EAAG,EAAA,CAAG,UAAA,CAAW,GAAGS,CAAM,CAAA,CAAA,CAAG,EAAUjE,CAAAA,CAC5C,CACL,GAAGA,CAAAA,CACH,UAAA,CAAYA,EAAM,UAAA,CAAW,GAAA,CAAKE,GAAOA,CAAAA,CAAE,EAAA,GAAOsD,EAAG,EAAA,CAAK,CAAE,GAAGtD,CAAAA,CAAG,OAAA,CAASiE,EAAK,OAAA,CAAAD,CAAQ,EAAIhE,CAAE,CAChG,CACF,CAGO,SAASmE,GACdrE,CAAAA,CACAkD,CAAAA,CACAoB,EACAH,CAAAA,CACe,CACf,IAAMrD,CAAAA,CAAQ8B,CAAAA,CAAS5C,CAAAA,CAAOkD,CAAO,EACjCpC,CAAAA,CAAM,MAAA,GAAW,QACnBN,GAAAA,CACE,oBAAA,CACA,UAAU0C,CAAO,CAAA,KAAA,EAAQpC,EAAM,MAAM,CAAA,UAAA,CAAA,CACrCA,EAAM,MAAA,GAAW,WAAA,CACb,uDACA,yBACN,CAAA,CACF,IAAMyD,GAAAA,CAAQtB,CAAAA,CAAajD,EAAOkD,CAAO,CAAA,CACnCsB,EAAyC,EAAC,CAChD,QAAWhB,CAAAA,IAAMe,GAAAA,CAAOC,EAAahB,CAAAA,CAAG,EAAE,EAAIA,CAAAA,CAC9C,IAAMiB,GAAWzE,CAAAA,CAAM,SAAA,EAAa,EAAC,EAAG,MAAA,CAAQsB,GAAMA,CAAAA,CAAE,KAAA,GAAU4B,CAAO,CAAA,CAAE,OACrEwB,CAAAA,CAAqB,CACzB,MAAOxB,CAAAA,CACP,OAAA,CAASuB,EAAU,CAAA,CACnB,EAAA,CAAIN,EACJ,UAAA,CAAAG,CAAAA,CACA,aAAAE,CACF,CAAA,CACI,EAAI/B,CAAAA,CACNzC,CAAAA,CACAuC,EAASvC,CAAK,CAAA,CAAE,IAAKH,CAAAA,EAAOA,CAAAA,CAAE,KAAOqD,CAAAA,CAAU,CAAE,GAAGrD,CAAAA,CAAG,MAAA,CAAQ,WAAqB,CAAA,CAAIA,CAAE,CAC5F,CAAA,CACA,OAAA,CAAA,CAAI,CAAE,GAAG,CAAA,CAAG,SAAA6E,CAAAA,CAAU,SAAA,CAAW,CAAC,GAAI,CAAA,CAAE,WAAa,EAAC,CAAIA,CAAQ,CAAE,CAAA,CACpE,EAAIV,EAAAA,CAAe,CAAA,CAAGd,EAAS,WAAA,CAAaiB,CAAG,EACxCQ,CAAAA,CACL,CAAA,CACA,kBACAL,CAAAA,CAAWA,CAAAA,CAAW,OAAS,CAAC,CAAA,EAAK,SACrC,CAAE,KAAA,CAAOpB,EAAS,OAAA,CAASwB,CAAAA,CAAS,QAAS,UAAA,CAAAJ,CAAAA,CAAY,MAAOC,GAAAA,CAAM,GAAA,CAAKxD,GAAMA,CAAAA,CAAE,EAAE,CAAE,CAAA,CACvFoD,CACF,CACF,CASO,SAASS,GAAa5E,CAAAA,CAAsB2B,CAAAA,CAAewC,EAA2B,CAC3F,IAAMU,CAAAA,CAAqB,GAC3B,IAAA,IAAWrF,CAAAA,IAAMmC,EAAK,CACpB,IAAM9B,EAAI+C,CAAAA,CAAS5C,CAAAA,CAAOR,CAAE,CAAA,CACxBK,CAAAA,CAAE,SAAW,SAAA,EACfW,GAAAA,CACE,gBACA,CAAA,OAAA,EAAUhB,CAAE,oDACZ,sCACF,CAAA,CACEK,EAAE,MAAA,GAAW,WAAA,EAAe,CAACgF,CAAAA,CAAS,QAAA,CAASrF,CAAE,CAAA,EAAGqF,CAAAA,CAAS,KAAKrF,CAAE,EAC1E,CACA,IAAIkC,CAAAA,CAASa,EAASvC,CAAK,CAAA,CAAE,IAAKH,CAAAA,EAChCgF,CAAAA,CAAS,SAAShF,CAAAA,CAAE,EAAE,CAAA,CAAI,CAAE,GAAGA,CAAAA,CAAG,MAAA,CAAQ,UAAoB,CAAA,CAAIA,CACpE,EACIiF,CAAAA,CAA2B,IAAA,CAC3B1E,EAAIJ,CAAAA,CACR,GAAI6E,EAAS,MAAA,CAAQ,CACnB,IAAME,CAAAA,CAAW,IAAA,CAAK,IAAI,GAAGF,CAAAA,CAAS,IAAKrF,CAAAA,EAAOkD,CAAAA,CAAW1C,EAAOR,CAAE,CAAC,CAAC,CAAA,CAClEwF,CAAAA,CAAOtD,EAAO,IAAA,CAAK,CAAC7B,EAAGkB,CAAAA,GAAMlB,CAAAA,CAAE,SAAW,MAAA,EAAUkB,CAAAA,CAAIgE,CAAQ,CAAA,CAClEC,CAAAA,GACFF,EAAYE,CAAAA,CAAK,EAAA,CACjBtD,CAAAA,CAASA,CAAAA,CAAO,IAAK7B,CAAAA,EAAOA,CAAAA,CAAE,KAAOmF,CAAAA,CAAK,EAAA,CAAK,CAAE,GAAGnF,CAAAA,CAAG,OAAQ,UAAoB,CAAA,CAAIA,CAAE,CAAA,CACzFO,CAAAA,CAAI4D,GAAe5D,CAAAA,CAAG4E,CAAAA,CAAK,GAAI,WAAA,CAAab,CAAG,GAEnD,CACA,OAAO,CAAE,KAAA,CAAO1B,CAAAA,CAAWrC,EAAGsB,CAAM,CAAA,CAAG,SAAAmD,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAC7D,CC1FO,SAASG,CAAAA,CACdjF,CAAAA,CACAkF,EACApF,CAAAA,CACAqF,CAAAA,CACAhB,EACe,CACf,IAAMiB,GAAAA,CAAKC,CAAAA,CAAQrF,EAAOkF,CAAQ,CAAA,CAC5BI,EAAKF,GAAAA,CAAG,cAAA,CACRG,EAAIX,EAAAA,CAAa5E,CAAAA,CAAOsF,GAAI,MAAA,EAAU,GAAInB,CAAG,CAAA,CAC/C/D,EAAIoF,CAAAA,CAASD,CAAAA,CAAE,MAAOL,CAAAA,CAAU,CAAE,MAAO5C,CAAAA,CAAM,MAAA,CAAQ,MAAO,CAAA,CAAGxC,CAAAA,CAAIqE,CAAG,CAAA,CAC5E,IAAA,IAAWrD,KAASyE,CAAAA,CAAE,QAAA,CACpBnF,EAAIuE,CAAAA,CAAYvE,CAAAA,CAAG,iBAAkBN,CAAAA,CAAI,CAAE,MAAAgB,CAAAA,CAAO,MAAA,CAAQoE,CAAS,CAAA,CAAGf,CAAG,CAAA,CAC3E,OAAIoB,EAAE,SAAA,GAAc,IAAA,GAClBnF,EAAIuE,CAAAA,CAAYvE,CAAAA,CAAG,kBAAmBN,CAAAA,CAAI,CAAE,MAAOyF,CAAAA,CAAE,SAAA,CAAW,OAAQL,CAAS,CAAA,CAAGf,CAAG,CAAA,CAAA,CAClFQ,CAAAA,CACLvE,EACA,gBAAA,CACAN,CAAAA,CACA,CACE,MAAA,CAAQoF,CAAAA,CACR,SAAU,SAAA,CACV,EAAA,CAAApF,EACA,IAAA,CAAAqF,CAAAA,CACA,SAAUI,CAAAA,CAAE,QAAA,CACZ,UAAWA,CAAAA,CAAE,SAAA,CACb,OAAQD,CAAAA,EAAI,MAAA,EAAU,EACtB,OAAA,CAASF,GAAAA,CAAG,SAAW,EACzB,CAAA,CACAjB,CACF,CACF,CAEO,SAASsB,EACdzF,CAAAA,CACAkF,CAAAA,CACApF,EACAqF,CAAAA,CACAhB,CAAAA,CACe,CACf,IAAMiB,GAAAA,CAAKC,EAAQrF,CAAAA,CAAOkF,CAAQ,EAC5B9E,CAAAA,CAAIoF,CAAAA,CAASxF,EAAOkF,CAAAA,CAAU,CAAE,OAAQ,SAAU,CAAA,CAAGpF,EAAIqE,CAAG,CAAA,CAClE,OAAOQ,CAAAA,CACLvE,CAAAA,CACA,iBACAN,CAAAA,CACA,CACE,OAAQoF,CAAAA,CACR,QAAA,CAAU,SACV,EAAA,CAAApF,CAAAA,CACA,KAAAqF,CAAAA,CACA,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,IAAA,CACX,MAAA,CAAQ,EACR,OAAA,CAASC,GAAAA,CAAG,SAAW,EACzB,EACAjB,CACF,CACF,CCxDO,SAASuB,EAAAA,CAAmBC,EAA0C,CAC3E,OAAO,CAAC3F,CAAAA,CAAO4F,CAAAA,GAAU,CACvBC,CAAAA,CAAW7F,CAAAA,CAAO4F,EAAM,EAAA,CAAI,YAAY,EACxC,IAAM9E,GAAAA,CACJ8E,EAAM,KAAA,GAAa,MAAA,CAAY,OAAYE,CAAAA,CAAU9F,CAAAA,CAAO4F,EAAO,oBAAoB,CAAA,CACnFG,EAASC,GAAAA,CAAiBhG,CAAAA,CAAO4F,EAAO,oBAAoB,CAAA,CAClE,OAAOK,GAAAA,CACLjG,CAAAA,CACA2F,CAAAA,EAAY,CACZ,CAAE,IAAA,CAAM,6BAAA,CAA+B,GAAIC,CAAAA,CAAM,EAAA,CAAI,QAASA,CAAM,CAAA,CACnEM,KAAO,CACN,IAAI9F,EAAI8F,GAAAA,CACF/B,CAAAA,CAAMgC,EAAMP,CAAAA,CAAM,GAAG,EACrBnF,CAAAA,CAAM2F,GAAAA,CAAiBhG,EAAG2F,CAAAA,CAAQH,CAAAA,CAAM,GAAIzB,CAAG,CAAA,CACrD,OAAA/D,CAAAA,CAAIK,CAAAA,CAAI,MACDkE,CAAAA,CACLvE,CAAAA,CACA,sBACAwF,CAAAA,CAAM,EAAA,CACN,CACE,KAAA,CAAO9E,GAAAA,EAAO,IAAM,IAAA,CACpB,OAAA,CAASL,EAAI,OAAA,CACb,OAAA,CAASA,CAAAA,CAAI,OAAA,CAAQ,MAAMA,CAAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,CAC7C,SAAA,CAAWA,EAAI,SAAA,CACf,UAAA,CAAYA,EAAI,UAAA,CAChB,OAAA,CAASA,EAAI,OACf,CAAA,CACA0D,CACF,CACF,CACF,CACF,CACF,CCtBA,IAAMkC,EAAAA,CAAO,CAACC,CAAAA,CAAahF,CAAAA,GAAiBgF,EAAE,EAAA,CAAKhF,CAAAA,CAAE,GAAK,EAAA,CAAKgF,CAAAA,CAAE,GAAKhF,CAAAA,CAAE,EAAA,CAAK,EAAI,CAAA,CAC3EiF,EAAAA,CAAY,CAACvG,CAAAA,CAAsBc,CAAAA,GACvC0F,OAAAA,CACEvD,CAAAA,CAAajD,EAAOc,CAAK,CAAA,CAAE,OAAQC,CAAAA,EAAMA,CAAAA,CAAE,OAAS,UAAA,EAAcA,CAAAA,CAAE,OAAS,gBAAgB,CAAA,CAC7FsF,EACF,CAAA,CAGII,EAAAA,CAAS,CAACH,CAAAA,CAAahF,CAAAA,GAAAA,CAC1BgF,EAAE,MAAA,EAAU,IAAI,QAAA,CAAShF,CAAAA,CAAE,EAAE,CAAA,EAAA,CAAMA,CAAAA,CAAE,QAAU,EAAC,EAAG,SAASgF,CAAAA,CAAE,EAAE,EAE5D,SAASI,CAAAA,CAAmB1G,EAA0C,CAC3E,IAAM2G,EAAM5G,CAAAA,CAASC,CAAK,EAAE,YAAA,CACtB+D,CAAAA,CAAQxB,CAAAA,CAASvC,CAAK,EAAE,GAAA,CAAKH,CAAAA,EAAMA,EAAE,EAAE,CAAA,CACvCoC,EAAK0E,CAAAA,CAAI,EAAA,CAAG,OAAQzE,CAAAA,EAAM6B,CAAAA,CAAM,SAAS7B,CAAC,CAAC,EAC3C0E,CAAAA,CAAmBL,EAAAA,CAAUvG,EAAO2G,CAAAA,CAAI,IAAI,EAAE,GAAA,CAAKE,CAAAA,EAAM,CAC7D,IAAMC,CAAAA,CAAkC,EAAC,CACzC,IAAA,IAAW5E,KAAKD,CAAAA,CACd6E,CAAAA,CAAM5E,CAAC,CAAA,CAAIqE,EAAAA,CAAUvG,EAAOkC,CAAC,CAAA,CAC1B,OAAQhC,CAAAA,EAAMuG,EAAAA,CAAOI,EAAG3G,CAAC,CAAC,CAAA,CAC1B,GAAA,CAAKA,GAAMA,CAAAA,CAAE,EAAE,EACpB,OAAO,CAAE,KAAM2G,CAAAA,CAAE,EAAA,CAAI,MAAAC,CAAM,CAC7B,CAAC,CAAA,CACKC,CAAAA,CAAUH,EACb,GAAA,CAAKrB,CAAAA,GAAO,CAAE,IAAA,CAAMA,CAAAA,CAAE,KAAM,MAAA,CAAQtD,CAAAA,CAAG,OAAQC,CAAAA,EAAMqD,CAAAA,CAAE,MAAMrD,CAAC,CAAA,CAAG,SAAW,CAAC,CAAE,EAAE,CAAA,CACjF,MAAA,CAAQ8E,GAAMA,CAAAA,CAAE,MAAA,CAAO,OAAS,CAAC,CAAA,CACpC,OAAO,CACL,IAAA,CAAML,CAAAA,CAAI,IAAA,CACV,GAAA1E,CAAAA,CACA,IAAA,CAAA2E,EACA,OAAA,CAAAG,CAAAA,CACA,SAAU,CAAE,MAAA,CAAQH,EAAK,MAAA,CAASG,CAAAA,CAAQ,OAAQ,KAAA,CAAOH,CAAAA,CAAK,MAAO,CACvE,CACF,CAGO,SAASK,CAAAA,CAAcjH,EAAsBkH,CAAAA,CAA2B,CAC7E,OAAOR,CAAAA,CAAmB1G,CAAK,EAC5B,IAAA,CAAK,MAAA,CAAQuF,IAAOA,CAAAA,CAAE,KAAA,CAAM2B,CAAO,CAAA,EAAK,IAAI,MAAA,GAAW,CAAC,EACxD,GAAA,CAAK3B,CAAAA,EAAMA,EAAE,IAAI,CACtB,CCnCA,IAAMtF,GAASC,CAAAA,EACb,OAAOA,GAAM,QAAA,EAAYA,CAAAA,GAAM,MAAQ,CAAC,KAAA,CAAM,QAAQA,CAAC,CAAA,CAGlD,SAAS4F,CAAAA,CAAU9F,CAAAA,CAAsB4F,EAAsBuB,CAAAA,CAAyB,CAC7F,IAAM3H,CAAAA,CAAKoG,CAAAA,CAAM,MACjB,OAAA,CAAI,OAAOpG,GAAO,QAAA,EAAYA,CAAAA,CAAG,MAAK,GAAM,EAAA,GAC1CgB,IACE,eAAA,CACA,CAAA,EAAG2G,CAAQ,CAAA,oBAAA,CAAA,CACX,CAAA,aAAA,EAAgB5E,EAASvC,CAAK,CAAA,CAC3B,IAAK,CAAA,EAAM,CAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,IAAI,CAAC,EACf,CAAA,CACK4C,CAAAA,CAAS5C,EAAOR,CAAE,CAC3B,CAGA,SAAS4H,EAAAA,CACPpH,EACAkD,CAAAA,CACAmE,CAAAA,CACAC,EACAxH,CAAAA,CACAqE,GAAAA,CACe,CACf,IAAM/D,CAAAA,CAAIqC,EACRzC,CAAAA,CACAuC,CAAAA,CAASvC,CAAK,CAAA,CAAE,GAAA,CAAKH,GACnBA,CAAAA,CAAE,EAAA,GAAOqD,EACL,CAAE,GAAGrD,EAAG,QAAA,CAAU,CAAC,GAAIA,CAAAA,CAAE,QAAA,EAAY,EAAC,CAAI,CAAE,KAAAwH,CAAAA,CAAM,GAAA,CAAAC,EAAK,EAAA,CAAAxH,CAAAA,CAAI,GAAIqE,GAAI,CAAC,CAAE,CAAA,CACtEtE,CACN,CACF,CAAA,CACA,OAAO8E,EAAYvE,CAAAA,CAAG,mBAAA,CAAqBN,EAAI,CAAE,KAAA,CAAOoD,EAAS,IAAA,CAAAmE,CAAAA,CAAM,IAAAC,CAAI,CAAA,CAAGnD,GAAG,CACnF,CAIO,SAASoD,EAAAA,CAAoB5B,CAAAA,CAA0D,CAC5F,IAAM6B,CAAAA,CAAM,CACVxH,CAAAA,CACAyH,CAAAA,CACA7B,EACA8B,CAAAA,GAEAzB,GAAAA,CAAYjG,EAAO2F,CAAAA,EAAY,CAAG,CAAE,IAAA,CAAA8B,CAAAA,CAAM,GAAI7B,CAAAA,CAAM,EAAA,CAAI,QAASA,CAAM,CAAA,CAAI,CAAA,EACzE8B,CAAAA,CAAO,EAAGvB,CAAAA,CAAMP,CAAAA,CAAM,GAAG,CAAC,CAC5B,EAiOF,OAAO,CACL,QAhOwB,CAAC5F,GAAAA,CAAO4F,MAAU,CAC1CC,CAAAA,CAAW7F,IAAO4F,GAAAA,CAAM,EAAA,CAAI,YAAY,CAAA,CACxC,IAAM9E,EAAQgF,CAAAA,CAAU9F,GAAAA,CAAO4F,IAAO,SAAS,CAAA,CAC/C,OAAO4B,CAAAA,CAAIxH,GAAAA,CAAO,mBAAoB4F,GAAAA,CAAO,CAACxF,EAAG+D,CAAAA,GAAQ,CACvD,IAAMwD,CAAAA,CACJvH,CAAAA,CAAE,OAAO,MAAA,CACNqD,CAAAA,EAAMA,EAAE,IAAA,GAAS,cAAA,EAAmBA,CAAAA,CAAE,OAAA,CAA8B,QAAU3C,CAAAA,CAAM,EACvF,EAAE,MAAA,CAAS,CAAA,CACPyD,EAAQtB,CAAAA,CAAa7C,CAAAA,CAAGU,EAAM,EAAE,CAAA,CACnC,OAAQC,CAAAA,EAAMA,CAAAA,CAAE,SAAW,MAAM,CAAA,CACjC,IAAKA,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CAClBX,CAAAA,CAAIqC,EACFrC,CAAAA,CACAmC,CAAAA,CAASnC,CAAC,CAAA,CAAE,GAAA,CAAKP,GAAOA,CAAAA,CAAE,EAAA,GAAOiB,EAAM,EAAA,CAAK,CAAE,GAAGjB,CAAAA,CAAG,MAAA,CAAQ,MAAgB,CAAA,CAAIA,CAAE,CACpF,CAAA,CACA,IAAMQ,CAAAA,CAASS,CAAAA,CAAM,QAAU,EAAC,CAChC,OAAAV,CAAAA,CAAI,CACF,GAAGA,CAAAA,CACH,UAAA,CAAY,CACV,GAAGA,CAAAA,CAAE,WACL,CACE,EAAA,CAAI,GAAGU,CAAAA,CAAM,EAAE,IAAI6G,CAAO,CAAA,CAAA,CAC1B,KAAM7G,CAAAA,CAAM,IAAA,CACZ,OAAAT,CAAAA,CACA,KAAA,CAAOuH,IACP,SAAA,CAAWzD,CAAAA,CACX,UAAWI,CAAAA,CACX,SAAA,CAAW,EACb,CACF,CACF,CAAA,CACOI,CAAAA,CACLvE,EACA,cAAA,CACAwF,GAAAA,CAAM,GACN,CAAE,KAAA,CAAO9E,CAAAA,CAAM,EAAA,CAAI,QAAA6G,CAAAA,CAAS,KAAA,CAAApD,EAAO,MAAA,CAAAlE,CAAO,EAC1C8D,CACF,CACF,CAAC,CACH,CAAA,CA0LE,WAxL2B,CAACnE,GAAAA,CAAO4F,IAAU,CAC7C,IAAM9E,EAAQgF,CAAAA,CAAU9F,GAAAA,CAAO4F,EAAO,YAAY,CAAA,CAC9C9E,EAAM,MAAA,GAAW,MAAA,EACnBN,IACE,oBAAA,CACA,CAAA,OAAA,EAAUM,EAAM,EAAE,CAAA,KAAA,EAAQA,EAAM,MAAM,CAAA,UAAA,CAAA,CACtCA,EAAM,MAAA,GAAW,WAAA,CACb,uDACA,CAAA,SAAA,EAAYA,CAAAA,CAAM,EAAE,CAAA,OAAA,CAC1B,CAAA,CACF,IAAMK,CAAAA,CAAOL,EAAM,IAAA,CACb+G,CAAAA,CAAYC,IAAY9H,GAAAA,CAAOmB,CAAAA,CAAK,GAAI,cAAc,CAAA,CACxDyE,EAAM,EAAA,GAAO,OAAA,EAAW,CAACiC,CAAAA,CAAU,QAAA,CAASjC,EAAM,EAAE,CAAA,EACtDpF,IACE,YAAA,CACA,CAAA,CAAA,EAAIoF,EAAM,EAAE,CAAA,uBAAA,EAA0BzE,EAAK,EAAE,CAAA,CAAA,CAAA,CAC7C,0BAA0B0G,CAAAA,CAAU,GAAA,CAAK,GAAM,CAAA,EAAA,EAAK,CAAC,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA,CACjE,CAAE,IAAA,CAAM,MAAO,CACjB,CAAA,CACF,IAAME,CAAAA,CAAU/H,GAAAA,CAAM,QAAQ,IAAA,CAC3BH,CAAAA,EAAMA,EAAE,IAAA,GAAS,MAAA,EAAUA,EAAE,IAAA,GAAS,MAAA,EAAaA,EAAE,IAAA,GAASsB,CAAAA,CAAK,EACtE,CAAA,CACI4G,CAAAA,EACFvH,IACE,OAAA,CACA,CAAA,MAAA,EAASW,EAAK,EAAE,CAAA,kCAAA,EAAqC4G,EAAQ,EAAE,CAAA,CAAA,CAAA,CAC/D,UAAUA,CAAAA,CAAQ,EAAE,iBACtB,CAAA,CACF,IAAMC,EAAQpC,CAAAA,CAAM,YAAA,EAAmB,EAAC,CAAA,CAEtC,CAAC,MAAM,OAAA,CAAQoC,CAAK,GACpB,CAACA,CAAAA,CAAM,MACJC,CAAAA,EACChI,EAAAA,CAAMgI,CAAC,CAAA,EACP,OAAOA,CAAAA,CAAE,IAAA,EAAY,UACrBA,CAAAA,CAAE,IAAA,CAAQ,MAAK,GAAM,EAAA,EACrB,OAAOA,CAAAA,CAAE,GAAA,EAAW,QACxB,CAAA,GAEAzH,GAAAA,CACE,gBACA,iDAAA,CACA,oEACF,EACF,IAAMU,CAAAA,CAAe8G,EACrB,OAAOR,CAAAA,CAAIxH,IAAO,qBAAA,CAAuB4F,CAAAA,CAAO,CAACxF,CAAAA,CAAG+D,CAAAA,GAAQ,CAC1D,IAAA,IAAW8D,CAAAA,IAAK/G,EACdd,CAAAA,CAAIgH,EAAAA,CAAkBhH,EAAGU,CAAAA,CAAM,EAAA,CAAImH,EAAE,IAAA,CAAMA,CAAAA,CAAE,IAAKrC,CAAAA,CAAM,EAAA,CAAIzB,CAAG,CAAA,CACjE,GAAIpE,EAASK,CAAC,CAAA,CAAE,aAAa,EAAA,CAAG,QAAA,CAASU,EAAM,EAAE,CAAA,CAAG,CAClD,IAAMkG,CAAAA,CAAIN,EAAmBtG,CAAC,CAAA,CAC9BA,EAAIuE,CAAAA,CACFvE,CAAAA,CACA,wBACAwF,CAAAA,CAAM,EAAA,CACN,CACE,KAAA,CAAO9E,CAAAA,CAAM,GACb,IAAA,CAAMkG,CAAAA,CAAE,KACR,EAAA,CAAIA,CAAAA,CAAE,GACN,QAAA,CAAUA,CAAAA,CAAE,SACZ,OAAA,CAASA,CAAAA,CAAE,QACX,IAAA,CAAMA,CAAAA,CAAE,IACV,CAAA,CACA7C,CACF,EACIrD,CAAAA,CAAM,EAAA,GAAOgD,CAAAA,CAAY1D,CAAC,GAAK4G,CAAAA,CAAE,OAAA,CAAQ,SAAW,CAAA,GACtD5G,CAAAA,CAAIgH,GACFhH,CAAAA,CACAU,CAAAA,CAAM,GACN,qBAAA,CACA,CAAA,sBAAA,EAAyBV,EAAE,MAAA,CAAOA,CAAAA,CAAE,OAAO,MAAA,CAAS,CAAC,EAAG,GAAG,CAAA,CAAA,CAC3DwF,EAAM,EAAA,CACNzB,CACF,GACJ,CACA,GAAIhD,EAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAKyE,CAAAA,CAAM,KAAO,OAAA,CAAS,CAC3DxF,EAAI8H,GAAAA,CACF9H,CAAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAMe,CAAAA,CAAK,EAAA,CACX,QAAA,CAAU,CAAA,cAAA,EAAiBA,EAAK,EAAE,CAAA,sBAAA,EAAyBL,EAAM,IAAI,CAAA,EAAA,CACvE,EACAqD,CACF,CAAA,CACA,IAAMgE,CAAAA,CAAU/H,CAAAA,CAAE,QAAQA,CAAAA,CAAE,OAAA,CAAQ,OAAS,CAAC,CAAA,CAAG,GACjD,OAAOuE,CAAAA,CACLvE,EACA,oBAAA,CACAwF,CAAAA,CAAM,GACN,CAAE,KAAA,CAAO9E,EAAM,EAAA,CAAI,IAAA,CAAMK,EAAK,EAAA,CAAI,EAAA,CAAIyE,EAAM,EAAA,CAAI,OAAA,CAAAuC,CAAQ,CAAA,CACxDhE,CACF,CACF,CACA,OAAOE,GAAcjE,CAAAA,CAAGU,CAAAA,CAAM,EAAA,CAAI,CAAC8E,EAAM,EAAE,CAAA,CAAGzB,CAAG,CACnD,CAAC,CACH,CAAA,CA0FE,kBAAA,CAxFmC,CAACnE,GAAAA,CAAO4F,GAAAA,GAAU,CACrDC,CAAAA,CAAW7F,GAAAA,CAAO4F,IAAM,EAAA,CAAI,gBAAgB,EAC5C,IAAMpG,CAAAA,CAAKoG,IAAM,MAAA,CAAA,CACb,OAAOpG,GAAO,QAAA,EAAYA,CAAAA,CAAG,MAAK,GAAM,EAAA,GAC1CgB,IACE,eAAA,CACA,+DAAA,CACA,iEACF,CAAA,CACF,IAAM4E,IAAKC,CAAAA,CAAQrF,GAAAA,CAAOR,CAAE,CAAA,CAe5B,GAdI4F,IAAG,IAAA,GAAS,gBAAA,EACd5E,GAAAA,CACE,eAAA,CACA,SAAShB,CAAE,CAAA,OAAA,EAAU4F,IAAG,IAAI,CAAA,sBAAA,CAAA,CAC5B,iDACA,CAAE,KAAA,CAAO,CAAC5F,CAAE,CAAE,CAChB,CAAA,CAAA,CACE4F,GAAAA,CAAG,SAAW,MAAA,EAAUA,GAAAA,CAAG,SAAW,SAAA,GACxC5E,GAAAA,CACE,qBACA,CAAA,QAAA,EAAWhB,CAAE,gBAAgB4F,GAAAA,CAAG,MAAA,GAAW,OAAS,UAAA,CAAa,UAAU,GAC3E,4BAAA,CACA,CAAE,MAAO,CAAC5F,CAAE,CAAE,CAChB,CAAA,CACE4F,IAAG,MAAA,GAAW,gBAAA,CAAkB,CAClC,IAAMvF,CAAAA,CAAIG,GAAAA,CAAM,OAAA,CAAQ,KAAME,CAAAA,EAAMA,CAAAA,CAAE,OAASV,CAAE,CAAA,CACjDgB,IACE,OAAA,CACA,CAAA,QAAA,EAAWhB,CAAE,CAAA,gCAAA,EAAmCK,CAAAA,CAAI,KAAKA,CAAAA,CAAE,EAAE,IAAM,EAAE,CAAA,CAAA,CACrE,UAAUA,CAAAA,EAAG,EAAA,EAAM,cAAc,CAAA,eAAA,CAAA,CACjC,CAAE,MAAO,CAACL,CAAE,CAAE,CAChB,EACF,CACA,IAAM4I,CAAAA,CAAWxC,IAAM,QAAA,CACnBwC,CAAAA,GAAa,WAAaA,CAAAA,GAAa,QAAA,EACzC5H,IACE,eAAA,CACA,2DAAA,CACA,4BACF,CAAA,CACF,IAAM2E,CAAAA,CAAO,OAAOS,IAAM,IAAA,EAAY,QAAA,CAAWA,IAAM,IAAA,CAAU,EAAA,CAC3DiC,EAAY9H,CAAAA,CAASC,GAAK,EAAE,aAAA,CAAc,SAAA,CAChD,QAAWa,CAAAA,IAAKgH,CAAAA,CAEZhH,IAAM,OAAA,EACN+E,GAAAA,CAAM,KAAO,OAAA,EACbyC,CAAAA,CAAMrI,IAAO4F,GAAAA,CAAM,EAAA,CAAI/E,EAAE,UAAwB,CAAA,EAGnDL,IACE,YAAA,CACA,CAAA,CAAA,EAAIoF,IAAM,EAAE,CAAA,oBAAA,EAAuB/E,EAAE,UAAU,CAAA,4BAAA,CAAA,CAC/C,0BAA0ByH,CAAAA,CAAUtI,GAAAA,CAAOa,EAAE,UAAwB,CAAA,CAClE,IAAK0E,CAAAA,EAAM,CAAA,EAAA,EAAKA,CAAAA,CAAE,EAAE,EAAE,CAAA,CACtB,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA,CACX,CAAE,IAAA,CAAM,gBAAA,CAAkB,MAAO,CAAC/F,CAAE,CAAE,CACxC,CAAA,CAEF,IAAM+I,GAAAA,CAAaV,CAAAA,CAAU,SAAS,OAAO,CAAA,EAAKjC,IAAM,EAAA,GAAO,OAAA,CAC/D,OAAO4B,CAAAA,CAAIxH,GAAAA,CAAO,8BAA+B4F,GAAAA,CAAO,CAACxF,EAAG+D,CAAAA,GAAQ,CAClE,GAAIoE,GAAAA,CAAY,CACdnI,EAAI8H,GAAAA,CACF9H,CAAAA,CACA,CACE,IAAA,CAAM,UAAA,CACN,KAAMZ,CAAAA,CACN,QAAA,CAAU,WAAWA,CAAE,CAAA,GAAA,EAAM4F,IAAG,KAAK,CAAA,cAAA,EAAiBQ,IAAM,EAAE,CAAA,aAAA,EAAgBwC,CAAQ,CAAA,EAAGjD,CAAAA,CAAO,KAAKA,CAAI,CAAA,CAAA,CAAK,EAAE,CAAA,+BAAA,CAClH,CAAA,CACAhB,CACF,CAAA,CACA,IAAMgE,EAAU/H,CAAAA,CAAE,OAAA,CAAQA,EAAE,OAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAAG,EAAA,CACjD,OAAOuE,CAAAA,CACLvE,CAAAA,CACA,qBACAwF,GAAAA,CAAM,EAAA,CACN,CAAE,MAAA,CAAQpG,CAAAA,CAAI,SAAA4I,CAAAA,CAAU,IAAA,CAAAjD,EAAM,OAAA,CAAAgD,CAAQ,EACtChE,CACF,CACF,CACA,OAAOiE,IAAa,SAAA,CAChBnD,CAAAA,CAAc7E,EAAGZ,CAAAA,CAAIoG,GAAAA,CAAM,GAAIT,CAAAA,CAAMhB,CAAG,EACxCsB,CAAAA,CAAarF,CAAAA,CAAGZ,EAAIoG,GAAAA,CAAM,EAAA,CAAIT,EAAMhB,CAAG,CAC7C,CAAC,CACH,CAAA,CAME,mBAAoBuB,EAAAA,CAAmBC,CAAW,CACpD,CACF,CAGO,SAAS6C,EAAAA,CACdxI,CAAAA,CACAyI,EACAL,CAAAA,CACAtI,CAAAA,CACAqF,EACAhB,GAAAA,CACe,CACf,GAAIsE,CAAAA,CAAM,IAAA,GAAS,QAAUA,CAAAA,CAAM,IAAA,GAAS,QAAaA,CAAAA,CAAM,IAAA,GAAS,MAAA,CAAW,CACjF,IAAM3H,CAAAA,CAAQyB,CAAAA,CAASvC,CAAK,CAAA,CAAE,IAAA,CAAMH,GAAMA,CAAAA,CAAE,IAAA,CAAK,KAAO4I,CAAAA,CAAM,IAAI,EAClE,GAAI,CAAC3H,EAAO,OAAOd,CAAAA,CAEfF,IAAO,OAAA,EACTU,GAAAA,CACE,aACA,CAAA,CAAA,EAAIV,CAAE,gCAAgC2I,CAAAA,CAAM,IAAI,MAAMA,CAAAA,CAAM,EAAE,uBAC9D,CAAA,OAAA,EAAUA,CAAAA,CAAM,EAAE,CAAA,SAAA,CAAA,CAClB,CAAE,KAAM,MAAO,CACjB,EACF,IAAIC,CAAAA,CACJ,QAAS3H,CAAAA,CAAIf,CAAAA,CAAM,MAAA,CAAO,MAAA,CAAS,EAAGe,CAAAA,EAAK,CAAA,CAAGA,IAAK,CACjD,IAAM0C,EAAIzD,CAAAA,CAAM,MAAA,CAAOe,CAAC,CAAA,CACxB,GACE0C,EAAE,IAAA,GAAS,oBAAA,EACVA,EAAE,OAAA,CAAgC,OAAA,GAAYgF,EAAM,EAAA,CACrD,CACAC,EAAWjF,CAAAA,CAAE,EAAA,CACb,KACF,CACF,CACA,IAAMa,CAAAA,CAAaoE,CAAAA,GAAa,QAAaA,CAAAA,GAAa5I,CAAAA,CAAK,CAAC4I,CAAAA,CAAU5I,CAAE,EAAI,CAACA,CAAE,EACnF,OAAIsI,CAAAA,GAAa,UAAkB/D,EAAAA,CAAcrE,CAAAA,CAAOc,CAAAA,CAAM,EAAA,CAAIwD,EAAYH,GAAG,CAAA,CAC1EQ,EACL3E,CAAAA,CACA,mBAAA,CACAF,EACA,CAAE,KAAA,CAAOgB,EAAM,EAAA,CAAI,IAAA,CAAM2H,EAAM,IAAA,CAAM,IAAA,CAAAtD,CAAK,CAAA,CAC1ChB,GACF,CACF,CACA,GACEsE,EAAM,IAAA,GAAS,UAAA,EACfA,EAAM,IAAA,GAAS,MAAA,EACf,OAAO,MAAA,CAAOzI,CAAAA,CAAM,MAAOyI,CAAAA,CAAM,IAAI,EACrC,CACA,IAAM3F,EAAO9C,CAAAA,CAAM,KAAA,CAAMyI,EAAM,IAAI,CAAA,CACnC,OAAI3F,CAAAA,CAAK,IAAA,GAAS,gBAAA,CAAyB9C,CAAAA,EACvCF,IAAO,OAAA,EACTU,GAAAA,CACE,aACA,CAAA,CAAA,EAAIV,CAAE,4BAA4BgD,CAAAA,CAAK,EAAE,MAAM2F,CAAAA,CAAM,EAAE,mCACvD,CAAA,OAAA,EAAUA,CAAAA,CAAM,EAAE,CAAA,SAAA,CAAA,CAClB,CAAE,KAAM,gBAAA,CAAkB,KAAA,CAAO,CAAC3F,CAAAA,CAAK,EAAE,CAAE,CAC7C,CAAA,CACKsF,IAAa,SAAA,CAChBnD,CAAAA,CAAcjF,EAAO8C,CAAAA,CAAK,EAAA,CAAIhD,EAAIqF,CAAAA,CAAMhB,GAAG,EAC3CsB,CAAAA,CAAazF,CAAAA,CAAO8C,EAAK,EAAA,CAAIhD,CAAAA,CAAIqF,EAAMhB,GAAG,CAAA,CAChD,CACA,OAAOnE,CACT,CCpVO,SAAS2I,GAAiB3I,CAAAA,CAAwC,CACvE,IAAM0B,CAAAA,CAAS3B,CAAAA,CAASC,CAAK,CAAA,CAAE,MAAA,CAAO,IAAKH,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CAC/C+I,CAAAA,CAAO,IAAM,MAAA,CAAO,WAAA,CAAYlH,EAAO,GAAA,CAAK7B,CAAAA,EAAM,CAACA,CAAAA,CAAG,CAAC,CAAC,CAAC,CAAA,CACzDgJ,EAAQD,CAAAA,EAAK,CACbE,EAAOF,CAAAA,EAAK,CACZG,EAAUH,CAAAA,EAAK,CACfI,EAAQJ,CAAAA,EAAK,CACbK,EAAUL,CAAAA,EAAK,CACf/F,CAAAA,CAAU,IAAI,IACdqG,CAAAA,CAAS,IAAI,IACbC,CAAAA,CAAS,IAAI,IACfC,CAAAA,CAAiB,CAAA,CACjBC,EAAW,CAAA,CACXC,CAAAA,CAAW,EACXC,CAAAA,CAAe,CAAA,CACfC,EAAiB,CAAA,CACfC,CAAAA,CAAWjK,GAAe,CAC9B,IAAM0C,EAAIgH,CAAAA,CAAO,GAAA,CAAI1J,CAAE,CAAA,CACjBK,CAAAA,CAAIgD,EAAQ,GAAA,CAAIrD,CAAE,EACxB,OAAO0C,CAAAA,GAAM,YAAcA,CAAAA,GAAM,gBAAA,EAAoBrC,IAAM,MAAA,EAAaA,CAAAA,IAAKgJ,CAC/E,CAAA,CACA,IAAA,IAAWa,KAAM1J,CAAAA,CAAM,MAAA,CAAQ,CAC7B,IAAMH,EAAK6J,CAAAA,CAAG,OAAA,EAAW,EAAC,CAC1B,OAAQA,EAAG,IAAA,EACT,KAAK,YAAA,CAAc,CACjB,IAAMpD,CAAAA,CAAIzG,CAAAA,CACJiB,EAAQwF,CAAAA,CAAE,KAAA,GAAUA,EAAE,MAAA,GAAW,IAAA,CAAOzD,EAAQ,GAAA,CAAIyD,CAAAA,CAAE,MAAM,CAAA,CAAI,MAAA,CAAA,CACtEzD,EAAQ,GAAA,CAAIyD,CAAAA,CAAE,GAAIxF,CAAK,CAAA,CACvBoI,EAAO,GAAA,CAAI5C,CAAAA,CAAE,GAAIA,CAAAA,CAAE,IAAI,EACvB6C,CAAAA,CAAO,GAAA,CAAI7C,EAAE,EAAA,CAAI,MAAM,CAAA,CACnBA,CAAAA,CAAE,OAAS,gBAAA,GAAkB8C,CAAAA,EAAkB,GAC/CK,CAAAA,CAAQnD,CAAAA,CAAE,EAAE,CAAA,GACduC,CAAAA,CAAM/H,CAAM,CAAA,EAAM,CAAA,CACdwF,EAAE,IAAA,GAAS,KAAA,GAAO2C,EAAQnI,CAAM,CAAA,EAAM,IAE5C,KACF,CACA,KAAK,iBAAA,CAAmB,CACtB,IAAMtB,CAAAA,CAAKK,CAAAA,CAAE,GACPoC,CAAAA,CAAMpC,CAAAA,CAAE,GAA6B,MAAA,CACrC8J,EAAAA,CAAMR,EAAO,GAAA,CAAI3J,CAAE,EAEzB,GADA2J,CAAAA,CAAO,IAAI3J,CAAAA,CAAIyC,CAAE,EACb,CAACwH,CAAAA,CAAQjK,CAAE,CAAA,CAAG,MAClB,IAAMsB,EAAAA,CAAQ+B,EAAQ,GAAA,CAAIrD,CAAE,EACxByC,CAAAA,GAAO,MAAA,EAAU0H,KAAQ,MAAA,GAAQb,CAAAA,CAAKhI,EAAK,CAAA,EAAM,CAAA,CAAA,CACjDmB,IAAO,SAAA,GACT4G,CAAAA,CAAM/H,EAAK,CAAA,EAAM,CAAA,CACb6I,KAAQ,MAAA,GAAQb,CAAAA,CAAKhI,EAAK,CAAA,EAAM,CAAA,CAAA,CAAA,CAEtC,KACF,CACA,KAAK,iBAAkB,CACrB,IAAMA,EAAQ+B,CAAAA,CAAQ,GAAA,CAAIhD,EAAE,EAAe,CAAA,CACvCiB,IAAU,MAAA,EAAaA,CAAAA,IAASkI,IAAOA,CAAAA,CAAMlI,CAAK,CAAA,EAAOjB,CAAAA,CAAE,QAAwB,CAAA,CAAA,CACvF,KACF,CACA,KAAK,cAAA,CAAgB,CACnB,IAAMiB,CAAAA,CAAQjB,EAAE,KAAA,CACZiB,CAAAA,IAASiI,IACXA,CAAAA,CAAQjI,CAAK,GAAMjB,CAAAA,CAAE,MAAA,EAAqC,EAAC,EAAG,MAAA,EAAU,GAC1E,KACF,CACA,KAAK,gBAAA,CAAkB,CACjBA,EAAE,QAAA,GAAgB,SAAA,EACpBwJ,GAAY,CAAA,CACZE,CAAAA,EAAiB1J,EAAE,MAAA,EAAwB,CAAA,CAC3C2J,IAAoB3J,CAAAA,CAAE,QAAA,EAA4B,EAAC,EAAG,MAAA,EACjDyJ,GAAY,CAAA,CACnB,KACF,CAGF,CACF,CACA,IAAMM,CAAAA,CAAahB,CAAAA,GACbiB,CAAAA,CAAWjB,CAAAA,GACjB,IAAA,IAAWpG,CAAAA,IAAMd,EAAQ,CACvB,IAAMoI,EAAIjB,CAAAA,CAAMrG,CAAE,GAAK,CAAA,CACvBoH,CAAAA,CAAWpH,CAAE,CAAA,CAAIsH,CAAAA,GAAM,EAAI,CAAA,CAAA,CAAMhB,CAAAA,CAAKtG,CAAE,CAAA,EAAK,CAAA,EAAKsH,EAAK,GAAA,CACvDD,CAAAA,CAASrH,CAAE,CAAA,CAAIwG,CAAAA,CAAMxG,CAAE,CAAA,CAAKuG,CAAAA,CAAQvG,CAAE,EACxC,CACA,GAAM,CAAE,MAAA,CAAAuH,CAAAA,CAAQ,KAAA,CAAOC,EAAS,CAAA,CAAItD,CAAAA,CAAmB1G,CAAK,CAAA,CAAE,QAAA,CACxDiK,GAAUZ,CAAAA,CAAWC,CAAAA,CAC3B,OAAO,CACL,eAAA,CAAiBM,EACjB,aAAA,CAAeb,CAAAA,CACf,YAAaC,CAAAA,CACb,gBAAA,CAAkBa,EAClB,mBAAA,CAAqBG,EAAAA,GAAa,EAAI,CAAA,CAAID,CAAAA,CAASC,GACnD,kBAAA,CAAoBD,CAAAA,CACpB,kBAAmBC,EAAAA,CACnB,eAAA,CAAiBf,EACjB,cAAA,CAAAG,CAAAA,CACA,gBAAiBC,CAAAA,CACjB,eAAA,CAAiBC,EACjB,kBAAA,CAAoBW,EAAAA,GAAY,EAAI,CAAA,CAAIZ,CAAAA,CAAWY,GACnD,YAAA,CAAAV,CAAAA,CACA,cAAA,CAAAC,CACF,CACF,CCvHO,SAASU,GAAeC,CAAAA,CAAiC,CAC9D,IAAMC,CAAAA,CAAQD,CAAAA,CAAO,OAAO,GAAA,CAAKtK,CAAAA,EAAMA,EAAE,IAAA,CAAK,EAAE,EAChD,OAAO,CACL,CACE,EAAA,CAAI,iBAAA,CACJ,KAAM,iBAAA,CACN,SAAA,CAAW,QACX,YAAA,CAAc,CAAC,aAAc,gBAAA,CAAkB,cAAA,CAAgB,UAAU,CAAA,CACzE,UAAA,CAAY,CAAC,GAAGuK,CAAAA,CAAO3K,EAAW,CAAA,CAClC,MAAA,CAAQ,CAAC,YAAA,CAAc,cAAA,CAAgB,iBAAiB,CAAA,CACxD,OAAA,CAAS,CAAC,gBAAA,CAAkB,YAAa,kBAAkB,CAAA,CAC3D,OAAQ,CACN,iCAAA,CACA,0DACF,CACF,CAAA,CACA,CACE,EAAA,CAAI,WAAA,CACJ,KAAM,WAAA,CACN,SAAA,CAAW,QACX,YAAA,CAAc,CAAC,SAAS,CAAA,CACxB,UAAA,CAAY,EAAC,CACb,MAAA,CAAQ,CAAC,YAAA,CAAc,gBAAA,CAAkB,OAAO,CAAA,CAChD,OAAA,CAAS,CAAC,MAAA,CAAQ,eAAA,CAAiB,aAAa,CAAA,CAChD,MAAA,CAAQ,CACN,+DAAA,CACA,8BACF,CACF,CAAA,CACA,CACE,GAAI,kBAAA,CACJ,IAAA,CAAM,mBACN,SAAA,CAAW,QAAA,CACX,aAAc,CAAC,mBAAA,CAAqB,SAAS,CAAA,CAC7C,UAAA,CAAY,EAAC,CACb,MAAA,CAAQ,CAAC,mBAAmB,CAAA,CAC5B,QAAS,CAAC,KAAA,CAAO,qBAAqB,CAAA,CACtC,MAAA,CAAQ,CACN,4BAAA,CACA,6DACF,CACF,CAAA,CACA,CACE,GAAI,WAAA,CACJ,IAAA,CAAM,YACN,SAAA,CAAW,QAAA,CACX,aAAc,CAAC,SAAS,EACxB,UAAA,CAAY,GACZ,MAAA,CAAQ,CAAC,KAAK,CAAA,CACd,OAAA,CAAS,CAAC,YAAA,CAAc,gBAAgB,CAAA,CACxC,MAAA,CAAQ,CAAC,oDAAA,CAAsD,kBAAkB,CACnF,CAAA,CACA,CACE,GAAI,IAAA,CACJ,IAAA,CAAM,KACN,SAAA,CAAW,OAAA,CACX,aAAc,CAAC,QAAA,CAAU,QAAQ,CAAA,CACjC,UAAA,CAAY,EAAC,CACb,MAAA,CAAQ,CAAC,KAAA,CAAO,YAAA,CAAc,eAAe,CAAA,CAC7C,OAAA,CAAS,CAAC,aAAA,CAAe,cAAc,EACvC,MAAA,CAAQ,CAAC,0CAA2C,4BAA4B,CAClF,EACA,CACE,EAAA,CAAI,kBACJ,IAAA,CAAM,iBAAA,CACN,UAAW,OAAA,CACX,YAAA,CAAc,CAAC,SAAS,EACxB,UAAA,CAAY,GACZ,MAAA,CAAQ,CAAC,gBAAiB,aAAa,CAAA,CACvC,QAAS,CAAC,eAAA,CAAiB,mBAAmB,CAAA,CAC9C,MAAA,CAAQ,CAAC,iDAAiD,CAC5D,CACF,CACF,CC/DA,IAAMkB,CAAAA,CAAI,CAAC0J,EAAcC,CAAAA,CAAiBC,CAAAA,CAAazH,IACrDA,CAAAA,CACI,CAAE,KAAAuH,CAAAA,CAAM,QAAA,CAAU,QAAS,IAAA,CAAAvH,CAAAA,CAAM,QAAAwH,CAAAA,CAAS,GAAA,CAAAC,CAAI,CAAA,CAC9C,CAAE,KAAAF,CAAAA,CAAM,QAAA,CAAU,OAAA,CAAS,OAAA,CAAAC,EAAS,GAAA,CAAAC,CAAI,EACxCC,CAAAA,CAAalE,CAAAA,EAChBA,EAAE,OAAA,EAAW,GACVrG,CAAAA,CAASC,CAAAA,EACb,OAAOA,CAAAA,EAAM,QAAA,EAAYA,IAAM,IAAA,EAAQ,CAAC,MAAM,OAAA,CAAQA,CAAC,EACnDuK,CAAAA,CAAYnE,CAAAA,EAAkC,CAClD,IAAMzG,CAAAA,CAAI2K,EAAUlE,CAAC,CAAA,CAAE,MACvB,OAAO,OAAOzG,GAAM,QAAA,CAAWA,CAAAA,CAAI,MACrC,CAAA,CACM6K,CAAAA,CAAY,CAACtK,CAAAA,CAAkBZ,CAAAA,GACnC+C,EAASnC,CAAC,CAAA,CAAE,IAAA,CAAMP,CAAAA,EAAMA,EAAE,EAAA,GAAOL,CAAE,EAC/BmL,EAAAA,CAAYvK,CAAAA,EAChBmC,EAASnC,CAAC,CAAA,CACP,IAAKP,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,IAAI,CAAA,CACR+K,CAAAA,CAAW,CAACxK,CAAAA,CAAkBZ,CAAAA,GAClC,OAAOA,CAAAA,EAAO,QAAA,EAAY,OAAO,MAAA,CAAOY,CAAAA,CAAE,MAAOZ,CAAE,CAAA,CAAIY,EAAE,KAAA,CAAMZ,CAAE,EAAI,MAAA,CAGvE,SAASqL,GAAWzK,CAAAA,CAAkB0C,CAAAA,CAAmC,CACvE,GAAIA,CAAAA,CAAK,QAAU,MAAA,CAAW,OAAOA,CAAAA,CAAK,KAAA,CAC1C,IAAMgI,CAAAA,CAASF,CAAAA,CAASxK,EAAG0C,CAAAA,CAAK,MAAM,EACtC,OAAOgI,CAAAA,CAASjI,EAAQzC,CAAAA,CAAG0K,CAAM,EAAI,MACvC,CACA,IAAMC,EAAAA,CAAYjI,CAAAA,EAAkBA,EAAK,IAAA,GAAS,gBAAA,EAAoBA,EAAK,IAAA,GAAS,UAAA,CAE9EkI,GAAY,CAAClI,CAAAA,CAAchC,IAC/B,CAAA,qEAAA,EAAwEgC,CAAI,4CAA4ChC,CAAK,CAAA,mDAAA,CAAA,CAE/H,SAASmK,EAAAA,CAAS7K,CAAAA,CAAkBkG,EAAW,CAC7C,IAAMxD,EAAO8H,CAAAA,CAASxK,CAAAA,CAAGoK,EAAUlE,CAAC,CAAA,CAAE,MAAS,CAAA,CAC/C,OAAOxD,CAAAA,EAAQA,CAAAA,CAAK,OAAS,gBAAA,CAAmBA,CAAAA,CAAO,MACzD,CAGA,SAASoI,GAAY9K,CAAAA,CAAkBZ,CAAAA,CAAY8F,EAA0B,CAC3E,IAAM+E,EAAO,8BAAA,CACPE,CAAAA,CAAM,aAAa/K,CAAE,CAAA,kGAAA,CAAA,CAC3B,GAAI8F,CAAAA,GAAO,MAAA,CACT,OAAOvF,CAAAA,CAASK,CAAC,EAAE,aAAA,CAAc,sBAAA,CAC7B,CAACO,CAAAA,CAAE0J,CAAAA,CAAM,WAAW7K,CAAE,CAAA,wBAAA,CAAA,CAA4B+K,EAAK/K,CAAE,CAAC,EAC1D,EAAC,CAEP,IAAMiB,CAAAA,CAAmB,EAAC,CACpB,CAAA,CAAIR,EAAMqF,CAAE,CAAA,CAAIA,EAAK,EAAC,CAC5B,QAAI,OAAO,CAAA,CAAE,SAAe,QAAA,EAAY,CAAA,CAAE,QAAW,IAAA,EAAK,GAAM,KAC9D7E,CAAAA,CAAI,IAAA,CAAKE,EAAE0J,CAAAA,CAAM,CAAA,QAAA,EAAW7K,CAAE,CAAA,iCAAA,CAAA,CAAqC+K,CAAAA,CAAK/K,CAAE,CAAC,CAAA,CAAA,CACzE,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAE,MAAS,CAAA,EAAK,CAAC,CAAA,CAAE,MAAA,CAAU,MAAOU,CAAAA,EAAM,OAAOA,GAAM,QAAQ,CAAA,GAChFO,EAAI,IAAA,CACFE,CAAAA,CAAE0J,EAAM,CAAA,QAAA,EAAW7K,CAAE,0DAA2D+K,CAAAA,CAAK/K,CAAE,CACzF,CAAA,CAAA,CACE,OAAO,EAAE,MAAA,EAAc,QAAA,EAAY,CAAC,MAAA,CAAO,QAAA,CAAS,EAAE,MAAS,CAAA,EAAK,EAAE,MAAA,CAAY,CAAA,GACpFiB,EAAI,IAAA,CACFE,CAAAA,CAAE0J,EAAM,CAAA,QAAA,EAAW7K,CAAE,wDAAyD+K,CAAAA,CAAK/K,CAAE,CACvF,CAAA,CACKiB,CACT,CAEO,SAAS0K,EAAAA,EAAyB,CAyVvC,OAAO,CAxVkB,CACvB,EAAA,CAAI,kBAAA,CACJ,SAAU,OAAA,CACV,KAAA,CAAM/K,EAAGkG,CAAAA,CAAG,CACV,IAAM7F,CAAAA,CAAmB,EAAC,CAC1B,GAAI6F,EAAE,IAAA,GAAS,kBAAA,CAAoB,CACjC,IAAM9G,CAAAA,CAAKiL,EAASnE,CAAC,CAAA,CACfzG,EAAIL,CAAAA,GAAO,MAAA,CAAY,OAAYkL,CAAAA,CAAUtK,CAAAA,CAAGZ,CAAE,CAAA,CACxD,GAAI,CAACK,CAAAA,CAAG,OAAO,EAAC,CACZA,CAAAA,CAAE,SAAW,MAAA,EACfY,CAAAA,CAAI,KACFE,CAAAA,CACE,kBAAA,CACA,UAAUd,CAAAA,CAAE,EAAE,oBACd,CAAA,YAAA,EAAeA,CAAAA,CAAE,EAAE,CAAA,uBAAA,CACrB,CACF,EACEA,CAAAA,CAAE,MAAA,GAAW,WAAA,EACfY,CAAAA,CAAI,KACFE,CAAAA,CACE,kBAAA,CACA,UAAUd,CAAAA,CAAE,EAAE,iBACd,2DACF,CACF,EACF,IAAMmF,CAAAA,CAAO7B,EAAU/C,CAAC,CAAA,CACpB4E,GAAQA,CAAAA,CAAK,EAAA,GAAOnF,EAAE,EAAA,EACxBY,CAAAA,CAAI,KACFE,CAAAA,CACE,kBAAA,CACA,UAAUqE,CAAAA,CAAK,EAAE,kBACjB,CAAA,2BAAA,EAA8BA,CAAAA,CAAK,EAAE,CAAA,mBAAA,EAAsBnF,CAAAA,CAAE,EAAE,CAAA,CAAA,CACjE,CACF,EACJ,CAAA,KAAA,GAAWyG,CAAAA,CAAE,OAAS,UAAA,CAAY,CAChC,IAAMxD,CAAAA,CAAO0H,CAAAA,CAAUlE,CAAC,CAAA,CAAE,KAC1B,GAAI,CAACrG,EAAM6C,CAAI,CAAA,EAAK,CAACiI,EAAAA,CAASjI,CAAI,EAAG,OAAO,GAC5C,IAAMhC,CAAAA,CAAQ+J,GAAWzK,CAAAA,CAAG0C,CAAI,EAC5BhC,CAAAA,GAAU,MAAA,CACZL,EAAI,IAAA,CACFE,CAAAA,CACE,mBACA,CAAA,MAAA,EAASmC,CAAAA,CAAK,EAAE,CAAA,qBAAA,CAAA,CAChB,CAAA,qBAAA,EAAwB6H,GAASvK,CAAC,CAAC,GACnC0C,CAAAA,CAAK,EACP,CACF,CAAA,CACQ4H,CAAAA,CAAUtK,EAAGU,CAAK,CAAA,EAC1BL,EAAI,IAAA,CACFE,CAAAA,CACE,kBAAA,CACA,CAAA,MAAA,EAASmC,EAAK,EAAE,CAAA,uBAAA,EAA0BhC,CAAK,CAAA,CAAA,CAAA,CAC/C,CAAA,YAAA,EAAe6J,GAASvK,CAAC,CAAC,GAC1B0C,CAAAA,CAAK,EACP,CACF,EACJ,CAAA,KAAA,GAAWwD,EAAE,IAAA,GAAS,WAAA,CAAa,CACjC,IAAM9G,CAAAA,CAAKgL,EAAUlE,CAAC,CAAA,CAAE,GAClB8E,CAAAA,CAAQZ,CAAAA,CAAUlE,CAAC,CAAA,CAAE,KAAA,CACrBxD,EAAO8H,CAAAA,CAASxK,CAAAA,CAAGZ,CAAE,CAAA,CAC3B,GAAI,CAACsD,CAAAA,EAAQ,CAAC7C,EAAMmL,CAAK,CAAA,EAAKA,EAAM,KAAA,GAAa,MAAA,EAAaA,CAAAA,CAAM,KAAA,GAAatI,EAAK,KAAA,CACpF,OAAO,EAAC,CACVrC,CAAAA,CAAI,KACFE,CAAAA,CACE,kBAAA,CACA,SAASmC,CAAAA,CAAK,EAAE,6BAA6BA,CAAAA,CAAK,KAAA,EAAS,QAAQ,CAAA,MAAA,EAAS,MAAA,CAAOsI,EAAM,KAAQ,CAAC,IAClG,CAAA,MAAA,EAAStI,CAAAA,CAAK,EAAE,CAAA,+BAAA,EAAkC,MAAA,CAAOsI,EAAM,KAAQ,CAAC,IACxEtI,CAAAA,CAAK,EACP,CACF,EACF,CACA,OAAOrC,CACT,CACF,EAEyB,CACvB,EAAA,CAAI,yBACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAML,CAAAA,CAAGkG,EAAG,CACV,GAAIA,EAAE,IAAA,GAAS,kBAAA,CAAoB,OAAO,EAAC,CAC3C,IAAM9G,CAAAA,CAAKiL,CAAAA,CAASnE,CAAC,CAAA,CACf5E,CAAAA,CAASa,EAASnC,CAAC,CAAA,CACnBuC,EAAMnD,CAAAA,GAAO,MAAA,CAAY,GAAKkC,CAAAA,CAAO,SAAA,CAAW7B,GAAMA,CAAAA,CAAE,EAAA,GAAOL,CAAE,CAAA,CACvE,GAAImD,EAAM,CAAA,CAAG,OAAO,EAAC,CACrB,IAAM8B,EAAU/C,CAAAA,CACb,KAAA,CAAM,EAAGiB,CAAG,CAAA,CACZ,OAAQ9C,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,WAAW,EACtC,GAAA,CAAKA,CAAAA,EAAMA,EAAE,EAAE,CAAA,CAClB,OAAI4E,CAAAA,CAAQ,MAAA,GAAW,EAAU,EAAC,CAC3B,CACL9D,CAAAA,CACE,wBAAA,CACA,YAAY8D,CAAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,SAAA,EAAYjF,CAAE,CAAA,mBAAA,CAAA,CAC5C,CAAA,qDAAA,EAAwDiF,EAAQ,CAAC,CAAC,GACpE,CACF,CACF,CACF,CAAA,CAEwB,CACtB,GAAI,oBAAA,CACJ,QAAA,CAAU,QACV,KAAA,CAAMrE,CAAAA,CAAGkG,EAAG,CACV,IAAMqB,EAAW7G,CAAAA,EAAAA,CACdV,CAAAA,CAAE,WAAa,EAAC,EAAG,OAAQkB,CAAAA,EAAMA,CAAAA,CAAE,QAAUR,CAAK,CAAA,CAAE,QAAU,CAAA,CACjE,GAAIwF,EAAE,IAAA,GAAS,WAAA,CAAa,CAC1B,IAAMxD,CAAAA,CAAO8H,EAASxK,CAAAA,CAAGoK,CAAAA,CAAUlE,CAAC,CAAA,CAAE,EAAK,EAC3C,GAAI,CAACxD,EAAM,OAAO,GAClB,IAAMhC,CAAAA,CAAQ+B,EAAQzC,CAAAA,CAAG0C,CAAI,EAC7B,OAAIhC,CAAAA,GAAU,QAAa4J,CAAAA,CAAUtK,CAAAA,CAAGU,CAAK,CAAA,EAAG,MAAA,GAAW,YAAoB,EAAC,CACzE,CACLH,CAAAA,CACE,qBACA,CAAA,MAAA,EAASmC,CAAAA,CAAK,EAAE,CAAA,oBAAA,EAAuBhC,CAAK,oBAAoB6G,CAAAA,CAAQ7G,CAAK,CAAC,CAAA,CAAA,CAAA,CAC9EkK,EAAAA,CAAUlI,EAAK,EAAA,CAAIhC,CAAK,EACxBgC,CAAAA,CAAK,EACP,CACF,CACF,CACA,GAAIwD,CAAAA,CAAE,IAAA,GAAS,WAAY,CACzB,IAAMxD,EAAO0H,CAAAA,CAAUlE,CAAC,EAAE,IAAA,CAC1B,GAAI,CAACrG,CAAAA,CAAM6C,CAAI,GAAK,CAACiI,EAAAA,CAASjI,CAAI,CAAA,CAAG,OAAO,EAAC,CAC7C,IAAMhC,CAAAA,CAAQ+J,EAAAA,CAAWzK,EAAG0C,CAAI,CAAA,CAChC,OAAIhC,CAAAA,GAAU,MAAA,EAAa4J,EAAUtK,CAAAA,CAAGU,CAAK,GAAG,MAAA,GAAW,WAAA,CAAoB,EAAC,CACzE,CACLH,EACE,oBAAA,CACA,CAAA,YAAA,EAAemC,EAAK,EAAE,CAAA,sBAAA,EAAyBhC,CAAK,CAAA,IAAA,EAAO6G,CAAAA,CAAQ7G,CAAK,CAAC,CAAA,CAAA,CAAA,CACzEkK,GAAUlI,CAAAA,CAAK,EAAA,CAAIhC,CAAK,CAAA,CACxBgC,CAAAA,CAAK,EACP,CACF,CACF,CACA,OAAO,EACT,CACF,CAAA,CAEqB,CACnB,EAAA,CAAI,8BAAA,CACJ,QAAA,CAAU,OAAA,CACV,MAAM1C,CAAAA,CAAGkG,CAAAA,CAAG,CACV,GAAIA,CAAAA,CAAE,OAAS,UAAA,CAAY,CACzB,IAAMxD,CAAAA,CAAO0H,CAAAA,CAAUlE,CAAC,CAAA,CAAE,IAAA,CAC1B,OAAI,CAACrG,CAAAA,CAAM6C,CAAI,CAAA,EAAKA,CAAAA,CAAK,OAAS,gBAAA,CAAyB,GACpDoI,EAAAA,CAAY9K,CAAAA,CAAG,OAAO0C,CAAAA,CAAK,EAAE,EAAGA,CAAAA,CAAK,cAAc,CAC5D,CACA,GAAIwD,EAAE,IAAA,GAAS,WAAA,CAAa,CAC1B,IAAM8E,CAAAA,CAAQZ,EAAUlE,CAAC,CAAA,CAAE,KAAA,CACrBlB,CAAAA,CAAKwF,EAASxK,CAAAA,CAAGoK,CAAAA,CAAUlE,CAAC,CAAA,CAAE,EAAK,EACzC,OAAI,CAAClB,GAAMA,CAAAA,CAAG,IAAA,GAAS,kBAAoB,CAACnF,CAAAA,CAAMmL,CAAK,CAAA,EAAK,EAAE,mBAAoBA,CAAAA,CAAAA,CACzE,GACFF,EAAAA,CAAY9K,CAAAA,CAAGgF,EAAG,EAAA,CAAIgG,CAAAA,CAAM,cAAiB,CACtD,CACA,GAAI9E,CAAAA,CAAE,IAAA,GAAS,8BAA+B,OAAO,GACrD,IAAMlB,CAAAA,CAAK6F,GAAS7K,CAAAA,CAAGkG,CAAC,EACxB,GAAI,CAAClB,CAAAA,CAAI,OAAO,EAAC,CACjB,IAAM3E,EAAMyK,EAAAA,CAAY9K,CAAAA,CAAGgF,EAAG,EAAA,CAAIA,CAAAA,CAAG,cAAc,CAAA,CACnD,GAAI3E,EAAI,MAAA,EAAU2E,CAAAA,CAAG,iBAAmB,MAAA,CAAW,OAAO3E,EAC1D,IAAM4K,CAAAA,CAAUb,EAAUlE,CAAC,CAAA,CAAE,WAAgB,SAAA,CAC7C,IAAA,IAAW9G,KAAM4F,CAAAA,CAAG,cAAA,CAAe,OAAQ,CACzC,IAAMvF,EAAI6K,CAAAA,CAAUtK,CAAAA,CAAGZ,CAAE,CAAA,CACpBK,CAAAA,CASIwL,GAAWxL,CAAAA,CAAE,MAAA,GAAW,WAC/BY,CAAAA,CAAI,IAAA,CACFE,CAAAA,CACE,8BAAA,CACA,UAAUnB,CAAE,CAAA,4CAAA,CAAA,CACZ,WAAWA,CAAE,CAAA,4BAAA,CAAA,CACb4F,EAAG,EACL,CACF,EAhBA3E,CAAAA,CAAI,IAAA,CACFE,EACE,8BAAA,CACA,CAAA,QAAA,EAAWyE,EAAG,EAAE,CAAA,6CAAA,EAAgD5F,CAAE,CAAA,CAAA,CAAA,CAClE,CAAA,YAAA,EAAemL,GAASvK,CAAC,CAAC,GAC1BgF,CAAAA,CAAG,EACL,CACF,EAUJ,CACA,OAAO3E,CACT,CACF,EA2DqB,CACnB,EAAA,CAAI,qBACJ,QAAA,CAAU,OAAA,CACV,MAAML,CAAAA,CAAGkG,CAAAA,CAAG,CACV,GAAIA,CAAAA,CAAE,IAAA,GAAS,qBAAA,CAAuB,OAAO,EAAC,CAC9C,IAAM9G,CAAAA,CAAKiL,CAAAA,CAASnE,CAAC,CAAA,CACfK,CAAAA,CAAM5G,EAASK,CAAC,CAAA,CAAE,aACxB,OAAIZ,CAAAA,GAAO,QAAa,CAACmH,CAAAA,CAAI,GAAG,QAAA,CAASnH,CAAE,GAAK,CAACkL,CAAAA,CAAUtK,EAAGZ,CAAE,CAAA,CAAU,EAAC,CACpEyH,CAAAA,CAAc7G,EAAGZ,CAAE,CAAA,CAAE,IAAKsD,CAAAA,EAC/BnC,CAAAA,CACE,qBACA,CAAA,MAAA,EAASmC,CAAI,eAAe6D,CAAAA,CAAI,IAAI,wBAAwBnH,CAAE,CAAA,CAAA,CAAA,CAC9D,eAAeA,CAAE,CAAA,sBAAA,EAAyBsD,CAAI,CAAA,iBAAA,EAAoBA,CAAI,gCAAgC6D,CAAAA,CAAI,IAAI,sBAC9G7D,CACF,CACF,CACF,CACF,CAAA,CAE2B,CACzB,EAAA,CAAI,sBAAA,CACJ,SAAU,OAAA,CACV,KAAA,CAAM1C,EAAGkG,CAAAA,CAAG,CACV,GAAIA,CAAAA,CAAE,IAAA,GAAS,sBAAuB,OAAO,GAC7C,IAAM9G,CAAAA,CAAKiL,EAASnE,CAAC,CAAA,CACfzG,EAAIL,CAAAA,GAAO,MAAA,CAAY,OAAYkL,CAAAA,CAAUtK,CAAAA,CAAGZ,CAAE,CAAA,CACxD,GAAI,CAACK,CAAAA,CAAG,OAAO,EAAC,CAChB,IAAMY,CAAAA,CAAmB,GACnBuE,CAAAA,CAAO/B,CAAAA,CAAa7C,EAAGP,CAAAA,CAAE,EAAE,EAC9B,MAAA,CAAQkB,CAAAA,EAAMA,EAAE,MAAA,GAAW,MAAM,EACjC,GAAA,CAAKA,CAAAA,EAAMA,EAAE,EAAE,CAAA,CACdiE,EAAK,MAAA,EACPvE,CAAAA,CAAI,KACFE,CAAAA,CACE,sBAAA,CACA,GAAGqE,CAAAA,CAAK,MAAM,sBAAsBnF,CAAAA,CAAE,EAAE,mBAAmBmF,CAAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC1E,0DACF,CACF,CAAA,CACF,IAAMgD,CAAAA,CAAQwC,CAAAA,CAAUlE,CAAC,CAAA,CAAE,aACrB3C,CAAAA,CAAQ,KAAA,CAAM,QAAQqE,CAAK,CAAA,CAC7BA,EACG,MAAA,CAAQC,CAAAA,EAAMhI,EAAMgI,CAAC,CAAA,EAAK,OAAOA,CAAAA,CAAE,IAAA,EAAY,QAAQ,CAAA,CACvD,GAAA,CAAKA,GAAOA,CAAAA,CAAuB,IAAI,EAC1C,EAAC,CACDpI,EAAE,EAAA,GAAOiE,CAAAA,CAAY1D,CAAC,CAAA,EAAGuD,CAAAA,CAAM,KAAK,qBAAqB,CAAA,CAC7D,QAAW0D,CAAAA,IAAQ3D,CAAAA,CAAoBtD,EAAGP,CAAAA,CAAG8D,CAAK,EAChDlD,CAAAA,CAAI,IAAA,CACFE,EACE,sBAAA,CACA,CAAA,OAAA,EAAUd,CAAAA,CAAE,EAAE,yBAAyBwH,CAAI,CAAA,CAAA,CAAA,CAC3C,kCAAkCA,CAAI,CAAA,2EAAA,EAA8EA,CAAI,CAAA,yBAAA,CAC1H,CACF,EACF,OAAO5G,CACT,CACF,CAAA,CAEwB,CACtB,GAAI,qBAAA,CACJ,QAAA,CAAU,QACV,KAAA,CAAML,GAAAA,CAAGkG,EAAG,CACV,GAAIA,EAAE,EAAA,GAAO,OAAA,CAAS,OAAO,EAAC,CAC9B,GAAIA,CAAAA,CAAE,IAAA,GAAS,sBAAuB,CACpC,IAAM9G,EAAKiL,CAAAA,CAASnE,CAAC,EACfzG,CAAAA,CAAIL,CAAAA,GAAO,OAAY,MAAA,CAAYkL,CAAAA,CAAUtK,GAAAA,CAAGZ,CAAE,EACxD,GAAI,CAACK,EAAG,OAAO,GACf,IAAMyL,CAAAA,CAAOrI,EAAa7C,GAAAA,CAAGP,CAAAA,CAAE,EAAE,CAAA,CAC9B,MAAA,CAAQkB,GAAMwK,CAAAA,CAASnL,GAAAA,CAAGW,CAAC,CAAA,GAAMuF,CAAAA,CAAE,EAAE,CAAA,CACrC,GAAA,CAAKvF,GAAMA,CAAAA,CAAE,EAAE,EAClB,GAAIuK,CAAAA,CAAK,SAAW,CAAA,CAAG,OAAO,EAAC,CAC/B,IAAME,EAAS1D,GAAAA,CAAY1H,GAAAA,CAAGP,EAAE,IAAA,CAAK,EAAA,CAAI,eAAgByG,CAAAA,CAAE,EAAE,CAAA,CAC7D,OAAO,CACL3F,CAAAA,CACE,qBAAA,CACA,IAAI2F,CAAAA,CAAE,EAAE,cAAcgF,CAAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,EAAczL,EAAE,EAAE,CAAA,8BAAA,CAAA,CACvD,mCAAmC2L,CAAAA,CAAO,GAAA,CAAKjG,GAAM,CAAA,EAAA,EAAKA,CAAC,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CACzE,CACF,CACF,CACA,GAAIe,CAAAA,CAAE,IAAA,GAAS,8BAA+B,CAC5C,IAAMlB,EAAK6F,EAAAA,CAAS7K,GAAAA,CAAGkG,CAAC,CAAA,CACxB,GAAI,CAAClB,CAAAA,CAAI,OAAO,EAAC,CACjB,IAAMqG,CAAAA,CAAQrL,GAAAA,CAAE,OAAO,IAAA,CACpBqD,CAAAA,EAAMA,EAAE,IAAA,GAAS,YAAA,EAAiBA,EAAE,OAAA,CAA2B,EAAA,GAAO2B,EAAG,EAC5E,CAAA,CACA,GAAI,CAACqG,CAAAA,EAASA,EAAM,EAAA,GAAOnF,CAAAA,CAAE,GAAI,OAAO,GACxC,IAAMkF,CAAAA,CAASlD,EAAUlI,GAAAA,CAAG,gBAAgB,EACzC,GAAA,CAAK,CAAA,EAAM,EAAE,EAAE,CAAA,CACf,OAAQ,CAAA,EAAM,CAAA,GAAMkG,EAAE,EAAE,CAAA,CAC3B,OAAO,CACL3F,CAAAA,CACE,qBAAA,CACA,CAAA,CAAA,EAAI2F,EAAE,EAAE,CAAA,iBAAA,EAAoBlB,EAAG,EAAE,CAAA,uBAAA,CAAA,CACjC,kBAAkBoG,CAAAA,CAAO,GAAA,CAAK,GAAM,CAAA,EAAA,EAAK,CAAC,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA,CACtDpG,EAAG,EACL,CACF,CACF,CACA,OAAO,EACT,CACF,EA9JuB,CACrB,EAAA,CAAI,kBACJ,QAAA,CAAU,OAAA,CACV,MAAMhF,CAAAA,CAAGkG,CAAAA,CAAG,CACV,IAAI9G,CAAAA,CACAkM,EACApG,CAAAA,CACAqG,CAAAA,CACJ,GAAIrF,CAAAA,CAAE,IAAA,GAAS,WAAY,CACzB,IAAMxD,EAAO0H,CAAAA,CAAUlE,CAAC,EAAE,IAAA,CAC1B,GAAI,CAACrG,CAAAA,CAAM6C,CAAI,EAAG,OAAO,GACzBtD,CAAAA,CAAK,MAAA,CAAOsD,EAAK,EAAE,CAAA,CACnB4I,EAAS5I,CAAAA,CAAK,MAAA,CACdwC,EAAKxC,CAAAA,CAAK,cAAA,CACV6I,EAAO7I,CAAAA,CAAK,IAAA,GAAS,iBACvB,CAAA,KAAA,GAAWwD,CAAAA,CAAE,OAAS,WAAA,CAAa,CACjC,IAAMtD,CAAAA,CAAM4H,CAAAA,CAASxK,EAAGoK,CAAAA,CAAUlE,CAAC,EAAE,EAAK,CAAA,CACpC8E,EAAQZ,CAAAA,CAAUlE,CAAC,CAAA,CAAE,KAAA,CAC3B,GAAI,CAACtD,CAAAA,EAAO,CAAC/C,CAAAA,CAAMmL,CAAK,EAAG,OAAO,GAClC5L,CAAAA,CAAKwD,CAAAA,CAAI,GACT0I,CAAAA,CAASN,CAAAA,CAAM,OACf9F,CAAAA,CAAK8F,CAAAA,CAAM,eACXO,CAAAA,CAAO3I,CAAAA,CAAI,OAAS,iBACtB,CAAA,YAAc,EAAC,CACf,IAAMvC,CAAAA,CAAmB,GACzB,GAAI,KAAA,CAAM,QAAQiL,CAAM,CAAA,CAAG,CACzB,IAAM/E,CAAAA,CAAM5G,EAASK,CAAC,CAAA,CAAE,aAClBwL,CAAAA,CAAK,CAACjF,CAAAA,CAAI,IAAA,CAAM,GAAGA,CAAAA,CAAI,EAAE,EAAE,OAAA,CAAS9G,CAAAA,EACxCoD,EAAa7C,CAAAA,CAAGP,CAAC,EACd,MAAA,CAAQkB,CAAAA,EAAMA,EAAE,IAAA,GAAS,UAAA,EAAcA,EAAE,IAAA,GAAS,gBAAgB,EAClE,GAAA,CAAKA,CAAAA,EAAMA,EAAE,EAAE,CACpB,EACMwJ,CAAAA,CAAM,CAAA,iBAAA,EAAoBqB,EAAG,MAAA,CAASA,CAAAA,CAAG,KAAK,IAAI,CAAA,CAAI,YAAY,CAAA,CAAA,CACxE,IAAA,IAAW1J,KAAKwJ,CAAAA,CAAQ,CACtB,GAAI,OAAOxJ,CAAAA,EAAM,SAAU,SAC3B,IAAM2J,CAAAA,CAASjB,CAAAA,CAASxK,EAAG8B,CAAC,CAAA,CAAA,CACxB,CAAC2J,CAAAA,EAAUA,CAAAA,CAAO,SAAW,SAAA,GAC/BpL,CAAAA,CAAI,KAAKE,CAAAA,CAAE,iBAAA,CAAmB,SAASnB,CAAE,CAAA,uBAAA,EAA0B0C,CAAC,CAAA,CAAA,CAAA,CAAKqI,CAAAA,CAAK/K,CAAE,CAAC,EACrF,CACF,CACA,GAAImM,GAAQ1L,CAAAA,CAAMqF,CAAE,GAAK,KAAA,CAAM,OAAA,CAAQA,EAAG,MAAS,CAAA,CACjD,QAAWC,CAAAA,IAAKD,CAAAA,CAAG,OACb,OAAOC,CAAAA,EAAM,UAAY,CAACmF,CAAAA,CAAUtK,EAAGmF,CAAC,CAAA,EAC1C9E,CAAAA,CAAI,IAAA,CACFE,EACE,iBAAA,CACA,CAAA,QAAA,EAAWnB,CAAE,CAAA,6CAAA,EAAgD+F,CAAC,IAC9D,CAAA,YAAA,EAAeoF,EAAAA,CAASvK,CAAC,CAAC,CAAA,CAAA,CAC1BZ,CACF,CACF,CAAA,CAGN,OAAOiB,CACT,CACF,CAyG4F,CAC9F,CChaO,SAASqL,EAAAA,CAAgBC,CAAAA,CAAmC,CACjE,OAAO,CACL,CAAE,EAAA,CAAI3J,CAAAA,CAAM,KAAM,MAAA,CAAQ,WAAA,CAAa,CAAC,CAAE,IAAA,CAAM,mBAAoB,CAAC,CAAA,CAAG,WAAY,EAAG,EACvF,CACE,EAAA,CAAIC,CAAAA,CACJ,IAAA,CAAM,SACN,WAAA,CAAa,GACb,UAAA,CAAY,CAAC,CAAE,IAAA,CAAM,kBAAmB,CAAC,CAAA,CACzC,MAAA,CAAQ,IACV,CAAA,CACA,CAAE,GAAIC,CAAAA,CAAM,IAAA,CAAM,OAAQ,WAAA,CAAa,GAAI,UAAA,CAAY,EAAG,CAC5D,CACF,CCmDO,IAAM0J,EAAAA,CAAiD,CAC5D,OAAA,CAAS,uBAAA,CACT,KAAM,cAAA,CACN,KAAA,CAAO,OACP,SAAA,CAAW,OAAA,CACX,UAAW,aAAA,CACX,QAAA,CAAU,SACV,IAAA,CAAM,YACR,EAGO,SAASC,GAAejM,CAAAA,CAAsB8C,CAAAA,CAAoC,CACvF,IAAMtD,CAAAA,CAAKqD,EAAQ7C,CAAAA,CAAO8C,CAAI,EAC9B,GAAItD,CAAAA,GAAO,OACX,OAAOO,CAAAA,CAASC,CAAK,CAAA,CAAE,MAAA,CAAO,KAAMH,CAAAA,EAAMA,CAAAA,CAAE,KAAOL,CAAE,CAAA,EAAG,SAC1D,CAmBO,SAAS0M,GAAYlM,CAAAA,CAAmC,CAqB7D,OAAO,CACL,MAAA,CArBauC,EAASvC,CAAK,CAAA,CAAE,IAAKH,CAAAA,EAAM,CACxC,IAAM0E,CAAAA,CAAQtB,CAAAA,CAAajD,EAAOH,CAAAA,CAAE,EAAE,CAAA,CAChCiJ,CAAAA,CAAOvE,EAAM,MAAA,CAAQxD,CAAAA,EAAMA,EAAE,MAAA,GAAW,MAAM,EAAE,MAAA,CAEhD2K,CAAAA,CADU3L,EAASC,CAAK,CAAA,CAAE,aAAa,EAAA,CAAG,QAAA,CAASH,EAAE,EAAE,CAAA,CACpCoH,EAAcjH,CAAAA,CAAOH,CAAAA,CAAE,EAAE,CAAA,CAAI,GAEhD8D,CAAAA,CAAQ9D,CAAAA,CAAE,KAAOiE,CAAAA,CAAY9D,CAAK,GAAK0L,CAAAA,CAAO,MAAA,GAAW,EAAI,CAAC,qBAAqB,EAAI,EAAC,CACxF3E,EAAUrD,CAAAA,CAAoB1D,CAAAA,CAAOH,EAAG8D,CAAK,CAAA,CACnD,OAAO,CACL,EAAA,CAAI9D,EAAE,EAAA,CACN,IAAA,CAAMA,EAAE,IAAA,CACR,MAAA,CAAQA,EAAE,MAAA,CACV,KAAA,CAAO0E,EAAM,MAAA,CACb,IAAA,CAAAuE,EACA,mBAAA,CAAqB/B,CAAAA,CACrB,cAAe2E,CAAAA,CACf,YAAA,CACE7L,EAAE,MAAA,GAAW,MAAA,EAAUiJ,IAASvE,CAAAA,CAAM,MAAA,EAAUwC,EAAQ,MAAA,GAAW,CAAA,EAAK2E,EAAO,MAAA,GAAW,CAC9F,CACF,CAAC,CAAA,CAGC,QAAStI,EAAAA,CAAapD,CAAK,GAAG,EAAA,EAAM,IAAA,CACpC,KAAMmD,CAAAA,CAAUnD,CAAK,GAAG,EAAA,EAAM,IAAA,CAC9B,YAAA,CAAcA,CAAAA,CAAM,QACjB,MAAA,CAAQH,CAAAA,EAAMA,EAAE,IAAA,GAAS,MAAA,EAAUA,EAAE,IAAA,GAAS,MAAA,EAAaA,EAAE,IAAA,GAAS,MAAS,EAC/E,GAAA,CAAKA,CAAAA,GAAO,CAAE,OAAA,CAASA,CAAAA,CAAE,GAAI,IAAA,CAAMA,CAAAA,CAAE,IAAM,CAAA,CAAE,CAClD,CACF,CAEO,SAASsM,IAA0C,CACxD,OAAO,CACL,IAAA,CAAM,WAAA,CACN,WAAYH,EAAAA,CACZ,cAAA,CAAgBzK,GAChB,aAAA,CAAeuK,EAAAA,CACf,aAAc5B,EAAAA,CACd,oBAAA,CAAsB,CAAC,YAAA,CAAc,gBAAA,CAAkB,cAAA,CAAgB,SAAA,CAAW,QAAQ,CAAA,CAC1F,qBAAA,CAAuB,EAAC,CACxB,cAAA,CAAelK,EAAuB,CACpC,IAAMoM,EAAqB,CACzB,aAAA,CAAe,QAEf,OAAA,CAAUtJ,CAAAA,EACRA,EAAK,MAAA,GAAW,MAAA,EAAUA,EAAK,IAAA,GAAS,UAAA,CACpCmJ,GAAejM,CAAAA,CAAO8C,CAAI,EAC1B,MACR,CAAA,CACMX,EAAWpC,CAAAA,CAASC,CAAK,EAAE,uBAAA,CACjC,OAAImC,IAAa,MAAA,GAAWiK,CAAAA,CAAG,wBAA0BjK,CAAAA,CAAAA,CAClDiK,CACT,EACA,UAAA,CAAWpM,CAAAA,CAAmB,CAC5B,IAAMgF,CAAAA,CAAO7B,CAAAA,CAAUnD,CAAK,EAC5B,OAAKgF,CAAAA,CACE,OAAO,MAAA,CAAOhF,CAAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAC/Be,IACEA,CAAAA,CAAE,MAAA,GAAW,QAAUA,CAAAA,CAAE,MAAA,GAAW,YACpCA,CAAAA,CAAE,KAAA,GAAUqB,GAAQrB,CAAAA,CAAE,KAAA,GAAUsB,IACjCtB,CAAAA,CAAE,IAAA,GAAS,kBACX8B,CAAAA,CAAQ7C,CAAAA,CAAOe,CAAC,CAAA,GAAMiE,CAAAA,CAAK,EAC/B,CAAA,CAPkB,EAQpB,CAAA,CACA,UAAA,CAAWhF,EAAO8C,CAAAA,CAAgB,CAChC,IAAM6D,CAAAA,CAAM5G,CAAAA,CAASC,CAAK,CAAA,CACpB0B,CAAAA,CAASa,CAAAA,CAASvC,CAAK,EACvBR,CAAAA,CAAKqD,CAAAA,CAAQ7C,EAAO8C,CAAI,CAAA,CACxBjD,EAAIL,CAAAA,GAAO,MAAA,CAAY,OAAYkC,CAAAA,CAAOgB,CAAAA,CAAW1C,EAAOR,CAAE,CAAC,EAC/D6M,CAAAA,CAAS3K,CAAAA,CAAO,OAAQxB,CAAAA,EAAMA,CAAAA,CAAE,SAAW,WAAW,CAAA,CAAE,IAAKA,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACvEc,CAAAA,CAAQnB,GAAG,IAAA,CAAK,QAAA,CAAS,SAAS,OAAO,CAAA,CAC/C,OAAO,CACLA,CAAAA,CACI,UAAUA,CAAAA,CAAE,IAAI,MAAM6C,CAAAA,CAAW1C,CAAAA,CAAOH,CAAAA,CAAE,EAAE,EAAI,CAAC,CAAA,CAAA,EAAI6B,EAAO,MAAM,CAAA,iBAAA,EAAoB7B,EAAE,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAK,QAAQ,WAAWA,CAAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAAA,EAAImB,CAAAA,CAAQ,wBAA0B,EAAE,CAAA,CAAA,CACvL,kFACJ,CAAA,6BAAA,EAAgCqL,CAAAA,CAAO,KAAK,IAAI,CAAA,EAAK,YAAY,CAAA,uEAAA,CAAA,CACjE1F,CAAAA,CAAI,aAAa,EAAA,CAAG,MAAA,CAChB,sCAAsCA,CAAAA,CAAI,YAAA,CAAa,IAAI,CAAA,2BAAA,EAA8BA,CAAAA,CAAI,aAAa,EAAA,CAAG,IAAA,CAAK,IAAI,CAAC,CAAA,4BAAA,CAAA,CACvH,+BAAA,CACJ,CAAA,4BAAA,EAA+B7D,EAAK,EAAE,CAAA,0DAAA,CACxC,CACF,CAAA,CACA,UAAA,CAAYyE,GAAoB4E,EAAS,CAAA,CACzC,MAAOhB,EAAAA,EAAe,CACtB,QAAUnL,CAAAA,GAAW,CAAE,GAAG2I,EAAAA,CAAiB3I,CAAK,CAAE,CAAA,CAAA,CAClD,aAAA,CAAe,CAAE,KAAA,CAAO,KAAM,EAC9B,gBAAA,CAAkB,CAAC,SAAU,cAAA,CAAgB,YAAY,EACzD,MAAA,CAASA,CAAAA,GAAW,CAAE,GAAGkM,EAAAA,CAAYlM,CAAK,CAAA,CAAG,QAAA,CAAU0G,EAAmB1G,CAAK,CAAA,CAAE,QAAS,CAAA,CAAA,CAC1F,WAAA,CAAawI,EAAAA,CACb,aAAA,CAAcxI,EAAOsM,CAAAA,CAAQC,CAAAA,CAAM,CAEjC,IAAM/I,CAAAA,CAAKY,IAAcpE,CAAK,CAAA,CACxBgF,EAAO7B,CAAAA,CAAUnD,CAAK,EAC5B,GAAI,CAACwD,GAAM,CAACwB,CAAAA,EAAQxB,EAAG,SAAA,CAAU,QAAA,CAAS8I,CAAM,CAAA,CAAG,OAAOtM,EAC1D,IAAM8C,CAAAA,CAAO9C,EAAM,KAAA,CAAMsM,CAAM,EAC/B,GAAI,CAACxJ,GAAQD,CAAAA,CAAQ7C,CAAAA,CAAO8C,CAAI,CAAA,GAAMkC,CAAAA,CAAK,GAAI,OAAOhF,CAAAA,CACtD,IAAMwM,CAAAA,CAAMxM,CAAAA,CAAM,WAAWA,CAAAA,CAAM,UAAA,CAAW,OAAS,CAAC,CAAA,CACxD,OAAI,CAACwM,CAAAA,EAAOA,EAAI,IAAA,GAASF,CAAAA,CAAetM,EACjC,CACL,GAAGA,EACH,UAAA,CAAYA,CAAAA,CAAM,WAAW,GAAA,CAAKE,CAAAA,EAChCA,EAAE,EAAA,GAAOsD,CAAAA,CAAG,GACR,CAAE,GAAGtD,EAAG,SAAA,CAAW,CAAC,GAAGA,CAAAA,CAAE,SAAA,CAAWoM,CAAM,CAAA,CAAG,KAAA,CAAOG,EAASvM,CAAAA,CAAE,KAAA,CAAOsM,CAAG,CAAE,CAAA,CAC3EtM,CACN,CACF,CACF,CACF,CACF","file":"chunk-3KFQPSRX.mjs","sourcesContent":["import { assertId, fail } from \"../errors.ts\";\nimport type { Budget, Gate, GateRequirement, WorkflowState } from \"../types.ts\";\n\nexport interface WaterfallPhaseConfig {\n id: string;\n name: string;\n deliverables: string[];\n gate: Gate;\n budget?: Budget;\n /** role id that delivers this phase's items; default: the first role with \"deliver\" */\n deliverBy?: string;\n}\nexport interface WaterfallConfig {\n phases: WaterfallPhaseConfig[];\n changeControl: { requiresImpactAnalysis: boolean; approvers: GateRequirement[] };\n /** phase ids: every item of `from` must trace to an item of each `to` phase before that phase's gate */\n traceability: { from: string; to: string[] };\n humanGates: \"all\" | string[];\n /** tokens per weight unit when there is no accounting history (default 20000, as Scrum) */\n fallbackTokensPerWeight?: number;\n}\n\nexport const DEFAULT_PHASE_IDS: readonly string[] = [\n \"requirements\",\n \"design\",\n \"implementation\",\n \"verification\",\n \"deployment\",\n \"maintenance\",\n];\nexport const DEFAULT_DELIVERABLES: Record<string, string[]> = {\n requirements: [\"srs\"],\n design: [\"design-doc\", \"interface-spec\"],\n implementation: [\"code-baseline\"],\n verification: [\"test-report\", \"traceability-matrix\"],\n deployment: [\"release-notes\", \"deployment-record\"],\n maintenance: [\"change-log\"],\n};\nexport const DEFAULT_DELIVER_BY: Record<string, string> = {\n requirements: \"business-analyst\",\n design: \"architect\",\n deployment: \"release-manager\",\n};\nexport const GATE_ID = (id: string): string => `${id}-gate`;\nexport const CHANGE_GATE = \"change-control\";\nexport const CAPABILITIES: readonly string[] = [\n \"order-backlog\",\n \"define-acceptance\",\n \"facilitate\",\n \"deliver\",\n \"review\",\n \"verify\",\n \"approve-gate\",\n \"manage-flow\",\n \"control-change\",\n \"escalate\",\n];\n\nconst title = (id: string) => id.charAt(0).toUpperCase() + id.slice(1);\n\nexport function defaultPhases(): WaterfallPhaseConfig[] {\n return DEFAULT_PHASE_IDS.map((id) => {\n const p: WaterfallPhaseConfig = {\n id,\n name: title(id),\n deliverables: [...(DEFAULT_DELIVERABLES[id] ?? [])],\n gate: {\n id: GATE_ID(id),\n requires: [{ capability: \"approve-gate\" }],\n evidence: [],\n onFail: { action: \"block\" },\n },\n };\n const by = DEFAULT_DELIVER_BY[id];\n if (by !== undefined) p.deliverBy = by;\n return p;\n });\n}\n\nexport function configOf(state: WorkflowState): WaterfallConfig {\n return state.config as WaterfallConfig;\n}\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst strings = (x: unknown): x is string[] =>\n Array.isArray(x) && x.every((s) => typeof s === \"string\" && s.trim() !== \"\");\n\nfunction budget(raw: unknown, where: string): Budget | undefined {\n if (raw === undefined) return undefined;\n if (!isObj(raw))\n fail(\"config-invalid\", `${where}.budget must be an object`, 'e.g. { \"tokens\": 400000 }');\n const out: Budget = {};\n for (const k of [\"tokens\", \"turns\", \"wallclockMs\"] as const) {\n const v = raw[k];\n if (v === undefined) continue;\n if (typeof v !== \"number\" || !Number.isFinite(v) || v < 0)\n fail(\n \"config-invalid\",\n `${where}.budget.${k} must be a non-negative number`,\n \"omit it for no limit\",\n );\n out[k] = v;\n }\n return out;\n}\n\nfunction requirements(raw: unknown, where: string): GateRequirement[] {\n if (!Array.isArray(raw) || raw.length === 0)\n fail(\n \"config-invalid\",\n `${where} must be a non-empty array of \"human\" | { capability }`,\n 'e.g. [\"human\", { \"capability\": \"approve-gate\" }]',\n );\n return raw.map((q: unknown): GateRequirement => {\n if (q === \"human\") return \"human\";\n if (isObj(q) && typeof q[\"capability\"] === \"string\" && CAPABILITIES.includes(q[\"capability\"]))\n return { capability: q[\"capability\"] };\n return fail(\n \"config-invalid\",\n `${where} entry ${JSON.stringify(q)} is not \"human\" or a known capability`,\n `use \"human\" or { \"capability\": one of ${CAPABILITIES.join(\", \")} }`,\n );\n });\n}\n\nfunction phase(raw: unknown, i: number, human: (id: string) => boolean): WaterfallPhaseConfig {\n const where = `waterfall config.phases[${i}]`;\n if (!isObj(raw)) fail(\"config-invalid\", `${where} must be an object`, 'e.g. { \"id\": \"design\" }');\n assertId(raw[\"id\"], `${where}.id`);\n const id = raw[\"id\"] as string;\n const deliverables = raw[\"deliverables\"] ?? DEFAULT_DELIVERABLES[id] ?? [];\n if (!strings(deliverables))\n fail(\n \"config-invalid\",\n `${where}.deliverables must be a string[] of evidence kinds`,\n 'e.g. [\"srs\"]',\n );\n let gate: Gate;\n if (raw[\"gate\"] === undefined) {\n gate = {\n id: GATE_ID(id),\n requires: [{ capability: \"approve-gate\" }],\n evidence: [],\n onFail: { action: \"block\" },\n };\n } else {\n const g = raw[\"gate\"];\n if (!isObj(g) || typeof g[\"id\"] !== \"string\" || g[\"id\"].trim() === \"\")\n fail(\n \"config-invalid\",\n `${where}.gate must be a Gate with an id`,\n 'e.g. { \"id\": \"design-gate\", \"requires\": [{ \"capability\": \"approve-gate\" }], \"evidence\": [] }',\n );\n const evidence = g[\"evidence\"] ?? [];\n if (!strings(evidence))\n fail(\n \"config-invalid\",\n `${where}.gate.evidence must be a string[]`,\n \"list evidence kinds or omit it\",\n );\n gate = {\n id: g[\"id\"],\n requires: requirements(\n g[\"requires\"] ?? [{ capability: \"approve-gate\" }],\n `${where}.gate.requires`,\n ),\n evidence: [...evidence],\n onFail: { action: \"block\" },\n };\n }\n if (human(id) && !gate.requires.includes(\"human\")) gate.requires = [\"human\", ...gate.requires];\n const out: WaterfallPhaseConfig = {\n id,\n name: typeof raw[\"name\"] === \"string\" && raw[\"name\"].trim() !== \"\" ? raw[\"name\"] : title(id),\n deliverables: [...deliverables],\n gate,\n };\n const b = budget(raw[\"budget\"], where);\n if (b !== undefined) out.budget = b;\n const by = raw[\"deliverBy\"] ?? DEFAULT_DELIVER_BY[id];\n if (by !== undefined) {\n if (typeof by !== \"string\" || by.trim() === \"\")\n fail(\n \"config-invalid\",\n `${where}.deliverBy must be a role id`,\n \"name the role that delivers this phase or omit it\",\n );\n out.deliverBy = by;\n }\n return out;\n}\n\nexport function validateWaterfallConfig(raw: unknown): WaterfallConfig {\n const c = (raw ?? {}) as Record<string, unknown>;\n if (c[\"phases\"] !== undefined && !Array.isArray(c[\"phases\"]))\n fail(\n \"config-invalid\",\n \"waterfall config.phases must be an array of phases\",\n \"omit phases for the six classic phases\",\n );\n const hg = c[\"humanGates\"] ?? \"all\";\n if (hg !== \"all\" && !strings(hg))\n fail(\n \"config-invalid\",\n 'waterfall config.humanGates must be \"all\" or a string[] of phase ids',\n 'omit it for \"all\"',\n );\n const human = hg === \"all\" ? () => true : (id: string) => (hg as string[]).includes(id);\n const phases =\n c[\"phases\"] === undefined\n ? defaultPhases().map((p, i) => phase(p, i, human))\n : (c[\"phases\"] as unknown[]).map((p, i) => phase(p, i, human));\n if (phases.length === 0)\n fail(\n \"config-invalid\",\n \"waterfall config.phases needs at least one phase\",\n 'e.g. [{ \"id\": \"requirements\" }]',\n );\n const ids = phases.map((p) => p.id);\n const dupe = ids.find((id, i) => ids.indexOf(id) !== i);\n if (dupe !== undefined)\n fail(\"config-invalid\", `duplicate phase id \"${dupe}\"`, \"give every phase a unique id\");\n if (hg !== \"all\")\n for (const id of hg as string[])\n if (!ids.includes(id))\n fail(\n \"config-invalid\",\n `waterfall config.humanGates names unknown phase \"${id}\"`,\n `phases are: ${ids.join(\", \")}`,\n );\n const cc = c[\"changeControl\"] ?? {};\n if (!isObj(cc))\n fail(\n \"config-invalid\",\n \"waterfall config.changeControl must be an object\",\n 'e.g. { \"requiresImpactAnalysis\": true, \"approvers\": [\"human\"] }',\n );\n if (\n cc[\"requiresImpactAnalysis\"] !== undefined &&\n typeof cc[\"requiresImpactAnalysis\"] !== \"boolean\"\n )\n fail(\n \"config-invalid\",\n \"waterfall config.changeControl.requiresImpactAnalysis must be a boolean\",\n \"omit it for true\",\n );\n const changeControl: WaterfallConfig[\"changeControl\"] = {\n requiresImpactAnalysis:\n cc[\"requiresImpactAnalysis\"] === undefined ? true : (cc[\"requiresImpactAnalysis\"] as boolean),\n approvers: requirements(\n cc[\"approvers\"] ?? [\"human\", { capability: \"control-change\" }],\n \"waterfall config.changeControl.approvers\",\n ),\n };\n const tr = c[\"traceability\"];\n let traceability: WaterfallConfig[\"traceability\"];\n if (tr === undefined) {\n traceability =\n ids.includes(\"requirements\") && ids.includes(\"design\") && ids.includes(\"verification\")\n ? { from: \"requirements\", to: [\"design\", \"verification\"] }\n : { from: ids[0]!, to: [] };\n } else {\n if (!isObj(tr) || typeof tr[\"from\"] !== \"string\" || !ids.includes(tr[\"from\"]))\n fail(\n \"config-invalid\",\n \"waterfall config.traceability.from must be a phase id\",\n `phases are: ${ids.join(\", \")}`,\n );\n const to = tr[\"to\"] ?? [];\n if (!strings(to))\n fail(\n \"config-invalid\",\n \"waterfall config.traceability.to must be a string[] of phase ids\",\n `phases are: ${ids.join(\", \")}`,\n );\n for (const t of to) {\n if (!ids.includes(t))\n fail(\n \"config-invalid\",\n `waterfall config.traceability.to names unknown phase \"${t}\"`,\n `phases are: ${ids.join(\", \")}`,\n );\n if (ids.indexOf(t) <= ids.indexOf(tr[\"from\"]))\n fail(\n \"config-invalid\",\n `waterfall config.traceability.to phase \"${t}\" must come after \"${tr[\"from\"]}\"`,\n \"trace forward only: from an earlier phase to later ones\",\n );\n }\n traceability = { from: tr[\"from\"], to: [...to] };\n }\n const fallback = c[\"fallbackTokensPerWeight\"];\n if (\n fallback !== undefined &&\n (typeof fallback !== \"number\" || !Number.isFinite(fallback) || fallback <= 0)\n )\n fail(\n \"config-invalid\",\n \"waterfall config.fallbackTokensPerWeight must be a positive finite number\",\n \"omit it for the default 20000\",\n );\n const out: WaterfallConfig = {\n phases,\n changeControl,\n traceability,\n humanGates: hg === \"all\" ? \"all\" : [...(hg as string[])],\n };\n if (fallback !== undefined) out.fallbackTokensPerWeight = fallback;\n return out;\n}\n","import { fail } from \"../errors.ts\";\nimport type { Phase, WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\n\nexport const WORK = \"work\";\nexport const REVIEW = \"review\";\nexport const DONE = \"done\";\n\n/** state.phases, or the config phases as pending (before the first ceremony touches them). */\nexport function phasesOf(state: WorkflowState): Phase[] {\n if (state.phases) return state.phases;\n return configOf(state).phases.map((p) => {\n const ph: Phase = {\n id: p.id,\n name: p.name,\n deliverables: [...p.deliverables],\n gate: p.gate,\n status: \"pending\",\n };\n if (p.budget) ph.budget = p.budget;\n return ph;\n });\n}\n\nexport function withPhases(state: WorkflowState, phases: Phase[]): WorkflowState {\n return { ...state, phases };\n}\n\nexport function phaseIndex(state: WorkflowState, id: string): number {\n const idx = phasesOf(state).findIndex((p) => p.id === id);\n if (idx < 0)\n fail(\n \"config-invalid\",\n `unknown phase \"${id}\"`,\n `phases are: ${phasesOf(state)\n .map((p) => p.id)\n .join(\" → \")}`,\n );\n return idx;\n}\n\nexport function getPhase(state: WorkflowState, id: string): Phase {\n return phasesOf(state)[phaseIndex(state, id)]!;\n}\n\n/** The item's phase, inherited from its parent chain (questions, follow-ups, retro items). */\nexport function phaseOf(state: WorkflowState, item: WorkItem): string | undefined {\n const seen = new Set<string>();\n let cur: WorkItem | undefined = item;\n while (cur && !seen.has(cur.id)) {\n if (cur.phase !== undefined) return cur.phase;\n seen.add(cur.id);\n cur =\n cur.parent !== undefined && Object.hasOwn(state.items, cur.parent)\n ? state.items[cur.parent]\n : undefined;\n }\n return undefined;\n}\n\nexport function itemsInPhase(state: WorkflowState, phaseId: string): WorkItem[] {\n return Object.values(state.items).filter(\n (i) => i.status !== \"dropped\" && phaseOf(state, i) === phaseId,\n );\n}\n\nexport function openPhase(state: WorkflowState): Phase | undefined {\n return phasesOf(state).find((p) => p.status === \"open\");\n}\n\n/** First phase in order that is not baselined: the one to kick off (or the open one). */\nexport function currentPhase(state: WorkflowState): Phase | undefined {\n return phasesOf(state).find((p) => p.status !== \"baselined\");\n}\n\nexport function isFrozen(state: WorkflowState, item: WorkItem): boolean {\n const id = phaseOf(state, item);\n return id !== undefined && phasesOf(state).find((p) => p.id === id)?.status === \"baselined\";\n}\n\nexport function producedKinds(state: WorkflowState, phase: Phase): Set<string> {\n const kinds = new Set<string>((phase.produced ?? []).map((p) => p.kind));\n for (const it of itemsInPhase(state, phase.id)) for (const e of it.evidence) kinds.add(e.kind);\n return kinds;\n}\n\n/** Deliverables (and gate evidence kinds) still missing, in declaration order. */\nexport function missingDeliverables(\n state: WorkflowState,\n phase: Phase,\n extra: string[] = [],\n): string[] {\n const have = producedKinds(state, phase);\n for (const k of extra) have.add(k);\n const wanted: string[] = [];\n for (const k of [...phase.deliverables, ...phase.gate.evidence])\n if (!wanted.includes(k)) wanted.push(k);\n return wanted.filter((k) => !have.has(k));\n}\n\n/** The traceability `to` phase that comes last in phase order (where the matrix must be complete). */\nexport function lastToPhase(state: WorkflowState): string | undefined {\n const order = phasesOf(state).map((p) => p.id);\n const to = configOf(state).traceability.to.filter((t) => order.includes(t));\n if (to.length === 0) return undefined;\n return to.reduce((a, b) => (order.indexOf(a) >= order.indexOf(b) ? a : b));\n}\n","import { fail } from \"../errors.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { Baseline, WorkItem, WorkflowState } from \"../types.ts\";\nimport { getPhase, itemsInPhase, phaseIndex, phasesOf, withPhases } from \"./phases.ts\";\n\nfunction closeIteration(\n state: WorkflowState,\n prefix: string,\n outcome: \"completed\" | \"cancelled\",\n now: string,\n): WorkflowState {\n const it = openIteration(state);\n if (!it || !it.id.startsWith(`${prefix}#`)) return state;\n return {\n ...state,\n iterations: state.iterations.map((x) => (x.id === it.id ? { ...x, endedAt: now, outcome } : x)),\n };\n}\n\n/** Pass the phase gate: freeze its items, record the baseline, close its iteration. */\nexport function baselinePhase(\n state: WorkflowState,\n phaseId: string,\n approvedBy: string[],\n now: string,\n): WorkflowState {\n const phase = getPhase(state, phaseId);\n if (phase.status !== \"open\")\n fail(\n \"invalid-transition\",\n `phase \"${phaseId}\" is ${phase.status}, not open`,\n phase.status === \"baselined\"\n ? \"it is already baselined; a change-request reopens it\"\n : \"kickoff the phase first\",\n );\n const items = itemsInPhase(state, phaseId);\n const itemSnapshot: Record<string, WorkItem> = {};\n for (const it of items) itemSnapshot[it.id] = it;\n const earlier = (state.baselines ?? []).filter((b) => b.phase === phaseId).length;\n const baseline: Baseline = {\n phase: phaseId,\n version: earlier + 1,\n at: now,\n approvedBy,\n itemSnapshot,\n };\n let s = withPhases(\n state,\n phasesOf(state).map((p) => (p.id === phaseId ? { ...p, status: \"baselined\" as const } : p)),\n );\n s = { ...s, baseline, baselines: [...(s.baselines ?? []), baseline] };\n s = closeIteration(s, phaseId, \"completed\", now);\n return appendEvent(\n s,\n \"phase.baselined\",\n approvedBy[approvedBy.length - 1] ?? \"system\",\n { phase: phaseId, version: baseline.version, approvedBy, items: items.map((i) => i.id) },\n now,\n );\n}\n\nexport interface ReopenResult {\n state: WorkflowState;\n reopened: string[];\n suspended: string | null;\n}\n\n/** Change-control approval: reopen the listed baselined phases; a later open phase is suspended until they are re-baselined. */\nexport function reopenPhases(state: WorkflowState, ids: string[], now: string): ReopenResult {\n const reopened: string[] = [];\n for (const id of ids) {\n const p = getPhase(state, id);\n if (p.status === \"pending\")\n fail(\n \"invalid-input\",\n `phase \"${id}\" was never baselined; there is nothing to reopen`,\n \"remove it from impactAnalysis.reopen\",\n );\n if (p.status === \"baselined\" && !reopened.includes(id)) reopened.push(id);\n }\n let phases = phasesOf(state).map((p) =>\n reopened.includes(p.id) ? { ...p, status: \"reopened\" as const } : p,\n );\n let suspended: string | null = null;\n let s = state;\n if (reopened.length) {\n const earliest = Math.min(...reopened.map((id) => phaseIndex(state, id)));\n const open = phases.find((p, i) => p.status === \"open\" && i > earliest);\n if (open) {\n suspended = open.id;\n phases = phases.map((p) => (p.id === open.id ? { ...p, status: \"reopened\" as const } : p));\n s = closeIteration(s, open.id, \"cancelled\", now);\n }\n }\n return { state: withPhases(s, phases), reopened, suspended };\n}\n","import { getItem, moveItem } from \"../items.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { WorkflowState } from \"../types.ts\";\nimport { reopenPhases } from \"./baseline.ts\";\nimport { DONE } from \"./phases.ts\";\n\nexport function approveChange(\n state: WorkflowState,\n changeId: string,\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n const cr = getItem(state, changeId);\n const ia = cr.impactAnalysis;\n const r = reopenPhases(state, ia?.reopen ?? [], now);\n let s = moveItem(r.state, changeId, { stage: DONE, status: \"done\" }, by, now);\n for (const phase of r.reopened)\n s = appendEvent(s, \"phase.reopened\", by, { phase, change: changeId }, now);\n if (r.suspended !== null)\n s = appendEvent(s, \"phase.suspended\", by, { phase: r.suspended, change: changeId }, now);\n return appendEvent(\n s,\n \"change.decided\",\n by,\n {\n change: changeId,\n decision: \"approve\",\n by,\n note,\n reopened: r.reopened,\n suspended: r.suspended,\n weight: ia?.weight ?? 0,\n affects: cr.affects ?? [],\n },\n now,\n );\n}\n\nexport function rejectChange(\n state: WorkflowState,\n changeId: string,\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n const cr = getItem(state, changeId);\n const s = moveItem(state, changeId, { status: \"dropped\" }, by, now);\n return appendEvent(\n s,\n \"change.decided\",\n by,\n {\n change: changeId,\n decision: \"reject\",\n by,\n note,\n reopened: [],\n suspended: null,\n weight: 0,\n affects: cr.affects ?? [],\n },\n now,\n );\n}\n","import { applyLessonInput, parseLessonInput } from \"../lessons.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { requireCap } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type { Ceremony, Methodology } from \"../types.ts\";\nimport { wantPhase } from \"./ceremonies.ts\";\n\n/** Lessons, adoptions and agreements; never touches items, config or baselines. */\nexport function phaseRetrospective(methodology: () => Methodology): Ceremony {\n return (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const phase =\n input[\"phase\"] === undefined ? undefined : wantPhase(state, input, \"phaseRetrospective\");\n const parsed = parseLessonInput(state, input, \"phaseRetrospective\");\n return applyAction(\n state,\n methodology(),\n { type: \"ceremony.phaseRetrospective\", by: input.by, payload: input },\n (s0) => {\n let s = s0;\n const now = nowOf(input.now);\n const out = applyLessonInput(s, parsed, input.by, now);\n s = out.state;\n return appendEvent(\n s,\n \"phase.retrospective\",\n input.by,\n {\n phase: phase?.id ?? null,\n lessons: out.created,\n adopted: out.adopted.slice(out.created.length),\n dismissed: out.dismissed,\n agreements: out.agreements,\n retired: out.retired,\n },\n now,\n );\n },\n );\n };\n}\n","import { timSort } from \"exsorted\";\nimport type { WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport { itemsInPhase, phasesOf } from \"./phases.ts\";\n\nexport interface TraceRow {\n item: string;\n /** to-phase id → ids of linked items in that phase */\n links: Record<string, string[]>;\n}\nexport interface TraceabilityMatrix {\n from: string;\n to: string[];\n rows: TraceRow[];\n missing: Array<{ item: string; phases: string[] }>;\n coverage: { traced: number; total: number };\n}\n\nconst byId = (a: WorkItem, b: WorkItem) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);\nconst artefacts = (state: WorkflowState, phase: string) =>\n timSort(\n itemsInPhase(state, phase).filter((i) => i.type !== \"question\" && i.type !== \"change-request\"),\n byId,\n );\n\n/** A link exists when either side's `traces` names the other. */\nconst linked = (a: WorkItem, b: WorkItem) =>\n (a.traces ?? []).includes(b.id) || (b.traces ?? []).includes(a.id);\n\nexport function traceabilityMatrix(state: WorkflowState): TraceabilityMatrix {\n const cfg = configOf(state).traceability;\n const order = phasesOf(state).map((p) => p.id);\n const to = cfg.to.filter((t) => order.includes(t));\n const rows: TraceRow[] = artefacts(state, cfg.from).map((f) => {\n const links: Record<string, string[]> = {};\n for (const t of to)\n links[t] = artefacts(state, t)\n .filter((x) => linked(f, x))\n .map((x) => x.id);\n return { item: f.id, links };\n });\n const missing = rows\n .map((r) => ({ item: r.item, phases: to.filter((t) => r.links[t]!.length === 0) }))\n .filter((m) => m.phases.length > 0);\n return {\n from: cfg.from,\n to,\n rows,\n missing,\n coverage: { traced: rows.length - missing.length, total: rows.length },\n };\n}\n\n/** Ids of `from` items with no link into `toPhase`. */\nexport function missingTraces(state: WorkflowState, toPhase: string): string[] {\n return traceabilityMatrix(state)\n .rows.filter((r) => (r.links[toPhase] ?? []).length === 0)\n .map((r) => r.item);\n}\n","import { ZERO_SPENT } from \"../budget.ts\";\nimport { fail } from \"../errors.ts\";\nimport { raisePending } from \"../gates.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { getItem } from \"../items.ts\";\nimport { approverIds, canDo, requireCap, rolesWith } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type {\n Capability,\n Ceremony,\n CeremonyInput,\n Methodology,\n PendingHuman,\n Phase,\n WorkflowState,\n} from \"../types.ts\";\nimport { baselinePhase } from \"./baseline.ts\";\nimport { approveChange, rejectChange } from \"./change.ts\";\nimport { configOf } from \"./config.ts\";\nimport { getPhase, itemsInPhase, lastToPhase, phasesOf, withPhases } from \"./phases.ts\";\nimport { phaseRetrospective } from \"./retro.ts\";\nimport { traceabilityMatrix } from \"./traceability.ts\";\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\n/** input.phase as an existing phase. */\nexport function wantPhase(state: WorkflowState, input: CeremonyInput, ceremony: string): Phase {\n const id = input[\"phase\"];\n if (typeof id !== \"string\" || id.trim() === \"\")\n fail(\n \"invalid-input\",\n `${ceremony} needs phase: string`,\n `pass one of: ${phasesOf(state)\n .map((p) => p.id)\n .join(\", \")}`,\n );\n return getPhase(state, id);\n}\n\n/** Append a deliverable to the phase and record it. */\nfunction recordDeliverable(\n state: WorkflowState,\n phaseId: string,\n kind: string,\n ref: string,\n by: string,\n now: string,\n): WorkflowState {\n const s = withPhases(\n state,\n phasesOf(state).map((p) =>\n p.id === phaseId\n ? { ...p, produced: [...(p.produced ?? []), { kind, ref, by, at: now }] }\n : p,\n ),\n );\n return appendEvent(s, \"phase.deliverable\", by, { phase: phaseId, kind, ref }, now);\n}\n\nexport { approveChange, rejectChange } from \"./change.ts\";\n\nexport function waterfallCeremonies(methodology: () => Methodology): Record<string, Ceremony> {\n const act = (\n state: WorkflowState,\n type: string,\n input: CeremonyInput,\n reduce: (s: WorkflowState, now: string) => WorkflowState,\n ) =>\n applyAction(state, methodology(), { type, by: input.by, payload: input }, (s) =>\n reduce(s, nowOf(input.now)),\n );\n\n const kickoff: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const phase = wantPhase(state, input, \"kickoff\");\n return act(state, \"ceremony.kickoff\", input, (s, now) => {\n const version =\n s.events.filter(\n (e) => e.type === \"phase.opened\" && (e.payload as { phase: string }).phase === phase.id,\n ).length + 1;\n const items = itemsInPhase(s, phase.id)\n .filter((i) => i.status !== \"done\")\n .map((i) => i.id);\n s = withPhases(\n s,\n phasesOf(s).map((p) => (p.id === phase.id ? { ...p, status: \"open\" as const } : p)),\n );\n const budget = phase.budget ?? {};\n s = {\n ...s,\n iterations: [\n ...s.iterations,\n {\n id: `${phase.id}#${version}`,\n goal: phase.name,\n budget,\n spent: ZERO_SPENT,\n startedAt: now,\n committed: items,\n carryover: [],\n },\n ],\n };\n return appendEvent(\n s,\n \"phase.opened\",\n input.by,\n { phase: phase.id, version, items, budget },\n now,\n );\n });\n };\n\n const gateReview: Ceremony = (state, input) => {\n const phase = wantPhase(state, input, \"gateReview\");\n if (phase.status !== \"open\")\n fail(\n \"invalid-transition\",\n `phase \"${phase.id}\" is ${phase.status}, not open`,\n phase.status === \"baselined\"\n ? \"it is already baselined; a change-request reopens it\"\n : `kickoff \"${phase.id}\" first`,\n );\n const gate = phase.gate;\n const approvers = approverIds(state, gate.id, \"approve-gate\");\n if (input.by !== \"human\" && !approvers.includes(input.by))\n fail(\n \"gate-unmet\",\n `\"${input.by}\" may not review gate \"${gate.id}\"`,\n `review as one of: human${approvers.map((r) => `, ${r}`).join(\"\")}`,\n { rule: \"gate\" },\n );\n const already = state.pending.find(\n (p) => p.kind === \"gate\" && p.item === undefined && p.gate === gate.id,\n );\n if (already)\n fail(\n \"no-op\",\n `gate \"${gate.id}\" is already awaiting a decision (${already.id})`,\n `decide ${already.id} approve|reject`,\n );\n const given = input[\"deliverables\"] ?? [];\n if (\n !Array.isArray(given) ||\n !given.every(\n (d) =>\n isObj(d) &&\n typeof d[\"kind\"] === \"string\" &&\n d[\"kind\"].trim() !== \"\" &&\n typeof d[\"ref\"] === \"string\",\n )\n )\n fail(\n \"invalid-input\",\n \"gateReview.deliverables must be [{ kind, ref }]\",\n 'e.g. { \"deliverables\": [{ \"kind\": \"srs\", \"ref\": \"docs/srs.md\" }] }',\n );\n const deliverables = given as Array<{ kind: string; ref: string }>;\n return act(state, \"ceremony.gateReview\", input, (s, now) => {\n for (const d of deliverables)\n s = recordDeliverable(s, phase.id, d.kind, d.ref, input.by, now);\n if (configOf(s).traceability.to.includes(phase.id)) {\n const m = traceabilityMatrix(s);\n s = appendEvent(\n s,\n \"traceability.computed\",\n input.by,\n {\n phase: phase.id,\n from: m.from,\n to: m.to,\n coverage: m.coverage,\n missing: m.missing,\n rows: m.rows,\n },\n now,\n );\n if (phase.id === lastToPhase(s) && m.missing.length === 0)\n s = recordDeliverable(\n s,\n phase.id,\n \"traceability-matrix\",\n `traceability.computed#${s.events[s.events.length - 1]!.seq}`,\n input.by,\n now,\n );\n }\n if (gate.requires.includes(\"human\") && input.by !== \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n gate: gate.id,\n question: `Approve gate \"${gate.id}\" and baseline phase \"${phase.name}\"?`,\n },\n now,\n );\n const pending = s.pending[s.pending.length - 1]!.id;\n return appendEvent(\n s,\n \"phase.gate-pending\",\n input.by,\n { phase: phase.id, gate: gate.id, by: input.by, pending },\n now,\n );\n }\n return baselinePhase(s, phase.id, [input.by], now);\n });\n };\n\n const changeControlBoard: Ceremony = (state, input) => {\n requireCap(state, input.by, \"control-change\");\n const id = input[\"change\"];\n if (typeof id !== \"string\" || id.trim() === \"\")\n fail(\n \"invalid-input\",\n \"changeControlBoard needs change: string (a change-request id)\",\n 'e.g. { \"change\": \"CR-1\", \"decision\": \"approve\", \"note\": \"why\" }',\n );\n const cr = getItem(state, id);\n if (cr.type !== \"change-request\")\n fail(\n \"invalid-input\",\n `item \"${id}\" is a ${cr.type}, not a change-request`,\n \"only change-request items go through the board\",\n { items: [id] },\n );\n if (cr.status === \"done\" || cr.status === \"dropped\")\n fail(\n \"invalid-transition\",\n `change \"${id}\" is already ${cr.status === \"done\" ? \"approved\" : \"rejected\"}`,\n \"raise a new change-request\",\n { items: [id] },\n );\n if (cr.status === \"awaiting_human\") {\n const p = state.pending.find((x) => x.item === id);\n fail(\n \"no-op\",\n `change \"${id}\" is awaiting the human decision${p ? ` (${p.id})` : \"\"}`,\n `decide ${p?.id ?? \"<pending id>\"} approve|reject`,\n { items: [id] },\n );\n }\n const decision = input[\"decision\"];\n if (decision !== \"approve\" && decision !== \"reject\")\n fail(\n \"invalid-input\",\n 'changeControlBoard.decision must be \"approve\" or \"reject\"',\n \"state the board's decision\",\n );\n const note = typeof input[\"note\"] === \"string\" ? input[\"note\"] : \"\";\n const approvers = configOf(state).changeControl.approvers;\n for (const q of approvers) {\n if (\n q === \"human\" ||\n input.by === \"human\" ||\n canDo(state, input.by, q.capability as Capability)\n )\n continue;\n fail(\n \"gate-unmet\",\n `\"${input.by}\" lacks capability \"${q.capability}\" required by change control`,\n `decide as one of: human${rolesWith(state, q.capability as Capability)\n .map((r) => `, ${r.id}`)\n .join(\"\")}`,\n { rule: \"change-control\", items: [id] },\n );\n }\n const needsHuman = approvers.includes(\"human\") && input.by !== \"human\";\n return act(state, \"ceremony.changeControlBoard\", input, (s, now) => {\n if (needsHuman) {\n s = raisePending(\n s,\n {\n kind: \"decision\",\n item: id,\n question: `Change \"${id}\" (${cr.title}): the board (${input.by}) recommends ${decision}${note ? `: ${note}` : \"\"}. Approve or reject the change?`,\n },\n now,\n );\n const pending = s.pending[s.pending.length - 1]!.id;\n return appendEvent(\n s,\n \"change.recommended\",\n input.by,\n { change: id, decision, note, pending },\n now,\n );\n }\n return decision === \"approve\"\n ? approveChange(s, id, input.by, note, now)\n : rejectChange(s, id, input.by, note, now);\n });\n };\n\n return {\n kickoff,\n gateReview,\n changeControlBoard,\n phaseRetrospective: phaseRetrospective(methodology),\n };\n}\n\n/** decide() hook: a phase gate's human decision baselines the phase or records the failure. */\nexport function waterfallAfterDecide(\n state: WorkflowState,\n entry: PendingHuman,\n decision: \"approve\" | \"reject\",\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n if (entry.kind === \"gate\" && entry.item === undefined && entry.gate !== undefined) {\n const phase = phasesOf(state).find((p) => p.gate.id === entry.gate);\n if (!phase) return state;\n // core decide() checks the decider only for item gates; a phase gate pending exists because the gate requires a human\n if (by !== \"human\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide phase gate \"${entry.gate}\" (${entry.id}); it awaits a human`,\n `decide ${entry.id} as human`,\n { rule: \"gate\" },\n );\n let reviewer: string | undefined;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const e = state.events[i]!;\n if (\n e.type === \"phase.gate-pending\" &&\n (e.payload as { pending: string }).pending === entry.id\n ) {\n reviewer = e.by;\n break;\n }\n }\n const approvedBy = reviewer !== undefined && reviewer !== by ? [reviewer, by] : [by];\n if (decision === \"approve\") return baselinePhase(state, phase.id, approvedBy, now);\n return appendEvent(\n state,\n \"phase.gate-failed\",\n by,\n { phase: phase.id, gate: entry.gate, note },\n now,\n );\n }\n if (\n entry.kind === \"decision\" &&\n entry.item !== undefined &&\n Object.hasOwn(state.items, entry.item)\n ) {\n const item = state.items[entry.item]!;\n if (item.type !== \"change-request\") return state;\n if (by !== \"human\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide change \"${item.id}\" (${entry.id}); change control awaits a human`,\n `decide ${entry.id} as human`,\n { rule: \"change-control\", items: [item.id] },\n );\n return decision === \"approve\"\n ? approveChange(state, item.id, by, note, now)\n : rejectChange(state, item.id, by, note, now);\n }\n return state;\n}\n","import type { WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport { traceabilityMatrix } from \"./traceability.ts\";\n\nexport interface WaterfallMetrics {\n phaseCompletion: Record<string, number>;\n budgetPlanned: Record<string, number>;\n budgetSpent: Record<string, number>;\n scheduleVariance: Record<string, number>;\n requirementCoverage: number;\n requirementsTraced: number;\n requirementsTotal: number;\n defectsPerPhase: Record<string, number>;\n changeRequests: number;\n changesApproved: number;\n changesRejected: number;\n changeApprovalRate: number;\n reworkWeight: number;\n phasesReopened: number;\n}\n\ntype Added = { id: string; type: string; phase: string | null; parent: string | null };\n\n/** Phase metrics: membership and spend replayed from events (item.added, item.completed); requirement coverage read live from the traceability matrix. */\nexport function waterfallMetrics(state: WorkflowState): WaterfallMetrics {\n const phases = configOf(state).phases.map((p) => p.id);\n const zero = () => Object.fromEntries(phases.map((p) => [p, 0])) as Record<string, number>;\n const total = zero();\n const done = zero();\n const planned = zero();\n const spent = zero();\n const defects = zero();\n const phaseOf = new Map<string, string | undefined>();\n const typeOf = new Map<string, string>();\n const status = new Map<string, string>();\n let changeRequests = 0;\n let approved = 0;\n let rejected = 0;\n let reworkWeight = 0;\n let phasesReopened = 0;\n const counted = (id: string) => {\n const t = typeOf.get(id);\n const p = phaseOf.get(id);\n return t !== \"question\" && t !== \"change-request\" && p !== undefined && p in total;\n };\n for (const ev of state.events) {\n const p = (ev.payload ?? {}) as Record<string, unknown>;\n switch (ev.type) {\n case \"item.added\": {\n const a = p as Added;\n const phase = a.phase ?? (a.parent !== null ? phaseOf.get(a.parent) : undefined);\n phaseOf.set(a.id, phase);\n typeOf.set(a.id, a.type);\n status.set(a.id, \"todo\");\n if (a.type === \"change-request\") changeRequests += 1;\n if (counted(a.id)) {\n total[phase!]! += 1;\n if (a.type === \"bug\") defects[phase!]! += 1;\n }\n break;\n }\n case \"item.transition\": {\n const id = p[\"id\"] as string;\n const to = (p[\"to\"] as { status: string }).status;\n const was = status.get(id);\n status.set(id, to);\n if (!counted(id)) break;\n const phase = phaseOf.get(id)!;\n if (to === \"done\" && was !== \"done\") done[phase]! += 1;\n if (to === \"dropped\") {\n total[phase]! -= 1;\n if (was === \"done\") done[phase]! -= 1;\n }\n break;\n }\n case \"item.completed\": {\n const phase = phaseOf.get(p[\"id\"] as string);\n if (phase !== undefined && phase in spent) spent[phase]! += (p[\"tokens\"] as number) ?? 0;\n break;\n }\n case \"phase.opened\": {\n const phase = p[\"phase\"] as string;\n if (phase in planned)\n planned[phase] = ((p[\"budget\"] as { tokens?: number }) ?? {}).tokens ?? 0;\n break;\n }\n case \"change.decided\": {\n if (p[\"decision\"] === \"approve\") {\n approved += 1;\n reworkWeight += (p[\"weight\"] as number) ?? 0;\n phasesReopened += ((p[\"reopened\"] as string[]) ?? []).length;\n } else rejected += 1;\n break;\n }\n default:\n break;\n }\n }\n const completion = zero();\n const variance = zero();\n for (const ph of phases) {\n const n = total[ph] ?? 0;\n completion[ph] = n === 0 ? 0 : ((done[ph] ?? 0) / n) * 100;\n variance[ph] = spent[ph]! - planned[ph]!;\n }\n const { traced, total: reqTotal } = traceabilityMatrix(state).coverage;\n const decided = approved + rejected;\n return {\n phaseCompletion: completion,\n budgetPlanned: planned,\n budgetSpent: spent,\n scheduleVariance: variance,\n requirementCoverage: reqTotal === 0 ? 0 : traced / reqTotal,\n requirementsTraced: traced,\n requirementsTotal: reqTotal,\n defectsPerPhase: defects,\n changeRequests,\n changesApproved: approved,\n changesRejected: rejected,\n changeApprovalRate: decided === 0 ? 0 : approved / decided,\n reworkWeight,\n phasesReopened,\n };\n}\n","import type { Role } from \"../types.ts\";\nimport { CHANGE_GATE, type WaterfallConfig } from \"./config.ts\";\n\n/** Order matters: the first role with \"deliver\" is the fallback deliverer for phases without deliverBy. */\nexport function waterfallRoles(config: WaterfallConfig): Role[] {\n const gates = config.phases.map((p) => p.gate.id);\n return [\n {\n id: \"project-manager\",\n name: \"Project Manager\",\n modelTier: \"large\",\n capabilities: [\"facilitate\", \"control-change\", \"approve-gate\", \"escalate\"],\n canApprove: [...gates, CHANGE_GATE],\n inputs: [\"phase-plan\", \"deliverables\", \"change-requests\"],\n outputs: [\"gate-decisions\", \"baselines\", \"change-decisions\"],\n do_not: [\n \"do not implement items yourself\",\n \"do not reopen a phase without an approved change-request\",\n ],\n },\n {\n id: \"developer\",\n name: \"Developer\",\n modelTier: \"small\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"design-doc\", \"interface-spec\", \"brief\"],\n outputs: [\"code\", \"code-baseline\", \"test-output\"],\n do_not: [\n \"do not change requirements or designs; raise a change-request\",\n \"do not approve your own work\",\n ],\n },\n {\n id: \"business-analyst\",\n name: \"Business Analyst\",\n modelTier: \"medium\",\n capabilities: [\"define-acceptance\", \"deliver\"],\n canApprove: [],\n inputs: [\"stakeholder-needs\"],\n outputs: [\"srs\", \"acceptance-criteria\"],\n do_not: [\n \"do not design or implement\",\n \"do not edit a baselined requirement; raise a change-request\",\n ],\n },\n {\n id: \"architect\",\n name: \"Architect\",\n modelTier: \"medium\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"srs\"],\n outputs: [\"design-doc\", \"interface-spec\"],\n do_not: [\"do not change requirements; raise a change-request\", \"do not implement\"],\n },\n {\n id: \"qa\",\n name: \"QA\",\n modelTier: \"small\",\n capabilities: [\"verify\", \"review\"],\n canApprove: [],\n inputs: [\"srs\", \"design-doc\", \"code-baseline\"],\n outputs: [\"test-report\", \"review-notes\"],\n do_not: [\"do not fix defects yourself; raise bugs\", \"do not approve phase gates\"],\n },\n {\n id: \"release-manager\",\n name: \"Release Manager\",\n modelTier: \"small\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"code-baseline\", \"test-report\"],\n outputs: [\"release-notes\", \"deployment-record\"],\n do_not: [\"do not deploy an unbaselined verification phase\"],\n },\n ];\n}\n","import { authorOf } from \"../gates.ts\";\nimport { approverIds, rolesWith } from \"../roles.ts\";\nimport type { Action, NewItem, Phase, Rule, Violation, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport {\n itemsInPhase,\n lastToPhase,\n missingDeliverables,\n openPhase,\n phaseOf,\n phasesOf,\n} from \"./phases.ts\";\nimport { missingTraces } from \"./traceability.ts\";\n\nconst v = (rule: string, message: string, fix: string, item?: string): Violation =>\n item\n ? { rule, severity: \"error\", item, message, fix }\n : { rule, severity: \"error\", message, fix };\nconst payloadOf = (a: Action): Record<string, unknown> =>\n (a.payload ?? {}) as Record<string, unknown>;\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst phaseArg = (a: Action): string | undefined => {\n const p = payloadOf(a)[\"phase\"];\n return typeof p === \"string\" ? p : undefined;\n};\nconst phaseById = (s: WorkflowState, id: string): Phase | undefined =>\n phasesOf(s).find((p) => p.id === id);\nconst phaseIds = (s: WorkflowState) =>\n phasesOf(s)\n .map((p) => p.id)\n .join(\", \");\nconst itemById = (s: WorkflowState, id: unknown) =>\n typeof id === \"string\" && Object.hasOwn(s.items, id) ? s.items[id] : undefined;\n\n/** Phase a NewItem would land in: its own, else its parent's. */\nfunction phaseOfNew(s: WorkflowState, item: NewItem): string | undefined {\n if (item.phase !== undefined) return item.phase;\n const parent = itemById(s, item.parent);\n return parent ? phaseOf(s, parent) : undefined;\n}\nconst governed = (item: NewItem) => item.type !== \"change-request\" && item.type !== \"question\";\n\nconst frozenFix = (item: string, phase: string) =>\n `raise a change-request: addItem({ type: \"change-request\", affects: [\"${item}\"], impactAnalysis: { summary, reopen: [\"${phase}\"], weight } }) and decide it in changeControlBoard`;\n\nfunction changeOf(s: WorkflowState, a: Action) {\n const item = itemById(s, payloadOf(a)[\"change\"]);\n return item && item.type === \"change-request\" ? item : undefined;\n}\n\n/** Shape check shared by add/edit and the change control board. */\nfunction impactShape(s: WorkflowState, id: string, ia: unknown): Violation[] {\n const rule = \"change-needs-impact-analysis\";\n const fix = `editItem(\"${id}\", { impactAnalysis: { summary: \"what changes and why\", reopen: [\"<phase>\"], weight: <points> } })`;\n if (ia === undefined) {\n return configOf(s).changeControl.requiresImpactAnalysis\n ? [v(rule, `change \"${id}\" has no impact analysis`, fix, id)]\n : [];\n }\n const out: Violation[] = [];\n const o = isObj(ia) ? ia : {};\n if (typeof o[\"summary\"] !== \"string\" || o[\"summary\"].trim() === \"\")\n out.push(v(rule, `change \"${id}\" impactAnalysis.summary is empty`, fix, id));\n if (!Array.isArray(o[\"reopen\"]) || !o[\"reopen\"].every((x) => typeof x === \"string\"))\n out.push(\n v(rule, `change \"${id}\" impactAnalysis.reopen must be a string[] of phase ids`, fix, id),\n );\n if (typeof o[\"weight\"] !== \"number\" || !Number.isFinite(o[\"weight\"]) || o[\"weight\"] < 0)\n out.push(\n v(rule, `change \"${id}\" impactAnalysis.weight must be a non-negative number`, fix, id),\n );\n return out;\n}\n\nexport function waterfallRules(): Rule[] {\n const sequential: Rule = {\n id: \"phase-sequential\",\n severity: \"error\",\n check(s, a) {\n const out: Violation[] = [];\n if (a.type === \"ceremony.kickoff\") {\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n if (p.status === \"open\")\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${p.id}\" is already open`,\n `gateReview \"${p.id}\" when its work is done`,\n ),\n );\n if (p.status === \"baselined\")\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${p.id}\" is baselined`,\n \"only an approved change-request reopens a baselined phase\",\n ),\n );\n const open = openPhase(s);\n if (open && open.id !== p.id)\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${open.id}\" is still open`,\n `pass its gate (gateReview \"${open.id}\") before opening \"${p.id}\"`,\n ),\n );\n } else if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || !governed(item)) return [];\n const phase = phaseOfNew(s, item);\n if (phase === undefined)\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" belongs to no phase`,\n `set phase to one of: ${phaseIds(s)}`,\n item.id,\n ),\n );\n else if (!phaseById(s, phase))\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" names unknown phase \"${phase}\"`,\n `phases are: ${phaseIds(s)}`,\n item.id,\n ),\n );\n } else if (a.type === \"item.edit\") {\n const id = payloadOf(a)[\"id\"];\n const patch = payloadOf(a)[\"patch\"];\n const item = itemById(s, id);\n if (!item || !isObj(patch) || patch[\"phase\"] === undefined || patch[\"phase\"] === item.phase)\n return [];\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" cannot move from phase \"${item.phase ?? \"(none)\"}\" to \"${String(patch[\"phase\"])}\"`,\n `drop \"${item.id}\" and add a new item in phase \"${String(patch[\"phase\"])}\"`,\n item.id,\n ),\n );\n }\n return out;\n },\n };\n\n const gateBefore: Rule = {\n id: \"gate-before-next-phase\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.kickoff\") return [];\n const id = phaseArg(a);\n const phases = phasesOf(s);\n const idx = id === undefined ? -1 : phases.findIndex((p) => p.id === id);\n if (idx < 0) return [];\n const earlier = phases\n .slice(0, idx)\n .filter((p) => p.status !== \"baselined\")\n .map((p) => p.id);\n if (earlier.length === 0) return [];\n return [\n v(\n \"gate-before-next-phase\",\n `phase(s) ${earlier.join(\", \")} before \"${id}\" are not baselined`,\n `kickoff and gateReview them in order, starting with \"${earlier[0]}\"`,\n ),\n ];\n },\n };\n\n const immutable: Rule = {\n id: \"baseline-immutable\",\n severity: \"error\",\n check(s, a) {\n const version = (phase: string) =>\n (s.baselines ?? []).filter((b) => b.phase === phase).length || 1;\n if (a.type === \"item.edit\") {\n const item = itemById(s, payloadOf(a)[\"id\"]);\n if (!item) return [];\n const phase = phaseOf(s, item);\n if (phase === undefined || phaseById(s, phase)?.status !== \"baselined\") return [];\n return [\n v(\n \"baseline-immutable\",\n `item \"${item.id}\" is frozen: phase \"${phase}\" is baselined (v${version(phase)})`,\n frozenFix(item.id, phase),\n item.id,\n ),\n ];\n }\n if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || !governed(item)) return [];\n const phase = phaseOfNew(s, item);\n if (phase === undefined || phaseById(s, phase)?.status !== \"baselined\") return [];\n return [\n v(\n \"baseline-immutable\",\n `cannot add \"${item.id}\" to baselined phase \"${phase}\" (v${version(phase)})`,\n frozenFix(item.id, phase),\n item.id,\n ),\n ];\n }\n return [];\n },\n };\n\n const impact: Rule = {\n id: \"change-needs-impact-analysis\",\n severity: \"error\",\n check(s, a) {\n if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || item.type !== \"change-request\") return [];\n return impactShape(s, String(item.id), item.impactAnalysis);\n }\n if (a.type === \"item.edit\") {\n const patch = payloadOf(a)[\"patch\"];\n const cr = itemById(s, payloadOf(a)[\"id\"]);\n if (!cr || cr.type !== \"change-request\" || !isObj(patch) || !(\"impactAnalysis\" in patch))\n return [];\n return impactShape(s, cr.id, patch[\"impactAnalysis\"]);\n }\n if (a.type !== \"ceremony.changeControlBoard\") return [];\n const cr = changeOf(s, a);\n if (!cr) return [];\n const out = impactShape(s, cr.id, cr.impactAnalysis);\n if (out.length || cr.impactAnalysis === undefined) return out;\n const approve = payloadOf(a)[\"decision\"] === \"approve\";\n for (const id of cr.impactAnalysis.reopen) {\n const p = phaseById(s, id);\n if (!p)\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.reopen names unknown phase \"${id}\"`,\n `phases are: ${phaseIds(s)}`,\n cr.id,\n ),\n );\n else if (approve && p.status === \"pending\")\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `phase \"${id}\" was never baselined; it cannot be reopened`,\n `remove \"${id}\" from impactAnalysis.reopen`,\n cr.id,\n ),\n );\n }\n return out;\n },\n };\n\n const traceIds: Rule = {\n id: \"trace-ids-valid\",\n severity: \"error\",\n check(s, a) {\n let id: string;\n let traces: unknown;\n let ia: unknown;\n let isCr: boolean;\n if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item)) return [];\n id = String(item.id);\n traces = item.traces;\n ia = item.impactAnalysis;\n isCr = item.type === \"change-request\";\n } else if (a.type === \"item.edit\") {\n const cur = itemById(s, payloadOf(a)[\"id\"]);\n const patch = payloadOf(a)[\"patch\"];\n if (!cur || !isObj(patch)) return [];\n id = cur.id;\n traces = patch[\"traces\"];\n ia = patch[\"impactAnalysis\"];\n isCr = cur.type === \"change-request\";\n } else return [];\n const out: Violation[] = [];\n if (Array.isArray(traces)) {\n const cfg = configOf(s).traceability;\n const ok = [cfg.from, ...cfg.to].flatMap((p) =>\n itemsInPhase(s, p)\n .filter((i) => i.type !== \"question\" && i.type !== \"change-request\")\n .map((i) => i.id),\n );\n const fix = `traceable items: ${ok.length ? ok.join(\", \") : \"(none yet)\"}`;\n for (const t of traces) {\n if (typeof t !== \"string\") continue;\n const target = itemById(s, t);\n if (!target || target.status === \"dropped\")\n out.push(v(\"trace-ids-valid\", `item \"${id}\" traces unknown item \"${t}\"`, fix, id));\n }\n }\n if (isCr && isObj(ia) && Array.isArray(ia[\"reopen\"])) {\n for (const r of ia[\"reopen\"]) {\n if (typeof r === \"string\" && !phaseById(s, r))\n out.push(\n v(\n \"trace-ids-valid\",\n `change \"${id}\" impactAnalysis.reopen names unknown phase \"${r}\"`,\n `phases are: ${phaseIds(s)}`,\n id,\n ),\n );\n }\n }\n return out;\n },\n };\n\n const traced: Rule = {\n id: \"requirement-traced\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.gateReview\") return [];\n const id = phaseArg(a);\n const cfg = configOf(s).traceability;\n if (id === undefined || !cfg.to.includes(id) || !phaseById(s, id)) return [];\n return missingTraces(s, id).map((item) =>\n v(\n \"requirement-traced\",\n `item \"${item}\" of phase \"${cfg.from}\" has no trace into \"${id}\"`,\n `editItem a \"${id}\" item with traces: [\"${item}\"] (or editItem(\"${item}\", { traces: [...] }) while \"${cfg.from}\" is not baselined)`,\n item,\n ),\n );\n },\n };\n\n const deliverables: Rule = {\n id: \"deliverables-present\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.gateReview\") return [];\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n const out: Violation[] = [];\n const open = itemsInPhase(s, p.id)\n .filter((i) => i.status !== \"done\")\n .map((i) => i.id);\n if (open.length)\n out.push(\n v(\n \"deliverables-present\",\n `${open.length} item(s) in phase \"${p.id}\" are not done: ${open.join(\", \")}`,\n \"finish them (next/complete) or drop them before the gate\",\n ),\n );\n const given = payloadOf(a)[\"deliverables\"];\n const extra = Array.isArray(given)\n ? given\n .filter((d) => isObj(d) && typeof d[\"kind\"] === \"string\")\n .map((d) => (d as { kind: string }).kind)\n : [];\n if (p.id === lastToPhase(s)) extra.push(\"traceability-matrix\");\n for (const kind of missingDeliverables(s, p, extra))\n out.push(\n v(\n \"deliverables-present\",\n `phase \"${p.id}\" has no deliverable \"${kind}\"`,\n `pass deliverables: [{ \"kind\": \"${kind}\", \"ref\": \"<where it lives>\" }] to gateReview, or attach evidence of kind \"${kind}\" on an item of the phase`,\n ),\n );\n return out;\n },\n };\n\n const notAuthor: Rule = {\n id: \"approver-not-author\",\n severity: \"error\",\n check(s, a) {\n if (a.by === \"human\") return [];\n if (a.type === \"ceremony.gateReview\") {\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n const mine = itemsInPhase(s, p.id)\n .filter((i) => authorOf(s, i) === a.by)\n .map((i) => i.id);\n if (mine.length === 0) return [];\n const others = approverIds(s, p.gate.id, \"approve-gate\", a.by);\n return [\n v(\n \"approver-not-author\",\n `\"${a.by}\" authored ${mine.join(\", \")} in phase \"${p.id}\" and may not approve its gate`,\n `review the gate as one of: human${others.map((r) => `, ${r}`).join(\"\")}`,\n ),\n ];\n }\n if (a.type === \"ceremony.changeControlBoard\") {\n const cr = changeOf(s, a);\n if (!cr) return [];\n const added = s.events.find(\n (e) => e.type === \"item.added\" && (e.payload as { id: string }).id === cr.id,\n );\n if (!added || added.by !== a.by) return [];\n const others = rolesWith(s, \"control-change\")\n .map((r) => r.id)\n .filter((r) => r !== a.by);\n return [\n v(\n \"approver-not-author\",\n `\"${a.by}\" raised change \"${cr.id}\" and may not decide it`,\n `decide as human${others.map((r) => `, ${r}`).join(\"\")}`,\n cr.id,\n ),\n ];\n }\n return [];\n },\n };\n\n return [sequential, gateBefore, immutable, impact, traced, deliverables, notAuthor, traceIds];\n}\n","import type { Stage } from \"../types.ts\";\nimport type { WaterfallConfig } from \"./config.ts\";\nimport { DONE, REVIEW, WORK } from \"./phases.ts\";\n\n/** Every phase's items share the same three steps; the phase is the unit of governance. */\nexport function waterfallStages(_config: WaterfallConfig): Stage[] {\n return [\n { id: WORK, name: \"Work\", entryPolicy: [{ kind: \"dependencies-done\" }], exitPolicy: [] },\n {\n id: REVIEW,\n name: \"Review\",\n entryPolicy: [],\n exitPolicy: [{ kind: \"no-open-blockers\" }],\n review: true,\n },\n { id: DONE, name: \"Done\", entryPolicy: [], exitPolicy: [] },\n ];\n}\n","import { addSpent } from \"../budget.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport type { CoreTerm, Methodology, PlannerOptions, WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf, validateWaterfallConfig, type WaterfallConfig } from \"./config.ts\";\nimport {\n REVIEW,\n WORK,\n currentPhase,\n itemsInPhase,\n lastToPhase,\n missingDeliverables,\n openPhase,\n phaseIndex,\n phaseOf,\n phasesOf,\n} from \"./phases.ts\";\nimport { waterfallAfterDecide, waterfallCeremonies } from \"./ceremonies.ts\";\nimport { waterfallMetrics } from \"./metrics.ts\";\nimport { waterfallRoles } from \"./roles.ts\";\nimport { waterfallRules } from \"./rules.ts\";\nimport { waterfallStages } from \"./stages.ts\";\nimport { missingTraces, traceabilityMatrix } from \"./traceability.ts\";\n\nexport {\n validateWaterfallConfig,\n configOf,\n defaultPhases,\n DEFAULT_PHASE_IDS,\n DEFAULT_DELIVERABLES,\n DEFAULT_DELIVER_BY,\n GATE_ID,\n CHANGE_GATE,\n} from \"./config.ts\";\nexport type { WaterfallConfig, WaterfallPhaseConfig } from \"./config.ts\";\nexport {\n WORK,\n REVIEW,\n DONE,\n phasesOf,\n withPhases,\n getPhase,\n phaseIndex,\n phaseOf,\n itemsInPhase,\n openPhase,\n currentPhase,\n isFrozen,\n producedKinds,\n missingDeliverables,\n lastToPhase,\n} from \"./phases.ts\";\nexport { waterfallStages } from \"./stages.ts\";\nexport { waterfallRoles } from \"./roles.ts\";\nexport { waterfallRules } from \"./rules.ts\";\nexport { waterfallMetrics } from \"./metrics.ts\";\nexport type { WaterfallMetrics } from \"./metrics.ts\";\nexport {\n waterfallCeremonies,\n waterfallAfterDecide,\n wantPhase,\n approveChange,\n rejectChange,\n} from \"./ceremonies.ts\";\nexport { traceabilityMatrix, missingTraces } from \"./traceability.ts\";\nexport type { TraceabilityMatrix, TraceRow } from \"./traceability.ts\";\nexport { baselinePhase, reopenPhases } from \"./baseline.ts\";\nexport type { ReopenResult } from \"./baseline.ts\";\n\nexport const WATERFALL_VOCABULARY: Record<CoreTerm, string> = {\n backlog: \"Requirements Baseline\",\n item: \"Work Package\",\n stage: \"Step\",\n iteration: \"Phase\",\n increment: \"Deliverable\",\n ceremony: \"Review\",\n gate: \"Phase Gate\",\n};\n\n/** The role that delivers the item's phase (config deliverBy); undefined = the planner's default deliverer. */\nexport function deliverRoleFor(state: WorkflowState, item: WorkItem): string | undefined {\n const id = phaseOf(state, item);\n if (id === undefined) return undefined;\n return configOf(state).phases.find((p) => p.id === id)?.deliverBy;\n}\n\nexport interface PhaseReportRow {\n id: string;\n name: string;\n status: string;\n items: number;\n done: number;\n missingDeliverables: string[];\n missingTraces: string[];\n readyForGate: boolean;\n}\nexport interface PhaseReport {\n phases: PhaseReportRow[];\n current: string | null;\n open: string | null;\n pendingGates: Array<{ pending: string; gate: string }>;\n}\n\nexport function phaseReport(state: WorkflowState): PhaseReport {\n const phases = phasesOf(state).map((p) => {\n const items = itemsInPhase(state, p.id);\n const done = items.filter((i) => i.status === \"done\").length;\n const toPhase = configOf(state).traceability.to.includes(p.id);\n const traces = toPhase ? missingTraces(state, p.id) : [];\n // the gate generates the matrix for the last `to` phase once every trace is present\n const extra = p.id === lastToPhase(state) && traces.length === 0 ? [\"traceability-matrix\"] : [];\n const missing = missingDeliverables(state, p, extra);\n return {\n id: p.id,\n name: p.name,\n status: p.status,\n items: items.length,\n done,\n missingDeliverables: missing,\n missingTraces: traces,\n readyForGate:\n p.status === \"open\" && done === items.length && missing.length === 0 && traces.length === 0,\n };\n });\n return {\n phases,\n current: currentPhase(state)?.id ?? null,\n open: openPhase(state)?.id ?? null,\n pendingGates: state.pending\n .filter((p) => p.kind === \"gate\" && p.item === undefined && p.gate !== undefined)\n .map((p) => ({ pending: p.id, gate: p.gate! })),\n };\n}\n\nexport function waterfall(): Methodology<WaterfallConfig> {\n return {\n name: \"waterfall\",\n vocabulary: WATERFALL_VOCABULARY,\n validateConfig: validateWaterfallConfig,\n defaultStages: waterfallStages,\n defaultRoles: waterfallRoles,\n requiredCapabilities: [\"facilitate\", \"control-change\", \"approve-gate\", \"deliver\", \"verify\"],\n exclusiveCapabilities: [],\n plannerOptions(state): PlannerOptions {\n const po: PlannerOptions = {\n schedulerMode: \"level\",\n // questions keep the escalation role core gave them; reviews use the planner's reviewer logic\n roleFor: (item) =>\n item.status === \"todo\" && item.type !== \"question\"\n ? deliverRoleFor(state, item)\n : undefined,\n };\n const fallback = configOf(state).fallbackTokensPerWeight;\n if (fallback !== undefined) po.fallbackTokensPerWeight = fallback;\n return po;\n },\n candidates(state): WorkItem[] {\n const open = openPhase(state);\n if (!open) return [];\n return Object.values(state.items).filter(\n (i) =>\n (i.status === \"todo\" || i.status === \"review\") &&\n (i.stage === WORK || i.stage === REVIEW) &&\n i.type !== \"change-request\" &&\n phaseOf(state, i) === open.id,\n );\n },\n invariants(state, item): string[] {\n const cfg = configOf(state);\n const phases = phasesOf(state);\n const id = phaseOf(state, item);\n const p = id === undefined ? undefined : phases[phaseIndex(state, id)];\n const frozen = phases.filter((x) => x.status === \"baselined\").map((x) => x.id);\n const human = p?.gate.requires.includes(\"human\");\n return [\n p\n ? `Phase \"${p.name}\" (${phaseIndex(state, p.id) + 1}/${phases.length}); deliverables: ${p.deliverables.join(\", \") || \"(none)\"}; gate \"${p.gate.id}\"${human ? \" needs human approval\" : \"\"}`\n : \"This item belongs to no phase; it is dispatched only through its parent's phase\",\n `Baselined phases are frozen: ${frozen.join(\", \") || \"(none yet)\"}; to change their items, raise a change-request with an impact analysis`,\n cfg.traceability.to.length\n ? `Traceability: every item of phase \"${cfg.traceability.from}\" must trace to an item in ${cfg.traceability.to.join(\", \")} (set traces on either side)`\n : \"Traceability: none configured\",\n `Do not change the scope of \"${item.id}\" or its acceptance criteria; raise open_questions instead`,\n ];\n },\n ceremonies: waterfallCeremonies(waterfall),\n rules: waterfallRules(),\n metrics: (state) => ({ ...waterfallMetrics(state) }),\n humanDefaults: { gates: \"all\" },\n lockedConfigKeys: [\"phases\", \"traceability\", \"humanGates\"],\n report: (state) => ({ ...phaseReport(state), coverage: traceabilityMatrix(state).coverage }),\n afterDecide: waterfallAfterDecide,\n afterComplete(state, itemId, _now) {\n // an item added to the phase after kickoff is not in the iteration's committed list: count its spend now\n const it = openIteration(state);\n const open = openPhase(state);\n if (!it || !open || it.committed.includes(itemId)) return state;\n const item = state.items[itemId];\n if (!item || phaseOf(state, item) !== open.id) return state;\n const acc = state.accounting[state.accounting.length - 1];\n if (!acc || acc.item !== itemId) return state;\n return {\n ...state,\n iterations: state.iterations.map((x) =>\n x.id === it.id\n ? { ...x, committed: [...x.committed, itemId], spent: addSpent(x.spent, acc) }\n : x,\n ),\n };\n },\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkXMO2RCXB_cjs=require('./chunk-XMO2RCXB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs');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){e.role||chunkS3BXVHO7_cjs.b("unknown-role",`item "${e.id}" has no role assigned`,"dispatch it with next() or set item.role",{items:[e.id]});let n=chunkXMO2RCXB_cjs.e(r,e.role);n||chunkS3BXVHO7_cjs.b("unknown-role",`role "${e.role}" does not exist`,`registered roles: ${Object.keys(r.roles).join(", ")}`);let m=[],a=[...n.do_not],i=[...e.dependsOn,...e.type==="bug"||e.type==="change-request"?e.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.id).map(o=>({role:o.role,verdict:o.verdict,notes:o.notes,produced:o.produced,at:o.at})),t=new Set([e.id,...e.dependsOn]),p=Object.values(r.items).filter(o=>(o.type==="bug"||o.type==="change-request")&&o.id!==e.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??[]})),$=chunkXMO2RCXB_cjs.R(r),f=chunkXMO2RCXB_cjs.p(r,e.stage).gate,y={item:e,role:n,modelTier:n.modelTier,invariants:[...s.invariants(r,e),...r.agreements],do_not:a,acceptance:e.acceptance,upstream:m,priorHandoffs:l,relatedBugs:p,budgetRemaining:$?chunkXMO2RCXB_cjs.O($.budget,$.spent):{}};if(f&&(y.gateAhead=f),e.type==="question"&&e.parent){let o=J(r,e.parent);if(o){y.parent={item:e.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=chunkXMO2RCXB_cjs.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=chunkXMO2RCXB_cjs.u(r,s.item);n.status!=="in_progress"&&chunkS3BXVHO7_cjs.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)||chunkS3BXVHO7_cjs.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))&&chunkS3BXVHO7_cjs.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)=>chunkS3BXVHO7_cjs.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&&chunkS3BXVHO7_cjs.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()==="")&&chunkS3BXVHO7_cjs.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)&&chunkS3BXVHO7_cjs.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&&chunkS3BXVHO7_cjs.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 chunkXMO2RCXB_cjs.H(r,s)?.from.stage??Y(s)}function be(r,s,e,n,m){te(r,e,n);let a,i=chunkXMO2RCXB_cjs.Y(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,e,n,m){let a=chunkXMO2RCXB_cjs.a(m),i=e.item,l=e.role,t={...r,accounting:[...r.accounting,n]};for(let o of e.produced)t=chunkXMO2RCXB_cjs.y(t,i,{kind:o.kind,ref:o.ref,by:l},a);let p=chunkXMO2RCXB_cjs.R(t);p&&(p.committed.includes(i)||chunkXMO2RCXB_cjs.u(t,i).iteration===p.id)&&(t={...t,iterations:t.iterations.map(o=>o.id===p.id?{...o,spent:chunkXMO2RCXB_cjs.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,text:o.text,scope:o.scope,status:"raised",from:l,item:i}]},t=chunkXMO2RCXB_cjs.c(t,"lesson.raised",l,{id:d,from:l,item:i,scope:o.scope},a);}let $=[];for(let o of e.follow_ups??[]){let d=t.stages[0],{iteration:g,...k}=o;t=chunkXMO2RCXB_cjs.v(t,{...k,stage:d.id,parent:i,tags:[...o.tags??[],"follow-up"]},l,a),$.push(o.id);}let f=e.verdict??"done",y=[];if((f==="done"||f==="needs-review")&&e.open_questions.length>0&&y.push({rule:"open-questions-ignored",severity:"warning",item:i,message:`"${i}" 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()==="")&&chunkS3BXVHO7_cjs.b("handoff-invalid",`rework on "${i}" needs notes`,"say what must change in handoff.notes",{items:[i]});let o=chunkXMO2RCXB_cjs.u(t,i);t=chunkXMO2RCXB_cjs.B(chunkXMO2RCXB_cjs.x(t,i,{stage:oe(t,o),status:"todo"},l,a),i),t=chunkXMO2RCXB_cjs.c(t,"item.rework",l,{id:i,by:l,notes:e.notes},a);}else if((f==="done"||f==="needs-review")&&chunkXMO2RCXB_cjs.u(t,i).type==="question"){let o=t.stages[t.stages.length-1].id;t=chunkXMO2RCXB_cjs.x(t,i,{stage:o,status:"done"},l,a);}else if(f==="done"||f==="needs-review"){let o=chunkXMO2RCXB_cjs.u(t,i),d=chunkXMO2RCXB_cjs.p(t,o.stage);if(chunkXMO2RCXB_cjs.G(t,o,d.exitPolicy,`leave "${d.id}"`),d.gate){let g=chunkXMO2RCXB_cjs.J(t,o,d.gate,l);g.outcome==="fail"&&chunkS3BXVHO7_cjs.b("gate-unmet",`gate "${d.gate.id}" blocks "${i}": ${g.violations.map(k=>k.message).join("; ")}`,g.violations.map(k=>k.fix).join("; "),{items:[i],rule:g.violations[0].rule}),g.outcome==="human"?t=chunkXMO2RCXB_cjs.K(t,{kind:"gate",item:i,gate:d.gate.id,question:`Approve gate "${d.gate.id}" for "${o.title}" (${i})?`},a):t=chunkXMO2RCXB_cjs.c(chunkXMO2RCXB_cjs.C(t,i,l,f==="needs-review",a),"gate.passed",l,{item:i,gate:d.gate.id},a);}else t=chunkXMO2RCXB_cjs.C(t,i,l,f==="needs-review",a);}else if(f==="blocked")t=chunkXMO2RCXB_cjs.z(t,i,e.notes||"blocked by worker",l,l,a);else if(f==="escalate"){let o=chunkXMO2RCXB_cjs.i(t,"escalate")[0];o||chunkS3BXVHO7_cjs.b("missing-capability",`no role has capability "escalate" to receive the question from "${i}"`,"register a role with capability escalate",{items:[i]});let d=Object.keys(t.items).filter(w=>w.startsWith(`${i}-q`)).length+1,g=`${i}-q${d}`,k=chunkXMO2RCXB_cjs.u(t,i),O=Y(k),b={id:g,type:"question",title:e.open_questions.join(" | ")||e.notes||`question from ${i}`,parent:i,role:o.id,priority:Number.MAX_SAFE_INTEGER,stage:O};k.iteration!==void 0&&(b.iteration=k.iteration),t=chunkXMO2RCXB_cjs.v(t,b,l,a),t=chunkXMO2RCXB_cjs.x(t,i,{stage:O,status:"todo"},l,a),t=chunkXMO2RCXB_cjs.s(t,i,w=>({...w,dependsOn:[...w.dependsOn,g]})),t=chunkXMO2RCXB_cjs.c(t,"item.escalated",l,{id:i,question:g,to:o.id},a);}return t=chunkXMO2RCXB_cjs.c(t,"item.completed",l,{id:i,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),s.afterComplete&&(t=s.afterComplete(t,i,a)),{state:t,warnings:y}}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){chunkXMO2RCXB_cjs.u(r,s);let i=[];r.accounting.forEach((u,A)=>{u.item===s&&i.push(A);}),i.length===0&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${s}" has no accounting line to correct`,`complete "${s}" first (exwf complete), then exwf account`,{items:[s]});let l=a??i.length;(!Number.isInteger(l)||l<1||l>i.length)&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${s}" has ${i.length} accounting line(s), not line ${String(a)}`,`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)&&chunkS3BXVHO7_cjs.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()===""&&chunkS3BXVHO7_cjs.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&&chunkS3BXVHO7_cjs.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&&chunkS3BXVHO7_cjs.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;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=u);let w={...r,accounting:r.accounting.map((u,A)=>A===t?y:u)};return b&&(w={...w,iterations:w.iterations.map(u=>u.id===b.id?{...u,spent:{...u.spent,tokens:Math.max(0,u.spent.tokens+k.tokens),wallclockMs:Math.max(0,u.spent.wallclockMs+k.durationMs)}}:u)}),chunkXMO2RCXB_cjs.c(w,"accounting.corrected",n,{item:s,line:l,iteration:b?.id??null,before:o,after:d,delta:k},chunkXMO2RCXB_cjs.a(m))}exports.a=ee;exports.b=ce;exports.c=ue;exports.d=be;exports.e=qe;//# sourceMappingURL=chunk-5PHK72VM.cjs.map
2
+ //# sourceMappingURL=chunk-5PHK72VM.cjs.map
@@ -0,0 +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-5PHK72VM.cjs","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"]}
@@ -0,0 +1,3 @@
1
+ import {b}from'./chunk-2FRRD6A3.mjs';var f={Accounting:{type:"object",properties:{item:{type:"string"},role:{type:"string"},model:{type:"string"},tokensIn:{type:"number"},tokensOut:{type:"number"},durationMs:{type:"number"},startedAt:{type:"string"},endedAt:{type:"string"},estimate:{type:"boolean"}},required:["item","role","model","tokensIn","tokensOut","durationMs","startedAt","endedAt"],additionalProperties:false},Baseline:{type:"object",properties:{phase:{type:"string"},version:{type:"number"},at:{type:"string"},approvedBy:{type:"array",items:{type:"string"}},itemSnapshot:{type:"object",additionalProperties:{$ref:"#/definitions/WorkItem"}}},required:["phase","version","at","approvedBy","itemSnapshot"],additionalProperties:false},Blocker:{type:"object",properties:{id:{type:"string"},reason:{type:"string"},owner:{type:"string"},raisedAt:{type:"string"},clearedAt:{type:"string"}},required:["id","reason","owner","raisedAt"],additionalProperties:false},Budget:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},additionalProperties:false},Capability:{type:"string",enum:["order-backlog","define-acceptance","facilitate","deliver","review","verify","approve-gate","manage-flow","control-change","escalate"]},ClassOfService:{type:"string",enum:["expedite","fixed-date","standard","intangible"]},Event:{type:"object",properties:{seq:{type:"number"},at:{type:"string"},type:{type:"string"},by:{type:"string"},payload:{}},required:["seq","at","type","by","payload"],additionalProperties:false},Evidence:{type:"object",properties:{kind:{type:"string"},ref:{type:"string"},by:{type:"string"},at:{type:"string"}},required:["kind","ref","by","at"],additionalProperties:false},Gate:{type:"object",properties:{id:{type:"string"},requires:{type:"array",items:{$ref:"#/definitions/GateRequirement"}},evidence:{type:"array",items:{type:"string"}},onFail:{anyOf:[{type:"object",properties:{action:{type:"string",const:"block"}},required:["action"],additionalProperties:false},{type:"object",properties:{action:{type:"string",const:"return-to"},stage:{type:"string"}},required:["action","stage"],additionalProperties:false}]}},required:["id","requires","evidence","onFail"],additionalProperties:false},GateRequirement:{anyOf:[{type:"string",const:"human"},{type:"object",properties:{capability:{type:"string"}},required:["capability"],additionalProperties:false}]},Handoff:{type:"object",properties:{item:{type:"string"},role:{type:"string"},produced:{type:"array",items:{type:"object",properties:{kind:{type:"string"},ref:{type:"string"}},required:["kind","ref"],additionalProperties:false}},notes:{type:"string"},do_not:{type:"array",items:{type:"string"}},open_questions:{type:"array",items:{type:"string"}},verdict:{$ref:"#/definitions/Verdict"},follow_ups:{type:"array",items:{$ref:"#/definitions/NewItem"}},lessons:{type:"array",items:{type:"object",properties:{text:{type:"string"},scope:{type:"string",enum:["policy","skill","memory","spec","review"]}},required:["text","scope"],additionalProperties:false}}},required:["item","role","produced","notes","do_not","open_questions"],additionalProperties:false},ImpactAnalysis:{type:"object",properties:{summary:{type:"string"},reopen:{type:"array",items:{type:"string"}},weight:{type:"number"}},required:["summary","reopen","weight"],additionalProperties:false},ItemPatch:{type:"object",properties:{type:{$ref:"#/definitions/ItemType"},title:{type:"string"},description:{type:"string"},dependsOn:{type:"array",items:{type:"string"}},priority:{type:"number"},weight:{type:"number"},deadline:{type:"string"},classOfService:{$ref:"#/definitions/ClassOfService"},role:{type:"string"},parent:{type:"string"},acceptance:{type:"array",items:{type:"string"}},iteration:{type:"string"},traces:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}},affects:{type:"array",items:{type:"string"}},phase:{type:"string"},impactAnalysis:{$ref:"#/definitions/ImpactAnalysis"}},additionalProperties:false},ItemStatus:{type:"string",enum:["todo","in_progress","blocked","review","awaiting_human","done","dropped"]},ItemType:{type:"string",enum:["epic","story","task","bug","change-request","deliverable","question"]},Iteration:{type:"object",properties:{id:{type:"string"},goal:{type:"string"},budget:{$ref:"#/definitions/Budget"},spent:{$ref:"#/definitions/Spent"},startedAt:{type:"string"},endedAt:{type:"string"},committed:{type:"array",items:{type:"string"}},carryover:{type:"array",items:{type:"string"}},outcome:{type:"string",enum:["completed","cancelled"]},closing:{type:"boolean"}},required:["id","goal","budget","spent","startedAt","committed","carryover"],additionalProperties:false},Lesson:{type:"object",properties:{id:{type:"string"},at:{type:"string"},text:{type:"string"},scope:{type:"string",enum:["policy","skill","memory","spec","review"]},status:{type:"string",enum:["raised","adopted","dismissed"]},from:{type:"string"},item:{type:"string"},suggestedChange:{$ref:"#/definitions/LessonChange"}},required:["id","at","text","scope","status"],additionalProperties:false},LessonChange:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"agreement"},text:{type:"string"},replaces:{type:"string"}},required:["kind","text"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dod"},policy:{$ref:"#/definitions/Policy"}},required:["kind","policy"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"backlog"},item:{$ref:"#/definitions/NewItem"}},required:["kind","item"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"skill"},note:{type:"string"}},required:["kind","note"],additionalProperties:false}]},MethodologyName:{type:"string",enum:["scrum","kanban","waterfall"]},ModelTier:{type:"string",enum:["small","medium","large"]},NewItem:{type:"object",additionalProperties:false,properties:{stage:{type:"string"},type:{$ref:"#/definitions/ItemType"},description:{type:"string"},dependsOn:{type:"array",items:{type:"string"}},priority:{type:"number"},weight:{type:"number"},deadline:{type:"string"},classOfService:{$ref:"#/definitions/ClassOfService"},role:{type:"string"},parent:{type:"string"},acceptance:{type:"array",items:{type:"string"}},iteration:{type:"string"},traces:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}},affects:{type:"array",items:{type:"string"}},phase:{type:"string"},impactAnalysis:{$ref:"#/definitions/ImpactAnalysis"},id:{type:"string"},title:{type:"string"}},required:["id","title"]},PendingHuman:{type:"object",properties:{id:{type:"string"},kind:{type:"string",enum:["gate","decision"]},item:{type:"string"},gate:{type:"string"},question:{type:"string"},raisedAt:{type:"string"}},required:["id","kind","question","raisedAt"],additionalProperties:false},Phase:{type:"object",properties:{id:{type:"string"},name:{type:"string"},deliverables:{type:"array",items:{type:"string"}},gate:{$ref:"#/definitions/Gate"},status:{type:"string",enum:["pending","open","baselined","reopened"]},budget:{$ref:"#/definitions/Budget"},produced:{type:"array",items:{$ref:"#/definitions/Produced"}}},required:["id","name","deliverables","gate","status"],additionalProperties:false},Policy:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"evidence"},evidenceKind:{type:"string"}},required:["kind","evidenceKind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"acceptance-written"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"estimate-present"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"no-open-blockers"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dependencies-done"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"custom"},id:{type:"string"},description:{type:"string"}},required:["kind","id","description"],additionalProperties:false}]},Produced:{type:"object",properties:{kind:{type:"string"},ref:{type:"string"},by:{type:"string"},at:{type:"string"}},required:["kind","ref","by","at"],additionalProperties:false},Role:{type:"object",properties:{id:{type:"string"},name:{type:"string"},modelTier:{$ref:"#/definitions/ModelTier"},resourceClass:{type:"string"},maxConcurrent:{type:"number"},capabilities:{type:"array",items:{$ref:"#/definitions/Capability"}},canApprove:{type:"array",items:{type:"string"}},inputs:{type:"array",items:{type:"string"}},outputs:{type:"array",items:{type:"string"}},do_not:{type:"array",items:{type:"string"}},constraints:{type:"array",items:{type:"string"}}},required:["id","name","modelTier","capabilities","canApprove","inputs","outputs","do_not"],additionalProperties:false},Spent:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},required:["tokens","turns","wallclockMs"],additionalProperties:false},Stage:{type:"object",properties:{id:{type:"string"},name:{type:"string"},wipLimit:{type:"number"},entryPolicy:{type:"array",items:{$ref:"#/definitions/Policy"}},exitPolicy:{type:"array",items:{$ref:"#/definitions/Policy"}},gate:{$ref:"#/definitions/Gate"},commitmentPoint:{type:"boolean"},deliveryPoint:{type:"boolean"},review:{type:"boolean"}},required:["id","name","entryPolicy","exitPolicy"],additionalProperties:false},Transition:{type:"object",properties:{from:{type:"object",properties:{stage:{type:"string"},status:{$ref:"#/definitions/ItemStatus"}},required:["stage","status"],additionalProperties:false},to:{type:"object",properties:{stage:{type:"string"},status:{$ref:"#/definitions/ItemStatus"}},required:["stage","status"],additionalProperties:false},at:{type:"string"},by:{type:"string"}},required:["from","to","at","by"],additionalProperties:false},Verdict:{type:"string",enum:["done","blocked","needs-review","rework","escalate"]},WorkItem:{type:"object",properties:{id:{type:"string"},type:{$ref:"#/definitions/ItemType"},title:{type:"string"},description:{type:"string"},dependsOn:{type:"array",items:{type:"string"}},priority:{type:"number"},weight:{type:"number"},deadline:{type:"string"},classOfService:{$ref:"#/definitions/ClassOfService"},stage:{type:"string"},status:{$ref:"#/definitions/ItemStatus"},role:{type:"string"},parent:{type:"string"},acceptance:{type:"array",items:{type:"string"}},evidence:{type:"array",items:{$ref:"#/definitions/Evidence"}},blockers:{type:"array",items:{$ref:"#/definitions/Blocker"}},transitions:{type:"array",items:{$ref:"#/definitions/Transition"}},iteration:{type:"string"},traces:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}},affects:{type:"array",items:{type:"string"}},phase:{type:"string"},impactAnalysis:{$ref:"#/definitions/ImpactAnalysis"}},required:["id","type","title","dependsOn","stage","status","acceptance","evidence","blockers","transitions"],additionalProperties:false},WorkflowState:{type:"object",properties:{version:{type:"number",const:1},methodology:{$ref:"#/definitions/MethodologyName"},config:{},items:{type:"object",additionalProperties:{$ref:"#/definitions/WorkItem"}},stages:{type:"array",items:{$ref:"#/definitions/Stage"}},roles:{type:"object",additionalProperties:{$ref:"#/definitions/Role"}},iterations:{type:"array",items:{$ref:"#/definitions/Iteration"}},phases:{type:"array",items:{$ref:"#/definitions/Phase"}},baseline:{$ref:"#/definitions/Baseline"},baselines:{type:"array",items:{$ref:"#/definitions/Baseline"}},events:{type:"array",items:{$ref:"#/definitions/Event"}},accounting:{type:"array",items:{$ref:"#/definitions/Accounting"}},pending:{type:"array",items:{$ref:"#/definitions/PendingHuman"}},lessons:{type:"array",items:{$ref:"#/definitions/Lesson"}},agreements:{type:"array",items:{type:"string"}}},required:["version","methodology","config","items","stages","roles","iterations","events","accounting","pending","lessons","agreements"],additionalProperties:false}},k={Budget:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},additionalProperties:false},EstimateMode:{type:"string",enum:["per-weight","per-call"]},Policy:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"evidence"},evidenceKind:{type:"string"}},required:["kind","evidenceKind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"acceptance-written"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"estimate-present"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"no-open-blockers"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dependencies-done"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"custom"},id:{type:"string"},description:{type:"string"}},required:["kind","id","description"],additionalProperties:false}]},ScrumConfig:{type:"object",properties:{sprintBudget:{$ref:"#/definitions/Budget"},productGoal:{type:"string"},definitionOfDone:{type:"array",items:{$ref:"#/definitions/Policy"}},refinementSharePct:{type:"number"},allowMidSprintAdd:{type:"string",enum:["never","po-only","any"]},inProgressWipLimit:{type:"number"},autoClose:{type:"boolean"},estimateMode:{$ref:"#/definitions/EstimateMode"},fallbackTokensPerWeight:{type:"number"}},required:["sprintBudget","productGoal","definitionOfDone","refinementSharePct","allowMidSprintAdd"],additionalProperties:false}},P={ClassConfig:{type:"object",properties:{wipBypass:{type:"number"},sle:{$ref:"#/definitions/ServiceLevel"}},additionalProperties:false},KanbanColumn:{type:"object",properties:{id:{type:"string"},name:{type:"string"},wipLimit:{type:"number"},policies:{type:"array",items:{$ref:"#/definitions/Policy"}},commitmentPoint:{type:"boolean"},deliveryPoint:{type:"boolean"},review:{type:"boolean"}},required:["id","name","policies"],additionalProperties:false},KanbanConfig:{type:"object",properties:{columns:{type:"array",items:{$ref:"#/definitions/KanbanColumn"}},classesOfService:{type:"object",properties:{expedite:{$ref:"#/definitions/ClassConfig"},"fixed-date":{$ref:"#/definitions/ClassConfig"},standard:{$ref:"#/definitions/ClassConfig"},intangible:{$ref:"#/definitions/ClassConfig"}},additionalProperties:false},fairness:{type:"object",properties:{aging:{type:"boolean"},maxDeferralRounds:{type:"number"}},required:["aging","maxDeferralRounds"],additionalProperties:false},cadences:{type:"object",properties:{replenishment:{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"delivery-planning":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"service-delivery-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"operations-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"risk-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"strategy-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false}},additionalProperties:false},throughputWindowMs:{type:"number"},maxExpedite:{type:"number"}},required:["columns","classesOfService","fairness","cadences","throughputWindowMs","maxExpedite"],additionalProperties:false},Policy:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"evidence"},evidenceKind:{type:"string"}},required:["kind","evidenceKind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"acceptance-written"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"estimate-present"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"no-open-blockers"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dependencies-done"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"custom"},id:{type:"string"},description:{type:"string"}},required:["kind","id","description"],additionalProperties:false}]},ServiceLevel:{type:"object",properties:{percentile:{type:"number"},targetMs:{type:"number"}},required:["percentile","targetMs"],additionalProperties:false}},$={Budget:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},additionalProperties:false},Gate:{type:"object",properties:{id:{type:"string"},requires:{type:"array",items:{$ref:"#/definitions/GateRequirement"}},evidence:{type:"array",items:{type:"string"}},onFail:{anyOf:[{type:"object",properties:{action:{type:"string",const:"block"}},required:["action"],additionalProperties:false},{type:"object",properties:{action:{type:"string",const:"return-to"},stage:{type:"string"}},required:["action","stage"],additionalProperties:false}]}},required:["id","requires","evidence","onFail"],additionalProperties:false},GateRequirement:{anyOf:[{type:"string",const:"human"},{type:"object",properties:{capability:{type:"string"}},required:["capability"],additionalProperties:false}]},WaterfallConfig:{type:"object",properties:{phases:{type:"array",items:{$ref:"#/definitions/WaterfallPhaseConfig"}},changeControl:{type:"object",properties:{requiresImpactAnalysis:{type:"boolean"},approvers:{type:"array",items:{$ref:"#/definitions/GateRequirement"}}},required:["requiresImpactAnalysis","approvers"],additionalProperties:false},traceability:{type:"object",properties:{from:{type:"string"},to:{type:"array",items:{type:"string"}}},required:["from","to"],additionalProperties:false},humanGates:{anyOf:[{type:"string",const:"all"},{type:"array",items:{type:"string"}}]},fallbackTokensPerWeight:{type:"number"}},required:["phases","changeControl","traceability","humanGates"],additionalProperties:false},WaterfallPhaseConfig:{type:"object",properties:{id:{type:"string"},name:{type:"string"},deliverables:{type:"array",items:{type:"string"}},gate:{$ref:"#/definitions/Gate"},budget:{$ref:"#/definitions/Budget"},deliverBy:{type:"string"}},required:["id","name","deliverables","gate"],additionalProperties:false}};var j="#/definitions/";function u(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function v(e,t){return e==="integer"?typeof t=="number"&&Number.isInteger(t):u(t)===e}function p(e){let t=JSON.stringify(e);return t===void 0?String(e):t.length>60?`${t.slice(0,57)}...`:t}function h(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function S(e,t){return JSON.stringify(e)===JSON.stringify(t)}function a(e,t,s,n,i){return {path:e===""?"/":e,keyword:t,message:s,expected:n,found:i}}function x(e,t){e.startsWith(j)||b("invalid-input",`schema $ref ${JSON.stringify(e)} is not #/definitions/<name>`,"regenerate the schema with pnpm schema:gen");let s=e.slice(j.length),n=t.definitions&&Object.hasOwn(t.definitions,s)?t.definitions[s]:void 0;return n||b("invalid-input",`schema $ref ${JSON.stringify(e)} names no definition`,"regenerate the schema with pnpm schema:gen"),n}function q(e,t){let s=t===""?"/":t;return e.reduce((n,i)=>n+(i.keyword==="type"&&i.path===s?1e3:i.keyword==="const"?100:1),0)}function O(e){let t=e[0]?.filter(s=>s.keyword==="const")??[];for(let s of t){let n=e.map(r=>r.find(o=>o.keyword==="const"&&o.path===s.path));if(n.some(r=>r===void 0))continue;let i=[...new Set(n.map(r=>r?.expected))].join(" | ");return {path:s.path,keyword:"enum",message:`expected one of ${i}`,expected:i,found:s.found}}}function w(e,t){return l(e,t,e,"")}function l(e,t,s,n){if(e.$ref!==void 0)return l(x(e.$ref,s),t,s,n);let i=[];if(e.type!==void 0){let r=Array.isArray(e.type)?e.type:[e.type];if(!r.some(o=>v(o,t))){let o=r.join(" | ");return [a(n,"type",`expected ${o}, got ${u(t)}`,o,p(t))]}}if(e.const!==void 0&&!S(t,e.const)&&i.push(a(n,"const",`expected ${p(e.const)}`,p(e.const),p(t))),e.enum!==void 0&&!e.enum.some(r=>S(r,t))){let r=e.enum.map(p).join(" | ");i.push(a(n,"enum",`expected one of ${r}`,r,p(t)));}if(typeof t=="number"&&(e.minimum!==void 0&&t<e.minimum&&i.push(a(n,"minimum",`expected >= ${e.minimum}`,`>= ${e.minimum}`,p(t))),e.maximum!==void 0&&t>e.maximum&&i.push(a(n,"maximum",`expected <= ${e.maximum}`,`<= ${e.maximum}`,p(t)))),typeof t=="string"&&(e.minLength!==void 0&&t.length<e.minLength&&i.push(a(n,"minLength",`expected at least ${e.minLength} characters`,`length >= ${e.minLength}`,p(t))),e.pattern!==void 0&&!new RegExp(e.pattern,"u").test(t)&&i.push(a(n,"pattern",`expected to match /${e.pattern}/`,`/${e.pattern}/`,p(t)))),Array.isArray(t)&&e.items!==void 0){let r=e.items;t.forEach((o,c)=>i.push(...l(r,o,s,`${n}/${c}`)));}if(u(t)==="object"){let r=t;for(let[o,c]of Object.entries(r)){let g=e.properties&&Object.hasOwn(e.properties,o)?e.properties[o]:void 0,d=`${n}/${h(o)}`;if(g)i.push(...l(g,c,s,d));else if(e.additionalProperties===false){let b=Object.keys(e.properties??{}).join(", ");i.push(a(d,"additionalProperties",`unknown property ${JSON.stringify(o)}`,b?`one of ${b}`:"no properties",o));}else typeof e.additionalProperties=="object"&&i.push(...l(e.additionalProperties,c,s,d));}for(let o of e.required??[])Object.hasOwn(r,o)||i.push(a(`${n}/${h(o)}`,"required",`missing required property ${JSON.stringify(o)}`,"present","absent"));}if(e.anyOf!==void 0){let r,o=[];for(let g of e.anyOf){let d=l(g,t,s,n);if(d.length===0){r=[];break}o.push(d),(r===void 0||q(d,n)<q(r,n))&&(r=d);}let c=r&&r.length>0?O(o):void 0;c?i.push(c):r&&i.push(...r);}return i}function I(e,t,s){let n=w(e,t),i=n[0];if(!i)return;let r=n.length>1?` (+${n.length-1} more)`:"";b("invalid-input",`${s} does not match its schema: ${i.path} ${i.message}${r}`,`fix ${s} at ${i.path}: expected ${i.expected}, found ${i.found}`);}var A="http://json-schema.org/draft-07/schema#";function y(e,t){return {$schema:A,$ref:`#/definitions/${e}`,definitions:t}}var J=y("WorkflowState",f),R=y("Role",f),M=y("NewItem",f),B=y("ItemPatch",f),L=y("Handoff",f),_=y("ScrumConfig",k),D=y("KanbanConfig",P),W=y("WaterfallConfig",$);
2
+ export{w as a,I as b,A as c,J as d,R as e,M as f,B as g,L as h,_ as i,D as j,W as k};//# sourceMappingURL=chunk-5TXYMLBF.mjs.map
3
+ //# sourceMappingURL=chunk-5TXYMLBF.mjs.map