council-review 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +374 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +19 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +829 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +61 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +235 -0
- package/dist/config.js.map +1 -0
- package/dist/herdr.d.ts +36 -0
- package/dist/herdr.d.ts.map +1 -0
- package/dist/herdr.js +196 -0
- package/dist/herdr.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/levels.d.ts +9 -0
- package/dist/levels.d.ts.map +1 -0
- package/dist/levels.js +19 -0
- package/dist/levels.js.map +1 -0
- package/dist/merge.d.ts +90 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +441 -0
- package/dist/merge.js.map +1 -0
- package/dist/node-guard.d.ts +9 -0
- package/dist/node-guard.d.ts.map +1 -0
- package/dist/node-guard.js +21 -0
- package/dist/node-guard.js.map +1 -0
- package/dist/panel.d.ts +89 -0
- package/dist/panel.d.ts.map +1 -0
- package/dist/panel.js +275 -0
- package/dist/panel.js.map +1 -0
- package/dist/picker.d.ts +24 -0
- package/dist/picker.d.ts.map +1 -0
- package/dist/picker.js +182 -0
- package/dist/picker.js.map +1 -0
- package/dist/providers.d.ts +66 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +544 -0
- package/dist/providers.js.map +1 -0
- package/dist/report.d.ts +116 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +493 -0
- package/dist/report.js.map +1 -0
- package/dist/resolve.d.ts +58 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +147 -0
- package/dist/resolve.js.map +1 -0
- package/dist/reviewer-spawn.d.ts +67 -0
- package/dist/reviewer-spawn.d.ts.map +1 -0
- package/dist/reviewer-spawn.js +94 -0
- package/dist/reviewer-spawn.js.map +1 -0
- package/dist/reviewer-tools.d.ts +113 -0
- package/dist/reviewer-tools.d.ts.map +1 -0
- package/dist/reviewer-tools.js +557 -0
- package/dist/reviewer-tools.js.map +1 -0
- package/dist/runner.d.ts +79 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +811 -0
- package/dist/runner.js.map +1 -0
- package/dist/schema.d.ts +63 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +302 -0
- package/dist/schema.js.map +1 -0
- package/dist/scope.d.ts +40 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +372 -0
- package/dist/scope.js.map +1 -0
- package/dist/snapshot.d.ts +57 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +471 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/status.d.ts +90 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +336 -0
- package/dist/status.js.map +1 -0
- package/dist/thinking.d.ts +53 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +116 -0
- package/dist/thinking.js.map +1 -0
- package/package.json +81 -0
- package/src/bin.ts +20 -0
- package/src/cli.ts +996 -0
- package/src/config.ts +338 -0
- package/src/herdr.ts +231 -0
- package/src/index.ts +30 -0
- package/src/levels.ts +23 -0
- package/src/merge.ts +548 -0
- package/src/node-guard.ts +25 -0
- package/src/panel.ts +354 -0
- package/src/picker.ts +230 -0
- package/src/providers.ts +778 -0
- package/src/report.ts +594 -0
- package/src/resolve.ts +179 -0
- package/src/reviewer-spawn.ts +131 -0
- package/src/reviewer-tools.ts +715 -0
- package/src/runner.ts +1120 -0
- package/src/schema.ts +373 -0
- package/src/scope.ts +448 -0
- package/src/snapshot.ts +536 -0
- package/src/status.ts +470 -0
- package/src/thinking.ts +148 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAyDzC,8FAA8F;AAC9F,sBAAsB;AACtB,EAAE;AACF,+FAA+F;AAC/F,8FAA8F;AAC9F,gGAAgG;AAChG,+FAA+F;AAC/F,8BAA8B;AAC9B,8FAA8F;AAE9F,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC;IAC7C,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAClD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;IACjD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI;IAC/E,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;IACtC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IACnF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;IAC3D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC3E,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;IAC3C,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IACvE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;CACnF,CAAC,CAAC,CAAC,kBAAkB;AAEtB,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAC5C,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,SAAS,GAAG,KAAK;SACpB,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,IAAI,EAAE,CAAC;IACV,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,SAAS;SACb,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC5D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,gDAAgD;IAC9F,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,YAAY,EAAE,CAAC;IAC1D,OAAO,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,MAAM,GAAG,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;IACnE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,8FAA8F;AAC9F,aAAa;AACb,8FAA8F;AAE9F,MAAM,aAAa,GAA6B,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAQ5F,SAAS,SAAS,CAAC,CAAa;IAC9B,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,sFAAsF;AACtF,SAAS,QAAQ,CAAC,CAA4B,EAAE,CAA4B;IAC1E,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAExF,SAAS,oBAAoB,CAAC,CAAS,EAAE,CAAS;IAChD,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;uFAEuF;AACvF,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa,EAAE,CAAe;IAChE,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACvE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,IAA4B,EAAE,CAAe;IACxE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,SAAS,IAAI,CAAC,CAAS;QACrB,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAE,CAAC;YAChC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAE,CAAC;gBAC7B,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAClB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,8FAA8F;AAC9F,qDAAqD;AACrD,EAAE;AACF,0FAA0F;AAC1F,2FAA2F;AAC3F,+FAA+F;AAC/F,+FAA+F;AAC/F,+FAA+F;AAC/F,gGAAgG;AAChG,uFAAuF;AACvF,EAAE;AACF,+FAA+F;AAC/F,4FAA4F;AAC5F,2FAA2F;AAC3F,0FAA0F;AAC1F,+FAA+F;AAC/F,iGAAiG;AACjG,2FAA2F;AAC3F,gGAAgG;AAChG,+FAA+F;AAC/F,oFAAoF;AACpF,8FAA8F;AAE9F,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,IAAI,EAAE;SACN,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED;;;kDAGkD;AAClD,SAAS,cAAc,CAAC,KAAwB;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD;;;;;GAKG;AACH,SAAS,eAAe,CACtB,OAA0B,EAC1B,IAA4B,EAC5B,SAAiB;IAEjB,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;SACpB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAE/F,0FAA0F;IAC1F,+FAA+F;IAC/F,uFAAuF;IACvF,2FAA2F;IAC3F,mFAAmF;IACnF,8FAA8F;IAC9F,sFAAsF;IACtF,yFAAyF;IACzF,2FAA2F;IAC3F,sFAAsF;IACtF,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;IAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAC/F,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAC7B,CAAC;IAEF,+FAA+F;IAC/F,6FAA6F;IAC7F,wFAAwF;IACxF,4FAA4F;IAC5F,0FAA0F;IAC1F,4FAA4F;IAC5F,6FAA6F;IAC7F,uFAAuF;IACvF,yFAAyF;IACzF,yFAAyF;IACzF,yFAAyF;IACzF,2BAA2B;IAC3B,EAAE;IACF,4FAA4F;IAC5F,0FAA0F;IAC1F,4FAA4F;IAC5F,2FAA2F;IAC3F,0FAA0F;IAC1F,0FAA0F;IAC1F,8FAA8F;IAC9F,wEAAwE;IACxE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5F,CAAC;YACD,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;IAEjD,MAAM,mBAAmB,GAA6B,EAAE,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACxF,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE9E,MAAM,QAAQ,GAAG,cAAc,CAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,MAAM,WAAW,GAAG,cAAc,CAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACzE,CAAC;IAEF,MAAM,OAAO,GAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,UAAU;QACtB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;QAC5B,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;KACvB,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACnC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAChE,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,EAAE;QACf,IAAI;QACJ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK;QACnC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM;QACrC,QAAQ;QACR,WAAW;QACX,QAAQ;QACR,mBAAmB;QACnB,OAAO;QACP,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE;QAClD,YAAY,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK;QAC1D,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,cAAc;AACd,8FAA8F;AAE9F;;;yEAGyE;AACzE,SAAS,YAAY,CAAC,OAA4B,EAAE,MAA8B;IAChF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACjF,IAAI,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,OAAO,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,8FAA8F;AAC9F,oCAAoC;AACpC,8FAA8F;AAE9F;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,CAAsB,EAAE,CAAsB;IAC3E,OAAO,CACL,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO;QACzC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;QACf,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED;gGACgG;AAChG,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,8FAA8F;AAC9F,cAAc;AACd,8FAA8F;AAE9F;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAoC,EAAE,CAAe;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAE1C,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,CAAC,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,QAAQ,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,UAAU,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exits the process with code 2 if the running Node version is older than the minimum
|
|
3
|
+
* supported version, printing both the detected and minimum versions.
|
|
4
|
+
*
|
|
5
|
+
* @param version - The version string to check, defaulting to `process.version`. Exposed as a
|
|
6
|
+
* parameter purely as a test seam.
|
|
7
|
+
*/
|
|
8
|
+
export declare function assertNodeVersion(version?: string): void;
|
|
9
|
+
//# sourceMappingURL=node-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-guard.d.ts","sourceRoot":"","sources":["../src/node-guard.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAwB,GAAG,IAAI,CAWzE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Zero imports beyond node:process, so this can run before any other import work at binary
|
|
2
|
+
// startup — a broken or ancient runtime must never fail inside a dependency instead of here.
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
const MINIMUM_MAJOR_VERSION = 20;
|
|
5
|
+
/**
|
|
6
|
+
* Exits the process with code 2 if the running Node version is older than the minimum
|
|
7
|
+
* supported version, printing both the detected and minimum versions.
|
|
8
|
+
*
|
|
9
|
+
* @param version - The version string to check, defaulting to `process.version`. Exposed as a
|
|
10
|
+
* parameter purely as a test seam.
|
|
11
|
+
*/
|
|
12
|
+
export function assertNodeVersion(version = process.version) {
|
|
13
|
+
const detected = version.startsWith('v') ? version.slice(1) : version;
|
|
14
|
+
const major = Number.parseInt(detected.split('.')[0] ?? '', 10);
|
|
15
|
+
if (!Number.isFinite(major) || major < MINIMUM_MAJOR_VERSION) {
|
|
16
|
+
process.stderr.write(`council-review: unsupported Node.js version "${detected}" detected; ` +
|
|
17
|
+
`Node.js >= ${MINIMUM_MAJOR_VERSION} is required.\n`);
|
|
18
|
+
process.exit(2);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=node-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-guard.js","sourceRoot":"","sources":["../src/node-guard.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,6FAA6F;AAC7F,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,OAAO,CAAC,OAAO;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,qBAAqB,EAAE,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gDAAgD,QAAQ,cAAc;YACpE,cAAc,qBAAqB,iBAAiB,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/panel.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { CouncilConfig, PanelEntry } from './config.js';
|
|
2
|
+
import { type ThinkingLevel } from './levels.js';
|
|
3
|
+
import { type Catalog, type CatalogModel } from './providers.js';
|
|
4
|
+
import { type ResolvedThinking } from './thinking.js';
|
|
5
|
+
export interface Reviewer {
|
|
6
|
+
provider: string;
|
|
7
|
+
model: string;
|
|
8
|
+
vendor: string;
|
|
9
|
+
catalog: CatalogModel;
|
|
10
|
+
thinking: ResolvedThinking;
|
|
11
|
+
}
|
|
12
|
+
export declare class PanelError extends Error {
|
|
13
|
+
readonly exitCode: 2;
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class GuardRefusal extends Error {
|
|
17
|
+
readonly exitCode: 4;
|
|
18
|
+
readonly vendors: Map<string, string[]>;
|
|
19
|
+
constructor(message: string, vendors: Map<string, string[]>);
|
|
20
|
+
}
|
|
21
|
+
type ParsedEntry = {
|
|
22
|
+
provider: string;
|
|
23
|
+
model: string;
|
|
24
|
+
pin?: ThinkingLevel;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Parses one `provider/modelId[:level]` entry. The pin is split on the last colon (see
|
|
28
|
+
* `splitTrailingPin`); everything before it is `provider/modelId`, split on the FIRST slash —
|
|
29
|
+
* this is what tolerates a model id that itself contains slashes (the entire remainder becomes
|
|
30
|
+
* the model id) and one that carries a leading prefix marker (carried through unmodified; vendor
|
|
31
|
+
* derivation in `providers.ts` is what strips it, not this parser).
|
|
32
|
+
*/
|
|
33
|
+
export declare function parsePanelEntry(entry: string): ParsedEntry;
|
|
34
|
+
/**
|
|
35
|
+
* Expands one comma-separated `--models` spec against the catalog. A literal (non-glob) entry is
|
|
36
|
+
* looked up directly and must name a real catalog model, or it errors naming the offending
|
|
37
|
+
* entry. A glob entry is matched against every catalog model's `provider/id`, must match at
|
|
38
|
+
* least one, and every match inherits the pattern's own pin.
|
|
39
|
+
*/
|
|
40
|
+
export declare function expandPanelSpec(spec: string, catalog: Catalog): ParsedEntry[];
|
|
41
|
+
/**
|
|
42
|
+
* Resolves a saved config panel into reviewers. Every entry's model must still be present in the
|
|
43
|
+
* catalog and its provider must still be ready — either failure is a `PanelError` naming the
|
|
44
|
+
* entry, per the "A saved panel entry no longer exists" and "A configured model belongs to an
|
|
45
|
+
* unready provider" scenarios. Each entry's own saved `thinking` and the general
|
|
46
|
+
* `modelThinkingLevels` map both occupy the "configured per-model" precedence tier; the general
|
|
47
|
+
* map wins when both name the same model, since it is the more deliberate, hand-editable source.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveConfiguredPanel(panel: readonly PanelEntry[], catalog: Catalog, cfg: CouncilConfig, cliPanelWide?: ThinkingLevel): Reviewer[];
|
|
50
|
+
/** Resolves a `--models` command-line spec into reviewers. Each entry's own `:level` pin, if
|
|
51
|
+
* any, is that model's CLI pin — the most specific source in the precedence chain. */
|
|
52
|
+
export declare function resolveSpecPanel(spec: string, catalog: Catalog, cfg: CouncilConfig, cliPanelWide?: ThinkingLevel): Reviewer[];
|
|
53
|
+
export interface GuardResult {
|
|
54
|
+
ok: boolean;
|
|
55
|
+
vendors: Map<string, string[]>;
|
|
56
|
+
reason?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Groups `reviewers` by derived vendor and checks the independence minimums: at least three
|
|
60
|
+
* models across at least three distinct vendors. `unknown` is one legitimate vendor bucket like
|
|
61
|
+
* any other — several unrecognised models collapse into it exactly as several recognised models
|
|
62
|
+
* from the same real vendor would, per design.md's "`unknown` is not treated as benign" (the
|
|
63
|
+
* point there is that `unknown` is admitted rather than rejected, not that it is exempt from
|
|
64
|
+
* collapsing). The model-count check runs first so its message doesn't get crowded out by a
|
|
65
|
+
* vendor-count message that would be equally true of a too-small panel.
|
|
66
|
+
*
|
|
67
|
+
* Typed against a structural minimum (only the three fields this function actually reads)
|
|
68
|
+
* rather than the full `Reviewer` shape, so `status.ts` can hand it plain `{provider, model,
|
|
69
|
+
* vendor}` objects derived from config alone -- reusing this exact guard verdict -- without
|
|
70
|
+
* needing to build a `CatalogModel` or resolve thinking levels for anything. `Reviewer` remains
|
|
71
|
+
* assignable, so every existing caller is unaffected.
|
|
72
|
+
*/
|
|
73
|
+
export declare function checkIndependence(reviewers: readonly {
|
|
74
|
+
provider: string;
|
|
75
|
+
model: string;
|
|
76
|
+
vendor: string;
|
|
77
|
+
}[]): GuardResult;
|
|
78
|
+
/** Formats a vendor grouping as `vendor: member, member (n)` lines, for printing on refusal or
|
|
79
|
+
* before launch. Singleton groups are included too, so the full picture is visible at a glance. */
|
|
80
|
+
export declare function formatVendorGrouping(vendors: ReadonlyMap<string, string[]>): string;
|
|
81
|
+
/**
|
|
82
|
+
* Enforces the independence guard. Throws `GuardRefusal` (exit code 4) when the panel fails the
|
|
83
|
+
* guard and `allowCorrelated` is false. Stateless and cheap to call twice — at the end of
|
|
84
|
+
* selection and again immediately before launch — which is how a panel that reached
|
|
85
|
+
* configuration by hand-editing (never passing through the picker) still gets checked.
|
|
86
|
+
*/
|
|
87
|
+
export declare function enforceIndependence(reviewers: readonly Reviewer[], allowCorrelated: boolean): void;
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAmB,KAAK,gBAAgB,EAAwB,MAAM,eAAe,CAAC;AAE7F,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;IAC/B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAM5D;AAMD,KAAK,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAmB5E;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAgB1D;AAWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,CAoC7E;AAmDD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,aAAa,EAClB,YAAY,CAAC,EAAE,aAAa,GAC3B,QAAQ,EAAE,CA2BZ;AAED;sFACsF;AACtF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,aAAa,EAClB,YAAY,CAAC,EAAE,aAAa,GAC3B,QAAQ,EAAE,CAqBZ;AASD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GACxE,WAAW,CA+Bb;AAED;mGACmG;AACnG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAInF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,eAAe,EAAE,OAAO,GACvB,IAAI,CAKN"}
|
package/dist/panel.js
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assembles the set of reviewers for a run — from a saved config panel or from a command-line
|
|
3
|
+
* spec — and the vendor-independence guard that refuses a panel whose members would fail in
|
|
4
|
+
* correlated ways. See `openspec/changes/add-council-review/specs/council-review/panel-
|
|
5
|
+
* selection/spec.md` for the requirements this implements.
|
|
6
|
+
*
|
|
7
|
+
* This module never spawns anything and never prompts; `picker.ts` (interactive selection) and
|
|
8
|
+
* `cli.ts` (dispatch and exit-code mapping) sit on top of it.
|
|
9
|
+
*/
|
|
10
|
+
import picomatch from 'picomatch';
|
|
11
|
+
import { isThinkingLevel } from './levels.js';
|
|
12
|
+
import { findModel } from './providers.js';
|
|
13
|
+
import { resolveThinking } from './thinking.js';
|
|
14
|
+
export class PanelError extends Error {
|
|
15
|
+
exitCode = 2;
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'PanelError';
|
|
19
|
+
Object.setPrototypeOf(this, PanelError.prototype);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class GuardRefusal extends Error {
|
|
23
|
+
exitCode = 4;
|
|
24
|
+
vendors;
|
|
25
|
+
constructor(message, vendors) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = 'GuardRefusal';
|
|
28
|
+
this.vendors = vendors;
|
|
29
|
+
Object.setPrototypeOf(this, GuardRefusal.prototype);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Splits a trailing `:level` pin off `raw` on the LAST colon. A colon that is present but whose
|
|
34
|
+
* suffix is not a recognised thinking level is a parse error (rather than being silently
|
|
35
|
+
* ignored), because the last-colon rule is unconditional: any entry with a colon is asserting a
|
|
36
|
+
* pin. `label` is what the thrown error names — the original, untrimmed entry text.
|
|
37
|
+
*/
|
|
38
|
+
function splitTrailingPin(raw, label) {
|
|
39
|
+
const lastColon = raw.lastIndexOf(':');
|
|
40
|
+
if (lastColon === -1)
|
|
41
|
+
return { rest: raw };
|
|
42
|
+
const candidate = raw.slice(lastColon + 1);
|
|
43
|
+
if (!isThinkingLevel(candidate)) {
|
|
44
|
+
throw new PanelError(`could not parse panel entry: ${JSON.stringify(label)}`);
|
|
45
|
+
}
|
|
46
|
+
return { rest: raw.slice(0, lastColon), pin: candidate };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parses one `provider/modelId[:level]` entry. The pin is split on the last colon (see
|
|
50
|
+
* `splitTrailingPin`); everything before it is `provider/modelId`, split on the FIRST slash —
|
|
51
|
+
* this is what tolerates a model id that itself contains slashes (the entire remainder becomes
|
|
52
|
+
* the model id) and one that carries a leading prefix marker (carried through unmodified; vendor
|
|
53
|
+
* derivation in `providers.ts` is what strips it, not this parser).
|
|
54
|
+
*/
|
|
55
|
+
export function parsePanelEntry(entry) {
|
|
56
|
+
const trimmed = entry.trim();
|
|
57
|
+
if (trimmed.length === 0) {
|
|
58
|
+
throw new PanelError(`could not parse panel entry: ${JSON.stringify(entry)}`);
|
|
59
|
+
}
|
|
60
|
+
const { rest, pin } = splitTrailingPin(trimmed, entry);
|
|
61
|
+
const slashIdx = rest.indexOf('/');
|
|
62
|
+
if (slashIdx <= 0 || slashIdx === rest.length - 1) {
|
|
63
|
+
throw new PanelError(`could not parse panel entry: ${JSON.stringify(entry)}`);
|
|
64
|
+
}
|
|
65
|
+
const provider = rest.slice(0, slashIdx);
|
|
66
|
+
const model = rest.slice(slashIdx + 1);
|
|
67
|
+
return pin === undefined ? { provider, model } : { provider, model, pin };
|
|
68
|
+
}
|
|
69
|
+
// -------------------------------------------------------------------------------------------
|
|
70
|
+
// Glob expansion
|
|
71
|
+
// -------------------------------------------------------------------------------------------
|
|
72
|
+
/** Characters that mark an entry's `provider/modelId` portion as a glob pattern rather than a
|
|
73
|
+
* literal id. Plain ids never contain these (host ids are alphanumerics plus `.`, `-`, `_`, `/`,
|
|
74
|
+
* `~`), so their presence is an unambiguous signal to expand rather than look up directly. */
|
|
75
|
+
const GLOB_CHAR_RE = /[*?[\]{}]/;
|
|
76
|
+
/**
|
|
77
|
+
* Expands one comma-separated `--models` spec against the catalog. A literal (non-glob) entry is
|
|
78
|
+
* looked up directly and must name a real catalog model, or it errors naming the offending
|
|
79
|
+
* entry. A glob entry is matched against every catalog model's `provider/id`, must match at
|
|
80
|
+
* least one, and every match inherits the pattern's own pin.
|
|
81
|
+
*/
|
|
82
|
+
export function expandPanelSpec(spec, catalog) {
|
|
83
|
+
const results = [];
|
|
84
|
+
for (const rawEntry of spec.split(',')) {
|
|
85
|
+
const entry = rawEntry.trim();
|
|
86
|
+
if (entry.length === 0)
|
|
87
|
+
continue;
|
|
88
|
+
const { rest, pin } = splitTrailingPin(entry, entry);
|
|
89
|
+
if (!GLOB_CHAR_RE.test(rest)) {
|
|
90
|
+
const parsed = parsePanelEntry(entry);
|
|
91
|
+
const found = findModel(catalog, parsed.provider, parsed.model);
|
|
92
|
+
if (!found) {
|
|
93
|
+
throw new PanelError(`panel entry names an unknown provider or model: ${JSON.stringify(entry)}`);
|
|
94
|
+
}
|
|
95
|
+
results.push(parsed);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const isMatch = picomatch(rest, { dot: true });
|
|
99
|
+
const matches = catalog.models.filter((m) => isMatch(`${m.provider}/${m.id}`));
|
|
100
|
+
if (matches.length === 0) {
|
|
101
|
+
throw new PanelError(`glob pattern matched no catalog model: ${JSON.stringify(rest)}`);
|
|
102
|
+
}
|
|
103
|
+
for (const m of matches) {
|
|
104
|
+
results.push(pin === undefined
|
|
105
|
+
? { provider: m.provider, model: m.id }
|
|
106
|
+
: { provider: m.provider, model: m.id, pin });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return results;
|
|
110
|
+
}
|
|
111
|
+
// -------------------------------------------------------------------------------------------
|
|
112
|
+
// Duplicate collapsing
|
|
113
|
+
// -------------------------------------------------------------------------------------------
|
|
114
|
+
/**
|
|
115
|
+
* Collapses `entries` that name the same `provider/model` down to one, at the position of their
|
|
116
|
+
* FIRST occurrence but carrying the value of their LAST occurrence. A duplicated panel entry is
|
|
117
|
+
* always a mistake, never a deliberate choice — reviewing the same model twice adds no
|
|
118
|
+
* independence, but it does spawn the host twice (paying twice for one model's worth of signal),
|
|
119
|
+
* and because a reviewer's on-disk artifacts are named from a hash of `provider/model`, the
|
|
120
|
+
* second spawn silently overwrites the first's `.text.md`/`.findings.json`/`.trace.jsonl` while
|
|
121
|
+
* the manifest still claims both ran. The most common way to hit this isn't a literal repeated
|
|
122
|
+
* entry — it's a glob (`opencode-go/qwen3.8-*`) that happens to also match a model named
|
|
123
|
+
* explicitly elsewhere in the same spec, so this must run on the fully-expanded entry list, not
|
|
124
|
+
* just reject literal repeats.
|
|
125
|
+
*
|
|
126
|
+
* "Last occurrence wins" for the entry's own value mirrors `resolveThinking`'s own precedence
|
|
127
|
+
* rule elsewhere in this file: when a model is named more than once with conflicting per-entry
|
|
128
|
+
* pins (`foo/bar:low,foo/bar:high`), the later one is treated as a correction of the earlier one
|
|
129
|
+
* — the user's final word — not as a note to silently discard. `Map#set` gives us exactly this
|
|
130
|
+
* for free: re-setting an already-present key overwrites its value but leaves its original
|
|
131
|
+
* iteration position untouched, so the loop below is the entire implementation.
|
|
132
|
+
*
|
|
133
|
+
* This must run BEFORE the independence guard (`enforceIndependence`) sees the result — both
|
|
134
|
+
* `resolveSpecPanel` and `resolveConfiguredPanel` call this ahead of `buildReviewer` for exactly
|
|
135
|
+
* that reason, so `--models 'a,a,a'` is correctly refused as one model, not admitted as three.
|
|
136
|
+
*/
|
|
137
|
+
function collapseDuplicates(entries, keyOf) {
|
|
138
|
+
const byKey = new Map();
|
|
139
|
+
for (const entry of entries) {
|
|
140
|
+
byKey.set(keyOf(entry), entry);
|
|
141
|
+
}
|
|
142
|
+
return Array.from(byKey.values());
|
|
143
|
+
}
|
|
144
|
+
// -------------------------------------------------------------------------------------------
|
|
145
|
+
// Reviewer assembly
|
|
146
|
+
// -------------------------------------------------------------------------------------------
|
|
147
|
+
function buildReviewer(model, sources) {
|
|
148
|
+
return {
|
|
149
|
+
provider: model.provider,
|
|
150
|
+
model: model.id,
|
|
151
|
+
vendor: model.vendor,
|
|
152
|
+
catalog: model,
|
|
153
|
+
thinking: resolveThinking(model, sources),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Resolves a saved config panel into reviewers. Every entry's model must still be present in the
|
|
158
|
+
* catalog and its provider must still be ready — either failure is a `PanelError` naming the
|
|
159
|
+
* entry, per the "A saved panel entry no longer exists" and "A configured model belongs to an
|
|
160
|
+
* unready provider" scenarios. Each entry's own saved `thinking` and the general
|
|
161
|
+
* `modelThinkingLevels` map both occupy the "configured per-model" precedence tier; the general
|
|
162
|
+
* map wins when both name the same model, since it is the more deliberate, hand-editable source.
|
|
163
|
+
*/
|
|
164
|
+
export function resolveConfiguredPanel(panel, catalog, cfg, cliPanelWide) {
|
|
165
|
+
const deduped = collapseDuplicates(panel, (entry) => `${entry.provider}/${entry.model}`);
|
|
166
|
+
return deduped.map((entry) => {
|
|
167
|
+
const model = findModel(catalog, entry.provider, entry.model);
|
|
168
|
+
if (!model) {
|
|
169
|
+
throw new PanelError(`configured panel entry names a model absent from the catalog: ${entry.provider}/${entry.model}. ` +
|
|
170
|
+
'Re-run selection to update the saved panel.');
|
|
171
|
+
}
|
|
172
|
+
const providerInfo = catalog.providers.find((p) => p.id === entry.provider);
|
|
173
|
+
if (!providerInfo || !providerInfo.ready) {
|
|
174
|
+
const reason = providerInfo?.reason ? ` (${providerInfo.reason})` : '';
|
|
175
|
+
throw new PanelError(`configured panel entry's provider "${entry.provider}" is not ready${reason}: ` +
|
|
176
|
+
`${entry.provider}/${entry.model}`);
|
|
177
|
+
}
|
|
178
|
+
const key = `${entry.provider}/${entry.model}`;
|
|
179
|
+
return buildReviewer(model, {
|
|
180
|
+
cliPanelWide,
|
|
181
|
+
configPerModel: cfg.modelThinkingLevels?.[key] ?? entry.thinking,
|
|
182
|
+
configDefault: cfg.defaultThinkingLevel,
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/** Resolves a `--models` command-line spec into reviewers. Each entry's own `:level` pin, if
|
|
187
|
+
* any, is that model's CLI pin — the most specific source in the precedence chain. */
|
|
188
|
+
export function resolveSpecPanel(spec, catalog, cfg, cliPanelWide) {
|
|
189
|
+
const expanded = expandPanelSpec(spec, catalog);
|
|
190
|
+
const deduped = collapseDuplicates(expanded, (entry) => `${entry.provider}/${entry.model}`);
|
|
191
|
+
return deduped.map((entry) => {
|
|
192
|
+
const model = findModel(catalog, entry.provider, entry.model);
|
|
193
|
+
if (!model) {
|
|
194
|
+
// expandPanelSpec already validated existence for every entry it returns; this only
|
|
195
|
+
// guards against a future caller feeding pre-expanded entries in directly.
|
|
196
|
+
throw new PanelError(`panel entry names an unknown provider or model: ${entry.provider}/${entry.model}`);
|
|
197
|
+
}
|
|
198
|
+
const key = `${entry.provider}/${entry.model}`;
|
|
199
|
+
return buildReviewer(model, {
|
|
200
|
+
cliPin: entry.pin,
|
|
201
|
+
cliPanelWide,
|
|
202
|
+
configPerModel: cfg.modelThinkingLevels?.[key],
|
|
203
|
+
configDefault: cfg.defaultThinkingLevel,
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// -------------------------------------------------------------------------------------------
|
|
208
|
+
// Vendor-independence guard
|
|
209
|
+
// -------------------------------------------------------------------------------------------
|
|
210
|
+
const MIN_MODELS = 3;
|
|
211
|
+
const MIN_VENDORS = 3;
|
|
212
|
+
/**
|
|
213
|
+
* Groups `reviewers` by derived vendor and checks the independence minimums: at least three
|
|
214
|
+
* models across at least three distinct vendors. `unknown` is one legitimate vendor bucket like
|
|
215
|
+
* any other — several unrecognised models collapse into it exactly as several recognised models
|
|
216
|
+
* from the same real vendor would, per design.md's "`unknown` is not treated as benign" (the
|
|
217
|
+
* point there is that `unknown` is admitted rather than rejected, not that it is exempt from
|
|
218
|
+
* collapsing). The model-count check runs first so its message doesn't get crowded out by a
|
|
219
|
+
* vendor-count message that would be equally true of a too-small panel.
|
|
220
|
+
*
|
|
221
|
+
* Typed against a structural minimum (only the three fields this function actually reads)
|
|
222
|
+
* rather than the full `Reviewer` shape, so `status.ts` can hand it plain `{provider, model,
|
|
223
|
+
* vendor}` objects derived from config alone -- reusing this exact guard verdict -- without
|
|
224
|
+
* needing to build a `CatalogModel` or resolve thinking levels for anything. `Reviewer` remains
|
|
225
|
+
* assignable, so every existing caller is unaffected.
|
|
226
|
+
*/
|
|
227
|
+
export function checkIndependence(reviewers) {
|
|
228
|
+
const vendors = new Map();
|
|
229
|
+
for (const r of reviewers) {
|
|
230
|
+
const key = `${r.provider}/${r.model}`;
|
|
231
|
+
const existing = vendors.get(r.vendor);
|
|
232
|
+
if (existing) {
|
|
233
|
+
existing.push(key);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
vendors.set(r.vendor, [key]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (reviewers.length < MIN_MODELS) {
|
|
240
|
+
return {
|
|
241
|
+
ok: false,
|
|
242
|
+
vendors,
|
|
243
|
+
reason: `panel holds ${reviewers.length} model(s); at least ${MIN_MODELS} are required`,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
if (vendors.size < MIN_VENDORS) {
|
|
247
|
+
return {
|
|
248
|
+
ok: false,
|
|
249
|
+
vendors,
|
|
250
|
+
reason: `panel resolves to ${vendors.size} distinct vendor(s) (${MIN_VENDORS} required): ` +
|
|
251
|
+
formatVendorGrouping(vendors),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
return { ok: true, vendors };
|
|
255
|
+
}
|
|
256
|
+
/** Formats a vendor grouping as `vendor: member, member (n)` lines, for printing on refusal or
|
|
257
|
+
* before launch. Singleton groups are included too, so the full picture is visible at a glance. */
|
|
258
|
+
export function formatVendorGrouping(vendors) {
|
|
259
|
+
return Array.from(vendors.entries())
|
|
260
|
+
.map(([vendor, members]) => `${vendor}: ${members.join(', ')}`)
|
|
261
|
+
.join('\n');
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Enforces the independence guard. Throws `GuardRefusal` (exit code 4) when the panel fails the
|
|
265
|
+
* guard and `allowCorrelated` is false. Stateless and cheap to call twice — at the end of
|
|
266
|
+
* selection and again immediately before launch — which is how a panel that reached
|
|
267
|
+
* configuration by hand-editing (never passing through the picker) still gets checked.
|
|
268
|
+
*/
|
|
269
|
+
export function enforceIndependence(reviewers, allowCorrelated) {
|
|
270
|
+
const result = checkIndependence(reviewers);
|
|
271
|
+
if (!result.ok && !allowCorrelated) {
|
|
272
|
+
throw new GuardRefusal(result.reason ?? 'panel failed the independence guard', result.vendors);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
|
package/dist/picker.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Reviewer } from './panel.js';
|
|
2
|
+
import type { Catalog } from './providers.js';
|
|
3
|
+
export interface PickerIO {
|
|
4
|
+
input: NodeJS.ReadableStream;
|
|
5
|
+
output: NodeJS.WritableStream & Partial<Pick<NodeJS.WriteStream, 'columns' | 'rows' | 'isTTY'>>;
|
|
6
|
+
isTTY: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class PickerCancelled extends Error {
|
|
9
|
+
readonly exitCode: 2;
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class PickerNonInteractive extends Error {
|
|
13
|
+
readonly exitCode: 2;
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Runs the three-stage picker: providers, then models scoped to those providers, then a
|
|
18
|
+
* thinking level per selected reasoning model (non-reasoning selections are shown as "no
|
|
19
|
+
* thinking" and skip the prompt entirely). Throws `PickerNonInteractive` (exit code 2) without a
|
|
20
|
+
* terminal, before any prompt runs, and `PickerCancelled` (exit code 2) if the user cancels at
|
|
21
|
+
* any stage.
|
|
22
|
+
*/
|
|
23
|
+
export declare function pickPanel(catalog: Catalog, io?: PickerIO): Promise<Reviewer[]>;
|
|
24
|
+
//# sourceMappingURL=picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,gBAAgB,CAAC;AAG1E,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAChG,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,SAAsD;CAK1E;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAK5B;AA2FD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAE,QAAsB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAuFjG"}
|