@neuronection/assistant-ui 0.57.0 → 0.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/chunk-3Y6QOTVA.js +270 -0
- package/dist/chunk-3Y6QOTVA.js.map +1 -0
- package/dist/{chunk-FPX3AI3Z.js → chunk-GR6CSKQY.js} +3 -3
- package/dist/{chunk-FPX3AI3Z.js.map → chunk-GR6CSKQY.js.map} +1 -1
- package/dist/{chunk-3YIVKKT6.js → chunk-GUFHUKUA.js} +3 -3
- package/dist/{chunk-3YIVKKT6.js.map → chunk-GUFHUKUA.js.map} +1 -1
- package/dist/chunk-KDILZS2Z.js +3 -0
- package/dist/chunk-KDILZS2Z.js.map +1 -0
- package/dist/{chunk-KV67D3RP.js → chunk-O6BRNGXV.js} +2 -2
- package/dist/{chunk-KV67D3RP.js.map → chunk-O6BRNGXV.js.map} +1 -1
- package/dist/chunk-X6L5T65Q.js +81 -0
- package/dist/chunk-X6L5T65Q.js.map +1 -0
- package/dist/connection-test-row.js +1 -1
- package/dist/index.d.ts +114 -4
- package/dist/index.js +9 -8
- package/dist/model-picker.d.ts +16 -2
- package/dist/model-picker.js +1 -1
- package/dist/model-registry.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/task-assignment-picker.js +1 -1
- package/dist/web-search-providers.d.ts +99 -0
- package/dist/web-search-providers.js +3 -0
- package/dist/web-search-providers.js.map +1 -0
- package/package.json +5 -1
- package/dist/chunk-CCFVDJHU.js +0 -65
- package/dist/chunk-CCFVDJHU.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/model-registry/ModelRegistry.tsx"],"names":["ModelRegistry"],"mappings":";;;;;;;;;;;AA0JA,IAAM,kCAAkB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA;AAG3D,IAAM,iBAAA,GAAoB,CAAC,IAAA,KACzB,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAC,CAAA;AAO7C,IAAM,aAAA,GAAgB,CAAC,IAAA,EAAgB,UAAA,KAA8C;AACnF,EAAA,MAAM,aAAA,GAAgB,KAAK,IAAA,CAAK,CAAC,QAAQ,UAAA,CAAW,GAAA,CAAI,GAAG,CAAC,CAAA;AAC5D,EAAA,OAAO,aAAA,GAAgB,CAAC,aAAa,CAAA,GAAI,IAAA;AAC3C,CAAA;AAQA,IAAM,iBAAA,GAAoB,CACxB,IAAA,EACA,YAAA,EACA,SACA,QAAA,KACa;AACb,EAAA,IAAI,OAAO,IAAA,CAAK,YAAY,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,IAAA;AACnD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAO,CAAA,IAAK,EAAC;AAC1C,IAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAC,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,YAAY,EAC3C,MAAA,CAAO,CAAC,GAAG,MAAM,MAAM,MAAA,CAAO,QAAA,CAAS,OAAO,CAAC,CAAA,CAC/C,IAAI,CAAC,CAAC,GAAG,CAAA,KAAM,GAAG,CAAA;AACrB,EAAA,OAAO,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,IAAA,GAAO,KAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,KAAQ,OAAA,IAAW,CAAC,UAAA,CAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAC3G,CAAA;AAGA,IAAM,gBAAA,GAAmB,CACvB,IAAA,EACA,YAAA,KACa;AACb,EAAA,IAAI,GAAA,GAAM,CAAC,GAAG,IAAI,CAAA;AAClB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,GAAA,GAAM,iBAAA,CAAkB,GAAA,EAAK,YAAA,EAAc,GAAA,EAAK,IAAI,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM,MAAA,GAAS,YAAA;AAWf,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,GAAA;AAAA,EACP,GAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAkB;AAC9B,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,OAAW,EAAA,GAAK,CAAA,GAAI,OAAO,KAAK,CAAA;AACtD,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/B,IAAA,MAAM,OAAO,OAAA,GAAU,KAAA;AACvB,IAAA,QAAA,CAAS,MAAA,CAAO,GAAA,IAAO,IAAA,IAAQ,IAAA,GAAO,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,EACzE,CAAA;AACA,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yBAAA,EACf,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACjE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EACd,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,IAAA;AAAA,UACA,GAAA;AAAA,UACA,GAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAU,CAAC,KAAA,KAAU,QAAA,CAAS,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAChD,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,QAAA,KAAA,KAAU,EAAA,mBACT,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAY,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,YACpB,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,oEAAA;AAAA,YAEV,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,SACpC,GACE,IAAA;AAAA,wBACJ,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAY,GAAG,KAAK,CAAA,UAAA,CAAA;AAAA,cACpB,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,cAChC,SAAA,EAAU,iFAAA;AAAA,cAEV,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC;AAAA;AAAA,WAC9C;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAY,GAAG,KAAK,CAAA,UAAA,CAAA;AAAA,cACpB,SAAS,MAAM,IAAA,CAAK,CAAC,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,cACjC,SAAA,EAAU,iFAAA;AAAA,cAEV,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC;AAAA;AAAA;AAChD,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAoBO,IAAM,aAAA,GAAsB,KAAA,CAAA,UAAA;AAAA,EACjC,SAASA,cAAAA,CACP;AAAA,IACE,SAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA,GAAc,OAAA;AAAA,IACd,WAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA,GAAc,SAAA;AAAA,IACd,WAAA;AAAA,IACA,sBAAA;AAAA,IACA,QAAA,GAAW,WAAA;AAAA,IACX,WAAA,GAAc,SAAA;AAAA,IACd,QAAA,GAAW,WAAA;AAAA,IACX,SAAA,GAAY,YAAA;AAAA,IACZ,gBAAA,GAAmB,OAAA;AAAA,IACnB,mBAAA,GAAsB,6BAAA;AAAA,IACtB,eAAA,GAAkB,uBAAA;AAAA,IAClB,oBAAA,GAAuB,UAAA;AAAA,IACvB,SAAA,GAAY,MAAA;AAAA,IACZ,WAAA,GAAc,QAAA;AAAA,IACd,YAAA,GAAe,SAAA;AAAA,IACf,SAAA,GAAY,cAAA;AAAA,IACZ,QAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA,GAAkB,YAAA;AAAA,IAClB,eAAA;AAAA,IACA,iBAAA,GAAoB,qBAAA;AAAA,IACpB,WAAA,GAAc,eAAA;AAAA,IACd,kBAAA,GAAqB,mEAAA;AAAA,IACrB,uBAAA,GAA0B,2BAAA;AAAA,IAC1B,gBAAA,GAAmB,gCAAA;AAAA,IACnB,kBAAA,GAAqB,sBAAA;AAAA,IACrB,UAAA,GAAa,OAAA;AAAA,IACb,iBAAA,GAAoB,cAAA;AAAA,IACpB,gBAAA,GAAmB,aAAA;AAAA,IACnB,cAAA,GAAiB,YAAA;AAAA,IACjB,UAAA,GAAa,eAAA;AAAA,IACb,oBAAA,GAAuB,kBAAA;AAAA,IACvB,iBAAA;AAAA,IACA,sBAAA,GAAyB,WAAA;AAAA,IACzB,SAAA,GAAY,MAAA;AAAA,IACZ,WAAA,GAAc,QAAA;AAAA,IACd,aAAA,GAAgB,WAAA;AAAA,IAChB,mBAAA,GAAsB,mBAAA;AAAA,IACtB,WAAA;AAAA,IACA;AAAA,KAEF,GAAA,EACA;AACA,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAA4B,IAAI,CAAA;AAChE,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,eAAwB,IAAI,CAAA;AAEtE,IAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,OAAA;AAAA,MAC1B,MAAM,IAAI,GAAA,CAAI,cAAA,IAAkB,EAAE,CAAA;AAAA,MAClC,CAAC,cAAc;AAAA,KACjB;AACA,IAAA,MAAM,cAAA,GAAuB,KAAA,CAAA,OAAA;AAAA,MAC3B,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,MACxD,CAAC,MAAM,aAAa;AAAA,KACtB;AACA,IAAA,MAAM,qBAAA,GAA8B,KAAA,CAAA,OAAA;AAAA,MAClC,MAAM,KAAK,MAAA,CAAO,CAAC,QAAQ,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,MACvD,CAAC,MAAM,aAAa;AAAA,KACtB;AAEA,IAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,MAC1B,CAAC,KAAA,KACC,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU,KAAK,CAAA,IAAK,EAAE,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,MACnE,CAAC,IAAI;AAAA,KACP;AAEA,IAAA,MAAM,UAAA,GAAmB,kBAAY,MAAM;AACzC,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,KAAuB;AAC7C,MAAA,wBAAA,CAAyB,kBAAA,KAAuB,UAAA,GAAa,IAAA,GAAO,UAAU,CAAA;AAAA,IAChF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,UAAA,KAAuB;AAC3C,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA;AAC5C,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,UAAA;AAAA,QACA,UAAA,EAAY,EAAA;AAAA,QACZ,KAAA,EAAO,EAAA;AAAA,QACP,MAAM,QAAA,GAAW,CAAC,QAAA,CAAS,KAAK,IAAI,EAAC;AAAA,QACrC,eAAA,EAAiB,EAAA;AAAA,QACjB,eAAA,EAAiB,KAAA;AAAA,QACjB,WAAA,EAAa,EAAA;AAAA,QACb,SAAA,EAAW,EAAA;AAAA,QACX,iBAAA,EAAmB,EAAA;AAAA,QACnB,OAAO,EAAC;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,YAAA,EAAc,KAAA;AAAA,QACd,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA8B;AACnD,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,QACtB,IAAA,EAAM,CAAC,GAAG,KAAA,CAAM,IAAI,CAAA;AAAA,QACpB,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB,MAAM,eAAA,IAAmB,EAAA;AAAA,QAC1C,eAAA,EACE,KAAA,CAAM,eAAA,IAAmB,IAAA,IACzB,KAAA,CAAM,eAAA,KAAoB,EAAA,IAC1B,CAAA,CAAE,sBAAA,IAA0B,EAAC,EAAG,QAAA,CAAS,MAAM,eAAe,CAAA;AAAA,QAChE,aAAa,KAAA,CAAM,WAAA,IAAe,OAAO,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,GAAI,EAAA;AAAA,QACrE,WAAW,KAAA,CAAM,SAAA,IAAa,OAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,GAAI,EAAA;AAAA,QAC/D,iBAAA,EAAmB,MAAM,iBAAA,IAAqB,EAAA;AAAA,QAC9C,OAAO,EAAE,GAAI,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG;AAAA,QAChC,YAAA,EAAc,KAAA;AAAA,QACd,KAAA;AAAA,QACA,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,EAAa,KAAA,KAAkB;AACtD,MAAA,QAAA;AAAA,QAAS,CAAC,OAAA,KACR,OAAA,GACI,EAAE,GAAG,OAAA,EAAS,OAAO,EAAE,GAAG,OAAA,CAAQ,KAAA,EAAO,CAAC,GAAG,GAAG,OAAM,EAAG,YAAA,EAAc,MAAK,GAC5E;AAAA,OACN;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAqB;AACzC,MAAA,MAAM,MAAA,GAAA,CAAU,gBAAgB,EAAC,EAAG,KAAK,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,QAAQ,CAAA;AACzE,MAAA,QAAA,CAAS,CAAC,OAAA,KAAY;AACpB,QAAA,IAAI,CAAC,SAAS,OAAO,OAAA;AACrB,QAAA,MAAM,UAAA,GAAa,MAAA,GAAS,aAAA,CAAc,CAAC,GAAG,OAAO,IAAI,CAAA,EAAG,aAAa,CAAA,GAAI,OAAA,CAAQ,IAAA;AAGrF,QAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,UAAA,EAAY,eAAA,IAAmB,EAAE,CAAA;AACnE,QAAA,OAAO;AAAA,UACL,GAAG,OAAA;AAAA,UACH,UAAA,EAAY,QAAA;AAAA,UACZ,IAAA,EAAM,QAAA;AAAA,UACN,iBAAA,EAAmB,SAAS,QAAA,CAAS,UAAU,IAC1C,iBAAA,IAAqB,OAAA,CAAQ,qBAAqB,EAAA,GACnD,EAAA;AAAA,UACJ,OAAO,OAAA,CAAQ,YAAA,GAAe,OAAA,CAAQ,KAAA,GAAQ,WAAW,QAAQ;AAAA,SACnE;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAkB;AACxC,MAAA,QAAA,CAAS,CAAC,OAAA,KAAY;AACpB,QAAA,IAAI,CAAC,SAAS,OAAO,OAAA;AACrB,QAAA,MAAM,YAAA,GAAe,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC5C,QAAA,MAAM,GAAA,GAAM,YAAA;AAAA;AAAA,UAER,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,KAAK,IACzB,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,KAAU,KAAK,CAAA,GAC9C,CAAC,KAAK;AAAA,YACR,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,GACzB,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,KAAU,KAAK,CAAA,GAC9C,CAAC,GAAG,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,aAAA,CAAc,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,KAAK,CAAA;AAC1E,QAAA,MAAM,QAAA,GAAW,YAAA,GACb,GAAA,GACA,iBAAA,CAAkB,KAAK,eAAA,IAAmB,EAAC,EAAG,KAAA,EAAO,CAAC,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AACtF,QAAA,OAAO;AAAA,UACL,GAAG,OAAA;AAAA,UACH,IAAA,EAAM,QAAA;AAAA;AAAA;AAAA,UAGN,iBAAA,EAAmB,SAAS,QAAA,CAAS,UAAU,IAC1C,iBAAA,IAAqB,OAAA,CAAQ,qBAAqB,EAAA,GACnD;AAAA,SACN;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,KAAA,EAAyB,KAAA,KAAkB;AAC7D,MAAA,QAAA,CAAS,CAAC,OAAA,KAAa,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,CAAC,KAAK,GAAG,KAAA,EAAM,GAAI,OAAQ,CAAA;AAAA,IAC5E,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAA+B;AAC/C,MAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,MAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,MAAA,MAAM,MAAA,GAAS,OAAO,OAAO,CAAA;AAC7B,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAAA,IAC5C,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,CAAW,IAAA,EAAK;AACzC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,aAAA,CAAc,uBAAuB,CAAA;AACrC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GACJ,MAAM,YAAA,IAAgB,MAAA,CAAO,OAAO,KAAA,CAAM,KAAK,EAAE,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,OAAW,EAAE,CAAA,GAChF,EAAE,GAAG,KAAA,CAAM,OAAM,GACjB,MAAA;AACN,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AACjD,MAAA,MAAM,OAAA,GAA8B;AAAA,QAClC,UAAA;AAAA,QACA,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK,IAAK,MAAA;AAAA,QAC7B,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,eAAA,EAAiB,KAAA,CAAM,eAAA,CAAgB,IAAA,EAAK;AAAA,QAC5C,WAAA,EAAa,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA;AAAA,QACvC,SAAA,EAAW,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAAA,QACnC,GAAI,cAAc,KAAA,CAAM,iBAAA,GACpB,EAAE,iBAAA,EAAmB,KAAA,CAAM,iBAAA,EAAkB,GAC7C,EAAC;AAAA,QACL,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU;AAAC,OACzC;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,QAAA,UAAA,CAAW,KAAA,CAAM,YAAY,OAAO,CAAA;AAAA,MACtC,CAAA,MAAA,IAAW,MAAM,KAAA,EAAO;AACtB,QAAA,MAAM,KAAA,GAA4B,EAAE,GAAG,OAAA,EAAQ;AAC/C,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,KAAA,CAAM,iBAAA,GAAoB,MAAM,iBAAA,IAAqB,iBAAA;AAAA,QACvD,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,iBAAA,GAAoB,MAAA;AAAA,QAC5B;AACA,QAAA,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,MAClC;AACA,MAAA,UAAA,EAAW;AAAA,IACb,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,QAAA,KAA2D;AACpF,MAAA,MAAM,KAAA,GAAQ,gBAAgB,EAAC;AAC/B,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAChC,MAAA,OAAO;AAAA,QACL;AAAA,UACE,IAAI,QAAA,CAAS,EAAA;AAAA,UACb,MAAM,QAAA,CAAS,IAAA;AAAA,UACf,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,YAC5B,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,MAAM,KAAA,CAAM,EAAA;AAAA,YACZ,cAAc,KAAA,CAAM;AAAA,WACtB,CAAE;AAAA;AACJ,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,MAAA,MAAM,QAAA,GAAW,UAAU,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,EAAA,KAAO,MAAM,UAAU,CAAA;AACxE,MAAA,MAAM,OAAA,GAAU,QAAA,GAAW,iBAAA,CAAkB,QAAQ,IAAI,EAAC;AAC1D,MAAA,MAAM,YAAA,GAAA,CAAgB,YAAA,IAAgB,EAAC,EAAG,MAAA;AAAA,QACxC,CAAC,MAAA,KACC,CAAC,MAAA,CAAO,IAAA;AAAA,UACN,CAAC,UAAU,KAAA,CAAM,UAAA,KAAe,MAAM,UAAA,IAAc,KAAA,CAAM,eAAe,MAAA,CAAO;AAAA;AAClF,OACJ,CAAE,MAAA;AACF,MAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAI,IAAA,EAAC,cAAc,CAAC,IAAA,KAAmB,CAAC,IAAA,GAAO,YAAW,GAAI,MAAA,EACnE,QAAA,kBAAA,IAAA,CAAC,YAAA,EAAA,EAAa,WAAU,8CAAA,EACtB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aACnB,QAAA,EAAA,KAAA,CAAM,IAAA,KAAS,KAAA,GAAQ,QAAA,GAAW,GAAG,SAAS,CAAA,QAAA,EAAM,KAAA,CAAM,UAAU,IACvE,CAAA,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,QAAA,mBACC,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAQ,iCAAA;AAAA,cACR,SAAA,EAAU,+HAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EAAW,QAAA,EAAA;AAAA,kBAAA,oBAAA;AAAA,kBAAqB;AAAA,iBAAA,EAAC,CAAA;AAAA,gCACjD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kDAAA,EACb,mBAAS,IAAA,EACZ,CAAA;AAAA,gBACC,QAAA,CAAS,0BACR,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,2BAA0B,QAAA,EAAA,MAAA,EAEtD,CAAA;AAAA,kCACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0DAAA,EACb,mBAAS,OAAA,EACZ;AAAA,iBAAA,EACF,CAAA,GACE;AAAA;AAAA;AAAA,WACN,GACE,IAAA;AAAA,UACH,KAAA,CAAM,SAAS,KAAA,GACd,WAAA,KAAgB,4BACd,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,+EAAA,EACX,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAK,IAAA,EAAK,CAAA;AAAA,YAClB;AAAA,WAAA,EACH,CAAA,GACE,WAAA,KAAgB,OAAA,mBAClB,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,cACpE,aAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,MAAK,IAAA,EAAK,OAAA,EAAS,aAAA,EAC1C,QAAA,EAAA,UAAA,EACH,CAAA,GACE;AAAA,aAAA,EACN,CAAA;AAAA,YACC,KAAA,CAAM,MAAA,mBACL,IAAA,CAAC,OAAA,EAAA,EAAM,WAAU,yBAAA,EACf,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA,gBAAA,EACH,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,MAAA;AAAA,kBACL,OAAO,KAAA,CAAM,UAAA;AAAA,kBACb,UAAU,CAAC,KAAA,KAAU,WAAW,YAAA,EAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,kBAChE,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EACF,CAAA,mBAEA,IAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAQ,8BAAA;AAAA,gBACR,SAAA,EAAU,8VAAA;AAAA,gBACV,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA,KAAO,CAAA,GAAI,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK,GAAI,CAAE,CAAA;AAAA,gBAE/D,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,kBACzC;AAAA;AAAA;AAAA;AACH,WAAA,EAEJ,oBAEA,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,MAAA,mBACL,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yBAAA,EACf,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA,gBAAA,EACH,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,MAAA;AAAA,kBACL,OAAO,KAAA,CAAM,UAAA;AAAA,kBACb,UAAU,CAAC,KAAA,KAAU,WAAW,YAAA,EAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,kBAChE,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EACF,CAAA,mBAEA,GAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,OAAA;AAAA,gBACX,OAAO,KAAA,CAAM,UAAA;AAAA,gBACb,UAAU,CAAC,OAAA,KAAa,OAAA,GAAU,YAAA,CAAa,OAAO,CAAA,GAAI,MAAA;AAAA,gBAC1D,KAAA,EAAO,gBAAA;AAAA,gBACP,iBAAA;AAAA,gBACA,WAAA;AAAA,gBACA,UAAA,EAAY;AAAA;AAAA,aACd;AAAA,4BAEF,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAQ,8BAAA;AAAA,gBACR,SAAA,EAAU,8VAAA;AAAA,gBACV,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,MAAO,CAAA,GAAI,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,CAAC,CAAA,CAAE,MAAA,KAAW,CAAE,CAAA;AAAA,gBAEnE,QAAA,EAAA,KAAA,CAAM,yBACL,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,kBACzC;AAAA,iBAAA,EACH,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,kBACzC;AAAA,iBAAA,EACH;AAAA;AAAA;AAEJ,WAAA,EACF,oBAGF,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAA,EAAyC,gBAAM,UAAA,EAAW,CAAA;AAAA,0BAEzE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yBAAA,EACf,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,4BACtE,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,OAAO,KAAA,CAAM,KAAA;AAAA,gBACb,QAAA,EAAU,CAAC,KAAA,KACT,QAAA;AAAA,kBAAS,CAAC,OAAA,KACR,OAAA,GACI,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,YAAA,EAAc,IAAA,EAAK,GAC5D;AAAA,iBACN;AAAA,gBAEF,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,YACpE,qBAAA,CAAsB,MAAA,GAAS,CAAA,mBAC9B,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,eAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,cAAA;AAAA,kBACN,UAAU,KAAA,CAAM,IAAA;AAAA,kBAChB,QAAA,EAAU,cAAA;AAAA,kBACV,SAAA,EAAW;AAAA;AAAA,eACb;AAAA,8BACA,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0GAAA,EACX,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAoC,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,gBAC/D,eAAA;AAAA,gCACD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAoC,eAAW,IAAA,EAAC;AAAA,eAAA,EAClE,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,eAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,qBAAA;AAAA,kBACN,UAAU,KAAA,CAAM,IAAA;AAAA,kBAChB,QAAA,EAAU,cAAA;AAAA,kBACV,SAAA,EAAW;AAAA;AAAA;AACb,aAAA,EACF,CAAA,mBAEA,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,IAAA;AAAA,gBACA,UAAU,KAAA,CAAM,IAAA;AAAA,gBAChB,QAAA,EAAU,cAAA;AAAA,gBACV,SAAA,EAAW;AAAA;AAAA,aACb;AAAA,YAED,KAAA,CAAM,KAAK,QAAA,CAAS,UAAU,KAAK,iBAAA,mBAClC,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6DAAA,EACX,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,gBAAA,sBAAA;AAAA,gBAAuB;AAAA,eAAA,EAAC,CAAA;AAAA,8BAC/B,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kJAAA,EACb,QAAA,EAAA,iBAAA,EACH;AAAA,aAAA,EACF,CAAA,GACE,IAAA;AAAA,YACH,2BACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAqC,oBAAS,CAAA,GACzD;AAAA,WAAA,EACN,CAAA;AAAA,UACC,iBAAA,CAAkB,MAAM,IAAI,CAAA,IAAK,yCAChC,IAAA,CAAC,OAAA,EAAA,EAAM,WAAU,yBAAA,EACf,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA,oBAAA,EACH,CAAA;AAAA,4BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACZ,gBAAM,eAAA,mBACL,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,OAAO,KAAA,CAAM,eAAA;AAAA,gBACb,WAAA,EAAa,iBAAA;AAAA,gBACb,UAAU,CAAC,KAAA,KAAU,WAAW,iBAAA,EAAmB,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,gBACrE,SAAA,EAAU;AAAA;AAAA,aACZ,mBAEA,IAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,KAAA,CAAM,eAAA,GAAkB,MAAA,GAAS,KAAA,CAAM,eAAA;AAAA,gBAC9C,QAAA,EAAU,CAAC,KAAA,KACT,QAAA;AAAA,kBAAS,CAAC,YACR,OAAA,GACI;AAAA,oBACE,GAAG,OAAA;AAAA,oBACH,eAAA,EAAiB,KAAA,CAAM,MAAA,CAAO,KAAA,KAAU,MAAA;AAAA,oBACxC,eAAA,EACE,MAAM,MAAA,CAAO,KAAA,KAAU,SACnB,OAAA,CAAQ,eAAA,GACR,MAAM,MAAA,CAAO;AAAA,mBACrB,GACA;AAAA,iBACN;AAAA,gBAEF,SAAA,EAAU,yIAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAG,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,kBACjB,sBAAA,CAAuB,GAAA,CAAI,CAAC,MAAA,qBAC3B,GAAA,CAAC,YAAoB,KAAA,EAAO,MAAA,EACzB,QAAA,EAAA,MAAA,EAAA,EADU,MAEb,CACD,CAAA;AAAA,kCACD,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAO,MAAA,EAAS,QAAA,EAAA,iBAAA,EAAkB;AAAA;AAAA;AAAA,aAC5C,EAEJ;AAAA,WAAA,EACF,CAAA,GACE,IAAA;AAAA,UACH,kBAAkB,KAAA,CAAM,IAAI,oBAC3B,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,gBAAA;AAAA,gBACP,OAAO,KAAA,CAAM,WAAA;AAAA,gBACb,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,eAAe,KAAK,CAAA;AAAA,gBACpD,OAAA,EAAS,MAAM,UAAA,CAAW,aAAA,EAAe,EAAE,CAAA;AAAA,gBAC3C,IAAA,EAAK,KAAA;AAAA,gBACL,GAAA,EAAI,GAAA;AAAA,gBACJ,GAAA,EAAI;AAAA;AAAA,aACN;AAAA,4BACA,GAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,cAAA;AAAA,gBACP,OAAO,KAAA,CAAM,SAAA;AAAA,gBACb,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,aAAa,KAAK,CAAA;AAAA,gBAClD,OAAA,EAAS,MAAM,UAAA,CAAW,WAAA,EAAa,EAAE,CAAA;AAAA,gBACzC,IAAA,EAAK,KAAA;AAAA,gBACL,GAAA,EAAI;AAAA;AAAA;AACN,WAAA,EACF,CAAA,GACE,IAAA;AAAA,UAAA,CACF,WAAA,IAAe,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,KAAU;AAClC,YAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,IAAK,EAAA;AACxC,YAAA,MAAM,MAAA,GACJ,iIAAA;AACF,YAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAsB,SAAA,EAAU,yBAAA,EAC/B,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA;AAAA,cACtE,MAAM,SAAA,mBACL,GAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,CAAA;AAAA,kBACN,KAAA;AAAA,kBACA,aAAa,KAAA,CAAM,WAAA;AAAA,kBACnB,QAAA,EAAU,CAAC,KAAA,KAAU,eAAA,CAAgB,MAAM,GAAA,EAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,kBAClE,SAAA,EAAW;AAAA;AAAA,eACb,mBAEA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,MAAA;AAAA,kBACL,KAAA;AAAA,kBACA,aAAa,KAAA,CAAM,WAAA;AAAA,kBACnB,QAAA,EAAU,CAAC,KAAA,KAAU,eAAA,CAAgB,MAAM,GAAA,EAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,kBAClE,SAAA,EAAW;AAAA;AAAA;AACb,aAAA,EAAA,EAjBQ,MAAM,GAmBlB,CAAA;AAAA,UAEJ,CAAC,CAAA;AAAA,UACA,UAAA,uBACE,GAAA,EAAA,EAAE,IAAA,EAAK,SAAQ,SAAA,EAAU,iCAAA,EACvB,sBACH,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,6BACC,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,IAAA,KAAS,SAAS,QAAA,mBACvB,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,QAAA,EAAU,WAAA,KAAgB,OAAA,IAAW,YAAA,KAAiB,CAAA;AAAA,cACtD,SAAS,MAAM;AACb,gBAAA,QAAA;AAAA,kBACE,KAAA,CAAM,UAAA;AAAA,kBAAA,CACL,YAAA,IAAgB,EAAC,EACf,MAAA;AAAA,oBACC,CAAC,MAAA,KACC,CAAC,MAAA,CAAO,IAAA;AAAA,sBACN,CAAC,UACC,KAAA,CAAM,UAAA,KAAe,MAAM,UAAA,IAC3B,KAAA,CAAM,eAAe,MAAA,CAAO;AAAA;AAChC,mBACJ,CACC,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,oBAChB,YAAY,MAAA,CAAO,EAAA;AAAA,oBACnB,MAAM,MAAA,CAAO,IAAA;AAAA,oBACb,eAAA,EAAiB,EAAA;AAAA,oBACjB,WAAA,EAAa,IAAA;AAAA,oBACb,SAAA,EAAW;AAAA,mBACb,CAAE;AAAA,iBACN;AACA,gBAAA,UAAA,EAAW;AAAA,cACb,CAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,eAAW,IAAA,EAAC,CAAA;AAAA,gBACjB,WAAA;AAAA,gBAAY,IAAA;AAAA,gBAAG,YAAA;AAAA,gBAAa;AAAA;AAAA;AAAA,WAC/B,GACE,IAAA;AAAA,0BACJ,GAAA,CAAC,UAAO,OAAA,EAAQ,OAAA,EAAQ,MAAK,IAAA,EAAK,OAAA,EAAS,YACxC,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,0BACA,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAS,WAAA,EACzB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,eAAW,IAAA,EAAC,CAAA;AAAA,YAClB,KAAA,CAAM,IAAA,KAAS,KAAA,GAAQ,aAAA,GAAgB;AAAA,WAAA,EAC1C;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,gBAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,QAEpD,QAAA,EAAA;AAAA,UAAA,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa;AAC3B,YAAA,MAAM,QAAA,GAAW,uBAAuB,QAAA,CAAS,EAAA;AACjD,YAAA,MAAM,cAAA,GAAiB,OAAO,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,UAAA,KAAe,SAAS,EAAE,CAAA;AAChF,YAAA,uBACE,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAQ,yBAAA;AAAA,gBACR,SAAA,EAAW,EAAA;AAAA,kBACT,4EAAA;AAAA,kBACA,WACI,wDAAA,GACA;AAAA,iBACN;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAA,IAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,eAAA,EAAe,QAAA;AAAA,sBACf,OAAA,EAAS,MAAM,cAAA,CAAe,QAAA,CAAS,EAAE,CAAA;AAAA,sBACzC,SAAA,EAAU,uKAAA;AAAA,sBAEV,QAAA,EAAA;AAAA,wCAAA,GAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,SAAA,EAAW,EAAA;AAAA,8BACT,+FAAA;AAAA,8BACA,WACI,oDAAA,GACA;AAAA,6BACN;AAAA,4BAEC,QAAA,EAAA,QAAA,mBACC,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA,mBAE5C,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,yBAEjD;AAAA,wCACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EACd,QAAA,EAAA;AAAA,0CAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6EAAA,EACb,QAAA,EAAA;AAAA,4BAAA,QAAA,CAAS,IAAA;AAAA,4BACT,QAAA,CAAS,uBACR,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qIAAA,EACb,QAAA,EAAA,QAAA,CAAS,MACZ,CAAA,GACE,IAAA;AAAA,4BACH,cAAA,CAAe,MAAA,mBACd,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+HAAA,EACb,QAAA,EAAA;AAAA,8BAAA,cAAA,CAAe,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAA,CAAE,MAAA;AAAA,8BAAO,GAAA;AAAA,8BACvD,cAAA,CAAe;AAAA,6BAAA,EAClB,CAAA,GACE;AAAA,2BAAA,EACN,CAAA;AAAA,0BACC,QAAA,CAAS,0BACR,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4DAAA,EACb,QAAA,EAAA,QAAA,CAAS,SACZ,CAAA,GACE;AAAA,yBAAA,EACN;AAAA;AAAA;AAAA,mBACF;AAAA,kBACC,QAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,CAAC,QAAA,CAAS,QAAA,IAAY,cAAA,CAAe,MAAA,KAAW,CAAA,uBAC9C,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EACV,QAAA,EAAA,kBAAA,EACH,CAAA,GACE,IAAA;AAAA,oBACH,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AAC7B,sBAAA,uBACE,IAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAW,EAAA;AAAA,4BACT,kHAAA;AAAA,4BACA,MAAM,OAAA,IAAW;AAAA,2BACnB;AAAA,0BAEC,QAAA,EAAA;AAAA,4BAAA,eAAA,IAAmB,CAAC,SAAS,QAAA,mBAC5B,GAAA;AAAA,8BAAC,OAAA;AAAA,8BAAA;AAAA,gCACC,IAAA,EAAK,UAAA;AAAA,gCACL,YAAA,EAAY,CAAA,EAAG,WAAW,CAAA,QAAA,EAAM,MAAM,UAAU,CAAA,CAAA;AAAA,gCAChD,SAAS,KAAA,CAAM,OAAA;AAAA,gCACf,UAAU,CAAC,KAAA,KAAU,gBAAgB,KAAA,EAAO,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,gCAChE,SAAA,EAAU;AAAA;AAAA,6BACZ,GACE,IAAA;AAAA,4CACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACb,gBAAM,UAAA,EACT,CAAA;AAAA,4BACC,MAAM,OAAA,mBACL,GAAA,CAAC,UAAK,SAAA,EAAU,kCAAA,EACb,wBACH,CAAA,GACE,IAAA;AAAA,4CACJ,GAAA;AAAA,8BAAC,eAAA;AAAA,8BAAA;AAAA,gCACC,OAAA,EAAQ,OAAA;AAAA,gCACR,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA;AAAA,gCAClC,UAAU,KAAA,CAAM;AAAA;AAAA,6BAClB;AAAA,4BACC,CAAC,SAAS,QAAA,mBACT,IAAA;AAAA,8BAAC,MAAA;AAAA,8BAAA;AAAA,gCACC,OAAA,EAAQ,SAAA;AAAA,gCACR,IAAA,EAAK,IAAA;AAAA,gCACL,YAAA,EAAY,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAM,UAAU,CAAA,CAAA;AAAA,gCAC5C,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,gCAElC,QAAA,EAAA;AAAA,kDAAA,GAAA,CAAC,MAAA,EAAA,EAAO,eAAW,IAAA,EAAC,CAAA;AAAA,kCACnB;AAAA;AAAA;AAAA,6BACH,GACE,IAAA;AAAA,4BACH,CAAC,SAAS,QAAA,mBACT,GAAA;AAAA,8BAAC,QAAA;AAAA,8BAAA;AAAA,gCACC,IAAA,EAAK,QAAA;AAAA,gCACL,YAAA,EAAY,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,MAAM,UAAU,CAAA,CAAA;AAAA,gCAC9C,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,gCAClC,SAAA,EAAU,yPAAA;AAAA,gCAEV,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,6BACpC,GACE;AAAA;AAAA,yBAAA;AAAA,wBAhDC,KAAA,CAAM;AAAA,uBAiDb;AAAA,oBAEJ,CAAC,CAAA;AAAA,oBACA,CAAC,QAAA,CAAS,QAAA,mBACT,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,kBAAA,IAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,SAAA;AAAA,wBACR,IAAA,EAAK,IAAA;AAAA,wBACL,iBAAe,KAAA,EAAO,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,eAAe,QAAA,CAAS,EAAA;AAAA,wBACtE,OAAA,EAAS,MAAM,YAAA,CAAa,QAAA,CAAS,EAAE,CAAA;AAAA,wBAEvC,QAAA,EAAA;AAAA,0CAAA,GAAA,CAAC,IAAA,EAAA,EAAK,eAAW,IAAA,EAAC,CAAA;AAAA,0BACjB;AAAA;AAAA;AAAA,uBAEL,CAAA,GACE;AAAA,mBAAA,EACN,CAAA,GACE;AAAA;AAAA,eAAA;AAAA,cA/HC,QAAA,CAAS;AAAA,aAgIhB;AAAA,UAEJ,CAAC,CAAA;AAAA,UACA,UAAU,MAAA,KAAW,CAAA,mBACpB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mDAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,mBAAA,EAAoB,CAAA;AAAA,YACrE;AAAA,WAAA,EACH,CAAA,GACE,IAAA;AAAA,UACH,WAAA;AAAY;AAAA;AAAA,KACf;AAAA,EAEJ;AACF","file":"chunk-FPX3AI3Z.js","sourcesContent":["import * as React from 'react'\nimport { Check, ChevronDown, ChevronRight, ChevronUp, Library, Pencil, PenLine, Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button'\nimport { CapabilityChips, type CapabilityDescriptor } from '../capability-chips'\nimport { Modal, ModalContent, ModalHeader, ModalTitle, ModalFooter } from '../modal/Modal'\nimport { ModelPicker, type ModelPickerProvider } from '../model-picker/ModelPicker'\nimport { Spinner } from '../spinner'\nimport { beautifyId } from '../../lib/fuzzy'\n\nexport interface ModelRegistryProvider {\n id: string\n name: string\n type?: string\n baseUrl?: string\n /** Read-only provider: hides Add/Edit/Remove (e.g. org-managed providers). */\n readOnly?: boolean\n}\n\nexport interface ModelRegistryModel {\n id: string\n providerId: string\n externalId: string\n label?: string\n caps: string[]\n enabled: boolean\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n /** The model's decision transport (e.g. `systemone`) — set when `caps`\n * carries the app's decision capability. */\n decisionTransport?: string\n /** App-defined extra fields (see `extraFields`), carried verbatim. */\n extra?: Record<string, string>\n missing?: boolean\n}\n\nexport interface ModelRegistryRemoteModel {\n id: string\n caps: string[]\n}\n\nexport interface ModelRegistryDraft {\n externalId: string\n label?: string\n caps: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n decisionTransport?: string\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryPatch {\n label?: string\n caps?: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n decisionTransport?: string\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryExtraField {\n key: string\n label: string\n placeholder?: string\n /** Render a multi-line textarea instead of a single-line input. */\n multiline?: boolean\n}\n\nexport type ModelRegistryRemoteState = 'loading' | 'error' | 'ready'\n\nexport interface ModelRegistryProps {\n providers: ModelRegistryProvider[]\n models: ModelRegistryModel[]\n caps: CapabilityDescriptor[]\n expandedProviderId?: string | null\n onExpandedProviderChange: (providerId: string | null) => void\n remoteModels?: ModelRegistryRemoteModel[]\n remoteState?: ModelRegistryRemoteState\n remoteError?: string | null\n onRetryRemote?: () => void\n onAddModel: (providerId: string, draft: ModelRegistryDraft) => void\n onAddAll?: (providerId: string, drafts: ModelRegistryDraft[]) => void\n onUpdateModel: (model: ModelRegistryModel, patch: ModelRegistryPatch) => void\n onDeleteModel: (model: ModelRegistryModel) => void\n /** Toggle a model's enabled flag; renders the row checkbox when set. */\n onToggleEnabled?: (model: ModelRegistryModel, enabled: boolean) => void\n enableLabel?: string\n /** App-declared extra fields rendered in the add/edit modal (e.g. a\n * description line); values ride `extra` on Draft/Patch/Model. */\n extraFields?: ModelRegistryExtraField[]\n reasoningEffortOptions?: string[]\n addLabel?: string\n addAllLabel?: string\n addTitle?: string\n editTitle?: string\n selectModelLabel?: string\n manualIdToggleLabel?: string\n /** Shown on the manual↔catalog toggle when manual entry is active\n * (returning to the catalog picker). */\n useCatalogLabel?: string\n /** Visually-hidden prefix for the provider context banner. */\n providerContextLabel?: string\n editLabel?: string\n removeLabel?: string\n missingLabel?: string\n capsLabel?: string\n /** Muted explainer under the capability chips (what they gate). */\n capsHint?: string\n /** Capability values that are standalone kinds (e.g. decision, stt, tts,\n * embeddings): selecting one makes the model exactly that kind — the\n * chat-family caps combine, standalone kinds replace everything (the\n * family's slot-separation law, D4, expressed in the form). */\n standaloneCaps?: string[]\n /** Label for the standalone-kinds cluster (`standaloneCaps`). */\n standaloneLabel?: string\n /** Selection implications between combinable caps (e.g.\n * `{ vision: ['text'], tools: ['text'] }` — every vision/tool-capable\n * model is a text model too): selecting a key auto-enables its values,\n * and deselecting a value deselects everything that implies it. */\n capImplications?: Record<string, string[]>\n searchPlaceholder?: string\n searchLabel?: string\n emptyProviderLabel?: string\n externalIdRequiredLabel?: string\n remoteEmptyLabel?: string\n remoteLoadingLabel?: string\n retryLabel?: string\n customOptionLabel?: string\n temperatureLabel?: string\n maxTokensLabel?: string\n labelLabel?: string\n reasoningEffortLabel?: string\n /** The app's shipping decision transport (e.g. `systemone`): when set,\n * models with the decision capability render a read-only transport row\n * and carry the value on Draft/Patch. */\n decisionTransport?: string\n decisionTransportLabel?: string\n saveLabel?: string\n cancelLabel?: string\n addDraftLabel?: string\n providersEmptyLabel?: string\n emptyAction?: React.ReactNode\n className?: string\n}\n\n/**\n * Capabilities whose models take generation-side parameters (temperature,\n * max tokens, reasoning effort). Other capabilities (stt/tts/embeddings/\n * decision) render without those sections — plan 26 follow-up: options\n * are shown per capability, never always.\n */\nconst PARAMETRIC_CAPS = new Set(['text', 'vision', 'tools'])\n\n/** Whether any selected capability takes generation-side parameters. */\nconst hasParametricCaps = (caps: string[]): boolean =>\n caps.some((cap) => PARAMETRIC_CAPS.has(cap))\n\n/**\n * Catalog normalization for `standaloneCaps` (remote model pick): a caps\n * set may carry either one standalone kind (alone) or any combination of\n * the chat-family caps — never both, never two standalone kinds.\n */\nconst normalizeCaps = (next: string[], standalone: ReadonlySet<string>): string[] => {\n const standaloneHit = next.find((cap) => standalone.has(cap))\n return standaloneHit ? [standaloneHit] : next\n}\n\n/**\n * `capImplications` closure over a selection toggle: selecting a cap\n * enables its implications (vision → text); deselecting a cap drops\n * everything that implies it (text off → vision + tools off). Idempotent\n * for caps the implications do not mention.\n */\nconst applyImplications = (\n next: string[],\n implications: Record<string, string[]>,\n toggled: string,\n selected: boolean,\n): string[] => {\n if (Object.keys(implications).length === 0) return next\n if (selected) {\n const implied = implications[toggled] ?? []\n return [...next, ...implied.filter((cap) => !next.includes(cap))]\n }\n const dependents = Object.entries(implications)\n .filter(([, values]) => values.includes(toggled))\n .map(([cap]) => cap)\n return dependents.length === 0 ? next : next.filter((cap) => cap !== toggled && !dependents.includes(cap))\n}\n\n/** ON-implications folded over a whole caps set (catalog picks). */\nconst withImplications = (\n caps: string[],\n implications: Record<string, string[]>,\n): string[] => {\n let out = [...caps]\n for (const cap of caps) {\n out = applyImplications(out, implications, cap, true)\n }\n return out\n}\n\nconst CUSTOM = '__custom__'\ninterface NumberFieldProps {\n label: string\n value: string\n onChange: (value: string) => void\n onClear: () => void\n step?: string\n min?: string\n max?: string\n}\n\nfunction NumberField({\n label,\n value,\n onChange,\n onClear,\n step = '1',\n min,\n max,\n}: NumberFieldProps) {\n const bump = (delta: number) => {\n const current = value.trim() === '' ? 0 : Number(value)\n if (!Number.isFinite(current)) return\n const next = current + delta\n onChange(String(min != null && next < Number(min) ? Number(min) : next))\n }\n return (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{label}</span>\n <span className=\"relative block\">\n <input\n type=\"number\"\n step={step}\n min={min}\n max={max}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 pr-16 text-sm text-[var(--as-fg)] [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <span className=\"absolute inset-y-0 right-1.5 flex items-center gap-1\">\n {value !== '' ? (\n <button\n type=\"button\"\n aria-label={`${label} clear`}\n onClick={onClear}\n className=\"cursor-pointer text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n <span className=\"flex flex-col\">\n <button\n type=\"button\"\n aria-label={`${label} increment`}\n onClick={() => bump(Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronUp className=\"size-3.5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n aria-label={`${label} decrement`}\n onClick={() => bump(-Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronDown className=\"size-3.5\" aria-hidden />\n </button>\n </span>\n </span>\n </span>\n </label>\n )\n}\n\ninterface ModalState {\n mode: 'add' | 'edit'\n providerId: string\n externalId: string\n label: string\n caps: string[]\n reasoningEffort: string\n reasoningCustom: boolean\n temperature: string\n maxTokens: string\n decisionTransport: string\n extra: Record<string, string>\n extraTouched: boolean\n labelTouched: boolean\n model?: ModelRegistryModel\n manual: boolean\n}\n\nexport const ModelRegistry = React.forwardRef<HTMLDivElement, ModelRegistryProps>(\n function ModelRegistry(\n {\n providers,\n models,\n caps,\n expandedProviderId,\n onExpandedProviderChange,\n remoteModels,\n remoteState = 'ready',\n remoteError,\n onRetryRemote,\n onAddModel,\n onAddAll,\n onUpdateModel,\n onDeleteModel,\n onToggleEnabled,\n enableLabel = 'Enabled',\n extraFields,\n reasoningEffortOptions,\n addLabel = 'Add model',\n addAllLabel = 'Add all',\n addTitle = 'Add model',\n editTitle = 'Edit model',\n selectModelLabel = 'Model',\n manualIdToggleLabel = 'Enter the model id manually',\n useCatalogLabel = 'Pick from the catalog',\n providerContextLabel = 'Provider',\n editLabel = 'Edit',\n removeLabel = 'Remove',\n missingLabel = 'Missing',\n capsLabel = 'Capabilities',\n capsHint,\n standaloneCaps,\n standaloneLabel = 'Standalone',\n capImplications,\n searchPlaceholder = 'Search models…',\n searchLabel = 'Search models',\n emptyProviderLabel = 'No models yet — use Add model to pick from the live catalog.',\n externalIdRequiredLabel = 'The model id is required.',\n remoteEmptyLabel = 'The provider listed no models.',\n remoteLoadingLabel = 'Loading models…',\n retryLabel = 'Retry',\n customOptionLabel = 'Custom…',\n temperatureLabel = 'Temperature',\n maxTokensLabel = 'Max tokens',\n labelLabel = 'Display label',\n reasoningEffortLabel = 'Reasoning effort',\n decisionTransport,\n decisionTransportLabel = 'Transport',\n saveLabel = 'Save',\n cancelLabel = 'Cancel',\n addDraftLabel = 'Add model',\n providersEmptyLabel = 'No providers yet.',\n emptyAction,\n className,\n },\n ref,\n ) {\n const [modal, setModal] = React.useState<ModalState | null>(null)\n const [draftError, setDraftError] = React.useState<string | null>(null)\n\n const standaloneSet = React.useMemo(\n () => new Set(standaloneCaps ?? []),\n [standaloneCaps],\n )\n const combinableCaps = React.useMemo(\n () => caps.filter((cap) => !standaloneSet.has(cap.value)),\n [caps, standaloneSet],\n )\n const standaloneDescriptors = React.useMemo(\n () => caps.filter((cap) => standaloneSet.has(cap.value)),\n [caps, standaloneSet],\n )\n\n const descriptorFor = React.useCallback(\n (value: string): CapabilityDescriptor =>\n caps.find((cap) => cap.value === value) ?? { value, label: value },\n [caps],\n )\n\n const resetModal = React.useCallback(() => {\n setModal(null)\n setDraftError(null)\n }, [])\n\n const toggleProvider = (providerId: string) => {\n onExpandedProviderChange(expandedProviderId === providerId ? null : providerId)\n }\n\n const openAddModal = (providerId: string) => {\n const firstCap = combinableCaps[0] ?? caps[0]\n setModal({\n mode: 'add',\n providerId,\n externalId: '',\n label: '',\n caps: firstCap ? [firstCap.value] : [],\n reasoningEffort: '',\n reasoningCustom: false,\n temperature: '',\n maxTokens: '',\n decisionTransport: '',\n extra: {},\n extraTouched: false,\n labelTouched: false,\n manual: false,\n })\n setDraftError(null)\n }\n\n const openEditModal = (model: ModelRegistryModel) => {\n setModal({\n mode: 'edit',\n providerId: model.providerId,\n externalId: model.externalId,\n label: model.label ?? '',\n caps: [...model.caps],\n labelTouched: true,\n reasoningEffort: model.reasoningEffort ?? '',\n reasoningCustom:\n model.reasoningEffort != null &&\n model.reasoningEffort !== '' &&\n !(reasoningEffortOptions ?? []).includes(model.reasoningEffort),\n temperature: model.temperature != null ? String(model.temperature) : '',\n maxTokens: model.maxTokens != null ? String(model.maxTokens) : '',\n decisionTransport: model.decisionTransport ?? '',\n extra: { ...(model.extra ?? {}) },\n extraTouched: false,\n model,\n manual: false,\n })\n setDraftError(null)\n }\n\n const patchExtraField = (key: string, value: string) => {\n setModal((current) =>\n current\n ? { ...current, extra: { ...current.extra, [key]: value }, extraTouched: true }\n : current,\n )\n }\n\n const selectRemote = (remoteId: string) => {\n const remote = (remoteModels ?? []).find((entry) => entry.id === remoteId)\n setModal((current) => {\n if (!current) return current\n const normalized = remote ? normalizeCaps([...remote.caps], standaloneSet) : current.caps\n // catalog caps pass through the ON-implications (a vision/tool\n // catalog entry carries its text base)\n const nextCaps = withImplications(normalized, capImplications ?? {})\n return {\n ...current,\n externalId: remoteId,\n caps: nextCaps,\n decisionTransport: nextCaps.includes('decision')\n ? (decisionTransport ?? current.decisionTransport ?? '')\n : '',\n label: current.labelTouched ? current.label : beautifyId(remoteId),\n }\n })\n }\n\n const toggleDraftCap = (value: string) => {\n setModal((current) => {\n if (!current) return current\n const isStandalone = standaloneSet.has(value)\n const raw = isStandalone\n ? // a standalone kind replaces everything (or clears when toggled off)\n current.caps.includes(value)\n ? current.caps.filter((entry) => entry !== value)\n : [value]\n : current.caps.includes(value)\n ? current.caps.filter((entry) => entry !== value)\n : [...current.caps.filter((entry) => !standaloneSet.has(entry)), value]\n const nextCaps = isStandalone\n ? raw\n : applyImplications(raw, capImplications ?? {}, value, !current.caps.includes(value))\n return {\n ...current,\n caps: nextCaps,\n // The decision capability stamps the app's shipping transport;\n // without it there is no transport to carry.\n decisionTransport: nextCaps.includes('decision')\n ? (decisionTransport ?? current.decisionTransport ?? '')\n : '',\n }\n })\n }\n\n const patchField = (field: keyof ModalState, value: string) => {\n setModal((current) => (current ? { ...current, [field]: value } : current))\n }\n\n const numberOr = (raw: string): number | null => {\n const trimmed = raw.trim()\n if (!trimmed) return null\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n }\n\n const submitModal = () => {\n if (!modal) return\n const externalId = modal.externalId.trim()\n if (!externalId) {\n setDraftError(externalIdRequiredLabel)\n return\n }\n const extra: Record<string, string> | undefined =\n modal.extraTouched || Object.values(modal.extra).some((value) => value.trim() !== '')\n ? { ...modal.extra }\n : undefined\n const isDecision = modal.caps.includes('decision')\n const payload: ModelRegistryDraft = {\n externalId,\n label: modal.label.trim() || undefined,\n caps: modal.caps,\n reasoningEffort: modal.reasoningEffort.trim(),\n temperature: numberOr(modal.temperature),\n maxTokens: numberOr(modal.maxTokens),\n ...(isDecision && modal.decisionTransport\n ? { decisionTransport: modal.decisionTransport }\n : {}),\n ...(extra !== undefined ? { extra } : {}),\n }\n if (modal.mode === 'add') {\n onAddModel(modal.providerId, payload)\n } else if (modal.model) {\n const patch: ModelRegistryPatch = { ...payload }\n if (isDecision) {\n patch.decisionTransport = modal.decisionTransport || decisionTransport\n } else {\n patch.decisionTransport = undefined\n }\n onUpdateModel(modal.model, patch)\n }\n resetModal()\n }\n\n const remoteForProvider = (provider: ModelRegistryProvider): ModelPickerProvider[] => {\n const items = remoteModels ?? []\n if (items.length === 0) return []\n return [\n {\n id: provider.id,\n name: provider.name,\n models: items.map((entry) => ({\n id: entry.id,\n name: entry.id,\n capabilities: entry.caps,\n })),\n },\n ]\n }\n\n const renderModal = () => {\n if (!modal) return null\n const provider = providers.find((entry) => entry.id === modal.providerId)\n const catalog = provider ? remoteForProvider(provider) : []\n const pendingCount = (remoteModels ?? []).filter(\n (remote) =>\n !models.some(\n (model) => model.providerId === modal.providerId && model.externalId === remote.id,\n ),\n ).length\n return (\n <Modal open onOpenChange={(open: boolean) => (!open ? resetModal() : undefined)}>\n <ModalContent className=\"max-h-[85vh] w-full max-w-lg overflow-y-auto\">\n <ModalHeader>\n <ModalTitle className=\"text-base\">\n {modal.mode === 'add' ? addTitle : `${editTitle} — ${modal.externalId}`}\n </ModalTitle>\n </ModalHeader>\n <div className=\"flex flex-col gap-4 p-4\">\n {provider ? (\n <div\n data-as=\"model-registry-provider-context\"\n className=\"flex min-w-0 items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-muted)]/50 px-3 py-2\"\n >\n <span className=\"sr-only\">{providerContextLabel}:</span>\n <span className=\"shrink-0 text-xs font-medium text-[var(--as-fg)]\">\n {provider.name}\n </span>\n {provider.baseUrl ? (\n <>\n <span aria-hidden className=\"text-[var(--as-border)]\">\n ·\n </span>\n <span className=\"truncate font-mono text-[10px] text-[var(--as-muted-fg)]\">\n {provider.baseUrl}\n </span>\n </>\n ) : null}\n </div>\n ) : null}\n {modal.mode === 'add' ? (\n remoteState === 'loading' ? (\n <p className=\"flex items-center justify-center gap-2 py-4 text-xs text-[var(--as-muted-fg)]\">\n <Spinner size=\"sm\" />\n {remoteLoadingLabel}\n </p>\n ) : remoteState === 'error' ? (\n <>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-xs text-[var(--as-danger)]\">{remoteError}</p>\n {onRetryRemote ? (\n <Button variant=\"outline\" size=\"sm\" onClick={onRetryRemote}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <button\n type=\"button\"\n data-as=\"model-registry-manual-toggle\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 self-end rounded-[var(--as-radius)] border border-[var(--as-border)] bg-transparent px-2.5 py-1 text-xs text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n onClick={() => setModal((c) => (c ? { ...c, manual: true } : c))}\n >\n <PenLine className=\"size-3.5\" aria-hidden />\n {manualIdToggleLabel}\n </button>\n )}\n </>\n ) : (\n <>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <ModelPicker\n providers={catalog}\n value={modal.externalId}\n onChange={(modelId) => (modelId ? selectRemote(modelId) : undefined)}\n label={selectModelLabel}\n searchPlaceholder={searchPlaceholder}\n searchLabel={searchLabel}\n emptyLabel={remoteEmptyLabel}\n />\n )}\n <button\n type=\"button\"\n data-as=\"model-registry-manual-toggle\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 self-end rounded-[var(--as-radius)] border border-[var(--as-border)] bg-transparent px-2.5 py-1 text-xs text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n onClick={() => setModal((c) => (c ? { ...c, manual: !c.manual } : c))}\n >\n {modal.manual ? (\n <>\n <Library className=\"size-3.5\" aria-hidden />\n {useCatalogLabel}\n </>\n ) : (\n <>\n <PenLine className=\"size-3.5\" aria-hidden />\n {manualIdToggleLabel}\n </>\n )}\n </button>\n </>\n )\n ) : (\n <p className=\"font-mono text-sm text-[var(--as-fg)]\">{modal.externalId}</p>\n )}\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{labelLabel}</span>\n <input\n type=\"text\"\n value={modal.label}\n onChange={(event) =>\n setModal((current) =>\n current\n ? { ...current, label: event.target.value, labelTouched: true }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]\"\n />\n </label>\n <div className=\"space-y-1\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{capsLabel}</span>\n {standaloneDescriptors.length > 0 ? (\n <>\n <CapabilityChips\n caps={combinableCaps}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n <p className=\"flex items-center gap-2 pt-1 text-[10px] font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n <span className=\"h-px flex-1 bg-[var(--as-border)]\" aria-hidden />\n {standaloneLabel}\n <span className=\"h-px flex-1 bg-[var(--as-border)]\" aria-hidden />\n </p>\n <CapabilityChips\n caps={standaloneDescriptors}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={standaloneLabel}\n />\n </>\n ) : (\n <CapabilityChips\n caps={caps}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n )}\n {modal.caps.includes('decision') && decisionTransport ? (\n <p className=\"flex items-center gap-1.5 text-xs text-[var(--as-muted-fg)]\">\n <span>{decisionTransportLabel}:</span>\n <code className=\"rounded-[var(--as-radius-sm)] bg-[var(--as-muted)] px-1.5 py-0.5 font-mono text-[10px] font-semibold uppercase tracking-wide text-[var(--as-fg)]\">\n {decisionTransport}\n </code>\n </p>\n ) : null}\n {capsHint ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{capsHint}</p>\n ) : null}\n </div>\n {hasParametricCaps(modal.caps) && reasoningEffortOptions ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {reasoningEffortLabel}\n </span>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {modal.reasoningCustom ? (\n <input\n type=\"text\"\n value={modal.reasoningEffort}\n placeholder={customOptionLabel}\n onChange={(event) => patchField('reasoningEffort', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)] sm:flex-1\"\n />\n ) : (\n <select\n value={modal.reasoningCustom ? CUSTOM : modal.reasoningEffort}\n onChange={(event) =>\n setModal((current) =>\n current\n ? {\n ...current,\n reasoningCustom: event.target.value === CUSTOM,\n reasoningEffort:\n event.target.value === CUSTOM\n ? current.reasoningEffort\n : event.target.value,\n }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)] sm:w-40\"\n >\n <option value=\"\">—</option>\n {reasoningEffortOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n <option value={CUSTOM}>{customOptionLabel}</option>\n </select>\n )}\n </div>\n </label>\n ) : null}\n {hasParametricCaps(modal.caps) ? (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <NumberField\n label={temperatureLabel}\n value={modal.temperature}\n onChange={(value) => patchField('temperature', value)}\n onClear={() => patchField('temperature', '')}\n step=\"0.1\"\n min=\"0\"\n max=\"2\"\n />\n <NumberField\n label={maxTokensLabel}\n value={modal.maxTokens}\n onChange={(value) => patchField('maxTokens', value)}\n onClear={() => patchField('maxTokens', '')}\n step=\"256\"\n min=\"1\"\n />\n </div>\n ) : null}\n {(extraFields ?? []).map((field) => {\n const value = modal.extra[field.key] ?? ''\n const common =\n 'w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]'\n return (\n <label key={field.key} className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{field.label}</span>\n {field.multiline ? (\n <textarea\n rows={2}\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n ) : (\n <input\n type=\"text\"\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n )}\n </label>\n )\n })}\n {draftError ? (\n <p role=\"alert\" className=\"text-xs text-[var(--as-danger)]\">\n {draftError}\n </p>\n ) : null}\n </div>\n <ModalFooter>\n {modal.mode === 'add' && onAddAll ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={remoteState !== 'ready' || pendingCount === 0}\n onClick={() => {\n onAddAll(\n modal.providerId,\n (remoteModels ?? [])\n .filter(\n (remote) =>\n !models.some(\n (model) =>\n model.providerId === modal.providerId &&\n model.externalId === remote.id,\n ),\n )\n .map((remote) => ({\n externalId: remote.id,\n caps: remote.caps,\n reasoningEffort: '',\n temperature: null,\n maxTokens: null,\n })),\n )\n resetModal()\n }}\n >\n <Plus aria-hidden />\n {addAllLabel} ({pendingCount})\n </Button>\n ) : null}\n <Button variant=\"ghost\" size=\"sm\" onClick={resetModal}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" onClick={submitModal}>\n <Check aria-hidden />\n {modal.mode === 'add' ? addDraftLabel : saveLabel}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"model-registry\"\n className={cn('flex w-full flex-col gap-4', className)}\n >\n {providers.map((provider) => {\n const expanded = expandedProviderId === provider.id\n const providerModels = models.filter((model) => model.providerId === provider.id)\n return (\n <div\n key={provider.id}\n data-as=\"model-registry-provider\"\n className={cn(\n 'rounded-[var(--as-radius-lg)] border bg-[var(--as-surface)] transition-all',\n expanded\n ? 'border-[var(--as-primary)] shadow-[var(--as-shadow-1)]'\n : 'border-[var(--as-border)]',\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n onClick={() => toggleProvider(provider.id)}\n className=\"group flex w-full cursor-pointer items-center gap-4 p-4 text-left focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] transition-colors',\n expanded\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)] group-hover:bg-[var(--as-primary)]/10 group-hover:text-[var(--as-primary)]',\n )}\n >\n {expanded ? (\n <ChevronDown className=\"size-5\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-5\" aria-hidden />\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2 text-sm font-semibold text-[var(--as-fg)]\">\n {provider.name}\n {provider.type ? (\n <span className=\"rounded-full border border-[var(--as-border)] px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {provider.type}\n </span>\n ) : null}\n {providerModels.length ? (\n <span className=\"rounded-full bg-[var(--as-muted)] px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {providerModels.filter((model) => model.enabled).length}/\n {providerModels.length}\n </span>\n ) : null}\n </span>\n {provider.baseUrl ? (\n <span className=\"block truncate font-mono text-xs text-[var(--as-muted-fg)]\">\n {provider.baseUrl}\n </span>\n ) : null}\n </span>\n </button>\n {expanded ? (\n <div className=\"as-anim-fade flex flex-col gap-2 border-t border-[var(--as-border)] p-4\">\n {!provider.readOnly && providerModels.length === 0 ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">\n {emptyProviderLabel}\n </p>\n ) : null}\n {providerModels.map((model) => {\n return (\n <div\n key={model.id}\n className={cn(\n 'flex min-w-0 items-center gap-2 rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-3 py-2 text-sm',\n model.missing && 'opacity-50',\n )}\n >\n {onToggleEnabled && !provider.readOnly ? (\n <input\n type=\"checkbox\"\n aria-label={`${enableLabel} — ${model.externalId}`}\n checked={model.enabled}\n onChange={(event) => onToggleEnabled(model, event.target.checked)}\n className=\"size-4 shrink-0 cursor-pointer accent-[var(--as-primary)]\"\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-[var(--as-fg)]\">\n {model.externalId}\n </span>\n {model.missing ? (\n <span className=\"text-xs text-[var(--as-warning)]\">\n {missingLabel}\n </span>\n ) : null}\n <CapabilityChips\n variant=\"badge\"\n caps={model.caps.map(descriptorFor)}\n selected={model.caps}\n />\n {!provider.readOnly ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${editLabel} ${model.externalId}`}\n onClick={() => openEditModal(model)}\n >\n <Pencil aria-hidden />\n {editLabel}\n </Button>\n ) : null}\n {!provider.readOnly ? (\n <button\n type=\"button\"\n aria-label={`${removeLabel} ${model.externalId}`}\n onClick={() => onDeleteModel(model)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n )\n })}\n {!provider.readOnly ? (\n <div className=\"pt-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-expanded={modal?.mode === 'add' && modal.providerId === provider.id}\n onClick={() => openAddModal(provider.id)}\n >\n <Plus aria-hidden />\n {addLabel}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n })}\n {providers.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8 text-center\">\n <p className=\"text-sm text-[var(--as-muted-fg)]\">{providersEmptyLabel}</p>\n {emptyAction}\n </div>\n ) : null}\n {renderModal()}\n </div>\n )\n },\n)\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/model-registry/ModelRegistry.tsx"],"names":["ModelRegistry"],"mappings":"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","file":"chunk-GR6CSKQY.js","sourcesContent":["import * as React from 'react'\nimport { Check, ChevronDown, ChevronRight, ChevronUp, Library, Pencil, PenLine, Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button'\nimport { CapabilityChips, type CapabilityDescriptor } from '../capability-chips'\nimport { Modal, ModalContent, ModalHeader, ModalTitle, ModalFooter } from '../modal/Modal'\nimport { ModelPicker, type ModelPickerProvider } from '../model-picker/ModelPicker'\nimport { Spinner } from '../spinner'\nimport { beautifyId } from '../../lib/fuzzy'\n\nexport interface ModelRegistryProvider {\n id: string\n name: string\n type?: string\n baseUrl?: string\n /** Read-only provider: hides Add/Edit/Remove (e.g. org-managed providers). */\n readOnly?: boolean\n}\n\nexport interface ModelRegistryModel {\n id: string\n providerId: string\n externalId: string\n label?: string\n caps: string[]\n enabled: boolean\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n /** The model's decision transport (e.g. `systemone`) — set when `caps`\n * carries the app's decision capability. */\n decisionTransport?: string\n /** App-defined extra fields (see `extraFields`), carried verbatim. */\n extra?: Record<string, string>\n missing?: boolean\n}\n\nexport interface ModelRegistryRemoteModel {\n id: string\n caps: string[]\n}\n\nexport interface ModelRegistryDraft {\n externalId: string\n label?: string\n caps: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n decisionTransport?: string\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryPatch {\n label?: string\n caps?: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n decisionTransport?: string\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryExtraField {\n key: string\n label: string\n placeholder?: string\n /** Render a multi-line textarea instead of a single-line input. */\n multiline?: boolean\n}\n\nexport type ModelRegistryRemoteState = 'loading' | 'error' | 'ready'\n\nexport interface ModelRegistryProps {\n providers: ModelRegistryProvider[]\n models: ModelRegistryModel[]\n caps: CapabilityDescriptor[]\n expandedProviderId?: string | null\n onExpandedProviderChange: (providerId: string | null) => void\n remoteModels?: ModelRegistryRemoteModel[]\n remoteState?: ModelRegistryRemoteState\n remoteError?: string | null\n onRetryRemote?: () => void\n onAddModel: (providerId: string, draft: ModelRegistryDraft) => void\n onAddAll?: (providerId: string, drafts: ModelRegistryDraft[]) => void\n onUpdateModel: (model: ModelRegistryModel, patch: ModelRegistryPatch) => void\n onDeleteModel: (model: ModelRegistryModel) => void\n /** Toggle a model's enabled flag; renders the row checkbox when set. */\n onToggleEnabled?: (model: ModelRegistryModel, enabled: boolean) => void\n enableLabel?: string\n /** App-declared extra fields rendered in the add/edit modal (e.g. a\n * description line); values ride `extra` on Draft/Patch/Model. */\n extraFields?: ModelRegistryExtraField[]\n reasoningEffortOptions?: string[]\n addLabel?: string\n addAllLabel?: string\n addTitle?: string\n editTitle?: string\n selectModelLabel?: string\n manualIdToggleLabel?: string\n /** Shown on the manual↔catalog toggle when manual entry is active\n * (returning to the catalog picker). */\n useCatalogLabel?: string\n /** Visually-hidden prefix for the provider context banner. */\n providerContextLabel?: string\n editLabel?: string\n removeLabel?: string\n missingLabel?: string\n capsLabel?: string\n /** Muted explainer under the capability chips (what they gate). */\n capsHint?: string\n /** Capability values that are standalone kinds (e.g. decision, stt, tts,\n * embeddings): selecting one makes the model exactly that kind — the\n * chat-family caps combine, standalone kinds replace everything (the\n * family's slot-separation law, D4, expressed in the form). */\n standaloneCaps?: string[]\n /** Label for the standalone-kinds cluster (`standaloneCaps`). */\n standaloneLabel?: string\n /** Selection implications between combinable caps (e.g.\n * `{ vision: ['text'], tools: ['text'] }` — every vision/tool-capable\n * model is a text model too): selecting a key auto-enables its values,\n * and deselecting a value deselects everything that implies it. */\n capImplications?: Record<string, string[]>\n searchPlaceholder?: string\n searchLabel?: string\n emptyProviderLabel?: string\n externalIdRequiredLabel?: string\n remoteEmptyLabel?: string\n remoteLoadingLabel?: string\n retryLabel?: string\n customOptionLabel?: string\n temperatureLabel?: string\n maxTokensLabel?: string\n labelLabel?: string\n reasoningEffortLabel?: string\n /** The app's shipping decision transport (e.g. `systemone`): when set,\n * models with the decision capability render a read-only transport row\n * and carry the value on Draft/Patch. */\n decisionTransport?: string\n decisionTransportLabel?: string\n saveLabel?: string\n cancelLabel?: string\n addDraftLabel?: string\n providersEmptyLabel?: string\n emptyAction?: React.ReactNode\n className?: string\n}\n\n/**\n * Capabilities whose models take generation-side parameters (temperature,\n * max tokens, reasoning effort). Other capabilities (stt/tts/embeddings/\n * decision) render without those sections — plan 26 follow-up: options\n * are shown per capability, never always.\n */\nconst PARAMETRIC_CAPS = new Set(['text', 'vision', 'tools'])\n\n/** Whether any selected capability takes generation-side parameters. */\nconst hasParametricCaps = (caps: string[]): boolean =>\n caps.some((cap) => PARAMETRIC_CAPS.has(cap))\n\n/**\n * Catalog normalization for `standaloneCaps` (remote model pick): a caps\n * set may carry either one standalone kind (alone) or any combination of\n * the chat-family caps — never both, never two standalone kinds.\n */\nconst normalizeCaps = (next: string[], standalone: ReadonlySet<string>): string[] => {\n const standaloneHit = next.find((cap) => standalone.has(cap))\n return standaloneHit ? [standaloneHit] : next\n}\n\n/**\n * `capImplications` closure over a selection toggle: selecting a cap\n * enables its implications (vision → text); deselecting a cap drops\n * everything that implies it (text off → vision + tools off). Idempotent\n * for caps the implications do not mention.\n */\nconst applyImplications = (\n next: string[],\n implications: Record<string, string[]>,\n toggled: string,\n selected: boolean,\n): string[] => {\n if (Object.keys(implications).length === 0) return next\n if (selected) {\n const implied = implications[toggled] ?? []\n return [...next, ...implied.filter((cap) => !next.includes(cap))]\n }\n const dependents = Object.entries(implications)\n .filter(([, values]) => values.includes(toggled))\n .map(([cap]) => cap)\n return dependents.length === 0 ? next : next.filter((cap) => cap !== toggled && !dependents.includes(cap))\n}\n\n/** ON-implications folded over a whole caps set (catalog picks). */\nconst withImplications = (\n caps: string[],\n implications: Record<string, string[]>,\n): string[] => {\n let out = [...caps]\n for (const cap of caps) {\n out = applyImplications(out, implications, cap, true)\n }\n return out\n}\n\nconst CUSTOM = '__custom__'\ninterface NumberFieldProps {\n label: string\n value: string\n onChange: (value: string) => void\n onClear: () => void\n step?: string\n min?: string\n max?: string\n}\n\nfunction NumberField({\n label,\n value,\n onChange,\n onClear,\n step = '1',\n min,\n max,\n}: NumberFieldProps) {\n const bump = (delta: number) => {\n const current = value.trim() === '' ? 0 : Number(value)\n if (!Number.isFinite(current)) return\n const next = current + delta\n onChange(String(min != null && next < Number(min) ? Number(min) : next))\n }\n return (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{label}</span>\n <span className=\"relative block\">\n <input\n type=\"number\"\n step={step}\n min={min}\n max={max}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 pr-16 text-sm text-[var(--as-fg)] [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <span className=\"absolute inset-y-0 right-1.5 flex items-center gap-1\">\n {value !== '' ? (\n <button\n type=\"button\"\n aria-label={`${label} clear`}\n onClick={onClear}\n className=\"cursor-pointer text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n <span className=\"flex flex-col\">\n <button\n type=\"button\"\n aria-label={`${label} increment`}\n onClick={() => bump(Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronUp className=\"size-3.5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n aria-label={`${label} decrement`}\n onClick={() => bump(-Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronDown className=\"size-3.5\" aria-hidden />\n </button>\n </span>\n </span>\n </span>\n </label>\n )\n}\n\ninterface ModalState {\n mode: 'add' | 'edit'\n providerId: string\n externalId: string\n label: string\n caps: string[]\n reasoningEffort: string\n reasoningCustom: boolean\n temperature: string\n maxTokens: string\n decisionTransport: string\n extra: Record<string, string>\n extraTouched: boolean\n labelTouched: boolean\n model?: ModelRegistryModel\n manual: boolean\n}\n\nexport const ModelRegistry = React.forwardRef<HTMLDivElement, ModelRegistryProps>(\n function ModelRegistry(\n {\n providers,\n models,\n caps,\n expandedProviderId,\n onExpandedProviderChange,\n remoteModels,\n remoteState = 'ready',\n remoteError,\n onRetryRemote,\n onAddModel,\n onAddAll,\n onUpdateModel,\n onDeleteModel,\n onToggleEnabled,\n enableLabel = 'Enabled',\n extraFields,\n reasoningEffortOptions,\n addLabel = 'Add model',\n addAllLabel = 'Add all',\n addTitle = 'Add model',\n editTitle = 'Edit model',\n selectModelLabel = 'Model',\n manualIdToggleLabel = 'Enter the model id manually',\n useCatalogLabel = 'Pick from the catalog',\n providerContextLabel = 'Provider',\n editLabel = 'Edit',\n removeLabel = 'Remove',\n missingLabel = 'Missing',\n capsLabel = 'Capabilities',\n capsHint,\n standaloneCaps,\n standaloneLabel = 'Standalone',\n capImplications,\n searchPlaceholder = 'Search models…',\n searchLabel = 'Search models',\n emptyProviderLabel = 'No models yet — use Add model to pick from the live catalog.',\n externalIdRequiredLabel = 'The model id is required.',\n remoteEmptyLabel = 'The provider listed no models.',\n remoteLoadingLabel = 'Loading models…',\n retryLabel = 'Retry',\n customOptionLabel = 'Custom…',\n temperatureLabel = 'Temperature',\n maxTokensLabel = 'Max tokens',\n labelLabel = 'Display label',\n reasoningEffortLabel = 'Reasoning effort',\n decisionTransport,\n decisionTransportLabel = 'Transport',\n saveLabel = 'Save',\n cancelLabel = 'Cancel',\n addDraftLabel = 'Add model',\n providersEmptyLabel = 'No providers yet.',\n emptyAction,\n className,\n },\n ref,\n ) {\n const [modal, setModal] = React.useState<ModalState | null>(null)\n const [draftError, setDraftError] = React.useState<string | null>(null)\n\n const standaloneSet = React.useMemo(\n () => new Set(standaloneCaps ?? []),\n [standaloneCaps],\n )\n const combinableCaps = React.useMemo(\n () => caps.filter((cap) => !standaloneSet.has(cap.value)),\n [caps, standaloneSet],\n )\n const standaloneDescriptors = React.useMemo(\n () => caps.filter((cap) => standaloneSet.has(cap.value)),\n [caps, standaloneSet],\n )\n\n const descriptorFor = React.useCallback(\n (value: string): CapabilityDescriptor =>\n caps.find((cap) => cap.value === value) ?? { value, label: value },\n [caps],\n )\n\n const resetModal = React.useCallback(() => {\n setModal(null)\n setDraftError(null)\n }, [])\n\n const toggleProvider = (providerId: string) => {\n onExpandedProviderChange(expandedProviderId === providerId ? null : providerId)\n }\n\n const openAddModal = (providerId: string) => {\n const firstCap = combinableCaps[0] ?? caps[0]\n setModal({\n mode: 'add',\n providerId,\n externalId: '',\n label: '',\n caps: firstCap ? [firstCap.value] : [],\n reasoningEffort: '',\n reasoningCustom: false,\n temperature: '',\n maxTokens: '',\n decisionTransport: '',\n extra: {},\n extraTouched: false,\n labelTouched: false,\n manual: false,\n })\n setDraftError(null)\n }\n\n const openEditModal = (model: ModelRegistryModel) => {\n setModal({\n mode: 'edit',\n providerId: model.providerId,\n externalId: model.externalId,\n label: model.label ?? '',\n caps: [...model.caps],\n labelTouched: true,\n reasoningEffort: model.reasoningEffort ?? '',\n reasoningCustom:\n model.reasoningEffort != null &&\n model.reasoningEffort !== '' &&\n !(reasoningEffortOptions ?? []).includes(model.reasoningEffort),\n temperature: model.temperature != null ? String(model.temperature) : '',\n maxTokens: model.maxTokens != null ? String(model.maxTokens) : '',\n decisionTransport: model.decisionTransport ?? '',\n extra: { ...(model.extra ?? {}) },\n extraTouched: false,\n model,\n manual: false,\n })\n setDraftError(null)\n }\n\n const patchExtraField = (key: string, value: string) => {\n setModal((current) =>\n current\n ? { ...current, extra: { ...current.extra, [key]: value }, extraTouched: true }\n : current,\n )\n }\n\n const selectRemote = (remoteId: string) => {\n const remote = (remoteModels ?? []).find((entry) => entry.id === remoteId)\n setModal((current) => {\n if (!current) return current\n const normalized = remote ? normalizeCaps([...remote.caps], standaloneSet) : current.caps\n // catalog caps pass through the ON-implications (a vision/tool\n // catalog entry carries its text base)\n const nextCaps = withImplications(normalized, capImplications ?? {})\n return {\n ...current,\n externalId: remoteId,\n caps: nextCaps,\n decisionTransport: nextCaps.includes('decision')\n ? (decisionTransport ?? current.decisionTransport ?? '')\n : '',\n label: current.labelTouched ? current.label : beautifyId(remoteId),\n }\n })\n }\n\n const toggleDraftCap = (value: string) => {\n setModal((current) => {\n if (!current) return current\n const isStandalone = standaloneSet.has(value)\n const raw = isStandalone\n ? // a standalone kind replaces everything (or clears when toggled off)\n current.caps.includes(value)\n ? current.caps.filter((entry) => entry !== value)\n : [value]\n : current.caps.includes(value)\n ? current.caps.filter((entry) => entry !== value)\n : [...current.caps.filter((entry) => !standaloneSet.has(entry)), value]\n const nextCaps = isStandalone\n ? raw\n : applyImplications(raw, capImplications ?? {}, value, !current.caps.includes(value))\n return {\n ...current,\n caps: nextCaps,\n // The decision capability stamps the app's shipping transport;\n // without it there is no transport to carry.\n decisionTransport: nextCaps.includes('decision')\n ? (decisionTransport ?? current.decisionTransport ?? '')\n : '',\n }\n })\n }\n\n const patchField = (field: keyof ModalState, value: string) => {\n setModal((current) => (current ? { ...current, [field]: value } : current))\n }\n\n const numberOr = (raw: string): number | null => {\n const trimmed = raw.trim()\n if (!trimmed) return null\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n }\n\n const submitModal = () => {\n if (!modal) return\n const externalId = modal.externalId.trim()\n if (!externalId) {\n setDraftError(externalIdRequiredLabel)\n return\n }\n const extra: Record<string, string> | undefined =\n modal.extraTouched || Object.values(modal.extra).some((value) => value.trim() !== '')\n ? { ...modal.extra }\n : undefined\n const isDecision = modal.caps.includes('decision')\n const payload: ModelRegistryDraft = {\n externalId,\n label: modal.label.trim() || undefined,\n caps: modal.caps,\n reasoningEffort: modal.reasoningEffort.trim(),\n temperature: numberOr(modal.temperature),\n maxTokens: numberOr(modal.maxTokens),\n ...(isDecision && modal.decisionTransport\n ? { decisionTransport: modal.decisionTransport }\n : {}),\n ...(extra !== undefined ? { extra } : {}),\n }\n if (modal.mode === 'add') {\n onAddModel(modal.providerId, payload)\n } else if (modal.model) {\n const patch: ModelRegistryPatch = { ...payload }\n if (isDecision) {\n patch.decisionTransport = modal.decisionTransport || decisionTransport\n } else {\n patch.decisionTransport = undefined\n }\n onUpdateModel(modal.model, patch)\n }\n resetModal()\n }\n\n const remoteForProvider = (provider: ModelRegistryProvider): ModelPickerProvider[] => {\n const items = remoteModels ?? []\n if (items.length === 0) return []\n return [\n {\n id: provider.id,\n name: provider.name,\n models: items.map((entry) => ({\n id: entry.id,\n name: entry.id,\n capabilities: entry.caps,\n })),\n },\n ]\n }\n\n const renderModal = () => {\n if (!modal) return null\n const provider = providers.find((entry) => entry.id === modal.providerId)\n const catalog = provider ? remoteForProvider(provider) : []\n const pendingCount = (remoteModels ?? []).filter(\n (remote) =>\n !models.some(\n (model) => model.providerId === modal.providerId && model.externalId === remote.id,\n ),\n ).length\n return (\n <Modal open onOpenChange={(open: boolean) => (!open ? resetModal() : undefined)}>\n <ModalContent className=\"max-h-[85vh] w-full max-w-lg overflow-y-auto\">\n <ModalHeader>\n <ModalTitle className=\"text-base\">\n {modal.mode === 'add' ? addTitle : `${editTitle} — ${modal.externalId}`}\n </ModalTitle>\n </ModalHeader>\n <div className=\"flex flex-col gap-4 p-4\">\n {provider ? (\n <div\n data-as=\"model-registry-provider-context\"\n className=\"flex min-w-0 items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-muted)]/50 px-3 py-2\"\n >\n <span className=\"sr-only\">{providerContextLabel}:</span>\n <span className=\"shrink-0 text-xs font-medium text-[var(--as-fg)]\">\n {provider.name}\n </span>\n {provider.baseUrl ? (\n <>\n <span aria-hidden className=\"text-[var(--as-border)]\">\n ·\n </span>\n <span className=\"truncate font-mono text-[10px] text-[var(--as-muted-fg)]\">\n {provider.baseUrl}\n </span>\n </>\n ) : null}\n </div>\n ) : null}\n {modal.mode === 'add' ? (\n remoteState === 'loading' ? (\n <p className=\"flex items-center justify-center gap-2 py-4 text-xs text-[var(--as-muted-fg)]\">\n <Spinner size=\"sm\" />\n {remoteLoadingLabel}\n </p>\n ) : remoteState === 'error' ? (\n <>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-xs text-[var(--as-danger)]\">{remoteError}</p>\n {onRetryRemote ? (\n <Button variant=\"outline\" size=\"sm\" onClick={onRetryRemote}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <button\n type=\"button\"\n data-as=\"model-registry-manual-toggle\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 self-end rounded-[var(--as-radius)] border border-[var(--as-border)] bg-transparent px-2.5 py-1 text-xs text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n onClick={() => setModal((c) => (c ? { ...c, manual: true } : c))}\n >\n <PenLine className=\"size-3.5\" aria-hidden />\n {manualIdToggleLabel}\n </button>\n )}\n </>\n ) : (\n <>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <ModelPicker\n providers={catalog}\n value={modal.externalId}\n onChange={(modelId) => (modelId ? selectRemote(modelId) : undefined)}\n label={selectModelLabel}\n searchPlaceholder={searchPlaceholder}\n searchLabel={searchLabel}\n emptyLabel={remoteEmptyLabel}\n />\n )}\n <button\n type=\"button\"\n data-as=\"model-registry-manual-toggle\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 self-end rounded-[var(--as-radius)] border border-[var(--as-border)] bg-transparent px-2.5 py-1 text-xs text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n onClick={() => setModal((c) => (c ? { ...c, manual: !c.manual } : c))}\n >\n {modal.manual ? (\n <>\n <Library className=\"size-3.5\" aria-hidden />\n {useCatalogLabel}\n </>\n ) : (\n <>\n <PenLine className=\"size-3.5\" aria-hidden />\n {manualIdToggleLabel}\n </>\n )}\n </button>\n </>\n )\n ) : (\n <p className=\"font-mono text-sm text-[var(--as-fg)]\">{modal.externalId}</p>\n )}\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{labelLabel}</span>\n <input\n type=\"text\"\n value={modal.label}\n onChange={(event) =>\n setModal((current) =>\n current\n ? { ...current, label: event.target.value, labelTouched: true }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]\"\n />\n </label>\n <div className=\"space-y-1\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{capsLabel}</span>\n {standaloneDescriptors.length > 0 ? (\n <>\n <CapabilityChips\n caps={combinableCaps}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n <p className=\"flex items-center gap-2 pt-1 text-[10px] font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n <span className=\"h-px flex-1 bg-[var(--as-border)]\" aria-hidden />\n {standaloneLabel}\n <span className=\"h-px flex-1 bg-[var(--as-border)]\" aria-hidden />\n </p>\n <CapabilityChips\n caps={standaloneDescriptors}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={standaloneLabel}\n />\n </>\n ) : (\n <CapabilityChips\n caps={caps}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n )}\n {modal.caps.includes('decision') && decisionTransport ? (\n <p className=\"flex items-center gap-1.5 text-xs text-[var(--as-muted-fg)]\">\n <span>{decisionTransportLabel}:</span>\n <code className=\"rounded-[var(--as-radius-sm)] bg-[var(--as-muted)] px-1.5 py-0.5 font-mono text-[10px] font-semibold uppercase tracking-wide text-[var(--as-fg)]\">\n {decisionTransport}\n </code>\n </p>\n ) : null}\n {capsHint ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{capsHint}</p>\n ) : null}\n </div>\n {hasParametricCaps(modal.caps) && reasoningEffortOptions ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {reasoningEffortLabel}\n </span>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {modal.reasoningCustom ? (\n <input\n type=\"text\"\n value={modal.reasoningEffort}\n placeholder={customOptionLabel}\n onChange={(event) => patchField('reasoningEffort', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)] sm:flex-1\"\n />\n ) : (\n <select\n value={modal.reasoningCustom ? CUSTOM : modal.reasoningEffort}\n onChange={(event) =>\n setModal((current) =>\n current\n ? {\n ...current,\n reasoningCustom: event.target.value === CUSTOM,\n reasoningEffort:\n event.target.value === CUSTOM\n ? current.reasoningEffort\n : event.target.value,\n }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)] sm:w-40\"\n >\n <option value=\"\">—</option>\n {reasoningEffortOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n <option value={CUSTOM}>{customOptionLabel}</option>\n </select>\n )}\n </div>\n </label>\n ) : null}\n {hasParametricCaps(modal.caps) ? (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <NumberField\n label={temperatureLabel}\n value={modal.temperature}\n onChange={(value) => patchField('temperature', value)}\n onClear={() => patchField('temperature', '')}\n step=\"0.1\"\n min=\"0\"\n max=\"2\"\n />\n <NumberField\n label={maxTokensLabel}\n value={modal.maxTokens}\n onChange={(value) => patchField('maxTokens', value)}\n onClear={() => patchField('maxTokens', '')}\n step=\"256\"\n min=\"1\"\n />\n </div>\n ) : null}\n {(extraFields ?? []).map((field) => {\n const value = modal.extra[field.key] ?? ''\n const common =\n 'w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]'\n return (\n <label key={field.key} className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{field.label}</span>\n {field.multiline ? (\n <textarea\n rows={2}\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n ) : (\n <input\n type=\"text\"\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n )}\n </label>\n )\n })}\n {draftError ? (\n <p role=\"alert\" className=\"text-xs text-[var(--as-danger)]\">\n {draftError}\n </p>\n ) : null}\n </div>\n <ModalFooter>\n {modal.mode === 'add' && onAddAll ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={remoteState !== 'ready' || pendingCount === 0}\n onClick={() => {\n onAddAll(\n modal.providerId,\n (remoteModels ?? [])\n .filter(\n (remote) =>\n !models.some(\n (model) =>\n model.providerId === modal.providerId &&\n model.externalId === remote.id,\n ),\n )\n .map((remote) => ({\n externalId: remote.id,\n caps: remote.caps,\n reasoningEffort: '',\n temperature: null,\n maxTokens: null,\n })),\n )\n resetModal()\n }}\n >\n <Plus aria-hidden />\n {addAllLabel} ({pendingCount})\n </Button>\n ) : null}\n <Button variant=\"ghost\" size=\"sm\" onClick={resetModal}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" onClick={submitModal}>\n <Check aria-hidden />\n {modal.mode === 'add' ? addDraftLabel : saveLabel}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"model-registry\"\n className={cn('flex w-full flex-col gap-4', className)}\n >\n {providers.map((provider) => {\n const expanded = expandedProviderId === provider.id\n const providerModels = models.filter((model) => model.providerId === provider.id)\n return (\n <div\n key={provider.id}\n data-as=\"model-registry-provider\"\n className={cn(\n 'rounded-[var(--as-radius-lg)] border bg-[var(--as-surface)] transition-all',\n expanded\n ? 'border-[var(--as-primary)] shadow-[var(--as-shadow-1)]'\n : 'border-[var(--as-border)]',\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n onClick={() => toggleProvider(provider.id)}\n className=\"group flex w-full cursor-pointer items-center gap-4 p-4 text-left focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] transition-colors',\n expanded\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)] group-hover:bg-[var(--as-primary)]/10 group-hover:text-[var(--as-primary)]',\n )}\n >\n {expanded ? (\n <ChevronDown className=\"size-5\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-5\" aria-hidden />\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2 text-sm font-semibold text-[var(--as-fg)]\">\n {provider.name}\n {provider.type ? (\n <span className=\"rounded-full border border-[var(--as-border)] px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {provider.type}\n </span>\n ) : null}\n {providerModels.length ? (\n <span className=\"rounded-full bg-[var(--as-muted)] px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {providerModels.filter((model) => model.enabled).length}/\n {providerModels.length}\n </span>\n ) : null}\n </span>\n {provider.baseUrl ? (\n <span className=\"block truncate font-mono text-xs text-[var(--as-muted-fg)]\">\n {provider.baseUrl}\n </span>\n ) : null}\n </span>\n </button>\n {expanded ? (\n <div className=\"as-anim-fade flex flex-col gap-2 border-t border-[var(--as-border)] p-4\">\n {!provider.readOnly && providerModels.length === 0 ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">\n {emptyProviderLabel}\n </p>\n ) : null}\n {providerModels.map((model) => {\n return (\n <div\n key={model.id}\n className={cn(\n 'flex min-w-0 items-center gap-2 rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-3 py-2 text-sm',\n model.missing && 'opacity-50',\n )}\n >\n {onToggleEnabled && !provider.readOnly ? (\n <input\n type=\"checkbox\"\n aria-label={`${enableLabel} — ${model.externalId}`}\n checked={model.enabled}\n onChange={(event) => onToggleEnabled(model, event.target.checked)}\n className=\"size-4 shrink-0 cursor-pointer accent-[var(--as-primary)]\"\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-[var(--as-fg)]\">\n {model.externalId}\n </span>\n {model.missing ? (\n <span className=\"text-xs text-[var(--as-warning)]\">\n {missingLabel}\n </span>\n ) : null}\n <CapabilityChips\n variant=\"badge\"\n caps={model.caps.map(descriptorFor)}\n selected={model.caps}\n />\n {!provider.readOnly ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${editLabel} ${model.externalId}`}\n onClick={() => openEditModal(model)}\n >\n <Pencil aria-hidden />\n {editLabel}\n </Button>\n ) : null}\n {!provider.readOnly ? (\n <button\n type=\"button\"\n aria-label={`${removeLabel} ${model.externalId}`}\n onClick={() => onDeleteModel(model)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n )\n })}\n {!provider.readOnly ? (\n <div className=\"pt-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-expanded={modal?.mode === 'add' && modal.providerId === provider.id}\n onClick={() => openAddModal(provider.id)}\n >\n <Plus aria-hidden />\n {addLabel}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n })}\n {providers.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8 text-center\">\n <p className=\"text-sm text-[var(--as-muted-fg)]\">{providersEmptyLabel}</p>\n {emptyAction}\n </div>\n ) : null}\n {renderModal()}\n </div>\n )\n },\n)\n\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModelPicker } from './chunk-
|
|
1
|
+
import { ModelPicker } from './chunk-X6L5T65Q.js';
|
|
2
2
|
import { InfoButton } from './chunk-2M4BWGLD.js';
|
|
3
3
|
import { cn } from './chunk-RVVXVTH3.js';
|
|
4
4
|
import * as React from 'react';
|
|
@@ -184,5 +184,5 @@ var TaskAssignmentPicker = React.forwardRef(function TaskAssignmentPicker2({
|
|
|
184
184
|
});
|
|
185
185
|
|
|
186
186
|
export { TaskAssignmentPicker };
|
|
187
|
-
//# sourceMappingURL=chunk-
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
187
|
+
//# sourceMappingURL=chunk-GUFHUKUA.js.map
|
|
188
|
+
//# sourceMappingURL=chunk-GUFHUKUA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/task-assignment-picker/TaskAssignmentPicker.tsx"],"names":["TaskAssignmentPicker"],"mappings":";;;;;;;AAiEA,SAAS,eAAA,CACP,WACA,QAAA,EACuB;AACvB,EAAA,IAAI,CAAC,UAAU,OAAO,SAAA;AACtB,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KACf,KAAA,CAAM,UAAA,KAAe,aAAa,KAAA,CAAM,YAAA,EAAc,QAAA,CAAS,QAAQ,CAAA,IAAK,KAAA,CAAA;AAC9E,EAAA,OAAO,SAAA,CACJ,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,IAClB,GAAG,QAAA;AAAA,IACH,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,OAAO;AAAA,GACxC,CAAE,EACD,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,MAAA,CAAO,SAAS,CAAC,CAAA;AACpD;AAEO,IAAM,oBAAA,GAA6B,KAAA,CAAA,UAAA,CAGxC,SAASA,qBAAAA,CACT;AAAA,EACE,QAAQ,EAAC;AAAA,EACT,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA,GAAiB,UAAA;AAAA,EACjB,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAa,kBAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,EAA0B,aAAA,KAA2B;AACtE,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,IAAA,CAAK,QAAQ,CAAA;AACxD,IAAA,MAAM,YAAA,GAAe,KAAK,aAAA,KAAkB,IAAA;AAC5C,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAU,qKAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4HAAA,EACZ,QAAA,EAAA,CAAA,MAAM;AACN,cAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,GAAA;AAC1B,cAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC,CAAA;AAAA,YAC9C,IAAG,EACL,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACf,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oDAAA,EACV,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,cACC,IAAA,CAAK,8BACJ,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EACV,QAAA,EAAA,IAAA,CAAK,aACR,CAAA,GACE,IAAA;AAAA,cACH,UAAA,GAAa,UAAA,CAAW,IAAI,CAAA,GAAI;AAAA,aAAA,EACjC;AAAA,WAAA,EACF,CAAA;AAAA,UACC,aAAA,IAAiB,iBAAA,mBAChB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2JAAA,EACb,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,OAAA;AAAA,kBACX,KAAA,EAAO,cAAA,GAAiB,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAAA,kBACpC,UAAU,CAAC,OAAA,KAAY,iBAAA,CAAkB,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,kBACzD,QAAA;AAAA,kBACA,SAAA,EAAW,KAAA;AAAA,kBACX,UAAA;AAAA,kBACA,KAAA,EAAO,CAAA,EAAG,cAAc,CAAA,QAAA,EAAM,KAAK,KAAK,CAAA,CAAA;AAAA,kBACxC,SAAA,EAAS,IAAA;AAAA,kBACT,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,cACC,YAAA,mBACC,GAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,CAAA,EAAG,cAAc,CAAA,QAAA,EAAM,KAAK,KAAK,CAAA,CAAA;AAAA,kBACxC,WAAA,EAAa,KAAA;AAAA,kBACb,WAAA,EAAa,KAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA;AAAA,eACH,GACE,IAAA;AAAA,cACH,cAAA,GAAiB,IAAA,CAAK,EAAE,CAAA,mBACvB,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,cAAY,CAAA,EAAG,UAAU,WAAM,cAAc,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA;AAAA,kBAC3D,QAAA;AAAA,kBACA,OAAA,EAAS,MAAM,iBAAA,CAAkB,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,kBAC9C,SAAA,EAAU,0SAAA;AAAA,kBAEV,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,eACpC,GACE;AAAA,aAAA,EACN,CAAA;AAAA,YACC,CAAC,YAAA,mBACA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2JAAA,EACd,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,gBACtC;AAAA,eAAA,EACH,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,OAAA;AAAA,kBACX,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAAA,kBACzB,UAAU,CAAC,OAAA,KAAY,QAAA,CAAS,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,kBAChD,QAAA;AAAA,kBACA,SAAA,EAAW,KAAA;AAAA,kBACX,UAAA;AAAA,kBACA,OAAO,IAAA,CAAK,KAAA;AAAA,kBACZ,SAAA,EAAS,IAAA;AAAA,kBACT,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,cACC,WAAA,mBACC,GAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,CAAA,EAAG,YAAY,CAAA,QAAA,EAAM,KAAK,KAAK,CAAA,CAAA;AAAA,kBACtC,WAAA,EAAa,KAAA;AAAA,kBACb,WAAA,EAAa,KAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA;AAAA,eACH,GACE,IAAA;AAAA,cACH,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,mBACZ,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,YAAA,EAAY,CAAA,EAAG,UAAU,CAAA,QAAA,EAAM,KAAK,KAAK,CAAA,CAAA;AAAA,kBACzC,QAAA;AAAA,kBACA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,kBACrC,SAAA,EAAU,0SAAA;AAAA,kBAEV,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,eACpC,GACE;AAAA,aAAA,EACN,CAAA,GACE;AAAA,WAAA,EACN,CAAA,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,OAAA;AAAA,gBACX,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAAA,gBACzB,UAAU,CAAC,OAAA,KAAY,QAAA,CAAS,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,gBAChD,QAAA;AAAA,gBACA,SAAA,EAAW,KAAA;AAAA,gBACX,UAAA;AAAA,gBACA,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,SAAA,EAAS,IAAA;AAAA,gBACT,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,YACC,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,mBACZ,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,YAAA,EAAY,CAAA,EAAG,UAAU,CAAA,QAAA,EAAM,KAAK,KAAK,CAAA,CAAA;AAAA,gBACzC,QAAA;AAAA,gBACA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,gBACrC,SAAA,EAAU,0SAAA;AAAA,gBAEV,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,aACpC,GACE;AAAA,WAAA,EACN;AAAA;AAAA,OAAA;AAAA,MA5HG,IAAA,CAAK;AAAA,KA8HZ;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAQ,wBAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MAEpD,QAAA,EAAA,QAAA,GACG,SAAS,GAAA,CAAI,CAAC,4BACZ,IAAA,CAAC,KAAA,EAAA,EAAqB,WAAU,qBAAA,EAC9B,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yEAAA,EACV,QAAA,EAAA,OAAA,CAAQ,KAAA,EACX,CAAA;AAAA,UACC,OAAA,CAAQ,8BACP,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,0CAAA,EACV,QAAA,EAAA,OAAA,CAAQ,aACX,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,QACC,QAAQ,KAAA,CAAM,GAAA;AAAA,UAAI,CAAC,IAAA,KAClB,SAAA;AAAA,YACE,IAAA;AAAA,YACA,QAAQ,SAAA,IAAa,OAAA,CAAQ,KAAK,SAAS,CAAA,IAAK,KAAK,aAAA,KAAkB;AAAA;AACzE;AACF,OAAA,EAAA,EAhBQ,OAAA,CAAQ,EAiBlB,CACD,CAAA,GACD,KAAA,CAAM,GAAA;AAAA,QAAI,CAAC,IAAA,KACT,SAAA,CAAU,IAAA,EAAM,OAAA,CAAQ,KAAK,SAAS,CAAA,IAAK,IAAA,CAAK,aAAA,KAAkB,IAAI;AAAA;AACxE;AAAA,GACN;AAEJ,CAAC","file":"chunk-3YIVKKT6.js","sourcesContent":["import * as React from 'react'\nimport { Cpu, Star, X } from 'lucide-react'\nimport { InfoButton } from '../info-button/InfoButton'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport {\n ModelPicker,\n type ModelPickerModel,\n type ModelPickerProvider,\n} from '../model-picker/ModelPicker'\n\nexport interface TaskAssignmentTask {\n id: string\n label: string\n description?: string\n /** Rendered in an icon tile at the row's leading edge. */\n icon?: LucideIcon\n /** When set, the row's picker offers only models matching this capability. */\n requires?: string\n /** Render the fallback-model picker for this row (needs `onAssignSecondary`). */\n secondary?: boolean\n /**\n * The row's assignment itself is a fallback (e.g. an app's global default\n * model): render only the fallback picker, no primary picker. Implies\n * `secondary` — the value round-trips via `secondaryValue`/`onAssignSecondary`.\n */\n secondaryOnly?: boolean\n}\n\nexport interface TaskAssignmentSection {\n id: string\n label: string\n /** Muted context line under the section label (e.g. what the rows mean). */\n description?: string\n /** Show the fallback picker on every task in the section (task-level wins). */\n secondary?: boolean\n tasks: TaskAssignmentTask[]\n}\n\nexport interface TaskAssignmentPickerProps {\n /** Flat rendering; ignored when `sections` is set. */\n tasks?: TaskAssignmentTask[]\n /** Grouped rendering; when set, `tasks` is ignored. */\n sections?: TaskAssignmentSection[]\n providers: ModelPickerProvider[]\n /** Current mapping: taskId → modelId (null/undefined = unassigned). */\n value: Record<string, string | null>\n onAssign: (taskId: string, modelId: string | null) => void\n /** Enables fallback-model rows for tasks flagged (directly or via section). */\n secondaryValue?: Record<string, string | null>\n onAssignSecondary?: (taskId: string, modelId: string | null) => void\n secondaryLabel?: string\n /** Compact badge text for the primary picker (default \"Primary\"). */\n primaryLabel?: string\n /** Info-popup content for the primary picker (rendered when set). */\n primaryInfo?: React.ReactNode\n /** Info-popup content for the fallback picker (rendered when set). */\n fallbackInfo?: React.ReactNode\n /** App-rendered per-row context (inherit notes, spend, badges). */\n renderMeta?: (task: TaskAssignmentTask) => React.ReactNode\n clearLabel?: string\n disabled?: boolean\n className?: string\n}\n\nfunction filterProviders(\n providers: ModelPickerProvider[],\n requires: string | undefined,\n): ModelPickerProvider[] {\n if (!requires) return providers\n const matches = (model: ModelPickerModel) =>\n model.capability === requires || (model.capabilities?.includes(requires) ?? false)\n return providers\n .map((provider) => ({\n ...provider,\n models: provider.models.filter(matches),\n }))\n .filter((provider) => provider.models.length > 0)\n}\n\nexport const TaskAssignmentPicker = React.forwardRef<\n HTMLDivElement,\n TaskAssignmentPickerProps\n>(function TaskAssignmentPicker(\n {\n tasks = [],\n sections,\n providers,\n value,\n onAssign,\n secondaryValue,\n onAssignSecondary,\n secondaryLabel = 'Fallback',\n primaryLabel = 'Primary',\n primaryInfo,\n fallbackInfo,\n renderMeta,\n clearLabel = 'Clear assignment',\n disabled = false,\n className,\n },\n ref,\n) {\n const renderRow = (task: TaskAssignmentTask, showSecondary: boolean) => {\n const catalog = filterProviders(providers, task.requires)\n const fallbackOnly = task.secondaryOnly === true\n return (\n <div\n key={task.id}\n className=\"flex flex-col gap-2 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-muted)] text-[var(--as-muted-fg)]\">\n {(() => {\n const Icon = task.icon ?? Cpu\n return <Icon className=\"size-4\" aria-hidden />\n })()}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-[var(--as-fg)]\">\n {task.label}\n </p>\n {task.description ? (\n <p className=\"truncate text-xs text-[var(--as-muted-fg)]\">\n {task.description}\n </p>\n ) : null}\n {renderMeta ? renderMeta(task) : null}\n </div>\n </div>\n {showSecondary && onAssignSecondary ? (\n <div className=\"flex shrink-0 flex-col items-start gap-2 self-center\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-[var(--as-muted)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--as-muted-fg)]\">\n {secondaryLabel}\n </span>\n <ModelPicker\n providers={catalog}\n value={secondaryValue?.[task.id] ?? ''}\n onChange={(modelId) => onAssignSecondary(task.id, modelId)}\n disabled={disabled}\n clearable={false}\n clearLabel={clearLabel}\n label={`${secondaryLabel} — ${task.label}`}\n hideLabel\n className=\"w-52\"\n />\n {fallbackInfo ? (\n <InfoButton\n label={`${secondaryLabel} — ${task.label}`}\n showOnHover={false}\n openOnHover={false}\n >\n {fallbackInfo}\n </InfoButton>\n ) : null}\n {secondaryValue?.[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${secondaryLabel} ${task.label}`}\n disabled={disabled}\n onClick={() => onAssignSecondary(task.id, null)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n {!fallbackOnly ? (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-[var(--as-muted)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--as-muted-fg)]\">\n <Star className=\"size-2.5\" aria-hidden />\n {primaryLabel}\n </span>\n <ModelPicker\n providers={catalog}\n value={value[task.id] ?? ''}\n onChange={(modelId) => onAssign(task.id, modelId)}\n disabled={disabled}\n clearable={false}\n clearLabel={clearLabel}\n label={task.label}\n hideLabel\n className=\"w-52\"\n />\n {primaryInfo ? (\n <InfoButton\n label={`${primaryLabel} — ${task.label}`}\n showOnHover={false}\n openOnHover={false}\n >\n {primaryInfo}\n </InfoButton>\n ) : null}\n {value[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${task.label}`}\n disabled={disabled}\n onClick={() => onAssign(task.id, null)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"flex items-center gap-1.5 self-center\">\n <ModelPicker\n providers={catalog}\n value={value[task.id] ?? ''}\n onChange={(modelId) => onAssign(task.id, modelId)}\n disabled={disabled}\n clearable={false}\n clearLabel={clearLabel}\n label={task.label}\n hideLabel\n className=\"w-56\"\n />\n {value[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${task.label}`}\n disabled={disabled}\n onClick={() => onAssign(task.id, null)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"task-assignment-picker\"\n className={cn('flex w-full flex-col gap-3', className)}\n >\n {sections\n ? sections.map((section) => (\n <div key={section.id} className=\"flex flex-col gap-2\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {section.label}\n </p>\n {section.description ? (\n <p className=\"mt-0.5 text-xs text-[var(--as-muted-fg)]\">\n {section.description}\n </p>\n ) : null}\n </div>\n {section.tasks.map((task) =>\n renderRow(\n task,\n section.secondary || Boolean(task.secondary) || task.secondaryOnly === true,\n ),\n )}\n </div>\n ))\n : tasks.map((task) =>\n renderRow(task, Boolean(task.secondary) || task.secondaryOnly === true),\n )}\n </div>\n )\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/task-assignment-picker/TaskAssignmentPicker.tsx"],"names":["TaskAssignmentPicker"],"mappings":"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","file":"chunk-GUFHUKUA.js","sourcesContent":["import * as React from 'react'\nimport { Cpu, Star, X } from 'lucide-react'\nimport { InfoButton } from '../info-button/InfoButton'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport {\n ModelPicker,\n type ModelPickerModel,\n type ModelPickerProvider,\n} from '../model-picker/ModelPicker'\n\nexport interface TaskAssignmentTask {\n id: string\n label: string\n description?: string\n /** Rendered in an icon tile at the row's leading edge. */\n icon?: LucideIcon\n /** When set, the row's picker offers only models matching this capability. */\n requires?: string\n /** Render the fallback-model picker for this row (needs `onAssignSecondary`). */\n secondary?: boolean\n /**\n * The row's assignment itself is a fallback (e.g. an app's global default\n * model): render only the fallback picker, no primary picker. Implies\n * `secondary` — the value round-trips via `secondaryValue`/`onAssignSecondary`.\n */\n secondaryOnly?: boolean\n}\n\nexport interface TaskAssignmentSection {\n id: string\n label: string\n /** Muted context line under the section label (e.g. what the rows mean). */\n description?: string\n /** Show the fallback picker on every task in the section (task-level wins). */\n secondary?: boolean\n tasks: TaskAssignmentTask[]\n}\n\nexport interface TaskAssignmentPickerProps {\n /** Flat rendering; ignored when `sections` is set. */\n tasks?: TaskAssignmentTask[]\n /** Grouped rendering; when set, `tasks` is ignored. */\n sections?: TaskAssignmentSection[]\n providers: ModelPickerProvider[]\n /** Current mapping: taskId → modelId (null/undefined = unassigned). */\n value: Record<string, string | null>\n onAssign: (taskId: string, modelId: string | null) => void\n /** Enables fallback-model rows for tasks flagged (directly or via section). */\n secondaryValue?: Record<string, string | null>\n onAssignSecondary?: (taskId: string, modelId: string | null) => void\n secondaryLabel?: string\n /** Compact badge text for the primary picker (default \"Primary\"). */\n primaryLabel?: string\n /** Info-popup content for the primary picker (rendered when set). */\n primaryInfo?: React.ReactNode\n /** Info-popup content for the fallback picker (rendered when set). */\n fallbackInfo?: React.ReactNode\n /** App-rendered per-row context (inherit notes, spend, badges). */\n renderMeta?: (task: TaskAssignmentTask) => React.ReactNode\n clearLabel?: string\n disabled?: boolean\n className?: string\n}\n\nfunction filterProviders(\n providers: ModelPickerProvider[],\n requires: string | undefined,\n): ModelPickerProvider[] {\n if (!requires) return providers\n const matches = (model: ModelPickerModel) =>\n model.capability === requires || (model.capabilities?.includes(requires) ?? false)\n return providers\n .map((provider) => ({\n ...provider,\n models: provider.models.filter(matches),\n }))\n .filter((provider) => provider.models.length > 0)\n}\n\nexport const TaskAssignmentPicker = React.forwardRef<\n HTMLDivElement,\n TaskAssignmentPickerProps\n>(function TaskAssignmentPicker(\n {\n tasks = [],\n sections,\n providers,\n value,\n onAssign,\n secondaryValue,\n onAssignSecondary,\n secondaryLabel = 'Fallback',\n primaryLabel = 'Primary',\n primaryInfo,\n fallbackInfo,\n renderMeta,\n clearLabel = 'Clear assignment',\n disabled = false,\n className,\n },\n ref,\n) {\n const renderRow = (task: TaskAssignmentTask, showSecondary: boolean) => {\n const catalog = filterProviders(providers, task.requires)\n const fallbackOnly = task.secondaryOnly === true\n return (\n <div\n key={task.id}\n className=\"flex flex-col gap-2 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-muted)] text-[var(--as-muted-fg)]\">\n {(() => {\n const Icon = task.icon ?? Cpu\n return <Icon className=\"size-4\" aria-hidden />\n })()}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-[var(--as-fg)]\">\n {task.label}\n </p>\n {task.description ? (\n <p className=\"truncate text-xs text-[var(--as-muted-fg)]\">\n {task.description}\n </p>\n ) : null}\n {renderMeta ? renderMeta(task) : null}\n </div>\n </div>\n {showSecondary && onAssignSecondary ? (\n <div className=\"flex shrink-0 flex-col items-start gap-2 self-center\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-[var(--as-muted)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--as-muted-fg)]\">\n {secondaryLabel}\n </span>\n <ModelPicker\n providers={catalog}\n value={secondaryValue?.[task.id] ?? ''}\n onChange={(modelId) => onAssignSecondary(task.id, modelId)}\n disabled={disabled}\n clearable={false}\n clearLabel={clearLabel}\n label={`${secondaryLabel} — ${task.label}`}\n hideLabel\n className=\"w-52\"\n />\n {fallbackInfo ? (\n <InfoButton\n label={`${secondaryLabel} — ${task.label}`}\n showOnHover={false}\n openOnHover={false}\n >\n {fallbackInfo}\n </InfoButton>\n ) : null}\n {secondaryValue?.[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${secondaryLabel} ${task.label}`}\n disabled={disabled}\n onClick={() => onAssignSecondary(task.id, null)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n {!fallbackOnly ? (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-[var(--as-muted)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--as-muted-fg)]\">\n <Star className=\"size-2.5\" aria-hidden />\n {primaryLabel}\n </span>\n <ModelPicker\n providers={catalog}\n value={value[task.id] ?? ''}\n onChange={(modelId) => onAssign(task.id, modelId)}\n disabled={disabled}\n clearable={false}\n clearLabel={clearLabel}\n label={task.label}\n hideLabel\n className=\"w-52\"\n />\n {primaryInfo ? (\n <InfoButton\n label={`${primaryLabel} — ${task.label}`}\n showOnHover={false}\n openOnHover={false}\n >\n {primaryInfo}\n </InfoButton>\n ) : null}\n {value[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${task.label}`}\n disabled={disabled}\n onClick={() => onAssign(task.id, null)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"flex items-center gap-1.5 self-center\">\n <ModelPicker\n providers={catalog}\n value={value[task.id] ?? ''}\n onChange={(modelId) => onAssign(task.id, modelId)}\n disabled={disabled}\n clearable={false}\n clearLabel={clearLabel}\n label={task.label}\n hideLabel\n className=\"w-56\"\n />\n {value[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${task.label}`}\n disabled={disabled}\n onClick={() => onAssign(task.id, null)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"task-assignment-picker\"\n className={cn('flex w-full flex-col gap-3', className)}\n >\n {sections\n ? sections.map((section) => (\n <div key={section.id} className=\"flex flex-col gap-2\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {section.label}\n </p>\n {section.description ? (\n <p className=\"mt-0.5 text-xs text-[var(--as-muted-fg)]\">\n {section.description}\n </p>\n ) : null}\n </div>\n {section.tasks.map((task) =>\n renderRow(\n task,\n section.secondary || Boolean(task.secondary) || task.secondaryOnly === true,\n ),\n )}\n </div>\n ))\n : tasks.map((task) =>\n renderRow(task, Boolean(task.secondary) || task.secondaryOnly === true),\n )}\n </div>\n )\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-KDILZS2Z.js"}
|
|
@@ -75,5 +75,5 @@ var ConnectionTestRow = React.forwardRef(function ConnectionTestRow2({
|
|
|
75
75
|
});
|
|
76
76
|
|
|
77
77
|
export { ConnectionTestRow };
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-O6BRNGXV.js.map
|
|
79
|
+
//# sourceMappingURL=chunk-O6BRNGXV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/connection-test-row/ConnectionTestRow.tsx"],"names":["ConnectionTestRow"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/connection-test-row/ConnectionTestRow.tsx"],"names":["ConnectionTestRow"],"mappings":"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","file":"chunk-O6BRNGXV.js","sourcesContent":["import * as React from 'react'\nimport { Check, TriangleAlert, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Spinner } from '../spinner/Spinner'\n\nexport type ConnectionTestStatus = 'idle' | 'testing' | 'ok' | 'fail'\n\nexport interface ConnectionTestRowProps {\n status: ConnectionTestStatus\n latencyMs?: number | null\n label?: string\n testLabel?: string\n okLabel?: string\n failLabel?: string\n latencyLabel?: string\n errorMessage?: string | null\n onTest?: () => void\n disabled?: boolean\n /** `row` = standalone bordered row; `inline` = bare, for embedding in app cards. */\n variant?: 'row' | 'inline'\n /** Extra app-side context rendered after the status (e.g. model count). */\n meta?: React.ReactNode\n className?: string\n}\n\n/**\n * Presentational connection-test row (idle/testing/ok/fail + latency).\n * The actual ping is app-side: flip `status` from the test handler.\n */\nexport const ConnectionTestRow = React.forwardRef<\n HTMLDivElement,\n ConnectionTestRowProps\n>(function ConnectionTestRow(\n {\n status,\n latencyMs,\n label = 'Connection',\n testLabel = 'Test',\n okLabel = 'Connected',\n failLabel = 'Failed',\n latencyLabel = 'ms',\n errorMessage,\n onTest,\n disabled = false,\n variant = 'row',\n meta,\n className,\n },\n ref,\n) {\n const state =\n status === 'ok'\n ? { text: okLabel, icon: <Check className=\"size-3.5\" aria-hidden />, tone: 'text-[var(--as-success)]' }\n : status === 'fail'\n ? {\n text: failLabel,\n icon: <TriangleAlert className=\"size-3.5\" aria-hidden />,\n tone: 'text-[var(--as-danger)]',\n }\n : null\n\n return (\n <div\n ref={ref}\n data-as=\"connection-test-row\"\n data-status={status}\n data-variant={variant}\n className={cn(\n 'flex items-center justify-between gap-3 rounded-[var(--as-radius)] px-3 py-2',\n variant === 'row' && 'border border-[var(--as-border)] bg-[var(--as-surface)]',\n variant === 'inline' && 'px-0 py-0',\n className,\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2 text-sm\">\n <span className=\"font-medium text-[var(--as-fg)]\">{label}</span>\n {status === 'testing' ? (\n <span className=\"flex items-center gap-1.5 text-[var(--as-muted-fg)]\" role=\"status\">\n <Spinner size=\"sm\" />\n {testLabel}…\n </span>\n ) : state ? (\n <span className={cn('flex items-center gap-1 font-medium', state.tone)}>\n {state.icon}\n {state.text}\n {status === 'ok' && latencyMs != null ? (\n <span className=\"font-normal text-[var(--as-muted-fg)]\">\n · {latencyMs}\n {latencyLabel}\n </span>\n ) : null}\n </span>\n ) : null}\n {status === 'fail' && errorMessage ? (\n <span className=\"min-w-0 whitespace-pre-wrap break-words text-xs text-[var(--as-danger)]\">\n {errorMessage}\n </span>\n ) : null}\n {meta ? <span className=\"text-xs text-[var(--as-muted-fg)]\">{meta}</span> : null}\n </div>\n {onTest ? (\n <button\n type=\"button\"\n onClick={onTest}\n disabled={disabled || status === 'testing'}\n className=\"shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-2.5 py-1 text-xs font-medium text-[var(--as-fg)] transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n {status === 'fail' ? <X className=\"mr-1 inline size-3\" aria-hidden /> : null}\n {testLabel}\n </button>\n ) : null}\n </div>\n )\n})\n"]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Combobox } from './chunk-SVRCZUNQ.js';
|
|
2
|
+
import { cn } from './chunk-RVVXVTH3.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var ModelPicker = React.forwardRef(
|
|
7
|
+
function ModelPicker2(props, ref) {
|
|
8
|
+
const {
|
|
9
|
+
providers,
|
|
10
|
+
value,
|
|
11
|
+
onChange,
|
|
12
|
+
nullOption,
|
|
13
|
+
placeholder = "Select a model\u2026",
|
|
14
|
+
searchPlaceholder = "Search models\u2026",
|
|
15
|
+
searchLabel,
|
|
16
|
+
emptyLabel,
|
|
17
|
+
loading = false,
|
|
18
|
+
disabled = false,
|
|
19
|
+
clearable = false,
|
|
20
|
+
clearLabel,
|
|
21
|
+
label,
|
|
22
|
+
hideLabel = false,
|
|
23
|
+
error,
|
|
24
|
+
id,
|
|
25
|
+
className,
|
|
26
|
+
panelClassName
|
|
27
|
+
} = props;
|
|
28
|
+
const nullSentinel = React.useId();
|
|
29
|
+
const options = React.useMemo(
|
|
30
|
+
() => {
|
|
31
|
+
const modelOptions = providers.flatMap(
|
|
32
|
+
(provider) => provider.models.map((model) => ({
|
|
33
|
+
value: model.id,
|
|
34
|
+
label: model.name,
|
|
35
|
+
group: provider.name,
|
|
36
|
+
badge: model.capability
|
|
37
|
+
}))
|
|
38
|
+
);
|
|
39
|
+
return nullOption ? [{ value: nullSentinel, label: nullOption.label }, ...modelOptions] : modelOptions;
|
|
40
|
+
},
|
|
41
|
+
[providers, nullOption, nullSentinel]
|
|
42
|
+
);
|
|
43
|
+
const emitChange = (modelId) => {
|
|
44
|
+
if (modelId === null) {
|
|
45
|
+
if (nullOption) {
|
|
46
|
+
onChange(null);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
onChange(modelId);
|
|
51
|
+
};
|
|
52
|
+
const selectedValue = value ? value : nullOption ? nullSentinel : value;
|
|
53
|
+
return /* @__PURE__ */ jsx(
|
|
54
|
+
Combobox,
|
|
55
|
+
{
|
|
56
|
+
ref,
|
|
57
|
+
options,
|
|
58
|
+
value: selectedValue,
|
|
59
|
+
onChange: (next) => emitChange(next === nullSentinel ? null : next),
|
|
60
|
+
placeholder,
|
|
61
|
+
searchPlaceholder,
|
|
62
|
+
searchLabel,
|
|
63
|
+
emptyLabel,
|
|
64
|
+
loading,
|
|
65
|
+
disabled,
|
|
66
|
+
clearable,
|
|
67
|
+
clearLabel,
|
|
68
|
+
label,
|
|
69
|
+
hideLabel,
|
|
70
|
+
error,
|
|
71
|
+
id,
|
|
72
|
+
className: cn("w-full", className),
|
|
73
|
+
panelClassName
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
export { ModelPicker };
|
|
80
|
+
//# sourceMappingURL=chunk-X6L5T65Q.js.map
|
|
81
|
+
//# sourceMappingURL=chunk-X6L5T65Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/model-picker/ModelPicker.tsx"],"names":["ModelPicker"],"mappings":";;;;;AA0DO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CAAY,KAAA,EAAO,GAAA,EAAK;AAC/B,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA,GAAc,sBAAA;AAAA,MACd,iBAAA,GAAoB,qBAAA;AAAA,MACpB,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,GAAU,KAAA;AAAA,MACV,QAAA,GAAW,KAAA;AAAA,MACX,SAAA,GAAY,KAAA;AAAA,MACZ,UAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,GAAY,KAAA;AAAA,MACZ,KAAA;AAAA,MACA,EAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,KAAA;AAKJ,IAAA,MAAM,eAAqB,KAAA,CAAA,KAAA,EAAM;AAEjC,IAAA,MAAM,OAAA,GAAkC,KAAA,CAAA,OAAA;AAAA,MACtC,MAAM;AACJ,QAAA,MAAM,eAAe,SAAA,CAAU,OAAA;AAAA,UAAQ,CAAC,QAAA,KACtC,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,YAC9B,OAAO,KAAA,CAAM,EAAA;AAAA,YACb,OAAO,KAAA,CAAM,IAAA;AAAA,YACb,OAAO,QAAA,CAAS,IAAA;AAAA,YAChB,OAAO,KAAA,CAAM;AAAA,WACf,CAAE;AAAA,SACJ;AAGA,QAAA,OAAO,UAAA,GACH,CAAC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM,EAAG,GAAG,YAAY,CAAA,GAClE,YAAA;AAAA,MACN,CAAA;AAAA,MACA,CAAC,SAAA,EAAW,UAAA,EAAY,YAAY;AAAA,KACtC;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,OAAA,KAAiC;AACnD,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,IAAI,UAAA,EAAY;AAGd,UAAC,SAA8C,IAAI,CAAA;AAAA,QACrD;AACA,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB,CAAA;AAIA,IAAA,MAAM,aAAA,GAAgB,KAAA,GAAQ,KAAA,GAAQ,UAAA,GAAa,YAAA,GAAe,KAAA;AAElE,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACP,UAAU,CAAC,IAAA,KAAS,WAAW,IAAA,KAAS,YAAA,GAAe,OAAO,IAAI,CAAA;AAAA,QAClE,WAAA;AAAA,QACA,iBAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,QACjC;AAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-X6L5T65Q.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport {\n Combobox,\n type ComboboxOption,\n} from '../combobox'\n\nexport interface ModelPickerModel {\n id: string\n name: string\n /** Short capability chip, e.g. `vision` or `tools`. */\n capability?: string\n /** Full capability set, matched by TaskAssignmentPicker `requires`. */\n capabilities?: string[]\n}\n\nexport interface ModelPickerProvider {\n id: string\n name: string\n models: ModelPickerModel[]\n}\n\ninterface ModelPickerBaseProps {\n providers: ModelPickerProvider[]\n value?: string\n placeholder?: string\n searchPlaceholder?: string\n searchLabel?: string\n emptyLabel?: string\n loading?: boolean\n disabled?: boolean\n clearable?: boolean\n clearLabel?: string\n label?: string\n /** Keep the accessible name from `label` but do not render it visibly. */\n hideLabel?: boolean\n error?: string\n id?: string\n className?: string\n panelClassName?: string\n}\n\n/**\n * Discriminated on `nullOption` (plan 29 / ADR-0036): with the labeled\n * null option set, the option list leads with it and `onChange` receives\n * `null` when it is chosen (the inherit state). Without it the contract\n * is unchanged — `onChange` only ever receives model ids.\n */\nexport type ModelPickerProps = ModelPickerBaseProps &\n (\n | { nullOption?: undefined; onChange: (modelId: string) => void }\n | { nullOption: { label: string }; onChange: (modelId: string | null) => void }\n )\n\n/**\n * Grouped, searchable provider → model picker. Presentational: the model\n * list comes in via props, selection goes out via `onChange`.\n */\nexport const ModelPicker = React.forwardRef<HTMLButtonElement, ModelPickerProps>(\n function ModelPicker(props, ref) {\n const {\n providers,\n value,\n onChange,\n nullOption,\n placeholder = 'Select a model…',\n searchPlaceholder = 'Search models…',\n searchLabel,\n emptyLabel,\n loading = false,\n disabled = false,\n clearable = false,\n clearLabel,\n label,\n hideLabel = false,\n error,\n id,\n className,\n panelClassName,\n } = props\n\n // Per-instance sentinel value for the labeled null entry — cannot\n // collide with a real model id. Internal only: it never reaches the\n // DOM or `onChange`.\n const nullSentinel = React.useId()\n\n const options: ComboboxOption[] = React.useMemo(\n () => {\n const modelOptions = providers.flatMap((provider) =>\n provider.models.map((model) => ({\n value: model.id,\n label: model.name,\n group: provider.name,\n badge: model.capability,\n })),\n )\n // The inherit state leads the list (ADR-0036 §4): no group of its\n // own, so it renders above every provider group.\n return nullOption\n ? [{ value: nullSentinel, label: nullOption.label }, ...modelOptions]\n : modelOptions\n },\n [providers, nullOption, nullSentinel],\n )\n\n const emitChange = (modelId: string | null): void => {\n if (modelId === null) {\n if (nullOption) {\n // The props union types `onChange` as null-capable exactly when\n // `nullOption` is set; destructuring loses that correlation.\n (onChange as (modelId: string | null) => void)(null)\n }\n return\n }\n onChange(modelId)\n }\n\n // Empty value + null option = the inherit entry is the selection, so\n // the trigger names it. Without `nullOption` this is `value` verbatim.\n const selectedValue = value ? value : nullOption ? nullSentinel : value\n\n return (\n <Combobox\n ref={ref}\n options={options}\n value={selectedValue}\n onChange={(next) => emitChange(next === nullSentinel ? null : next)}\n placeholder={placeholder}\n searchPlaceholder={searchPlaceholder}\n searchLabel={searchLabel}\n emptyLabel={emptyLabel}\n loading={loading}\n disabled={disabled}\n clearable={clearable}\n clearLabel={clearLabel}\n label={label}\n hideLabel={hideLabel}\n error={error}\n id={id}\n className={cn('w-full', className)}\n panelClassName={panelClassName}\n />\n )\n },\n)\n"]}
|