UNPKG

cranberrry

Version:

AI Agentic UI Framework For Frontend

1 lines 38 kB
{"version":3,"sources":["../core/agentSlice.ts","../core/agentSupervisor.ts","../core/agentTaskManager.ts","../core/store.ts","../provider/CranberrryProvider.tsx","../hooks/useAgentDispatch.ts","../hooks/useAgentSelector.ts","../hooks/useAgentTaskManager.ts","../hooks/useAIAgent.ts","../hooks/useAgentSupervisor.ts","../hooks/useAgentController.ts","../provider/CranberrryRenderer.tsx"],"names":["updateTask","removeTask","getTask","setTaskStatus","globalEmitter","mitt","useRef","useState","useCallback","useEffect","jsx"],"mappings":";;;;;;;;;;AASA,IAAM,YAAA,GAAwB;AAAA,EAC5B,QAAQ,EAAC;AAAA,EACT,OAAO;AACT,CAAA;AAEO,SAAS,cAAA,CACd,KAAA,GAAiB,YAAA,EACjB,MAAA,EACS;AACT,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAQ,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,OAAO,OAAO;AAAA,OAC1C;AAAA,IACF,KAAK,cAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,MAAM,MAAA,CAAO,GAAA;AAAA,UAAI,CAAC,KAAA,KACxB,KAAA,CAAM,EAAA,KAAO,MAAA,CAAO,OAAA,CAAQ,EAAA,GACxB,EAAE,GAAG,KAAA,EAAO,GAAG,MAAA,CAAO,SAAQ,GAC9B;AAAA;AACN,OACF;AAAA,IACF,KAAK,UAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,OAAO,CAAC,GAAG,KAAA,CAAM,KAAA,EAAO,OAAO,OAAO;AAAA,OACxC;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO,MAAM,KAAA,CAAM,GAAA;AAAA,UAAI,CAAC,IAAA,KACtB,IAAA,CAAK,EAAA,KAAO,MAAA,CAAO,OAAA,CAAQ,EAAA,GACvB,EAAE,GAAG,IAAA,EAAM,GAAG,MAAA,CAAO,SAAQ,GAC7B;AAAA;AACN,OACF;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,EAAA,KAAO,MAAA,CAAO,OAAA,CAAQ,EAAE;AAAA,OACnE;AAAA,IACF,KAAK,mBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO,MAAM,KAAA,CAAM,GAAA;AAAA,UAAI,CAAC,SACtB,IAAA,CAAK,EAAA,KAAO,OAAO,OAAA,CAAQ,MAAA,GACvB,EAAE,GAAG,IAAA,EAAM,eAAe,CAAC,GAAI,KAAK,aAAA,IAAiB,IAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAE,GAChF;AAAA;AACN,OACF;AAAA,IACF;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAGO,IAAM,QAAA,GAAW,CAAC,KAAA,MAA8B;AAAA,EACrD,IAAA,EAAM,WAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,WAAA,GAAc,CACzB,KAAA,MACc;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,OAAA,GAAU,CAAC,IAAA,MAA4B;AAAA,EAClD,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,UAAA,GAAa,CACxB,IAAA,MACc;AAAA,EACd,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,UAAA,GAAa,CAAC,EAAA,MAA0B;AAAA,EACnD,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,EAAS,EAAE,EAAA;AACb,CAAA;AAEO,IAAM,eAAA,GAAkB,CAAC,MAAA,EAAgB,KAAA,MAAqC;AAAA,EACnF,IAAA,EAAM,mBAAA;AAAA,EACN,OAAA,EAAS,EAAE,MAAA,EAAQ,KAAA;AACrB,CAAA;AAGO,IAAM,gBAAA,GAAmB,CAC9B,KAAA,EACA,OAAA,KACa;AACb,EAAA,OAAO,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AAC9D;ACnGA,IAAM,aAAA,GAA+B,OAAO,MAAA,KAAW,WAAA,GAAgB,MAAA,CAAe,wBAAyB,MAAA,CAAe,mBAAA,GAAsB,IAAA,EAAK,CAAA,GAAM,IAAA,EAAK;AAS7J,SAAS,qBAAA,CAAsB;AAAA,EACpC,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU;AACZ,CAAA,EAIG;AACD,EAAA,IAAI,MAAA,GAAuB,MAAA;AAC3B,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,aAAA,GAAwB,EAAA;AAC5B,EAAA,IAAI,mBAAqD,EAAC;AAE1D,EAAA,SAAS,SAAA,GAAY;AACnB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,SAAS,UAAU,MAAA,EAAgB;AACjC,IAAA,MAAA,GAAS,SAAA;AACT,IAAA,MAAA,GAAS,EAAA;AACT,IAAA,gBAAA,GAAmB,EAAC;AACpB,IAAA,aAAA,GAAgB,MAAA;AAAA,EAElB;AAEA,EAAA,SAAS,WAAW,KAAA,EAAe;AACjC,IAAA,IAAI,WAAW,SAAA,EAAW;AAC1B,IAAA,MAAA,IAAU,KAAA;AAEV,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAW,SAAA,EAAU,GAAI,SAAA;AACtC,MAAA,MAAM,kBAAkB,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,GAAG,KAAK,GAAG,CAAA;AAClD,MAAA,IAAI,KAAA;AACJ,MAAA,OAAA,CAAQ,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,MAAM,OAAO,IAAA,EAAM;AACtD,QAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,KAAA,KAAU,KAAA,CAAO,KAAK,CAAA,EAAG;AAC1E,UAAA,gBAAA,CAAiB,KAAK,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AACjD,UAAA,SAAA,CAAU,eAAe,GAAG,CAAA;AAAA,QAC9B;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,GAAG,CAAA,eAAA,EAAmB,GAAG,KAAK,GAAG,CAAA;AACnE,MAAA,OAAA,CAAQ,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,MAAM,OAAO,IAAA,EAAM;AACjD,QAAA,IAAI,UAAA,GAAa,MAAM,CAAC,CAAA;AACxB,QAAA,IAAI,OAAA,GAAe,UAAA;AACnB,QAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,UAAA,IAAI;AACF,YAAA,OAAA,GAAU,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,UACjC,CAAA,CAAA,MAAQ;AACN,YAAA,OAAA,GAAU,UAAA;AAAA,UACZ;AAAA,QACF;AAIA,QAAA,MAAM,KAAA,GAAwB;AAAA,UAC5B,IAAI,MAAA,EAAO;AAAA,UACX,GAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB,SAAA;AAAA,UACA,MAAA,EAAQ;AAAA,SACV;AACA,QAAA,SAAA,CAAU,mBAAmB,KAAK,CAAA;AAElC,QAAA,OAAA,CAAQ,KAAK,SAAA,EAAW,EAAE,MAAA,EAAQ,aAAA,EAAe,OAAO,CAAA;AACxD,QAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,EAAE,MAAM,CAAA;AAClF,QAAA,gBAAA,GAAmB,gBAAA,CAAiB,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,CAAA,CAAE,QAAQ,GAAA,IAAO,CAAA,CAAE,KAAA,KAAU,KAAA,CAAO,KAAA,CAAM,CAAA;AAC5F,QAAA,UAAA,CAAW,SAAA,GAAY,CAAA;AACvB,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,UAAA,CAAW,EAAE,CAAA;AAAA,IACf,WAAW,KAAA,KAAU,EAAA,IAAM,MAAA,KAAW,EAAA,IAAM,WAAW,SAAA,EAAW;AAChE,MAAA,MAAA,GAAS,WAAA;AACT,MAAA,SAAA,CAAU,UAAA,IAAa;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,SAAS,QAAA,GAAW;AAClB,IAAA,MAAA,GAAS,WAAA;AACT,IAAA,SAAA,CAAU,UAAA,IAAa;AAAA,EACzB;AAEA,EAAA,SAAS,MAAM,GAAA,EAAa;AAC1B,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,SAAA,CAAU,UAAU,GAAG,CAAA;AAAA,EAEzB;AAEA,EAAA,SAAS,KAAA,GAAQ;AACf,IAAA,MAAA,GAAS,MAAA;AACT,IAAA,MAAA,GAAS,EAAA;AACT,IAAA,gBAAA,GAAmB,EAAC;AAAA,EAEtB;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;AChGO,SAAS,OAAA,CAAQ,OAAiB,EAAA,EAAgC;AACvE,EAAA,OAAO,MAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE,CAAA;AAC5C;AAEO,SAAS,aAAA,CAAc,KAAA,EAAiB,EAAA,EAAY,MAAA,EAAgC;AACzF,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAU,IAAA,CAAK,EAAA,KAAO,EAAA,GAAK,EAAE,GAAG,IAAA,EAAM,MAAA,EAAO,GAAI,IAAK,CAAA;AAC1E;;;AC/BO,SAAS,aAAA,CACd,SACA,cAAA,EACS;AACT,EAAA,IAAI,KAAA,GAAQ,cAAA;AACZ,EAAA,IAAI,YAA0B,EAAC;AAE/B,EAAA,SAAS,QAAA,GAAW;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,SAAS,SAAS,MAAA,EAAkB;AAClC,IAAA,KAAA,GAAQ,OAAA,CAAQ,OAAO,MAAM,CAAA;AAC7B,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,EAAU,CAAA;AAAA,EAC5C;AAEA,EAAA,SAAS,UAAU,QAAA,EAAsB;AACvC,IAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA;AACxC,MAAA,IAAI,KAAA,GAAQ,EAAA,EAAI,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC3C,CAAA;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AC7BA,IAAM,sBAAA,GAAyB,cAA8B,IAAI,CAAA;AACjE,sBAAA,CAAuB,WAAA,GAAc,wBAAA;AAE9B,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,2BACG,sBAAA,CAAuB,QAAA,EAAvB,EAAgC,KAAA,EAAO,OACrC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,KAAA,GAAQ,WAAW,sBAAsB,CAAA;AAC/C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,KAAA;AACT;;;ACxBO,SAAS,aAAA,GAAgB;AAC9B,EAAA,OAAO,oBAAmB,CAAE,QAAA;AAC9B;ACAO,SAAS,cAAiB,QAAA,EAAoC;AACnE,EAAA,MAAM,QAAQ,kBAAA,EAAmB;AACjC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAAS,MAAM,QAAA,CAAS,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AACzE,EAAA,MAAM,cAAA,GAAiB,OAAO,QAAQ,CAAA;AAEtC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAS,eAAA,GAAkB;AACzB,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,QAAA,EAAU,CAAA;AAC7C,MAAA,IAAI,WAAA,KAAgB,eAAe,OAAA,EAAS;AAC1C,QAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AACzB,QAAA,WAAA,CAAY,WAAW,CAAA;AAAA,MACzB;AAAA,IACF;AACA,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,SAAA,CAAU,eAAe,CAAA;AACnD,IAAA,OAAO,WAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAEpB,EAAA,OAAO,QAAA;AACT;AAEO,IAAM,gBAAA,GAAmB;;;ACbzB,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,CAAC,KAAA,KAA+B,MAAM,KAAK,CAAA;AACvE,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,CAAC,OAAA,EAAiB,OAAe,IAAA,KAA+B;AAC7F,IAAA,MAAM,EAAA,GAAK,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AACjD,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,QAAA;AAAA,MACE,OAAA,CAAc;AAAA,QACZ,EAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAW,GAAA;AAAA,QACX,SAAA,EAAW,GAAA;AAAA,QACX;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAMA,WAAAA,GAAa,WAAA,CAAY,CAAC,EAAA,EAAY,OAAA,KAA6B;AACvE,IAAA,QAAA,CAAS,WAAiB,EAAE,EAAA,EAAI,GAAG,OAAA,EAAS,CAAC,CAAA;AAAA,EAC/C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAMC,WAAAA,GAAa,WAAA,CAAY,CAAC,EAAA,KAAe;AAC7C,IAAA,QAAA,CAAS,UAAA,CAAiB,EAAE,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAMC,QAAAA,GAAU,WAAA,CAAY,CAAC,EAAA,KAAe;AAC1C,IAAA,OAAO,MAAM,IAAA,CAAK,CAAC,IAAA,KAAiB,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,EACpD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAMC,cAAAA,GAAgB,WAAA,CAAY,CAAC,EAAA,EAAY,MAAA,KAAyB;AACtE,IAAA,QAAA,CAAS,UAAA,CAAiB,EAAE,EAAA,EAAI,MAAA,EAAQ,WAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAC,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,qBAAA,GAAwB,WAAA,CAAY,CAAC,MAAA,EAAgB,KAAA,KAA0B;AACnF,IAAA,QAAA,CAAS,eAAA,CAAsB,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,EAC/C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,EAAAH,WAAAA;AAAA,IACA,UAAA,EAAAC,WAAAA;AAAA,IACA,OAAA,EAAAC,QAAAA;AAAA,IACA,aAAA,EAAAC,cAAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACzDO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,CAAA,KAAA,KAAS,KAAA,CAAM,MAAM,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KACpB,MAAA,CAAO,KAAK,CAAA,KAAA,KAAS,KAAA,CAAM,OAAO,EAAE,CAAA;AAEtC,EAAA,OAAO,EAAE,QAAQ,YAAA,EAAa;AAChC;ACDA,IAAMC,cAAAA,GAA+B,OAAO,MAAA,KAAW,WAAA,GAAgB,MAAA,CAAe,wBAAyB,MAAA,CAAe,mBAAA,GAAsBC,IAAAA,EAAK,CAAA,GAAMA,IAAAA,EAAK;AAE7J,SAAS,mBAAA,CAAoB;AAAA,EAClC,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAUD;AACZ,CAAA,EAIG;AACD,EAAA,MAAM,aAAA,GAAgBE,OAAwD,IAAI,CAAA;AAClF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAuB,MAAM,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAEtD,EAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,IAAA,aAAA,CAAc,UAAU,qBAAA,CAAsB,EAAE,SAAA,EAAW,UAAA,EAAY,SAAS,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,SAAA,GAAYC,WAAAA,CAAY,CAAC,MAAA,KAAmB;AAChD,IAAA,aAAA,CAAc,OAAA,EAAS,UAAU,MAAM,CAAA;AACvC,IAAA,SAAA,CAAU,SAAS,CAAA;AACnB,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,WAAAA,CAAY,CAAC,KAAA,KAAkB;AAChD,IAAA,aAAA,CAAc,OAAA,EAAS,WAAW,KAAK,CAAA;AAAA,EACzC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAWA,YAAY,MAAM;AACjC,IAAA,aAAA,CAAc,SAAS,QAAA,EAAS;AAChC,IAAA,SAAA,CAAU,WAAW,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgBA,WAAAA,CAAY,CAAC,GAAA,KAAgB;AACjD,IAAA,aAAA,CAAc,OAAA,EAAS,MAAM,GAAG,CAAA;AAChC,IAAA,SAAA,CAAU,QAAQ,CAAA;AAClB,IAAA,QAAA,CAAS,GAAG,CAAA;AAAA,EACd,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM;AAC9B,IAAA,aAAA,CAAc,SAAS,KAAA,EAAM;AAC7B,IAAA,SAAA,CAAU,MAAM,CAAA;AAChB,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;ACpDA,IAAMJ,cAAAA,GAA+B,OAAO,MAAA,KAAW,WAAA,GAAgB,MAAA,CAAe,wBAAyB,MAAA,CAAe,mBAAA,GAAsBC,IAAAA,EAAK,CAAA,GAAMA,IAAAA,EAAK;AAE7J,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIE,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,gBAAA,GAAmBD,OAAsB,IAAI,CAAA;AACnD,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,MAAM,OAAA,GAAUF,cAAAA;AAEhB,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,EAAAJ,WAAAA;AAAA,IACA,UAAA,EAAAC,WAAAA;AAAA,IACA,OAAA,EAAAC,QAAAA;AAAA,IACA,aAAA,EAAAC,cAAAA;AAAA,IACA;AAAA;AAAA,MAEE,gBAAA,EAAiB;AAGrB,EAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAG3B,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,GAAG,SAAA;AAAA,IACH,YAAY,MAAM;AAGhB,MAAA,IAAG,iBAAiB,OAAA,EAAS;AAC3B,QAAAH,WAAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,EAAE,MAAA,EAAQ,aAAa,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,MACrF;AACA,MAAA,QAAA,CAAS,YAAY,EAAE,EAAA,EAAI,SAAS,MAAA,EAAQ,KAAA,EAAO,CAAC,CAAA;AACpD,MAAA,SAAA,CAAU,UAAA,IAAa;AAAA,IACzB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAgB;AACxB,MAAA,IAAG,iBAAiB,OAAA,EAAS;AAC3B,QAAAA,WAAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAU,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,MAClF;AACA,MAAA,QAAA,CAAS,YAAY,EAAE,EAAA,EAAI,SAAS,MAAA,EAAQ,KAAA,EAAO,CAAC,CAAA;AACpD,MAAA,SAAA,CAAU,UAAU,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AAGA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIO,QAAAA,CAA2B,EAAE,CAAA;AAIvE,EAAAE,UAAU,MAAM;AACd,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,gBAAA,CAAiBP,QAAAA,CAAQ,aAAa,CAAA,EAAG,aAAA,IAAiB,EAAE,CAAA;AAAA,IAC9D,CAAA,MAAO;AACL,MAAA,gBAAA,CAAiB,EAAE,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzB,EAAA,MAAM,aAAa,mBAAA,CAAoB;AAAA,IACrC,SAAA,EAAW;AAAA,MACT,GAAG,gBAAA;AAAA,MACH,gBAAA,EAAkB,CAAC,KAAA,KAA0B;AAC3C,QAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,UAAA,qBAAA,CAAsB,gBAAA,CAAiB,SAAS,KAAK,CAAA;AAAA,QACvD;AACA,QAAA,SAAA,CAAU,mBAAmB,KAAK,CAAA;AAAA,MACpC,CAAA;AAAA,MACA,YAAA,EAAc,CAAC,GAAA,KAAgB;AAC7B,QAAA,SAAA,CAAU,eAAe,GAAG,CAAA;AAAA,MAC9B;AAAA,KAEF;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,UAAA,EAAY,UAAU,KAAA,EAAO,eAAA,EAAiB,aAAA,EAAe,KAAA,EAAM,GAAI,UAAA;AAElG,EAAA,MAAM,YAAY,MAAA,KAAW,SAAA;AAE7B,EAAA,MAAM,cAAA,GAAiBM,WAAAA;AAAA,IACrB,CAAC,WAAmB,OAAA,KAAkC;AACpD,MAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACpD,MAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,MAAM,SAAA,GAAY,UAAA,CAAW,OAAA,EAAS,SAAA,EAAW,OAAO,CAAA;AAExD,MAAA,gBAAA,CAAiB,SAAS,CAAA;AAC1B,MAAA,gBAAA,CAAiB,OAAA,GAAU,SAAA;AAC3B,MAAA,QAAA,CAAS,YAAY,EAAE,EAAA,EAAI,SAAS,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAEnD,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,UAAA,EAAY,UAAA,EAAY,SAAS,QAAQ;AAAA,GACvD;AAEA,EAAA,MAAM,sBAAA,GAAyBA,WAAAA;AAAA,IAC7B,CAAC,MAAA,KAAmB;AAClB,MAAA,MAAM,YAAA,GAAeN,SAAQ,MAAM,CAAA;AAEnC,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,MAAM,CAAA,UAAA,CAAY,CAAA;AAAA,MACpD;AAEA,MAAA,IAAI,YAAA,CAAa,YAAY,OAAA,EAAS;AACpC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,MAAM,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,MACtE;AAGA,MAAA,IAAI,YAAA,CAAa,WAAW,WAAA,EAAa;AACvC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,MAAM,CAAA,2CAAA,CAA6C,CAAA;AAAA,MAC7E;AAEA,MAAA,IAAI,YAAA,CAAa,WAAW,QAAA,EAAU;AAEpC,QAAAF,WAAAA,CAAW,QAAQ,EAAE,MAAA,EAAQ,WAAW,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,MACjE;AAEA,MAAA,SAAA,CAAU,aAAa,KAAK,CAAA;AAC5B,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,MAAA,gBAAA,CAAiB,OAAA,GAAU,MAAA;AAC3B,MAAA,QAAA,CAAS,YAAY,EAAE,EAAA,EAAI,SAAS,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAGnD,MAAA,SAAA,CAAU,MAAM,CAAA;AAEhB,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,CAACE,QAAAA,EAAS,OAAA,EAASF,WAAAA,EAAY,WAAW,QAAQ;AAAA,GACpD;AAGA,EAAA,MAAM,iBAAA,GAAoBQ,WAAAA,CAAY,CAAC,GAAA,KAAgB;AACrD,IAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,IAAA,SAAA,CAAU,UAAU,GAAG,CAAA;AACvB,IAAA,aAAA,CAAc,GAAG,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,SAAA,EAAW,aAAa,CAAC,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAO,YAAA,IAAgB,eAAA;AAAA,IACvB,cAAA;AAAA,IACA,sBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA,EAAAR,WAAAA;AAAA,IACA,UAAA,EAAAC,WAAAA;AAAA,IACA,OAAA,EAAAC,QAAAA;AAAA,IACA,aAAA,EAAAC,cAAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;AC5KA,IAAMC,cAAAA,GAA+B,OAAO,MAAA,KAAW,WAAA,GAAgB,MAAA,CAAe,wBAAyB,MAAA,CAAe,mBAAA,GAAsBC,IAAAA,EAAK,CAAA,GAAMA,IAAAA,EAAK;AAM7J,IAAM,kBAAA,GAAwD,CAAC,EAAE,MAAA,EAAO,KAAM;AAEnF,EAAA,MAAM,aAAA,GAAgB,gBAAA;AAAA,IACpB,CAAC,KAAA,KAAgB,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,EAAA,KAAO,MAAM,CAAA,EAAG,aAAA,IAAiB;AAAC,GACpF;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIE,SAA2B,aAAa,CAAA;AAE5E,EAAAE,UAAU,MAAM;AACd,IAAA,aAAA,CAAc,aAAa,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAAA,UAAU,MAAM;AACd,IAAA,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,cAAA,EAAgB,OAAM,EAA8C;AAE/F,MAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,QAAA,aAAA,CAAc,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,MAC1C;AAAA,IACF;AACA,IAAAL,cAAAA,CAAc,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA;AACrC,IAAA,OAAO,MAAM;AACX,MAAAA,cAAAA,CAAc,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,IACxC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACEM,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,KAAU;AACzB,IAAA,MAAM,iBAAiB,KAAA,CAAM,SAAA;AAC7B,IAAA,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAA8B,IAAI,KAAA,CAAM,OAAA,EAAA,EAApB,MAAM,EAAuB,CAAA;AAAA,EAC3D,CAAC,CAAA,EACH,CAAA;AAEJ","file":"index.mjs","sourcesContent":["'use client'\nimport {\n type CBState,\n type CBAction,\n type CBAgent,\n type CBTask,\n type CBMessageBlock,\n} from '../types';\n\nconst initialState: CBState = {\n agents: [],\n tasks: [],\n};\n\nexport function CBAgentReducer(\n state: CBState = initialState,\n action: CBAction\n): CBState {\n switch (action.type) {\n case 'ADD_AGENT':\n return {\n ...state,\n agents: [...state.agents, action.payload],\n };\n case 'UPDATE_AGENT':\n return {\n ...state,\n agents: state.agents.map((agent) =>\n agent.id === action.payload.id\n ? { ...agent, ...action.payload }\n : agent\n ),\n };\n case 'ADD_TASK':\n return {\n ...state,\n tasks: [...state.tasks, action.payload],\n };\n case 'UPDATE_TASK':\n return {\n ...state,\n tasks: state.tasks.map((task) =>\n task.id === action.payload.id\n ? { ...task, ...action.payload }\n : task\n ),\n };\n case 'REMOVE_TASK':\n return {\n ...state,\n tasks: state.tasks.filter((task) => task.id !== action.payload.id),\n };\n case 'ADD_MESSAGE_BLOCK':\n return {\n ...state,\n tasks: state.tasks.map((task) =>\n task.id === action.payload.taskId\n ? { ...task, messageBlocks: [...(task.messageBlocks || []), action.payload.block] }\n : task\n ),\n };\n default:\n return state;\n }\n}\n\n// Action creators (for internal use)\nexport const addAgent = (agent: CBAgent): CBAction => ({\n type: 'ADD_AGENT',\n payload: agent,\n});\n\nexport const updateAgent = (\n agent: Partial<CBAgent> & { id: string }\n): CBAction => ({\n type: 'UPDATE_AGENT',\n payload: agent,\n});\n\nexport const addTask = (task: CBTask): CBAction => ({\n type: 'ADD_TASK',\n payload: task,\n});\n\nexport const updateTask = (\n task: Partial<CBTask> & { id: string }\n): CBAction => ({\n type: 'UPDATE_TASK',\n payload: task,\n});\n\nexport const removeTask = (id: string): CBAction => ({\n type: 'REMOVE_TASK',\n payload: { id },\n});\n\nexport const addMessageBlock = (taskId: string, block: CBMessageBlock): CBAction => ({\n type: 'ADD_MESSAGE_BLOCK',\n payload: { taskId, block },\n});\n\n// Utility to get tasks for a specific agent\nexport const getTasksForAgent = (\n state: CBState,\n agentId: string\n): CBTask[] => {\n return state.tasks.filter((task) => task.agentId === agentId);\n}; ","'use client'\nimport type { CBTaskStatus } from \"../types\";\nimport type { CBTagConfig, CBMessageBlock } from \"../types\";\nimport {nanoid} from \"nanoid\"\nimport type { Emitter } from \"mitt\";\nimport mitt from \"mitt\";\n\n// Use the same global emitter as CranberrryRenderer\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport type CBBlockSupervisorCallbacks = {\n onBlockFound?: (tag: string) => void;\n onBlockProcessed?: (block: CBMessageBlock) => void;\n onComplete?: () => void;\n onError?: (err: string) => void;\n};\n\nexport function createAgentSupervisor({\n callbacks,\n tagConfigs,\n emitter = globalEmitter,\n}: {\n callbacks: CBBlockSupervisorCallbacks;\n tagConfigs: CBTagConfig[];\n emitter?: Emitter<any>;\n}) {\n let status: CBTaskStatus = \"idle\";\n let buffer = \"\";\n let currentTaskId: string = \"\";\n let openTagPositions: { tag: string; index: number }[] = [];\n\n function getStatus() {\n return status;\n }\n\n function startTask(taskId: string) {\n status = \"ongoing\";\n buffer = \"\";\n openTagPositions = [];\n currentTaskId = taskId;\n // No-op: tagConfigs are static for this supervisor\n }\n\n function parseChunk(chunk: string) {\n if (status !== \"ongoing\") return;\n buffer += chunk;\n\n let foundBlock = false;\n for (const tagConfig of tagConfigs) {\n const { tag, processor, component } = tagConfig;\n const openingTagRegex = new RegExp(`<${tag}>`, \"g\");\n let match: RegExpExecArray | null;\n while ((match = openingTagRegex.exec(buffer)) !== null) {\n if (!openTagPositions.some(t => t.tag === tag && t.index === match!.index)) {\n openTagPositions.push({ tag, index: match.index });\n callbacks.onBlockFound?.(tag);\n }\n }\n // Process complete blocks\n const blockRegex = new RegExp(`<${tag}>([\\\\s\\\\S]*?)<\\/${tag}>`, \"g\");\n while ((match = blockRegex.exec(buffer)) !== null) {\n let rawContent = match[1];\n let content: any = rawContent;\n if (processor === 'JSON') {\n try {\n content = JSON.parse(rawContent);\n } catch {\n content = rawContent;\n }\n }\n\n \n // Compose message block\n const block: CBMessageBlock = {\n id: nanoid(),\n tag,\n content,\n createdAt: Date.now(),\n component,\n taskId: currentTaskId,\n };\n callbacks.onBlockProcessed?.(block);\n\n emitter.emit('message', { taskId: currentTaskId, block });\n buffer = buffer.slice(0, match.index) + buffer.slice(match.index + match[0].length);\n openTagPositions = openTagPositions.filter(t => !(t.tag === tag && t.index === match!.index));\n blockRegex.lastIndex = 0;\n foundBlock = true;\n }\n }\n // If a block was processed, recursively process the buffer for more blocks\n if (foundBlock) {\n parseChunk(\"\");\n } else if (chunk === \"\" && buffer === \"\" && status === \"ongoing\") {\n status = \"completed\";\n callbacks.onComplete?.();\n }\n }\n\n function complete() {\n status = \"completed\";\n callbacks.onComplete?.();\n }\n\n function error(err: string) {\n status = \"failed\";\n callbacks.onError?.(err);\n \n }\n\n function reset() {\n status = \"idle\";\n buffer = \"\";\n openTagPositions = [];\n \n }\n\n return {\n getStatus,\n startTask,\n parseChunk,\n complete,\n error,\n reset,\n };\n} ","'use client'\nimport { type CBTask, type CBTaskStatus } from \"../types\";\nimport type { CBMessageBlock } from \"../types\";\n\nexport function createTask(tasks: CBTask[], agentId: string, input: string, meta?: Record<string, any>): CBTask[] {\n const id = Math.random().toString(36).substr(2, 9);\n const now = Date.now();\n return [\n ...tasks,\n {\n id,\n agentId,\n input,\n status: \"ongoing\",\n createdAt: now,\n updatedAt: now,\n meta,\n },\n ];\n}\n\nexport function updateTask(tasks: CBTask[], id: string, updates: Partial<CBTask>): CBTask[] {\n return tasks.map((task) => (task.id === id ? { ...task, ...updates } : task));\n}\n\nexport function removeTask(tasks: CBTask[], id: string): CBTask[] {\n return tasks.filter((task) => task.id !== id);\n}\n\nexport function getTask(tasks: CBTask[], id: string): CBTask | undefined {\n return tasks.find((task) => task.id === id);\n}\n\nexport function setTaskStatus(tasks: CBTask[], id: string, status: CBTaskStatus): CBTask[] {\n return tasks.map((task) => (task.id === id ? { ...task, status } : task));\n}\n\nexport function addMessageBlock(tasks: CBTask[], taskId: string, block: CBMessageBlock): CBTask[] {\n return tasks.map((task) =>\n task.id === taskId\n ? { ...task, messageBlocks: [...(task.messageBlocks || []), block] }\n : task\n );\n}\n\nexport function getMessageBlocks(tasks: CBTask[], taskId: string): CBMessageBlock[] {\n const task = tasks.find((t) => t.id === taskId);\n return task?.messageBlocks || [];\n} ","'use client'\nimport { type CBListener, type CBStore } from '../types';\nimport { type CBState, type CBAction } from '../types';\n\nexport function createCBStore(\n reducer: (state: CBState, action: CBAction) => CBState,\n preloadedState: CBState\n): CBStore {\n let state = preloadedState;\n let listeners: CBListener[] = [];\n\n function getState() {\n return state;\n }\n\n function dispatch(action: CBAction) {\n state = reducer(state, action);\n listeners.forEach((listener) => listener());\n }\n\n function subscribe(listener: CBListener) {\n listeners.push(listener);\n return () => {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n };\n }\n\n return {\n getState,\n dispatch,\n subscribe,\n };\n} ","'use client'\nimport { type ReactNode, createContext, useContext } from 'react';\nimport type { CBStore } from '../types';\n\nconst CranberrryStoreContext = createContext<CBStore | null>(null);\nCranberrryStoreContext.displayName = 'CranberrryStoreContext';\n\nexport function CranberrryProvider({\n store,\n children,\n}: {\n store: CBStore;\n children: ReactNode;\n}) {\n return (\n <CranberrryStoreContext.Provider value={store}>\n {children}\n </CranberrryStoreContext.Provider>\n );\n}\n\nexport function useCranberrryStore() {\n const store = useContext(CranberrryStoreContext);\n if (!store) {\n throw new Error('useCranberrryStore must be used within a CranberrryProvider');\n }\n return store;\n} ","'use client'\nimport { useCranberrryStore } from '../provider/CranberrryProvider';\n\nexport function useCBDispatch() {\n return useCranberrryStore().dispatch;\n} ","'use client'\nimport { useEffect, useRef, useState } from 'react';\nimport { useCranberrryStore } from '../provider/CranberrryProvider';\nimport { type CBState } from '../types';\n\nexport function useCBSelector<T>(selector: (state: CBState) => T): T {\n const store = useCranberrryStore();\n const [selected, setSelected] = useState(() => selector(store.getState()));\n const latestSelected = useRef(selected);\n\n useEffect(() => {\n function checkForUpdates() {\n const newSelected = selector(store.getState());\n if (newSelected !== latestSelected.current) {\n latestSelected.current = newSelected;\n setSelected(newSelected);\n }\n }\n const unsubscribe = store.subscribe(checkForUpdates);\n return unsubscribe;\n }, [store, selector]);\n\n return selected;\n}\n\nexport const useAgentSelector = useCBSelector; ","'use client'\nimport { useCallback } from \"react\";\nimport { type CBMessageBlock, type CBTask, type CBTaskStatus } from \"../types\";\nimport { useCBDispatch } from \"./useAgentDispatch\";\nimport { useCBSelector } from \"./useAgentSelector\";\nimport {\n addTask as addTaskAction,\n updateTask as updateTaskAction,\n removeTask as removeTaskAction,\n addMessageBlock as addMessageBlockAction,\n} from \"../core/agentSlice\";\n\nexport function useCBTaskManager() {\n const dispatch = useCBDispatch();\n const tasks = useCBSelector((state: { tasks: CBTask[] }) => state.tasks);\n const createTask = useCallback((agentId: string, input: string, meta?: Record<string, any>) => {\n const id = Math.random().toString(36).substr(2, 9);\n const now = Date.now();\n dispatch(\n addTaskAction({\n id,\n agentId,\n input,\n status: \"ongoing\",\n createdAt: now,\n updatedAt: now,\n meta,\n })\n );\n return id;\n }, [dispatch]);\n\n const updateTask = useCallback((id: string, updates: Partial<CBTask>) => {\n dispatch(updateTaskAction({ id, ...updates }));\n }, [dispatch]);\n\n const removeTask = useCallback((id: string) => {\n dispatch(removeTaskAction(id));\n }, [dispatch]);\n\n const getTask = useCallback((id: string) => {\n return tasks.find((task: CBTask) => task.id === id);\n }, [tasks]);\n\n const setTaskStatus = useCallback((id: string, status: CBTaskStatus) => {\n dispatch(updateTaskAction({ id, status, updatedAt: Date.now() }));\n }, [dispatch]);\n\n const addMessageBlockToTask = useCallback((taskId: string, block: CBMessageBlock) => {\n dispatch(addMessageBlockAction(taskId, block));\n }, [dispatch]);\n\n return {\n tasks,\n createTask,\n updateTask,\n removeTask,\n getTask,\n setTaskStatus,\n addMessageBlockToTask,\n };\n} ","'use client'\nimport { useCBSelector } from './useAgentSelector';\nimport { type CBAgent } from '../types';\n\nexport function useCBAgent() {\n const agents = useCBSelector(state => state.agents);\n const getAgentById = (id: string): CBAgent | undefined =>\n agents.find(agent => agent.id === id);\n\n return { agents, getAgentById };\n} ","'use client'\nimport { useRef, useState, useCallback } from \"react\";\nimport { createAgentSupervisor, type CBBlockSupervisorCallbacks } from \"../core/agentSupervisor\";\nimport type { CBTaskStatus } from \"../types\";\nimport type { CBTagConfig } from \"../types\";\nimport type { Emitter } from \"mitt\";\nimport mitt from \"mitt\";\n\n// Use the same global emitter as CranberrryRenderer\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport function useCBTaskSupervisor({\n callbacks,\n tagConfigs,\n emitter = globalEmitter,\n}: {\n callbacks: CBBlockSupervisorCallbacks;\n tagConfigs: CBTagConfig[];\n emitter?: Emitter<any>;\n}) {\n const supervisorRef = useRef<ReturnType<typeof createAgentSupervisor> | null>(null);\n const [status, setStatus] = useState<CBTaskStatus>(\"idle\");\n const [error, setError] = useState<string | null>(null);\n\n if (!supervisorRef.current) {\n supervisorRef.current = createAgentSupervisor({ callbacks, tagConfigs, emitter });\n }\n\n const startTask = useCallback((taskId: string) => {\n supervisorRef.current?.startTask(taskId);\n setStatus(\"ongoing\");\n setError(null);\n }, []);\n\n const parseChunk = useCallback((chunk: string) => {\n supervisorRef.current?.parseChunk(chunk);\n }, []);\n\n const complete = useCallback(() => {\n supervisorRef.current?.complete();\n setStatus(\"completed\");\n }, []);\n\n const errorCallback = useCallback((err: string) => {\n supervisorRef.current?.error(err);\n setStatus(\"failed\");\n setError(err);\n }, []);\n\n const reset = useCallback(() => {\n supervisorRef.current?.reset();\n setStatus(\"idle\");\n setError(null);\n }, []);\n\n return {\n status,\n startTask,\n parseChunk,\n complete,\n error: error,\n errorCallback,\n reset,\n };\n} ","'use client'\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useCBTaskSupervisor } from \"./useAgentSupervisor\";\nimport { useCBTaskManager } from \"./useAgentTaskManager\";\nimport { useCBDispatch } from \"./useAgentDispatch\";\nimport { updateAgent } from \"../core/agentSlice\";\nimport type { CBBlockSupervisorCallbacks } from \"../core/agentSupervisor\";\nimport type { CBTagConfig, CBMessageBlock } from \"../types\";\nimport mitt from \"mitt\";\nimport type { Emitter } from \"mitt\";\n\n// Use the same global emitter as CranberrryRenderer\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport function useCBController({\n agentId,\n tagConfigs,\n callbacks,\n}: {\n agentId: string;\n tagConfigs: CBTagConfig[];\n callbacks: CBBlockSupervisorCallbacks;\n}) {\n const [prompt, setPrompt] = useState(\"\");\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [currentTaskId, setCurrentTaskId] = useState<string | null>(null);\n const currentTaskIdRef = useRef<string | null>(null);\n const dispatch = useCBDispatch();\n const emitter = globalEmitter;\n\n const {\n tasks,\n createTask,\n updateTask,\n removeTask,\n getTask,\n setTaskStatus,\n addMessageBlockToTask,\n // addMessageBlock, getMessageBlocks imported above\n } = useCBTaskManager();\n\n // Always keep the ref in sync with state\n currentTaskIdRef.current = currentTaskId;\n\n // Wrap onComplete and onError to update agent status and task status robustly\n const wrappedCallbacks = {\n ...callbacks,\n onComplete: () => {\n \n\n if(currentTaskIdRef.current) {\n updateTask(currentTaskIdRef.current, { status: 'completed', updatedAt: Date.now() })\n }\n dispatch(updateAgent({ id: agentId, isBusy: false }));\n callbacks.onComplete?.();\n },\n onError: (err: string) => {\n if(currentTaskIdRef.current) {\n updateTask(currentTaskIdRef.current, { status: 'failed', updatedAt: Date.now() })\n }\n dispatch(updateAgent({ id: agentId, isBusy: false }));\n callbacks.onError?.(err);\n },\n };\n\n // Internal message management\n const [messageBlocks, setMessageBlocks] = useState<CBMessageBlock[]>([]);\n\n // Keep messageBlocks in sync with the store for the current task\n // This ensures that if the store updates (e.g., from another tab or event), we always show the latest\n useEffect(() => {\n if (currentTaskId) {\n setMessageBlocks(getTask(currentTaskId)?.messageBlocks || []);\n } else {\n setMessageBlocks([]);\n }\n }, [currentTaskId, tasks]);\n\n const supervisor = useCBTaskSupervisor({\n callbacks: {\n ...wrappedCallbacks,\n onBlockProcessed: (block: CBMessageBlock) => {\n if (currentTaskIdRef.current) {\n addMessageBlockToTask(currentTaskIdRef.current, block);\n }\n callbacks.onBlockProcessed?.(block);\n },\n onBlockFound: (tag: string) => {\n callbacks.onBlockFound?.(tag);\n },\n \n },\n tagConfigs,\n emitter,\n });\n const { status, startTask, parseChunk, complete, error: supervisorError, errorCallback, reset } = supervisor;\n\n const isRunning = status === \"ongoing\";\n\n const startAgentTask = useCallback(\n (newPrompt: string, newMeta?: Record<string, any>) => {\n if (!newPrompt) throw new Error('Prompt is required');\n setPrompt(newPrompt);\n \n setErrorMessage(null);\n const newTaskId = createTask(agentId, newPrompt, newMeta);\n \n setCurrentTaskId(newTaskId);\n currentTaskIdRef.current = newTaskId;\n dispatch(updateAgent({ id: agentId, isBusy: true }));\n // messageBlocks will be reset by useEffect when currentTaskId changes\n startTask(newTaskId);\n return newTaskId;\n },\n [startTask, createTask, tagConfigs, agentId, dispatch]\n );\n\n const startExistingAgentTask = useCallback(\n (taskId: string) => {\n const existingTask = getTask(taskId);\n \n if (!existingTask) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n\n if (existingTask.agentId !== agentId) {\n throw new Error(`Task ${taskId} does not belong to agent ${agentId}`);\n }\n\n // Check if task is in a valid state to resume\n if (existingTask.status === 'completed') {\n throw new Error(`Task ${taskId} is already completed and cannot be resumed`);\n }\n\n if (existingTask.status === 'failed') {\n // Reset failed task to ongoing status\n updateTask(taskId, { status: 'ongoing', updatedAt: Date.now() });\n }\n\n setPrompt(existingTask.input);\n setErrorMessage(null);\n setCurrentTaskId(taskId);\n currentTaskIdRef.current = taskId;\n dispatch(updateAgent({ id: agentId, isBusy: true }));\n \n // Start the task in the supervisor\n startTask(taskId);\n \n return taskId;\n },\n [getTask, agentId, updateTask, startTask, dispatch]\n );\n\n // Expose the error function for simulation\n const completeWithError = useCallback((err: string) => {\n setErrorMessage(err);\n callbacks.onError?.(err);\n errorCallback(err);\n }, [callbacks, errorCallback]);\n\n return {\n prompt,\n setPrompt,\n isRunning,\n error: errorMessage || supervisorError,\n startAgentTask,\n startExistingAgentTask,\n parseChunk,\n complete,\n reset,\n status,\n tasks,\n updateTask,\n removeTask,\n getTask,\n setTaskStatus,\n completeWithError,\n messageBlocks,\n emitter,\n };\n} ","'use client'\nimport React, { useEffect, useState } from 'react';\nimport { useAgentSelector } from '../hooks/useAgentSelector';\nimport type { CBMessageBlock } from '../types';\nimport mitt from 'mitt';\nimport type { Emitter } from 'mitt';\n\n// Use the same global emitter as everywhere else\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport interface CranberrryRendererProps {\n taskId: string;\n}\n\nexport const CranberrryRenderer: React.FC<CranberrryRendererProps> = ({ taskId }) => {\n // Get message blocks from the store (if available)\n const messageBlocks = useAgentSelector(\n (state: any) => (state.tasks.find((t: any) => t.id === taskId)?.messageBlocks || [])\n );\n const [liveBlocks, setLiveBlocks] = useState<CBMessageBlock[]>(messageBlocks);\n\n useEffect(() => {\n setLiveBlocks(messageBlocks);\n }, [messageBlocks]);\n\n useEffect(() => {\n function onMessage({ taskId: incomingTaskId, block }: { taskId: string; block: CBMessageBlock }) {\n \n if (incomingTaskId === taskId) {\n setLiveBlocks((prev) => [...prev, block]);\n }\n }\n globalEmitter.on('message', onMessage);\n return () => {\n globalEmitter.off('message', onMessage);\n };\n }, [taskId]);\n\n return (\n <div className=\"cranberrry-renderer-messages space-y-2\">\n {liveBlocks.map((block) => {\n const BlockComponent = block.component;\n return <BlockComponent key={block.id} ai={block.content} />;\n })}\n </div>\n );\n}; "]}